summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documents/要素.xlsxbin8841 -> 36707 bytes
-rw-r--r--Documents/设定/概念.txt11
-rw-r--r--ThirdParty/CsvHelper-master/.editorconfig124
-rw-r--r--ThirdParty/CsvHelper-master/.gitignore11
-rw-r--r--ThirdParty/CsvHelper-master/CsvHelper.sln146
-rw-r--r--ThirdParty/CsvHelper-master/CsvHelper.sln.licenseheader32
-rw-r--r--ThirdParty/CsvHelper-master/CsvHelper.v3.ncrunchsolution7
-rw-r--r--ThirdParty/CsvHelper-master/CsvHelperDependencies.linq8
-rw-r--r--ThirdParty/CsvHelper-master/GitVersion.yml11
-rw-r--r--ThirdParty/CsvHelper-master/LICENSE.txt104
-rw-r--r--ThirdParty/CsvHelper-master/README.markdown77
-rw-r--r--ThirdParty/CsvHelper-master/Unity Build.bat5
-rw-r--r--ThirdParty/CsvHelper-master/build.cmd7
-rw-r--r--ThirdParty/CsvHelper-master/build.ps169
-rw-r--r--ThirdParty/CsvHelper-master/build.sh62
-rw-r--r--ThirdParty/CsvHelper-master/build/.editorconfig11
-rw-r--r--ThirdParty/CsvHelper-master/build/Build.cs156
-rw-r--r--ThirdParty/CsvHelper-master/build/Configuration.cs16
-rw-r--r--ThirdParty/CsvHelper-master/build/Directory.Build.props8
-rw-r--r--ThirdParty/CsvHelper-master/build/Directory.Build.targets8
-rw-r--r--ThirdParty/CsvHelper-master/build/_build.csproj42
-rw-r--r--ThirdParty/CsvHelper-master/build/_build.csproj.DotSettings23
-rw-r--r--ThirdParty/CsvHelper-master/build/_build.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/ConsoleHost.cs117
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/CsvHelper.DocsGenerator.csproj17
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/EncodingType.cs14
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Extensions.cs459
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs94
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs18
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs100
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/AssemblyGenerator.cs22
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGenerator.cs42
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGeneratorFactory.cs22
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/NamespaceGenerator.cs50
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/TypeGenerator.cs118
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/AssemblyInfo.cs30
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/ConstructorInfo.cs20
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/Info.cs105
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/MethodInfo.cs25
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/NamespaceInfo.cs49
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/PropertyInfo.cs24
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/TypeInfo.cs93
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/LinkGenerator.cs19
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Program.cs18
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs110
-rw-r--r--ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/XmlDocs.cs12
-rw-r--r--ThirdParty/CsvHelper-master/docs/.nojekyll0
-rw-r--r--ThirdParty/CsvHelper-master/docs/api/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/browserconfig.xml11
-rw-r--r--ThirdParty/CsvHelper-master/docs/change-log/index.html1808
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/attributes/index.html472
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/auto-mapping/index.html462
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/constant-value/index.html464
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/ignoring-properties/index.html463
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/index.html489
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/inline-type-conversion/index.html515
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-alternate-names/index.html462
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-index/index.html465
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-name/index.html462
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-duplicate-names/index.html464
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-properties/index.html462
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/optional-maps/index.html464
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/type-conversion/index.html482
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/validation/index.html463
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/configuration/index.html450
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/csvdatareader/index.html460
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/index.html465
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/prerequisites/index.html454
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/prerequisites/reading-and-writing-files/index.html480
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/prerequisites/streams/index.html453
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/prerequisites/using-and-dispose/index.html444
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/enumerate-class-records/index.html457
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/get-anonymous-type-records/index.html451
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/get-class-records/index.html452
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/get-dynamic-records/index.html446
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/index.html469
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/reading-by-hand/index.html463
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-data-sets/index.html514
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-record-types/index.html497
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/type-conversion/custom-type-converter/index.html480
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/type-conversion/index.html596
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/type-conversion/type-converter-options/index.html450
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/writing/appending-to-an-existing-file/index.html476
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/writing/index.html483
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/writing/write-anonymous-type-objects/index.html450
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/writing/write-class-objects/index.html456
-rw-r--r--ThirdParty/CsvHelper-master/docs/examples/writing/write-dynamic-objects/index.html454
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/android-icon-144x144.pngbin0 -> 2931 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/android-icon-192x192.pngbin0 -> 2944 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/android-icon-36x36.pngbin0 -> 1243 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/android-icon-48x48.pngbin0 -> 1425 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/android-icon-72x72.pngbin0 -> 1784 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/android-icon-96x96.pngbin0 -> 2116 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-114x114.pngbin0 -> 2447 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-120x120.pngbin0 -> 2498 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-144x144.pngbin0 -> 2931 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-152x152.pngbin0 -> 3040 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-180x180.pngbin0 -> 3523 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-57x57.pngbin0 -> 1525 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-60x60.pngbin0 -> 1577 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-72x72.pngbin0 -> 1784 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-76x76.pngbin0 -> 1813 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon-precomposed.pngbin0 -> 3516 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/apple-icon.pngbin0 -> 3516 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/favicon-16x16.pngbin0 -> 974 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/favicon-32x32.pngbin0 -> 1208 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/favicon-96x96.pngbin0 -> 2116 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/favicon.icobin0 -> 1150 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/ms-icon-144x144.pngbin0 -> 2931 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/ms-icon-150x150.pngbin0 -> 3011 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/ms-icon-310x310.pngbin0 -> 7118 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/favicons/ms-icon-70x70.pngbin0 -> 1698 bytes
-rw-r--r--ThirdParty/CsvHelper-master/docs/getting-started/index.html372
-rw-r--r--ThirdParty/CsvHelper-master/docs/google6ad86f23ff698b61.html99
-rw-r--r--ThirdParty/CsvHelper-master/docs/images/logo.svg89
-rw-r--r--ThirdParty/CsvHelper-master/docs/index.html427
-rw-r--r--ThirdParty/CsvHelper-master/docs/manifest.json41
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/index.html134
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v10/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v11/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v12/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v13/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v14/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v15/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v16/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v17/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v18/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v19/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v2/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v20/index.html344
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v21/index.html116
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v22/index.html138
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v23/index.html295
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v24/index.html116
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v25/index.html255
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v26/index.html267
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v27/index.html131
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v28/index.html131
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v29/index.html122
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v3/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v30/index.html121
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v4/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v5/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v6/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v7/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v8/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/migration/v9/index.html102
-rw-r--r--ThirdParty/CsvHelper-master/docs/robots.txt1
-rw-r--r--ThirdParty/CsvHelper-master/docs/scripts/header.js6
-rw-r--r--ThirdParty/CsvHelper-master/docs/scripts/sidebar.js41
-rw-r--r--ThirdParty/CsvHelper-master/docs/sitemap.xml1
-rw-r--r--ThirdParty/CsvHelper-master/docs/styles/base.css3
-rw-r--r--ThirdParty/CsvHelper-master/docs/styles/content.css1
-rw-r--r--ThirdParty/CsvHelper-master/docs/styles/header.css1
-rw-r--r--ThirdParty/CsvHelper-master/docs/styles/index.css21
-rw-r--r--ThirdParty/CsvHelper-master/docs/styles/sidebar.css13
-rw-r--r--ThirdParty/CsvHelper-master/global.json6
-rw-r--r--ThirdParty/CsvHelper-master/logo/CSV Helper logo.ai4390
-rw-r--r--ThirdParty/CsvHelper-master/logo/CSV Helper logo.eps6154
-rw-r--r--ThirdParty/CsvHelper-master/logo/CSV Helper logo.pngbin0 -> 41981 bytes
-rw-r--r--ThirdParty/CsvHelper-master/logo/CSV Helper logo.svg89
-rw-r--r--ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.jpgbin0 -> 32752 bytes
-rw-r--r--ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.pngbin0 -> 7614 bytes
-rw-r--r--ThirdParty/CsvHelper-master/logo/Comma-Small.jpgbin0 -> 3552 bytes
-rw-r--r--ThirdParty/CsvHelper-master/logo/Comma-Small.pngbin0 -> 728 bytes
-rw-r--r--ThirdParty/CsvHelper-master/logo/Comma.ai4401
-rw-r--r--ThirdParty/CsvHelper-master/logo/Comma.eps5836
-rw-r--r--ThirdParty/CsvHelper-master/logo/Comma.svg31
-rw-r--r--ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.csproj20
-rw-r--r--ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/Program.cs409
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/.gitignore1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.csproj16
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/Program.cs21
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/README.md7
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/TocItem.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/.nojekyll0
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Index.cshtml330
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Footer.cshtml3
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Header.cshtml35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Layout.cshtml87
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Metadata.cshtml11
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_SideBar.cshtml9
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItem.cshtml16
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItems.cshtml11
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewImports.cshtml10
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewStart.cshtml3
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_manifest.yml1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/api/Index.md1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/browserconfig.xml11
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md1862
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/_directory.json160
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/attributes/index.md49
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/auto-mapping/index.md39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/constant-value/index.md41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/ignoring-properties/index.md40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/index.md16
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/inline-type-conversion/index.md100
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-alternate-names/index.md39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-index/index.md41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-name/index.md39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-duplicate-names/index.md41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-properties/index.md39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/optional-maps/index.md42
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/type-conversion/index.md59
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/validation/index.md40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/index.md7
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/csvdatareader/index.md38
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/index.md10
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/index.md9
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/reading-and-writing-files/index.md65
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/streams/index.md29
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/using-and-dispose/index.md21
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/enumerate-class-records/index.md34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-anonymous-type-records/index.md28
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-class-records/index.md27
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-dynamic-records/index.md23
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/index.md11
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-by-hand/index.md40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-data-sets/index.md90
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-record-types/index.md74
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/custom-type-converter/index.md58
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/index.md40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/type-converter-options/index.md27
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/appending-to-an-existing-file/index.md52
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/index.md51
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-anonymous-type-objects/index.md26
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-class-objects/index.md32
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-dynamic-objects/index.md30
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-144x144.pngbin0 -> 2931 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-192x192.pngbin0 -> 2944 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-36x36.pngbin0 -> 1243 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-48x48.pngbin0 -> 1425 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-72x72.pngbin0 -> 1784 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-96x96.pngbin0 -> 2116 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-114x114.pngbin0 -> 2447 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-120x120.pngbin0 -> 2498 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-144x144.pngbin0 -> 2931 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-152x152.pngbin0 -> 3040 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-180x180.pngbin0 -> 3523 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-57x57.pngbin0 -> 1525 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-60x60.pngbin0 -> 1577 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-72x72.pngbin0 -> 1784 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-76x76.pngbin0 -> 1813 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-precomposed.pngbin0 -> 3516 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon.pngbin0 -> 3516 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-16x16.pngbin0 -> 974 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-32x32.pngbin0 -> 1208 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-96x96.pngbin0 -> 2116 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon.icobin0 -> 1150 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-144x144.pngbin0 -> 2931 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-150x150.pngbin0 -> 3011 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-310x310.pngbin0 -> 7118 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-70x70.pngbin0 -> 1698 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/_index.json24
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/index.md294
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/google6ad86f23ff698b61.html1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/images/logo.svg89
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/manifest.json41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/index.md33
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v10/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v11/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v12/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v13/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v14/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v15/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v16/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v17/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v18/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v19/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v2/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v20/index.md322
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v21/index.md19
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v22/index.md51
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v23/index.md228
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v24/index.md21
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v25/index.md187
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v26/index.md202
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v27/index.md36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v28/index.md38
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v29/index.md29
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v3/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v30/index.md31
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v4/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v5/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v6/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v7/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v8/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v9/index.md2
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/robots.txt1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/header.js6
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/sidebar.js41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/base.scss10
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/bulma.scss121
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/content.scss4
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/header.scss9
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/index.scss8
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/sidebar.scss53
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css11624
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css.map1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.min.css1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css11624
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css.map1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.min.css1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper.Website/settings.yml1
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ArrayHelper.cs78
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/BadDataException.cs67
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/AllowCommentsAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanFalseValuesAttribute.cs52
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanTrueValuesAttribute.cs52
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BufferSizeAttribute.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CacheFieldsAttribute.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CommentAttribute.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ConstantAttribute.cs47
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CountBytesAttribute.cs45
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CultureInfoAttribute.cs46
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DateTimeStylesAttribute.cs44
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DefaultAttribute.cs45
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DelimiterAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectColumnCountChangesAttribute.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterValuesAttribute.cs37
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EncodingAttribute.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EnumIgnoreCaseAttribute.cs41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EscapeAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ExceptionMessagesContainRawDataAttribute.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/FormatAttribute.cs50
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HasHeaderRecordAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HeaderPrefixAttribute.cs73
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IClassMapper.cs19
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberMapper.cs20
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberReferenceMapper.cs20
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterMapper.cs24
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterReferenceMapper.cs24
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreAttribute.cs41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBaseAttribute.cs20
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBlankLinesAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreReferencesAttribute.cs41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IncludePrivateMembersAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IndexAttribute.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionCharactersAttribute.cs37
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionEscapeCharacterAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionOptionsAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/LineBreakInQuotedFieldIsBadDataAttribute.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MaxFieldSizeAttribute.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MemberTypesAttribute.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ModeAttribute.cs38
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameAttribute.cs77
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameIndexAttribute.cs45
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NewLineAttribute.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NullValuesAttribute.cs52
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NumberStylesAttribute.cs44
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/OptionalAttribute.cs27
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ProcessFieldBufferSizeAttribute.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/QuoteAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TrimOptionsAttribute.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TypeConverterAttribute.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/UseNewObjectForNullReferenceMembersAttribute.cs47
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/WhiteSpaceCharsAttribute.cs41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap.cs648
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs432
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapCollection.cs188
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap`1.cs112
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationException.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationFunctions.cs267
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/CsvConfiguration.cs240
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/DefaultClassMap`1.cs15
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IParserConfiguration.cs176
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IReaderConfiguration.cs111
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IWriterConfiguration.cs168
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/InjectionOptions.cs31
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap.cs244
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapCollection.cs247
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapComparer.cs74
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapData.cs167
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapTypeConverterOption.cs167
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap`1.cs270
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberNameCollection.cs98
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMap.cs68
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapCollection.cs164
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapData.cs68
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberTypes.cs32
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMap.cs212
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapData.cs106
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapTypeConverterOption.cs160
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMap.cs66
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMapData.cs70
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/TrimOptions.cs30
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvContext.cs202
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvDataReader.cs387
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.csproj92
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net45.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net47.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net5.0.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net50.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net6.0.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net60.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.0.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.1.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.snkbin0 -> 596 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelperException.cs144
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvMode.cs43
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvParser.cs1194
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvReader.cs1419
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/CsvWriter.cs842
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/BadDataFound.cs52
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertFromString.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertToString.cs41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetConstructor.cs38
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDelimiter.cs44
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDynamicPropertyName.cs44
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/HeaderValidated.cs46
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/MissingFieldFound.cs53
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/PrepareHeaderForMatch.cs47
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReadingExceptionOccurred.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReferenceHeaderPrefix.cs44
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldQuote.cs51
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldSkipRecord.cs37
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldUseConstructorParameters.cs38
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/Validate.cs53
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/EnumerableExtensions.cs27
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordCreator.cs61
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordWriter.cs75
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpandoObjectRecordWriter.cs49
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpressionManager.cs490
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordCreator.cs66
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordWriter.cs124
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordCreator.cs49
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordWriter.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreator.cs107
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreatorFactory.cs51
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordHydrator.cs126
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordManager.cs80
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriter.cs109
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriterFactory.cs61
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Factory.cs108
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/FieldCache.cs137
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/FieldValidationException.cs55
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/HeaderValidationException.cs55
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IFactory.cs85
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IObjectResolver.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IParser.cs89
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IReader.cs126
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IReaderRow.cs428
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IWriter.cs86
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/IWriterRow.cs135
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Icon.pngbin0 -> 728 bytes
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/InvalidHeader.cs28
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/LinkedListExtensions.cs29
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/MaxFieldSizeException.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/MissingFieldException.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ObjectCreator.cs218
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ObjectResolver.cs143
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ParserException.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/Properties/AssemblyInfo.cs13
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ReaderException.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionExtensions.cs155
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionHelper.cs204
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ArrayConverter.cs73
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BigIntegerConverter.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BooleanConverter.cs72
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverter.cs126
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverterOptions.cs44
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteConverter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CharConverter.cs36
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionConverterFactory.cs175
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionGenericConverter.cs64
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateOnlyConverter.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeConverter.cs43
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeOffsetConverter.cs43
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DecimalConverter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DefaultTypeConverter.cs62
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DoubleConverter.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverter.cs121
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverterFactory.cs35
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumerableConverter.cs48
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/GuidConverter.cs32
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryConverter.cs65
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryGenericConverter.cs46
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableConverter.cs85
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableGenericConverter.cs65
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverter.cs32
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverterFactory.cs33
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int16Converter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int32Converter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int64Converter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverter.cs94
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverterFactory.cs28
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SByteConverter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SingleConverter.cs57
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/StringConverter.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeOnlyConverter.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeSpanConverter.cs41
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverter.cs52
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterCache.cs242
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterException.cs132
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptions.cs157
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptionsCache.cs108
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt16Converter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt32Converter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt64Converter.cs34
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UriConverter.cs40
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/ValidationException.cs39
-rw-r--r--ThirdParty/CsvHelper-master/src/CsvHelper/WriterException.cs39
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ArrayHelperTests.cs79
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/ReadingTests.cs103
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/WritingTests.cs119
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/AutoMappingTests.cs394
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/BaseClassTests.cs52
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/CircularReferenceTests.cs98
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/ContextTests.cs36
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/IgnoreReferencesTests.cs62
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/MappingTypeOfTypeTest.cs41
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/StructTests.cs76
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ClassMapOrderingTests.cs110
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs335
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/CsvClassMapCollectionTests.cs70
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvClassMappingAutoMapTests.cs61
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvConfigurationTests.cs158
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.csproj63
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net452.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net47.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net50.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp2.1.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp3.1.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.v3.ncrunchproject5
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.snkbin0 -> 596 bytes
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserConstructorTests.cs28
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserDelimiterTests.cs344
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserRawRecordTests.cs143
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserTests.cs1370
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderConstructorTests.cs52
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDefaultValueTests.cs106
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDynamicMappingsTests.cs63
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderErrorMessageTests.cs258
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderMappingTests.cs355
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingPrefixTests.cs92
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingTests.cs113
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderSubClassingTests.cs40
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderTests.cs1166
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterBoxedTypesTests.cs65
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterConstructorTests.cs28
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterFormatTests.cs201
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterMappingTests.cs350
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingPrefixTests.cs106
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingTests.cs156
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterSubClassingTests.cs42
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterTests.cs1030
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs229
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DataTableTests/CsvDataReaderTests.cs509
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Defaults/WritingDefaultsTests.cs118
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DisposeTests.cs55
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DynamicProxyTests.cs65
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/EnumerateRecordsTests.cs181
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionMessageTests.cs208
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionTests.cs52
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/HeaderValidationTests.cs280
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue1954.cs178
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue920.cs59
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/LocalCultureTests.cs72
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MapPropertyMultipleTimesTests.cs87
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MappingInheritedClassTests.cs42
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/AllowCommentsTests.cs29
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BooleanValuesTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BufferSizeTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CacheFieldsTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CommentTests.cs28
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ConstantTests.cs50
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CountBytesTest.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DateTimeStylesTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DefaultTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DelimiterTests.cs32
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectColumnCountChangesTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterValuesTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EncodingTests.cs33
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EnumIgnoreCaseTests.cs91
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EscapeTests.cs32
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ExceptionMessagesContainRawDataTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/FormatTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HasHeaderRecordTests.cs30
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HeaderPrefixTests.cs205
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBaseTests.cs71
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBlankLinesTests.cs36
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreReferencesTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreTests.cs93
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IncludePrivateMembersTests.cs29
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IndexTests.cs42
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionCharactersTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionEscapeCharacterTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionOptionsTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/LineBreakInQuotedFieldIsBadDataTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MaxFieldSizeTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MemberTypesTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ModeTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameIndexTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameTests.cs38
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NewLineTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NullValuesTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NumberStylesTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/OptionalTests.cs41
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ProcessFieldBufferSizeTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/QuoteTests.cs29
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ReferenceTests.cs43
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TrimOptionsTests.cs31
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TypeConverterTests.cs125
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/UseNewObjectForNullReferenceMembersTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/WhiteSpaceCharsTests.cs20
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesAttributeTests.cs110
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesMapTests.cs125
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesAttributeTests.cs110
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesMapTests.cs125
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantAttributeTests.cs109
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantMapTests.cs193
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoAttributeTests.cs119
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoMapTests.cs160
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesAttributeTests.cs109
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesMapTests.cs152
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultAttributeTests.cs108
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultMapTests.cs152
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/EnumIgnoreCaseTests.cs113
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatAttributeTests.cs111
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatMapTests.cs156
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixAttributeTests.cs111
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixMapTests.cs6
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreAttributeTests.cs106
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreMapTests.cs150
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexAttributeTests.cs106
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexMapTests.cs149
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameAttributeTests.cs85
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexAttributeTests.cs85
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexMapTests.cs126
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameMapTests.cs126
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesAttributeTests.cs107
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesMapTests.cs122
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesAttributeTests.cs108
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesMapTests.cs151
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalAttributeTests.cs106
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalMapTests.cs150
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterAttributeTests.cs115
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterMapTests.cs158
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/CsvClassMappingTests.cs239
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/FieldMappingTests.cs397
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/HiddenBaseMembersTests.cs117
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/IgnoreHeaderWhiteSpaceTests.cs52
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MapConstructorTests.cs42
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MappingWithNoHeaderTests.cs243
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/OptionalTests.cs220
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Property/ConstantTests.cs74
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ReferenceConstructorArgsTests.cs50
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/RuntimeMapping.cs199
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/SubPropertyMappingTests.cs127
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/DynamicObjectMock.cs31
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMock.cs96
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMockTests.cs37
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ReaderRowMock.cs226
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectCreatorTests.cs351
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/Issue1073.cs72
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/ResolveSingleTypeTests.cs59
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BadDataTests.cs153
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingEscapeAndQuoteTests.cs38
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingLineEndingTests.cs98
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingNewLineEndingTests.cs102
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ByteCountTests.cs137
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CharCountTests.cs124
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CommentTests.cs125
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CrTests.cs235
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CsvModeTests.cs109
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DelimiterTests.cs81
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DetectDelimiterTests.cs286
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EndBufferTests.cs79
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EscapeCharacterTests.cs110
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ExcelCompatibilityTests.cs123
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/FieldCacheTests.cs94
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/MaxFieldSizeTests.cs50
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/NewLineTests.cs176
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/RefillingTextReaderTests.cs59
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/TrimTests.cs1206
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/AnonymousTypesTests.cs707
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/BadDataTests.cs64
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstantTests.cs114
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstructorParametersTests.cs220
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DetectColumnCountChangesTests.cs199
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DynamicTests.cs126
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/EmptyTextReaderTests.cs25
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleGetRecordsTests.cs60
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleHeadersTests.cs114
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/NullableValuesInEmptyColumnsInputTests.cs224
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/PrivateSettersInParentTests.cs90
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ReadHeaderTests.cs166
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ShouldSkipRecordTests.cs87
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/TryGetTests.cs228
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ValidateTests.cs197
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/YieldTests.cs142
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingClassMapTests.cs169
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingIndexTests.cs69
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reflection/GetMemberExpressionStackTests.cs56
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringBuilder.cs34
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringWriter.cs28
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ArrayConverterTests.cs211
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BigIntegerConverterTests.cs40
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BooleanConverterTests.cs166
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteArrayConverterTests.cs139
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteConverterTests.cs47
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CharConverterTests.cs50
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CollectionGenericConverterTests.cs101
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateOnlyConverterTests.cs59
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeConverterTests.cs76
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeOffsetConverterTests.cs75
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultConverterTests.cs81
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultValueTests.cs67
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DoubleConverterTests.cs39
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumConverterTests.cs367
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumerableConverterTests.cs32
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryConverterTests.cs303
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryGenericConverterTests.cs198
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableConverterTests.cs261
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableGenericConverterTests.cs265
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/SingleConverterTests.cs39
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeOnlyConverterTests.cs59
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeSpanConverterTests.cs54
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterCacheTests.cs243
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsFactoryTests.cs211
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsTests.cs110
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterTests.cs51
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/UriConverterTests.cs106
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/AnonymousTypesTests.cs34
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ConstantTests.cs126
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/CsvModeTests.cs145
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/DynamicTests.cs218
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/FieldTypeTests.cs87
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IAsyncEnumerableTests.cs50
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IgnoreTests.cs51
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/InterfaceTests.cs90
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleFieldsFromOnePropertyTests.cs79
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleHeadersTest.cs84
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NewLineTests.cs92
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NoPropertyMappingTests.cs218
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/SanitizationTests.cs422
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ShouldQuoteTests.cs187
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/TrimTests.cs41
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteBufferTests.cs36
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteCustomEscapeTests.cs63
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteNullTests.cs84
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/XunitException.cs19
-rw-r--r--ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/xunit.runner.json4
-rw-r--r--marching/Assets/Bundle/metadata/default_stats.csv25
-rw-r--r--marching/Assets/Scenes/Test.unity44
-rw-r--r--marching/Assets/Scripts/Buffs/Buff.cs4
-rw-r--r--marching/Assets/Scripts/Buffs/BuffDef.cs14
-rw-r--r--marching/Assets/Scripts/Buffs/BuffMetadata.cs22
-rw-r--r--marching/Assets/Scripts/Buffs/BuffMetadata.cs.meta (renamed from marching/Assets/Scripts/Buffs/BuffDef.cs.meta)0
-rw-r--r--marching/Assets/Scripts/Data.meta8
-rw-r--r--marching/Assets/Scripts/Data/DataManager.cs37
-rw-r--r--marching/Assets/Scripts/Data/DataManager.cs.meta11
-rw-r--r--marching/Assets/Scripts/Managers/ResourceManager.cs32
-rw-r--r--marching/Assets/Scripts/Managers/ResourceManager.cs.meta11
-rw-r--r--marching/Assets/Scripts/Physics/PhysicsManager.cs1
-rw-r--r--marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs1
-rw-r--r--marching/Assets/Scripts/Stats/CharacterStatsBase.cs54
-rw-r--r--marching/Assets/Scripts/Stats/CharacterStatsDef.cs13
-rw-r--r--marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs23
-rw-r--r--marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs.meta (renamed from marching/Assets/Scripts/Stats/CharacterStatsDef.cs.meta)0
-rw-r--r--marching/Assets/Scripts/Tests.meta8
-rw-r--r--marching/Assets/Scripts/Tests/TestCSV.cs57
-rw-r--r--marching/Assets/Scripts/Tests/TestCSV.cs.meta11
-rw-r--r--marching/Assets/Scripts/Unit/Characters/CharacterInfo.cs93
-rw-r--r--marching/Assets/StreamingAssets/languages.meta8
-rw-r--r--marching/Assets/StreamingAssets/languages/de.csv0
-rw-r--r--marching/Assets/StreamingAssets/languages/de.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/languages/en.csv0
-rw-r--r--marching/Assets/StreamingAssets/languages/en.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/languages/fr.csv0
-rw-r--r--marching/Assets/StreamingAssets/languages/fr.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/languages/jp.csv0
-rw-r--r--marching/Assets/StreamingAssets/languages/jp.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/languages/kr.csv0
-rw-r--r--marching/Assets/StreamingAssets/languages/kr.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/languages/ru.csv0
-rw-r--r--marching/Assets/StreamingAssets/languages/ru.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/languages/zh_cn.csv2
-rw-r--r--marching/Assets/StreamingAssets/languages/zh_cn.csv.meta7
-rw-r--r--marching/Assets/StreamingAssets/setting.json0
-rw-r--r--marching/Assets/StreamingAssets/setting.json.meta7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser.meta8
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/.gitignore15
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser.meta8
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln22
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj13
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta8
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs181
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta11
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs9
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta11
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs24
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta11
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/LICENSE35
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/LICENSE.meta7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/README.md102
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/README.md.meta7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/RELEASE.md14
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/Tests.meta8
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/Unity Examples.meta8
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/global.json7
-rw-r--r--marching/Assets/ThirdParty/CSV-Parser/global.json.meta7
809 files changed, 127843 insertions, 66 deletions
diff --git a/Documents/要素.xlsx b/Documents/要素.xlsx
index 9e4539d..3023d08 100644
--- a/Documents/要素.xlsx
+++ b/Documents/要素.xlsx
Binary files differ
diff --git a/Documents/设定/概念.txt b/Documents/设定/概念.txt
new file mode 100644
index 0000000..29e6cec
--- /dev/null
+++ b/Documents/设定/概念.txt
@@ -0,0 +1,11 @@
+遗物
+
+神器
+
+法器
+
+圣物
+
+遗迹
+
+
diff --git a/ThirdParty/CsvHelper-master/.editorconfig b/ThirdParty/CsvHelper-master/.editorconfig
new file mode 100644
index 0000000..350d40c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/.editorconfig
@@ -0,0 +1,124 @@
+# EditorConfig: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+[*.cs]
+indent_style = tab
+end_of_line = crlf
+trim_trailing_whitespace = true
+insert_final_newline = true
+csharp_indent_labels = one_less_than_current
+csharp_space_around_binary_operators = before_and_after
+csharp_using_directive_placement = outside_namespace:silent
+csharp_prefer_simple_using_statement = true:suggestion
+csharp_prefer_braces = true:silent
+csharp_style_namespace_declarations = block_scoped:silent
+csharp_style_expression_bodied_methods = false:silent
+csharp_style_expression_bodied_constructors = false:silent
+csharp_style_expression_bodied_operators = false:silent
+csharp_style_expression_bodied_properties = true:silent
+csharp_style_expression_bodied_indexers = true:silent
+csharp_style_expression_bodied_accessors = true:silent
+csharp_style_expression_bodied_lambdas = true:silent
+csharp_style_expression_bodied_local_functions = false:silent
+csharp_style_throw_expression = true:suggestion
+csharp_style_prefer_null_check_over_type_check = true:suggestion
+csharp_prefer_simple_default_expression = true:suggestion
+csharp_style_prefer_local_over_anonymous_function = true:suggestion
+csharp_style_prefer_index_operator = true:suggestion
+csharp_style_prefer_range_operator = true:suggestion
+csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion
+csharp_style_prefer_tuple_swap = true:suggestion
+csharp_style_inlined_variable_declaration = true:suggestion
+csharp_style_deconstructed_variable_declaration = true:suggestion
+csharp_style_unused_value_assignment_preference = discard_variable:suggestion
+csharp_style_unused_value_expression_statement_preference = discard_variable:silent
+csharp_style_var_for_built_in_types = true:silent
+csharp_style_var_when_type_is_apparent = true:silent
+csharp_style_var_elsewhere = true:silent
+csharp_style_prefer_method_group_conversion = true:silent
+csharp_style_prefer_top_level_statements = true:silent
+csharp_style_prefer_utf8_string_literals = true:suggestion
+csharp_prefer_static_local_function = true:suggestion
+csharp_style_allow_embedded_statements_on_same_line_experimental = true:suggestion
+csharp_style_allow_blank_lines_between_consecutive_braces_experimental = true:silent
+csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = true:suggestion
+
+[*.yml]
+indent_style = space
+indent_size = 2
+
+[*.{cs,vb}]
+dotnet_style_operator_placement_when_wrapping = beginning_of_line
+tab_width = 4
+indent_size = 4
+end_of_line = crlf
+dotnet_style_coalesce_expression = true:suggestion
+dotnet_style_null_propagation = true:suggestion
+dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion
+dotnet_style_prefer_auto_properties = true:silent
+dotnet_style_object_initializer = true:suggestion
+dotnet_style_collection_initializer = true:suggestion
+dotnet_style_prefer_simplified_boolean_expressions = true:suggestion
+dotnet_style_prefer_conditional_expression_over_assignment = true:silent
+dotnet_style_prefer_conditional_expression_over_return = true:silent
+dotnet_style_explicit_tuple_names = true:suggestion
+dotnet_style_prefer_inferred_tuple_names = true:suggestion
+dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion
+dotnet_style_prefer_compound_assignment = true:suggestion
+dotnet_style_prefer_simplified_interpolation = true:suggestion
+dotnet_style_namespace_match_folder = true:suggestion
+dotnet_style_readonly_field = true:suggestion
+[*.{cs,vb}]
+#### Naming styles ####
+
+# Naming rules
+
+dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion
+dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface
+dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i
+
+dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.types_should_be_pascal_case.symbols = types
+dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case
+
+dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion
+dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members
+dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case
+
+# Symbol specifications
+
+dotnet_naming_symbols.interface.applicable_kinds = interface
+dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.interface.required_modifiers =
+
+dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum
+dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.types.required_modifiers =
+
+dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method
+dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
+dotnet_naming_symbols.non_field_members.required_modifiers =
+
+# Naming styles
+
+dotnet_naming_style.begins_with_i.required_prefix = I
+dotnet_naming_style.begins_with_i.required_suffix =
+dotnet_naming_style.begins_with_i.word_separator =
+dotnet_naming_style.begins_with_i.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+
+dotnet_naming_style.pascal_case.required_prefix =
+dotnet_naming_style.pascal_case.required_suffix =
+dotnet_naming_style.pascal_case.word_separator =
+dotnet_naming_style.pascal_case.capitalization = pascal_case
+dotnet_style_predefined_type_for_locals_parameters_members = true:silent
+dotnet_style_predefined_type_for_member_access = true:silent
+dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent
+dotnet_style_allow_multiple_blank_lines_experimental = true:suggestion
+dotnet_style_allow_statement_immediately_after_block_experimental = true:suggestion
diff --git a/ThirdParty/CsvHelper-master/.gitignore b/ThirdParty/CsvHelper-master/.gitignore
new file mode 100644
index 0000000..d041040
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/.gitignore
@@ -0,0 +1,11 @@
+.vs/
+bin/
+obj/
+_NCrunch_*/
+artifacts/
+.tmp/
+cache/
+
+*.user
+*.psess
+*.log
diff --git a/ThirdParty/CsvHelper-master/CsvHelper.sln b/ThirdParty/CsvHelper-master/CsvHelper.sln
new file mode 100644
index 0000000..e576bed
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/CsvHelper.sln
@@ -0,0 +1,146 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29411.108
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6445B2A3-9E05-4ABF-AE2E-C875773B277A}"
+ ProjectSection(SolutionItems) = preProject
+ .editorconfig = .editorconfig
+ .gitignore = .gitignore
+ CsvHelper.sln.licenseheader = CsvHelper.sln.licenseheader
+ GitVersion.yml = GitVersion.yml
+ global.json = global.json
+ README.markdown = README.markdown
+ EndProjectSection
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper", "src\CsvHelper\CsvHelper.csproj", "{ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Tests", "tests\CsvHelper.Tests\CsvHelper.Tests.csproj", "{6859ECD8-81AE-4E74-A926-5726AAD7EE81}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "_build", "build\_build.csproj", "{B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Performance", "performance\CsvHelper.Performance\CsvHelper.Performance.csproj", "{F1C225F2-92FC-41BB-94BF-733454DD2A9D}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CsvHelper.Website", "src\CsvHelper.Website\CsvHelper.Website.csproj", "{3E59CA52-D248-4CBB-BB06-270FA942C4B8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|ARM.Build.0 = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|x64.Build.0 = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Debug|x86.Build.0 = Debug|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|ARM.ActiveCfg = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|ARM.Build.0 = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|x64.ActiveCfg = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|x64.Build.0 = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|x86.ActiveCfg = Release|Any CPU
+ {ECF9E2A8-3592-4DA4-9FAB-BFA56AD44B9C}.Release|x86.Build.0 = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|ARM.Build.0 = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|x64.Build.0 = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Debug|x86.Build.0 = Debug|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|ARM.ActiveCfg = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|ARM.Build.0 = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|x64.ActiveCfg = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|x64.Build.0 = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|x86.ActiveCfg = Release|Any CPU
+ {6859ECD8-81AE-4E74-A926-5726AAD7EE81}.Release|x86.Build.0 = Release|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Release|x64.ActiveCfg = Release|Any CPU
+ {B0E9C5E1-8A40-4BF7-AF08-6A6E179446A5}.Release|x86.ActiveCfg = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|ARM.Build.0 = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|x64.Build.0 = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Debug|x86.Build.0 = Debug|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|ARM.Build.0 = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|x64.ActiveCfg = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|x64.Build.0 = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|x86.ActiveCfg = Release|Any CPU
+ {F1C225F2-92FC-41BB-94BF-733454DD2A9D}.Release|x86.Build.0 = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|ARM.Build.0 = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|x64.Build.0 = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Debug|x86.Build.0 = Debug|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|ARM.Build.0 = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|x64.ActiveCfg = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|x64.Build.0 = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|x86.ActiveCfg = Release|Any CPU
+ {3E59CA52-D248-4CBB-BB06-270FA942C4B8}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {7F48D3EE-214D-45F4-AC6A-3E95C3A25E9F}
+ EndGlobalSection
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
+ GlobalSection(Performance) = preSolution
+ HasPerformanceSessions = true
+ EndGlobalSection
+EndGlobal
diff --git a/ThirdParty/CsvHelper-master/CsvHelper.sln.licenseheader b/ThirdParty/CsvHelper-master/CsvHelper.sln.licenseheader
new file mode 100644
index 0000000..9938f0b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/CsvHelper.sln.licenseheader
@@ -0,0 +1,32 @@
+extensions: designer.cs generated.cs
+extensions: .cs .cpp .h
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+extensions: .aspx .ascx
+<%--
+Copyright 2009-2022 Josh Close
+This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+https://github.com/JoshClose/CsvHelper
+--%>
+extensions: .vb
+' Copyright 2009-2022 Josh Close
+' This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+' See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+' https://github.com/JoshClose/CsvHelper
+extensions: .xml .config .xsd
+<!--
+Copyright 2009-2022 Josh Close
+This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+https://github.com/JoshClose/CsvHelper
+-->
+extenions: .tt
+<#
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+#>
diff --git a/ThirdParty/CsvHelper-master/CsvHelper.v3.ncrunchsolution b/ThirdParty/CsvHelper-master/CsvHelper.v3.ncrunchsolution
new file mode 100644
index 0000000..c0d9e77
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/CsvHelper.v3.ncrunchsolution
@@ -0,0 +1,7 @@
+<SolutionConfiguration>
+ <Settings>
+ <AllowParallelTestExecution>True</AllowParallelTestExecution>
+ <InstrumentationMode>Optimised</InstrumentationMode>
+ <SolutionConfigured>True</SolutionConfigured>
+ </Settings>
+</SolutionConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/CsvHelperDependencies.linq b/ThirdParty/CsvHelper-master/CsvHelperDependencies.linq
new file mode 100644
index 0000000..03bc6d6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/CsvHelperDependencies.linq
@@ -0,0 +1,8 @@
+<Query Kind="Statements" />
+
+var el = XElement.Load(@"https://packages.nuget.org/v1/FeedService.svc/Packages?$filter=substringof(%27CsvHelper%27,%20Dependencies)%20eq%20true&$select=Id,Dependencies");
+//el.Attributes().Dump();
+XNamespace nsm = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
+XNamespace nsd = "http://schemas.microsoft.com/ado/2007/08/dataservices";
+el.Descendants(nsd + "Id").Select(n => n.Value).Distinct().Dump();
+el.Dump();
diff --git a/ThirdParty/CsvHelper-master/GitVersion.yml b/ThirdParty/CsvHelper-master/GitVersion.yml
new file mode 100644
index 0000000..9812dbf
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/GitVersion.yml
@@ -0,0 +1,11 @@
+#next-version: 21.0.5
+assembly-versioning-scheme: Major
+assembly-file-versioning-format: '{Major}.{Minor}.{Patch}.{env:BUILD_NUMBER ?? 0}'
+branches:
+ configuration-constructor:
+ regex: configuration-constructor
+ source-branches: [ 'master' ]
+ tag: beta
+ignore:
+ sha: []
+merge-message-formats: {}
diff --git a/ThirdParty/CsvHelper-master/LICENSE.txt b/ThirdParty/CsvHelper-master/LICENSE.txt
new file mode 100644
index 0000000..0d4fcca
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/LICENSE.txt
@@ -0,0 +1,104 @@
+Dual licensing under MS-PL and Apache 2.0
+
+Microsoft Public License (MS-PL)
+
+This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.
+
+ 1. Definitions
+ The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. A "contribution" is the original software, or any additions or changes to the software. A "contributor" is any person that distributes its contribution under this license. "Licensed patents" are a contributor's patent claims that read directly on its contribution.
+ 2. Grant of Rights
+ (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
+ (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
+ 3. Conditions and Limitations
+ (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
+ (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.
+ (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.
+ (D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.
+ (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
+
+Apache License, Version 2.0
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
+You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License. \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/README.markdown b/ThirdParty/CsvHelper-master/README.markdown
new file mode 100644
index 0000000..2b7cbf0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/README.markdown
@@ -0,0 +1,77 @@
+# CsvHelper
+
+[![Join the chat at https://gitter.im/CsvHelper/Lobby](https://badges.gitter.im/CsvHelper/Lobby.svg)](https://gitter.im/CsvHelper/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
+[![Backers on Open Collective](https://opencollective.com/csvhelper/backers/badge.svg)](#backers)
+[![Sponsors on Open Collective](https://opencollective.com/csvhelper/sponsors/badge.svg)](#sponsors)
+<a href="https://www.nuget.org/packages/CsvHelper"><img src="https://img.shields.io/nuget/v/CsvHelper.svg" alt="NuGet Version" /></a>
+<a href="https://www.nuget.org/packages/CsvHelper"><img src="https://img.shields.io/nuget/dt/CsvHelper.svg" alt="NuGet Download Count" /></a>
+
+A library for reading and writing CSV files. Extremely fast, flexible, and easy to use. Supports reading and writing of custom class objects.
+
+## Install
+
+### Package Manager Console
+
+```
+PM> Install-Package CsvHelper
+```
+
+### .NET CLI Console
+
+```
+> dotnet add package CsvHelper
+```
+
+## Documentation
+
+http://joshclose.github.io/CsvHelper/
+
+### Building the Documentation
+
+1. Install [node.js](https://nodejs.org/en/download/).
+1. Go into the `CsvHelper/docs-src` folder.
+1. Run `npm start` to start a local test site. Make any changes needed.
+1. Run `npm run build` to build the documentation files that are output to `CsvHelper/docs`.
+
+## License
+
+Dual licensed
+
+Microsoft Public License (MS-PL)
+
+http://www.opensource.org/licenses/MS-PL
+
+Apache License, Version 2.0
+
+http://opensource.org/licenses/Apache-2.0
+
+## Contributing
+
+Want to contribute? Great! Here are a few guidelines.
+
+1. If you want to do a feature, post an issue about the feature first. Some features are intentionally left out, some features may already be in the works, or I may have some advice on how I think it should be done. I would feel bad if time was spent on some code that won't be used.
+2. If you want to do a bug fix, it might not be a bad idea to post about it too. I've had the same bug fixed by multiple people at the same time before.
+3. All code should have a unit test. If you make a feature, there should be significant tests around the feature. If you do a bug fix, there should be a test specific to that bug so it doesn't happen again.
+4. Pull requests should have a single commit. If you have multiple commits, squash them into a single commit before requesting a pull.
+5. Try and follow the code styling already in place. If you have ReSharper there is a dotsettings file included and things should automatically be formatted for you.
+
+## Credits
+
+### Contributors
+
+This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
+
+<a href="https://github.com/JoshClose/CsvHelper/graphs/contributors"><img src="https://opencollective.com/csvhelper/contributors.svg?width=890&button=false" /></a>
+
+### Backers
+
+Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/csvhelper#backer)]
+
+<a href="https://opencollective.com/csvhelper#backers" target="_blank"><img src="https://opencollective.com/csvhelper/backers.svg?width=890"></a>
+
+### Sponsors
+
+Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/csvhelper#sponsor)]
+
+<a href="https://opencollective.com/csvhelper/sponsor/0/website" target="_blank"><img src="https://opencollective.com/csvhelper/sponsor/0/avatar.svg"></a>
+
diff --git a/ThirdParty/CsvHelper-master/Unity Build.bat b/ThirdParty/CsvHelper-master/Unity Build.bat
new file mode 100644
index 0000000..b22144e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/Unity Build.bat
@@ -0,0 +1,5 @@
+rmdir /S /Q unity\Assets\CsvHelper
+
+dotnet build src\CsvHelper\CsvHelper.csproj -c release -o ..\..\unity\Assets\CsvHelper
+
+pause
diff --git a/ThirdParty/CsvHelper-master/build.cmd b/ThirdParty/CsvHelper-master/build.cmd
new file mode 100644
index 0000000..b08cc59
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build.cmd
@@ -0,0 +1,7 @@
+:; set -eo pipefail
+:; SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
+:; ${SCRIPT_DIR}/build.sh "$@"
+:; exit $?
+
+@ECHO OFF
+powershell -ExecutionPolicy ByPass -NoProfile -File "%~dp0build.ps1" %*
diff --git a/ThirdParty/CsvHelper-master/build.ps1 b/ThirdParty/CsvHelper-master/build.ps1
new file mode 100644
index 0000000..1c774e5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build.ps1
@@ -0,0 +1,69 @@
+[CmdletBinding()]
+Param(
+ [Parameter(Position=0,Mandatory=$false,ValueFromRemainingArguments=$true)]
+ [string[]]$BuildArguments
+)
+
+Write-Output "PowerShell $($PSVersionTable.PSEdition) version $($PSVersionTable.PSVersion)"
+
+Set-StrictMode -Version 2.0; $ErrorActionPreference = "Stop"; $ConfirmPreference = "None"; trap { Write-Error $_ -ErrorAction Continue; exit 1 }
+$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent
+
+###########################################################################
+# CONFIGURATION
+###########################################################################
+
+$BuildProjectFile = "$PSScriptRoot\build\_build.csproj"
+$TempDirectory = "$PSScriptRoot\\.nuke\temp"
+
+$DotNetGlobalFile = "$PSScriptRoot\\global.json"
+$DotNetInstallUrl = "https://dot.net/v1/dotnet-install.ps1"
+$DotNetChannel = "Current"
+
+$env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE = 1
+$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
+$env:DOTNET_MULTILEVEL_LOOKUP = 0
+
+###########################################################################
+# EXECUTION
+###########################################################################
+
+function ExecSafe([scriptblock] $cmd) {
+ & $cmd
+ if ($LASTEXITCODE) { exit $LASTEXITCODE }
+}
+
+# If dotnet CLI is installed globally and it matches requested version, use for execution
+if ($null -ne (Get-Command "dotnet" -ErrorAction SilentlyContinue) -and `
+ $(dotnet --version) -and $LASTEXITCODE -eq 0) {
+ $env:DOTNET_EXE = (Get-Command "dotnet").Path
+}
+else {
+ # Download install script
+ $DotNetInstallFile = "$TempDirectory\dotnet-install.ps1"
+ New-Item -ItemType Directory -Path $TempDirectory -Force | Out-Null
+ [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+ (New-Object System.Net.WebClient).DownloadFile($DotNetInstallUrl, $DotNetInstallFile)
+
+ # If global.json exists, load expected version
+ if (Test-Path $DotNetGlobalFile) {
+ $DotNetGlobal = $(Get-Content $DotNetGlobalFile | Out-String | ConvertFrom-Json)
+ if ($DotNetGlobal.PSObject.Properties["sdk"] -and $DotNetGlobal.sdk.PSObject.Properties["version"]) {
+ $DotNetVersion = $DotNetGlobal.sdk.version
+ }
+ }
+
+ # Install by channel or version
+ $DotNetDirectory = "$TempDirectory\dotnet-win"
+ if (!(Test-Path variable:DotNetVersion)) {
+ ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Channel $DotNetChannel -NoPath }
+ } else {
+ ExecSafe { & powershell $DotNetInstallFile -InstallDir $DotNetDirectory -Version $DotNetVersion -NoPath }
+ }
+ $env:DOTNET_EXE = "$DotNetDirectory\dotnet.exe"
+}
+
+Write-Output "Microsoft (R) .NET Core SDK version $(& $env:DOTNET_EXE --version)"
+
+ExecSafe { & $env:DOTNET_EXE build $BuildProjectFile /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet }
+ExecSafe { & $env:DOTNET_EXE run --project $BuildProjectFile --no-build -- $BuildArguments }
diff --git a/ThirdParty/CsvHelper-master/build.sh b/ThirdParty/CsvHelper-master/build.sh
new file mode 100644
index 0000000..e8961f9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build.sh
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+bash --version 2>&1 | head -n 1
+
+set -eo pipefail
+SCRIPT_DIR=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)
+
+###########################################################################
+# CONFIGURATION
+###########################################################################
+
+BUILD_PROJECT_FILE="$SCRIPT_DIR/build/_build.csproj"
+TEMP_DIRECTORY="$SCRIPT_DIR//.nuke/temp"
+
+DOTNET_GLOBAL_FILE="$SCRIPT_DIR//global.json"
+DOTNET_INSTALL_URL="https://dot.net/v1/dotnet-install.sh"
+DOTNET_CHANNEL="Current"
+
+export DOTNET_CLI_TELEMETRY_OPTOUT=1
+export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
+export DOTNET_MULTILEVEL_LOOKUP=0
+
+###########################################################################
+# EXECUTION
+###########################################################################
+
+function FirstJsonValue {
+ perl -nle 'print $1 if m{"'"$1"'": "([^"]+)",?}' <<< "${@:2}"
+}
+
+# If dotnet CLI is installed globally and it matches requested version, use for execution
+if [ -x "$(command -v dotnet)" ] && dotnet --version &>/dev/null; then
+ export DOTNET_EXE="$(command -v dotnet)"
+else
+ # Download install script
+ DOTNET_INSTALL_FILE="$TEMP_DIRECTORY/dotnet-install.sh"
+ mkdir -p "$TEMP_DIRECTORY"
+ curl -Lsfo "$DOTNET_INSTALL_FILE" "$DOTNET_INSTALL_URL"
+ chmod +x "$DOTNET_INSTALL_FILE"
+
+ # If global.json exists, load expected version
+ if [[ -f "$DOTNET_GLOBAL_FILE" ]]; then
+ DOTNET_VERSION=$(FirstJsonValue "version" "$(cat "$DOTNET_GLOBAL_FILE")")
+ if [[ "$DOTNET_VERSION" == "" ]]; then
+ unset DOTNET_VERSION
+ fi
+ fi
+
+ # Install by channel or version
+ DOTNET_DIRECTORY="$TEMP_DIRECTORY/dotnet-unix"
+ if [[ -z ${DOTNET_VERSION+x} ]]; then
+ "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --channel "$DOTNET_CHANNEL" --no-path
+ else
+ "$DOTNET_INSTALL_FILE" --install-dir "$DOTNET_DIRECTORY" --version "$DOTNET_VERSION" --no-path
+ fi
+ export DOTNET_EXE="$DOTNET_DIRECTORY/dotnet"
+fi
+
+echo "Microsoft (R) .NET Core SDK version $("$DOTNET_EXE" --version)"
+
+"$DOTNET_EXE" build "$BUILD_PROJECT_FILE" /nodeReuse:false /p:UseSharedCompilation=false -nologo -clp:NoSummary --verbosity quiet
+"$DOTNET_EXE" run --project "$BUILD_PROJECT_FILE" --no-build -- "$@"
diff --git a/ThirdParty/CsvHelper-master/build/.editorconfig b/ThirdParty/CsvHelper-master/build/.editorconfig
new file mode 100644
index 0000000..31e43dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/.editorconfig
@@ -0,0 +1,11 @@
+[*.cs]
+dotnet_style_qualification_for_field = false:warning
+dotnet_style_qualification_for_property = false:warning
+dotnet_style_qualification_for_method = false:warning
+dotnet_style_qualification_for_event = false:warning
+dotnet_style_require_accessibility_modifiers = never:warning
+
+csharp_style_expression_bodied_methods = true:silent
+csharp_style_expression_bodied_properties = true:warning
+csharp_style_expression_bodied_indexers = true:warning
+csharp_style_expression_bodied_accessors = true:warning
diff --git a/ThirdParty/CsvHelper-master/build/Build.cs b/ThirdParty/CsvHelper-master/build/Build.cs
new file mode 100644
index 0000000..0d5a61c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/Build.cs
@@ -0,0 +1,156 @@
+// Copyright 2009-2021 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq;
+using Nuke.Common;
+using Nuke.Common.CI;
+using Nuke.Common.Execution;
+using Nuke.Common.Git;
+using Nuke.Common.IO;
+using Nuke.Common.ProjectModel;
+using Nuke.Common.Tooling;
+using Nuke.Common.Tools.DotNet;
+using Nuke.Common.Tools.GitVersion;
+using Nuke.Common.Utilities.Collections;
+using static Nuke.Common.IO.FileSystemTasks;
+using static Nuke.Common.IO.PathConstruction;
+using static Nuke.Common.Tools.DotNet.DotNetTasks;
+
+[CheckBuildProjectConfigurations]
+[UnsetVisualStudioEnvironmentVariables]
+class Build : NukeBuild
+{
+ /// Support plugins are available for:
+ /// - JetBrains ReSharper https://nuke.build/resharper
+ /// - JetBrains Rider https://nuke.build/rider
+ /// - Microsoft VisualStudio https://nuke.build/visualstudio
+ /// - Microsoft VSCode https://nuke.build/vscode
+
+ public static int Main() => Execute<Build>(x => x.Test);
+
+ [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")]
+ readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;
+ [Parameter("NuGet server URL.")]
+ readonly string NugetSource = "https://api.nuget.org/v3/index.json";
+ [Parameter("API Key for the NuGet server.")]
+ readonly string NugetApiKey;
+ [Parameter("Version to use for package.")]
+ readonly string Version;
+ [Parameter("NuGet package version.")]
+ readonly string PackageVersion;
+
+ [Solution]
+ readonly Solution Solution;
+ [GitRepository]
+ readonly GitRepository GitRepository;
+ [GitVersion]
+ readonly GitVersion GitVersion;
+
+ AbsolutePath SourceDirectory => RootDirectory / "src";
+ AbsolutePath TestsDirectory => RootDirectory / "tests";
+ AbsolutePath ArtifactsDirectory => RootDirectory / "artifacts";
+ AbsolutePath DocsDirectory => RootDirectory / "docs";
+
+ Project CsvHelperProject => Solution.GetProject("CsvHelper");
+ Project DocsProject => Solution.GetProject("CsvHelper.Website");
+
+ Target Clean => _ => _
+ .Before(Restore)
+ .Executes(() =>
+ {
+ SourceDirectory.GlobDirectories("**/bin", "**/obj").ForEach(DeleteDirectory);
+ TestsDirectory.GlobDirectories("**/bin", "**/obj").ForEach(DeleteDirectory);
+ EnsureCleanDirectory(ArtifactsDirectory);
+ });
+
+ Target Restore => _ => _
+ .Executes(() =>
+ {
+ DotNetRestore(s => s
+ .SetProjectFile(Solution)
+ );
+ });
+
+ Target Compile => _ => _
+ .DependsOn(Restore)
+ .Executes(() =>
+ {
+ DotNetBuild(s => s
+ .EnableNoRestore()
+ .SetProjectFile(Solution)
+ .SetConfiguration(Configuration)
+ .SetAssemblyVersion(GitVersion.AssemblySemVer)
+ .SetFileVersion(GitVersion.AssemblySemFileVer)
+ .SetInformationalVersion(GitVersion.InformationalVersion)
+ );
+
+ DotNetPublish(s => s
+ .EnableNoRestore()
+ .EnableNoBuild()
+ .SetConfiguration(Configuration)
+ .SetAssemblyVersion(GitVersion.AssemblySemVer)
+ .SetFileVersion(GitVersion.AssemblySemFileVer)
+ .SetInformationalVersion(GitVersion.InformationalVersion)
+ .CombineWith(
+ from project in new[] { CsvHelperProject }
+ from framework in project.GetTargetFrameworks()
+ select new { project, framework }, (cs, v) => cs
+ .SetProject(v.project)
+ .SetFramework(v.framework)
+ )
+ );
+ });
+
+ Target Test => _ => _
+ .DependsOn(Compile)
+ .Executes(() =>
+ {
+ DotNetTest(s => s
+ .SetProjectFile(Solution)
+ .SetConfiguration(Configuration)
+ .EnableNoRestore()
+ .EnableNoBuild()
+ );
+ });
+
+ Target Pack => _ => _
+ .DependsOn(Clean, Test)
+ .Requires(() => Configuration == Configuration.Release)
+ .Executes(() =>
+ {
+ DotNetPack(s => s
+ .EnableNoRestore()
+ .EnableNoBuild()
+ .SetProject(CsvHelperProject)
+ .SetConfiguration(Configuration)
+ .SetOutputDirectory(ArtifactsDirectory)
+ .SetProperty("PackageVersion", PackageVersion ?? GitVersion.NuGetVersionV2)
+ );
+ });
+
+ Target Push => _ => _
+ .Executes(() =>
+ {
+ DotNetNuGetPush(s => s
+ .SetSource(NugetSource)
+ .SetApiKey(NugetApiKey)
+ .CombineWith(ArtifactsDirectory.GlobFiles("*.nupkg"), (s, v) => s
+ .SetTargetPath(v)
+ )
+ );
+ });
+
+ Target Docs => _ => _
+ .Executes(() =>
+ {
+ EnsureCleanDirectory(DocsDirectory);
+
+ DotNetRun(s => s
+ .SetProjectFile(DocsProject)
+ .SetConfiguration(Configuration.Release)
+ .SetApplicationArguments($"-o \"{DocsDirectory}\"")
+ );
+ });
+}
diff --git a/ThirdParty/CsvHelper-master/build/Configuration.cs b/ThirdParty/CsvHelper-master/build/Configuration.cs
new file mode 100644
index 0000000..ba605b2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/Configuration.cs
@@ -0,0 +1,16 @@
+using System;
+using System.ComponentModel;
+using System.Linq;
+using Nuke.Common.Tooling;
+
+[TypeConverter(typeof(TypeConverter<Configuration>))]
+public class Configuration : Enumeration
+{
+ public static Configuration Debug = new Configuration { Value = nameof(Debug) };
+ public static Configuration Release = new Configuration { Value = nameof(Release) };
+
+ public static implicit operator string(Configuration configuration)
+ {
+ return configuration.Value;
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/build/Directory.Build.props b/ThirdParty/CsvHelper-master/build/Directory.Build.props
new file mode 100644
index 0000000..e147d63
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/Directory.Build.props
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <!-- This file prevents unintended imports of unrelated MSBuild files -->
+ <!-- Uncomment to include parent Directory.Build.props file -->
+ <!--<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)../'))" />-->
+
+</Project>
diff --git a/ThirdParty/CsvHelper-master/build/Directory.Build.targets b/ThirdParty/CsvHelper-master/build/Directory.Build.targets
new file mode 100644
index 0000000..2532609
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/Directory.Build.targets
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+
+ <!-- This file prevents unintended imports of unrelated MSBuild files -->
+ <!-- Uncomment to include parent Directory.Build.targets file -->
+ <!--<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.targets', '$(MSBuildThisFileDirectory)../'))" />-->
+
+</Project>
diff --git a/ThirdParty/CsvHelper-master/build/_build.csproj b/ThirdParty/CsvHelper-master/build/_build.csproj
new file mode 100644
index 0000000..a97ce21
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/_build.csproj
@@ -0,0 +1,42 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>net6.0</TargetFramework>
+ <RootNamespace></RootNamespace>
+ <NoWarn>CS0649;CS0169</NoWarn>
+ <NukeRootDirectory>..</NukeRootDirectory>
+ <NukeScriptDirectory>..</NukeScriptDirectory>
+ <NukeTelemetryVersion>1</NukeTelemetryVersion>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageDownload Include="GitVersion.Tool" Version="[5.6.10]" />
+ <PackageReference Include="Nuke.Common" Version="5.3.0" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <NukeSpecificationFiles Include="**\*.json" Exclude="bin\**;obj\**" />
+ <NukeExternalFiles Include="**\*.*.ext" Exclude="bin\**;obj\**" />
+ <None Remove="*.csproj.DotSettings;*.ref.*.txt" />
+
+ <!-- Common build related files -->
+ <None Include="..\build.cmd" />
+ <None Include="..\build.ps1" />
+ <None Include="..\build.sh" />
+
+ <None Include="..\.nuke" LinkBase="config" />
+ <None Include="..\global.json" LinkBase="config" Condition="Exists('..\global.json')" />
+ <None Include="..\nuget.config" LinkBase="config" Condition="Exists('..\nuget.config')" />
+ <None Include="..\GitVersion.yml" LinkBase="config" Condition="Exists('..\GitVersion.yml')" />
+
+ <None Include="..\.teamcity\settings.kts" LinkBase="ci" Condition="Exists('..\.teamcity\settings.kts')" />
+ <None Include="..\.github\workflows\*.yml" LinkBase="ci" />
+ <None Remove="_build.v3.ncrunchproject" />
+ <None Include="..\azure-pipelines.yml" LinkBase="ci" Condition="Exists('..\azure-pipelines.yml')" />
+ <None Include="..\Jenkinsfile" LinkBase="ci" Condition="Exists('..\Jenkinsfile')" />
+ <None Include="..\appveyor.yml" LinkBase="ci" Condition="Exists('..\appveyor.yml')" />
+ <None Include="..\.travis.yml" LinkBase="ci" Condition="Exists('..\.travis.yml')" />
+ </ItemGroup>
+
+</Project>
diff --git a/ThirdParty/CsvHelper-master/build/_build.csproj.DotSettings b/ThirdParty/CsvHelper-master/build/_build.csproj.DotSettings
new file mode 100644
index 0000000..96e392e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/_build.csproj.DotSettings
@@ -0,0 +1,23 @@
+<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
+ <s:Boolean x:Key="/Default/CodeInspection/ImplicitNullability/EnableFields/@EntryValue">False</s:Boolean>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_INTERNAL_MODIFIER/@EntryValue">Implicit</s:String>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/DEFAULT_PRIVATE_MODIFIER/@EntryValue">Implicit</s:String>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/METHOD_OR_OPERATOR_BODY/@EntryValue">ExpressionBody</s:String>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/ThisQualifier/INSTANCE_MEMBERS_QUALIFY_MEMBERS/@EntryValue">0</s:String>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue">NEXT_LINE</s:String>
+ <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/KEEP_USER_LINEBREAKS/@EntryValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_AFTER_INVOCATION_LPAR/@EntryValue">False</s:Boolean>
+ <s:Int64 x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/MAX_ATTRIBUTE_LENGTH_FOR_SAME_LINE/@EntryValue">120</s:Int64>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_FIELD_ATTRIBUTE_ON_SAME_LINE_EX/@EntryValue">IF_OWNER_IS_SINGLE_LINE</s:String>
+ <s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/WRAP_ARGUMENTS_STYLE/@EntryValue">WRAP_IF_LONG</s:String>
+ <s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpFormat/PLACE_SIMPLE_ANONYMOUSMETHOD_ON_SINGLE_LINE/@EntryValue">False</s:Boolean>
+ <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
+ <s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateStaticFields/@EntryIndexedValue">&lt;Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /&gt;</s:String>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpAttributeForSingleLineMethodUpgrade/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpKeepExistingMigration/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpPlaceEmbeddedOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ECSharpRenamePlacementToArrangementMigration/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EAddAccessorOwnerDeclarationBracesMigration/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002ECSharpPlaceAttributeOnSameLineMigration/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateBlankLinesAroundFieldToBlankLinesAroundProperty/@EntryIndexedValue">True</s:Boolean>
+ <s:Boolean x:Key="/Default/Environment/SettingsMigration/IsMigratorApplied/=JetBrains_002EReSharper_002EPsi_002ECSharp_002ECodeStyle_002ESettingsUpgrade_002EMigrateThisQualifierSettings/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
diff --git a/ThirdParty/CsvHelper-master/build/_build.v3.ncrunchproject b/ThirdParty/CsvHelper-master/build/_build.v3.ncrunchproject
new file mode 100644
index 0000000..319cd52
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/build/_build.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/ConsoleHost.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/ConsoleHost.cs
new file mode 100644
index 0000000..c7c3bc1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/ConsoleHost.cs
@@ -0,0 +1,117 @@
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace CsvHelper.DocsGenerator
+{
+ public static class ConsoleHost
+ {
+ /// <summary>
+ /// Block the calling thread until shutdown is triggered via Ctrl+C or SIGTERM.
+ /// </summary>
+ public static void WaitForShutdown()
+ {
+ WaitForShutdownAsync().GetAwaiter().GetResult();
+ }
+
+ /// <summary>
+ /// Returns a Task that completes when shutdown is triggered via the given token, Ctrl+C or SIGTERM.
+ /// </summary>
+ /// <param name="token">The token to trigger shutdown.</param>
+ public static async Task WaitForShutdownAsync(CancellationToken token = default(CancellationToken))
+ {
+ var done = new ManualResetEventSlim(false);
+ using (var cts = CancellationTokenSource.CreateLinkedTokenSource(token))
+ {
+ AttachCtrlcSigtermShutdown(cts, done, shutdownMessage: string.Empty);
+ await WaitForTokenShutdownAsync(cts.Token);
+ done.Set();
+ }
+ }
+
+ /// <summary>
+ /// Runs an application and block the calling thread until host shutdown.
+ /// </summary>
+ /// <param name="host">The <see cref="IWebHost"/> to run.</param>
+ public static void Wait()
+ {
+ WaitAsync().GetAwaiter().GetResult();
+ }
+
+ /// <summary>
+ /// Runs an application and returns a Task that only completes when the token is triggered or shutdown is triggered.
+ /// </summary>
+ /// <param name="host">The <see cref="IConsoleHost"/> to run.</param>
+ /// <param name="token">The token to trigger shutdown.</param>
+ public static async Task WaitAsync(CancellationToken token = default(CancellationToken))
+ {
+ //Wait for the token shutdown if it can be cancelled
+ if (token.CanBeCanceled)
+ {
+ await WaitAsync(token, shutdownMessage: null);
+ return;
+ }
+
+ //If token cannot be cancelled, attach Ctrl+C and SIGTERN shutdown
+ var done = new ManualResetEventSlim(false);
+ using (var cts = new CancellationTokenSource())
+ {
+ AttachCtrlcSigtermShutdown(cts, done, shutdownMessage: "Application is shutting down...");
+ await WaitAsync(cts.Token, "Application running. Press Ctrl+C to shut down.");
+ done.Set();
+ }
+ }
+
+ private static async Task WaitAsync(CancellationToken token, string shutdownMessage)
+ {
+ if (!string.IsNullOrEmpty(shutdownMessage))
+ {
+ Console.WriteLine(shutdownMessage);
+ }
+
+ await WaitForTokenShutdownAsync(token);
+ }
+
+ private static void AttachCtrlcSigtermShutdown(CancellationTokenSource cts, ManualResetEventSlim resetEvent, string shutdownMessage)
+ {
+ Action ShutDown = () =>
+ {
+ if (!cts.IsCancellationRequested)
+ {
+ if (!string.IsNullOrWhiteSpace(shutdownMessage))
+ {
+ Console.WriteLine(shutdownMessage);
+ }
+
+ try
+ {
+ cts.Cancel();
+ }
+ catch (ObjectDisposedException) { }
+ }
+
+ // Wait on the given reset event
+ resetEvent.Wait();
+ };
+
+ AppDomain.CurrentDomain.ProcessExit += delegate { ShutDown(); };
+ Console.CancelKeyPress += (sender, eventArgs) =>
+ {
+ ShutDown();
+ //Don't terminate the process immediately, wait for the Main thread to exit gracefully.
+ eventArgs.Cancel = true;
+ };
+ }
+
+ private static async Task WaitForTokenShutdownAsync(CancellationToken token)
+ {
+ var waitForStop = new TaskCompletionSource<object>();
+ token.Register(obj =>
+ {
+ var tcs = (TaskCompletionSource<object>)obj;
+ tcs.TrySetResult(null);
+ }, waitForStop);
+ await waitForStop.Task;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/CsvHelper.DocsGenerator.csproj b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/CsvHelper.DocsGenerator.csproj
new file mode 100644
index 0000000..f9884a4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/CsvHelper.DocsGenerator.csproj
@@ -0,0 +1,17 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>netcoreapp2.2</TargetFramework>
+ <LangVersion>latest</LangVersion>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\CsvHelper\CsvHelper.csproj" />
+ </ItemGroup>
+
+</Project> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/EncodingType.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/EncodingType.cs
new file mode 100644
index 0000000..d31b524
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/EncodingType.cs
@@ -0,0 +1,14 @@
+namespace CsvHelper.DocsGenerator
+{
+ public enum EncodingType
+ {
+ // Generic&ltParameter&gt;
+ Html = 0,
+
+ // Generic<Parameter>
+ Code = 1,
+
+ // Generic{Parameter}
+ Xml = 2
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Extensions.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Extensions.cs
new file mode 100644
index 0000000..fd7ae72
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Extensions.cs
@@ -0,0 +1,459 @@
+using CsvHelper.DocsGenerator.Formatters;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator
+{
+ public static class Extensions
+ {
+ // Assembly
+
+ public static string GetHtmlName(Assembly assembly)
+ {
+ throw new NotImplementedException();
+ }
+
+ // Type
+
+ public static string GetTypeName(this Type type)
+ {
+ if (type.IsEnum)
+ {
+ return "Enum";
+ }
+
+ if (type.IsInterface)
+ {
+ return "Interface";
+ }
+
+ if (type.IsClass)
+ {
+ return "Class";
+ }
+
+ throw new InvalidOperationException($"No type name found for type '{type.GetFullName()}'.");
+ }
+
+ public static string GetHtmlName(this Type type)
+ {
+ return HtmlFormat(type);
+ }
+
+ public static string GetCodeName(this Type type)
+ {
+ return HtmlFormat(type, isCodeBlock: true);
+ }
+
+ public static string GetFullName(this Type type)
+ {
+ return $"{type.Namespace}.{type.Name}";
+ }
+
+ public static string GetFullHtmlName(this Type type)
+ {
+ return $"{type.Namespace}.{type.GetHtmlName()}";
+ }
+
+ public static string GetFullCodeName(this Type type)
+ {
+ return $"{type.Namespace}.{type.GetCodeName()}";
+ }
+
+ public static string GetSummary(this Type type)
+ {
+ return GetSummary($"T:{type.GetFullName()}");
+ }
+
+ // Property
+
+ public static string GetHtmlName(this PropertyInfo property)
+ {
+ return property.Name;
+ }
+
+ public static string GetCodeName(this PropertyInfo property)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullName(this PropertyInfo property)
+ {
+ return $"{property.DeclaringType.FullName}.{property.Name}";
+ }
+
+ public static string GetFullHtmlName(this PropertyInfo property)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullCodeName(this PropertyInfo property)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetSummary(this PropertyInfo property)
+ {
+ var parameters = property.GetIndexParameters().ToList();
+ var parametersText = string.Empty;
+ if (parameters.Count > 0)
+ {
+ parametersText = $"({string.Join(",", parameters.Select(p => p.ParameterType.FullName))})";
+ }
+
+ return GetSummary($"P:{property.GetFullName()}{parametersText}");
+ }
+
+ // Field
+
+ public static string GetHtmlName(this FieldInfo field)
+ {
+ return field.Name;
+ }
+
+ public static string GetCodeName(this FieldInfo field)
+ {
+ return field.Name;
+ }
+
+ public static string GetFullName(this FieldInfo field)
+ {
+ return $"{field.DeclaringType.FullName}.{field.Name}";
+ }
+
+ public static string GetFullHtmlName(this FieldInfo field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullCodeName(this FieldInfo field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetSummary(this FieldInfo field)
+ {
+ return GetSummary($"F:{field.GetFullName()}");
+ }
+
+ // Constructor
+
+ public static string GetHtmlName(this ConstructorInfo constructor)
+ {
+ return HtmlFormat(constructor);
+ }
+
+ public static string GetCodeName(this ConstructorInfo constructor)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullName(this ConstructorInfo constructor)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullHtmlName(this ConstructorInfo constructor)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullCodeName(this ConstructorInfo constructor)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetSummary(this ConstructorInfo constructor)
+ {
+ return GetSummary($"M:{XmlDocFormat(constructor)}");
+ }
+
+ // Method
+
+ public static string GetHtmlName(this MethodInfo method)
+ {
+ return HtmlFormat(method);
+ }
+
+ public static string GetCodeName(this MethodInfo method)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullName(this MethodInfo method)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullHtmlName(this MethodInfo method)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetFullCodeName(this MethodInfo method)
+ {
+ throw new NotImplementedException();
+ }
+
+ public static string GetSummary(this MethodInfo method)
+ {
+ return GetSummary($"M:{XmlDocFormat(method)}");
+ }
+
+ // Private
+
+ private static Type GetType(string typeName)
+ {
+ Type type = null;
+ if (typeName.StartsWith("CsvHelper"))
+ {
+ var assembly = Assembly.GetAssembly(typeof(CsvHelperException));
+ type = assembly.GetType(typeName);
+
+ var currentTypeName = typeName;
+ while (type == null && !string.IsNullOrWhiteSpace(currentTypeName) && currentTypeName.Contains('.'))
+ {
+ currentTypeName = currentTypeName.Substring(0, currentTypeName.LastIndexOf('.'));
+ type = assembly.GetType(typeName);
+ }
+ }
+ else
+ {
+ type = Type.GetType(typeName);
+ }
+
+ return type;
+ }
+
+ private static string GetSummary(string memberName)
+ {
+ var members = XmlDocs.XElement.Descendants("member");
+ var member = members?.SingleOrDefault(m => m.Attribute("name")?.Value == memberName);
+ var summary = member?.Element("summary");
+ if (summary != null)
+ {
+ var summaryText = new List<string>();
+ foreach (var node in summary.Nodes())
+ {
+ string text;
+ if (node.NodeType == XmlNodeType.Element)
+ {
+ string typeName = string.Empty;
+ var el = (XElement)node;
+ switch (el.Name.ToString())
+ {
+ case "paramref":
+ typeName = el.Attribute("name").Value;
+ break;
+ case "see":
+ typeName = el.Attribute("cref").Value.Substring(2);
+ break;
+ case "c":
+ typeName = el.Value;
+ break;
+ default:
+ throw new InvalidOperationException($"Unhandled element '{el.Name}'.");
+ }
+
+ var type = GetType(typeName);
+ text = type == null ? typeName : type.GetFullCodeName();
+
+ text = $"``{text.Trim()}``";
+ }
+ else if (node.NodeType == XmlNodeType.Text)
+ {
+ text = node.ToString();
+ }
+ else
+ {
+ throw new InvalidOperationException($"Unhandled node type '{node.NodeType}'.");
+ }
+
+ // Replace multiple spaces with a single space.
+ text = Regex.Replace(text, @"\s{2,}", " ").Trim();
+
+ summaryText.Add(text);
+ }
+
+ return string.Join(" ", summaryText);
+ }
+
+ if (memberName.Substring(2).StartsWith("CsvHelper"))
+ {
+ Console.WriteLine($"No summary found for '{memberName}'.");
+ }
+
+ return null;
+ }
+
+ private static string HtmlFormat(Type type, bool generateLinks = false, bool isCodeBlock = false)
+ {
+ var symbols = isCodeBlock ? Symbols.Code : Symbols.Html;
+
+ var @namespace = type.Namespace;
+ var name = type.Name;
+
+ if (type.IsByRef)
+ {
+ name = name.TrimEnd('&');
+ }
+
+ if (generateLinks)
+ {
+ if (@namespace.StartsWith("CsvHelper"))
+ {
+ name = $"[{name}](/api/{@namespace}/{name})";
+ }
+ else
+ {
+ name = $"[{name}](https://docs.microsoft.com/en-us/dotnet/api/{@namespace.ToLower()}.{name.ToLower()})";
+ }
+ }
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = type.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ name = name.Substring(0, name.IndexOf('`'));
+ genericArgumentsText = $"{symbols["<"]}{string.Join(", ", genericArguments.Select(a => HtmlFormat(a)))}{symbols[">"]}";
+ }
+
+ return $"{name}{genericArgumentsText}";
+ }
+
+ private static string HtmlFormat(MethodBase methodInfo, bool generateLinks = false, bool isCodeBlock = false)
+ {
+ var symbols = isCodeBlock ? Symbols.Code : Symbols.Html;
+
+ var @namespace = methodInfo.DeclaringType.Namespace;
+ var typeName = methodInfo.DeclaringType.Name;
+ var methodName = methodInfo.Name;
+
+ var name = methodName;
+ if (methodInfo.IsConstructor)
+ {
+ name = methodInfo.DeclaringType.IsGenericType
+ ? typeName.Substring(0, typeName.IndexOf('`'))
+ : typeName;
+ }
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = new List<Type>();
+ if (!methodInfo.IsConstructor)
+ {
+ genericArguments = methodInfo.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ genericArgumentsText = $"{symbols["<"]}{string.Join(", ", genericArguments.Select(a => HtmlFormat(a)))}{symbols[">"]}";
+ }
+ }
+
+ var parametersText = string.Empty;
+ var parameters = methodInfo.GetParameters().ToList();
+ if (parameters.Count > 0)
+ {
+ var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments();
+
+ parametersText = string.Join(", ", parameters.Select(p =>
+ {
+ // Don't generate links if the type is a generic parameter.
+ var shouldGenerateLinks = generateLinks &&
+ !(
+ typeGenericArguments.Any(a => $"{a.Namespace}.{a.Name}" == $"{p.ParameterType.Namespace}.{p.ParameterType.Name}") ||
+ genericArguments.Any(a => $"{a.Namespace}.{a.Name}" == $"{p.ParameterType.Namespace}.{p.ParameterType.Name}")
+ );
+
+ var outText = p.IsOut ? "out " : string.Empty;
+ return $"{outText}{HtmlFormat(p.ParameterType, shouldGenerateLinks)}";
+ }));
+ }
+
+ return $"{name}{genericArgumentsText}({parametersText})";
+ }
+
+ private static string XmlDocFormat(Type type)
+ {
+ var @namespace = type.Namespace;
+ var name = type.Name;
+
+ return $"{@namespace}.{name}";
+ }
+
+ private static string XmlDocFormat(MethodBase methodInfo)
+ {
+ var typeText = XmlDocFormat(methodInfo.DeclaringType);
+
+ var methodName = methodInfo.Name.Replace('.', '#');
+
+ var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments().ToList();
+
+ var methodGenericArguments = new List<Type>();
+ if (!methodInfo.IsConstructor)
+ {
+ methodGenericArguments = methodInfo.GetGenericArguments().ToList();
+ if (methodGenericArguments.Count > 0)
+ {
+ methodName = $"{methodName}``{methodGenericArguments.Count}";
+ }
+ }
+
+ var parametersText = string.Empty;
+ var parameters = methodInfo.GetParameters().ToList();
+ if (parameters.Count > 0)
+ {
+ parametersText = $"({string.Join(",", parameters.Select(p => XmlDocFormat(p.ParameterType, typeGenericArguments, methodGenericArguments)))})";
+ }
+
+ return $"{typeText}.{methodName}{parametersText}";
+ }
+
+ private static string XmlDocFormat(Type parameterType, List<Type> typeGenericParameters, List<Type> methodGenericParameters)
+ {
+ var @namespace = parameterType.Namespace;
+ var name = parameterType.Name;
+
+ if (parameterType.IsByRef)
+ {
+ name = name.TrimEnd('&');
+ }
+
+ var typeName = $"{@namespace}.{name}";
+
+ // Check if the parameter is a generic argument of a type.
+ var index = typeGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName);
+ if (index >= 0)
+ {
+ var refText = parameterType.IsByRef ? "@" : string.Empty;
+ return $"`{index}{refText}";
+ }
+
+ // Check if the parameter is a generic argument of a method.
+ index = methodGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName);
+ if (index >= 0)
+ {
+ var refText = parameterType.IsByRef ? "@" : string.Empty;
+ return $"``{index}{refText}";
+ }
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = parameterType.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ name = name.Substring(0, name.IndexOf('`'));
+ genericArgumentsText = $"{{{string.Join(",", genericArguments.Select(a => XmlDocFormat(a, typeGenericParameters, methodGenericParameters)))}}}";
+ }
+
+ if (parameterType.IsByRef)
+ {
+ name += "@";
+ }
+
+ return $"{@namespace}.{name}{genericArgumentsText}";
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs
new file mode 100644
index 0000000..c557199
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace CsvHelper.DocsGenerator.Formatters
+{
+ public class HtmlFormatter
+ {
+ public string Format(Type type, bool generateLinks = false, bool isCodeBlock = false)
+ {
+ var symbols = isCodeBlock ? Symbols.Code : Symbols.Html;
+
+ var @namespace = type.Namespace;
+ var name = type.Name;
+
+ if (type.IsByRef)
+ {
+ name = name.TrimEnd('&');
+ }
+
+ if (generateLinks)
+ {
+ if (@namespace.StartsWith("CsvHelper"))
+ {
+ name = $"[{name}](/api/{@namespace}/{name})";
+ }
+ else
+ {
+ name = $"[{name}](https://docs.microsoft.com/en-us/dotnet/api/{@namespace.ToLower()}.{name.ToLower()})";
+ }
+ }
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = type.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ name = name.Substring(0, name.IndexOf('`'));
+ genericArgumentsText = $"{symbols["<"]}{string.Join(", ", genericArguments.Select(a => Format(a)))}{symbols[">"]}";
+ }
+
+ return $"{name}{genericArgumentsText}";
+ }
+
+ public string Format(MethodBase methodInfo, bool generateLinks = false, bool isCodeBlock = false)
+ {
+ var symbols = isCodeBlock ? Symbols.Code : Symbols.Html;
+
+ var @namespace = methodInfo.DeclaringType.Namespace;
+ var typeName = methodInfo.DeclaringType.Name;
+ var methodName = methodInfo.Name;
+
+ var name = methodInfo.IsConstructor ? typeName : methodName;
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = new List<Type>();
+ if (!methodInfo.IsConstructor)
+ {
+ genericArguments = methodInfo.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ genericArgumentsText = $"{symbols["<"]}{string.Join(", ", genericArguments.Select(a => Format(a)))}{symbols[">"]}";
+ }
+ }
+
+ var parametersText = string.Empty;
+ var parameters = methodInfo.GetParameters().ToList();
+ if (parameters.Count > 0)
+ {
+ var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments();
+
+ parametersText = string.Join(", ", parameters.Select(p =>
+ {
+ // Don't generate links if the type is a generic parameter.
+ var shouldGenerateLinks = generateLinks &&
+ !(
+ typeGenericArguments.Any(a => $"{a.Namespace}.{a.Name}" == $"{p.ParameterType.Namespace}.{p.ParameterType.Name}") ||
+ genericArguments.Any(a => $"{a.Namespace}.{a.Name}" == $"{p.ParameterType.Namespace}.{p.ParameterType.Name}")
+ );
+
+ var outText = p.IsOut ? "out " : string.Empty;
+ return $"{outText}{Format(p.ParameterType, shouldGenerateLinks)}";
+ }));
+ }
+
+ return $"{name}{genericArgumentsText}({parametersText})";
+ }
+
+ public string Format(MemberInfo memberInfo, bool generateLinks = false, bool isCodeBlock = false)
+ {
+ return memberInfo.Name;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs
new file mode 100644
index 0000000..52b4846
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs
@@ -0,0 +1,18 @@
+using System.Collections.Generic;
+using System.Linq;
+
+namespace CsvHelper.DocsGenerator.Formatters
+{
+ public static class Symbols
+ {
+ public static readonly Dictionary<string, string> Html = new Dictionary<string, string>
+ {
+ { "<", "&lt;" },
+ { ">", "&gt;" },
+ { "[", "&lbrack;" },
+ { "]", "&rbrack;" }
+ };
+
+ public static readonly Dictionary<string, string> Code = new Dictionary<string, string>(Html.Select(pair => new KeyValuePair<string, string>(pair.Key, pair.Key)));
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs
new file mode 100644
index 0000000..5d24338
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace CsvHelper.DocsGenerator.Formatters
+{
+ public class XmlDocFormatter
+ {
+ public string Format(Type type)
+ {
+ return $"T:{FormatType(type)}";
+ }
+
+ public string Format(MethodBase methodInfo)
+ {
+ return $"M:{FormatMethod(methodInfo)}";
+ }
+
+ private string FormatType(Type type)
+ {
+ var @namespace = type.Namespace;
+ var name = type.Name;
+
+ return $"{@namespace}.{name}";
+ }
+
+ private string FormatMethod(MethodBase methodInfo)
+ {
+ var typeText = FormatType(methodInfo.DeclaringType);
+
+ var methodName = methodInfo.Name.Replace('.', '#');
+
+ var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments().ToList();
+
+ var methodGenericArguments = new List<Type>();
+ if (!methodInfo.IsConstructor)
+ {
+ methodGenericArguments = methodInfo.GetGenericArguments().ToList();
+ if (methodGenericArguments.Count > 0)
+ {
+ methodName = $"{methodName}``{methodGenericArguments.Count}";
+ }
+ }
+
+ var parametersText = string.Empty;
+ var parameters = methodInfo.GetParameters().ToList();
+ if (parameters.Count > 0)
+ {
+ parametersText = $"({string.Join(",", parameters.Select(p => FormatParameter(p.ParameterType, typeGenericArguments, methodGenericArguments)))})";
+ }
+
+ return $"{typeText}.{methodName}{parametersText}";
+ }
+
+ private string FormatParameter(Type parameterType, List<Type> typeGenericParameters, List<Type> methodGenericParameters)
+ {
+ var @namespace = parameterType.Namespace;
+ var name = parameterType.Name;
+
+ if (parameterType.IsByRef)
+ {
+ name = name.TrimEnd('&');
+ }
+
+ var typeName = $"{@namespace}.{name}";
+
+ // Check if the parameter is a generic argument of a type.
+ var index = typeGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName);
+ if (index >= 0)
+ {
+ var refText = parameterType.IsByRef ? "@" : string.Empty;
+ return $"`{index}{refText}";
+ }
+
+ // Check if the parameter is a generic argument of a method.
+ index = methodGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName);
+ if (index >= 0)
+ {
+ var refText = parameterType.IsByRef ? "@" : string.Empty;
+ return $"``{index}{refText}";
+ }
+
+ var genericArgumentsText = string.Empty;
+ var genericArguments = parameterType.GetGenericArguments().ToList();
+ if (genericArguments.Count > 0)
+ {
+ name = name.Substring(0, name.IndexOf('`'));
+ genericArgumentsText = $"{{{string.Join(",", genericArguments.Select(a => FormatParameter(a, typeGenericParameters, methodGenericParameters)))}}}";
+ }
+
+ if (parameterType.IsByRef)
+ {
+ name += "@";
+ }
+
+ return $"{@namespace}.{name}{genericArgumentsText}";
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/AssemblyGenerator.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/AssemblyGenerator.cs
new file mode 100644
index 0000000..76c4749
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/AssemblyGenerator.cs
@@ -0,0 +1,22 @@
+using CsvHelper.DocsGenerator.Infos;
+
+namespace CsvHelper.DocsGenerator.Generators
+{
+ public class AssemblyGenerator : DocumentGenerator
+ {
+ public AssemblyGenerator(AssemblyInfo assemblyInfo) : base(assemblyInfo) { }
+
+ protected override void GenerateContent()
+ {
+ content.AppendLine($"# {assemblyInfo.Assembly.GetName().Name} Namespaces");
+ content.AppendLine();
+ content.AppendLine("## Namespaces");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var @namespace in assemblyInfo.Namespaces)
+ {
+ content.AppendLine($"[{@namespace.Namespace}](/api/{@namespace.Namespace}) | ");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGenerator.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGenerator.cs
new file mode 100644
index 0000000..614e182
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGenerator.cs
@@ -0,0 +1,42 @@
+using CsvHelper.DocsGenerator.Infos;
+using System;
+using System.Text;
+
+namespace CsvHelper.DocsGenerator.Generators
+{
+ public abstract class DocumentGenerator
+ {
+ //protected readonly HtmlFormatter htmlFormatter = new HtmlFormatter();
+ protected readonly LinkGenerator linkGenerator = new LinkGenerator();
+ protected readonly AssemblyInfo assemblyInfo;
+ protected readonly NamespaceInfo namespaceInfo;
+ protected readonly TypeInfo typeInfo;
+ protected readonly StringBuilder content = new StringBuilder();
+
+ public DocumentGenerator(AssemblyInfo assemblyInfo)
+ {
+ this.assemblyInfo = assemblyInfo ?? throw new ArgumentNullException(nameof(assemblyInfo));
+ }
+
+ public DocumentGenerator(NamespaceInfo namespaceInfo)
+ {
+ this.namespaceInfo = namespaceInfo;
+ }
+
+ public DocumentGenerator(TypeInfo typeInfo)
+ {
+ this.typeInfo = typeInfo ?? throw new ArgumentNullException(nameof(typeInfo));
+ }
+
+ public string Generate()
+ {
+ content.Clear();
+
+ GenerateContent();
+
+ return content.ToString();
+ }
+
+ protected abstract void GenerateContent();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGeneratorFactory.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGeneratorFactory.cs
new file mode 100644
index 0000000..d9ece33
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/DocumentGeneratorFactory.cs
@@ -0,0 +1,22 @@
+using CsvHelper.DocsGenerator.Infos;
+
+namespace CsvHelper.DocsGenerator.Generators
+{
+ public class DocumentGeneratorFactory
+ {
+ public DocumentGenerator Create(AssemblyInfo assemblyInfo)
+ {
+ return new AssemblyGenerator(assemblyInfo);
+ }
+
+ public DocumentGenerator Create(NamespaceInfo namespaceInfo)
+ {
+ return new NamespaceGenerator(namespaceInfo);
+ }
+
+ public DocumentGenerator Create(TypeInfo typeInfo)
+ {
+ return new TypeGenerator(typeInfo);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/NamespaceGenerator.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/NamespaceGenerator.cs
new file mode 100644
index 0000000..b3a9314
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/NamespaceGenerator.cs
@@ -0,0 +1,50 @@
+using CsvHelper.DocsGenerator.Infos;
+
+namespace CsvHelper.DocsGenerator.Generators
+{
+ public class NamespaceGenerator : DocumentGenerator
+ {
+ public NamespaceGenerator(NamespaceInfo namespaceInfo) : base(namespaceInfo) { }
+
+ protected override void GenerateContent()
+ {
+ content.AppendLine($"# {namespaceInfo.Namespace} Namespace");
+
+ if (namespaceInfo.Classes.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine("## Classes");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var typeInfo in namespaceInfo.Classes)
+ {
+ content.AppendLine($"[{typeInfo.Type.GetHtmlName()}](/api/{namespaceInfo.Namespace}/{typeInfo.Type.GetHtmlName()}) | {typeInfo.Type.GetSummary()}");
+ }
+ }
+
+ if (namespaceInfo.Interfaces.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine("## Interfaces");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var typeInfo in namespaceInfo.Interfaces)
+ {
+ content.AppendLine($"[{typeInfo.Type.GetHtmlName()}](/api/{namespaceInfo.Namespace}/{typeInfo.Type.Name}) | {typeInfo.Type.GetSummary()}");
+ }
+ }
+
+ if (namespaceInfo.Enums.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine("## Enums");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var typeInfo in namespaceInfo.Enums)
+ {
+ content.AppendLine($"[{typeInfo.Type.GetHtmlName()}](/api/{namespaceInfo.Namespace}/{typeInfo.Type.Name}) | {typeInfo.Type.GetSummary()}");
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/TypeGenerator.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/TypeGenerator.cs
new file mode 100644
index 0000000..fa7533e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Generators/TypeGenerator.cs
@@ -0,0 +1,118 @@
+using CsvHelper.DocsGenerator.Infos;
+using System.Linq;
+
+namespace CsvHelper.DocsGenerator.Generators
+{
+ public class TypeGenerator : DocumentGenerator
+ {
+ public TypeGenerator(TypeInfo typeInfo) : base(typeInfo) { }
+
+ protected override void GenerateContent()
+ {
+ // Title
+ content.AppendLine($"# {typeInfo.Type.GetHtmlName()} {typeInfo.Type.GetTypeName()}");
+
+ // Namespace
+ content.AppendLine();
+ content.AppendLine($"Namespace: [{typeInfo.Type.Namespace}](/api/{typeInfo.Type.Namespace})");
+
+ // Summary
+ content.AppendLine();
+ content.AppendLine(typeInfo.Type.GetSummary());
+
+ // Definition
+ content.AppendLine();
+ content.AppendLine("```cs");
+ foreach (var attribute in typeInfo.Attributes)
+ {
+ content.AppendLine($"[{attribute.GetFullCodeName()}]");
+ }
+
+ var inheritanceText = string.Empty;
+ if (!typeInfo.Type.IsEnum && typeInfo.Implementers.Count > 0)
+ {
+ inheritanceText = $": {string.Join(", ", typeInfo.Implementers.Select(i => i.GetCodeName()))}";
+ }
+
+ var typeModifier = string.Empty;
+ if (typeInfo.Type.IsAbstract && typeInfo.Type.IsSealed && !typeInfo.Type.IsInterface)
+ {
+ typeModifier = "static ";
+ }
+ else if (typeInfo.Type.IsAbstract && !typeInfo.Type.IsSealed && !typeInfo.Type.IsInterface)
+ {
+ typeModifier = "abstract ";
+ }
+
+ content.AppendLine($"public {typeModifier}{typeInfo.Type.GetTypeName().ToLower()} {typeInfo.Type.GetCodeName()} {inheritanceText}");
+ content.AppendLine("```");
+
+ // Inheritance
+ if (typeInfo.Inheritance.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine($"Inheritance {string.Join(" -> ", typeInfo.Inheritance.Select(t => t.GetHtmlName()))}");
+ }
+
+ // Constructors
+ if (typeInfo.Constructors.Count > 0)
+ {
+ content.AppendLine("");
+ content.AppendLine("## Constructors");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var constructorInfo in typeInfo.Constructors)
+ {
+ content.AppendLine($"{constructorInfo.Constructor.GetHtmlName()} | {constructorInfo.Constructor.GetSummary()}");
+ }
+ }
+
+ // Fields
+ if (typeInfo.Fields.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine("## Fields");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var field in typeInfo.Fields)
+ {
+ content.AppendLine($"{field.GetHtmlName()} | {field.GetSummary()}");
+ }
+ }
+
+ // Properties
+ if (typeInfo.Properties.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine("## Properties");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var property in typeInfo.Properties)
+ {
+ if (property.IndexParameters.Count > 0)
+ {
+ var parameters = string.Join(", ", property.IndexParameters.Select(ip => ip.ParameterType.GetHtmlName()));
+ content.AppendLine($"this[{parameters}] | {property.Property.GetSummary()}");
+ }
+ else
+ {
+ content.AppendLine($"{property.Property.GetHtmlName()} | {property.Property.GetSummary()}");
+ }
+ }
+ }
+
+ // Methods
+ if (typeInfo.Methods.Count > 0)
+ {
+ content.AppendLine();
+ content.AppendLine("## Methods");
+ content.AppendLine("&nbsp; | &nbsp;");
+ content.AppendLine("- | -");
+ foreach (var method in typeInfo.Methods)
+ {
+ content.AppendLine($"{method.Method.GetHtmlName()} | {method.Method.GetSummary()}");
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/AssemblyInfo.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/AssemblyInfo.cs
new file mode 100644
index 0000000..8e14d42
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Reflection;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ [DebuggerDisplay("Name = {Name}")]
+ public class AssemblyInfo : Info
+ {
+ public Assembly Assembly { get; protected set; }
+
+ public List<NamespaceInfo> Namespaces { get; private set; }
+
+ public AssemblyInfo(Assembly assembly, XElement xmlDocs)
+ {
+ Assembly = assembly;
+
+ Namespaces =
+ (
+ from type in assembly.GetTypes()
+ where type.IsPublic
+ orderby type.Namespace ascending, type.Name ascending
+ group type by type.Namespace into g
+ select new NamespaceInfo(this, g.Key, g.ToList(), xmlDocs)
+ ).ToList();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/ConstructorInfo.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/ConstructorInfo.cs
new file mode 100644
index 0000000..3a00b19
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/ConstructorInfo.cs
@@ -0,0 +1,20 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ public class ConstructorInfo : Info
+ {
+ public System.Reflection.ConstructorInfo Constructor { get; private set; }
+
+ public List<System.Reflection.ParameterInfo> Parameters { get; private set; }
+
+ public ConstructorInfo(System.Reflection.ConstructorInfo constructorInfo, XElement xmlDocs)
+ {
+ Constructor = constructorInfo;
+
+ Parameters = constructorInfo.GetParameters().ToList();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/Info.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/Info.cs
new file mode 100644
index 0000000..fda1943
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/Info.cs
@@ -0,0 +1,105 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ [DebuggerDisplay("Name = {Name}, DisplayName = {DisplayName}, Namespace = {NameSpace}, FullName = {FullName}")]
+ public abstract class Info
+ {
+ //private string fullName;
+ //private string fullHtmlName;
+ //private string fullCodeName;
+
+ //protected readonly HtmlFormatter htmlFormatter = new HtmlFormatter();
+ //protected readonly XmlDocFormatter xmlDocFormatter = new XmlDocFormatter();
+
+ //public string Namespace { get; protected set; }
+
+ //public string Name { get; protected set; }
+
+ //public string HtmlName { get; protected set; }
+
+ //public string CodeName { get; protected set; }
+
+ //public string FullName
+ //{
+ // get => fullName ?? $"{Namespace}.{Name}";
+ // protected set => fullName = value;
+ //}
+
+ //public string FullHtmlName
+ //{
+ // get => fullHtmlName ?? $"{Namespace}.{HtmlName}";
+ // protected set => fullHtmlName = value;
+ //}
+
+ //public string FullCodeName
+ //{
+ // get => fullCodeName ?? $"{Namespace}.{CodeName}";
+ // protected set => fullCodeName = value;
+ //}
+
+ //public string Summary { get; protected set; }
+
+ protected string ParseSummary(string memberName, XElement xmlDocs)
+ {
+ var members = xmlDocs.Descendants("member");
+ var member = members?.SingleOrDefault(m => m.Attribute("name")?.Value == memberName);
+ var summary = member?.Element("summary");
+ if (summary != null)
+ {
+ var summaryText = new List<string>();
+ foreach (var node in summary.Nodes())
+ {
+ string text;
+ if (node.NodeType == XmlNodeType.Element)
+ {
+ var el = (XElement)node;
+ switch (el.Name.ToString())
+ {
+ case "paramref":
+ text = el.Attribute("name").Value;
+ break;
+ case "see":
+ text = el.Attribute("cref").Value.Substring(2);
+ break;
+ case "c":
+ text = el.Value;
+ break;
+ default:
+ throw new InvalidOperationException($"Unhandled element '{el.Name}'.");
+ }
+
+ text = $"``{text.Trim()}``";
+ }
+ else if (node.NodeType == XmlNodeType.Text)
+ {
+ text = node.ToString();
+ }
+ else
+ {
+ throw new InvalidOperationException($"Unhandled node type '{node.NodeType}'.");
+ }
+
+ text = Regex.Replace(text, @"\s{2,}", " ").Trim();
+
+ summaryText.Add(text);
+ }
+
+ return string.Join(" ", summaryText);
+ }
+
+ if (memberName.Substring(2).StartsWith("CsvHelper"))
+ {
+ Console.WriteLine($"No summary found for '{memberName}'.");
+ }
+
+ return null;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/MethodInfo.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/MethodInfo.cs
new file mode 100644
index 0000000..c73913e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/MethodInfo.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ public class MethodInfo : Info
+ {
+ public System.Reflection.MethodInfo Method { get; private set; }
+
+ public List<System.Reflection.ParameterInfo> Parameters { get; private set; }
+
+ public List<Type> GenericArguments { get; private set; }
+
+ public MethodInfo(System.Reflection.MethodInfo methodInfo, XElement xmlDocs)
+ {
+ Method = methodInfo;
+
+ Parameters = methodInfo.GetParameters().ToList();
+
+ GenericArguments = methodInfo.GetGenericArguments().ToList();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/NamespaceInfo.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/NamespaceInfo.cs
new file mode 100644
index 0000000..a143391
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/NamespaceInfo.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ [DebuggerDisplay("Name = {Name}")]
+ public class NamespaceInfo : Info
+ {
+ public AssemblyInfo Assembly { get; protected set; }
+
+ public string Namespace { get; protected set; }
+
+ public List<TypeInfo> Types { get; private set; } = new List<TypeInfo>();
+
+ public List<TypeInfo> Classes { get; private set; } = new List<TypeInfo>();
+
+ public List<TypeInfo> Interfaces { get; private set; } = new List<TypeInfo>();
+
+ public List<TypeInfo> Enums { get; private set; } = new List<TypeInfo>();
+
+ public NamespaceInfo(AssemblyInfo assemblyInfo, string @namespace, List<Type> types, XElement xmlDocs)
+ {
+ Assembly = assemblyInfo;
+
+ Namespace = @namespace;
+
+ foreach (var type in types)
+ {
+ var typeInfo = new TypeInfo(type, xmlDocs);
+ Types.Add(typeInfo);
+
+ if (type.IsClass)
+ {
+ Classes.Add(typeInfo);
+ }
+ else if (type.IsInterface)
+ {
+ Interfaces.Add(typeInfo);
+ }
+ else if (type.IsEnum)
+ {
+ Enums.Add(typeInfo);
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/PropertyInfo.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/PropertyInfo.cs
new file mode 100644
index 0000000..2d53638
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/PropertyInfo.cs
@@ -0,0 +1,24 @@
+using System.Collections.Generic;
+using System.Linq;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ public class PropertyInfo : Info
+ {
+ public List<System.Reflection.ParameterInfo> IndexParameters { get; protected set; }
+
+ public TypeInfo Type { get; protected set; }
+
+ public System.Reflection.PropertyInfo Property { get; protected set; }
+
+ public PropertyInfo(TypeInfo type, System.Reflection.PropertyInfo propertyInfo, XElement xmlDocs)
+ {
+ Type = type;
+
+ Property = propertyInfo;
+
+ IndexParameters = propertyInfo.GetIndexParameters().ToList();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/TypeInfo.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/TypeInfo.cs
new file mode 100644
index 0000000..18d67f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Infos/TypeInfo.cs
@@ -0,0 +1,93 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator.Infos
+{
+ public class TypeInfo : Info
+ {
+ private static readonly LinkGenerator linkGenerator = new LinkGenerator();
+
+ public Type Type { get; protected set; }
+
+ public List<Type> Attributes { get; protected set; }
+
+ public List<ConstructorInfo> Constructors { get; protected set; }
+
+ public List<Type> Interfaces { get; protected set; }
+
+ public List<FieldInfo> Fields { get; protected set; }
+
+ public List<PropertyInfo> Properties { get; protected set; }
+
+ public List<MethodInfo> Methods { get; protected set; }
+
+ public Stack<Type> Inheritance { get; protected set; }
+
+ public List<Type> Implementers { get; protected set; }
+
+ public TypeInfo(Type type, XElement xmlDocs)
+ {
+ Type = type;
+
+ Interfaces = type.GetInterfaces().ToList();
+
+ Constructors = type
+ .GetConstructors(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
+ .Select(c => new ConstructorInfo(c, xmlDocs))
+ .Where(c => !(c.Parameters.Count == 0 && string.IsNullOrEmpty(c.Constructor.GetSummary())))
+ .OrderBy(c => c.Parameters.Count)
+ .ToList();
+
+ Attributes = type
+ .GetCustomAttributes()
+ .Select(a => a.GetType())
+ .OrderBy(t => t.Name)
+ .ToList();
+
+ var fieldsFlags = type.IsEnum
+ ? BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly
+ : BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly;
+ Fields = type
+ .GetFields(fieldsFlags)
+ .OrderBy(f => f.Name)
+ .ToList();
+
+ Properties = type
+ .GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly)
+ .Select(p => new PropertyInfo(this, p, xmlDocs))
+ .OrderBy(p => p.Property.Name)
+ .ToList();
+
+ Methods = type
+ .GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly)
+ .Where(m => !m.IsSpecialName)
+ .Select(m => new MethodInfo(m, xmlDocs))
+ .OrderBy(m => m.Method.Name)
+ .ToList();
+
+ Inheritance = new Stack<Type>();
+ if (type.BaseType != null)
+ {
+ Inheritance.Push(type);
+ var currentType = type.BaseType;
+ do
+ {
+ Inheritance.Push(currentType);
+ currentType = currentType.BaseType;
+ }
+ while (currentType != null);
+ }
+
+ Implementers = new List<Type>();
+ if (type.BaseType != null && type.BaseType != typeof(object))
+ {
+ Implementers.Add(type.BaseType);
+ }
+
+ Implementers.AddRange(Interfaces.Select(i => i));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/LinkGenerator.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/LinkGenerator.cs
new file mode 100644
index 0000000..4e8dcc8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/LinkGenerator.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace CsvHelper.DocsGenerator
+{
+ public class LinkGenerator
+ {
+ public string GenerateLink(Type type)
+ {
+ if (type.Namespace.StartsWith("CsvHelper"))
+ {
+ return $"[{type.Name}](/api/{type.Namespace}/{type.Name})";
+ }
+
+ var fullName = $"{type.Namespace}.{type.Name}";
+
+ return $"[{type.Name}](https://docs.microsoft.com/en-us/dotnet/api/{fullName.ToLower()})";
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Program.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Program.cs
new file mode 100644
index 0000000..5d430d9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Program.cs
@@ -0,0 +1,18 @@
+using System;
+
+namespace CsvHelper.DocsGenerator
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ new Startup()
+ .Configure()
+ .Run();
+
+ Console.WriteLine();
+ Console.WriteLine("Press any key to exit.");
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs
new file mode 100644
index 0000000..698a60d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Startup.cs
@@ -0,0 +1,110 @@
+using CsvHelper.DocsGenerator.Generators;
+using CsvHelper.DocsGenerator.Infos;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+using System.IO;
+using System.Linq;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator
+{
+ public class Startup
+ {
+ public Startup Configure()
+ {
+ return this;
+ }
+
+ public Startup Run()
+ {
+ var outputDirectoryPath = Path.Combine(Directory.GetCurrentDirectory(), "Output");
+ if (Directory.Exists(outputDirectoryPath))
+ {
+ Directory.Delete(outputDirectoryPath, true);
+ }
+
+ Directory.CreateDirectory(outputDirectoryPath);
+
+ var xmlDocs = XElement.Load("CsvHelper.xml");
+
+ var assemblyInfo = new AssemblyInfo(typeof(CsvHelperException).Assembly, xmlDocs);
+
+ GenerateMarkdownFiles(outputDirectoryPath, assemblyInfo);
+ GenerateToc(outputDirectoryPath, assemblyInfo);
+
+ return this;
+ }
+
+ private void GenerateMarkdownFiles(string outputDirectoryPath, AssemblyInfo assemblyInfo)
+ {
+ var documentGeneratorFactory = new DocumentGeneratorFactory();
+
+ // Write assembly file.
+ var documentGenerator = documentGeneratorFactory.Create(assemblyInfo);
+ var content = documentGenerator.Generate();
+ var filePath = Path.Combine(outputDirectoryPath, "api.md");
+ File.WriteAllText(filePath, content);
+
+ outputDirectoryPath = Path.Combine(outputDirectoryPath, "api");
+ Directory.CreateDirectory(outputDirectoryPath);
+
+ // Write namespace files and directories.
+ foreach (var @namespace in assemblyInfo.Namespaces)
+ {
+ var directoryPath = Path.Combine(outputDirectoryPath, @namespace.Namespace);
+ if (!Directory.Exists(directoryPath))
+ {
+ Directory.CreateDirectory(directoryPath);
+ }
+
+ documentGenerator = documentGeneratorFactory.Create(@namespace);
+ content = documentGenerator.Generate();
+ filePath = Path.Join(outputDirectoryPath, $"{@namespace.Namespace}.md");
+ File.WriteAllText(filePath, content);
+ }
+
+ // Write type files.
+ foreach (var @namespace in assemblyInfo.Namespaces)
+ {
+ var directoryPath = Path.Combine(outputDirectoryPath, @namespace.Namespace);
+ foreach (var typeInfo in @namespace.Types)
+ {
+ documentGenerator = documentGeneratorFactory.Create(typeInfo);
+ content = documentGenerator.Generate();
+ filePath = Path.Combine(directoryPath, $"{typeInfo.Type.Name}.md");
+ File.WriteAllText(filePath, content);
+ }
+ }
+ }
+
+ private void GenerateToc(string outputDirectoryPath, AssemblyInfo assemblyInfo)
+ {
+ var toc = new JObject
+ (
+ new JProperty("api", new JObject
+ (
+ new JProperty("title", "CsvHelper Namespaces"),
+ new JProperty("path", "api"),
+ new JProperty("children", new JArray
+ (
+ assemblyInfo.Namespaces.Select(namespaceInfo => new JObject(
+ new JProperty("title", namespaceInfo.Namespace),
+ new JProperty("path", $"api/{namespaceInfo.Namespace}"),
+ new JProperty("children", new JArray
+ (
+ namespaceInfo.Types.Select(typeInfo => new JObject
+ (
+ new JProperty("title", typeInfo.Type.Name),
+ new JProperty("path", $"api/{namespaceInfo.Namespace}/{typeInfo.Type.Name}")
+ ))
+ ))
+ ))
+ ))
+ ))
+ );
+
+ var filePath = Path.Combine(outputDirectoryPath, "api.json");
+ File.WriteAllText(filePath, JsonConvert.SerializeObject(toc, Formatting.Indented));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/XmlDocs.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/XmlDocs.cs
new file mode 100644
index 0000000..b1c9c83
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/XmlDocs.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Xml.Linq;
+
+namespace CsvHelper.DocsGenerator
+{
+ public static class XmlDocs
+ {
+ private static readonly Lazy<XElement> lazy = new Lazy<XElement>(() => XElement.Load("CsvHelper.xml"));
+
+ public static XElement XElement => lazy.Value;
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/docs/.nojekyll b/ThirdParty/CsvHelper-master/docs/.nojekyll
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/.nojekyll
diff --git a/ThirdParty/CsvHelper-master/docs/api/index.html b/ThirdParty/CsvHelper-master/docs/api/index.html
new file mode 100644
index 0000000..6e555f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/api/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Index | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming soon...</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/browserconfig.xml b/ThirdParty/CsvHelper-master/docs/browserconfig.xml
new file mode 100644
index 0000000..ae389fe
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/browserconfig.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square70x70logo src="/ms-icon-70x70.png"/>
+ <square150x150logo src="/ms-icon-150x150.png"/>
+ <square310x310logo src="/ms-icon-310x310.png"/>
+ <TileColor>#ffffff</TileColor>
+ </tile>
+ </msapplication>
+</browserconfig> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/docs/change-log/index.html b/ThirdParty/CsvHelper-master/docs/change-log/index.html
new file mode 100644
index 0000000..7607512
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/change-log/index.html
@@ -0,0 +1,1808 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Change Log | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="change-log">Change Log</h1>
+<h3 id="section">30.0.1</h3>
+<h4 id="bug-fixes">Bug Fixes</h4>
+<ul>
+<li>Fixed issue when writing with the escape char not being escaped if it was different than the quote char.</li>
+<li>Fixed issue with <code>CsvWriter</code> not passing <code>leavOpen</code> parameter to other constructor call.</li>
+<li>Fixed issue with TypeConverter being assigned to a member that has a Convert expression assigned to it.</li>
+</ul>
+<h3 id="section-1">30.0.0</h3>
+<h4 id="features">Features</h4>
+<ul>
+<li>Added <code>Field</code> and <code>RawRecord</code> to <code>BadDataException</code>.</li>
+<li>Pass <code>IWriterConfiguration</code> into <code>CsvWriter</code> constructor instead of <code>CsvConfiguration</code>.</li>
+<li>Allow inherited header prefixes.</li>
+<li>Allow mapping to dynamic properties.</li>
+<li>Added <code>MemberName</code> to the type converter exception message.</li>
+<li>Added <code>MaxFieldSize</code> configuration. If max size is set and the size is reached, <code>MaxFieldSizeException</code> is thrown.</li>
+<li>Added class level attribute capability.<br />
+New Attributes:
+<ul>
+<li><code>BufferSizeAttribute</code></li>
+<li><code>CacheFieldsAttribute</code></li>
+<li><code>CommentAttribute</code></li>
+<li><code>CountBytesAttribute</code></li>
+<li><code>DelimiterAttribute</code></li>
+<li><code>DetectColumnCountChangesAttribute</code></li>
+<li><code>DetectDelimiterAttribute</code></li>
+<li><code>DetectDelimiterValueAttribute</code></li>
+<li><code>EncodingAttribute</code></li>
+<li><code>EscapeAttribute</code></li>
+<li><code>ExceptionMessagesContainRawDataAttribute</code></li>
+<li><code>HasHeaderRecordAttribute</code></li>
+<li><code>IgnoreBlankLinesAttribute</code></li>
+<li><code>IgnoreReferencesAttribute</code></li>
+<li><code>IncludePrivateMembersAttribute</code></li>
+<li><code>InjectionCharactersAttribute</code></li>
+<li><code>InjectionEscapeCharacterAttribute</code></li>
+<li><code>InjectionOptionsAttribute</code></li>
+<li><code>LineBreakInQuotedFieldIsBadDataAttribute</code></li>
+<li><code>MaxFieldSizeAttribute</code></li>
+<li><code>ModeAttribute</code></li>
+<li><code>NewLineAttribute</code></li>
+<li><code>ProcessFieldAttribute</code></li>
+<li><code>QuoteAttribute</code></li>
+<li><code>TrimOptionsAttribute</code></li>
+<li><code>UseNewObjectForNullReferenceMembersAttribute</code></li>
+<li><code>WhiteSpaceCharsAttribute</code></li>
+</ul>
+</li>
+<li>Added <code>params object[] constructorArgs</code> to <code>TypeConverterAttribute</code>.</li>
+<li>Added validation message expression to <code>Validate</code> mapping.</li>
+<li>Added <code>IReaderRow</code> to <code>ValidateArgs</code>.</li>
+<li>Relax <code>Default</code> and <code>Constant</code> type constraints to <code>IsAssignableFrom</code>.</li>
+</ul>
+<h4 id="bug-fixes-1">Bug Fixes</h4>
+<ul>
+<li>Added <code>null</code> check in <code>WriteRecords</code>.</li>
+<li>Fixed interpolation in exception message.</li>
+<li>Fixed constructor mapping issue where parameter has a type converter but would still try and use constructor mapping.</li>
+</ul>
+<h4 id="breaking-changes">Breaking Changes</h4>
+<ul>
+<li>Added <code>string field</code> and <code>string rawRecord</code> to <code>BadDataException</code> constructor.</li>
+<li>Added <code>double MaxFieldSize { get; }</code> to <code>IParserConfiguration</code>.</li>
+<li>Added <code>bool LeaveOpen { get; }</code> to <code>IWriterConfiguration</code>.</li>
+<li>Added <code>bool LeaveOpen { get; }</code> to <code>IParserConfiguration</code>.</li>
+<li>Added <code>IReaderRow row</code> to <code>ValidateArgs</code> constructor.</li>
+</ul>
+<h3 id="section-2">29.0.0</h3>
+<h4 id="features-1">Features</h4>
+<ul>
+<li>Added support for <code>TypeConverter</code> factories. This allows for the ability to handle many types at once.
+Code that manually handle nullable, enums, and collections were changed into factories.</li>
+<li>Moved delimiter detection into a configuration function.
+This allows for a user to easily change the detection logic.
+Default logic is in <code>ConfigurationFunction.GetDelimiter</code>.</li>
+<li>Changed <code>CsvConfiguration.SanitizeInjection</code> flag to <code>CsvConfiguration.InjectionOptions</code> enum.
+<ul>
+<li>Options are:
+<ul>
+<li>None - Default. Does no injection protection. The is default because it's not a part of CSV and is used for an external tool.</li>
+<li>Escape - Escapes the field based on OWASP recommendations if an injection char is detected.</li>
+<li>Strip - Removes the injection character.</li>
+<li>Exception - Throws an exception if an injection char is detected.</li>
+</ul>
+</li>
+<li>Added <code>\t</code> and <code>\r</code> to <code>CsvConfiguration.InjectionEscapeCharacter</code>.</li>
+<li>Changed <code>CsvConfiguration.InjectionEscapeCharacter</code> from <code>\t</code> to <code>'</code>.</li>
+</ul>
+</li>
+<li><code>CsvDataReader.GetDataTypeName</code> will use types when the schema table is overridden.</li>
+<li>More detail added to <code>CsvConfiguration.Validate</code> exception messages.</li>
+<li>Reduce double dictionary lookup in a few places.</li>
+</ul>
+<h4 id="bug-fixes-2">Bug Fixes</h4>
+<ul>
+<li>Fixed issues with delimiter detection logic.</li>
+<li>Missing <code>ConfigureAwait(false)</code> added to async calls.</li>
+<li>Fixed issue with <code>CsvReader.TryGetField</code> throwing an exception when multiple headers are read.</li>
+<li>Fixed issue with <code>MemberMap.Validate</code> passing the wrong type into the expression call.</li>
+<li>Fixed issue with <code>MemberMap&lt;T&gt;.Convert</code> not working with <code>static</code> methods.</li>
+<li>Fixed issue with <code>DateTimeConverter</code> and <code>DateTimeOffsetConverter</code> throwing an exception other than <code>TypeConverterException</code> on failure.</li>
+<li>Fixed issue where <code>MissingFieldFound</code> was not being called if <code>IgnoreBlankLines</code> was off.</li>
+</ul>
+<h4 id="breaking-changes-1">Breaking Changes</h4>
+<ul>
+<li><code>CsvConfiguration.SanitizeForInjection</code> -&gt; <code>CsvConfiguration.InjectionOptions</code></li>
+<li><code>bool IWriterConfiguration.SanitizeForInjection</code> -&gt; <code>InjectionOptions IWriterConfiguration.InjectionOptions</code></li>
+<li><code>CsvConfiguration.InjectionEscapeCharacter</code> changed from <code>\t</code> to <code>'</code>.</li>
+<li>Added <code>\t</code> and <code>\r</code> to <code>CsvConfiguration.InjectionCharacters</code>.</li>
+<li>Added <code>GetDelimiter IParserConfiguration.GetDelimiter</code> delegate.</li>
+</ul>
+<h3 id="section-3">28.0.1</h3>
+<h4 id="bug-fixes-3">Bug Fixes</h4>
+<ul>
+<li>Disabled nullable until all null issues are fixed.</li>
+</ul>
+<h3 id="section-4">28.0.0</h3>
+<h4 id="features-2">Features</h4>
+<ul>
+<li>Updated delimiter detection algorithm.
+<ul>
+<li>Strips escaped text based on mode.</li>
+<li>Only looks for delimiters that appear on every line.</li>
+<li>Uses <code>CultureInfo.TextInfo.ListSeparator</code> if it's on every line.</li>
+</ul>
+</li>
+<li>Cache processed fields in parser so they're not processed on every access.</li>
+<li>Cache <code>CsvParser.Record[]</code> so multiple calls wont' regenerate it.</li>
+<li><code>ShouldSkipRecord</code> is <code>null</code> by default and won't get called if not set.</li>
+<li><code>ShouldSkipRecordArgs</code> holds <code>IReaderRow</code> now instead of <code>string[]</code>.</li>
+<li>Changed <code>CsvParser</code> constructor to take in <code>IParserConfiguration</code> instead of <code>CsvConfiguration</code>.</li>
+<li>Changed <code>CsvReader</code> constructor to take in <code>IReaderConfiguration</code> instead of <code>CsvConfiguration</code>.</li>
+</ul>
+<h4 id="bug-fixes-4">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where collection types weren't getting the correct <code>MemberMapData</code> passed to them when converting the item.</li>
+<li>Fixed issue where <code>BadDataFound</code> was being called multiple times for the same field.</li>
+<li>Fixed issue where you can't read with no header when a name has been mapped.</li>
+<li>Fixed issue where quoted fields not correctly being identified if there was a buffer swap on white space before quote.</li>
+</ul>
+<h4 id="breaking-changes-2">Breaking Changes</h4>
+<ul>
+<li><code>ShouldSkipRecordArgs</code> holds <code>IReaderRow</code> now instead of <code>string[]</code>.</li>
+<li>Removed <code>ConfigurationFunctions.ShouldSkipRecord</code> as the default is now <code>null</code>.</li>
+<li>Added <code>IParserConfiguration.Validate</code>.</li>
+</ul>
+<h3 id="section-5">27.2.1</h3>
+<h4 id="bug-fixes-5">Bug Fixes</h4>
+<ul>
+<li>Changed dependencies to minimal needed version.</li>
+</ul>
+<h3 id="section-6">27.2.0</h3>
+<h4 id="features-3">Features</h4>
+<ul>
+<li>Support for net60 <code>DateOnly</code> and <code>TimeOnly</code> types.</li>
+</ul>
+<h3 id="section-7">27.1.1</h3>
+<h4 id="bug-fixes-6">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with delimiter detection in parser async read.</li>
+</ul>
+<h3 id="section-8">27.1.0</h3>
+<h4 id="features-4">Features</h4>
+<ul>
+<li>Added IgnoreBaseAttribute to not look at the base class when auto mapping.</li>
+</ul>
+<h3 id="section-9">27.0.4</h3>
+<h4 id="bug-fixes-7">Bug Fixes</h4>
+<ul>
+<li>Changed delimiter detection to look line by line instead of the full buffer.</li>
+</ul>
+<h3 id="section-10">27.0.3</h3>
+<h4 id="bug-fixes-8">Bug Fixes</h4>
+<ul>
+<li>Specified exact dependency version matches.</li>
+</ul>
+<h3 id="section-11">27.0.2</h3>
+<h4 id="bug-fixes-9">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with delimiter detection.</li>
+</ul>
+<h3 id="section-12">27.0.1</h3>
+<h4 id="bug-fixes-10">Bug Fixes</h4>
+<ul>
+<li><code>\t</code> wasn't removed and just an exception was being thrown.</li>
+</ul>
+<h3 id="section-13">27.0.0</h3>
+<h4 id="features-5">Features</h4>
+<ul>
+<li>Config option to auto detect delimiter. Off by default.</li>
+<li>Added ability to apply a type converter to all registered types.</li>
+<li>Added ability to apply type converter options to all registered types.</li>
+<li>Added ability to pass an IAsyncEnumerable to WriteRecords.</li>
+<li>Added option to use default value on conversion failure.</li>
+</ul>
+<h4 id="breaking-changes-3">Breaking Changes</h4>
+<ul>
+<li>Added <code>IParserConfiguration.DetectDelimiter</code>.</li>
+<li>Added <code>IParserConfiguration.DetectDelimiterValues</code>.</li>
+<li>Added <code>IWriter.WriteRecordsAsync&lt;T&gt;(IAsyncEnumerable&lt;T&gt; records, CancellationToken cancellationToken = default)</code>.</li>
+<li>Removed <code>\t</code> from <code>CsvConfiguration.WhiteSpaceChars</code> as a default.</li>
+</ul>
+<h3 id="section-14">26.1.0</h3>
+<h4 id="features-6">Features</h4>
+<ul>
+<li>Allow schema of destination table to be specified in CsvDataReader.</li>
+</ul>
+<h3 id="section-15">26.0.1</h3>
+<h4 id="bug-fixes-11">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with constant not working when the field is missing.</li>
+</ul>
+<h3 id="section-16">26.0.0</h3>
+<h4 id="features-7">Features</h4>
+<ul>
+<li>Added configuration for <code>ExceptionMessagesContainRawData</code> that defaults to true.</li>
+</ul>
+<h4 id="bug-fixes-12">Bug Fixes</h4>
+<ul>
+<li>Removed all <code>init</code> properties. These were causing people too many problems.</li>
+<li>Fixed issue with exception message not containing the header record.</li>
+</ul>
+<h4 id="breaking-changes-4">Breaking Changes</h4>
+<ul>
+<li>Added <code>bool IParserConfiguration.ExceptionMessagesContainRawData { get; }</code>.</li>
+<li>Added <code>bool IWriterConfiguration.ExceptionMessagesContainRawData { get; }</code>.</li>
+<li>All delegate args objects have <code>init</code> removed and now have constructors with parameters.
+<ul>
+<li>BadDataFound</li>
+<li>ConvertFromString</li>
+<li>GetConstructor</li>
+<li>GetDynamicPropertyName</li>
+<li>HeaderValidated</li>
+<li>MissingFieldFound</li>
+<li>PrepareHeaderForMatch</li>
+<li>ReadingExceptionOccurred</li>
+<li>ReferenceHeaderPrefix</li>
+<li>ShouldQuote</li>
+<li>ShouldSkipRecord</li>
+<li>ShouldUseConstructorParameter</li>
+<li>Validate</li>
+</ul>
+</li>
+</ul>
+<h3 id="section-17">25.0.0</h3>
+<h4 id="bug-fixes-13">Bug Fixes</h4>
+<ul>
+<li>Fixed stack overflow issue with accessing Parser[int] or Parser.Record in BaddataFound callback. Throws an exception explaining issue now.</li>
+</ul>
+<h4 id="breaking-changes-5">Breaking Changes</h4>
+<ul>
+<li>All delegate args had their non-parameterless constructor removed in favor of using <code>init</code>.</li>
+</ul>
+<h3 id="section-18">24.0.1</h3>
+<h4 id="bug-fixes-14">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with Trimming all white space.</li>
+</ul>
+<h3 id="section-19">24.0.0</h3>
+<h4 id="features-8">Features</h4>
+<ul>
+<li>Added <code>CancellationToken</code> to reading and writing async methods.</li>
+</ul>
+<h4 id="bug-fixes-15">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>ShouldQuote</code> not having the correct field type when writing records instead of fields.</li>
+<li>Fixed issue with <code>CharCount</code> and <code>ByteCount</code> when trimming.</li>
+</ul>
+<h4 id="breaking-changes-6">Breaking Changes</h4>
+<ul>
+<li><code>void IWriterRow.WriteConvertedField(string field)</code> -&gt; <code>void IWriterRow.WriteConvertedField(string field, Type fieldType)</code></li>
+<li><code>void CsvWriter.WriteConvertedField(string field)</code> -&gt; <code>void CsvWriter.WriteConvertedField(string field, Type fieldType)</code></li>
+</ul>
+<h3 id="section-20">23.0.0</h3>
+<h4 id="features-9">Features</h4>
+<ul>
+<li>Changed public <code>init</code> properties to <code>set</code>. Once VB.NET implements <code>init</code>, it can change back.</li>
+<li>Made method <code>CsvWriter.WriteBuffer</code> protected so sub classes can write fields.</li>
+<li><code>CsvWriter.Flush</code> and <code>CsvWriter.FlushAsync</code> will now flush the underlying <code>TextWriter</code>.</li>
+<li>Changed all <code>delegate</code> methods to accept an args <code>struct</code> instead of parameters. This makes it easier to understand what parameters are passed in, and allows for additional parameters to be added later without a breaking change.</li>
+</ul>
+<h4 id="breaking-changes-7">Breaking Changes</h4>
+<ul>
+<li>Removed the large <code>CsvConfiguration</code> constructor. The properties are now settable, so this isn't needed for VB.NET.</li>
+<li>All delegates now take in a single struct argument.
+<ul>
+<li>BadDataFound</li>
+<li>ConvertFromString</li>
+<li>GetConstructor</li>
+<li>GetDynamicPropertyName</li>
+<li>HeaderValidated</li>
+<li>MissingFieldFound</li>
+<li>PrepareHeaderForMatch</li>
+<li>ReadingExceptionOccurred</li>
+<li>ReferenceHeaderPrefix</li>
+<li>ShouldQuote</li>
+<li>ShouldSkipRecord</li>
+<li>ShouldUseConstructorParameter</li>
+<li>Validate</li>
+</ul>
+</li>
+</ul>
+<h3 id="section-21">22.1.2</h3>
+<h4 id="bug-fixes-16">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with data corruption when parser buffer ran out in middle of escape and quote.</li>
+</ul>
+<h3 id="section-22">22.1.1</h3>
+<h4 id="bug-fixes-17">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where CsvConfiguration.NewLine was being set when value is null in constructor causing IsNewLine to be true.</li>
+</ul>
+<h3 id="section-23">22.1.0</h3>
+<h4 id="features-10">Features</h4>
+<ul>
+<li>Added <code>[EnumIgnoreAttribute]</code>.</li>
+</ul>
+<h3 id="bug-fixes-18">Bug Fixes</h3>
+<ul>
+<li>Fixed issue with <code>EnumIgnoreCase</code> value not making it to the converter when reading.</li>
+</ul>
+<h3 id="section-24">22.0.0</h3>
+<h4 id="features-11">Features</h4>
+<ul>
+<li>Changed <code>ParserMode</code> to <code>CsvMode</code> and added the modes to <code>CsvWriter</code>.</li>
+<li>Added <code>Type fieldType</code> parameter to <code>ShouldQuote</code> delegate.</li>
+<li>Added <code>TypeConverterOptions.EnumIgnoreCase</code> (default is false). Allows <code>EnumConverter</code> to ignore case when matching enum names, values, or <code>NameAttribute</code>.</li>
+</ul>
+<h4 id="bug-fixes-19">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>EnumConverter</code> when duplicate names or values appeared in an Enum.</li>
+</ul>
+<h4 id="breaking-changes-8">Breaking Changes</h4>
+<ul>
+<li><code>ParserMode</code> -&gt; <code>CsvMode</code></li>
+<li>Added <code>IParserConfiguration.ProcessFieldBufferSize</code>.</li>
+<li>Added <code>IWriterConfiguration.Mode</code>.</li>
+<li><code>ShouldQuote(string, IWriterRow)</code> -&gt; <code>ShouldQuote(string, Type, IWriterRow)</code>.</li>
+<li><code>EnumConverter</code> was changed to case sensitive by default.</li>
+</ul>
+<h3 id="section-25">21.3.1</h3>
+<h4 id="bug-fixes-20">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with CsvContext not being passed into AutoMap.</li>
+</ul>
+<h3 id="section-26">21.3.0</h3>
+<h4 id="features-12">Features</h4>
+<ul>
+<li>Added back Excel compatibility for bad data fallback.
+<ol>
+<li>If a field doesn't start with a <code>Quote</code>, read until a <code>Delimiter</code> or <code>NewLine</code> is found.</li>
+<li>If in quoted field and a <code>Quote</code> is found that isn't preceded by an <code>Escape</code>, read until a <code>Delimiter or </code>NewLine` is found.</li>
+<li><code>TrimOptions.Trim</code> will be applied before these rules.</li>
+</ol>
+</li>
+</ul>
+<h3 id="section-27">21.2.1</h3>
+<h4 id="bug-fixes-21">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with processed field buffer not being large enough on resize.</li>
+</ul>
+<h3 id="section-28">21.2.0</h3>
+<h4 id="features-13">Features</h4>
+<ul>
+<li>Process boolean and null type converter options when writing.</li>
+</ul>
+<h3 id="section-29">21.1.2</h3>
+<h4 id="bug-fixes-22">Bug Fixes</h4>
+<ul>
+<li>Fixed parsing issue with state not being reset when buffer is filled in the middle of a state.</li>
+</ul>
+<h3 id="section-30">21.1.1</h3>
+<h4 id="bug-fixes-23">Bug Fixes</h4>
+<ul>
+<li>Fixed parsing issue with buffer ending in the middle of a line ending.</li>
+</ul>
+<h3 id="section-31">21.1.0</h3>
+<h4 id="features-14">Features</h4>
+<ul>
+<li>Added ParserMode.NoEscape. This will ignore quotes and escape characters.</li>
+</ul>
+<h3 id="section-32">21.0.6</h3>
+<h4 id="bug-fixes-24">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with writing a field that is larger then 2x the buffer size.</li>
+</ul>
+<h3 id="section-33">21.0.5</h3>
+<h4 id="bug-fixes-25">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with VB not being able to set <code>init</code> properties on CsvConfiguration by adding a constructor that takes in all properties as optional named arguments.</li>
+</ul>
+<h3 id="section-34">21.0.4</h3>
+<h4 id="bug-fixes-26">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with cache miss in on both the reader and writer.</li>
+</ul>
+<h3 id="section-35">21.0.3</h3>
+<p>No changes.</p>
+<h3 id="section-36">21.0.2</h3>
+<h4 id="bug-fixes-27">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>CsvConfiguration.NewLine</code> not defaulting to '\r\n'.</li>
+</ul>
+<h3 id="section-37">21.0.1</h3>
+<h4 id="big-fixes">Big Fixes</h4>
+<ul>
+<li>Fixed issue with <code>CsvWriter</code> not keeping track of <code>Row</code> and <code>Index</code>.</li>
+</ul>
+<h3 id="section-38">21.0.0</h3>
+<h4 id="features-15">Features</h4>
+<ul>
+<li><code>CsvConfiguration.NewLine</code> changed to a <code>string</code>. You can now read and write any string you like for a line ending. This defaults to <code>Environment.NewLine</code>. When reading, if the value is not explicitly set <code>\r\n</code>, <code>\r</code>, or <code>\n</code> will still be used.</li>
+</ul>
+<h4 id="bug-fixes-28">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with other platforms than net50 using <code>init</code>.</li>
+<li>Fixed issue with being unable to write \r\n in an environment that does use that for <code>Environment.NewLine</code>.</li>
+</ul>
+<h4 id="breaking-changes-9">Breaking Changes</h4>
+<ul>
+<li><code>char? CsvConfiguration.NewLine</code> changed to <code>string CsvConfiguration.NewLine</code>.</li>
+</ul>
+<h3 id="section-39">20.0.0</h3>
+<h4 id="features-16">Features</h4>
+<ul>
+<li>Parser performance.</li>
+<li>Writer performance.</li>
+<li>Changed CsvConfiguration to a read only <code>record</code> to eliminate threading issues.</li>
+<li>Unix parsing mode. Uses escape character instead of field quoting. Configurable <code>NewLine</code>.</li>
+<li>Field caching. Disabled by default. When enabled, this will cache all fields created so duplicate fields won't need to create a new string from a character array.</li>
+</ul>
+<h4 id="breaking-changes-10">Breaking Changes</h4>
+<ul>
+<li>Removed <code>Caches</code> enum.</li>
+<li><code>ReadingContext</code> and <code>WritingContext</code> were merged into a single <code>CsvContext</code>. Anywhere that used either was changed to <code>CsvContext</code>.</li>
+<li>All <code>Func</code>s and <code>Action</code>s now have their own <code>delegate</code>.</li>
+<li><code>ConvertUsing</code> renamed to <code>Convert</code>.</li>
+<li><code>ShouldQuote</code> now takes in <code>IWriterRow</code> instead of <code>CsvContext</code>.</li>
+<li><code>CsvConfiguration</code> changed from a <code>class</code> to a <code>record</code>.</li>
+<li>All <code>CsvConfiguration</code> properties changed to read only <code>get; init;</code>.</li>
+<li><code>CsvConfiguration.NewLine</code> changed to <code>char?</code>.</li>
+<li><code>CsvConfiguration.NewLineString</code> removed.</li>
+<li><code>CsvConfiguration.RegisterClassMap</code> moved to <code>CsvContext</code>.</li>
+<li><code>CsvConfiguration.UnregisterClassMap</code> moved to <code>CsvContext</code>.</li>
+<li><code>CsvConfiguration.AutoMap</code> moved to <code>CsvContext</code>.</li>
+<li>All <code>IParserConfiguration</code> setters removed.</li>
+<li><code>bool IParserConfiguration.CacheFields</code> added.</li>
+<li><code>bool IParserConfiguration.LeaveOpen</code> added.</li>
+<li><code>char? IParserConfiguration.NewLine</code> added.</li>
+<li><code>ParserMode IParserConfiguration.Mode</code> added.</li>
+<li><code>IParserConfiguration.IgnoreQuotes</code> removed.</li>
+<li><code>char[] IParserConfiguration.WhiteSpaceChars</code> added.</li>
+<li>All <code>IReaderConfiguration</code> setters removed.</li>
+<li><code>IReaderConfiguration.TypeConverterOptionsCache</code> removed.</li>
+<li><code>IReaderConfiguration.TypeConverterCache</code> removed.</li>
+<li><code>IReaderConfiguration.Maps</code> removed.</li>
+<li><code>IReaderConfiguration.RegisterClassMap</code> removed.</li>
+<li><code>IReaderConfiguration.UnregisterClassMap</code> removed.</li>
+<li><code>IReaderConfiguration.AutoMap</code> removed.</li>
+<li><code>ISerializerConfiguration</code> removed and properties added to <code>IWriterConfiguration</code>.</li>
+<li>All <code>IWriterConfiguration</code> setters removed.</li>
+<li><code>IWriterConfiguration.QuoteString</code> removed.</li>
+<li><code>IWriterConfiguration.TypeConverterCache</code> removed.</li>
+<li><code>IWriterConfiguration.MemberTypes</code> removed.</li>
+<li><code>IWriterConfiguration.Maps</code> removed.</li>
+<li><code>IWriterConfiguration.RegisterClassMap</code> removed.</li>
+<li><code>IWriterConfiguration.UnregisterClassMap</code> removed.</li>
+<li><code>IWriterConfiguration.AutoMap</code> removed.</li>
+<li><code>MemberMap.Optional</code> added.</li>
+<li><code>MemberMap&lt;TClass, TMember&gt;.ConvertUsing</code> renamed to <code>Convert</code>.</li>
+<li><code>CsvFieldReader</code> removed.</li>
+<li><code>CsvParser.Read</code> returns <code>boolean</code> instead of <code>string[]</code>.</li>
+<li><code>CsvParser</code> constructors that take in a <code>FieldReader</code> removed.</li>
+<li><code>CsvParser[int index]</code> added to retrieve fields after a <code>Read</code>.</li>
+<li><code>CsvSerializer</code> removed.</li>
+<li><code>IFieldReader</code> removed.</li>
+<li><code>IParser.ByteCount</code> added.</li>
+<li><code>IParser.CharCount</code> added.</li>
+<li><code>IParser.Count</code> added.</li>
+<li><code>IParser[int index]</code> added.</li>
+<li><code>IParser.Record</code> added.</li>
+<li><code>IParser.RawRecord</code> added.</li>
+<li><code>IParser.Row</code> added.</li>
+<li><code>IParser.RawRow</code> added.</li>
+<li><code>IParser.Read</code> returns <code>bool</code> instead of <code>string[]</code>.</li>
+<li><code>IParser.ReadAsync</code> returns <code>bool</code> instead of <code>string[]</code>.</li>
+<li><code>IReader.Parser</code> removed.</li>
+<li><code>int IReaderRow.ColumnCount</code> added.</li>
+<li><code>int IReaderRow.CurrentIndex</code> added.</li>
+<li><code>string[] IReaderRow.HeaderRecord</code> added.</li>
+<li><code>IParser IReaderRow.Parser</code> added.</li>
+<li><code>ISerializer</code> removed.</li>
+<li><code>string[] IWriterRow.HeaderRecord</code> added.</li>
+<li><code>int IWriterRow.Row</code> added.</li>
+<li><code>int IWriterRow.Index</code> added.</li>
+<li><code>RecordBuilder</code> removed.</li>
+</ul>
+<h3 id="section-40">19.0.0</h3>
+<h4 id="features-17">Features</h4>
+<ul>
+<li>Added the rest of the mapping and attributes configuration for constructor parameters.</li>
+<li>Reading speed improvement.</li>
+</ul>
+<h4 id="breaking-changes-11">Breaking Changes</h4>
+<ul>
+<li>Added <code>IParameterMapper</code> to <code>BooleanFalseValuesAttribute</code>, <code>BooleanTrueValuesAttribute</code>, <code>ConstantAttribute</code>, <code>CultureInfoAttribute</code>, <code>DateTimeStylesAttribute</code>, <code>DefaultAttribute</code>, <code>FormatAttribute</code>, <code>HeaderPrefixAttribute</code>, <code>IgnoreAttribute</code>, <code>NameIndexAttribute</code>, <code>NullValuesAttribute</code>, <code>NumberStylesAttribute</code>, <code>OptionalAttribute</code>, and <code>TypeConverterAttribute</code>.</li>
+<li>Renamed <code>MapTypeConverterOption</code> to <code>MemberMapTypeConverterOptions</code>.</li>
+<li>Renamed <code>TypeConverterOptions.NumberStyle</code> to <code>TypeConverterOptions.NumberStyles</code>.</li>
+<li>Removed <code>ReflectionHelper.CreateInstance&lt;T&gt;</code>.</li>
+<li>Removed <code>ReflectionHelper.CreateInstance</code>.</li>
+<li>Removed <code>ReflectionHelper.CreateInstanceWithoutContractResolver</code>.</li>
+</ul>
+<h3 id="section-41">18.0.0</h3>
+<h4 id="features-18">Features</h4>
+<ul>
+<li>Added parameter mapping via class map or attributes.</li>
+</ul>
+<h4 id="breaking-changes-12">Breaking Changes</h4>
+<ul>
+<li><code>NameAttribute</code> added interface <code>IParameterMapper</code>.</li>
+<li><code>IndexAttribute</code> added interface <code>IParameterMapper</code>.</li>
+</ul>
+<h3 id="section-42">17.0.1</h3>
+<h4 id="bug-fixes-29">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where EnumConverter wasn't working if enum value wasn't an Int32.</li>
+</ul>
+<h3 id="section-43">17.0.0</h3>
+<h4 id="features-19">Features</h4>
+<ul>
+<li>ValidateHeader will validate all members before calling HeaderValidated.</li>
+</ul>
+<h4 id="breaking-changes-13">Breaking Changes</h4>
+<ul>
+<li><code>Action&lt;bool, string[], int, ReadingContext&gt; IReaderConfiguration.HeaderValidated</code> -&gt; <code>Action&lt;InvalidHeader[], ReadingContext&gt; IReaderConfiguration.HeaderValidated</code></li>
+<li><code>Action&lt;bool, string[], int, ReadingContext&gt; CsvConfiguration.HeaderValidated</code> -&gt; <code>Action&lt;InvalidHeader[], ReadingContext&gt; CsvConfiguration.HeaderValidated</code></li>
+<li><code>ConfigurationFunctions.HeaderValidated</code> signature changed from <code>(bool isValid, string[] headerNames, int headerNameIndex, ReadingContext context)</code> to <code>(InvalidHeader[] invalidHeaders, ReadingContext context)</code></li>
+<li><code>CsvReader.ValidateHeader(ClassMap map)</code> -&gt; <code>CsvReader.ValidateHeader(ClassMap map, List&lt;InvalidHeader&gt; invalidHeaders)</code></li>
+<li>Removed <code>HeaderValidationException.HeaderNames</code>.</li>
+<li>Removed <code>HeaderValidationException.HeaderNameIndex</code>.</li>
+<li>Added <code>InvalidHeader[] HeaderValidationException.InvalidHeaders</code>.</li>
+</ul>
+<h3 id="section-44">16.2.0</h3>
+<h4 id="features-20">Features</h4>
+<ul>
+<li>Added ability to put <code>[Name]</code> attribute on enum values.</li>
+<li>Added ability to register a converter for <code>Enum</code> that will be a default for all enum types.</li>
+</ul>
+<h3 id="section-45">16.1.0</h3>
+<h4 id="features-21">Features</h4>
+<ul>
+<li>GetRecords throws <code>ObjectDisposedException</code> when <code>CsvReader</code> is disposed. A message hint was added to help the user understand what went wrong.</li>
+</ul>
+<h3 id="section-46">16.0.0</h3>
+<h4 id="features-22">Features</h4>
+<ul>
+<li>Ability to have duplicate header names when using dynamic records.</li>
+</ul>
+<h4 id="breaking-changes-14">Breaking Changes</h4>
+<ul>
+<li>Added <code>Func&lt;ReadingContext, int, string&gt; IReaderConfiguration.GetDynamicPropertyName</code>.</li>
+<li>Added <code>Func&lt;ReadingContext, int, string&gt; CsvConfiguration.GetDynamicPropertyName</code>.</li>
+</ul>
+<h3 id="section-47">15.0.10</h3>
+<ul>
+<li>Fixed <code>IgnoreAttribute</code> to ignore the whole property treey if put on a reference property when auto mapped.</li>
+</ul>
+<h3 id="section-48">15.0.9</h3>
+<h4 id="bug-fixes-30">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where <code>CsvDataReader.FieldCount</code> was throwing an exception if there were no records.</li>
+</ul>
+<h3 id="section-49">15.0.8</h3>
+<h4 id="bug-fixes-31">Bug Fixes</h4>
+<ul>
+<li>Fixed <code>CsvDataReader.GetOrdinal</code> issue where it wasn't doing a case-insensitive match after a failed case-sensitive match. Run values through <code>PrepareHeaderForMatch</code>.</li>
+</ul>
+<h3 id="section-50">15.0.7</h3>
+<h4 id="bug-fixes-32">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where writing <code>null</code> to <code>WriteField</code> didn't output a field.</li>
+</ul>
+<h3 id="section-51">15.0.6</h3>
+<h4 id="bug-fixes-33">Bug Fixes</h4>
+<ul>
+<li>Fixed test not building.</li>
+</ul>
+<h3 id="section-52">15.0.5</h3>
+<h4 id="bug-fixes-34">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with multiple character delimiter not working when the first char of the delimiter precedes the actual delimiter.</li>
+</ul>
+<h3 id="section-53">15.0.4</h3>
+<h4 id="bug-fixes-35">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>ReflectionHelper</code> caching not always unique.</li>
+</ul>
+<h3 id="section-54">15.0.3</h3>
+<h4 id="bug-fixes-36">Bug Fixes</h4>
+<ul>
+<li>Updated default number styles for <code>DecimalConverter</code> and <code>DoubleConverter</code> to match MS's recommendations.</li>
+</ul>
+<h3 id="section-55">15.0.2</h3>
+<h4 id="bug-fixes-37">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>DataReader.GetValues</code> not working when column and rows have different count.</li>
+</ul>
+<h3 id="section-56">15.0.1</h3>
+<h3 id="bug-fixes-38">Bug Fixes</h3>
+<ul>
+<li>Downgraded <code>System.Threading.Tasks.Extensions</code> to 4.5.2 due to loading error of <code>Microsoft.Bcl.AsyncInterfaces</code>.</li>
+</ul>
+<h3 id="section-57">15.0.0</h3>
+<h4 id="features-23">Features</h4>
+<ul>
+<li>Ignore attribute on a reference will ignore all properties on that reference.</li>
+</ul>
+<h4 id="breaking-changes-15">Breaking Changes</h4>
+<ul>
+<li>Added <code>IMemberReferenceMapper</code> to <code>IgnoreAttribute</code>.</li>
+</ul>
+<h3 id="section-58">14.0.0</h3>
+<h4 id="features-24">Features</h4>
+<ul>
+<li>Added <code>IAsyncDispose</code> on writing classes.</li>
+</ul>
+<h4 id="breaking-changes-16">Breaking Changes</h4>
+<ul>
+<li>Added dependency <code>&lt;PackageReference Include=&quot;System.Threading.Tasks.Extensions&quot; Version=&quot;4.5.3&quot; /&gt;</code> to <code>net45</code>.</li>
+<li>Added dependency <code>&lt;PackageReference Include=&quot;System.Threading.Tasks.Extensions&quot; Version=&quot;4.5.3&quot; /&gt;</code> to <code>net47</code>.</li>
+<li>Added dependency <code>&lt;PackageReference Include=&quot;System.Threading.Tasks.Extensions&quot; Version=&quot;4.5.3&quot; /&gt;</code> to <code>netstandard2.0</code>.</li>
+<li><code>IWriter</code> added interface <code>IAsyncDisposable</code> for <code>net47</code> and <code>netstandard2.1</code>.</li>
+<li><code>ISerializer</code> added interface <code>IAsyncDisposable</code> for <code>net47</code> and <code>netstandard2.1</code>.</li>
+<li><code>WritingContext</code> added interface <code>IAsyncDisposable</code> for <code>net47</code> and <code>netstandard2.1</code>.</li>
+<li><code>CsvWriter</code> added methods <code>public async ValueTask DisposeAsync()</code> and <code>protected virtual async ValueTask DisposeAsync(bool disposing)</code> for <code>net47</code> and <code>netstandard</code>.</li>
+<li><code>CsvSerializer</code> added methods <code>public async ValueTask DisposeAsync()</code> and <code>protected virtual async ValueTask DisposeAsync(bool disposing)</code> for <code>net47</code> and <code>netstandard</code>.</li>
+<li><code>WritingContext</code> added methods <code>public async ValueTask DisposeAsync()</code> and <code>protected virtual async ValueTask DisposeAsync(bool disposing)</code> for <code>net47</code> and <code>netstandard</code>.</li>
+</ul>
+<h3 id="section-59">13.0.0</h3>
+<h4 id="features-25">Features</h4>
+<ul>
+<li>Added <code>netstandard2.1</code> build.</li>
+<li>Added required CultureInfo parameter to any class that uses CultureInfo.</li>
+<li>Apply member attributes using interface instead of hard coding.</li>
+<li>Added customizable new line when writing. You can choose from <code>CRLF</code>, <code>CR</code>, <code>LF</code>, or <code>Environment.NewLine</code>.</li>
+<li>Renamed <code>Configuration</code> to <code>CsvConfiguration</code> to avoid namespace conflicts.</li>
+<li>Added <code>GetRecordsAsync</code> and <code>WriteRecordsAsync</code>.</li>
+</ul>
+<h4 id="breaking-changes-17">Breaking Changes</h4>
+<ul>
+<li>Removed dependency <code>&lt;PackageReference Include=&quot;System.Reflection.TypeExtensions&quot; Version=&quot;4.4.0&quot; /&gt;</code> from <code>netstandard2.0</code>.</li>
+<li>Removed dependency <code>&lt;PackageReference Include=&quot;System.Reflection.TypeExtensions&quot; Version=&quot;4.4.0&quot; /&gt;</code> from <code>netstandard2.1</code>.</li>
+<li>Added dependency <code>&lt;PackageReference Include=&quot;Microsoft.Bcl.AsyncInterfaces&quot; Version=&quot;1.1.0&quot; /&gt;</code> to <code>net47</code>.</li>
+<li>Added dependency <code>&lt;PackageReference Include=&quot;Microsoft.Bcl.AsyncInterfaces&quot; Version=&quot;1.1.0&quot; /&gt;</code> to <code>netstandard2.0</code>.</li>
+<li><code>ClassMap.AutoMap()</code> -&gt; <code>ClassMap.AutoMap(CultureInfo)</code></li>
+<li><code>CsvParser.CsvParser(TextReader)</code> -&gt; <code>CsvParser.CsvParser(TextReader, CultureInfo)</code></li>
+<li><code>CsvParser.CsvParser(TextReader, bool)</code> -&gt; <code>CsvParser.CsvParser(TextReader, CultureInfo, bool)</code></li>
+<li><code>CsvReader.CsvReader(TextReader)</code> -&gt; <code>CsvReader.CsvReader(TextReader, CultureInfo)</code></li>
+<li><code>CsvReader.CsvReader(TextReader, bool)</code> -&gt; <code>CsvReader.CsvReader(TextReader, CultureInfo, bool)</code></li>
+<li><code>CsvSerializer.CsvSerializer(TextWriter)</code> -&gt; <code>CsvSerializer.CsvSerializer(TextWriter, CultureInfo)</code></li>
+<li><code>CsvSerializer.CsvSerializer(TextWriter, bool)</code> -&gt; <code>CsvSerializer.CsvSerializer(TextWriter, CultureInfo, bool)</code></li>
+<li><code>CsvWriter.CsvWriter(TextWriter)</code> -&gt; <code>CsvWriter.CsvWriter(TextWriter, CultureInfo)</code></li>
+<li><code>CsvWriter.CsvWriter(TextWriter, bool)</code> -&gt; <code>CsvWriter.CsvWriter(TextWriter, CultureInfo, bool)</code></li>
+<li><code>Factory.CreateParser(TextReader)</code> -&gt; <code>Factory.CreateParser(TextReader, CultureInfo)</code></li>
+<li><code>Factory.CreateReader(TextReader)</code> -&gt; <code>Factory.CreateReader(TextReader, CultureInfo)</code></li>
+<li><code>Factory.CreateWriter(TextWriter)</code> -&gt; <code>Factory.CreateWriter(TextWriter, CultureInfo)</code></li>
+<li><code>IFactory.CreateParser(TextReader)</code> -&gt; <code>IFactory.CreateParser(TextReader, CultureInfo)</code></li>
+<li><code>IFactory.CreateReader(TextReader)</code> -&gt; <code>IFactory.CreateReader(TextReader, CultureInfo)</code></li>
+<li><code>IFactory.CreateWriter(TextWriter)</code> -&gt; <code>IFactory.CreateWriter(TextWriter, CultureInfo)</code></li>
+<li>Added <code>ISerializerConfiguration.NewLine</code>.</li>
+<li>Added <code>ISerializerConfiguration.NewLineString</code>.</li>
+<li>Added <code>Configuration.NewLine</code>.</li>
+<li>Added <code>Configuration.NewLineString</code>.</li>
+<li>Removed <code>Configuration.Configuration()</code> parameterless constructor.</li>
+<li>Attributes now require the use of <code>IMemberMapper</code> or <code>IMemberReferenceMapper</code> to be loaded. All existing attributes added these and implemented the interface.</li>
+<li>Renamed <code>Configuration</code> to <code>CsvConfiguration</code>.</li>
+<li>Added <code>IAsyncEnumerable&lt;T&gt; CsvReader.GetRecordsAsync&lt;T&gt;()</code></li>
+<li>Added <code>IAsyncEnumerable&lt;T&gt; CsvReader.GetRecordsAsync&lt;T&gt;(T anonymousTypeDefinition)</code></li>
+<li>Added <code>IAsyncEnumerable&lt;object&gt; CsvReader.GetRecordsAsync(Type type)</code></li>
+<li>Added <code>IAsyncEnumerable&lt;T&gt; CsvReader.EnumerateRecordsAsync&lt;T&gt;(T record)</code></li>
+<li>Added <code>Task CsvWriter.WriteRecordsAsync(IEnumerable records)</code></li>
+<li>Added <code>Task CsvWriter.WriteRecordsAsync&lt;T&gt;(IEnumerable&lt;T&gt; records)</code></li>
+<li>Added <code>IAsyncEnumerable&lt;T&gt; IReader.GetRecordsAsync&lt;T&gt;()</code></li>
+<li>Added <code>IAsyncEnumerable&lt;T&gt; IReader.GetRecordsAsync&lt;T&gt;(T anonymousTypeDefinition)</code></li>
+<li>Added <code>IAsyncEnumerable&lt;object&gt; IReader.GetRecordsAsync(Type type)</code></li>
+<li>Added <code>IAsyncEnumerable&lt;T&gt; IReader.EnumerateRecordsAsync&lt;T&gt;(T record)</code></li>
+<li>Added <code>Task IWriter.WriteRecordsAsync(IEnumerable records)</code></li>
+<li>Added <code>Task IWriter.WriteRecordsAsync&lt;T&gt;(IEnumerable&lt;T&gt; records)</code></li>
+</ul>
+<h3 id="section-60">12.3.2</h3>
+<h4 id="bug-fixes-39">Bug Fixes</h4>
+<ul>
+<li>Changed double and single converters to only test for format &quot;R&quot; if the user hasn't supplied a format.</li>
+</ul>
+<h3 id="section-61">12.3.1</h3>
+<h4 id="bug-fixes-40">Bug Fixes</h4>
+<ul>
+<li>Fix for bug in .NET Framework that causes a StackOverflowException. This needs to be changed back eventually.</li>
+</ul>
+<h3 id="section-62">12.3.0</h3>
+<h4 id="features-26">Features</h4>
+<ul>
+<li>Added UriConverter.</li>
+</ul>
+<h3 id="section-63">12.2.3</h3>
+<h4 id="big-fixes-1">Big Fixes</h4>
+<ul>
+<li>Changed round trip default format to test if &quot;R&quot; works and use backup of &quot;G9&quot; for float and &quot;G17&quot; for double.</li>
+</ul>
+<h3 id="section-64">12.2.2</h3>
+<h4 id="bug-fixes-41">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where multiple properties with the same name were used when a child class property hides a parent class property using the new modifier.</li>
+<li>Fixed issue where a null reference exception was thrown when writing and all properties are ignored.</li>
+</ul>
+<h3 id="section-65">12.2.1</h3>
+<h4 id="bug-fixes-42">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where an &quot;Index out of bounds of the array&quot; exception was happening on TryGetField of type DateTime.</li>
+<li>Fix <code>RawRecord</code> adding spaces if <code>TrimOptions.Trim</code> is used.</li>
+</ul>
+<h3 id="section-66">12.2.0</h3>
+<h4 id="features-27">Features</h4>
+<ul>
+<li>Allow default value when using optional members.</li>
+<li>Added BigIntConverter.</li>
+<li>Mapping to member with type <code>Type</code> will throw exception by default.</li>
+</ul>
+<h4 id="bug-fixes-43">Bug Fixes</h4>
+<ul>
+<li>Made SingleConverter and DoubleConverter round-trip-able.</li>
+</ul>
+<h3 id="section-67">12.1.3</h3>
+<h4 id="bug-fixes-44">Bug Fixes</h4>
+<ul>
+<li>Always write \r\n line endings to be compliant with RFC 4180.</li>
+</ul>
+<h3 id="section-68">12.1.2</h3>
+<h4 id="bug-fixes-45">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where CsvDataReader would skip the first row when there is no header record.</li>
+<li>Fixed CsvDataReader issue where null values weren't being represented as DBNull.Value on GetValue and GetValues methods.</li>
+<li>Fixed issue with IsDBNull method where an empty string was considered a null.</li>
+</ul>
+<h3 id="section-69">12.1.1</h3>
+<h4 id="bug-fixes-46">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where <code>CsvReader.ReadAsync</code> wasn't behaving the same as <code>CsvReader.Read</code>.</li>
+</ul>
+<h3 id="section-70">12.1.0</h3>
+<h4 id="features-28">Features</h4>
+<ul>
+<li>Added constructor to <code>Configuration</code> to pass in the <code>CultureInfo</code>. When passing a culture in, the <code>Delimiter</code> will be set to <code>CultureInfo.TextInfo.ListSeparator</code>.</li>
+</ul>
+<h3 id="section-71">12.0.1</h3>
+<h4 id="bug-fixes-47">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where writing a dynamic object would still sort the header when no sort was specified.</li>
+</ul>
+<h3 id="section-72">12.0.0</h3>
+<h4 id="features-29">Features</h4>
+<ul>
+<li>Added config option for sorting dynamic object properties when writing. Defaults to property value set order.</li>
+</ul>
+<h4 id="breaking-changes-18">Breaking Changes</h4>
+<ul>
+<li>Added <code>IComparer&lt;string&gt; IWriterConfiguration.DynamicPropertySort</code>.</li>
+<li>Added <code>IComparer&lt;string&gt; Configuration.DynamicPropertySort</code>.</li>
+</ul>
+<h3 id="section-73">11.0.1</h3>
+<h4 id="bug-fixes-48">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with leaveOpen not being used in the context's dispose.</li>
+</ul>
+<h3 id="section-74">11.0.0</h3>
+<h4 id="features-30">Features</h4>
+<ul>
+<li>Removed config options <code>QuoteAllFields</code>, <code>QuoteNoFields</code>, <code>QuoteRequiredChars</code>, and <code>BuildREquiredQuoteChars</code> in favor of <code>ShouldQuote</code> function.</li>
+</ul>
+<h4 id="breaking-changes-19">Breaking Changes</h4>
+<ul>
+<li>Removed <code>IWriterConfiguration.QuoteAllFields</code>.</li>
+<li>Removed <code>IWriterConfiguration.QuoteNoFields</code>.</li>
+<li>Removed <code>IWriterConfiguration.QuoteRequiredChars</code>.</li>
+<li>Removed <code>IWriterConfiguration.BuildRequiredQuoteChars</code>.</li>
+<li>Removed <code>Configuration.QuoteAllFields</code>.</li>
+<li>Removed <code>Configuration.QuoteNoFields</code>.</li>
+<li>Removed <code>Configuration.QuoteRequiredChars</code>.</li>
+<li>Removed <code>Configuration.BuildRequiredQuoteChars</code>.</li>
+<li>Added <code>Func&lt;string, WritingContext, bool&gt; IWriterConfiguration.ShouldQuote</code>.</li>
+<li>Added <code>Func&lt;string, WritingContext, bool&gt; Configuration.ShouldQuote</code>.</li>
+</ul>
+<h3 id="section-75">10.0.0</h3>
+<h4 id="features-31">Features</h4>
+<ul>
+<li>Added a more friendly header validation message.</li>
+<li>Separated header and field validation exceptions.</li>
+<li>Added data properties to validation classes.</li>
+<li>Changed Configuration.ReadingExceptionOccurred to not throw an exception and return a boolean whether it should throw an exception. The caller will throw if true.</li>
+<li>Changed <code>NamedIndexCache</code> type from <code>Tuple&lt;string, int&gt;</code> to <code>(string, int)</code>.</li>
+<li>Config option to consider a line break in a quoted field as bad data.</li>
+<li>Changed delimiter default value from ',' to CultureInfo.CurrentCulture.TextInfo.ListSeparator.</li>
+<li>PrepareHeaderForMatch now passes in the header name and index.</li>
+<li>Dynamic records will now have null properties for missing fields.</li>
+<li>Write ExpandoObject and IDynamicMetaObjectProvider object properties in ascending order to ensure order of property creation doesn't matter.</li>
+<li>Added escape character configuration.</li>
+<li>Added IDataReader implementation. This allows for easily loading a DataTable.</li>
+</ul>
+<h3 id="breaking-changes-20">Breaking Changes</h3>
+<ul>
+<li><code>ValidationException</code> is now <code>abstract</code>.</li>
+<li><code>IReaderConfiguration.ReadingExceptionOccurred</code> type changed from <code>Action&lt;CsvHelperException&gt;</code> to <code>Func&lt;CsvHelperException, bool&gt;</code>.</li>
+<li><code>Configuration.ReadingExceptionOccurred</code> type changed from <code>Action&lt;CsvHelperException&gt;</code> to <code>Func&lt;CsvHelperException, bool&gt;</code>.</li>
+<li>Changed <code>NamedIndexCache</code> type from <code>Tuple&lt;string, int&gt;</code> to <code>(string, int)</code>. This adds a dependency to <code>System.ValueTuple</code> on .NET 4.5.</li>
+<li>Added <code>bool IParserConfiguration.LineBreakInQuotedFieldIsBadData</code>.</li>
+<li>Added <code>bool Configuration.LineBreakInQuotedFieldIsBadData</code>.</li>
+<li>Changed <code>IReaderConfiguration.PrepareHeaderForMatch</code> type from <code>Func&lt;string, string&gt;</code> to <code>Func&lt;string, int, string&gt;</code>.</li>
+<li>Changed <code>Configuration.PrepareHeaderForMatch</code> type from <code>Func&lt;string, string&gt;</code> to <code>Func&lt;string, int, string&gt;</code>.</li>
+<li>Added <code>char ISerializerConfiguration.Escape</code>.</li>
+<li>Added <code>char IParserConfiguration.Escape</code>.</li>
+<li>Added <code>char Configuration.Escape</code>.</li>
+</ul>
+<h3 id="section-76">9.2.3</h3>
+<h4 id="bug-fixes-49">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where TrimOptions.InsideQuotes would fail when there were escaped quotes in the field.</li>
+</ul>
+<h3 id="section-77">9.2.2</h3>
+<h4 id="bug-fixes-50">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where NamedIndexes wasn't being reset on ReadHeader call.</li>
+</ul>
+<h3 id="section-78">9.2.1</h3>
+<h4 id="bug-fixes-51">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where a TypeConverterAttribute isn't being used when on a reference.</li>
+</ul>
+<h3 id="section-79">9.2.0</h3>
+<h4 id="features-32">Features</h4>
+<ul>
+<li>More clear exception messages when reading and a missing field is found.</li>
+</ul>
+<h3 id="section-80">9.1.0</h3>
+<h4 id="features-33">Features</h4>
+<ul>
+<li>Allow parameterless constructor on classes and reference property classes when auto mapping.</li>
+</ul>
+<h3 id="section-81">9.0.2</h3>
+<h4 id="bug-fixes-52">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where <code>WriteAsync</code> wasn't calling <code>SanitizeForInjection</code>.</li>
+</ul>
+<h3 id="section-82">9.0.1</h3>
+<h4 id="bug-fixes-53">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where <code>leaveOpen</code> parameter in <code>CsvParser</code> constructor was hard coded.</li>
+<li>Fixed issue where header validation was being ran on properties that only had an index mapped.</li>
+</ul>
+<h3 id="section-83">9.0.0</h3>
+<p>This release contains changes from 8.3.0 and 8.2.0.</p>
+<h3 id="section-84">8.3.0</h3>
+<p>This has been unlisted in nuget because of a breaking change before it. The changes are in 9.0.0.</p>
+<h4 id="features-34">Features</h4>
+<ul>
+<li>Removed restriction that was disallowing the null char '\0' to be used as a delimiter.</li>
+</ul>
+<h3 id="section-85">8.2.0</h3>
+<p>This has been unlisted in nuget because of a breaking change. The changes are in 9.0.0.</p>
+<h4 id="features-35">Features</h4>
+<ul>
+<li>Added Optional config to factory builder.</li>
+<li>Added <code>OptionalAttribute</code>.</li>
+</ul>
+<h4 id="breaking-changes-21">Breaking Changes</h4>
+<ul>
+<li>Added <code>IHasMapOptions : IHasOptional</code>.</li>
+<li>Added <code>MemberMapBuilder : IHasOptional</code>.</li>
+<li>Added <code>MemberMapBuilder : IHasOptionalOptions</code>.</li>
+</ul>
+<h3 id="section-86">8.1.1</h3>
+<h4 id="features-36">Features</h4>
+<ul>
+<li>Configuration functions are available on a static class <code>ConfigurationFunctions</code>.</li>
+</ul>
+<h4 id="bug-fixes-54">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where <code>IgnoreBlankLines</code> wasn't being checked in <code>GetField&lt;T&gt;(int index, ITypeConverter converter)</code>.</li>
+</ul>
+<h3 id="section-87">8.1.0</h3>
+<h4 id="features-37">Features</h4>
+<ul>
+<li>Added <code>IsOptional</code> mapping option.</li>
+</ul>
+<h3 id="section-88">8.0.0</h3>
+<h4 id="features-38">Features</h4>
+<ul>
+<li>Added Unity build.</li>
+<li>Added <code>IsOptional</code> mapping option.</li>
+</ul>
+<h4 id="bug-fixes-55">Bug Fixes</h4>
+<ul>
+<li>Added missing interface methods to configs.</li>
+<li>Fixed issue with parsing when only CR is used and fields are quoted.</li>
+<li>Fixed issue where <code>GetField</code> was calling the <code>ObjectResolver</code>.</li>
+<li>Made the contexts not serializable in exceptions.</li>
+<li>Fixed issue with <code>ObjectResolver</code> fallback causing a <code>StackOverflowException</code>.</li>
+</ul>
+<h4 id="breaking-changes-22">Breaking Changes</h4>
+<ul>
+<li>Added <code>IReaderConfiguration.IgnoreReferences</code>.</li>
+<li>Added <code>IWriterConfiguration.IgnoreReferences</code>.</li>
+</ul>
+<h3 id="section-89">7.1.1</h3>
+<h4 id="bug-fixes-56">Bug Fixes</h4>
+<ul>
+<li>Added constructor to <code>CsvWriter</code> that allows for <code>leaveOpen</code> to be set.</li>
+<li>Made <code>CsvWriter.Dispos</code>e able to be called multiple times.</li>
+<li>Added <code>ConfigureAwait(false)</code> to all async calls.</li>
+</ul>
+<h3 id="section-90">7.1.0</h3>
+<h4 id="features-39">Features</h4>
+<ul>
+<li>Changed record object creation to use the <code>ObjectResolver</code>.</li>
+</ul>
+<h3 id="section-91">7.0.1</h3>
+<h4 id="bug-fixes-57">Bug Fixes</h4>
+<ul>
+<li>Allow private constructors to be used to instantiate new class instances.</li>
+</ul>
+<h3 id="section-92">7.0.0</h3>
+<h4 id="features-40">Features</h4>
+<ul>
+<li>Reading performance improvements.</li>
+</ul>
+<h4 id="breaking-changes-23">Breaking Changes</h4>
+<ul>
+<li>Removed <code>IReadingContext</code> and <code>IWritingContext</code> interfaces. <code>ReadingContext</code> and <code>WritingContext</code> are used directly now.</li>
+</ul>
+<h3 id="section-93">6.1.1</h3>
+<h4 id="bug-fixes-58">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with circular references when auto mapping.</li>
+</ul>
+<h3 id="section-94">6.1.0</h3>
+<h4 id="features-41">Features</h4>
+<ul>
+<li>Dynamic now uses <code>Configuration.PrepareHeaderForMatch</code> on header name to get property name for dynamic object.</li>
+</ul>
+<h3 id="section-95">6.0.3</h3>
+<h4 id="bug-fixes-59">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with LINQPad not working properly due to types from differently assemblies being cached in the writer.</li>
+</ul>
+<h4 id="breaking-changes-24">Breaking Changes</h4>
+<ul>
+<li><code>IWritingContext.TypeActions</code> signature changed.</li>
+</ul>
+<h3 id="section-96">6.0.2</h3>
+<h4 id="bug-fixes-60">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with LINQPad not working properly due to types from differently assemblies being cached.</li>
+</ul>
+<h3 id="section-97">6.0.0</h3>
+<h4 id="features-42">Features</h4>
+<ul>
+<li>Use <code>ObjectResolver</code> to create internal classes <code>RecordManager</code>, <code>ExpressionManager</code>, <code>RecordCreatorFactory</code>, and <code>RecordHydrator</code>, <code>RecordWriterFactory</code>.</li>
+<li>Added generic resolve method to object resolver.</li>
+<li>Added mapping methods to MemberMap for use during runtime mapping.</li>
+<li>Added more info and properties to TypeConverterException.</li>
+</ul>
+<h4 id="bug-fixes-61">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where mapping an interface doesn't get used when writing.</li>
+</ul>
+<h4 id="breaking-changes-25">Breaking Changes</h4>
+<ul>
+<li>Added <code>IObjectResolver.Resolve&lt;T&gt;( params object[] constructorArgs )</code> method.</li>
+<li>Added <code>IWriter.WriteRecords&lt;T&gt;( IEnumerable&lt;T&gt; records )</code> method.</li>
+<li><code>TypeConverterException</code> constructors signatures changed.</li>
+</ul>
+<h3 id="section-98">5.0.0</h3>
+<h4 id="features-43">Features</h4>
+<ul>
+<li>Added <code>Map&lt;TClass&gt;.References( expression )</code> back in.</li>
+</ul>
+<h4 id="bug-fixes-62">Bug Fixes</h4>
+<ul>
+<li>Fixed <code>DefaultTypeConverterException</code> message. The generated message wasn't being used.</li>
+</ul>
+<h3 id="section-99">4.0.3</h3>
+<h4 id="bug-fixes-63">Bug Fixes</h4>
+<ul>
+<li>Added <code>ReadingExceptionOccurred</code> callback to <code>GetRecord</code> methods when an exception occurs.</li>
+</ul>
+<h3 id="section-100">4.0.2</h3>
+<h4 id="bug-fixes-64">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with parsing when buffer spans over a field.</li>
+</ul>
+<h3 id="section-101">4.0.1</h3>
+<h4 id="bug-fixes-65">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where trimming inside quotes would fail when the character after a space was a delimiter, \r, or \n.</li>
+</ul>
+<h3 id="section-102">4.0.0</h3>
+<h4 id="breaking-changes-26">Breaking Changes</h4>
+<ul>
+<li>Added setter to <code>ISerializerConfiguration.Quote</code>.</li>
+<li>Removed <code>ClassMap&lt;TClass&gt;.References( expression, constructorArs )</code>. Use sub property mapping instead.</li>
+<li>Removed <code>ClassMap&lt;TClass&gt;.ConstructUsing( expression ). Use the </code>ObjectResolver` instead.</li>
+<li>Change how reference header prefixing works.</li>
+<li>Changed <code>Configuration</code>/<code>IReaderConfiguration</code>/<code>IWriterConfiguration</code> <code>bool PrefixReferenceHeaders</code> to <code>Func&lt;Type, string, string&gt; ReferenceHeaderPrefix</code>. The function takes in the member type and member name and returns the prefix.</li>
+<li>Removed <code>MemberReferenceMap.Prefix()</code> method.</li>
+<li>Removed <code>ParameterReferenceMap.Prefix()</code> method.</li>
+<li>Changed <code>Configuration</code>/<code>IReaderConfiguration</code>/<code>IWriterConfiguration</code> <code>ClassMap AutoMap&lt;T&gt;()</code> to <code>ClassMap&lt;T&gt; AutoMap&lt;T&gt;()</code></li>
+<li>Changed <code>TypeConverterException</code> constructors parameter from <code>ReadingContext</code> to <code>IReadingContext</code>.</li>
+</ul>
+<h3 id="section-103">3.4.0</h3>
+<h4 id="bug-fixes-66">Bug Fixes</h4>
+<ul>
+<li>Fixed issue when a map was created through auto mapping, you couldn't use sub property mapping to update a member.</li>
+</ul>
+<h3 id="section-104">3.3.0</h3>
+<h4 id="features-44">Features</h4>
+<ul>
+<li>Added more information to the <code>DefaultTypeConverter.ConvertFromString</code> not convertible exception.</li>
+<li>Reduced the number of <code>PrepareHeaderForMatch</code> calls.</li>
+</ul>
+<h3 id="section-105">3.2.0</h3>
+<h4 id="features-45">Features</h4>
+<ul>
+<li>Attribute mapping. It's back...</li>
+</ul>
+<h3 id="section-106">3.1.1</h3>
+<h4 id="bug-fixes-67">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where you weren't able to write <code>IEnumerable</code>.</li>
+</ul>
+<h3 id="section-107">3.1.0</h3>
+<h4 id="features-46">Features</h4>
+<ul>
+<li>Allow multiple headers to be written.</li>
+</ul>
+<h4 id="bug-fixes-68">Bug Fixes</h4>
+<ul>
+<li>Flush <code>CsvWriter</code> on <code>Dispose</code>.</li>
+<li>Made <code>ShouldSkipRecord</code> not called if the parser returns <code>null</code> for an end of stream.</li>
+<li><code>ShouldUseConstructorParameters</code> returns <code>false</code> if there are no constructors.</li>
+<li>Header validation doesn't validate members where <code>ConvertUsing</code> or <code>Constant</code> are used.</li>
+</ul>
+<h3 id="section-108">3.0.0</h3>
+<h4 id="features-47">Features</h4>
+<ul>
+<li>netstandard2.0</li>
+<li>Massive speed improvements to the <code>CsvParser</code>.</li>
+<li>Speed improvements to <code>CsvSerializer</code>.</li>
+<li>Map child properties so multiple mapping classes aren't needed.</li>
+<li><code>ConvertUsing</code> implementation for writing.</li>
+<li>Read/write <code>IEnumerable</code> properties.</li>
+<li>Field mapping.</li>
+<li>Async reading/writing.</li>
+<li>Added <code>ClassMapBuilder</code> to build maps on the fly without a mapping class.</li>
+<li>Write <code>IDynamicMetaObjectProvider</code> objects. <code>DynamicObject</code> and <code>ExpandoObject</code> are the 2 most common.</li>
+<li>Allow <code>null</code> fields to be written.</li>
+<li><code>IDictionary</code> type converters.</li>
+<li>Added trim options to trim in parser and removed trim from reader.</li>
+<li>Header validation.</li>
+<li>Field validation.</li>
+<li>Added <code>leaveOpen</code> flag to constructors to not dispose of underlying <code>TextReader</code> and <code>TextWriter</code>.</li>
+<li>Added properties to <code>CsvHelperException</code> and removed the string data.</li>
+<li>Speed up mappings that use <code>ConvertUsing</code> by caching the named indexes.</li>
+<li>Write comments.</li>
+<li>Map constants.</li>
+<li>Write fields that aren't mapped.</li>
+<li>Specify values that resolve to <code>null</code> when reading.</li>
+<li>Added CsvProperMap<T> to allow for compile time type checking on mappings.</li>
+<li>Read more than 1 header row.</li>
+<li>Changed reading exception callback to send a CsvHelperException.</li>
+<li>Map the same property more than once.</li>
+<li>Exposed the underlying TextReader as a property.</li>
+<li>Removed header matching manipulation configuration <code>IsHeaderCaseSensitive</code>, <code>IgnoreHeaderWhiteSpace</code>, and <code>TrimHeaders</code> and added a config for <code>PrepareHeaderForMatch</code> that is a function. Both the header field name and the property name are ran through this method before matching against each other.</li>
+<li>Added interfaces for configuration so you can tell what options are available in your current context.</li>
+<li>Moved detection of column count changes into the reader. The parser shouldn't care and should just return whatever data it finds.</li>
+<li><code>ConstructUsing</code> works with reference maps.</li>
+<li><code>ConstructUsing</code> can use initializers.</li>
+<li>Allow resuming reading of more data is written to the stream.</li>
+<li>Auto mapping with user defined <code>struct</code>.</li>
+<li>Ability to change required quote characters.</li>
+<li>Speed improvements when using <code>GetField</code>.</li>
+<li>Speed improvements when using <code>WriteField</code>.</li>
+<li>Allow mapping default value to be a string that is converted.</li>
+<li>Moved reading/writing state data into a common context object that is shared.</li>
+<li>Multiple <code>string</code> formats for <code>TypeConverterOptions</code>.</li>
+<li>Created object resolver so interfaces can be mapped to and IoC containers can be plugged in.</li>
+<li>Made methods <code>ReIndex</code> and <code>GetMaxIndex</code> on <code>CsvClassMap</code> <code>public</code>.</li>
+<li>Added a <code>Flush</code> method to the writer so <code>NextRecord</code> just writes a line ending. This will allow users to not write a line ending if they want.</li>
+<li>Removed statics to eliminate possible threading issues.</li>
+<li>Added <code>SerializableAttribute</code> to exception classes. It was removed previously because of netstandard1.x not having it available.</li>
+<li>Added <code>ByteArrayConverter</code>.</li>
+<li>Reading anonymous types.</li>
+<li>Auto mapping with any constructor.</li>
+<li>Changed <code>Property</code> naming to <code>Member</code> since both properties and fields are used.</li>
+<li><code>TypeConverterFactory</code> is now instance of <code>Configuration</code> instead of a static.</li>
+<li>Changed <code>Configuration</code> flags to callbacks with default functionality to let the user change the functionality if they want.</li>
+</ul>
+<h4 id="bug-fixes-69">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>CsvClassMapCollection[type]</code> choosing the wrong type when multiple types on the inheritance tree are mapped.</li>
+<li>Fixed issue where setting <code>Configuration.ShouldSkipRecord</code> method always overrides the <code>Configuration.SkipEmptyRecords</code> setting.</li>
+<li>Fixed issue where ignoring header whitespace wouldn't work if a named property had the same whitespace in it.</li>
+<li>When comments are on and a field is being written that is the first field in the record and the first char is a comment char, quote the field because it's not a comment.</li>
+<li>Fixed issue with type converter options set in factory not working with auto mapping or explicit map.</li>
+<li>Fixed line ending spanning buffer issue.</li>
+<li>Fixed issue of skipping a character if a line ending was within a quoted field.</li>
+<li>Added locking to factory to make it thread safe.</li>
+<li>Fixed bug when mapping a constant then mapping another property after will throw an exception.</li>
+<li>Changed reflection calls to <code>ConvertToString</code> to get the method for <code>ITypeConverter</code> instead of the actual converter. This is so the overridden implementation will be used instead of a random method with the same name.</li>
+<li>Adding locking in <code>ReflectionHelper.CreateInstance</code> for the static delegate cache.</li>
+<li>Fixed quote handling issue of <code>IsFieldBad</code> by marking unquoted fields with quote chars as bad only when <code>Configuration.IgnoreQuotes</code> is <code>false</code>.</li>
+<li>Fixed issue with automapping not mapping references correctly in some nested situations because it thought it was a circular dependency when it wasn't.</li>
+<li>Fixed issue with private properties not being able to be set.</li>
+<li>Fixed issue with getting the class map from the collection. It was only getting the current and not looking up the tree.</li>
+<li>Fixed issue with <code>Constant</code> not working with <code>null</code>.</li>
+</ul>
+<h4 id="breaking-changes-27">Breaking Changes</h4>
+<ul>
+<li>Removed all .NET builds except for net45 and netstandard2.0.</li>
+<li>Removed obsolete code.</li>
+<li><code>object ICsvReader.GetField( int index, ITypeConverter converter )</code></li>
+<li><code>object ICsvReader.GetField( string name, ITypeConverter converter )</code></li>
+<li><code>object ICsvReader.GetField( string name, int index, ITypeConverter converter )</code></li>
+<li><code>void ICsvWriter.WriteField( Type type, object field )</code></li>
+<li><code>void ICsvWriter.WriteField( Type type, object field, ITypeConverter converter )</code></li>
+<li><code>void ICsvWriter.WriteRecord( Type type, object record )</code></li>
+<li>Moved methods that aren't row level out of <code>ICsvReaderRow</code> and into <code>ICsvReader</code>.</li>
+<li><code>IEnumerable&lt;T&gt; GetRecords&lt;T&gt;()</code></li>
+<li><code>IEnumerable&lt;object&gt; GetRecords( Type type )</code></li>
+<li><code>void ClearRecordCache&lt;T&gt;()</code></li>
+<li><code>void ClearRecordCache( Type type )</code></li>
+<li><code>void ClearRecordCache()</code></li>
+<li>Removed <code>CanConvertTo</code> and <code>CanConvertFrom</code> from the type converters because there is no need for them.</li>
+<li>Added properties to <code>CsvHelperException</code> and removed the string data.</li>
+<li>Changed <code>WriteRecord</code> to not call <code>NextRecord</code>.</li>
+<li>Changed config setting name from <code>IgnorePrivateAccessor</code> to <code>IncludePrivateProperties</code> to be more clear on intention.</li>
+<li>Changed reading exception callback to send a <code>CsvHelperException</code>.</li>
+<li>Removed configuration <code>IsHeaderCaseSensitive</code>, <code>IgnoreHeaderWhiteSpace</code>, and <code>TrimHeaders</code> and added <code>PrepareHeaderForMatch</code>.</li>
+<li>Changed <code>DateTime</code> and <code>DateTimeOffset</code> converters to not work when the <code>string</code> is spaces to match what all the other converters do. The .NET Framework <code>DateTime</code> and <code>DateTimeOffset</code> converters will convert a <code>string</code> of all spaces into <code>MinValue</code>, so we are diverging from that a little.</li>
+<li>Changed <code>ReadHeader</code> to not set <code>CurrentRecord</code> to <code>null</code>.</li>
+<li>Removed Excel specific code. This will go into a separate library. The malformed fallback behavior that mimics Excel still exists.</li>
+<li>Moved reading/writing state data into a common context object that is shared.</li>
+<li>Changed <code>BadDataCallback</code> to take in a <code>ReadingContext</code> instead of a <code>string</code>.</li>
+<li>Removed <code>Csv</code> prefix from all classes except <code>CsvReader</code>, <code>CsvParser</code>, <code>CsvWriter</code>, and <code>CsvSerializer</code>.</li>
+<li>Removed default <code>null</code> values since there is no common standard that could be found.</li>
+<li>Removed default <code>boolean</code> values of <code>yes</code>, <code>y</code>, <code>no</code>, <code>n</code> since it's not a standard boolean. <code>true</code>, <code>false</code>, <code>1</code>, <code>0</code> still work.</li>
+<li>Changed default delimiter to <code>,</code> instead of ListSeparator.</li>
+<li>Added a <code>Flush</code> method to the writer.</li>
+<li>Changed <code>Property</code> naming to <code>Member</code>.</li>
+<li>Removed <code>Configuration</code>s <code>ThrowOnBadData</code>, <code>IgnoreReadingExceptions</code>, <code>SkipEmptyRecords</code>, and <code>WillThrowOnMissingField</code> in favor of function callbacks.</li>
+<li>Renamed
+<ul>
+<li><code>TypeConverterFactory</code> to <code>TypeConverterCache</code></li>
+<li><code>TypeConverterOptionsFactory</code> to <code>TypeConverterOptionsCache</code></li>
+<li><code>Configuration.HeaderValidatedCallback</code> to <code>Configuration.HeaderValidated</code></li>
+<li><code>Configuration.MissingFieldFoundCallback</code> to <code>Configuration.MissingFieldFound</code></li>
+<li><code>Configuration.ReadingExceptionCallback</code> to <code>Configuration.ReadingExceptionOccurred</code></li>
+<li><code>Configuration.BadDataFoundCallback</code> to <code>Configuration.BadDataFound</code></li>
+<li><code>ICsvParser</code> to <code>IParser</code></li>
+<li><code>FieldReader</code> to <code>CsvFieldReader</code></li>
+<li><code>ICsvReader</code> to <code>IReader</code></li>
+<li><code>ICsvReaderRow</code> to <code>IReaderRow</code></li>
+<li><code>ICsvSerializer</code> to <code>ISerializer</code></li>
+<li><code>ICsvWriter</code> to <code>IWriter</code></li>
+<li><code>ICsvWriterRow</code> to <code>IWriterRow</code></li>
+</ul>
+</li>
+</ul>
+<h3 id="section-109">2.16.3</h3>
+<h4 id="bug-fixes-70">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>CsvClassMapCollection[type]</code> choosing the wrong type when multiple types on the inheritance tree are mapped.</li>
+</ul>
+<h3 id="section-110">2.16.2</h3>
+<h4 id="bug-fixes-71">Bug Fixes</h4>
+<ul>
+<li>Made <code>TypeInfo</code> compatibility stuff internal to not cause conflicts.</li>
+</ul>
+<h3 id="section-111">2.16.1</h3>
+<h4 id="bug-fixes-72">Bug Fixes</h4>
+<ul>
+<li>Fix for UWP release not working.</li>
+</ul>
+<h3 id="section-112">2.16</h3>
+<h4 id="features-48">Features</h4>
+<ul>
+<li>Added <code>CsvReader.ReadHeader</code> so headers can be read without reading the first row.</li>
+</ul>
+<h3 id="section-113">2.15.0.2</h3>
+<h4 id="features-49">Features</h4>
+<ul>
+<li>Update to .NET Core 1.0 release.</li>
+</ul>
+<h3 id="section-114">2.15</h3>
+<h4 id="features-50">Features</h4>
+<ul>
+<li>Added <code>SerializableAttribute</code> to all exceptions.</li>
+</ul>
+<h3 id="section-115">2.14.3</h3>
+<h4 id="features-51">Features</h4>
+<ul>
+<li>Updated project to .NET Core RC2.</li>
+</ul>
+<h4 id="bug-fixes-73">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with assembly not being a release build.</li>
+</ul>
+<h3 id="section-116">2.14.2</h3>
+<h4 id="bug-fixes-74">Bug Fixes</h4>
+<ul>
+<li>Added net45 build and excluded it from CoreFX compatibility.</li>
+</ul>
+<h3 id="section-117">2.14.1</h3>
+<h4 id="bug-fixes-75">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with .NET 2.0 classes being included that shouldn't have been in .NET 4.0.</li>
+</ul>
+<h3 id="section-118">2.14</h3>
+<h4 id="features-52">Features</h4>
+<ul>
+<li>Added CoreCLR support.</li>
+</ul>
+<h3 id="section-119">2.13.5</h3>
+<h4 id="bug-fixes-76">Bug Fixes</h4>
+<ul>
+<li>Fixed <code>ShouldSkipRecord</code> not working on rows before header.</li>
+</ul>
+<h3 id="section-120">2.13.3</h3>
+<h4 id="bug-fixes-77">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where the number of delimiter characters was read when a multiple character delimiter is hit. This was causing non-delimiters to be read when just the first character of the delimiter was found.</li>
+</ul>
+<h3 id="section-121">2.13.2</h3>
+<h4 id="bug-fixes-78">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with <code>TryGetField</code> with named index returning wrong value.</li>
+</ul>
+<h3 id="section-122">2.13.1</h3>
+<h4 id="bug-fixes-79">Bug Fixes</h4>
+<ul>
+<li>Added missing <code>DateTimeConverter</code> to the list of default converters.</li>
+</ul>
+<h3 id="section-123">2.13</h3>
+<h4 id="features-53">Features</h4>
+<ul>
+<li>When writing, use empty values for properties on reference properties when flag <code>UseNewObjectForNullReferenceProperties</code> is off.</li>
+</ul>
+<h4 id="bug-fixes-80">Bug Fixes</h4>
+<ul>
+<li>Fixed portable target for Windows Phone 8.1.</li>
+</ul>
+<h3 id="section-124">2.12</h3>
+<h4 id="features-54">Features</h4>
+<ul>
+<li>Added Windows Phone 8.1 support to the PCL assembly.</li>
+<li>Added ability to set a prefix for reference maps. i.e. <code>Prefix( string prefix = null)</code></li>
+<li>Added callback to use to determine if a record should be skipped when reading.</li>
+<li>Excel leading zeros number formatting. This allows you to read and write numbers that will preserve the zeros on the front. i.e. <code>=&quot;0001&quot;</code></li>
+<li>Use default value when a field is null because of a missing field in the row.</li>
+<li>Added <code>TrimFields</code> to CsvWriter.</li>
+<li>ability to specify constructor arguments when referencing another map within a mapping.</li>
+<li>Added <code>Names</code> property on <code>CsvPropertyNameCollection</code> to get raw list of property names.</li>
+<li>Added raw file line number to parser.</li>
+<li>Mapping methods on <code>CsvClassMap&lt;T&gt;</code> are now public to more easily allow mapping during runtime.</li>
+<li>Added <code>DateTimeOffset</code> converter.</li>
+</ul>
+<h4 id="bug-fixes-81">Bug Fixes</h4>
+<ul>
+<li>Fixed exception that was occurring when fields were empty and <code>UseExcelLeadingZerosFormatForNumerics = true</code>.</li>
+<li>Excel compatibility fix. If a field starts with a quote but never ends and the end of the file is reached, the field would be null. The field will now contain everything.</li>
+<li>Don't get static properties when automapping.</li>
+<li>Made all exceptions thrown contain Exception.Data[&quot;CsvHelper&quot;].</li>
+<li>Fixed missing support writing the double quotes for inner quotes on a quoted field. This used to be there and was removed at some point. A unit test is now in place so this doesn't happen again.</li>
+</ul>
+<h3 id="section-125">2.11.1.1</h3>
+<h4 id="bug-fixes-82">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with writing an array of records.</li>
+</ul>
+<h3 id="section-126">2.11</h3>
+<h4 id="features-55">Features</h4>
+<ul>
+<li>Allow preservation of numeric strings for Excel.</li>
+</ul>
+<h4 id="bug-fixes-83">Bug Fixes</h4>
+<ul>
+<li>Fixed writing issue with anonymous objects outputting wrong headers.</li>
+</ul>
+<h3 id="section-127">2.10</h3>
+<h4 id="features-56">Features</h4>
+<ul>
+<li>Updated writer methods to match reader methods.</li>
+</ul>
+<h3 id="section-128">2.9.1</h3>
+<h4 id="bug-fixes-84">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where char converter would trim a single space string.</li>
+</ul>
+<h3 id="section-129">2.9</h3>
+<h4 id="features-57">Features</h4>
+<ul>
+<li>Added support to ignore whitespace when determining a record is empty.</li>
+</ul>
+<h3 id="section-130">2.8.4</h3>
+<h4 id="bug-fixes-85">Bug Fixes</h4>
+<ul>
+<li>Fixed breaking change to not break.</li>
+</ul>
+<h3 id="section-131">2.8.3</h3>
+<h4 id="bug-fixes-86">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where header wasn't written when there were no records in the IEnumerable on WriteRecords( IEnumerable ).</li>
+</ul>
+<h3 id="section-132">2.8.2</h3>
+<h4 id="bug-fixes-87">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where an exception was always thrown if Configuration.ThrowOnBadData is on.</li>
+</ul>
+<h3 id="section-133">2.8</h3>
+<h4 id="features-58">Features</h4>
+<ul>
+<li>Added configurations for a callback when a bad field is detected. Added configuration to throw an exception when a bad field is detected.</li>
+<li>Made mapping with interfaces not duplicate property maps.</li>
+</ul>
+<h3 id="section-134">2.7.1</h3>
+<h4 id="bug-fixes-88">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with mappings overwriting an explicitly set index when re-indexing.</li>
+<li>Auto mapping will ignore Enumerable properties instead of throwing an exception. Exceptions will still be thrown if an Enumerable is used outside of auto mapping.</li>
+</ul>
+<h3 id="section-135">2.7</h3>
+<h4 id="bug-fixes-89">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where using dynamic proxy objects would always automap instead of using a registered class map.</li>
+<li>Fixed issue when trimming fields and the field is null.</li>
+<li>Fixed issue when writing a field and the value is null.</li>
+<li>Removed deprecated writer methods.</li>
+</ul>
+<h3 id="section-136">2.6.1</h3>
+<h4 id="features-59">Features</h4>
+<ul>
+<li>PCL implementation. .NET 4.0+, Silveright 4.0+, WP7 7.5+, Windows 8</li>
+<li>Excel separator record reading and writing.</li>
+<li>Writer speed enhancements. Thanks to thecontrarycat.</li>
+</ul>
+<h4 id="bug-fixes-90">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with mapping order when no index is specified.</li>
+</ul>
+<h3 id="section-137">2.6</h3>
+<h4 id="features-60">Features</h4>
+<ul>
+<li>Added config to prefix headers of reference properties with the parent property name when automapping.</li>
+<li>Ability to ignore blank lines. When this config option is set to false, the parser will return and array of nulls. You can differentiate between a row with commas this way. The reader will behave the same way as a blank record.</li>
+</ul>
+<h4 id="bug-fixes-91">Bug Fixes</h4>
+<ul>
+<li>Fixed issue when writing and a reference map type is a struct.</li>
+</ul>
+<h3 id="section-138">2.5</h3>
+<h4 id="features-61">Features</h4>
+<ul>
+<li>Global type converter options.</li>
+<li>Easier access to property maps to allow for changing maps on the fly.</li>
+<li>Option to ignore references when auto mapping.</li>
+<li>AutoMap functionality is available in class maps.</li>
+<li>Mappings can be specified in the constructor of the mapping class. Overriding CreateMap is now deprecated.</li>
+</ul>
+<h4 id="bug-fixes-92">Bug Fixes</h4>
+<ul>
+<li>Updated ConvertUsing to not cause the exception &quot;Operation Could Destabilize the Runtime&quot; when property is a nullable type and a non-nullable type is returned.</li>
+</ul>
+<h3 id="section-139">2.4.1</h3>
+<h4 id="bug-fixes-93">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where parsing would add delimiter chars to the field when the buffer ran out in the middle of the delimiter.</li>
+</ul>
+<h3 id="section-140">2.4</h3>
+<h4 id="features-62">Features</h4>
+<ul>
+<li>Split writing up into a writer and serializer so the writer can write other things besides CSV files.</li>
+</ul>
+<h4 id="bug-fixes-94">Bug Fixes</h4>
+<ul>
+<li>Fixed issue where a NullReferenceException was thrown when using reference maps and a reference was null.</li>
+<li>Fixed issue where TryGetField was throwing MissingFieldException.</li>
+<li>Fixed issue where a commented row on the last line that doesn't have a newline will return the commented row.</li>
+<li>Fixed NuGet package for WP8.</li>
+<li>Added missing WriteHeader methods to ICsvWriter that were a part of CsvWriter.</li>
+</ul>
+<h3 id="section-141">2.3</h3>
+<h4 id="features-63">Features</h4>
+<ul>
+<li>Support for TimeSpan.</li>
+<li>Support for writing records of type dynamic. The dynamic objects do not work with collections, which means ExpandoObject doesn't currently work.</li>
+</ul>
+<h4 id="bug-fixes-95">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with extra exception info not being added when the reading exception callback is used.</li>
+<li>Fixed issue where having only reference maps throws exception.</li>
+</ul>
+<h3 id="section-142">2.2.2</h3>
+<h4 id="bug-fixes-96">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with parser where a line wouldn't end if the previous char was a \0.</li>
+</ul>
+<h3 id="section-143">2.2.1</h3>
+<h4 id="bug-fixes-97">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with trimming fields not working under one path.
+2.2.0</li>
+</ul>
+<h4 id="features-64">Features</h4>
+<ul>
+<li>Added Row property to ICsvReader.</li>
+<li>Config option to trim headers and values when reading.</li>
+</ul>
+<h3 id="section-144">2.1.1</h3>
+<h4 id="bug-fixes-98">Bug Fixes</h4>
+<ul>
+<li>Fixed issue when WillThrowOnMissingField is off and exception was still being thrown.</li>
+</ul>
+<h3 id="section-145">2.1.0</h3>
+<h4 id="features-65">Features</h4>
+<ul>
+<li>Made RegisterClassMap overload with CsvClassMap instance public.</li>
+</ul>
+<h3 id="section-146">2.0.1</h3>
+<h4 id="bug-fixes-99">Bug Fixes</h4>
+<ul>
+<li>Made a WinRT Any CPU build and removed the arch specific WinRT builds.</li>
+</ul>
+<h3 id="section-147">2.0.0</h3>
+<h4 id="features-66">Features</h4>
+<ul>
+<li>Added parser configuration to ignoring quotes and treating them like any other character.</li>
+<li>Added CsvFactory to create ICsvParser, ICsvReader, and ICsvWriter classes. This is useful when you need to unit test code that uses CsvHelper since these 3 classes require a TextReader or TextWriter to work.</li>
+<li>All assembly versions are strong named but will use a single version of 2.0.0.0. The file version and NuGet versions will change with every release.</li>
+<li>Removed class type constraint from reading and writing.</li>
+<li>Added non-generic class mapping overload.</li>
+<li>WriteRecords param changed from IEnumerable<object> to non-generic IEnumerable.</li>
+<li>Value types can be read and written instead of just custom classes.</li>
+<li>Indexes are automatically set and incremented when mapping in order of the Map and Reference calls.</li>
+<li>Auto mapping with circular reference detection.</li>
+<li>Config option to ignore spaces in header names.</li>
+<li>Fixed exception handling. Exception are no longer wrapped. Exception.Data[&quot;CsvHelper&quot;] contains CsvHelper specific exception info.</li>
+<li>Row exception can be skipped during GetRecords.</li>
+<li>Renamed IsStrictMode to WillThrowOnMissingField.</li>
+<li>Window Phone 7 &amp; 8 builds.</li>
+<li>Auto mapping will use defined maps if available.</li>
+<li>Type converter options.</li>
+<li>Added IEnumerable converter that throws an exception so people will know that converting to/from and enumerable is not supported instead of getting a cryptic error message.</li>
+<li>Dynamic support for reading and writing.</li>
+<li>Multiple maps can be supplied.</li>
+<li>Renamed InvalidateRecordCache to ClearRecordCache.</li>
+<li>Recursive reference mapping down the whole mapping tree.</li>
+<li>Configuration.CultureInfo was added in place of Configuration.UseInvariantCulture.</li>
+</ul>
+<h4 id="bug-fixes-100">Bug Fixes</h4>
+<ul>
+<li>Getting the exception helper message failed when writing because no parser is available.</li>
+<li>WriteRecords Dynamic invoke had wrong parameter count.</li>
+<li>GetField( string ) was not returning null if the header is not found.</li>
+<li>CsvBadDataException when there were extra columns in the row.</li>
+<li>Raw record corruption.</li>
+</ul>
+<h3 id="section-148">1.17.0</h3>
+<h4 id="features-67">Features</h4>
+<ul>
+<li>Ignore properties that can't be set in attribute mapping.</li>
+<li>Made TypeConverterFactory thread safe.</li>
+<li>Added remove converter method.</li>
+</ul>
+<h4 id="bug-fixes-101">Bug Fixes</h4>
+<ul>
+<li>Issue with writer exception in WinRT.</li>
+</ul>
+<h3 id="section-149">1.16.0</h3>
+<h4 id="features-68">Features</h4>
+<ul>
+<li>Change TypeConverterFactory to use a set of cache type converters so global type converters can be used.</li>
+<li>Added GetField&lt;T, TConverter&gt; overloads.</li>
+<li>Changed all Activator.CreateInstance calls to use compiled expression trees to create them instead.</li>
+<li>Changed mapping for ConvertUsing to accept a Func so a block expression can be used.</li>
+</ul>
+<h3 id="section-150">1.15.0</h3>
+<h4 id="features-69">Features</h4>
+<ul>
+<li>Support for Silverlight 4 &amp; 5.</li>
+</ul>
+<h4 id="bug-fixes-102">Bug Fixes</h4>
+<ul>
+<li>Issue where writing with Configuration.QuoteAllFields enabled will not quote the quotes inside the field.</li>
+<li>Issue with WinRT not building after pull request merge.</li>
+</ul>
+<h3 id="section-151">1.14.0</h3>
+<h4 id="features-70">Features</h4>
+<ul>
+<li>Parse full line on read. This allows for the parser to retain the whole unchanged raw CSV lin on a read.</li>
+<li>Changed delimiter config from a char to a string.</li>
+<li>Iterating records multiple times will throw a CsvReaderException. This is to help stop confusion when 0 results are returned the second iteration.</li>
+</ul>
+<h4 id="bug-fixes-103">Bug Fixes</h4>
+<ul>
+<li>Issue where EnumConverter isn't created correctly from the TypeConverterFactory.</li>
+<li>Issue with updating count for all closing quotes.</li>
+</ul>
+<h3 id="section-152">1.13.0</h3>
+<h4 id="features-71">Features</h4>
+<ul>
+<li>Configuration to always not quote all fields.</li>
+<li>WriteHeader method is public.</li>
+<li>Added enum converter.</li>
+</ul>
+<h4 id="bug-fixes-104">Bug Fixes</h4>
+<ul>
+<li>Issue with boolean converter returning true for &quot;no&quot; value.</li>
+<li>Issue with GetMethod in WinRT.</li>
+</ul>
+<h3 id="section-153">1.12.1</h3>
+<h4 id="bug-fixes-105">Bug Fixes</h4>
+<ul>
+<li>Issue where an exception was being thrown when reading all records multiple times.</li>
+</ul>
+<h3 id="section-154">1.12.0</h3>
+<h4 id="features-72">Features</h4>
+<ul>
+<li>WinRT support.</li>
+</ul>
+<h3 id="section-155">1.11.0</h3>
+<h4 id="features-73">Features</h4>
+<ul>
+<li>Better exception information added to CsvBadDataException.</li>
+</ul>
+<h3 id="section-156">1.10.0</h3>
+<h4 id="features-74">Features</h4>
+<ul>
+<li>Mapping property for CreateUsing which allows user to specify how the property gets created.</li>
+</ul>
+<h3 id="section-157">1.9.2</h3>
+<h4 id="bug-fixes-106">Bug Fixes</h4>
+<ul>
+<li>Issue with skipping empty records.</li>
+</ul>
+<h3 id="section-158">1.9.1</h3>
+<h4 id="bug-fixes-107">Bug Fixes</h4>
+<ul>
+<li>Issue with detecting column count changes.</li>
+</ul>
+<h3 id="section-159">1.9.0</h3>
+<h4 id="features-75">Features</h4>
+<ul>
+<li>Added properties to CsvReaderException to give more information about the error.</li>
+<li>Ability to skip empty records based on config settings.</li>
+<li>Getting by index that doesn't exist will give a default or CsvMissingFieldException.</li>
+<li>Made column count detection a config setting.</li>
+<li>Map option for constructing the row object.</li>
+<li>Throw exception when inconsistent column lengths are detected.</li>
+<li>String.Format support in CsvWriter.</li>
+<li>Excel compatible parsing.</li>
+<li>Parser can keep track of the byte position using an encoding so a user can seek to a stream and start reading from there.</li>
+</ul>
+<h4 id="bug-fixes-108">Bug Fixes</h4>
+<ul>
+<li>Fixed bug with column count detection.</li>
+<li>Issue with double counting the closing quote.</li>
+<li>Issue where parsing was incorrect when the last row didn't have a CRLF at the end.</li>
+<li>Issue with error messages.</li>
+</ul>
+<h3 id="section-160">1.8.0</h3>
+<h4 id="features-76">Features</h4>
+<ul>
+<li>Writer overload for shouldQuote when writing a field.</li>
+<li>Ability for using alternative names for headers in the configuration.</li>
+<li>Better error messages.</li>
+</ul>
+<h3 id="section-161">1.7.0</h3>
+<h4 id="features-77">Features</h4>
+<ul>
+<li>Configuration to quote all fields when writing.</li>
+<li>Parser keeps a char count of where it's at.</li>
+</ul>
+<h4 id="bug-fixes-109">Bug Fixes</h4>
+<ul>
+<li>Fixed subclass issue by having the reader and writer use interfaces instead of concrete classes.</li>
+</ul>
+<h3 id="section-162">1.6.0</h3>
+<h4 id="features-78">Features</h4>
+<ul>
+<li>Custom boolean type converter that can convert from 1 and 0 besides the normal conversion.</li>
+<li>Property map configuration to set a default value.</li>
+<li>CsvWriter no longer flushes to the output stream after every record.</li>
+<li>Non-generic overloads for reading, writing, and attribute mapping.</li>
+<li>Invalidate record cache will clear the properties list.</li>
+</ul>
+<h3 id="section-163">1.5.0</h3>
+<h4 id="features-79">Features</h4>
+<ul>
+<li>Support .NET 2.0 and 3.5 builds.</li>
+</ul>
+<h3 id="section-164">1.4.0</h3>
+<h4 id="features-80">Features</h4>
+<ul>
+<li>Case insensitive header matching.</li>
+</ul>
+<h3 id="section-165">1.3.0</h3>
+<h4 id="features-81">Features</h4>
+<ul>
+<li>Removed CsvHelper class.</li>
+<li>Property reference mapping. One level deep.</li>
+</ul>
+<h3 id="section-166">1.2.0</h3>
+<h4 id="features-82">Features</h4>
+<ul>
+<li>Support for multiple duplicate header names.</li>
+</ul>
+<h3 id="section-167">1.1.2</h3>
+<h4 id="bug-fixes-110">Bug Fixes</h4>
+<ul>
+<li>Issue when using a readonly or writeonly stream and disposing causes an exception.</li>
+</ul>
+<h3 id="section-168">1.1.1</h3>
+<h4 id="features-83">Features</h4>
+<ul>
+<li>Updated CsvHelper.cs to allow for readonly and writeonly stream.</li>
+</ul>
+<h4 id="bug-fixes-111">Bug Fixes</h4>
+<ul>
+<li>Fixed DateTimeConverter issue where a white space string would return a - DateTime.MinValue instead of null.</li>
+</ul>
+<h3 id="section-169">1.1.0</h3>
+<h4 id="features-84">Features</h4>
+<ul>
+<li>Changed .NET 3.5 project to client profile.</li>
+<li>Added getter for the current record in the header.</li>
+</ul>
+<h3 id="section-170">1.0.0</h3>
+<h4 id="features-85">Features</h4>
+<ul>
+<li>Changed strict mode to default to true.</li>
+<li>Renamed strict mode configuration property.</li>
+<li>Changed reader to not throw an exception when there are duplicate header records unless in strict mode.</li>
+</ul>
+<h4 id="bug-fixes-112">Bug Fixes</h4>
+<ul>
+<li>Fixed bug where if there is no line ending at the end of the file, the last field would be null instead of an empty string.</li>
+<li>Fixed configuration references and constructor signatures.</li>
+</ul>
+<h3 id="section-171">0.16.0</h3>
+<h4 id="features-86">Features</h4>
+<ul>
+<li>Added configuration option for using CultureInvariant to read/write.</li>
+<li>Updated the reader/writer to use the config option.</li>
+<li>Both CsvReader and CsvWriter are using Local culture when converting from/to strings.</li>
+<li>CsvClassMap without generic argument.</li>
+</ul>
+<h3 id="section-172">0.15.0</h3>
+<h4 id="features-87">Features</h4>
+<ul>
+<li>Changed TryGetField<T> to do a low level check instead of jsut wrapping in try/catch blocks.</li>
+<li>Removed non generic TryGetField methods.</li>
+<li>Formatting changes.</li>
+<li>Changed CsvParser to use the Configuration.Comment char instead of #.</li>
+</ul>
+<h4 id="bug-fixes-113">Bug Fixes</h4>
+<ul>
+<li>Fixed indentation error caused by new constructor in CsvPropertyMap.</li>
+</ul>
+<h3 id="section-173">0.14.0</h3>
+<h4 id="features-88">Features</h4>
+<ul>
+<li>Changed GetRecords<T> to return IEnumerable<T>.</li>
+<li>Added convenience constructor to CsvPropertyMap.</li>
+<li>Major configuration overhaul.</li>
+<li>Changed end of file check to be more low level.</li>
+<li>Final record is returned if there is a trailing delimiter.</li>
+<li>Added an exception re-throw to parsing that tells the line and character number.</li>
+<li>Added ability to change what the quote char is.</li>
+<li>Added CSV specific exceptions.</li>
+</ul>
+<h4 id="bug-fixes-114">Bug Fixes</h4>
+<ul>
+<li>Fix for issue when CsvHelper uses CurrentCulture instead of InvariantCulture.</li>
+</ul>
+<h3 id="section-174">0.13.0</h3>
+<h4 id="features-89">Features</h4>
+<ul>
+<li>Changed StreamReader to TextReader to be more generic.</li>
+</ul>
+<h3 id="section-175">0.12.0</h3>
+<h4 id="features-90">Features</h4>
+<ul>
+<li>Added option to have a commented out line using '#' as the first character of the line.</li>
+</ul>
+<h4 id="bug-fixes-115">Bug Fixes</h4>
+<ul>
+<li>Fixed issue with spaces in non-quoted field.</li>
+</ul>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/attributes/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/attributes/index.html
new file mode 100644
index 0000000..a5e958f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/attributes/index.html
@@ -0,0 +1,472 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Attributes | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="attributes">Attributes</h1>
+<p>Most of the configuration done via class maps can also be done using attributes.</p>
+<h6 id="data">Data</h6>
+<pre><code>Identifier,name,IsBool,Constant
+1,one,yes,a
+2,two,no,b
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.GetRecords&lt;Foo&gt;().ToList().Dump();
+ }
+}
+
+[Delimiter(&quot;,&quot;)]
+[CultureInfo(&quot;&quot;)] // Set CultureInfo to InvariantCulture
+public class Foo
+{
+ [Name(&quot;Identifier&quot;)]
+ public int Id { get; set; }
+
+ [Index(1)]
+ public string Name { get; set; }
+
+ [BooleanTrueValues(&quot;yes&quot;)]
+ [BooleanFalseValues(&quot;no&quot;)]
+ public bool IsBool { get; set; }
+
+ [Constant(&quot;bar&quot;)]
+ public string Constant { get; set; }
+
+ [Optional]
+ public string Optional { get; set; }
+
+ [Ignore]
+ public string Ignored { get; set; }
+}
+
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/auto-mapping/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/auto-mapping/index.html
new file mode 100644
index 0000000..e410ab5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/auto-mapping/index.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Auto Mapping | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="auto-mapping">Auto Mapping</h1>
+<p>If you don't supply a map to the configuration, one is automatically created for you on the fly. You can call auto mapping directly in your class map also. You may want to do this if you have a large number of properties that will be set up correctly by default, and only need to make a couple changes.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,The Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m =&gt; m.Name).Name(&quot;The Name&quot;);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/constant-value/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/constant-value/index.html
new file mode 100644
index 0000000..8c4b933
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/constant-value/index.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Constant Value | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="constant-value">Constant Value</h1>
+<p>You can set a constant value to a property instead of mapping it to a field.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public bool IsDirty { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ Map(m =&gt; m.IsDirty).Constant(true);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/ignoring-properties/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/ignoring-properties/index.html
new file mode 100644
index 0000000..8a8b126
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/ignoring-properties/index.html
@@ -0,0 +1,463 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Ignoring Properties | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="ignoring-properties">Ignoring Properties</h1>
+<p>When you use auto mapping in your class map, every property will get mapped. If there are properties that you don't want mapped, you can ignore them.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public bool IsDirty { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m =&gt; m.IsDirty).Ignore();
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/index.html
new file mode 100644
index 0000000..26c946e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/index.html
@@ -0,0 +1,489 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Class Maps | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="class-maps">Class Maps</h1>
+<table>
+<thead>
+<tr>
+<th>Topics</th>
+<th> </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a></td>
+<td>Mapping to properties.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a></td>
+<td>Mapping properties by header name.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a></td>
+<td>Mapping properties that may be one of many names.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a></td>
+<td>Mapping properties that have duplicate header names.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a></td>
+<td>Mapping properties by header index position.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a></td>
+<td>Automatic mapping.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a></td>
+<td>Ignoring mapped properites.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a></td>
+<td>Setting a constant value for a property.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a></td>
+<td>Using a specific type converter.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a></td>
+<td>Convert a field to a type inline.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a></td>
+<td>Map a property only if it exists.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a></td>
+<td>Validate a field value.</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/inline-type-conversion/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/inline-type-conversion/index.html
new file mode 100644
index 0000000..0ec199e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/inline-type-conversion/index.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Inline Type Conversion | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="inline-type-conversion">Inline Type Conversion</h1>
+<p>If you don't want to write a full <code>ITypeConverter</code> implementation, you can specify a function that will do the same thing.</p>
+<h2 id="reading">Reading</h2>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name,Json
+1,one,&quot;{ &quot;&quot;Foo&quot;&quot;: &quot;&quot;Bar&quot;&quot; }&quot;
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.GetRecords&lt;Foo&gt;().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public Json Json { get; set; }
+}
+
+public class Json
+{
+ public string Foo { get; set; }
+}
+
+public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ Map(m =&gt; m.Json).Convert(row =&gt; JsonConvert.DeserializeObject&lt;Json&gt;(row.GetField(&quot;Json&quot;)));
+ }
+}
+</code></pre>
+<h2 id="writing">Writing</h2>
+<h6 id="example-1">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var records = new List&lt;Foo&gt;
+ {
+ new Foo { Id = 1, Name = &quot;one&quot; }
+ };
+
+ using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.WriteRecords(records);
+
+ writer.ToString().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public Json Json { get; set; }
+}
+
+public class Json
+{
+ public string Foo { get; set; }
+}
+
+public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ Map(m =&gt; m.Json).Convert(o =&gt; JsonConvert.SerializeObject(o));
+ }
+}
+</code></pre>
+<h6 id="output">Output</h6>
+<pre><code>Id,Name,Json
+1,one,&quot;{&quot;&quot;Id&quot;&quot;:1,&quot;&quot;Name&quot;&quot;:&quot;&quot;one&quot;&quot;,&quot;&quot;Json&quot;&quot;:null}&quot;
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-alternate-names/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-alternate-names/index.html
new file mode 100644
index 0000000..62e3bd7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-alternate-names/index.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Mapping By Alternate Names | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="mapping-by-alternate-names">Mapping by Alternate Names</h1>
+<p>If you have a header name that could vary, you can specify multiple header names.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Name(&quot;TheId&quot;, &quot;Id&quot;);
+ Map(m =&gt; m.Name).Name(&quot;TheName&quot;, &quot;Name&quot;);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-index/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-index/index.html
new file mode 100644
index 0000000..9aa7759
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-index/index.html
@@ -0,0 +1,465 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Mapping By Index | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="mapping-by-index">Mapping by Index</h1>
+<p>If your data doesn't have a header you can map by index instead of name. You can't rely on the order of class properties in .NET, so if you're not mapping by name, make sure you specify an index.</p>
+<h6 id="data">Data</h6>
+<pre><code>1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Index(0);
+ Map(m =&gt; m.Name).Index(1);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-name/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-name/index.html
new file mode 100644
index 0000000..cb15885
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-by-name/index.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Mapping By Name | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="mapping-by-name">Mapping by Name</h1>
+<p>If your property names don't match your class names, you can map the property to the column by name.</p>
+<h6 id="data">Data</h6>
+<pre><code>ColumnA,ColumnB
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Name(&quot;ColumnA&quot;);
+ Map(m =&gt; m.Name).Name(&quot;ColumnB&quot;);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-duplicate-names/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-duplicate-names/index.html
new file mode 100644
index 0000000..d7dc521
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-duplicate-names/index.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Mapping Duplicate Names | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="mapping-duplicate-names">Mapping Duplicate Names</h1>
+<p>Sometimes you have duplicate header names. This is handled through a header name index. The name index is the index of how many occurrences of that header name there are, not the position of the header.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name,Name
+1,first,last
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string FirstName { get set; }
+ public string LastName { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.FirstName).Name(&quot;Name&quot;).NameIndex(0);
+ Map(m =&gt; m.LastName).Name(&quot;Name&quot;).NameIndex(1);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-properties/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-properties/index.html
new file mode 100644
index 0000000..05640ec
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/mapping-properties/index.html
@@ -0,0 +1,462 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Mapping Properties | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="mapping-properties">Mapping Properties</h1>
+<p>This will map the properties of a class to the header names of the CSV data. The mapping needs to be registered in the context. This example is identical to not using a class mapping at all. The headers match the property names.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/optional-maps/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/optional-maps/index.html
new file mode 100644
index 0000000..d57dcad
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/optional-maps/index.html
@@ -0,0 +1,464 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Optional Maps | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="optional-maps">Optional Maps</h1>
+<p>If you have data that may or may not have a header, you can make the mapping optional.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.GetRecords&lt;Foo&gt;().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public DateTimeOffset? Date { get; set; }
+}
+
+public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ Map(m =&gt; m.Date).Optional();
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/type-conversion/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/type-conversion/index.html
new file mode 100644
index 0000000..56bf740
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/type-conversion/index.html
@@ -0,0 +1,482 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Type Conversion | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="type-conversion">Type Conversion</h1>
+<p>If you need to convert to or from a non-standard .NET type, you can supply a type converter to use for a property.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name,Json
+1,one,&quot;{ &quot;&quot;Foo&quot;&quot;: &quot;&quot;Bar&quot;&quot; }&quot;
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.GetRecords&lt;Foo&gt;().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public Json Json { get; set; }
+}
+
+public class Json
+{
+ public string Foo { get; set; }
+}
+
+public class JsonConverter&lt;T&gt; : DefaultTypeConverter
+{
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return JsonConvert.DeserializeObject&lt;T&gt;(text);
+ }
+
+ public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
+ {
+ return JsonConvert.SerializeObject(value);
+ }
+}
+
+public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ Map(m =&gt; m.Json).TypeConverter&lt;JsonConverter&lt;Json&gt;&gt;();
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/validation/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/validation/index.html
new file mode 100644
index 0000000..b97f314
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/class-maps/validation/index.html
@@ -0,0 +1,463 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Validation | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="validation">Validation</h1>
+<p>If you want to ensure your data conforms to some sort of standard, you can validate it.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,on-e
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.GetRecords&lt;Foo&gt;().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public DateTimeOffset? Date { get; set; }
+}
+
+public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name).Validate(field =&gt; !field.Contains(&quot;-&quot;));
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/configuration/index.html b/ThirdParty/CsvHelper-master/docs/examples/configuration/index.html
new file mode 100644
index 0000000..061d5b8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/configuration/index.html
@@ -0,0 +1,450 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Configuration | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="configuration">Configuration</h1>
+<h2 id="topics">Topics</h2>
+<table>
+<thead>
+<tr>
+<th> </th>
+<th> </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a></td>
+<td>Configure CSV structure with a class map.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration/attributes">Attributes</a></td>
+<td>Configure CSV structure with attributes.</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/csvdatareader/index.html b/ThirdParty/CsvHelper-master/docs/examples/csvdatareader/index.html
new file mode 100644
index 0000000..5a9f0f1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/csvdatareader/index.html
@@ -0,0 +1,460 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Csvdatareader | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="csvdatareader">CsvDataReader</h1>
+<p>The question on how to load a data table using CsvHelper came up so often that I just built the functionality in.</p>
+<p><code>CsvDataReader</code> implements <code>IDataReader</code>. This means it has all the capabilities of a forward only data reader. There is really no reason to use this class directly over using <code>CsvReader</code>. <code>CsvDataReader</code> requires an instance of <code>CsvReader</code> and uses it internally to do it's work.</p>
+<p>Loading a <code>DataTable</code> in CsvHelper is simple. By default, a table will be loaded with all columns populated as strings. For the reader to be ready after instantiation, the first row needs to be read immediately, so you need to make any configuration changes before creating an instance of CsvDataReader.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ // Do any configuration to `CsvReader` before creating CsvDataReader.
+ using (var dr = new CsvDataReader(csv))
+ {
+ var dt = new DataTable();
+ dt.Load(dr);
+ }
+}
+</code></pre>
+<p>If you want to specify columns and column types, the data table will be loaded with the types automatically converted.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ // Do any configuration to `CsvReader` before creating CsvDataReader.
+ using (var dr = new CsvDataReader(csv))
+ {
+ var dt = new DataTable();
+ dt.Columns.Add(&quot;Id&quot;, typeof(int));
+ dt.Columns.Add(&quot;Name&quot;, typeof(string));
+
+ dt.Load(dr);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/index.html b/ThirdParty/CsvHelper-master/docs/examples/index.html
new file mode 100644
index 0000000..a1d8adc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/index.html
@@ -0,0 +1,465 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Examples | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="examples">Examples</h1>
+<table>
+<thead>
+<tr>
+<th>Sections</th>
+<th> </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/CsvHelper/examples/prerequisites">Prerequisites</a></td>
+<td>Implied knowledge when using CsvHelper.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading">Reading</a></td>
+<td>Reading CSV data.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/writing">Writing</a></td>
+<td>Writing CSV data.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/configuration">Configuration</a></td>
+<td>Configuring the behavior of CsvHelper to work with your CSV data or custom class structures.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/type-conversion">Type Conversion</a></td>
+<td>Using type conversion to convert CSV fields to and from .NET types.</td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/csvdatareader">DataReader</a></td>
+<td>Using a DataTable to read CSV data.</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/prerequisites/index.html b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/index.html
new file mode 100644
index 0000000..3e6af69
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/index.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Prerequisites | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="prerequisites">Prerequisites</h1>
+<p>Here are some prerequisites that are needed for using CsvHelper. These are .NET basics that are implied knowledge when using CsvHelper. <a href="https://docs.microsoft.com/dotnet/" target="_blank">Microsoft has excellent documentation</a> that can you can use to learn more.</p>
+<table>
+<thead>
+<tr>
+<th>Topics</th>
+<th> </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/prerequisites/streams">Streams</a></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/prerequisites/reading-and-writing-files/index.html b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/reading-and-writing-files/index.html
new file mode 100644
index 0000000..72fa8a0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/reading-and-writing-files/index.html
@@ -0,0 +1,480 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Reading And Writing Files | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="reading-and-writing-files">Reading and Writing Files</h1>
+<p>To open a file for reading or writing, we can use <code>System.IO.File</code>.</p>
+<pre><code class="language-cs">using (var stream = File.OpenRead(&quot;path\\to\\file.csv&quot;))
+{
+}
+
+using (var stream = File.OpenWrite(&quot;path\\to\\file.csv&quot;))
+{
+}
+</code></pre>
+<p>These both return a <code>FileStream</code> for working with our file. Since our data is text, we will need to use a <code>StreamReader</code> and <code>StreamWriter</code> to read and write the text.</p>
+<pre><code class="language-cs">using (var stream = File.OpenRead(&quot;path\\to\\file.csv&quot;))
+using (var reader = new StreamReader(stream))
+{
+}
+
+using (var stream = File.OpenWrite(&quot;path\\to\\file.csv&quot;))
+using (var writer = new StreamWriter(stream))
+{
+}
+</code></pre>
+<p><code>StreamReader</code> and <code>StreamWriter</code> have shortcuts for doing this.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+{
+}
+
+using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+{
+}
+</code></pre>
+<p>CsvHelper doesn't know anything about your encoding, so if you have a specific encoding, you'll need to specify that in your stream.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;, Encoding.UTF8))
+{
+}
+
+using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;, Encoding.UTF8))
+{
+}
+</code></pre>
+<p><code>CsvReader</code> and <code>CsvWriter</code> take a <code>TextReader</code> and <code>TextWriter</code> in their constructors. <code>TextReader</code> and <code>TextWriter</code> are <code>abstract</code> classes for reading and writing text. <code>StreamReader</code> inherits <code>TextReader</code> and <code>StreamWriter</code> inherits <code>TextWriter</code>, so we can use those with <code>CsvReader</code> and <code>CsvWriter</code>.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader))
+{
+}
+
+using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvWriter(writer))
+{
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/prerequisites/streams/index.html b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/streams/index.html
new file mode 100644
index 0000000..4168219
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/streams/index.html
@@ -0,0 +1,453 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Streams | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="streams">Streams</h1>
+<p>When reading from a stream, if you need to go back to the beginning of the stream, you can use the <code>Stream.Position</code> property.</p>
+<pre><code class="language-cs">using (var stream = new File.OpenRead(&quot;path\\to\\file&quot;))
+using (var reader = new StreamReader(stream))
+{
+ // Read file content.
+ var content = reader.ReadToEnd();
+
+ // Go back to beginning of the stream.
+ stream.Position = 0;
+
+ // Read file content again.
+ content = reader.ReadToEnd();
+}
+</code></pre>
+<p>When writing to a file, you need to flush the writer for the data to be written to the stream. <code>StreamWriter</code> contains an internal buffer and the data is only written to the stream when the buffer is full, or <code>Flush</code> is called. <code>Flush</code> is automatically called when a <code>using</code> block exits.</p>
+<pre><code class="language-cs">using (var stream = new File.OpenWrite(&quot;path\\to\\file&quot;))
+using (var writer = new StreamWriter(stream))
+{
+ writer.WriteLine(&quot;Foo&quot;);
+ writer.Flush(); // Data is written from the writer buffer to the stream.
+} // Flush is also called here.
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/prerequisites/using-and-dispose/index.html b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/using-and-dispose/index.html
new file mode 100644
index 0000000..1b06644
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/prerequisites/using-and-dispose/index.html
@@ -0,0 +1,444 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Using And Dispose | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="using-and-dispose">Using and Dispose</h1>
+<p>Whenever you have an object the implements <code>IDisposable</code>, you need to dispose of the resource when you're done with it. Most classes that use unmanaged resources will implement <code>IDisposable</code>. This means a lot of classes in the <code>System.IO</code> namespace will need to be disposed of.</p>
+<p>The best practice to dispose of an object when you're done with it is to wrap the code in a <code>using</code> block. When the <code>using</code> block exits, the resource will automatically be disposed of as soon as possible.</p>
+<pre><code class="language-cs">using (var stream = new MemoryStream())
+{
+ // Use the stream.
+}
+// The stream will be disposed of as soon as possible.
+</code></pre>
+<p>If you need to keep keep it around for a while and dispose of it later, <code>using</code> does some error handling for you, so it's still a good idea to use it instead of calling <code>Dispose</code> directly. There is some debate on whether this is a good idea because it doesn't show intent.</p>
+<pre><code class="language-cs">var stream = new MemoryStream();
+// Later in a different part of your code.
+using (stream) { }
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/enumerate-class-records/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/enumerate-class-records/index.html
new file mode 100644
index 0000000..4102d5d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/enumerate-class-records/index.html
@@ -0,0 +1,457 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Enumerate Class Records | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="enumerate-class-records">Enumerate Class Records</h1>
+<p>Convert CSV rows into a class object that is re-used on every iteration of the enumerable. Each enumeration will hydrate the given record, but only the mapped members. If you supplied a map and didn't map one of the members, that member will not get hydrated with the current row's data. Be careful. Any methods that you call on the projection that force the evaluation of the <code>IEnumerable</code>, such as <code>ToList()</code>, you will get a list where all the records are the same instance you provided that is hydrated with the last record in the CSV file.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var record = new Foo();
+ var records = csv.EnumerateRecords(record);
+ foreach (var r in records)
+ {
+ // r is the same instance as record.
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/get-anonymous-type-records/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/get-anonymous-type-records/index.html
new file mode 100644
index 0000000..44e5bac
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/get-anonymous-type-records/index.html
@@ -0,0 +1,451 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Get Anonymous Type Records | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="get-anonymous-type-records">Get Anonymous Type Records</h1>
+<p>Convert CSV rows into anonymous type objects. You just need to supply the anonymous type definition.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var anonymousTypeDefinition = new
+ {
+ Id = default(int),
+ Name = string.Empty
+ };
+ var records = csv.GetRecords(anonymousTypeDefinition);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/get-class-records/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/get-class-records/index.html
new file mode 100644
index 0000000..98045ef
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/get-class-records/index.html
@@ -0,0 +1,452 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Get Class Records | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="get-class-records">Get Class Records</h1>
+<p>Convert CSV rows into class objects.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords&lt;Foo&gt;();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/get-dynamic-records/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/get-dynamic-records/index.html
new file mode 100644
index 0000000..d1b8eb8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/get-dynamic-records/index.html
@@ -0,0 +1,446 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Get Dynamic Records | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="get-dynamic-records">Get Dynamic Records</h1>
+<p>Convert CSV rows into <code>dynamic</code> objects. Since there is no way to tell what type the properties should be, all the properties on the dynamic object are strings.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords&lt;dynamic&gt;();
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/index.html
new file mode 100644
index 0000000..cb0538a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/index.html
@@ -0,0 +1,469 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Reading | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="reading">Reading</h1>
+<table>
+<thead>
+<tr>
+<th>Topics</th>
+<th> </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/reading-by-hand/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/reading-by-hand/index.html
new file mode 100644
index 0000000..dc8cb29
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/reading-by-hand/index.html
@@ -0,0 +1,463 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Reading By Hand | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="reading-by-hand">Reading by Hand</h1>
+<p>Sometimes it's easier to not try and configure a mapping to match your class definition for various reasons. It's usually only a few more lines of code to just read the rows by hand instead.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = new List&lt;Foo&gt;();
+ csv.Read();
+ csv.ReadHeader();
+ while (csv.Read())
+ {
+ var record = new Foo
+ {
+ Id = csv.GetField&lt;int&gt;(&quot;Id&quot;),
+ Name = csv.GetField(&quot;Name&quot;)
+ };
+ records.Add(record);
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-data-sets/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-data-sets/index.html
new file mode 100644
index 0000000..baba878
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-data-sets/index.html
@@ -0,0 +1,514 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Reading Multiple Data Sets | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="reading-multiple-data-sets">Reading Multiple Data Sets</h1>
+<p>For some reason there are CSV files out there that contain multiple sets of CSV data in them. You should be able to read files like this without issue. You will need to detect when to change class types you are retreiving.</p>
+<h6 id="data">Data</h6>
+<pre><code>FooId,Name
+1,foo
+
+BarId,Name
+07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,bar
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ };
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.Context.RegisterClassMap&lt;BarMap&gt;();
+ var fooRecords = new List&lt;Foo&gt;();
+ var barRecords = new List&lt;Bar&gt;();
+ var isHeader = true;
+ while (csv.Read())
+ {
+ if (isHeader)
+ {
+ csv.ReadHeader();
+ isHeader = false;
+ continue;
+ }
+
+ if (string.IsNullOrEmpty(csv.GetField(0)))
+ {
+ isHeader = true;
+ continue;
+ }
+
+ switch (csv.HeaderRecord[0])
+ {
+ case &quot;FooId&quot;:
+ fooRecords.Add(csv.GetRecord&lt;Foo&gt;());
+ break;
+ case &quot;BarId&quot;:
+ barRecords.Add(csv.GetRecord&lt;Bar&gt;());
+ break;
+ default:
+ throw new InvalidOperationException(&quot;Unknown record type.&quot;);
+ }
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public class Bar
+{
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Name(&quot;FooId&quot;);
+ Map(m =&gt; m.Name);
+ }
+}
+
+public sealed class BarMap : ClassMap&lt;Bar&gt;
+{
+ public BarMap()
+ {
+ Map(m =&gt; m.Id).Name(&quot;BarId&quot;);
+ Map(m =&gt; m.Name);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-record-types/index.html b/ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-record-types/index.html
new file mode 100644
index 0000000..c86999e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/reading/reading-multiple-record-types/index.html
@@ -0,0 +1,497 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Reading Multiple Record Types | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="reading-multiple-record-types">Reading Multiple Record Types</h1>
+<p>If you have CSV data where each row may be a different record type, you should be able to read based on a row type or something similar.</p>
+<h6 id="data">Data</h6>
+<pre><code>A,1,foo
+B,07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,bar
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.Context.RegisterClassMap&lt;BarMap&gt;();
+ var fooRecords = new List&lt;Foo&gt;();
+ var barRecords = new List&lt;Bar&gt;();
+ while (csv.Read())
+ {
+ switch (csv.GetField(0))
+ {
+ case &quot;A&quot;:
+ fooRecords.Add(csv.GetRecord&lt;Foo&gt;());
+ break;
+ case &quot;B&quot;:
+ barRecords.Add(csv.GetRecord&lt;Bar&gt;());
+ break;
+ default:
+ throw new InvalidOperationException(&quot;Unknown record type.&quot;);
+ }
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public class Bar
+{
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Index(1);
+ Map(m =&gt; m.Name).Index(2);
+ }
+}
+
+public sealed class BarMap : ClassMap&lt;Bar&gt;
+{
+ public BarMap()
+ {
+ Map(m =&gt; m.Id).Index(1);
+ Map(m =&gt; m.Name).Index(2);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/type-conversion/custom-type-converter/index.html b/ThirdParty/CsvHelper-master/docs/examples/type-conversion/custom-type-converter/index.html
new file mode 100644
index 0000000..39ceb3f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/type-conversion/custom-type-converter/index.html
@@ -0,0 +1,480 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Custom Type Converter | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="custom-type-converters">Custom Type Converters</h1>
+<p>The built in type converters will handle most situations for you, but if you find
+a situation where they don't you can create your own type converter.</p>
+<p>You can register the converter globally or per member via an attribute or class map.
+You only need to use one, but all are shown in the example.</p>
+<h6 id="data">Data</h6>
+<pre><code>Id,Name,Json
+1,one,&quot;{&quot;&quot;foo&quot;&quot;: &quot;&quot;bar&quot;&quot;}&quot;
+</code></pre>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ using (var reader = new new StreamReader(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ // Register globally.
+ csv.Context.TypeConverterCache.AddConverter&lt;JsonNode&gt;(new JsonNodeConverter());
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ csv.GetRecords&lt;Foo&gt;().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ // Register via attribute.
+ [TypeConverter(typeof(JsonNodeConverter))]
+ public JsonNode Json { get; set; }
+}
+
+public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id);
+ Map(m =&gt; m.Name);
+ // Register via map.
+ Map(m =&gt; m.Json).TypeConverter&lt;JsonNodeConverter&gt;();
+ }
+}
+
+public class JsonNodeConverter : DefaultTypeConverter
+{
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return JsonSerializer.Deserialize&lt;JsonNode&gt;(text);
+ }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/type-conversion/index.html b/ThirdParty/CsvHelper-master/docs/examples/type-conversion/index.html
new file mode 100644
index 0000000..9c01ea2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/type-conversion/index.html
@@ -0,0 +1,596 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Type Conversion | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="type-conversion">Type Conversion</h1>
+<p>When reading and writing a custom class will get converted to and from
+a CSV row. Each CSV field can be converted to and from a class property.<br />
+This conversion for class properties is done via type converters.</p>
+<p>There are many built in converters already available to you.</p>
+<table>
+<thead>
+<tr>
+<th>CsvHelper Converter</th>
+<th>C# type keyword</th>
+<th>.NET Type</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td>ArrayConverter</td>
+<td>[ ]</td>
+<td>System.Array</td>
+</tr>
+<tr>
+<td>BigIntegerConverter</td>
+<td></td>
+<td>System.Numerics.BigInteger</td>
+</tr>
+<tr>
+<td>BooleanConverter</td>
+<td>bool</td>
+<td>System.Boolean</td>
+</tr>
+<tr>
+<td>ByteArrayConverter</td>
+<td>byte[ ]</td>
+<td>System.Array</td>
+</tr>
+<tr>
+<td>ByteConverter</td>
+<td>byte</td>
+<td>System.Byte</td>
+</tr>
+<tr>
+<td>CharConverter</td>
+<td>char</td>
+<td>System.Char</td>
+</tr>
+<tr>
+<td>CollectionGenericConverter</td>
+<td></td>
+<td>System.Collections.Generic.Collection&lt;T&gt;, System.Collections.Generic.List&lt;T&gt;</td>
+</tr>
+<tr>
+<td>DateOnlyConverter</td>
+<td></td>
+<td>System.DateOnly</td>
+</tr>
+<tr>
+<td>DateTimeConverter</td>
+<td></td>
+<td>System.DateTime</td>
+</tr>
+<tr>
+<td>DateTimeOffsetConverter</td>
+<td></td>
+<td>System.DateTimeOffset</td>
+</tr>
+<tr>
+<td>DecimalConverter</td>
+<td>decimal</td>
+<td>System.Decimal</td>
+</tr>
+<tr>
+<td>DoubleConverter</td>
+<td>double</td>
+<td>System.Double</td>
+</tr>
+<tr>
+<td>EnumConverter</td>
+<td>enum</td>
+<td>System.Enum</td>
+</tr>
+<tr>
+<td>GuidConverter</td>
+<td></td>
+<td>System.Guid</td>
+</tr>
+<tr>
+<td>IDictionaryConverter</td>
+<td></td>
+<td>System.Collections.Generic.Dictionary&lt;string, string&gt;</td>
+</tr>
+<tr>
+<td>IDictionaryGenericConverter</td>
+<td></td>
+<td>System.Collections.Generic.Dictionary&lt;TKey, TValue&gt;</td>
+</tr>
+<tr>
+<td>IEnumerableConverter</td>
+<td></td>
+<td>System.Collections.ICollection, System.Collections.IEnumerable, System.Collections.IList</td>
+</tr>
+<tr>
+<td>IEnumerableGenericConverter</td>
+<td></td>
+<td>System.Collections.Generic.ICollection&lt;T&gt;, System.Collections.Generic.IEnumerable&lt;T&gt;, System.Collections.Generic.IList&lt;T&gt;</td>
+</tr>
+<tr>
+<td>Int16Converter</td>
+<td>short</td>
+<td>System.Int16</td>
+</tr>
+<tr>
+<td>Int32Converter</td>
+<td>int</td>
+<td>System.Int32</td>
+</tr>
+<tr>
+<td>Int64Converter</td>
+<td>long</td>
+<td>System.Int64</td>
+</tr>
+<tr>
+<td>NullableConverter</td>
+<td></td>
+<td>System.Nullable&lt;T&gt;</td>
+</tr>
+<tr>
+<td>SByteConverter</td>
+<td>sbyte</td>
+<td>System.SByte</td>
+</tr>
+<tr>
+<td>SingleConverter</td>
+<td>float</td>
+<td>System.Single</td>
+</tr>
+<tr>
+<td>StringConverter</td>
+<td>string</td>
+<td>System.String</td>
+</tr>
+<tr>
+<td>TimeOnlyConverter</td>
+<td></td>
+<td>System.TimeOnly</td>
+</tr>
+<tr>
+<td>UInt16Converter</td>
+<td>ushort</td>
+<td>System.UInt16</td>
+</tr>
+<tr>
+<td>UInt32Converter</td>
+<td>uint</td>
+<td>System.UInt32</td>
+</tr>
+<tr>
+<td>UInt64Converter</td>
+<td>ulong</td>
+<td>System.UInt64</td>
+</tr>
+<tr>
+<td>UriConverter</td>
+<td></td>
+<td>System.Uri</td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/type-conversion/type-converter-options/index.html b/ThirdParty/CsvHelper-master/docs/examples/type-conversion/type-converter-options/index.html
new file mode 100644
index 0000000..0fbc43d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/type-conversion/type-converter-options/index.html
@@ -0,0 +1,450 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Type Converter Options | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="type-converter-options">Type Converter Options</h1>
+<p>Options can be passed to the type converters.
+Most type converters use <code>IFormattable.ToString</code> to write and <code>TryParse</code> to read.
+Any option for these methods should be available through configuration.</p>
+<h6 id="mapping-example">Mapping Example</h6>
+<pre><code class="language-cs">public sealed class FooMap : ClassMap\&lt;Foo\&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.DateTimeProps).TypeConverterOption.DateTimeStyles(DateTimeStyles.AllowInnerWhite | DateTimeStyles.RoundtripKind);
+ }
+}
+</code></pre>
+<h6 id="attributes-example">Attributes Example</h6>
+<pre><code class="language-cs">public class Foo
+{
+ [DateTimeStyles(DateTimeStyles.AllowInnerWhite | DateTimeStyles.RoundtripKind)]
+ public DateTime DateTimeProp { get; set; }
+}
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/writing/appending-to-an-existing-file/index.html b/ThirdParty/CsvHelper-master/docs/examples/writing/appending-to-an-existing-file/index.html
new file mode 100644
index 0000000..38dccda
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/writing/appending-to-an-existing-file/index.html
@@ -0,0 +1,476 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Appending To An Existing File | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="appending-to-an-existing-csv-file">Appending to an Existing CSV File</h1>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var records = new List&lt;Foo&gt;
+ {
+ new Foo { Id = 1, Name = &quot;one&quot; },
+ };
+
+ // Write to a file.
+ using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+ }
+
+ records = new List&lt;Foo&gt;
+ {
+ new Foo { Id = 2, Name = &quot;two&quot; },
+ };
+
+ // Append to the file.
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ // Don't write the header again.
+ HasHeaderRecord = false,
+ };
+ using (var stream = File.Open(&quot;path\\to\\file.csv&quot;, FileMode.Append))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+<h6 id="output">Output</h6>
+<pre><code>Id,Name
+1,one
+2,two
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/writing/index.html b/ThirdParty/CsvHelper-master/docs/examples/writing/index.html
new file mode 100644
index 0000000..efe0007
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/writing/index.html
@@ -0,0 +1,483 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Writing | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="writing">Writing</h1>
+<h2 class="title is-2 has-text-danger">Injection Warning</h2>
+<p>When opening a CSV in an external program, a formula in a field could be ran that contains a vulnerability.
+Read more here: <a href="https://owasp.org/www-community/attacks/CSV_Injection">CSV Injection</a>.
+Due to this issue, there is a setting <code>InjectionOptions</code> that can be configured.</p>
+<p>The list of injection characters to detect are configurable in <code>CsvConfiguration.InjectionCharacters</code>
+and default to <code>=</code>, <code>&#64;</code>, <code>+</code>, <code>-</code>, <code>\t</code>, <code>\r</code>. An injection character can be the first character of a field
+or quoted field. i.e. <code>=foo</code> or <code>&quot;=foo&quot;</code></p>
+<p>The <code>InjectionOptions</code> values are <code>None</code> (default), <code>Escape</code>, <code>Strip</code>, and <code>Exception</code>.</p>
+<h6 id="none">None</h6>
+<p>No injection protection is taken.</p>
+<h6 id="exception">Exception</h6>
+<p>If an injection character is detected, a <code>CsvWriterException</code> is thrown.</p>
+<h6 id="strip">Strip</h6>
+<p>All injection characters at the start of a field will be removed. <code>===foo</code> will be stripped to <code>foo</code>.</p>
+<h6 id="escape">Escape</h6>
+<p>If an injection character is detected, the field will be prepended with the <code>InjectionEscapeCharacter</code>
+that defaults to <code>'</code>. The field will be quoted if it is not already.</p>
+<p><code>=one</code> -&gt; <code>&quot;'=one&quot;</code></p>
+<p><code>&quot;=one&quot;</code> -&gt; <code>&quot;'=one&quot;</code></p>
+<p><code>=one&quot;two</code> -&gt; <code>&quot;'=one&quot;&quot;two&quot;</code></p>
+<p>This option is disabled by default because the primary goal if this library is to read and write CSV
+files. If you are storing user entered data that you haven't sanitized yourself and you're letting
+it be accessed by people that may open in Excel/Sheets/etc, you might consider enabling this feature.
+The <code>InjectionEscapeCharacter</code> is not removed when reading.</p>
+<p>When writing, you can throw an enumerable of class objects, dynamic objects, anonymous type objects, or pretty much
+anything else, and it will get written.</p>
+<table>
+<thead>
+<tr>
+<th>Topics</th>
+<th> </th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td><a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a></td>
+<td></td>
+</tr>
+</tbody>
+</table>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/writing/write-anonymous-type-objects/index.html b/ThirdParty/CsvHelper-master/docs/examples/writing/write-anonymous-type-objects/index.html
new file mode 100644
index 0000000..66741ae
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/writing/write-anonymous-type-objects/index.html
@@ -0,0 +1,450 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Write Anonymous Type Objects | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="write-anonymous-type-objects">Write Anonymous Type Objects</h1>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var records = new List&lt;object&gt;
+ {
+ new { Id = 1, Name = &quot;one&quot; },
+ };
+
+ using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+ }
+}
+</code></pre>
+<h6 id="output">Output</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/writing/write-class-objects/index.html b/ThirdParty/CsvHelper-master/docs/examples/writing/write-class-objects/index.html
new file mode 100644
index 0000000..3306af7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/writing/write-class-objects/index.html
@@ -0,0 +1,456 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Write Class Objects | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="write-class-objects">Write Class Objects</h1>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var records = new List&lt;Foo&gt;
+ {
+ new Foo { Id = 1, Name = &quot;one&quot; },
+ };
+
+ using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+<h6 id="output">Output</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/examples/writing/write-dynamic-objects/index.html b/ThirdParty/CsvHelper-master/docs/examples/writing/write-dynamic-objects/index.html
new file mode 100644
index 0000000..8992dca
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/examples/writing/write-dynamic-objects/index.html
@@ -0,0 +1,454 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Write Dynamic Objects | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/prerequisites">Prerequisites</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/using-and-dispose">Using and Dispose</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/reading-and-writing-files">Reading and Writing Files</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/prerequisites/streams">Streams</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/reading">Reading</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-class-records">Get Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-dynamic-records">Get Dynamic Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/get-anonymous-type-records">Get Anonymous Type Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/enumerate-class-records">Enumerate Class Records</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-by-hand">Reading by Hand</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-data-sets">Reading Multiple Data Sets</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/reading/reading-multiple-record-types">Reading Multiple Record Types</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/writing">Writing</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-class-objects">Write Class Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-dynamic-objects">Write Dynamic Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/write-anonymous-type-objects">Write Anonymous Type Objects</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/writing/appending-to-an-existing-file">Appending to an Existing File</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration">Configuration</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/configuration/class-maps">Class Maps</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-properties">Mapping Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-name">Mapping by Name</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names">Mapping by Alternate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names">Mapping Duplicate Names</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/mapping-by-index">Mapping by Index</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/auto-mapping">Auto Mapping</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/ignoring-properties">Ignoring Properties</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/constant-value">Constant Value</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/type-conversion">Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/inline-type-conversion">Inline Type Conversion</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/optional-maps">Optional Maps</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/class-maps/validation">Validation</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/configuration/attributes">Attributes</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+ <a class="expander"></a>
+
+ <a href="/CsvHelper/examples/type-conversion">Type Conversion</a>
+ </span>
+
+ <ul class="is-hidden">
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/type-converter-options">Type Converter Options</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/type-conversion/custom-type-converter">Custom Type Converters</a>
+ </span>
+
+</li>
+
+</ul>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="/CsvHelper/examples/csvdatareader">CsvDataReader</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="write-dynamic-objects">Write Dynamic Objects</h1>
+<h6 id="example">Example</h6>
+<pre><code class="language-cs">void Main()
+{
+ var records = new List&lt;dynamic&gt;();
+
+ dynamic record = new ExpandoObject();
+ record.Id = 1;
+ record.Name = &quot;one&quot;;
+ records.Add(record);
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ writer.ToString().Dump();
+ }
+}
+</code></pre>
+<h6 id="output">Output</h6>
+<pre><code>Id,Name
+1,one
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/android-icon-144x144.png b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-144x144.png
new file mode 100644
index 0000000..f128b25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-144x144.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/android-icon-192x192.png b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-192x192.png
new file mode 100644
index 0000000..e834438
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-192x192.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/android-icon-36x36.png b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-36x36.png
new file mode 100644
index 0000000..fa2662c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-36x36.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/android-icon-48x48.png b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-48x48.png
new file mode 100644
index 0000000..f6d39e8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-48x48.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/android-icon-72x72.png b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-72x72.png
new file mode 100644
index 0000000..303aa57
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-72x72.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/android-icon-96x96.png b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-96x96.png
new file mode 100644
index 0000000..9b150c2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/android-icon-96x96.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-114x114.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-114x114.png
new file mode 100644
index 0000000..f57ebc1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-114x114.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-120x120.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-120x120.png
new file mode 100644
index 0000000..18f8d49
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-120x120.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-144x144.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-144x144.png
new file mode 100644
index 0000000..f128b25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-144x144.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-152x152.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-152x152.png
new file mode 100644
index 0000000..fe75037
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-152x152.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-180x180.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-180x180.png
new file mode 100644
index 0000000..37794f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-180x180.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-57x57.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-57x57.png
new file mode 100644
index 0000000..a74b379
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-57x57.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-60x60.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-60x60.png
new file mode 100644
index 0000000..4a1156c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-60x60.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-72x72.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-72x72.png
new file mode 100644
index 0000000..303aa57
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-72x72.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-76x76.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-76x76.png
new file mode 100644
index 0000000..2a875f2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-76x76.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-precomposed.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-precomposed.png
new file mode 100644
index 0000000..dab9519
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon-precomposed.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/apple-icon.png b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon.png
new file mode 100644
index 0000000..dab9519
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/apple-icon.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/favicon-16x16.png b/ThirdParty/CsvHelper-master/docs/favicons/favicon-16x16.png
new file mode 100644
index 0000000..dad5a10
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/favicon-16x16.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/favicon-32x32.png b/ThirdParty/CsvHelper-master/docs/favicons/favicon-32x32.png
new file mode 100644
index 0000000..0395d4c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/favicon-32x32.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/favicon-96x96.png b/ThirdParty/CsvHelper-master/docs/favicons/favicon-96x96.png
new file mode 100644
index 0000000..9b150c2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/favicon-96x96.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/favicon.ico b/ThirdParty/CsvHelper-master/docs/favicons/favicon.ico
new file mode 100644
index 0000000..0ca93d0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/favicon.ico
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-144x144.png b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-144x144.png
new file mode 100644
index 0000000..f128b25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-144x144.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-150x150.png b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-150x150.png
new file mode 100644
index 0000000..a4d021a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-150x150.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-310x310.png b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-310x310.png
new file mode 100644
index 0000000..400b60e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-310x310.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-70x70.png b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-70x70.png
new file mode 100644
index 0000000..8030480
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/favicons/ms-icon-70x70.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/docs/getting-started/index.html b/ThirdParty/CsvHelper-master/docs/getting-started/index.html
new file mode 100644
index 0000000..3572457
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/getting-started/index.html
@@ -0,0 +1,372 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Getting Started | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column is-2">
+
+<div id="sidebar" class="sidebar">
+ <ul class="">
+ <li>
+ <span>
+
+ <a href="#installation">Installation</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#cultureinfo">CultureInfo</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#newlines">Newlines</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#reading-a-csv-file">Reading a CSV file</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#writing-a-csv-file">Writing a CSV file</a>
+ </span>
+
+</li>
+
+ <li>
+ <span>
+
+ <a href="#">Back to top</a>
+ </span>
+
+</li>
+
+</ul>
+
+</div>
+
+ </div>
+ <div class="column">
+ <div class="content">
+ <h1 id="getting-started">Getting Started</h1>
+<h2 id="installation">Installation</h2>
+<hr />
+<h3 id="package-manager-console">Package Manager Console</h3>
+<pre><code>PM&gt; Install-Package CsvHelper
+</code></pre>
+<h3 id="net-cli-console">.NET CLI Console</h3>
+<pre><code>&gt; dotnet add package CsvHelper
+</code></pre>
+<h2 id="prerequisites">Prerequisites</h2>
+<p>There is some basic .NET knowledge that is implied when using this documentation. Please look over the prequisites to make sure you have an
+understanding of them. <a href="/CsvHelper/examples/prerequisites">Prerequisites</a></p>
+<h2 id="cultureinfo">CultureInfo</h2>
+<p>CsvHelper requires you to specify the <code>CultureInfo</code> that you want to use. The culture is used to determine the default delimiter, default line ending, and formatting when type converting. You can change the configuration of any of these too if you like. Choose the appropriate culture for your data. <code>InvariantCulture</code> will be the most portable for writing a file and reading it back again, so that will be used in most of the examples.</p>
+<h2 id="newlines">Newlines</h2>
+<p>By default, CsvHelper will follow <a href="https://tools.ietf.org/html/rfc4180#page-2">RFC 4180</a> and use <code>\r\n</code> for writing newlines no matter what operating system
+you are running on. CsvHelper can read <code>\r\n</code>, <code>\r</code>, or <code>\n</code> without any configuration changes. If you want to read or write in a non-standard format, you can
+change the configuration for <code>NewLine</code>.</p>
+<pre><code class="language-cs">var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = Environment.NewLine,
+};
+</code></pre>
+<h2 id="reading-a-csv-file">Reading a CSV File</h2>
+<hr />
+<p>Let's say we have CSV file that looks like this.</p>
+<pre><code>Id,Name
+1,one
+2,two
+</code></pre>
+<p>And a class definition that looks like this.</p>
+<pre><code class="language-cs">public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+<p>If our class property names match our CSV file header names, we can read the file without any configuration.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ var records = csv.GetRecords&lt;Foo&gt;();
+}
+</code></pre>
+<p>The <code>GetRecords&lt;T&gt;</code> method will return an <code>IEnumerable&lt;T&gt;</code> that will <code>yield</code> records.
+What this means is that only a single record is returned at a time as you iterate the records.
+That also means that only a small portion of the file is read into memory. Be careful though.
+If you do anything that executes a LINQ projection, such as calling <code>.ToList()</code>, the entire file
+will be read into memory. <code>CsvReader</code> is forward only, so if you want to run any LINQ queries
+against your data, you'll have to pull the whole file into memory. Just know that is what you're doing.</p>
+<p>Let's say our CSV file names are a little different than our class properties and we don't want to
+make our properties match.</p>
+<pre><code>id,name
+1,one
+2,two
+</code></pre>
+<p>In this case, the names are lower case. We want our property names to be Pascal Case, so we can
+just change how our properties match against the header names.</p>
+<pre><code class="language-cs">var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ PrepareHeaderForMatch = args =&gt; args.Header.ToLower(),
+};
+using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader, config))
+{
+ var records = csv.GetRecords&lt;Foo&gt;();
+}
+</code></pre>
+<p>Using the configuration <code>PrepareHeaderForMatch</code>, we're able to change how the header matching
+is done against the property name. Both the header and the property name are ran through the
+<code>PrepareHeaderForMatch</code> function. When the reader needs to find the property to set for the
+header, they will now match. You can use this function to do other things such as remove
+whitespace or other characters.</p>
+<p>Let's say out CSV file doesn't have a header at all.</p>
+<pre><code>1,one
+2,two
+</code></pre>
+<p>First we need to tell the reader that there is no header record, using configuration.</p>
+<pre><code class="language-cs">var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ HasHeaderRecord = false,
+};
+using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader, config))
+{
+ var records = csv.GetRecords&lt;Foo&gt;();
+}
+</code></pre>
+<p>CsvReader will use the position of the properties in the class as the index position. There is an
+issue with this though. <a href="https://blogs.msdn.microsoft.com/haibo_luo/2006/07/10/member-order-returned-by-getfields-getmethods/">You can't rely on the ordering of class members in .NET</a>.
+We can solve this by mapping the property to a position in the CSV file.</p>
+<p>One way to do this is with attribute mapping.</p>
+<pre><code class="language-cs">public class Foo
+{
+ [Index(0)]
+ public int Id { get; set; }
+
+ [Index(1)]
+ public string Name { get; set; }
+}
+</code></pre>
+<p>The <code>IndexAttribute</code> allows you to specify which position the CSV field is that you want to use
+for the property.</p>
+<p>You can also map by name. Let's use our lower case header example from before and see how we can
+use attributes instead of changing the header matching.</p>
+<pre><code class="language-cs">public class Foo
+{
+ [Name(&quot;id&quot;)]
+ public int Id { get; set; }
+
+ [Name(&quot;name&quot;)]
+ public string Name { get; set; }
+}
+</code></pre>
+<p><a href="/CsvHelper/examples/configuration/attributes">There are many other attributes you can use also.</a></p>
+<p>What if we don't have control over the class we want to map to so we can't add attributes to it?
+In this case, we can use a fluent <code>ClassMap</code> to do the mapping.</p>
+<pre><code class="language-cs">public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Name(&quot;id&quot;);
+ Map(m =&gt; m.Name).Name(&quot;name&quot;);
+ }
+}
+</code></pre>
+<p>To use the mapping, we need to register it in the context.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ csv.Context.RegisterClassMap&lt;FooMap&gt;();
+ var records = csv.GetRecords&lt;Foo&gt;();
+}
+</code></pre>
+<p>Creating a class map is the recommended way of mapping files in CsvHelper because it's a
+lot more powerful.</p>
+<p>You can also read rows by hand.</p>
+<pre><code class="language-cs">using (var reader = new StreamReader(&quot;path\\to\file.csv&quot;))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ csv.Read();
+ csv.ReadHeader();
+ while (csv.Read())
+ {
+ var record = csv.GetRecord&lt;Foo&gt;();
+ // Do something with the record.
+ }
+}
+</code></pre>
+<p><code>Read</code> will advance row. <code>ReadHeader</code> will read the row into CsvHelper as the header values.
+Separating <code>Read</code> and <code>ReadHeader</code> allows you to do other things with the header row before
+moving onto the next row. <code>GetRecord</code> also does not advance the reader to allow you to do
+other things with the row you might need to do. You may need to <code>GetField</code> for a single field
+or maybe call <code>GetRecord</code> multiple times to fill more than one object.</p>
+<h2 id="writing-a-csv-file">Writing a CSV File</h2>
+<p>Now let's look at how we can write CSV files. It's basically the same thing, but in reverse order.</p>
+<p>Let's use the same class definition as before.</p>
+<pre><code class="language-cs">public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+</code></pre>
+<p>And we have a set of records like this.</p>
+<pre><code class="language-cs">var records = new List&lt;Foo&gt;
+{
+ new Foo { Id = 1, Name = &quot;one&quot; },
+ new Foo { Id = 2, Name = &quot;two&quot; },
+};
+</code></pre>
+<p>We can write the records to a file without any configuration.</p>
+<pre><code class="language-cs">using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+{
+ csv.WriteRecords(records);
+}
+</code></pre>
+<p>The <code>WriteRecords</code> method will write all the records to the file. After you are done writing,
+you should call <code>writer.Flush()</code> to ensure that all the data in the writer's internal buffer
+has been flushed to the file. Once a <code>using</code> block has exited, the writer is automatically
+flushed, so we don't have to explicitly do it here. It's recommended to always wrap any
+<code>IDisposable</code> object with <code>using</code> blocks. The object will dispose of itself (and in our case
+flush too) as soon as possible after the <code>using</code> block has exited.</p>
+<p>Remember how we can't rely on property order in .NET? If we are writing a class that has a header,
+it doesn't matter, as long as we are reading using the headers later. If we want to position
+the headers in the CSV file, we need to specify an index to guarantee it's order. It's
+recommended to always set an index when writing.</p>
+<pre><code class="language-cs">public class FooMap : ClassMap&lt;Foo&gt;
+{
+ public FooMap()
+ {
+ Map(m =&gt; m.Id).Index(0).Name(&quot;id&quot;);
+ Map(m =&gt; m.Name).Index(1).Name(&quot;name&quot;);
+ }
+}
+</code></pre>
+<p>You can also write rows by hand.</p>
+<pre><code class="language-cs">using (var writer = new StreamWriter(&quot;path\\to\\file.csv&quot;))
+using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+{
+ csv.WriteHeader&lt;Foo&gt;();
+ csv.NextRecord();
+ foreach (var record in records)
+ {
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ }
+}
+</code></pre>
+<p><code>WriteHeader</code> will not advance you to the next row. Separating <code>NextRecord</code> from <code>WriteHeader</code>
+allows you to write more things in the header if you need to. <code>WriteRecord</code> also will not
+advance you to the next row to give you the ability to write multiple objects or use
+<code>WriteField</code> to write individual fields.</p>
+<br/>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/google6ad86f23ff698b61.html b/ThirdParty/CsvHelper-master/docs/google6ad86f23ff698b61.html
new file mode 100644
index 0000000..a6ad012
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/google6ad86f23ff698b61.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Google6ad86f23ff698b61 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ google-site-verification: google6ad86f23ff698b61.html
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/images/logo.svg b/ThirdParty/CsvHelper-master/docs/images/logo.svg
new file mode 100644
index 0000000..972caa1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/images/logo.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ 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"
+ viewBox="0 0 816 347.11066"
+ height="347.11066"
+ width="816"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ id="clipPath18"
+ clipPathUnits="userSpaceOnUse"><path
+ id="path16"
+ d="M 0,260.333 H 612 V 0 H 0 Z" /></clipPath></defs><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,347.11067)"
+ id="g10"><g
+ id="g12"><g
+ clip-path="url(#clipPath18)"
+ id="g14"><g
+ transform="translate(64.7041,203.8296)"
+ id="g20"><path
+ id="path22"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -15.985 v 10.686 c 0,3.098 -0.169,5.042 -0.514,5.817 -0.337,0.761 -1.096,1.146 -2.257,1.146 -1.317,0 -2.154,-0.464 -2.507,-1.403 -0.355,-0.938 -0.529,-2.961 -0.529,-6.073 V -18.38 c 0,-2.991 0.174,-4.934 0.529,-5.848 0.353,-0.916 1.154,-1.364 2.394,-1.364 1.19,0 1.968,0.448 2.333,1.364 0.366,0.914 0.551,3.055 0.551,6.433 v 7.723 H 0 v -2.392 C 0,-18.823 -0.447,-23.337 -1.346,-26 c -0.897,-2.662 -2.883,-4.997 -5.963,-6.998 -3.074,-2.001 -6.865,-3.006 -11.372,-3.006 -4.68,0 -8.54,0.846 -11.58,2.551 -3.036,1.686 -5.053,4.04 -6.036,7.04 -0.989,3 -1.484,7.511 -1.484,13.536 v 17.96 c 0,4.435 0.155,7.753 0.457,9.964 0.305,2.217 1.209,4.351 2.715,6.403 1.507,2.052 3.594,3.662 6.267,4.842 2.674,1.174 5.74,1.759 9.204,1.759 4.71,0 8.594,-0.903 11.66,-2.719 3.06,-1.83 5.078,-4.095 6.037,-6.811 C -0.482,15.804 0,11.576 0,5.834 Z" /></g><g
+ transform="translate(104.3105,211.9858)"
+ id="g24"><path
+ id="path26"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -14.848 v 4.559 c 0,2.128 -0.191,3.483 -0.568,4.065 -0.381,0.583 -1.01,0.869 -1.899,0.869 -0.96,0 -1.694,-0.395 -2.185,-1.178 -0.492,-0.782 -0.735,-1.978 -0.735,-3.565 0,-2.059 0.275,-3.602 0.827,-4.642 0.53,-1.03 2.037,-2.284 4.52,-3.76 7.117,-4.224 11.596,-7.688 13.444,-10.396 1.85,-2.703 2.777,-7.075 2.777,-13.099 0,-4.381 -0.519,-7.606 -1.538,-9.678 -1.027,-2.08 -3.008,-3.817 -5.949,-5.226 -2.931,-1.403 -6.351,-2.109 -10.251,-2.109 -4.279,0 -7.926,0.814 -10.957,2.436 -3.022,1.617 -4.999,3.681 -5.938,6.184 -0.938,2.507 -1.406,6.064 -1.406,10.67 v 4.021 h 14.845 v -7.476 c 0,-2.3 0.21,-3.779 0.63,-4.441 0.417,-0.655 1.154,-0.983 2.218,-0.983 1.066,0 1.853,0.417 2.377,1.25 0.518,0.834 0.773,2.075 0.773,3.716 0,3.627 -0.49,5.991 -1.475,7.101 -1.013,1.119 -3.51,2.977 -7.485,5.586 -3.97,2.634 -6.609,4.542 -7.899,5.738 -1.29,1.19 -2.355,2.832 -3.208,4.931 -0.847,2.103 -1.271,4.788 -1.271,8.055 0,4.708 0.603,8.147 1.803,10.326 1.204,2.179 3.15,3.88 5.832,5.102 2.68,1.228 5.923,1.839 9.723,1.839 4.15,0 7.686,-0.668 10.609,-2.007 2.927,-1.34 4.859,-3.032 5.812,-5.071 C -0.477,10.781 0,7.32 0,2.437 Z" /></g><g
+ transform="translate(148.6602,230.6021)"
+ id="g28"><path
+ id="path30"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -8.131,-61.479 H -32.416 L -41.653,0 h 16.856 c 1.963,-16.943 3.361,-31.268 4.203,-42.99 0.825,11.844 1.7,22.37 2.622,31.551 L -16.856,0 Z" /></g><g
+ transform="translate(161.9082,247.7832)"
+ id="g32"><path
+ id="path34"
+ style="fill:#00a650;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -33.23 c 0,-41.568 -4.923,-75.663 -14.769,-102.286 -9.842,-26.623 -26.894,-49.222 -51.141,-67.825 -24.25,-18.597 -51.687,-30.99 -82.319,-37.193 v 63.45 c 21.879,12.394 34.279,28.993 37.196,49.772 h -37.196 V 0 Z" /></g><g
+ transform="translate(64.7041,192.9053)"
+ id="g36"><path
+ id="path38"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -15.985 v 10.689 c 0,3.098 -0.169,5.039 -0.514,5.815 -0.337,0.764 -1.096,1.148 -2.257,1.148 -1.317,0 -2.154,-0.461 -2.507,-1.402 -0.355,-0.939 -0.529,-2.965 -0.529,-6.073 v -28.554 c 0,-2.987 0.174,-4.934 0.529,-5.844 0.353,-0.923 1.154,-1.368 2.394,-1.368 1.19,0 1.968,0.445 2.333,1.368 0.366,0.91 0.551,3.054 0.551,6.426 v 7.73 H 0 v -2.392 c 0,-6.362 -0.447,-10.876 -1.346,-13.539 -0.897,-2.666 -2.883,-4.997 -5.963,-6.998 -3.074,-2.005 -6.865,-3.006 -11.372,-3.006 -4.68,0 -8.54,0.846 -11.58,2.548 -3.036,1.689 -5.053,4.046 -6.036,7.043 -0.989,2.996 -1.484,7.513 -1.484,13.538 V 5.084 c 0,4.437 0.155,7.755 0.457,9.969 0.305,2.215 1.209,4.352 2.715,6.401 1.507,2.052 3.594,3.661 6.267,4.841 2.674,1.178 5.74,1.763 9.204,1.763 4.71,0 8.594,-0.907 11.66,-2.723 3.06,-1.829 5.078,-4.094 6.037,-6.814 C -0.482,15.811 0,11.58 0,5.841 Z" /></g><g
+ transform="translate(104.3105,201.0684)"
+ id="g40"><path
+ id="path42"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -14.848 v 4.556 c 0,2.128 -0.191,3.48 -0.568,4.065 -0.381,0.582 -1.01,0.868 -1.899,0.868 -0.96,0 -1.694,-0.391 -2.185,-1.174 -0.492,-0.782 -0.735,-1.978 -0.735,-3.569 0,-2.055 0.275,-3.601 0.827,-4.641 0.53,-1.034 2.037,-2.287 4.52,-3.76 7.117,-4.221 11.596,-7.689 13.444,-10.396 1.85,-2.707 2.777,-7.078 2.777,-13.103 0,-4.377 -0.519,-7.603 -1.538,-9.674 -1.027,-2.08 -3.008,-3.82 -5.949,-5.227 -2.931,-1.403 -6.351,-2.109 -10.251,-2.109 -4.279,0 -7.926,0.811 -10.957,2.434 -3.022,1.616 -4.999,3.684 -5.938,6.19 -0.938,2.507 -1.406,6.058 -1.406,10.667 v 4.024 h 14.845 v -7.479 c 0,-2.3 0.21,-3.779 0.63,-4.444 0.417,-0.655 1.154,-0.98 2.218,-0.98 1.066,0 1.853,0.42 2.377,1.253 0.518,0.834 0.773,2.068 0.773,3.716 0,3.623 -0.49,5.987 -1.475,7.1 -1.013,1.117 -3.51,2.975 -7.485,5.58 -3.97,2.634 -6.609,4.543 -7.899,5.739 -1.29,1.19 -2.355,2.838 -3.208,4.937 -0.847,2.099 -1.271,4.784 -1.271,8.052 0,4.704 0.603,8.146 1.803,10.325 1.204,2.179 3.15,3.881 5.832,5.106 2.68,1.221 5.923,1.839 9.723,1.839 4.15,0 7.686,-0.671 10.609,-2.011 2.927,-1.339 4.859,-3.034 5.812,-5.071 C -0.477,10.778 0,7.316 0,2.434 Z" /></g><g
+ transform="translate(148.6602,219.6777)"
+ id="g44"><path
+ id="path46"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -8.131,-61.479 H -32.416 L -41.653,0 h 16.856 c 1.963,-16.936 3.361,-31.264 4.203,-42.983 0.825,11.84 1.7,22.363 2.622,31.55 L -16.856,0 Z" /></g><g
+ transform="translate(203.7622,247.7896)"
+ id="g48"><path
+ id="path50"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -28.379 c 2.699,2.498 5.621,4.378 8.769,5.618 3.14,1.26 6.503,1.877 10.085,1.877 5.509,0 10.198,-1.4 14.063,-4.205 3.871,-2.806 6.231,-6.041 7.092,-9.703 0.857,-3.658 1.285,-10.345 1.285,-20.06 v -71.293 H 9.815 v 72.772 c 0,6.022 -0.295,9.896 -0.894,11.614 -0.597,1.705 -1.932,2.571 -4.011,2.571 -1.923,0 -3.222,-0.885 -3.895,-2.653 C 0.339,-43.604 0,-47.116 0,-52.355 v -73.79 H -31.476 V 0 Z" /></g><g
+ transform="translate(295.6255,188.3408)"
+ id="g52"><path
+ id="path54"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v 7.555 c 0,5.357 -0.283,8.808 -0.857,10.371 -0.57,1.552 -1.741,2.335 -3.511,2.335 -2.174,0 -3.531,-0.662 -4.048,-1.998 C -8.935,16.939 -9.195,13.37 -9.195,7.555 V 0 Z m 31.555,-16.832 h -40.75 v -22.356 c 0,-4.68 0.337,-7.699 1.011,-9.044 0.676,-1.346 1.973,-2.02 3.899,-2.02 2.389,0 3.983,0.897 4.789,2.691 0.807,1.788 1.21,5.255 1.21,10.393 v 13.637 h 29.841 v -7.635 c 0,-6.387 -0.397,-11.299 -1.207,-14.722 -0.811,-3.436 -2.688,-7.094 -5.653,-10.987 -2.955,-3.897 -6.707,-6.824 -11.258,-8.774 -4.546,-1.937 -10.247,-2.92 -17.104,-2.92 -6.646,0 -12.514,0.961 -17.604,2.885 -5.091,1.921 -9.055,4.565 -11.881,7.912 -2.833,3.346 -4.796,7.043 -5.889,11.064 -1.089,4.026 -1.633,9.874 -1.633,17.565 V 1.015 c 0,9.034 1.223,16.16 3.663,21.389 2.442,5.218 6.437,9.213 12.001,11.996 5.559,2.778 11.945,4.164 19.164,4.164 8.831,0 16.115,-1.672 21.856,-5.019 5.74,-3.353 9.763,-7.794 12.08,-13.323 2.312,-5.541 3.465,-13.316 3.465,-23.34 z" /></g><path
+ id="path56"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 369.878,121.645 H 337.467 V 247.79 h 32.411 z" /><g
+ transform="translate(422.1592,194.9668)"
+ id="g58"><path
+ id="path60"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,6.381 -0.233,10.256 -0.701,11.605 -0.466,1.352 -1.766,2.03 -3.899,2.03 -2.074,0 -3.413,-0.783 -4.011,-2.335 C -9.212,9.737 -9.505,5.971 -9.505,0 v -42.862 c 0,-6.229 0.311,-10.123 0.934,-11.685 0.622,-1.555 1.972,-2.331 4.05,-2.331 2.026,0 3.286,0.709 3.779,2.141 0.494,1.422 0.742,4.892 0.742,10.402 z m -8.964,30.075 -0.541,-9.143 c 2.801,3.696 5.893,6.458 9.272,8.284 3.378,1.819 7.063,2.722 11.06,2.722 4.882,0 9.108,-1.31 12.658,-3.931 3.563,-2.628 5.785,-5.65 6.664,-9.076 0.886,-3.432 1.327,-9.247 1.327,-17.455 v -43.553 c 0,-9.4 -0.558,-16.093 -1.676,-20.057 -1.113,-3.982 -3.4,-7.151 -6.855,-9.514 -3.453,-2.364 -7.625,-3.547 -12.506,-3.547 -3.895,0 -7.509,0.919 -10.827,2.736 -3.324,1.813 -6.365,4.523 -9.117,8.118 V -88.047 H -40.983 V 30.075 Z" /></g><g
+ transform="translate(503.7344,188.3408)"
+ id="g62"><path
+ id="path64"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v 7.555 c 0,5.357 -0.283,8.808 -0.857,10.371 -0.575,1.552 -1.737,2.335 -3.504,2.335 -2.182,0 -3.531,-0.662 -4.051,-1.998 C -8.936,16.939 -9.194,13.37 -9.194,7.555 V 0 Z m 31.556,-16.832 h -40.75 v -22.356 c 0,-4.68 0.337,-7.699 1.012,-9.044 0.678,-1.346 1.973,-2.02 3.896,-2.02 2.393,0 3.992,0.897 4.796,2.691 0.804,1.788 1.207,5.255 1.207,10.393 v 13.637 h 29.839 v -7.635 c 0,-6.387 -0.408,-11.299 -1.207,-14.722 -0.805,-3.436 -2.692,-7.094 -5.654,-10.987 -2.96,-3.897 -6.712,-6.824 -11.252,-8.774 -4.551,-1.937 -10.252,-2.92 -17.101,-2.92 -6.649,0 -12.52,0.961 -17.613,2.885 -5.09,1.921 -9.054,4.565 -11.884,7.912 -2.826,3.346 -4.789,7.043 -5.879,11.064 -1.089,4.026 -1.638,9.874 -1.638,17.565 V 1.015 c 0,9.034 1.215,16.16 3.664,21.389 2.443,5.218 6.441,9.213 11.998,11.996 5.558,2.778 11.948,4.164 19.168,4.164 8.829,0 16.114,-1.672 21.853,-5.019 5.745,-3.353 9.769,-7.794 12.076,-13.323 2.313,-5.541 3.469,-13.316 3.469,-23.34 z" /></g><g
+ transform="translate(577.0547,225.0415)"
+ id="g66"><path
+ id="path68"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -1.247,-13.603 C 3.324,-3.862 9.944,1.294 18.623,1.864 v -36.386 c -5.771,0 -10.002,-0.776 -12.703,-2.335 C 3.218,-38.416 1.555,-40.579 0.933,-43.365 0.309,-46.139 0,-52.543 0,-62.567 v -40.829 H -31.483 V 0 Z" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/docs/index.html b/ThirdParty/CsvHelper-master/docs/index.html
new file mode 100644
index 0000000..8c18cf2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/index.html
@@ -0,0 +1,427 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>A .NET library for reading and writing CSV files. Extremely fast, flexible, and easy to use. | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="home">
+ <div class="columns">
+ <div class="column">
+ <h1 class="title is-1">CsvHelper</h1>
+ <h2 class="subtitle">A .NET library for reading and writing CSV files. Extremely fast, flexible, and easy to use.</h2>
+
+ <div class="columns is-variable is-2">
+ <div class="column is-narrow">
+ <a class="button is-large is-success" href="https://www.nuget.org/packages/CsvHelper/">
+ <span class="icon">
+ <i class="fas fa-download"></i>
+ </span>
+ <span>Download</span>
+ </a>
+ </div>
+ <div class="column is-narrow">
+ <a class="button is-large is-link" href="/CsvHelper/getting-started">
+ <span class="icon">
+ <i class="fas fa-play-circle"></i>
+ </span>
+ <span>Get Started</span>
+ </a>
+ </div>
+ </div>
+
+ </div>
+ <div class="column">
+ <img src="/CsvHelper/images/logo.svg" />
+ </div>
+ </div>
+
+ <h3 class="title is-3">Features</h3>
+ <hr />
+
+ <div class="columns is-multiline">
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-bolt"></i>
+ </span>
+ <span>Fast</span>
+ </h4>
+ <p class="subtitle is-6">Compiles classes on the fly for extremely fast performance.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-sync-alt"></i>
+ </span>
+ <span>Flexible</span>
+ </h4>
+ <p class="subtitle is-6">Conservative when writing, liberal when reading.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-thumbs-up"></i>
+ </span>
+ <span>Easy to Use</span>
+ </h4>
+ <p class="subtitle is-6">
+ Reading and writing is as simple as GetRecords&lt;T&gt;() and WriteRecords(records).
+ No configuration required.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-cogs"></i>
+ </span>
+ <span>Highly Configurable</span>
+ </h4>
+ <p class="subtitle is-6">Feature rich mapping and attribute systems to configure any type of CSV file to any type of class.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-clipboard-check"></i>
+ </span>
+ <span><a href="https://tools.ietf.org/html/rfc4180" target="_blank">RFC 4180</a> Compliant</span>
+ </h4>
+ <p class="subtitle is-6">Adheres to the RFC 4180 standard to ensure compatibility across systems.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-linux"></i>
+ </span>
+ <span>Linux Mode</span>
+ </h4>
+ <p class="subtitle is-6">
+ Mode for common Linux/SerDe files where an escape character is used instead of RFC 4180's field quoting.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-file-excel"></i>
+ </span>
+ <span>Graceful Fallback</span>
+ </h4>
+ <p class="subtitle is-6">When non-standard files are read, fallback will match MS Excel parsing.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-memory"></i>
+ </span>
+ <span>Low Memory Usage</span>
+ </h4>
+ <p class="subtitle is-6">Reading records will yield results so only one record is in memory at a time.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-database"></i>
+ </span>
+ <span>Field Caching</span>
+ </h4>
+ <p class="subtitle is-6">
+ Option to use field caching when there is repeated data in a CSV file. This will reduce memory
+ and speed up parsing time.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-apple"></i>
+ </span>
+ <span>Run Anywhere</span>
+ </h4>
+ <p class="subtitle is-6">
+ CsvHelper is built on .NET Standard 2.0 which allows it to run
+ <a href="https://docs.microsoft.com/en-us/dotnet/standard/net-standard" target="_blank">almost everywhere</a>.
+ Older versions of .NET are possible if needed.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ <span>Open Source</span>
+ </h4>
+ <p class="subtitle is-6">
+ Many contributors have helped make CsvHelper the great library it is today.
+ Completely free for commercial use. Dual licensed under
+ <a href="https://opensource.org/licenses/MS-PL" target="_blank">MS-PL</a> and
+ <a href="https://opensource.org/licenses/Apache-2.0" target="_blank">Apache 2</a>.
+ </p>
+ </div>
+ </div>
+
+ <br />
+
+ <h3 class="title is-3">Help</h3>
+ <hr />
+
+ <div class="columns is-multiline">
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-stack-overflow"></i>
+ </span>
+ <span>Stack Overflow</span>
+ </h4>
+ <p class="subtitle is-6">
+ <a href="https://stackoverflow.com/questions/tagged/csvhelper">Stack Overflow</a>
+ has millions of users in its community just waiting to answer your questions.
+ There is only one of me and I'm pretty busy.
+ <span class="icon">
+ <i class="fas fa-grin-squint-tears"></i>
+ </span>
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-book"></i>
+ </span>
+ <span>Documentation</span>
+ </h4>
+ <p class="subtitle is-6">
+ Learn how to use CsvHelper using the <a href="/CsvHelper/api">API reference</a>
+ or check out some <a href="/CsvHelper/examples">examples</a>.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-bug"></i>
+ </span>
+ <span>Features Requests and Bugs</span>
+ </h4>
+ <p class="subtitle is-6">
+ If you have a feature request or have found a bug, you can
+ <a href="https://github.com/joshclose/csvhelper/issues" target="_blank">log an issue</a>.
+ Please use
+ <a href="https://stackoverflow.com/questions/tagged/csvhelper" target="_blank" rel="nofollow">Stack&nbsp;Overflow</a>
+ if you have a question.
+ </p>
+ </div>
+ </div>
+
+ <br />
+
+ <h3 class="title is-3">License</h3>
+ <hr />
+
+ <p>Completely free for commercial use. Dual licensed. Choose which ever license suits your needs.</p>
+ <p><a href="https://opensource.org/licenses/MS-PL" target="_blank" rel="nofollow">Microsoft Public License (MS-PL)</a></p>
+ <p><a href="https://opensource.org/licenses/Apache-2.0" target="_blank" rel="nofollow">Apache License, Version 2.0</a></p>
+
+ <br /><br />
+
+ <h3 class="title is-3">Contributions</h3>
+ <hr />
+
+ <div class="content">
+ <p>Want to contribute? Great! Here are a few guidelines.</p>
+ <ol>
+ <li>
+ If you want to do a feature, post an issue about the feature first. Some features are intentionally left out,
+ some features may already be in the works, or I may have some advice on how I think it should be done. I would
+ feel bad if time was spent on some code that won't be used.
+ </li>
+ <li>
+ If you want to do a bug fix, it might not be a bad idea to post about it too. I've had the same bug fixed by
+ multiple people at the same time before.
+ </li>
+ <li>
+ All code should have a unit test. If you make a feature, there should be significant tests around the feature.
+ If you do a bug fix, there should be a test specific to that bug so it doesn't happen again.
+ </li>
+ <li>
+ Pull requests should have a single commit. If you have multiple commits, squash them into a single commit before
+ requesting a pull.
+ </li>
+ <li>
+ When in Rome: Try and follow the code styling already in place. I use default Visual Studio Text Editor settings
+ but change tabs to Keep tabs.
+ </li>
+ </ol>
+ </div>
+
+ <br />
+
+ <h3 class="title is-3">Contributors</h3>
+ <hr />
+
+ <a href="https://github.com/JoshClose/CsvHelper/graphs/contributors">
+ <img src="https://camo.githubusercontent.com/be8184ec3d8d1a25fbf40e461eb193d178fb8e5a/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f63737668656c7065722f636f6e7472696275746f72732e7376673f77696474683d38393026627574746f6e3d66616c7365" data-canonical-src="https://opencollective.com/csvhelper/contributors.svg?width=890&amp;button=false" style="max-width: 100%" />
+ </a>
+
+ <br /><br />
+
+ <h3 class="title is-3">Donations</h3>
+ <hr />
+
+ <div class="columns is-multiline">
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-paypal"></i>
+ </span>
+ <span>One Time Donation</span>
+ </h4>
+ <p class="subtitle is-6">
+ You can do a one time donation through
+ <a href="https://www.paypal.me/closejosh" target="_blank" rel="nofollow">Paypal</a>.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-osi"></i>
+ </span>
+ <span>Recurring Donations</span>
+ </h4>
+ <p class="subtitle is-6">
+ You can do recurring donations through
+ <a href="https://opencollective.com/csvhelper" target="_blank" rel="nofollow">Open Collective</a>.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-amazon"></i>
+ </span>
+ <span>Wish List</span>
+ </h4>
+ <p class="subtitle is-6">
+ If you want to do something a little more fun, you can pick something
+ from my <a href="http://a.co/7EwAZXU" target="_blank" rel="nofollow">Amazon wish list</a>. This
+ obviously doesn't go directly towards building software, but does help
+ keep me sane when I'm not.
+ </p>
+ </div>
+ </div>
+
+ <h3 class="title is-3">Backers</h3>
+ <hr />
+
+ <a href="https://opencollective.com/csvhelper#backers" target="_blank" rel="nofollow">
+ <img src="https://camo.githubusercontent.com/47a6bf22fd6cbdd06e076c8710fcfe422e333e86/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f63737668656c7065722f6261636b6572732e7376673f77696474683d383930" data-canonical-src="https://opencollective.com/csvhelper/backers.svg?width=890" style={{ maxWidth: "100%" }} />
+ </a>
+
+ <h3 class="title is-3">Sponsors</h3>
+ <hr />
+
+ <a href="https://opencollective.com/csvhelper/sponsor/0/website" target="_blank" rel="nofollow">
+ <img src="https://camo.githubusercontent.com/8c4b18a584bc3d249062d169f460ee2d3b8f7373/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f63737668656c7065722f73706f6e736f722f302f6176617461722e737667" data-canonical-src="https://opencollective.com/csvhelper/sponsor/0/avatar.svg" style={{ maxWidth: "100%" }} />
+ </a>
+</div>
+
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/manifest.json b/ThirdParty/CsvHelper-master/docs/manifest.json
new file mode 100644
index 0000000..8d36cc9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "App",
+ "icons": [
+ {
+ "src": "\/android-icon-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": "0.75"
+ },
+ {
+ "src": "\/android-icon-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": "1.0"
+ },
+ {
+ "src": "\/android-icon-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": "1.5"
+ },
+ {
+ "src": "\/android-icon-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": "2.0"
+ },
+ {
+ "src": "\/android-icon-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ },
+ {
+ "src": "\/android-icon-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": "4.0"
+ }
+ ]
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/docs/migration/index.html b/ThirdParty/CsvHelper-master/docs/migration/index.html
new file mode 100644
index 0000000..7b1e1f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/index.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>Migration | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migration">Migration</h1>
+<p>Migration steps for major version bumps.</p>
+<ul>
+<li><a href="/CsvHelper/migration/v30">29 to 30</a></li>
+<li><a href="/CsvHelper/migration/v29">28 to 29</a></li>
+<li><a href="/CsvHelper/migration/v28">27 to 28</a></li>
+<li><a href="/CsvHelper/migration/v27">26 to 27</a></li>
+<li><a href="/CsvHelper/migration/v26">25 to 26</a></li>
+<li><a href="/CsvHelper/migration/v25">24 to 25</a></li>
+<li><a href="/CsvHelper/migration/v24">23 to 24</a></li>
+<li><a href="/CsvHelper/migration/v23">22 to 23</a></li>
+<li><a href="/CsvHelper/migration/v22">21 to 22</a></li>
+<li><a href="/CsvHelper/migration/v21">20 to 21</a></li>
+<li><a href="/CsvHelper/migration/v20">19 to 20</a></li>
+<li><a href="/CsvHelper/migration/v19">18 to 19</a></li>
+<li><a href="/CsvHelper/migration/v18">17 to 18</a></li>
+<li><a href="/CsvHelper/migration/v17">16 to 17</a></li>
+<li><a href="/CsvHelper/migration/v16">15 to 16</a></li>
+<li><a href="/CsvHelper/migration/v15">14 to 15</a></li>
+<li><a href="/CsvHelper/migration/v14">13 to 14</a></li>
+<li><a href="/CsvHelper/migration/v13">12 to 13</a></li>
+<li><a href="/CsvHelper/migration/v12">11 to 12</a></li>
+<li><a href="/CsvHelper/migration/v11">10 to 11</a></li>
+<li><a href="/CsvHelper/migration/v10">9 to 10</a></li>
+<li><a href="/CsvHelper/migration/v9">8 to 9</a></li>
+<li><a href="/CsvHelper/migration/v8">7 to 8</a></li>
+<li><a href="/CsvHelper/migration/v7">6 to 7</a></li>
+<li><a href="/CsvHelper/migration/v6">5 to 6</a></li>
+<li><a href="/CsvHelper/migration/v5">4 to 5</a></li>
+<li><a href="/CsvHelper/migration/v4">3 to 4</a></li>
+<li><a href="/CsvHelper/migration/v3">2 to 3</a></li>
+<li><a href="/CsvHelper/migration/v2">1 to 2</a></li>
+</ul>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v10/index.html b/ThirdParty/CsvHelper-master/docs/migration/v10/index.html
new file mode 100644
index 0000000..29081e4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v10/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V10 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v11/index.html b/ThirdParty/CsvHelper-master/docs/migration/v11/index.html
new file mode 100644
index 0000000..0f5531c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v11/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V11 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v12/index.html b/ThirdParty/CsvHelper-master/docs/migration/v12/index.html
new file mode 100644
index 0000000..b0ab9fe
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v12/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V12 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v13/index.html b/ThirdParty/CsvHelper-master/docs/migration/v13/index.html
new file mode 100644
index 0000000..a8079e9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v13/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V13 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v14/index.html b/ThirdParty/CsvHelper-master/docs/migration/v14/index.html
new file mode 100644
index 0000000..ad7902e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v14/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V14 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v15/index.html b/ThirdParty/CsvHelper-master/docs/migration/v15/index.html
new file mode 100644
index 0000000..7676fb6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v15/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V15 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v16/index.html b/ThirdParty/CsvHelper-master/docs/migration/v16/index.html
new file mode 100644
index 0000000..0328fc5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v16/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V16 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v17/index.html b/ThirdParty/CsvHelper-master/docs/migration/v17/index.html
new file mode 100644
index 0000000..137680f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v17/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V17 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v18/index.html b/ThirdParty/CsvHelper-master/docs/migration/v18/index.html
new file mode 100644
index 0000000..2a04ebf
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v18/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V18 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v19/index.html b/ThirdParty/CsvHelper-master/docs/migration/v19/index.html
new file mode 100644
index 0000000..6821464
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v19/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V19 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v2/index.html b/ThirdParty/CsvHelper-master/docs/migration/v2/index.html
new file mode 100644
index 0000000..6f50834
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v2/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V2 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v20/index.html b/ThirdParty/CsvHelper-master/docs/migration/v20/index.html
new file mode 100644
index 0000000..b797d5f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v20/index.html
@@ -0,0 +1,344 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V20 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-19-to-20">Migrating from version 19 to 20</h1>
+<h2 id="convertusing">ConvertUsing</h2>
+<p><code>ConvertUsing</code> was renamed to <code>Convert</code>.</p>
+<pre><code class="language-cs">// v19
+Map(m =&gt; m.Property).ConvertUsing(row =&gt; row.GetField&lt;int&gt;(0) + row.GetField&lt;int&gt;(1));
+
+// v20
+Map(m =&gt; m.Property).Convert(row =&gt; row.GetField&lt;int&gt;(0) + row.GetField&lt;int&gt;(1));
+</code></pre>
+<h2 id="csvconfiguration">CsvConfiguration</h2>
+<p>All properties changed from <code>get; set;</code> to <code>get; init;</code>.</p>
+<pre><code class="language-cs">// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = &quot;;&quot;;
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = &quot;;&quot;,
+}
+</code></pre>
+<p><code>CsvConfiguration</code> changed from a <code>class</code> to a <code>record</code>.</p>
+<pre><code class="language-cs">// v19
+class MyConfig : CsvConfiguration {}
+
+// v20
+record MyConfig : CsvConfiguration {}
+</code></pre>
+<h3 id="shouldquote">ShouldQuote</h3>
+<p><code>ShouldQuote</code> now takes in <code>IWriterRow</code> instead of <code>CsvContext</code>.</p>
+<pre><code class="language-cs">// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, row) =&gt; true,
+};
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, context) =&gt; true,
+};
+</code></pre>
+<h3 id="newline">NewLine</h3>
+<p>Changed from <code>enum NewLines</code> to <code>char?</code>.</p>
+<pre><code class="language-cs">// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = NewLines.LF,
+};
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = '\n',
+};
+</code></pre>
+<h3 id="newlinestring">NewLineString</h3>
+<p>This was removed. Any code referencing this should be deleted.</p>
+<h3 id="registerclassmap">RegisterClassMap</h3>
+<p>This moved to <code>CsvContext</code>.</p>
+<pre><code class="language-cs">// v19
+csv.Configuration.RegisterClassMap&lt;MyMap&gt;();
+
+// v20
+csv.Context.RegisterClassMap&lt;MyMap&gt;();
+</code></pre>
+<h3 id="unregisterclassmap">UnregisterClassMap</h3>
+<p>This moved to <code>CsvContext</code>.</p>
+<pre><code class="language-cs">// v19
+csv.Configuration.UnregisterClassMap&lt;MyMap&gt;();
+
+// v20
+csv.Context.UnregisterClassMap&lt;MyMap&gt;();
+</code></pre>
+<h3 id="automap">AutoMap</h3>
+<p>This moved to <code>CsvContext</code>.</p>
+<pre><code class="language-cs">// v19
+csv.Configuration.AutoMap&lt;MyType&gt;();
+
+// v20
+csv.Context.AutoMap&lt;MyType&gt;();
+</code></pre>
+<h2 id="iparserconfiguration">IParserConfiguration</h2>
+<p>All setters removed.</p>
+<pre><code class="language-cs">// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = &quot;;&quot;;
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = &quot;;&quot;,
+};
+</code></pre>
+<ul>
+<li>Added <code>bool CacheFields</code>.</li>
+<li>Added <code>bool LeaveOpen</code>.</li>
+<li>Added <code>char? NewLine</code>.</li>
+<li>Added <code>ParserMode Mode</code>.</li>
+<li>Added <code>char[] WhiteSpaceChars</code>.</li>
+<li>Removed <code>bool IgnoreQuotes</code>.</li>
+</ul>
+<p>Any classes that implement <code>IParserConfiguration</code> will need these changes.</p>
+<h2 id="ireaderconfiguration">IReaderConfiguration</h2>
+<p>All setters removed.</p>
+<pre><code class="language-cs">// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = &quot;;&quot;;
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = &quot;;&quot;,
+};
+</code></pre>
+<ul>
+<li>Removed <code>TypeConverterOptionsCache</code>.</li>
+<li>Removed <code>TypeConverterCache</code>.</li>
+<li>Removed <code>Maps</code>.</li>
+<li>Removed <code>RegisterClassMap</code>.</li>
+<li>Removed <code>UnregisterClassMap</code>.</li>
+<li>Removed <code>AutoMap</code>.</li>
+</ul>
+<p>Any classes that implement <code>IReaderConfiguration</code> will need these changes.</p>
+<h2 id="iserializerconfiguration">ISerializerConfiguration</h2>
+<p>This interface was removed and it's properties were added to <code>IWriteConfiguration</code>.</p>
+<pre><code class="language-cs">// v19
+class MyConfig : ISerializerConfiguration {}
+
+// v20
+class MyConfig : IWriterConfiguration {}
+</code></pre>
+<h2 id="iwriterconfiguration">IWriterConfiguration</h2>
+<p>All setters removed.</p>
+<pre><code class="language-cs">// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = &quot;;&quot;;
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = &quot;;&quot;,
+};
+</code></pre>
+<ul>
+<li>Removed <code>QuoteString</code>.</li>
+<li>Removed <code>TypeConverterCache</code>.</li>
+<li>Removed <code>MemberTypes</code>.</li>
+<li>Removed <code>Maps</code>.</li>
+<li>Removed <code>RegisterClassMap</code>.</li>
+<li>Removed <code>UnregisterClassMap</code>.</li>
+<li>Removed <code>AutoMap</code>.</li>
+</ul>
+<p>Any classes that implement <code>IWriterConfiguration</code> will need these changes.</p>
+<h2 id="membermap">MemberMap</h2>
+<p><code>ConvertUsing</code> renamed to <code>Convert</code>.</p>
+<pre><code class="language-cs">// v19
+Map(m =&gt; m.Property).ConvertUsing(row =&gt; row.Get(0));
+Map(m =&gt; m.Property).ConvertUsing(value =&gt; value?.ToString() ?? string.Empty);
+
+// v20
+Map(m =&gt; m.Property).Convert(row =&gt; row.Get(0));
+Map(m =&gt; m.Property).Convert(value =&gt; value?.ToString() ?? string.Empty);
+</code></pre>
+<h2 id="csvparser">CsvParser</h2>
+<p><code>string[] Read()</code> changed to <code>bool Read()</code>.</p>
+<pre><code class="language-cs">// v19
+string[] record;
+while ((record = parser.Read()) != null)
+{
+}
+
+// v20
+while (parser.Read())
+{
+ // Only get fields you need.
+ var field1 = parser[0];
+ var field2 = parser[1];
+
+ // Get all fields.
+ var record = parser.Record;
+}
+</code></pre>
+<p>Constructor paramter <code>IFieldReader fieldReader</code> removed from all constructors.</p>
+<pre><code class="language-cs">// v19
+var parser = new CsvParser(fieldReader);
+
+// v20
+var parser = new CsvParser();
+</code></pre>
+<h2 id="csvserializer">CsvSerializer</h2>
+<p>Removed. Functionality moved into <code>CsvWriter</code>.</p>
+<h2 id="ifieldreader">IFieldReader</h2>
+<p>Removed. Functionality moved into <code>CsvParser</code>.</p>
+<h2 id="iparser">IParser</h2>
+<ul>
+<li>Added <code>long ByteCount</code>.</li>
+<li>Added <code>long CharCount</code>.</li>
+<li>Added <code>int Count</code>.</li>
+<li>Added <code>string this[int index]</code>.</li>
+<li>Added <code>string[] Record</code>.</li>
+<li>Added <code>string RawRecord</code>.</li>
+<li>Added <code>int Row</code>.</li>
+<li>Added <code>int RawRow</code>.</li>
+<li>Changed <code>string[] Read</code> to <code>bool Read</code>.</li>
+<li>Changed <code>Task&lt;string[]&gt; ReadAsync</code> to <code>Task&lt;bool&gt; ReadAsync</code>.</li>
+</ul>
+<p>Any classes that implement <code>IParser</code> will need these changes.</p>
+<h2 id="ireader">IReader</h2>
+<ul>
+<li>Removed <code>ICsvParser Parser</code>.</li>
+</ul>
+<p>Any classes that implement <code>IReader</code> will need these changes.</p>
+<h2 id="ireaderrow">IReaderRow</h2>
+<ul>
+<li>Added <code>int ColumnCount</code>.</li>
+<li>Added <code>int CurrentIndex</code>.</li>
+<li>Added <code>string[] HeaderRecord</code>.</li>
+<li>Added <code>IParser Parser</code>.</li>
+</ul>
+<p>Any classes that implement <code>IReaderRow</code> will need these changes.</p>
+<h2 id="iserializer">ISerializer</h2>
+<p>Removed. Functionality moved into <code>IWriter</code>.</p>
+<h2 id="iwriterrow">IWriterRow</h2>
+<ul>
+<li>Added <code>string[] HeaderRecord</code>.</li>
+<li>Added <code>int Row</code>.</li>
+<li>Added <code>int Index</code>.</li>
+</ul>
+<h2 id="recordbuilder">RecordBuilder</h2>
+<p>Removed. Functionality moved into <code>CsvWriter</code>.</p>
+<h2 id="caches">Caches</h2>
+<p><code>enum Caches</code> was removed. Modifying internal caches is not supported anymore.
+Any code referencing this should be removed.</p>
+<h2 id="readingcontextwritingcontext">ReadingContext/WritingContext</h2>
+<p><code>ReadingContext</code> and <code>WritingContext</code> was merged into a single <code>CsvContext</code>.
+Anywhere either of these was used should change to <code>CsvContext</code>.</p>
+<h2 id="funcaction">Func/Action</h2>
+<p>Any place a <code>Func</code> or <code>Action</code> was used now has a dedicated <code>delegate</code>.
+This should only affect classes that are inheriting <code>ClassMap</code>
+or <code>CsvConfiguration</code>.</p>
+<h2 id="csvfieldreader">CsvFieldReader</h2>
+<p>Class removed. Code was wrapped into <code>CsvParser</code>.</p>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v21/index.html b/ThirdParty/CsvHelper-master/docs/migration/v21/index.html
new file mode 100644
index 0000000..4b60137
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v21/index.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V21 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-20-to-21">Migrating from version 20 to 21</h1>
+<h2 id="csvconfiguration">CsvConfiguration</h2>
+<p>Property <code>char? NewLine</code> changed to <code>string NewLine</code>.</p>
+<pre><code class="language-cs">// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = '\r',
+};
+
+// v21
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = &quot;\r&quot;,
+};
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v22/index.html b/ThirdParty/CsvHelper-master/docs/migration/v22/index.html
new file mode 100644
index 0000000..9e1defc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v22/index.html
@@ -0,0 +1,138 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V22 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-21-to-22">Migrating from version 21 to 22</h1>
+<h2 id="parsermode">ParserMode</h2>
+<p>Name change to <code>CsvMode</code>.</p>
+<pre><code class="language-cs">// v21
+ParserMode.RFC4180
+
+//v22
+CsvMode.RFC4180
+</code></pre>
+<h2 id="shouldquote">ShouldQuote</h2>
+<pre><code class="language-cs">// v21
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, context) =&gt; true,
+};
+
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, context, row) =&gt; true,
+};
+</code></pre>
+<h2 id="enumconverter">EnumConverter</h2>
+<p><code>EnumConverter</code> was changed to case sensitive by default.</p>
+<p>If you want Enums to ignore case, you need to set a type converter option.</p>
+<pre><code class="language-cs">Map(m =&gt; m.Property).TypeConverterOption.EnumIgnoreCase();
+</code></pre>
+<h2 id="iparserconfiguration">IParserConfiguration</h2>
+<ul>
+<li>Added <code>ProcessFieldBufferSizse</code>.</li>
+</ul>
+<p>Any class that implements <code>IParserConfiguration</code> will need these changes applied to it.</p>
+<h2 id="iwriterconfiguration">IWriterConfiguration</h2>
+<ul>
+<li>Added <code>Mode</code>.</li>
+</ul>
+<p>Any class that implements <code>IWriterConfiguration</code> will need these changes applied to it.</p>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v23/index.html b/ThirdParty/CsvHelper-master/docs/migration/v23/index.html
new file mode 100644
index 0000000..e5be91c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v23/index.html
@@ -0,0 +1,295 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V23 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-22-to-23">Migrating from version 22 to 23</h1>
+<h2 id="csvconfiguration">CsvConfiguration</h2>
+<p>All the constructor parameters were removed in favor of using
+property setters. Apply this change to any of the options.</p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture, delimiter = &quot;;&quot;);
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = &quot;;&quot;,
+};
+</code></pre>
+<h2 id="delegates">Delegates</h2>
+<p>All delegates now take in a single struct argument.</p>
+<p><strong>BadDataFound</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ BadDataFound = (field, context) =&gt;
+ {
+ Console.WriteLine($&quot;field: {field}&quot;);
+ Console.WriteLine($&quot;context: {context}&quot;);
+ },
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ BadDataFound = args =&gt;
+ {
+ Console.WriteLine($&quot;field: {args.Field}&quot;);
+ Console.WriteLine($&quot;context: {args.Context}&quot;);
+ },
+};
+</code></pre>
+<p><strong>ConvertFromString</strong></p>
+<pre><code class="language-cs">// v22
+Map(m =&gt; m.Property).Convert(row =&gt; row.GetField(0));
+
+// v23
+Map(m =&gt; m.Property).Convert(args =&gt; args.Row.GetField(0));
+</code></pre>
+<p><strong>ConvertToString</strong></p>
+<pre><code class="language-cs">// v22
+Map(m =&gt; m.Property).Convert(value =&gt; value.ToString());
+
+// v23
+Map(m =&gt; m.Property).Convert(args =&gt; args.Value.ToString());
+</code></pre>
+<p><strong>GetConstructor</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetConstructor = classType =&gt; classType.GetConstructors().First(),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetConstructor = args =&gt; args.ClassType.GetConstructors().First(),
+};
+</code></pre>
+<p><strong>GetDynamicPropertyName</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetDynamicPropertyName = (fieldIndex, context) =&gt; $&quot;Field{fieldIndex}&quot;;
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetDynamicPropertyName = args =&gt; $&quot;Field{args.FieldIndex}&quot;,
+};
+</code></pre>
+<p><strong>HeaderValidated</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ HeaderValidated = (invalidHeaders, context) =&gt; Console.WriteLine($&quot;Invalid headers count: {invalidHeaders.Count}&quot;),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ HeaderValidated = args =&gt; Console.WriteLine($&quot;Invalid headers count: {args.InvalidHeaders.Count}&quot;),
+};
+</code></pre>
+<p><strong>MissingFieldFound</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ MissingFieldFound = (headerNames, index, context) =&gt; Console.WriteLine($&quot;Missing field: {headerNames[0]}&quot;),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ MissingFieldFound = args =&gt; Console.WriteLine($&quot;Missing field: {args.HeaderNames[0]}&quot;),
+};
+</code></pre>
+<p><strong>PrepareHeaderForMatch</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ PrepareHeaderForMatch = (header, fieldIndex) =&gt; header.ToLower(),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ PrepareHeaderForMatch = args =&gt; args.Header.ToLower(),
+};
+</code></pre>
+<p><strong>ReadingExceptionOccurred</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReadingExceptionOccurred = exception =&gt;
+ {
+ Console.WriteLine(exception.Message);
+ throw args.Exception;
+ },
+};
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReadingExceptionOccurred = args =&gt;
+ {
+ Console.WriteLine(args.Exception.Message);
+ throw args.Exception;
+ },
+};
+</code></pre>
+<p><strong>ReferenceHeaderPrefix</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReferenceHeaderPrefix = (memberType, memberName) =&gt; $&quot;{memberName}.&quot;,
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReferenceHeaderPrefix = args =&gt; $&quot;{args.MemberName}.&quot;,
+};
+</code></pre>
+<p><strong>ShouldQuote</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, fieldType, row) =&gt; true,
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = args =&gt; true,
+};
+</code></pre>
+<p><strong>ShouldSkipRecord</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = (records) =&gt; record.Length == 0,
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = args =&gt; args.Record.Length == 0,
+};
+</code></pre>
+<p><strong>ShouldUseConstructorParameters</strong></p>
+<pre><code class="language-cs">// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldUseConstructorParameters = type =&gt; true;
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldUseConstructorParameters = args =&gt; true;
+};
+</code></pre>
+<p><strong>Validate</strong></p>
+<pre><code class="language-cs">// v22
+Map(m =&gt; m.Property).Validate(field =&gt; !string.IsNullOrEmpty(field));
+
+// v23
+Map(m =&gt; m.Property).Validate(args =&gt; !string.IsNullOrEmpty(args.Field));
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v24/index.html b/ThirdParty/CsvHelper-master/docs/migration/v24/index.html
new file mode 100644
index 0000000..63b9b13
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v24/index.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V24 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-23-to-24">Migrating from version 23 to 24</h1>
+<h2 id="iwriterrow">IWriterRow</h2>
+<pre><code class="language-cs">// v23
+WriteConvertedField(field);
+
+// v24
+WriteConvertedField(field, fieldType);
+</code></pre>
+<h2 id="csvwriter">CsvWriter</h2>
+<pre><code class="language-cs">// v23
+WriteConvertedField(field);
+
+// v24
+WriteConvertedField(field, fieldType);
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v25/index.html b/ThirdParty/CsvHelper-master/docs/migration/v25/index.html
new file mode 100644
index 0000000..2da1e01
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v25/index.html
@@ -0,0 +1,255 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V25 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-24-to-25">Migrating from version 24 to 25</h1>
+<h2 id="delegates">Delegates</h2>
+<p>All delegate args had their non-parameterless constructor removed
+in favor of using <code>init</code>.</p>
+<p><strong>BadDataFoundArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new BadDataRoundArgs(field, rawRecord, context);
+
+// v26
+var args = new BadDataFoundArgs
+{
+ Field = field,
+ RawRecord = rawRecord,
+ Context = context,
+};
+</code></pre>
+<p><strong>ConvertFromStringArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ConvertFromStringArgs(row);
+
+// v26
+var args = new ConvertFromStringArgs
+{
+ Row = row,
+};
+</code></pre>
+<p><strong>ConvertToStringArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ConvertToStringArgs(value);
+
+// v26
+var args = new ConvertToStringArgs
+{
+ Value = value,
+};
+</code></pre>
+<p><strong>GetConstructorArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new GetConstructorArgs(type);
+
+// v26
+var args = new GetConstructorArgs
+{
+ ClassType = type,
+};
+</code></pre>
+<p><strong>GetDynamicPropertyNameArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new GetDynamicPropertyNameArgs(index, context);
+
+// v26
+var args = new GetDynamicPropertyNameArgs
+{
+ FieldIndex = index,
+ Context = context,
+};
+</code></pre>
+<p><strong>HeaderValidatedArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new HeaderValidatedArgs(headers, context);
+
+// v26
+var args = new HeaderValidatedArgs
+{
+ InvalidHeaders = headers,
+ Context = context,
+};
+</code></pre>
+<p><strong>MissingFieldFoundArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new MissingFieldFoundArgs(headerNames, index, context);
+
+// v26
+var args = new MissingFieldFoundArgs
+{
+ HeaderNames = headerNames,
+ Index = index,
+ Context = context,
+};
+</code></pre>
+<p><strong>PrepareHeaderForMatchArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new PrepareHeaderForMatchArgs(header, fieldIndex);
+
+// v26
+var args = new PrepareHeaderForMatchArgs
+{
+ Header = header,
+ FieldIndex = fieldIndex,
+};
+</code></pre>
+<p><strong>ReadingExceptionOccurredArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ReadingExceptionOccurredArgs(exception);
+
+// v26
+var args = new ReadingExceptionOccurredArgs
+{
+ Exception = exception,
+};
+</code></pre>
+<p><strong>ReferenceHeaderPrefixArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ReferenceHeaderPrefixArgs(memberType, memberName);
+
+// v26
+var args = new ReferenceHeaderPrefixArgs
+{
+ MemberType = memberType,
+ MemberName = memberName,
+};
+</code></pre>
+<p><strong>ShouldQuoteArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ShouldQuoteArgs(field, fieldType, row);
+
+// v26
+var args = new ShouldQuoteArgs
+{
+ Field = field,
+ FieldType = fieldType,
+ Row = row,
+};
+</code></pre>
+<p><strong>ShouldSkipRecordArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ShouldSkipRecordArgs(record);
+
+// v26
+var args = new ShouldSkipRecordArgs
+{
+ Record = record,
+};
+</code></pre>
+<p><strong>ShouldUseConstructorParametersArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ShouldUseConstructorParametersArgs(parameterType);
+
+// v26
+var args = new ShouldUseConstructorParametersArgs
+{
+ ParameterType = parameterType,
+};
+</code></pre>
+<p><strong>ValidateArgs</strong></p>
+<pre><code class="language-cs">// v25
+var args = new ValidateArgs(field);
+
+// v26
+var args = new ValidateArgs
+{
+ Field = field,
+};
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v26/index.html b/ThirdParty/CsvHelper-master/docs/migration/v26/index.html
new file mode 100644
index 0000000..03b0d48
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v26/index.html
@@ -0,0 +1,267 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V26 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-25-to-26">Migrating from version 25 to 26</h1>
+<h2 id="delegates">Delegates</h2>
+<p>All delegates args objects have their <code>init</code> accessor removed.
+Constructor parameters are used instead.</p>
+<p><strong>BadDataFoundArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new BadDataFoundArgs
+{
+ Field = field,
+ RawRecord = rawRecord,
+ Context = context,
+};
+
+// v27
+var args = new BadDataRoundArgs(field, rawRecord, context);
+</code></pre>
+<p><strong>ConvertFromStringArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ConvertFromStringArgs
+{
+ Row = row,
+};
+
+// v27
+var args = new ConvertFromStringArgs(row);
+</code></pre>
+<p><strong>ConvertToStringArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ConvertToStringArgs
+{
+ Value = value,
+};
+
+// v27
+var args = new ConvertToStringArgs(value);
+</code></pre>
+<p><strong>GetConstructorArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new GetConstructorArgs
+{
+ ClassType = type,
+};
+
+// v27
+var args = new GetConstructorArgs(type);
+</code></pre>
+<p><strong>GetDynamicPropertyNameArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new GetDynamicPropertyNameArgs
+{
+ FieldIndex = index,
+ Context = context,
+};
+
+// v27
+var args = new GetDynamicPropertyNameArgs(index, context);
+</code></pre>
+<p><strong>HeaderValidatedArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new HeaderValidatedArgs
+{
+ InvalidHeaders = headers,
+ Context = context,
+};
+
+// v27
+var args = new HeaderValidatedArgs(headers, context);
+</code></pre>
+<p><strong>MissingFieldFoundArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new MissingFieldFoundArgs
+{
+ HeaderNames = headerNames,
+ Index = index,
+ Context = context,
+};
+
+// v27
+var args = new MissingFieldFoundArgs(headerNames, index, context);
+</code></pre>
+<p><strong>PrepareHeaderForMatchArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new PrepareHeaderForMatchArgs
+{
+ Header = header,
+ FieldIndex = fieldIndex,
+};
+
+// v27
+var args = new PrepareHeaderForMatchArgs(header, fieldIndex);
+</code></pre>
+<p><strong>ReadingExceptionOccurredArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ReadingExceptionOccurredArgs
+{
+ Exception = exception,
+};
+
+// v27
+var args = new ReadingExceptionOccurredArgs(exception);
+</code></pre>
+<p><strong>ReferenceHeaderPrefixArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ReferenceHeaderPrefixArgs
+{
+ MemberType = memberType,
+ MemberName = memberName,
+};
+
+// v27
+var args = new ReferenceHeaderPrefixArgs(memberType, memberName);
+</code></pre>
+<p><strong>ShouldQuoteArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ShouldQuoteArgs
+{
+ Field = field,
+ FieldType = fieldType,
+ Row = row,
+};
+
+// v27
+var args = new ShouldQuoteArgs(field, fieldType, row);
+</code></pre>
+<p><strong>ShouldSkipRecordArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ShouldSkipRecordArgs
+{
+ Record = record,
+};
+
+// v27
+var args = new ShouldSkipRecordArgs(record);
+</code></pre>
+<p><strong>ShouldUseConstructorParametersArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ShouldUseConstructorParametersArgs
+{
+ ParameterType = parameterType,
+};
+
+// v27
+var args = new ShouldUseConstructorParametersArgs(parameterType);
+</code></pre>
+<p><strong>ValidateArgs</strong></p>
+<pre><code class="language-cs">// v26
+var args = new ValidateArgs
+{
+ Field = field,
+};
+
+// v27
+var args = new ValidateArgs(field);
+</code></pre>
+<h2 id="iparserconfiguration">IParserConfiguration</h2>
+<ul>
+<li>Added property <code>bool ExceptionMessagesContainRawData { get; }</code>.</li>
+</ul>
+<p>Any class that implements <code>IParserConfiguration</code> will need these changes
+applied to it.</p>
+<h2 id="iwriterconfiguration">IWriterConfiguration</h2>
+<ul>
+<li>Added property <code>bool ExceptionMessagesContainRawData { get; }</code>.</li>
+</ul>
+<p>Any class that implements <code>IParserConfiguration</code> will need these changes
+applied to it.</p>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v27/index.html b/ThirdParty/CsvHelper-master/docs/migration/v27/index.html
new file mode 100644
index 0000000..aecfe4d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v27/index.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V27 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-26-to-27">Migrating from version 26 to 27</h1>
+<h2 id="csvconfiguration.whitespacechars">CsvConfiguration.WhiteSpaceChars</h2>
+<ul>
+<li>Removed <code>\t</code> from the array of default characters.</li>
+</ul>
+<p>If you are expecting <code>\t</code> to be trimmed, you will need to add this to the
+whitespace characters.</p>
+<pre><code class="language-cs">var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ WhiteSpaceChars = new[] { ' ', '\t' },
+};
+</code></pre>
+<h2 id="iparserconfiguration">IParserConfiguration</h2>
+<ul>
+<li>Added property <code>bool DetectDelimiter { get; }</code>.</li>
+<li>Added property <code>string[] DetectDelimiterValues { get; }</code>.</li>
+</ul>
+<p>Any class that implements <code>IParserConfiguration</code> will need these changes
+applied to it.</p>
+<h2 id="iwriter">IWriter</h2>
+<ul>
+<li>Added method <code>Task WriteRecordsAsync&lt;T&gt;(IAsyncEnumerable&lt;T&gt; records, CancellationToken cancellationToken = default)</code>.
+This does not apply to projects that reference the <code>net45</code> version of CsvHelper.</li>
+</ul>
+<p>Any class that implements <code>IWriter</code> will need these changes applied to it.</p>
+<h2 id="iparser">IParser</h2>
+<ul>
+<li>Added property <code>string Delimiter { get; }</code>.</li>
+</ul>
+<p>Any class that implements <code>IParser</code> will need these changes applied to it.</p>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v28/index.html b/ThirdParty/CsvHelper-master/docs/migration/v28/index.html
new file mode 100644
index 0000000..cb54f32
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v28/index.html
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V28 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-27-to-28">Migrating from version 27 to 28</h1>
+<h2 id="shouldskiprecordargs">ShouldSkipRecordArgs</h2>
+<ul>
+<li><code>string[] ShouldSkipRecordArgs.Record</code> changed to <code>IReaderRow ShouldSkipRecordArgs.Row</code>.</li>
+</ul>
+<pre><code class="language-cs">// 27
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = args =&gt; args.Record.Length &lt; 10;
+};
+
+// 28
+
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = args =&gt; args.Row.Parser.Record.Length &lt; 10;
+};
+</code></pre>
+<h2 id="configurationfunctions.shouldskiprecord">ConfigurationFunctions.ShouldSkipRecord</h2>
+<ul>
+<li>Removed <code>ConfigurationFunctions.ShouldSkipRecord</code>.</li>
+</ul>
+<p><code>null</code> can be used in place of this now, and is the default.</p>
+<pre><code class="language-cs">var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = null
+};
+</code></pre>
+<h2 id="iparserconfiguration.validate">IParserConfiguration.Validate</h2>
+<p>Implement the <code>Validate</code> method.</p>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v29/index.html b/ThirdParty/CsvHelper-master/docs/migration/v29/index.html
new file mode 100644
index 0000000..32c4bf7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v29/index.html
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V29 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-28-to-29">Migrating from version 28 to 29</h1>
+<h2 id="csvconfiguration.sanitizeforinjection">CsvConfiguration.SanitizeForInjection</h2>
+<p><code>bool CsvConfiguration.SanitizeInjection</code> changed to <code>InjectionOptions CsvConfiguration.InjectionOptions</code>.</p>
+<pre><code class="language-cs">// 28
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ SanitizeForInjection = true,
+}
+
+// 29
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ InjectionOptions = InjectionOptions.Escape,
+}
+</code></pre>
+<h2 id="iwriterconfiguration.sanitizeforinjection">IWriterConfiguration.SanitizeForInjection</h2>
+<p><code>bool IWriterConfiguration.SanitizeInjection</code> changed to <code>InjectionOptions IWriterConfiguration.InjectionOptions</code>.
+Any class that implements <code>IWriterConfiguration</code> will need this changed.</p>
+<h2 id="iparserconfiguration.getdelimiter">IParserConfiguration.GetDelimiter</h2>
+<p><code>GetDelimiter IParserConfiguration.GetDelimiter</code> was added.
+Any class that implements <code>IParserConfiguration</code> will need to add this.</p>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v3/index.html b/ThirdParty/CsvHelper-master/docs/migration/v3/index.html
new file mode 100644
index 0000000..c1496b6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v3/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V3 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v30/index.html b/ThirdParty/CsvHelper-master/docs/migration/v30/index.html
new file mode 100644
index 0000000..b693fd0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v30/index.html
@@ -0,0 +1,121 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V30 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="migrating-from-version-29-to-30">Migrating from version 29 to 30</h1>
+<h2 id="baddataexception-constructor">BadDataException constructor</h2>
+<pre><code class="language-cs">// 29
+throw new BadDataException(context);
+
+// 30
+throw new BadDataException(field, rawRecord, context);
+</code></pre>
+<h2 id="iparserconfiguration">IParserConfiguration</h2>
+<p>Any class that implements <code>IParserConfiguration</code> will need to add property <code>double MaxFixFieldSize { get; }</code>.
+Any class that implements <code>IParserConfiguration</code> will need to add property <code>bool LeaveOpen { get; }</code>.</p>
+<h2 id="iwriterconfiguration">IWriterConfiguration</h2>
+<p>ixFieldSize { get; }<code>. Any class that implements </code>IWriterConfiguration<code>will need to add property</code>bool LeaveO</p>
+<h2 id="validateargs">ValidateArgs</h2>
+<pre><code class="language-cs">// 29
+var args = new ValidateArgs(field);
+
+// 30
+var args = new ValidateArgs(field, row);
+</code></pre>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v4/index.html b/ThirdParty/CsvHelper-master/docs/migration/v4/index.html
new file mode 100644
index 0000000..2f3a095
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v4/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V4 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v5/index.html b/ThirdParty/CsvHelper-master/docs/migration/v5/index.html
new file mode 100644
index 0000000..288d7a1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v5/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V5 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v6/index.html b/ThirdParty/CsvHelper-master/docs/migration/v6/index.html
new file mode 100644
index 0000000..b1d22c3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v6/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V6 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v7/index.html b/ThirdParty/CsvHelper-master/docs/migration/v7/index.html
new file mode 100644
index 0000000..6835c60
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v7/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V7 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v8/index.html b/ThirdParty/CsvHelper-master/docs/migration/v8/index.html
new file mode 100644
index 0000000..7a96680
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v8/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V8 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/migration/v9/index.html b/ThirdParty/CsvHelper-master/docs/migration/v9/index.html
new file mode 100644
index 0000000..ce6f022
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/migration/v9/index.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="/CsvHelper/favicons/apple-icon-57x57.png" />
+ <link rel="apple-touch-icon" sizes="60x60" href="/CsvHelper/favicons/apple-icon-60x60.png" />
+ <link rel="apple-touch-icon" sizes="72x72" href="/CsvHelper/favicons/apple-icon-72x72.png" />
+ <link rel="apple-touch-icon" sizes="76x76" href="/CsvHelper/favicons/apple-icon-76x76.png" />
+ <link rel="apple-touch-icon" sizes="114x114" href="/CsvHelper/favicons/apple-icon-114x114.png" />
+ <link rel="apple-touch-icon" sizes="120x120" href="/CsvHelper/favicons/apple-icon-120x120.png" />
+ <link rel="apple-touch-icon" sizes="144x144" href="/CsvHelper/favicons/apple-icon-144x144.png" />
+ <link rel="apple-touch-icon" sizes="152x152" href="/CsvHelper/favicons/apple-icon-152x152.png" />
+ <link rel="apple-touch-icon" sizes="180x180" href="/CsvHelper/favicons/apple-icon-180x180.png" />
+ <link rel="icon" type="image/png" sizes="192x192" href="/CsvHelper/favicons/android-icon-192x192.png" />
+ <link rel="icon" type="image/png" sizes="32x32" href="/CsvHelper/favicons/favicon-32x32.png" />
+ <link rel="icon" type="image/png" sizes="96x96" href="/CsvHelper/favicons/favicon-96x96.png" />
+ <link rel="icon" type="image/png" sizes="16x16" href="/CsvHelper/favicons/favicon-16x16.png" />
+ <link rel="manifest" href="/CsvHelper/manifest.json" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>V9 | CsvHelper</title>
+
+
+
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="/CsvHelper/styles/index.css" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="/CsvHelper">
+ <img src="/CsvHelper/images/logo.svg" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="/CsvHelper/getting-started">Getting Started</a>
+ <a class="navbar-item" href="/CsvHelper/examples">Examples</a>
+ <a class="navbar-item" href="/CsvHelper/migration">Migration</a>
+ <a class="navbar-item" href="/CsvHelper/change-log">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
+
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ <div class="column">
+ <div class="content">
+ <h1 id="coming-soon">Coming Soon</h1>
+
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <br /><br />
+
+ <footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
+
+
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="/CsvHelper/scripts/header.js"></script>
+ <script src="/CsvHelper/scripts/sidebar.js"></script>
+
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/docs/robots.txt b/ThirdParty/CsvHelper-master/docs/robots.txt
new file mode 100644
index 0000000..7d329b1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/robots.txt
@@ -0,0 +1 @@
+User-agent: *
diff --git a/ThirdParty/CsvHelper-master/docs/scripts/header.js b/ThirdParty/CsvHelper-master/docs/scripts/header.js
new file mode 100644
index 0000000..491a05c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/scripts/header.js
@@ -0,0 +1,6 @@
+(() => {
+ document.getElementById("navbar-burger").addEventListener("click", () => {
+ document.getElementById("navbar-burger").classList.toggle("is-active");
+ document.getElementById("navbar-menu").classList.toggle("is-active");
+ });
+});
diff --git a/ThirdParty/CsvHelper-master/docs/scripts/sidebar.js b/ThirdParty/CsvHelper-master/docs/scripts/sidebar.js
new file mode 100644
index 0000000..496dfef
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/scripts/sidebar.js
@@ -0,0 +1,41 @@
+(() => {
+ const sidebar = document.getElementById("sidebar");
+ if (!sidebar) {
+ return;
+ }
+
+ const parent = sidebar.parentElement;
+ const footer = document.getElementById("footer");
+
+ const resizeSidebarWidth = () => {
+ const rect = parent.getBoundingClientRect();
+ const style = getComputedStyle(parent);
+ const width = rect.width - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight);
+ sidebar.style.width = `${width}px`;
+ };
+
+ const resizeSidebarHeight = () => {
+ const parentRect = parent.getBoundingClientRect();
+ const parentStyle = getComputedStyle(parent);
+ const footerRect = footer.getBoundingClientRect();
+ const bodyRect = document.body.getBoundingClientRect();
+
+ const top = Math.max(parentRect.top + parseFloat(parentStyle.paddingTop), 0);
+ const bottom = Math.max(bodyRect.height - footerRect.top, 0);
+
+ sidebar.style.top = `${top}px`;
+ sidebar.style.bottom = `${bottom}px`;
+ }
+
+ const handleExpanderClick = (e) => {
+ e.currentTarget.classList.toggle("expanded");
+ e.currentTarget.closest("li").querySelector("ul").classList.toggle("is-hidden");
+ }
+
+ const sidebarResizeObserver = new ResizeObserver(resizeSidebarWidth);
+ sidebarResizeObserver.observe(parent);
+
+ window.addEventListener("load", resizeSidebarHeight);
+ document.addEventListener("scroll", resizeSidebarHeight);
+ document.querySelectorAll(".expander").forEach(el => el.addEventListener("click", handleExpanderClick));
+})();
diff --git a/ThirdParty/CsvHelper-master/docs/sitemap.xml b/ThirdParty/CsvHelper-master/docs/sitemap.xml
new file mode 100644
index 0000000..4a6c7ca
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/sitemap.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>/CsvHelper/CsvHelper/google6ad86f23ff698b61</loc></url><url><loc>/CsvHelper/CsvHelper/change-log</loc></url><url><loc>/CsvHelper/CsvHelper/examples</loc></url><url><loc>/CsvHelper/CsvHelper/api</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/constant-value</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-index</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/attributes</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/inline-type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-alternate-names</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/ignoring-properties</loc></url><url><loc>/CsvHelper/CsvHelper/examples/csvdatareader</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/validation</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-by-name</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-duplicate-names</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/mapping-properties</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-by-hand</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/enumerate-class-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/optional-maps</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/using-and-dispose</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/reading-and-writing-files</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v13</loc></url><url><loc>/CsvHelper/CsvHelper/examples/configuration/class-maps/auto-mapping</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-class-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/prerequisites/streams</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/appending-to-an-existing-file</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion/custom-type-converter</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-dynamic-records</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v23</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/get-anonymous-type-records</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-multiple-data-sets</loc></url><url><loc>/CsvHelper/CsvHelper/examples/reading/reading-multiple-record-types</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-class-objects</loc></url><url><loc>/CsvHelper/CsvHelper/examples/type-conversion/type-converter-options</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-dynamic-objects</loc></url><url><loc>/CsvHelper/CsvHelper/examples/writing/write-anonymous-type-objects</loc></url><url><loc>/CsvHelper/CsvHelper/migration</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v2</loc></url><url><loc>/CsvHelper/CsvHelper/getting-started</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v20</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v10</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v3</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v11</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v18</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v14</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v16</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v21</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v30</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v12</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v19</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v15</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v17</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v22</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v24</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v28</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v26</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v4</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v6</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v25</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v29</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v27</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v5</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v7</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v8</loc></url><url><loc>/CsvHelper/CsvHelper/migration/v9</loc></url><url><loc>/CsvHelper/CsvHelper</loc></url></urlset> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/docs/styles/base.css b/ThirdParty/CsvHelper-master/docs/styles/base.css
new file mode 100644
index 0000000..ce74511
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/styles/base.css
@@ -0,0 +1,3 @@
+html, body { height: 100vh; }
+
+body { display: flex; flex-direction: column; }
diff --git a/ThirdParty/CsvHelper-master/docs/styles/content.css b/ThirdParty/CsvHelper-master/docs/styles/content.css
new file mode 100644
index 0000000..bc2e169
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/styles/content.css
@@ -0,0 +1 @@
+pre code.hljs { background-color: transparent; }
diff --git a/ThirdParty/CsvHelper-master/docs/styles/header.css b/ThirdParty/CsvHelper-master/docs/styles/header.css
new file mode 100644
index 0000000..8e7dd7f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/styles/header.css
@@ -0,0 +1 @@
+@media screen and (min-width: 769px) { nav { padding: 0 1.5em; } }
diff --git a/ThirdParty/CsvHelper-master/docs/styles/index.css b/ThirdParty/CsvHelper-master/docs/styles/index.css
new file mode 100644
index 0000000..4e0c782
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/styles/index.css
@@ -0,0 +1,21 @@
+html, body { height: 100vh; }
+
+body { display: flex; flex-direction: column; }
+
+@media screen and (min-width: 769px) { nav { padding: 0 1.5em; } }
+
+pre code.hljs { background-color: transparent; }
+
+.expander { position: absolute; font-size: 1.5rem; transform: rotate(0deg); top: -3px; left: 0; }
+
+.expander::before { content: "\203A"; }
+
+.expander.expanded { left: 4px; top: 2px; transform: rotate(90deg); }
+
+.sidebar { display: flex; position: fixed; overflow-x: hidden; overflow-y: auto; }
+
+.sidebar ul li { line-height: 2rem; padding-left: 1em; position: relative; }
+
+.sidebar ul li a { color: #4a4a4a; }
+
+.sidebar ul li a:not(.expander):hover { text-decoration: underline; }
diff --git a/ThirdParty/CsvHelper-master/docs/styles/sidebar.css b/ThirdParty/CsvHelper-master/docs/styles/sidebar.css
new file mode 100644
index 0000000..716f096
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/docs/styles/sidebar.css
@@ -0,0 +1,13 @@
+.expander { position: absolute; font-size: 1.5rem; transform: rotate(0deg); top: -3px; left: 0; }
+
+.expander::before { content: "\203A"; }
+
+.expander.expanded { left: 4px; top: 2px; transform: rotate(90deg); }
+
+.sidebar { display: flex; position: fixed; overflow-x: hidden; overflow-y: auto; }
+
+.sidebar ul li { line-height: 2rem; padding-left: 1em; position: relative; }
+
+.sidebar ul li a { color: #4a4a4a; }
+
+.sidebar ul li a:not(.expander):hover { text-decoration: underline; }
diff --git a/ThirdParty/CsvHelper-master/global.json b/ThirdParty/CsvHelper-master/global.json
new file mode 100644
index 0000000..337571a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/global.json
@@ -0,0 +1,6 @@
+{
+ "sdk": {
+ "rollForward": "latestMinor",
+ "version": "6.0.100"
+ }
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/logo/CSV Helper logo.ai b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.ai
new file mode 100644
index 0000000..aa7f817
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.ai
@@ -0,0 +1,4390 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 63445/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">CSV Helper logo</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2011-09-07T13:14:31-05:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2011-09-07T13:14:31-05:00</xmp:ModifyDate>
+ <xmp:CreateDate>2011-09-07T13:14:31-05:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>108</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAbAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AIswHyh2KuxV2KuxV2Kux&#xA;V2KvaPOn/kgrL/jBZf8AJxMzcfIPpXZ3+L4/6o+58/5NzXu3/ONf+8Wvf8Zbb/iMmJV7RgV2KuxV&#xA;2KuxV2KsP/N//wAlvrf/ABij/wCTyYq+UcKvWv8AnHH/AJSnU/8AmBP/ACeTFX0JgV2KuxV2KuxV&#xA;2KuxV2KuxV2KuxV2KvkCysrq+vIbO1jMtzcOsUMY6s7GgG+2YAD5XjxynIRiLJesWH/OPk72ytf6&#xA;wsVwR8UUMPqKvtzZ0r/wIy8YHp8fsya9U9/IftYr56/K3V/KsC3omW/01mCNcIpRo2PT1EJagPYg&#xA;n6NshPGYut7R7HyaYcV8UO/u94Tfyp+SOpavpkOo6jfDT47hRJBAsfqyFGFVZviQLUb03+jJRxW5&#xA;Wj9n55YCc5cN9Kv9Kr5k/IvUtO06W90y/W/9BTJJbvH6T8FFTwIZwx9tsZYaZar2dnCJlCXFXSq/&#xA;Ws0P8kLnVtGstTi1iNEvIUmEZhYlS61K15ivE7YBisWun9njlxxmJ/UAeX7Us8q/lTe6/d6vbC+W&#xA;1Ok3BtXZoy3NgzA0HJaU4YI47cbR9iyzSmOKuCVcuaU+e/Jb+UtRt7GS8W8knh9clUKcVLFR1Lde&#xA;JwThwuL2loPysxHi4iRfKnofnT/yQVl/xgsv+TiZlY+Qe57O/wAXx/1R9z5/ybmsn8q/mFrvlfS7&#xA;+z0fhDNqDxs92wDuixhhRFb4anl1NcVUh+YvnwXHr/p++5+Bncp4/wB3Xh+GKvavyd/NS88yvJou&#xA;s0bVYIzLDdKAomjUgMGUUAda126j5Yqyn8wvP+neTdJW6nT6xe3BKWVoDx5so+JmPZFqKnAr5+1v&#xA;84fP+qzs/wCk3sYiTwgs/wByqg9uQ/eH6WOFUttfzF8+Wzh49fvmINaSzvKPukLjFXqH5d/nvc3V&#xA;7DpXmkR1nYRw6mgEYDHYCZR8IBP7S0A7jvirPPzf/wDJb63/AMYo/wDk8mBXyjhV61/zjj/ylOp/&#xA;8wJ/5PJiqn59/Nfz/pXnHVtOsNU9GztpykEXoWzcVAG3J42Y/ScVSOH87PzJEqGXWKxhhzAtrXda&#xA;7/7qxVX83/nT5u1q8lGnXUmk6aCRBBbnhKV7NJKvxcj/AJJp+vFUN5Y/ODzrot7HJcX8up2dR69r&#xA;duZSy9+MjVdT4b/PFX01p+rWV9pNvqsLgWdxAtysjUFI2Xn8XhQdcCvDPPH5+axcXctn5X42dlGx&#xA;UXzqHmlptyUOCqKe21fl0wqwCT8wfPUkvqt5g1AMDWi3Mqr1r9lWC/hiqfeXvzs89aTOhubv9KWo&#xA;Px290ASR3pKAHB+ZI9sVfQvk/wA3aV5q0WPVNOJCk8J4HpzilABKNT51B7jArxj8xvzU8+aP511T&#xA;TdO1T0LK2kRYYvQt34gxqx+J42Y7nucKsftvzn/MqS5ijk1sLG7qrsbe0AAJoST6W2Ko3z1+dXmT&#xA;V9Rmi0S6k0zSI2Kwej+7mkUHaR3+0pP8qkU98VVPydjR/wAwdO5qG4rOy17EQvQ5h4vqeA7CAOqj&#xA;8fuL1/8AM69vLSz0FrWeSAy61aRymNinJCJCUahFVJA2y/Idh73qu1ckojHwki8sf0or8zo0k8ha&#xA;yrjkBCGAPirqwP0EYcn0lt7WiDpp33JnAv1/ysi6fMIjdWIW0nU04GSKiMCv8tR0wjk5A9eH0H6o&#xA;7H4bMHf8yz5TsLLRfMek3rXkECwvcH03in4KFLo5b4we/fx3yvxOEUQ6eXa35aMceaE+ICr2o11u&#xA;9/xadfk/e/WfIGnAmr25lhb/AGMrFf8AhWGSxH0uV2JPi0sfKx9qJ8j6cLS/80PSjT6vK3bcNFHI&#xA;OnvIcYDn723QYuGWXzyH7gf0vIfztvDP57mirX6pbwwj2qvq/wDM3KMp9TyvtBk4tTX82IH6f0sq&#xA;86f+SCsv+MFl/wAnEzJx8g9d2d/i+P8Aqj7nz/k3Nen/AJPeR9A8x6Z5huNVhM8ltEiWpDMvps6y&#xA;MXHEip+BaV/jirzDFWe/kdLw/MnTlqR6sdwlB3pA7UP/AAOKov8APzU5brz7JaFqx6fbwxIvYGRf&#xA;WY/M+oMVeb4q9N/OvyTovlhtC/RdsLcXMMqXFHdw8kHp/F8ZO59TFXmWKvovW9Wl1b8gGvpjymks&#xA;oUlfqWeKdImY+5KVxV86Yq9a/wCccf8AlKdT/wCYE/8AJ5MVYd+aX/kwdd/5im/UMVY3aQevdwwb&#xA;n1ZFSg6/EQNsVeifnf5S0Dy5q+mQ6NbfVYp7YmVAzMCyNxDfGWNSOuKvNsVe+3msSWn/ADjvBLEx&#xA;SWe2SzU13o8/puPpjDYq8CxV6Z+VXk7Qde8t+aLjUbYTXVpABZylnX0mMcj8gFIFeSDrirzPFXrP&#xA;/OOmrSweZ7/TC9ILy1MoSuxlhdeP/CO2KsW/N7/yY+t/8ZU/5MpirD8Vdir0/wDJr/yYOn/6k/8A&#xA;yZfMPF9TwHYP+NR+P3PTfzstHvPL2k2iMEe51a3iVz0UvHKoO3hXLs3J6Pt/Hx4oR78kR9hYJ5j/&#xA;ACe13R9EvNTn1WKeG1T1HiAkqwqBTfbKpYyBbptV2FkxY5TM7ER5sm8ixfmJ5W0kSX1vFeeW44jd&#xA;GMTL60MfH1GMVeu2/A9+4ycOIDydj2dHVaaHqAliAvnuOu36me3tjoPnDy4qyqLnT76MSQS0o6Fh&#xA;8LrXdXX+w5aQJB3OTHi1WLfeEht+v3sM/ImVo9G1bTHIL2d8Saf5aBPurEcrwnanU+zprHOB5xn+&#xA;Puei2tmlvNdyLSt1KJmoKbiJI/8AmXloDvowAJPef0AfofMn5jXn1vzzrUvXjdPD/wAif3X/ABpm&#xA;HP6i+d9q5OPUzP8ASr5bfoenfmLGY/yMs426pa6ap+Y9MZmQ5B73QisEB/Qj9z52yTlPbv8AnHr/&#xA;AI4fmf8A55f8m5cVeI4qzj8lP/Jm6N/0c/8AUJLirvzr/wDJm6z/ANG3/UJFirB8VTzzN518z+Z/&#xA;q36cvfrf1Tn9X/dRRcfV48/7pErXgOuKpHir3az/APWam/4xS/8AdRbFXhOKvWv+ccf+Up1P/mBP&#xA;/J5MVYd+aX/kwdd/5im/UMVSPQ/+O1p//MTD/wAnBir1T/nJH/juaP8A8wsn/JzFXj2KvaNd/wDW&#xA;dtJ/4yp/yfkxV4viqdaD5y8yaDa3lppN59Wt78BbtPTik5gAr1kVyNmPTFUlxV6L+Qn/AJMKH/mG&#xA;n/4iMVSr83v/ACY+t/8AGVP+TKYqw/FX0/5V/JryXpulWy3+npqGoFFa5nuOTAyEVYLGTxVQem1f&#xA;HArxfyFr0Gg+bdO1O4r9WhdlnIqaRyo0bNQbnjy5U9swoSo2+bdm6kYc8Zy5Dn8RT6L1HTtC82WV&#xA;jIt169taXUV9BLayKQZIq8Qxo2x5Go65lkCT3uXFj1MYm7EZCQrvDFPzh856Ra+XLrRIbhJtTveM&#xA;ZhjIYxIHDO0lPs1AoB13yvLMVTrO3NfCGE4wbnL7O+028l+YtD81eUYdOFyouzZi0v7UEJMp9P03&#xA;ZVNfhPVWFR9NRkoSBFOVoNVj1OARv1cNSHXlR/YmJu/Lfkny5BbXN2IbSyi4wiVlM0lKn4VFOTMf&#xA;AYbEQ5HHi0mICRqMR15n9rzD8kdfto9f1tbqVLdb6Nbn94yqvJJDsCxH+/spwy3Lzvs/qR4uS9uL&#xA;f7f2vYv05ov/AFcLb/kdH/XMjiHe9X40P5w+b5Q1G5a91O6ugKtczSS08TI5b+OYT5jmnxzMu8k/&#xA;N7v+dFuLb8rbi3HSE2sY/wBjIg/hmcA+oRjQA7nzNhZPbv8AnHr/AI4fmf8A55f8m5cVeI4qzj8l&#xA;P/Jm6N/0c/8AUJLirvzr/wDJm6z/ANG3/UJFirB8VfQf5h+Xfyy8maZbX0vlhL0XM3oCNZ5Y6fAW&#xA;rUs38uKsB/xr+VX/AFI3/T7J/TFXoWq3ulX35BXV1pNj+jdPkib0bLmZOHG+4t8Z3PJgW+nFXzxi&#xA;r1r/AJxx/wCUp1P/AJgT/wAnkxVh35pf+TB13/mKb9QxVI9D/wCO1p//ADEw/wDJwYq9U/5yR/47&#xA;mj/8wsn/ACcxV49ir2jXf/WdtJ/4yp/yfkxV4vir1z8i/JvlnzFa6u+s2K3jW0kAhLM68Q4ct9hl&#xA;68RiqVz+cfyrimkiPkevpsVr9ck3oaeGKst/KvzL5F1DzdHb6N5Y/RV6YZWW7+svLRQPiXi22+Kv&#xA;Ovze/wDJj63/AMZU/wCTKYqw/FX29gV8c5gPlDsVdirsVdirsVdiqc+TbA3/AJr0i0pyWW7h9Qf5&#xA;CuGf/hQclEWXM0GPjzwj/SH7Xt356f8AkuL/AP4y2/8AyeXM19LfMGFXt3/OPX/HD8z/APPL/k3L&#xA;irxHFWcfkp/5M3Rv+jn/AKhJcVRH562clv8AmNeysCFu4beZCe4ESxVH0xHFXn+Kvdv+chNXsrry&#xA;3oSQSpJ9amN1GFYMfTEdK7V2q+KvCcVe+C1ktf8AnHD05AQzW3qiop8M176i/wDCuMVeB4q9a/5x&#xA;x/5SnU/+YE/8nkxVh35pf+TB13/mKb9QxVj2nzehf209QPSlR6np8LA74q9T/wCciry0uNc0j6vM&#xA;k1LRmJjYMOLvVTt/MNxiryTFXuurac0v/OOlpw+NreOK4+g3PxfcHOKvCsVe3/8AOOV9Z29j5h9e&#xA;ZIvTMEz8mApGqycn37DvirxS4kEtxLKBQO7MB8zXFXo//OP1rLN58Myg8LazmeRu3xFUA+9sVST8&#xA;3v8AyY+t/wDGVP8AkymKsPxV9vYFfHOYD5Q7FXYq7FXYq7FXYq9E/I3STeecTestY9OgeQN2Ekn7&#xA;pR/wLMfoy3CN3fez2Di1HF0gPtO363o/52289x+Xl9FBG8shlt6IilmNJV7DMoPcvmn9B61/1b7n&#xA;/kTJ/TCr2j8grG9ttF8yrcW8kLP6XASIyE/u5OlQK4q8X/Qetf8AVvuf+RMn9MVZr+TelapB+ZGj&#xA;yz2c8US/WeUjxuqitrKBUkU64q9e/Nn8tf8AF+nxXFiyx6zZAiAvsssZ3MTHtvup/rgV836x5f1v&#xA;Rrg2+q2M1nKDQCVCoP8Aqt9lh7g4VS/rir0D8vPyk1zzHfRXGoW8tjoaEPNPKpRpVB+xCDQnl05d&#xA;B89sVe2/mlZcfy11WzsoSVSCKOCCJSaKkqAKqjwAwK+X/wBB61/1b7n/AJEyf0wq9V/5x507ULXz&#xA;PqT3NtLAjWRCtIjICfVTarAYlWDfml/5MHXf+Ypv1DFWOWNt9avbe25cPXkSLnStObBa0+nFU081&#xA;eUNd8sai9lqlu0dGIhuACYZVHRo3pQ/LqO+KqHl7y3rPmDUY9P0q2a4ncgMwB4Rqf25G6Ko8Tir6&#xA;20/y7ZW3li38vTKJ7OO0WylDf7sQR8GJ/wBbAr5w88/lJ5l8t3ksltbyaho9S0N3CpcqnYTKoqpH&#xA;j0P4YVYKQQSCKEdRiqYaNoGta1dLa6VZS3kzGlIlJAr3ZvsqPdjTFX0z+Vv5ex+T9GdZ2WXVr3i9&#xA;7Kv2V4j4YkPgtTv3P0YFeI/mxpOqzfmHrMsNnPJG0qcXSJ2U/uk6EDCrEf0HrX/Vvuf+RMn9MVfa&#xA;OBVD6jY/8s8X/AL/AEwUGPAO5K/NF3p2i+XtQ1R4YVNtCzRVRaGQjjGvT9pyBkZUBbjavLHDilMg&#xA;bD7en2vlTMN8zdirsVdirsVfQf5I+Xzp3lRtQlXjPqsnqiux9GOqx1+Z5N8jmVhjQe69n9N4eDiP&#xA;Oe/w6fr+L0PLXeuxV2KuxV2KuxVp0SRSjqHQ9VYVB+g4qh4dL0yCT1ILSGKTrzSNFb7wMVROKuxV&#xA;2KuxV87+ffyo8/6r5x1bUbDS/Ws7mcvBL69svJSBvxeRWH0jCqV6V+Tf5kQapZzy6PxiinjeRvrN&#xA;qaKrgk0EtemKvpmaGGaNopo1kjbZkcBlPzBwK1BbW9vH6dvEkMY3CRqFX7hTFVTFXYqhrjTNNuW5&#xA;3FpDM/8ANJGjH7yDiqvHHHGoSNQiDoqgAfcMVXYq7FXYq7FXYq8G/OPz9Fq92NC02Tnp1m/K5mU1&#xA;WWYbUUjqib/M/IHMbLO9g8X272kMsvCh9Mefmf1D73mWUvOOxV2KuxVO/Jvlm58yeYLbS4aiNzzu&#xA;pR/uuFT8bfwHuRkoRsuZoNIdRlEB8fIfj7X1PbW8FtbxW1ugjggRY4o16KiDiqj5AZmvpMIiIAGw&#xA;CpiydirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirwPz9+cV9rSSabo&#xA;gey0xvhlnJpPMvht9hT4A1Pc9sxZ5b5PE9pduyy3DH6Yd/U/qH48nmuVPPOxV2KuxVfFFLNKkMSN&#xA;JLIwSONQSzMxoAAOpJxSASaHN9I/ll5ETyto/K5AbV70K944oeAH2YlPgtd/E+1My8cKD6D2T2cN&#xA;Nj3+uXP9TMssdq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+O&#xA;cwHyh2KuxV2Kr4IJp5kggjaWaVgkcSAszMxoAoG5JxZRiZGhuS97/K/8rl0FU1fV1V9YYfuYeq26&#xA;sKHfoZCDQnt2zJx463L23ZHZAwfvMn95/uf2vSMud+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXxzmA+UOxV2Kp15Z8oa95ku/q+l2xdQaS3L1WGP/AF3p+A39&#xA;slGJPJzNJocuolUB8eg+P4L3zyL+WmjeVoxP/vZqrCkl6604g9ViXfiPfqfwzJhjAe37O7Kx6YX9&#xA;U+/9XczDLHaOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;vjnMB8oZBoPkLzbrhU2GnSmBqf6TKPShp4h3oG/2NTkhAlz9N2bnzfTE13nYfj3PUPLH5EadbFLj&#xA;zBc/XZRubSCqQg+DPs7/AEccujh73o9H7OQjvlPEe4cv1n7HqFlY2djbJa2cCW9tGKRwxKFUD2Ay&#xA;4CnooY4wHDEUFbCzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdirCvKn/Kp+Uf6B/R/1jb0+VPrP0ev++yuPB0dTovyW3hcF/wCy+31M1yx2zsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>uuid:cacffa69-d08c-2c4b-8a13-d6d244219de0</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:0780117407206811B297A84155AD39AE</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:a73fd6fa-815f-2c4d-a268-3482f0c7566d</stRef:instanceID>
+ <stRef:documentID>xmp.did:0180117407206811BCA78FF66409E4BB</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:D27F11740720681191099C3B601C4548</stEvt:instanceID>
+ <stEvt:when>2008-04-17T14:19:15+05:30</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T16:23:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T17:10:45-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:EF7F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T22:53:33-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F07F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T23:07:07-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:35:43-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:40:59-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:26:55-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FC7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:20-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:30:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FE7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:31:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B233668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T12:23:46-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B333668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:27:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B433668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:46:13-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:47:57-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:51:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:52:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T13:28:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FF7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T16:23:53-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:07C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
+ <stEvt:when>2008-05-28T16:45:26-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068119098B097FDA39BEF</stEvt:instanceID>
+ <stEvt:when>2008-06-02T13:25:25-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BB1DBF8F242B6F84</stEvt:instanceID>
+ <stEvt:when>2008-06-09T14:58:36-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811ACAFB8DA80854E76</stEvt:instanceID>
+ <stEvt:when>2008-06-11T14:31:27-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0180117407206811834383CD3A8D2303</stEvt:instanceID>
+ <stEvt:when>2008-06-11T22:37:35-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811818C85DF6A1A75C3</stEvt:instanceID>
+ <stEvt:when>2008-06-27T14:40:42-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0180117407206811BCA78FF66409E4BB</stEvt:instanceID>
+ <stEvt:when>2011-07-29T13:26:11-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0780117407206811B297A84155AD39AE</stEvt:instanceID>
+ <stEvt:when>2011-09-07T13:14:30-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:Type>Document</illustrator:Type>
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>8.500000</stDim:w>
+ <stDim:h>3.615736</stDim:h>
+ <stDim:unit>Inches</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Red</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Green</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>14.999998</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>80.000000</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>35.000004</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>5.000001</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>19.999998</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>90.000000</xmpG:cyan>
+ <xmpG:magenta>30.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>30.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>80.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>45.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>70.000000</xmpG:cyan>
+ <xmpG:magenta>14.999998</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>5.000001</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>25.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>35.000004</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>10.000002</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>19.999998</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>25.000000</xmpG:magenta>
+ <xmpG:yellow>39.999996</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>45.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>5.000001</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>60.000004</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>55.000000</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>39.999996</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>39.999996</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>30.000002</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>65.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>35.000004</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>70.000000</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>89.999405</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>79.998795</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>69.999702</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>59.999104</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>39.999401</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>29.998802</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>19.999701</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>9.999103</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>4.998803</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Brights</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>75.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>60.000004</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.003099</xmpG:yellow>
+ <xmpG:black>0.003099</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[13.6787 7.24902 595.678 247.79]/BleedBox[0.0 0.0 612.0 260.333]/Contents 8 0 R/LastModified(D:20110907131431-05'00')/MediaBox[0.0 0.0 612.0 260.333]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ColorSpace<</CS0 10 0 R>>/ExtGState<</GS0 11 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 12 0 R/TrimBox[0.0 0.0 612.0 260.333]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 3429>>stream
+HW G(JfA&9.;,; Џ,Sdۗ?Mu{HXK)e^㷟~y|~۾bOXǯ[ż-i$˰xu;ݺ]޺n/\uj_Me{}prŸuTf[vI{j|sdZ|C
+5ߝw˝/6fs+s;ycKqދd=?" n n{Vurnyr&.'0Rh{0M_x |}<W;o8(8%#qU<c@6Ě Eœ*?i=6?sE
+?PLN4%\ [~; ߺ:.7p4,o%d K aqoߥ
+3yc|ف;%K5wFI9IzQ=d0(3xN]jFऊ>m\(cD,''I#uͪN囼Cg2x Dpq(JՁDW/(As6SټU8Ђ @:A ~ĔqhJ j&ZD9s@
+.#N25ʊ661M JhiFm\|/]7
+j
+E89]C[C
+
+z&tU;ԲjrU:";oڡڡ;VPeAWP&jtt(賈ݤC_CNttU91ʡR}QZPWna6S8䏅᠋pЛppXtCYuCM
+b Wᠫpк*r8*9>r|o&vsj i=ƶ/
+X(%ug%uB
+ BSqB<5Ms6<&WoB I47E%aa}o[o-̮ ]ٸ7ϡr`ii n*>e*LrSc(5%"܊ !2
+@
+v;~;ky+'DSK00ڃ(
+RC!8$'H8ZC2pH;p`R;pT;r\;q5 9p8zMܙ׾v\O?u&> qd3aBJ]Ռ=
+ ~|A6KH4q{!̊ wfVw0]yv}e~}S
+8;X^;d1*u9$q,l$031X+@J*j&!CHpD$'B1dXAGBm?S;U;%.D1NO)+:%<'/sE>k"?V
+N%poO0\(n"pa]FU'S?KSg8Ble"@mX?$`0&s7afL,*6N0M\\@;udc??4@bp(In`P41
+`MIRu3lrh1CCFmqY%,Ku'I6]AM\8XaF\X@[07%GTKnbMf_:5Zc,@&,q/kih&F,dZV
+@ID9c^=HQHk<<\;\+!.S+mOGp8*<4^L&*&IE9EY]ehNcP2R5\g#JaRt>(pZ/jORAY
+>MKMah6")L)&:KLT%<(K\;pP8mY-p-Kr__k/Hm)kMH4oC6:n\'PjfUlb1ofP~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 15 0 R/Name(Layer 1)/Type/OCG/Usage 16 0 R>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 14.0)/Subtype/Artwork>>>> endobj 11 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 10 0 obj [/ICCBased 17 0 R] endobj 17 0 obj <</Filter/FlateDecode/Length 389757/N 4>>stream
+HuTKtKKJI,t(݋4K%ҹH4J#Ғ(H
+wqyy~3̙g<3
+
+
+ShHht^ '0߅™kYXY9Yqqpl'WzEE$%D>,^|t*K)%/`\ҫ:&D [7dplDa5|mb4,yy{e5 3⚅,t+whlA   m k
+xYUH&%Ȥ
+qO'Mz3KT@v[NUnn^\o]abTrtlmE]e~U+jאZ:zaqi5};CS[\_ۆwCaQ1;>L$Lz}4:%8M7l̎Χ/}XT^]X>\Ym[n!ycskkƶʷ;v{pIs0Xݯ3s󝋒&$WWW*)!$$%!e$cHNOAKIMEq ƕ;KLw@YX;ؚ8^+DspfKOTCPpJ%D=++O%$*8IZ\Z^UK_wL"dx]}
+W3gLC#u!MMMEvAms˔FVNA̝GLwA̬,llؿsݛnͽ+!B²"<b4$݇kRғedk*JY*/TS'<SV҈ԌЊЎԉЍЋЏ042?M4I~fs-,󡅰"+uMm]}CcSQ\RZsvGiH3GFFaGDƬč&$V''g$FLG˰4͂djikhCf%VNeAqYUڪG^/Ճ[Z{Vڱ:;`=c}nK  Fv(ރ> 'R&k?3?4+:6oT\ұڿ6VʝoF?LT;:>::>:;eqvx^sawݥʕ'_
+*'[j o5[uR1uh`fm$1xJgBdrltlyyEe$feg-g#`dGbwj0TOC9; ܨݿxz6zx8IP=A!.aAxۑ
+\lGNػځNāa5tNzlߴS<H6*<a|kz|CV|Ǎ||Ik|Ru}26'~2F-B*ojQ^@5zI`ٳ
+~2gK>-N}o2ن N%է
+0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~
+~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;'<!_Yl~JJtS#]'FA4+;ۊLPf&ɔޝըs@夏]0E+:ևSS 𧠨jVPp,<XQ)XVl(Js&J!K{@BE. eWqQ䆓~37FHI^\ӡ+j&YbdML{#)FA;qT0_ ^9IݤxֺƢYFh9ՅhX;Jln+jġ(m,ּJ(VaV/aؑ@Q~.8_]7]g|F) -/MH|P8%oFxC<Rl A^QlzrJAUUd*N$i܏ #v b7F*4ނ
+ pvix֖IoJ۱#
+Whԉl"kx wVjGDz*ߜxW:ƩdP$j4WM[,]ʫ$W$I&N}7¨ s1@9TɎ.EzNDf*uwr *#,h؅"8=N %=(pQu9sLӓ(&wھ?ER AHi.R~ Ԅ6:*tД3*۱x#m?r~32+wp6yXaTO#
+U¼<_)I(}W2SX Uw Mf_T)?kYYFK8u;J$þ*1T
+.Jl6mHju,bU6+s hܸd-ʥ}wi
+{;Sm`vؿ`~?ga.
+3Ì{L^WYe4]L<pq޴k!G] l
+%ӂBsWď[~}F.+}Wt=
+Ke&,^-va(0 ttzSw0D6jtl.\lVդ)-g [ѭ'x||DDߵvwi8ư=݋bY
+TC7jKIX7
+_L
+uR_,^VS&aR~PfLL_Dw*`\-9]q  TI6)>u6 D`e͢/xqY%9ʜ;åOd\˾P&eRz;].R<oΡ]P{?: r̨\ʻb Ҥ3|m s؟W9oZt]RnÅ\cW#+nI&gyAjsN06HiD'@J+a5V~cRI̫vwtUc[3+?F|l(iU^+O?Rs
+1BvџnF/ BsGMY9>ܖ3ȗqI ڣ5V_1ȣβiJiX0WVH[8g
+n3 ` 38A.|f|ј0I6bv%& ;Y㿜҄#
+Q<
+;/ԱJB"7t͚,mXdھ^;촞&s`Y"Y{>Ɗ.z^48e!R6}vcMiozo0'=~i,3:?-?oS,9w#ROa; ?pB
+֞IO ݟe#}ԯN$\l?], y,>&Рq]yh0AqK)ĝBFҍcH:-h-ǟcf)K9T127]qEjL<>h;|U
+dpG
+ƫ`&!8al`83>.qɂnA9
+; `HByg KB*k㰗2fF=#OM eT?
+mTm_OBۊV
+wnKܑQVB"Խp *+تED* (o B'{pwH؆ʴ*JѪmA-nWjGEޯy~~?rI^WO@l)ƶWgiX"C#knA ˻r)b!UڲIb=>0ߴy}ĸB)H[Fs V+̯+Y(I(x&9JAI'tXmyG=X[8TK)2<TSRvxlȓGO|g/{>4/gRFȶ&A52 uЯ*B<i
+ar>>Ƶrn[ɭF
+p-1z(=f)
+vě92 w u煼ת#{P6+Dq3HIi%BCb!kc5&U ):X$܎[b2*@PkcӘdoTB_L1Uwi")=2#pI9,RO>T@>;bnDPuCfk^^\G~ oLRcHqܮ=-8^5Ońy*9:-\g8:T<?*C;[yX+I;lRL߭$DvYTQ6DyVmfy%/sIsmXP1Lռȭvow)QBb_
+ِ[Ak]J͆VBM"{NrQih
+ET9ٲFWcm$="G
+}Ke6~֔G_MDԿs` g]vp-9\Nd{::gvH_3fC;}Ɠ 
+-"{⠇TZG R,ɇjࣶZw8j ICF:b [ \+?
+oA n'a
+
+Oj0`%|^/si_XǣLqiw]IέD"J!y!Զn0R zWCcchūK_R [*)! OSouOշ܌WzeWCaϝL/QBo_k/cg&MV?֫5z !g"?wP͚IQ"PAdtE)q4jGsn{" }eUMrkzvi89C}XLB1W".ꕝ^M t?WKLwDP]tU揊1rJոKVGM;phշm v>-wgFN cIP#qWI ;NٶA)H~7i thl~~dzY Cx2>*c&mb{9f1X*L #>
+ V@g蒼]7n249=MK% ;,F\j 1klZi؊ΐ.|Q9а$_.!;̿lE,ɥDi}D3^a`Y5g{J=mɳy3CM'jM-iЦm n5? SJE+U~ ;q.tXd~~p*QeS%.Ћ"ưBsZ6-6[\d;^z4`;64藸ͱw;|+&AfLU3XTm)lF'l VɺgcGObbɜ9;v \CL, >B?KGCe"z -@EH</s=/ᑍY{Pw\L1A |U{_
+\wJuY/|ϕd<wΤc~ώx¡#dg3~g‡ xT2ȵ6s3i75ƻZE\1\ɺWA' ײ M }?;ʂ8|R0S#❣
+5 El[",0 e[Oz0~lUO+&xkPc|u$k.?{Qp""kr6isVa=~@W_
+.<7
+2#h?c~m'rE_xs6aG+K 14L^kUp^^_
+ K*/@hUv$j!@ vyבm,W|-͢ ^ ~D_􆭍"ĉ#c禘*X/Ϝe>|XH;:)d9gƖ4aBQ4
+ۯBU#>SV$L-5gV ϯ*B#} npþtdU$Db&$^\^&Z"/˺+-}%Z:}9AYu rTlP0"~! ͚*@5K?߫Z-P=j>܈[O?)a5
+?WUsy5^(ge${Cm> "Gգ+$踿ϫ& Xw8?g,'ō="/xNM)'EFqrf CįQ9ZY$r!6m<YZС.<V^z{US=P
+kX%3xfjn%^i𴵻s30qh$`kܯD&
+2#sL4j&Dib&,AMSUD9y
+v98jc7MI~(sL#}3(M^
+OajX_84V(N-{D)F0$!oJdv/_(ǀUH8B
+lz&,f^_!?l2x2Xyń3D)\
+EVD<O0Vbj&mLB2Z܈b9U;n6L0 +oˇCrE.~>TSؓ7X?MM!ԼuOtP Cbt;iްa@gW#@4c9.Do z2>M5i~u0 qswQ9ǸLt삟Mz)>kɝI;io"U
+\Y&kVx녣391ٵqQ=beMq\`/nņ|2͌JkzDmͫIR4\~5NlօKɁZ]TC3l̅D3jSS)tWw$IX[wV
+WTUw^PeUhWE^ؓ~Wchs sIg`wgs (5
+x}ЁM0S,rV+ KO&ƈ`;E{irf0
+-c8CjL=L1TDJ7>)BH*cHY}~xI,{7WjWާʇhg_YovMKiN> QRǧ}AQj^G syJG"?txt,L>֍p_>Po$^<%}KDS4
+*S<ܖyd;éIJ~JMn>ȸcI6uɖژ䩊i77_5W2' 9t^}/8%wd
+A hm45
+lك=3_2~OgPs
+Ccd[aے{<ХjA {! ߲ۓ;O'9+wEHE&JV?fiӺ j05瀶bhWZxo=ƺ 0zhK5mov (YOut;e=R*yMVn,$v:QڳE.yVl;svn,Wi.[@34SD_!MF>J柣ND @$Y~-CMu (+lBpБ^#$~2è /@̣6 3nh
+;۪.3Fq3\َvZnZ"/vNFNJ2V{#ΚVse_쑮Ta8C¢!Η>FL\M{5eH~7;F AB?VY=۩Q i9J.sӿc%FVbdեiL`a)kD=W \ne>NX7Ƒ†2IYf-to7/~Uas[`W*v3_`~:k
+*
+e)DDIss,f_n6":hmh+]AqñQqSa9{~8|~bh6GZĠםN\h+(E30~kTMGβ1:zka'LG2>,
+=@Ihs)HUOeX^m7R7~,, \jJԌfͬ8!*]JR:WR]Mɚ PZ;JN.8ɦ,[r*Α]MM"waX)Lbjd`>:?|:?u>^G$fa.
+ʥ_S%ED8 J=ĕK{6r zGG Ui<Kg"^ q
+I6vPWy^,uc/
+pt +;Br\ܕ'> -vCNeʔL-ʌqKHr 7I d<BgNelB^փRγF2AqCR&t7߄{" D9u)Cw1t}?"'[7o̩~1{>Ru* ʖdClutqf2[l~{S4>J$.nQnlP#
+DQdVd24KGMvU35KJ~4
+;^j㛑Q`exH;J\*`l˴Khk
+&tF|(8VǡܷR:ϳoG*UjSKknRgl ޅ-6&Nŗ7O4rGmO[du_TvY{ ̏Iy\aRKy&P7ݪJ)l"W5{K S_j
+W>/wͺh4Ek5˖<1U[tD>Q!.kR涧7u
+l/i^3;iڐ0sĀZnS
+qW7Np:([568ViAFޜ~h9Pldüj2dO
++61--1Ewv =JCHW34܏&x8,&#Rc3Dvz6RSyu_N/nmكvT֥Y˼?RFװKzn9Q4gC^5l`P\ܲG&ޫ` 9PҞٲXr6
+V4,{a؄\tcY`]lǿԾar鴯؏=b!&Yb ^[\aYt$w
+[R)i[{$7f"o Xp
+zBz'hO|Ō4ǐ|-j
+:}̴a
+U6DUe"udPO:]x+GB]q:ʥ':-ML3\F$7K3
+Ü3N|/'O-R_1Vh&׺ NPz8de 勊ZTH;XQ6}+'h_
+[Ym ~u8p`6*I ߕ`S88sn9O3nXOE /7f^lbN[PBFO.9Z_.5>F S̉R'}ΪѬ`_dX|{dHXԾ3QlZe7PRqشO5OkZrx5u`a
+DPQʮdߓJRk=H+
+*#u)h) )B6s9߹瞏HZGzGT"93hDͺ sr|b4y $TK "$I~$v(B#].qi?CN ~ޱ|ܷLcOnT~vxj̦5<.f\K<2p:CpSy,66>|zC
+
+T
+!z@#(T 6 ^!R S#>E/Sq9z_ /G%ӈ0C9[ۼ@(٩P ,}XTOkpQȫUG6 x2e,>
+gS'"b'zL=N)cs*bR)W<#S 癛)K
+&L\9WtW!Y17i*%wJ_ 閥nWJ!p-0T`:K6B+SzlL,~J#ZLHBEe߈Eq1
+ڸTD}bB;*OTCnՍl$OYQ0mz7o9NŻ|hDV[Ve֩b7YZÖHl~I)ܻJ5oOݑ%(,hZGҼmRd!/NEWutV57z;jjs^^lDǾ0-a_aL؁w44簍b^ppi&nX uƻ-݂ -cY4_g ?jGIfH %J҂[%ϩC6Oz
+#Q`K|ͨ%cj/&\: [Ft^Z
+w"~>< 8i}XT8dzQVY<<J=Eۏ7G8v6Z:%hBò94^ԥm!1OD>p%HG/Û`rq;Nm~Ms\/Zh:(MXа^F.꜋.Ys}5`a
+|i-0Ws
+Q_GpRjy0׿tjT̎ԍD1څڍ›N:ka? 7ek_%]a;זF=9-b= &Mm0-vD'^j+/5(er^+EL F1$1KWE|fOFMKm::1`ڥfXЩM*i9
+l?+Lw?-Nx͈wɳ\C0瑃f sM;iđ`$O0z*RٹB9@"k5v~.lB?u
+^DMk,2.#ɲ\!{^I4Ԉ.~çlDcBU\b"c jvJG|H`_2rHѥ tHHBaG :Bf{'9
+[jaЧe
+&hz6Fdy?>gۑx&l$^:^nx-'-]O 5@S Uڏy]Tu _,zWPT|BJ,ɕ}`8ߴy?p7gˢu\JO(_vOUue4+Qbi?A.jCxyRJ駥Pt㸲rTfdd$ֺFR>PaL'v2M*׵T]`W*cD*hAe#"ɆKO9JKL2J( KgK3jԉfZnL5oM(_>FOӹGi}<@w#Ndhoo4Y ̾Fٸ2YAz$W֜5Copli\ 32l;a<;S?
+oe*
+p}%
+K"G* yE%S\#V9 ۦ24=ZHW}dUU$U>*;$;d'=NY ,|ܶ34qT=ka%hs䬺UX7Fl[ o1apuxf9QGk4;e
+˸7荇5xB:yZdͫ,`2?_a[0~9iY Fs3g Ë9u<,yx87 1Ja,O@/gO㔛94 |.]16'^
+.2}"!<4tH~(-r25DH@l"K濣,/S}"+~wF}V dRz,:w&?C~FqJ}JݢJirjzEgU#p]ZF%+[Pj
+DRNXA\0JSH307͛73 CWc+U#r# aQOL4Eљ?s~{sIy?y>ҒLָKd-ޣJ1v
+%sdR۔e[$z,Z2H5[&Ht L UO 췯<uɎrEᾀ{i,8+ןwM2O\7I8il2ewkv"9kr6±U\R*qoGCxxy;:jYE)aΰ!Xidj q(8S=l(P9Iue&k)W1=kZb;8zBC4ڕav?suUuP\Vf>+52j&P6uRɮ!
+a+rk!o4 `ܗP)f%VQTF(Z]s,TR|O)O?ho# ]6yл)OU,F٠E})gsٴGyҘp/kw~˖I'Y;TdgYU'I8@F* 8 $I+A2((+y8OϋWȗE {բbW"@}@C׌teYgvֈHofE`ea<oV F Ck2* ]v%녦Ly|KJ3PnW(<
+2G2ћBjx$Z-aV#s/h"K6WZ,ɳL90~G"~45"[K4hqɕFa1U_KĪ)P ?Q΢9ޒ"zܮi$5I0]xoܬUJ&]:QS{%Kz< ~m댋/7ƣi_y
+ I<Gdk~xkے1e'w7۲Uyʪ\PxVnL" N6tĦ>gbN_4!/e%O;mhtWv6[iyFy4ʔat V] au #QYm3rM/q{~tjD 7fiɷ  . =[n`4qShBrx_5wԐ %nQ~x'G[ `+qb]Q2Ըi=UGn~ڋJ(Aݪd E7Kz +M]!} jnh-Cզ_魺a٭Dfrj6$-4nUZF)Zpux'@]U/ٳۿ3Ug`iU}ڰULWu+SU[;uXJPvOŀ{$KF,qQruH.}imfZh~atMBb0*iWC䶧jZmn[nKfi c+.&oV.
+Z>\oMkCZ8)*b
+~~7<NzQT!wB,C)kE+ +#6-)p*㪝A Aocc~\_xb5ӼzgQu}޵zGeX~ >TSsV6i1=2J眆Jh@ Uu;7!0
+߽\醮%-;=.e/T7D$v{.ʫ|ZѮmcDֲ+-Cu_{>1H1]"D^nR ٺ:E3[h9 7TJOW+3 vœLimc @6'[c`Ǧ8v!bR{1_ӵuoPE2\@;4"mO m{ ߺE1dA}C=WB}[3']\PJG5VmnYG Xyahd'J[U~ vWۅWo]WnGnR9H7ѨAu 1vZm]lUrTVA
+sj6lhm,My4A*0vJR? Ĵ>2C!*#q0MJ!:ŏCR|dFa?2݂ch3dBzSIt?%LmF[AxYGҏ0m;GY1űh%[sጒ@9 q_8G>r Wn)jodEzC.qJviN&If8bg
+ v|sd%:uTf&L0~p.(RU
+; _)w%$/ t#
+~#u`u[w.qsY_-*'̳ɩk/)2* i9$7fUzflc9}]
+</BིY%V(q/ܦ,Ǘ 9(B0jtI4 S:qԙ1Kh^ChhCF( ||y0%o:TA BQyPI\;hVʓ2J
+ĥ[Qr_k`9h "?7<18~Щ t]Z*7֡^%Anj#7L{Lu77]ČY LL;
+i\WkISy!KC:31hZPf:߄0C>C{޶$tR:(ϭuOR4$=jluq1?פ9Si|cqF!_z^SK}`d%DT wV>;
+5'\GB ćd^ux+[^%e ֪pxE
+ 6%!Itި@Ҿ
+n#(aFq&mq3%\g?%ӆM5XD3b$ʁW ƿ5&͔D4®KcᏊ .
+1Zo
+^`~¿`6z q aXǰ)Ӽ܄'84 n"Db.
+ڸh>wMv^ c8Iƻ(~j?
+eoyl/Dl5Żרpy1ܣܵ^004{ .%CA22dWuQ>okL<5.ſȠiffh7S-|^TjX[wCY*sG^1Ve֗+˃L3 /2y{+.;CtJ } ->٫y6q< <bs
+bk*ĉ_VTm }D51oU
+0Cl];Sk)=RZ@[ɷ5JBeǐ$Ni"0 -úR4H~9.☫|Dϸah
+QD~0T.>"x*O>酧.Ey+HVy55RWsEk*PxEGB;(J X(8hiqmh^ 0`}_APWDLZ‹]<4zG֦`oyZR|u^gCF#nr)Va5ƪw9njyIt
+xI1bIy>}-AگOShKFx6xqqQ
+3SU\ka椚̩Di~ ?{>J3mtߐZt]YNju]ɒQYlZZsNѴѷW>Sݥ0Bj+7q҄fU7m :8^;#eտ+*,_CY3MSU*LX.jQȖg_IWJ5a"9R'C\y׳qH)VU-Z.\+Ѥ/aen/|F[?SPk
+^Y>VH9 &yaIxQ<zU1\
+ٽl*7}hu;Twfa^cnYS q;)oZuG!uTUOrlk;HF-x/,u sm>fd}+]
+U.o.=q-y][viRgk*`/pLBu+A@[)&PYQ?im/K,Y
+&wa7WAƫXUr8+}E)oVӃIÌ}qZlh<gw
+A?=$6-ޡ|,)!<*ǘ*z!8߀ϸuPp
+E ֻqd{q׉;
+NYHdfttc #&vPtQjd1o ­R)ʽ@}<7 &8wyybH04͂@>
+EJ7T|4'r41 ns#?Cśhk6/ϻ7n HITc6߱=zz!?z_)c)ueT}nS3&iq4rEUYX\K88IX`}7yIi
+SiGr38Eiօ$f l+n.*d}0Qe:FSS퍆֯SȺ8~%;
+$ m:@l(蕉9 Ea,_܎iǀ/O I4aS8!%UJ8C(&2J:;{Mጫ~JdmrFW jgY?;s8ҀZ6\FqD,H Y'{$a@Qk^жrh"j}+mjysәMD]_CJQw)/ʹ5״2s7v}7 TVS6~GoLF YHKmkv~U.+jpo8Ɖ$5)\R(gHm}w5jN)
++pvO[nHj͌%=h 4^"lq:i%S,P=ƋGT BULR8LW$GxLcLS},?E;8QE$?\.e!&KKJG7|_ Ҟl8!>8(YBIY`[}.Bb T$=U8Oŧ yP-x$]0_
+j(sOH|/=wKR` ptl>f*ӡuU<=Ts(&zpKA?sLo`N0Mq+~*m-~F7^5惬H]${|-Ҷ9Y&=X'Vu+^ϖEm
+Y/0X cAdPc_X VRx6b|C6^FeC]o-F?f7Q3V>͝yFsy]ݯMF͊k^NնI#FZ.7ƆQfeϫCJn;AjB JFw
+mԗ6t(I5beElXQ͌ i,)6QS 1zJezVBf ۹ʹ/ HQ89SnE%o-4NJ``,)~utyQN]vح
+ YM N| _Td'wa}0Z<9|3閗3~o=Y>l0Wb=P1jmE XR[louv:.C=;.a.BřS[nWJ3ǟN1='\Xr8۲:KXj6e g΀ap
+SЧ|NWP !o-t_ nyV|ؤ賐e`HʏE=>\
+@?^fEkoo\fyJ8zΰXmi  -Nw}OYpz&@>gݪHc. ]7Mz#fe"g\a@\qyºJc\3ܔ r'WQVE D|PLs\h_h#9Z-TdL>˼!WS/bniA3.1Fx@Ǡ3UNN^nPOZdt<jGLys=>vWO&-8ךshveSȉ`wPU_cař=շ}m`<<$+UV66do88{ηzkG}ڻ<<7\jvg!5M!w&GmpfSgO3x?
+wZsLRq/~lK]QV:om<Q' R]AMXyu ^ȩ $}! 9LHaH8hʡrTtD-*fY]]wuu[bgg޼ߛ"ȹ I7HR7HBHudt *Ჲ=eJtj| #TI/W?{ΝO^'`v'$^E=7ITF2˵7-^'Z"[x ;[U7,QyWrr9E6cy'I gIRm2
+{0K,^H/>>G@l`T=FZnZH ѳ$m¯鵩KA3D;w7ŏw^J<`i$M_x8wU-,/h!pbP1|*k _U;
+A>ʡ <*g!r)J;ȁ&xK0N\B&Գ$bԍ7fpt(0H23ӲG1d?ź
+bVֆ|\[w+tjj?b7hwJCmm#b.^VBDRb8E]4J 7LGc.Xd/a&ڎ @顢zQuֈ4Tqi˽èb˕ 43~,ymoθ[0
+l} TCuLBt 2ZW>Eh@+[Řy0=
+sU"r];û](̏{e E=ma^2'FKv~.Оm0Oj(esߺ Pk*!3IBЦs4{^|{6k\* }XYǠD=A %$hǹWǂORV UBꯪr+Ca6 Kԣe :Zڿu6&?W&k).]%],lb7MX][H"}WL)RIrfr?AƁY&I~_IB${XlZXE&|w#؆`_vߢfu3fm89?9
+̟NՎ`jz1*.@爎܋`oْJ_+-
+QA%$[H~}{1fKٲ:HmWS
+ëd}2w7 j< O7i2G;SWݒ!@YsZ~*PƐ6xQܡ/9i7cGHVf3R>K2jZxH"Z")vHD} @} YJ64T(P_(*C]miSJqOZgA(ny8}wν37;?߇*x"D6HaeZ
+5K e
+tE=H\ƒW8 72ym]Ly 1N<8͍@:> >6pӹ<AМ*쵮5M
+N5gܿ]7cD!\O6N(bHֲrt1guN'wߢeGrubJ1a#gi|Gc" 'x&YH;4T1}Ϯ;cV*ܲwf|H2;Rl{K*GZPg׸z *ۿ?ʗ
+ד:N9uL7o|jBjEVQR!Ū;~;ZZxٲ
+(񆜦qE蠟V7:bg3h\yg.:O07Ңb4=NHdto{<WZgHNRRZ\sW*Zx ƻQͮl<ITs|X)c?p\B Kue|0|/ahB|樕sEGMsMd?*G,HRg[)|3CQ{0bIט%9*XRMU)+^ P,py*~uRHw,r~L;_vN"ۿ]//S{̑Ͷ^0X 74㊈#ޒ{Y<mg$5`Vs-*lۻgri˕[ LX#DEhgq!N-_c YPa !w|Em"PDOUHSr5a+[ m
+Wh*¥{I/1YwûJy׸jk@p[z3*ReRXwq30u%BAŒ%\NC)W'5꡵
+&F+U,d5gR "JrVDBSDO]V[EסdyVӃ1,+Iev"`WrwKaG|`%+TVRCF{Ys*Z5
+jQA4Ӌ<>$.7$C$pA)hJewT*FmKg-lm*{{v\ܲsJa>3_*ݑہ>V5|WG_>RR_YL!RFjz S5fځO2< `}I\:XiZkRH*4[(xX$u|I9̺TkVzl_׼gC%*wXR nY)
+SU.nk.mcŮ)Rxb
+ΆBL.?\DCqߢ7nO(M&JOiݖw0
+     !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ac
+ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/
+R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 :
+ p_L7! }tfUA,
+bʀ}SW?CN<-Y4 BYpzS)j"{%>64;>FVWm
+S^Di*bPkpة?%"1#!ϼK`L<n-e2*+) X䥂C@v2l Q?(=0q MzǃIz7MEY; Y@K (-
+XJ4^Ƭw/I!5
+bn#FO
+)ݥq AßOkV^Bf8KĈza>p-FOJ*Yr(".O'qäfrCRJ'dc~h!€?`}WzBd;hѲGϲmT SAij9<
+ߨ%@`8xLTqė=,Mk $hJdx_r̰gʱhtG,KytomVK0X?R<J%mq<UG]IX't9E
+$Vt
+Fgml0L1, y+Hu2f;[T0BE{:qntoT]okI,
+ LgV_R:Kϋ0dP?= vE̷փ(M4m\Tk׉o,H=Zw/EI-LQ[ 8F/g֖'$?[u~fghXjݚ- VImKՀ,%ibQ*e97WKMYiHtXTBUDw-49#iԗ/r]hGވ/
+
+lD2 h‘%TTT*Fdw">GY?"[f r5ʊ4`TAo4H5rWS8Xy;$Yr'q vUPV&4m/5LJE:S7Hvy..
+,e: E$@BKr.!{A$A,CY[EA;| TJkU>41aƜdcT.Us R&BchR)
+ Pd;ʟHbl?1;_:i^mMh9Ӝ+,x+(‡j3=P6u>a}&b (0=.À<2&m%u9_~zL!S`(6͟>թVlW䨸m5ypg!2< PR%wC>ubvbF.0UK$K;؂P,!rA5%\v"
+[2gwdxJ:_'Eښ_+^Cژ I! v,V72UJLNITUKɎIy/R+=+(֨v6!M @PB%R--3|4-)#ͯ w.ܘ<;b#;*>$eG
+>3"و~AZ$xOUx f𜓜x;٥Q h X(Zx=`dš 8b†id, ϐ!enZ
+b /޲І2P0~ +1baktT
+$Iⷱd`U+z3 8"}Y\E^\Qܵ)<&uZ!FM)V"ڟ}&à/ ď 5 O546PW눤0 fGlEbdc 'ƪrӬ[{K("M/y%0=zFBx}{w6{Y50%,40R}ԓvTp>K@fR$7HU( /10f<,1BS>٨RI3#&&pa5j19#yTH9cI[էjU̟~? +7NzM`k|-kqJ}(Ҙ2SaӼGi ; b:`uǤayU}T 2Ftm̔%OpuDU0m~L-_:qWg0~huw-] NVrP =<]x;Y1iw@8,n\(zqb !$zB&5dn61Q& & CuЎy#c%$7]w'z\0Lk{8<Oz o%4P˗
+9hz͊$LmxEFGO$Dcn:0td#*vT2.q06vgAԡn3l'H:<@I˞8!mRSs^Ugf
+~t-"Xnv&?VAG+7WhKDYZ%4YFg[ C_M6ЅLJ!)9!6-l?@W ?t`k;p}
+P>f{i8DbMp/ŲF_<`w[Uq. Y!'i7L' Rz$v]c-ީ%HY~ٕ 鞀ws{)Wa˹ԑ`{[z ϡZ& z
+- U@uBP.8jz B{GtϤ1ޕq# ^o2N*`DZm錞c@QY@Oy`ŕ^ )H??s %J@f-H%{#}řPK
+'£ +vO@%7_*Z-r*~z Ց4!wBpG-q.a+c"wmqk=WfB +k^0>npu5
+19~(VZQjsfb5~Nl, $LAE \Yv3k"*Ie.gj4uDk"*T~~g^ ~<|1cPx7kF84K(/AI\
+ZJAFqKq$5GT#.a<C]szO9@yQђ-DRPGD{no^7PvUvT_F"Te ^9^9(Zi*J|1"].g:ETIFzN%T|k&JlI3ʌ+r^qfSNMXe $v{ꢫ?IB--Oi0iXo 葚T\.%kR&-?(m=?~3Jncu /mS<Ð,LeH:i_+MSVa k@
+49"(hd}+ɗ7)T bǪԪhm`Yջ s<-,@͋SCgZwN CUcW-JGm\QA]Q]h&D0Zvnw%0zMTXI:l<7a` 5P`ݰDhk?(b ?`Fgűy=4EJ0 GvQO4Wd SAnMC
+ұ|`7ø_vYIoRyYqE,D;&Q\BxWrv t [\"]Uˋ w髐< |Mc+ Z9(WZʳͰft~X)Ui?m<P ;G-_k&ڞI&ML<::͹7KƒKXѪW[5P7WttbE6ռz ~0iWűہi4 [$kil$VRc4ӫGk~ʿYQ:ٮHbFGX ~Nu.kfc`m f4걳qVP~:U#/bE7K*W0]q=$ܭ XQM52ymBS<lU
+ZҸLeD׊= BkLBRY^#zA%ڥ`r^'UIoFg>;1 p't.t-SSUn;QY(sў*M8=
+BHZ# GcDS{d',Utl=,}*vcr+](_1rØ@?A[KDlv'”o>=ԏ[?Q ô
+]7E9!7;au*8Y?Ң#
+"8ۺ?pGZ:Oȿ7ÝTԐI JAx߹rxn?(؁
+>~o\Ƙa3Ƹ2@eU*Tlmcӱ
+Fvz|"ƞҩn2=3["st }N8`1`Xi]x(U2\o[v1d%JOO&rؗ0ܵ9Yxݨ \Dm]=Hjovfd):tbdH9\ϛY?8 <%}dVەhnuӻkV3+(+$-#ՋQҰЖX@h-Nd$a>M3q"y$[Y@SgÓ=ݎP1)L<d"drՕsW DJ
+tb cj*!Aq
+hG|3j zO
+*π%2#ǓH7! ;v
+Ar3v*>>Ʉx\+0lkOԼ`
+kH>*ڲ1 wp5Q݌$;LvvJ1f3n*Tg@oO#9|}?V0M5.ۀz{" NK?C_$ P&B̆e>(qIu`|ob|_0l2WꂝsCܴLTIa?f(/+PIwB WhgšH
+" 
+"(H2̙dfr $xZEP>ţC~EF:}< \{
+% rH6N$(߫Nᷘ_%1]2:$o-8ȥ I-qt;'kTjJW^}kfQUr\ulNkHn᫂H*Wd6M2 *{`V%VRoJJ`+"yO|s86Vy8 :+;9ɨ=.qqѝ=ɥ^ӏwldG;<bSh 
+($p\)9D$ZYr|(4D܁OHʳ ;ܫv۱jxLr_r ;Wi nV|Rudܦ
+M]4ǽAߗnװQԈXtGdƇD\wQyR>l-QnJȲc/14C:'K&̕BOJ{ߴzfsW|F-q2 ?}Y[pXdY<\v+M{ir8~LJޯ vlL: ?@o[g`}>?UrǛI2Lk.}GpI8QRV%܂L0/PUE ?ɹTcۼfHs^QMC!)$ ; ej uIy W6#LMi9ĦͱP*HʘFg]mߝn+|X$Z6K'OQJq m(B~ljSuZ ťbhWP"z@UVJ΂\,<\HA 5
+ES!.?Ӕ#C:[6$ߴR2G[DUcbDx(M<}|y%}ђHmzyEy)9Didh(CpKoY9_\niQsƚӮkX36R7U&"cT4Eʈ0X,t :T/>Uݮx7F>QL~:ʥ#][eTS2%c Æ~EWg9i%3W4ފ:}޼0_X|-ƣµVu8H{YF"qĔ-F95E!L/3zLw@"FRmOQ&[#ZO/xˤr~9T00bܬ 4Pߋb>_nMFY%<ip
+;Rx@|qj#lj?Ape
+sHt-bM#t8f5}sc0f0 CcBKRmcEkץJH[ۢŚ<!)NoOCI}52 09tMب7B0؋0zD KYeRUJѐ:N::,#D~6ž4o1l`q5XU5G"Z4tX  cVu{_<9SN}h%{nԾ"V}V"Cw}t)b3zFjoKj2'Q9
+]\Bȫr1.8C|.x8~pGm<ϰ"iS˨ڠ u[)Ek+WE8x5 qg<k~[0n& ˊڮcAa Júg":"].ff5 RuBTu6u|;4R 'hNp\@I!Bq":*pX'%O$K#(}vW&$nxTeحkU^IkKlY+H;"^\#G_KmR2yfbI-ب:ݐ$;8$N(Ӊxa
+ 1"*.d8>MOaN$ʡ˖~ &($~>tBM%^i3ϐEf8UB
+ӯ_wCՄYK/Ԩ 佨/Y0y̸7.]*ѳa !d[m9#{-;W[ U$mb?ci3ؘsq6ĂT t
+`, g6$cN!Lp<b<Nz;0y% )" DB@ ;.a$G=W+vFv-|d%ݿǁgOŨ;$KFlbu#^$(b ,jdM[skxv͆c?sBflSkMe͈Lyi3TZugv#V'{F,8+5%\Y`kY oC,VQ"Bk5Wjؚ axhk" Aƛ/dX!xJ(}~&| h?.XS
+jkujVJE)swm^ VQe^*7cSu5.:5!{3A/u@v?aDUNCkH2) 1z%9U鱛v򹰗!k0>][#?wsb,4U_ f)Eď* uä6Go76ɵ{'CGa+RUA=@5_rgs1OUG*ʚO&Q͡4%nlc=%Z vY Zeਝ4? eC` _wvĦ10KB/*Brv4όwM 0r `$CܝGa6;g-N_&ɰ.` `0M/s\PMf`p3
+TYRJ3O)*+
+8"ӽ΃ǐL"Hڝk:^֖Tm
+KX_t+ =#ثL
+uuWK̹ u)F@jR_$YuBśGbQl+$,o8qlg!) n2QήU>Ytw(^'Y! %GU9
+qAN?!9NxlbO{eiYQ̶>SZ .&sbj?1_ǡPkٟx`дY!n6fVJ?ffon06l)7BuyMAѢ&m>>Nj#4J%&|E]ۊ:i2g0io*6zXh +҂3;1"2ҍ+O?Kja
+w%5,x+ z!Ί}|%wpȩxeXx|Yy$M}yAz5{+=}5"6~{άq~p^Q~Md~*XŸ~,LU~S@~5 ~+f2T"P{pUIp
+z WW} q(vsfv[wLP̨OxE뢳y
+;Nz11c{v(_| ׊b~mqC|fLo|[y[|P|Eҡt};O}1~/(~!Ep޵f&Bp[Q/PtہgES;P1ƀ(Ā!ހp,RfO6[B5PcE`;U1*)^!Hpy`f [>f P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i
+9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy
+}>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzr
+o_%{"bHk&9q\W:r&G%2.i6D1%~F+~ZC?8V
+2#⮪ ui^#v
+NL؏SEZLnÖ`=lva;(>̽p ʠ~[@QdF!7H$ #dLt!BOK*G-iCrB.UlmO> ,B2W<+367ߛ@ )۠&KO 0ޏ
+/hw{V\lsTjg?қ۟u 깮D}û.5ʺ(wM ұ=Ljeo(u\ yPXƢ8p2232"uh0
+P7Dg3I33D_)JQNdOm2ta':=J.۱
+s`d+uu- ǵiȵ\L
+kw/i&G1|91:H^gW@-
+}~s<xi'y?^WLySVzOH-{=:{2|)p}!g ~s@|hg]ORr:GA=^2)$!Urhn]RyGƒZ<23 )h!r7h/ۋu]jRRhGv:<ِA2v)҈ƃ*"-=rYg<"]2$R1GDT<2䆡)?"Yׂr+0gȖ]/&R`G; <42^u*څ"|/j cj_eU᪹h K$jA+mX7pM.=tsk%v\z`ij@_׭kU֩imKoxAq7ts.vp&(y(60{i[p_`qUrK5t7A<u7˙wz.yQ&c{V+}di$w_OwU_vxKkxAvy7͗z.ݒ|&̍\}[ 'K~hꭢ}9_}AU-)}TK4}wAd}7Ζ~..~' v6 hc_
+v|@Uvx.z={9)bv"evhwlEjx6wm0ydoyRrz?u|.ye}Si`Yjcf6̈hvRkycngQNqY?KtS.JxL^يaɉYqd%vgfu/jObmfPp>t(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2<Tyx,|~{6jtnlufntvTpEwFor+xF^Jt8yZLvkz;x{+{}6 h~4lj~F(l~LFn~Qnp~e]er~L:uM~;sw~+zf i k<~m*Rmo_n\qǃKtU;w&+z@ɮoe~giю}k:lnH[[pʈ~Ks:vw+yQdXfh•}j Շ_S
+
+x+OpOT+gxjZ@c}9`k`cTnw?+^5j䤢T&o
+ lEx9 {XfPg@C_[G=/5g4ʥ^E*z 5#p&XsY>>@?nC)HKс#Eu$%`^>[
+(?`~^x
+52[{F;Onݦ *C{2H<N-S2UruUKm5ųBu
+}3!JH$#h^Qv0qUY:ʫaZ=V.}VZfsy ֧MP8:x-kն(+rީGSIЭO wiι9јy&z8,k.$x=rmRMRuMb;dw0y 2֤T{WƊ6m|+8EC` Gd]Mm"WrS禜D~AS +G6W#jnA>p
+
+sh]T4I DGãTD(2BNlz9eB_ ݫ.#JUbGɰ Pc36߅!3?o
+0\C"dhK>مٸ:IFq\BVhF'$[I&3BtK\ D'`;I ["%#N\I
+|?a8+ş3"-Aש_ZZKO%u6`X{cͯw1 $+OM{'E],jz6+~ Qk a=_/E qbVk&S7<R5|m[NS< T['c֝"16`fi+mԂEh6=2%w \Ww3/VWxGk (+K6\Gk6ygfp86,W C ~8 yq' Sk3vIժ*/kffԛ]_M5Ɵ$Ϲv3\2e*^\?|_cj1xڶ+em[8@Ńr1 346=v׶+f5RjWuM!\7c
+ }s-j5+ڲkEZ5׺ֵޛc[GSJoŤ
+9y<i;MB]
+Y5SA*bPW#X~$u2ξ/1a+` cv&L/0̰;t)H܄|E91ݎjɆ'u/qvC|\lWjaCm^~nc==7Em+O^ |vd,<8LOj%= Y0o}ďvCBW[K&I>fg\"&]KOÑ: %ijeB>%j:l=T1e~/ߪg I0^YV)<^ϑ%
+զՏQS-WGpaθD8ߠ9D֑ՃXM'
+UJ]I"mteuuE)-3`Ҍ SoO
+Լ{!`D}K_4
+!Q\HҽzȔHN>uA-^Ჰbg%+k58W #wi+q0khcuTT[`5Z[`J &-v**cs0
+Rr_T'UtKyγzaL= zs#k)|OĀ܇:axim&&^cŽoIѓ`
+W82K/ױϬ˽^ipuO:JD:WtG<Z2]uyy+0H5W?16א ~u[4')BrjXG><8YJ]
+ ՄyiZP-|xm4rQe`dZH ;4SX1̚`wpu>7<dE,]5J!T%"7%: -+6\wO1=zs[ITNX)bOIUq~JY鮦t ͆/?wU[j+ϖQzUR'd(_XqByg5mVeq}Jsg[\[> H2
+%;8;2/+BMqvs$`ىY4/\ssi iUcdUafh6uaP&>%Cd>zES?+&e{\Q>+) ^T9ZPF
+r3L2$$x *,^-ڷ[]<**RI<E|N
+!f睥# Aɧo(u
+gįVg攷E)?n/ؠbdSu3QQIB`\C!d
+P,2QC[Pһn`RXYU^',|Y5G4-}<kCfގoۆ3
+wo߿D[D$<H׽kU*I#;He6i*80C
+P&h_2nnmMsC?w
+/8*;,a8sk ~!!@)֧&Ñs<-sZ•2EbTb~AA}Dʺ0S{{GaoqB͝$F8z*d:ٟЕLza:Jeaq T*1"}!@k˳߬B/lEy~eK\5$O=hZ͓ނ9 `_ݎ[9Ĥu2B\s u5=@Όp@z t;*+.Za]1lRSo
+КrHYKg<`7/|+4A*K֨81% -1w?Ɩ)r~K0;h+fg:"&6)rpcyB6 b#&l:w>fިÕyL/\Zj@
+$f»~ ^̈́:)]}pA(+RX
+*XcZ3}EٓDsjd9FK䛉J I1{V!xnK-e>7nׅ _Qg1R2Ǽĸ:@n\KX)'WIC0hݤ!XL}4l5 Vh2,?bLb#(sÀytk]:ibP_"2S&F ߆*:/~5l6fݻ Ӡv<NE"AMBI܆=ӰD!5oG]Ml[UZ~$g"HU(>(l1u;8qi7mL[@Wxl<Rs\]1^>g Y<#nMDyYZOEX;/C<_IfGuROM++c7S
+4ƊaZԃu Mߊ]>]o/m^&=Nh̕.g*>d_$
+]koj-]wz`g`@XRSZ^6uV^og~XQ 濮a%{s Tp4{HLydW)YU&R?
+S0᪄g :po)-.XF:e
+t&83B-(;^SedSy7yG^H@Es7<AQ|h[\jeZҎy1|i-<C^ow5pc P_<.&n;ˌpa[yy$۫j! ѫ$E42˚v?ݴ^wnYg?G9cK+%<qWŔz^}NV]QvS{q8ڷu)? WV1l%Wyjp0#>M']|k!3h{&m5&[KiK%}UEk̀u hT[*Fk
+
+?;A34VfO 5*DvUe_Rqr_pMv]{қ[;f4( c5ڑGdxEjO-n
+| g8 KٶŲ]{r3J(?ұqlu;S7qWA}ǰ=o
+nxg|GCTpTaH͗O0U`llڤClt0jh~pڱY_,x',IUjn\[M zDBb<Ô]T7S0Co}2%sF͘MQ ś!7fSѕ&.!mFk(+O Oȏ@ W1fG 0JZ-#=qb>@@gIxFz|޴\E=Yg6atҺ*SY5T9vh  %2{}n}I90v zRf8kOʼjVo:*xH3_ 6WWx4\;5juK::i7rʶYAd~X:J1<;e
+(;MsrlڪU[y5vw(k
+-OlHWeG㐣݆L9sŠFp6i&xИp0C2}TxmCH#ѽZyڇm{+EAaWdVSy%ې8bש"SLL14$B
+
+]@V99'3ի P?#0eDaS#[%LYƉUU_nFη4F/V[&+;k+4e[D7\~YCm[D4Mn/90:/[o`K(
+Tor M8FECwLhTl ;=Lt^r%|TXNdR3O>^G) yۂ2b+PgDWB;T+4Qv{9輵;!f6~/ė|@r~EM$,<`2+oMҿ$ȵk뤆)<$\nnu|LX
+$EVDĶt o \~6-s//E 2<뤪t :mbpVn(Q7:ziZNl*3miИ` snX
+U\Пbi0^Kc=!!{pwpyKH&Ș/UDg#M@1&yf_sIrŔ\ Bc7HexXltbu!hI
+&) ֩ršbps;Cu GFq~~c6RbO'l"<͖z [T0}5y
+AK]מ q\kPU"Jѻ?W{j#'rG^$U)~VHDTup7eÊ⚊R"I^w0^+mOXiMi-T5ȝ'N]~{e
+Cl]Eko%ݼ脦
+C_">h0[[tVۃw,U^|}X?4:a<X s%هU)<@ZQ/[6 . 0A=fxIҗQl3\PBoJ]Դ\>[3?,ЛMOyIOi> '|2kxo6<Jc^|5ܲZz;*,1M;]U DQ$6*ړXz#UfZ,ku)jFR6:*hyYpI~KSpMnQjm-+yɽM4q,t0L$th!f _yb qX𖠕@Fb/rhfZ`;k4<a% KEb}9v_Փ Ukw3H/usk`Ǚ;3$B4\+;jKD Z FFvEu{qcʰSTKk
+rS4,FSQ?D "u%Zi^,[U6Pw ԰S7ž$ !E.H7^üum[E^)@YMSP)'b^Eqc?'Fxmuym.͇$|OKb1cwWln~B XfOyDz2MӅBQWci2 [b},1Ew^kb)k,]wHߦ4UmϪKc`C!Zʎ5ICW fQ9Q|Uά2=-Id 2_M4 /ڨB>oy
+aG-?J1pm"2Vz|Raw~l8 4EZKݸUG|B1&T6;wWٝ]8XyWG-%r9PvX7ix*L(u==ϲ͓m qqZe&߰n=jcio@x/{Y/rpՓ-kb(nJ;7N]Ğ |ט 9^R,qi-j5I~Wfǒ;*~xFMuò~7S.0.rm4PMX
+d6͵N|b*4uvv#3֬ަqV`i2d%507Ӝ jx9x!KhF bLb4EzclX>eҢ(j =~n$ Y9PKC‰/q䢘&lrS
+-bY@X?(e92"կ)fm6@>_|Xȼ L N+VJ2v&ǂga:y*=>C,꽅zqwΣaVbP$Ԇ3H*
+|tc^7CvfCUʆN\A X)MȊQrK{Fۏe"j%hCi24.$ҲɹDӮ?2]HMtaPZ+C9J*_r%QNH4r{W) |em}^e ٻ
+.v_.e'T)V4(FoUgzf0=rƣ[(hGjKҢy}%]ʟ%(y쭬0L1sR1w^NJO7 نyoxõO`i0)¿6T@JJL#״C
+5\1(<U~
+B2iNğ':da9<o=:O8
+cENOri@Du{A6.ѱ>1_:, Jf?/LCNN*E]٭!mq=p)ݍ
+cFMH?b;t% 7r~L&3>ﰞ~6slD'9?6T­ϙ^ 5;
+k[}gX0^hq$WKJm3qV/f̔&|}31sO[9"6ε6 9K+|dj8a&kɐ=9wUͩ?|0,lugz
+CB'LH? 6ǍZWzjxA|+cshi#a43 KZr?'H:m2AĽ eЭdcM^k^Cj#,@DL2
+"pp߄CH I&d2L)xʪ*jXEtJJ]EZ_=@XY#>(UT#tgE UO4E]cDix`Ffw0b(U
+Y]sAvjfhw@A,bx#iu+E_Xx˼U-EW'_@
+`V[@-kbn_Pe:60lu-'\j|Dme;tHGD˪&աD!ߪ@M?B=rΕt<GH8Jd lMilv>Swo2Y!;DLž]򮆁˶Rf;˷-r0ۏ첸R}"?5#mk+3((.RxP{K$ ~?uX m(U$C[KIl9vL"F]C2q.OI61Qx 1iQZxle_)O&uZCj7$6} A~8zXmb|n^i>]fQBchJDj^ k]rou#Ih
+8ЂTc1)üW+-*kxueI~PE:LR] &t-¬^*$M4-bB c鎳A9ZuKDۄT}pp;dzx0w
+ 7 ? rlJU/3BK3hf@jm1RזD*p֓2O(Vv
+ndmMAO;1S`M-a6)N˛,_
+l[c.Hі%Ŗش+#]lcٶ$ s~&b~In^Y6-쪸ʟ/FRa` Ei|o$Գh:)=kZv6g|V'E;R^t\"ZW
+YnN'⢒LiK[!6bjnf$=+ *.ӃKvIchP*%zډ,1-pGsD8DC7x&X8e!j5kL4Y &Xq
+7pL=#.[CjϨ^wUOlTvCe]j20uuFfձʪ:AƆ"E*S'_
+
+BPT;} *~>22
+EOL_~[ g ,v,cy]zFl(}FVύPq㫪J6A$*H$Ρ`v0;f×9zL2ٞQC|QM5xzAR+Ԕ k*xGjsH%Ť^Vaݼr~Lȡ3h5$؋#2'$
+,FP].V!foDc&2`* _'ǹ{# ݰw%{2>aQ*X SV*5r1V/\2dL9x~dE ]0
+^z[AKm<L! |t䳁,&p#Ae* aʁ'pBr }1zwAj$
+,9Kͅ|-7\cL Sy rRꈼ_bl؞ҰUKTU|YB[3@S
+ zOh'7@nOPJ-yV;Lg]fΓ'Rj^[(Ā
+yCB I@l3o? qMzۨ{6Tև*?]FW^V|.G2 T!YHl" Iͦ
+~]tˑն:6^m5 +)U
+&G͒ҥU >ILŤSK``;m\ojc{.]w{]}A][UT5䄚T9"#֑$-QJ֙
+(R;7n^윆a:VVTST@e&
+PkLlvw6ԷU8{`>5#8-Eʦhc5Ij ɱUx(EUu=XU=ux}{tjG
+4a(=Gr(nËqZTivU肝 F7 :&|ؾĮȬ8CLNlG\nt{Bvx~T2?]ъ?:B': nAS+w."nG%PBRBz^MLpz&*T@ mHh؇Dc΢&ZT_
+ һE/`v0;fˡp;ϙ־A}UlK8SQC#kדtYFUVErAF̾!b7E|{e wY쓌E8T@V4U4<7IIiA(R@: j:8vug*tE@EQ*r 럄B; !rIC@V@]_ӇQ5<n.>UW/)aY/-Ry%F2"  InK/i"tY{p8d|Q\Đx
+`'yM>aATm#GђZVZ˪ݐETD_l }mϒdo8zPc)VdjGT *:YϪ z*M
+yOCŻReb &l[Ghmb9M%>]8!p~{gkl’B42?ȩVnI6
+e%2G-8o
+Naa␽Zfk@ 0,"IBLtrAlĐ  N9Vr:#Q1ha x!coDjԀE_dLqi&]8NLSNIS/)WKlƜ5==\[jTv]٨@(WKsm!fwO)iiLڤ?鑓#tɕOL=?ٯ9,o9̳t2UAP@C6-!d!@ BB6BĂQDkop94Mre9*ӍRMd0W:rB5*G1GRBd; ib"P'dh8^`B5yϕJ\ L΄*nW2b߭L)3t*E&' sdr* i@s?/=:Vh,~ߗ;{u15k}6EnA;xobhS$u,N%ɕ8j 'q/qO=`S)г ,Tרs=@o5-z$^˚Fk3(lUA?5(!4v(_uw1ff:w-}hXKvzqAOQ NϜ@:&z$B/ $Gc*8?z0;ߗ]/ZZV#sY]X&qzlKNCd P<dՋc1ƶ
+[oyDs?{how1,8 fL?CVAyE%
+K.?)-amU [5[ڜȺMtM0o
+y0wA6kloz=vVtbd.RC{,DŽ4
+)ۚ+Ou`;\ mqׂZ4++'8bqu2ǬN Gt$ F7 G,)O '6bgSo/+WuQ.mlc`rj($oQM
+0rIF?i#@I_S>8Z7gW-[ܫ J?&[1Ck\B"mф;[
+ 7qD
+$fØt;Sj͖%qzfg,;-^Q`-}"ҘGHv- 35Sl.J7oÉ@ 5pNgmwٱٙmu*ꊸ/#7H NH  @HB\$77!Px
+Źmzw,Fp h9voZͯwxpo=3b
+$ʨ!Gl03DhvYv s)Fh)-
+`Fm5{kï 5!>s^sUXt9UJ厓7YΆ-P7 $*gz0W]yl`\:XA>s97<5'&cE=ffӕDdyix M8ZH<WaT6TچhAgEt L1 ACc#VEvr}fNt 1I#7ܤ Gۆ
+r;at)ChH^0 uΆcp.] ~x ^Lޓ(qUv&ro(JeP <_ׇ{Q
+c7Rg4tFZgaCCQx!)(04e)
+T12Υf8E‘6G V^؃R(E֘Yՙ >6."4Fm Iz9)d1 ź F+)mju@a7gDfFiUcԝRڊXxi>6|XG/@@+$kaQbќ0/nMҋ]%:c!רZTxY jq4Fּ]Xyw?=5a'
+oPEiԑ9qͩ[ q)Q<\Uh.gY}WS(35QEJYj)zS h/Pk<^~'?aS| A :8}F/R+|cha
+ 4Y^HjZU7
+[C1 ?w<}Aw{_Kyē]Pmp\+ؐ- TźˠRVYĐ[t
+ݽ#]w̋Usri07mN wˌ|!WQRQIc fWlerU:Gg&{ q?
+n. |f0rg$u͚B869A$Vˊ:bVoi L,EUJ@!Og)Л@v4>4=A[+g $fy4"nv,9r1gJc:5J-AYL
+:J匞Y*ϗȭy5Zg!W6@@6,GDOMBӆF`+٘^-+*uj/iuUcnC9K)7hsz 5]Nٰ;T
+g9yNnZϮ^sws9qq.54̨&Jld2zY.dؓj0t=#ۀ{:y?ڈ-w~B=wB(z?1GEAR#Rƙ6TPfkG5^C s#?9z %g^t!̛a2Rxc,ip?T ЛVN W#E~j7 sZo_;wf .U/`
+c( N`+GD+:%Z}E2u>TJ4& *ow} u?zXcΑggS+~P2u.3MV&*1Z,_e%I#\iPpYRg/PphmsY}~'kGs4Tj`ޅX~>3en؈24"y 'ʸq~tZh/5kofصOa8s߸F_$@3q˰<R d%'nQq4fM+Ҩ|׆n|qjpCh#/ⳟ_cbQG0l
+%=+>>'n9;7^^^=1.5?jD'_X,D,Qn?t/J\p &w!ב0؋gTStZ*j| D„=bCB3WYx{ot}5[,w$ 4LBA#oaQQ\xąʈ}IHNK ȇߠ Ke's}*_};v$p;$p\,1~ ?$
+
+
+9~|?}SRwp^@YH{VDrqQ"Ş'VpoTU$VdDױJtzt
+*BM"{i1a=~oضR[ Q!q/eUV.yVH[(`IʪYL<SJ0MuV~٫@(C[=着0#?/0S.2sC -3)bg$395t2C!6+ӵkhC5Iu?F;;
+DF$L@ ;/d:!Zu]{wT *
+hc^3~13JEi颸r!:Aj$U^NMr
+Am-[[ꍏm@Ch[kd+>~r`vS!CkBD+Y]d=a&JD;Dlw؛7
+ y툈z6tk4 6֗7Z *-Kآ&%ת#qfB׆cʡ2 GMTC?.X [ZH5:Wt6譥dUEFIҬŋ(ZǗkxZ,z0= >=P~?Y9=1y~4tV$aix%A!jLsLdEԶrV!tZQ<s`
+gSDFd{W5d˸:n8 
+oմĶ^Ƿî:fԌ& 6-LzH| b?ӑu[}U
+^^_b6QYU82Tݘi-434o'iͩZRn
+ZoH
+b#1en ?#s"*aQ{u5k ixtJK}
+LjH
+0}0:[gAM vtv3tљvZuծ]uC;rCDD @ !`BBHHBr;\BZPXnŋu ؇}f~/76ذQ @Bbh\Yuun^R! lQwLs6H-M{#RpRʒKʓ7k׌MrM'?gİkS!" q8@& xw3KsޖG!禼:􊑟 %
+(Dh>F,AC~I)o|J"&
+8- QMxFeU>iHR|
+ N H]iD/X"IYEMo(
+g]Ytd_6]8|pR~ =)L}Uz{@ yf4HsRA:VPRX[CYqDu*ܹr. Y%3XlsZ~=*UN^i\U^,t{gP5y - AEr
+II0k&K;tWp}Qh 켡Ep  0'#@%'U<Ft]]"JQIeVƟ5 L:cmvҘRUo=HB?Mh>
+RMLp'ʸ~<xNPm zc\c]Ofylş]]HG$;zO'DM {BYLy \QFє{V%ܰIe'_eP[OÏs,r1F
++&woF|,earq^Twgt\w@~``S6%#䀣mI눁`(@z;@F
+;("a)^STS 7
+Ә>ɟAdL bc!3쨠bUom`kRS2i@
+1+d)VasYV.o*X0N?'Tg<'TZs{ZI=yw)=?S4О\ p
+Q#eMeXqiJѳRSFz9XFRwOMnUzwOqKqOV<mC!v9~(>gKx}E5qcu(:ʢ2 R^P)R @JHC"BE0 A\ gnև}99? ^!HyYz@-F*#1KcH9}b_Rh2/s/gf 97y7 HPa 
+r|h%x\N/bz|VViè-
+5(n@
+^$k
+$ub
+wk<sS߉MAn#6kHfǸHTAtVUհ b@)ŶeK D b.n\ Pbjun@if?Z_xw))J_zUB];ŔF2]KDHHhR~DVMIDIԋq9@>d߁zf0]1>F)\d7KheRUr:[Dx%2Q5I%euaYI+tJ^%(G-
+qJhMIlm"Y+q &WQ%+ŕm
+Tbs@@ӞEoܭ-~b0䤶2'rą >UepKyBBc^3XVVIqUz1 >7
+?lu?ov9цwD%HS2{31|
+n)c!5*!/Q)Hj&I A |s
+v02`Ry=0^G/z*TN k㷩a#3
+s
+Ve ˴?si1ߓAԇaqIw3SY*v5(Y51讆to40xQ9rl|Wӆus^Y~mKw|NQ^#Bqsғi1s̈9Zn0/GϷ`{|{cn[:6-2vk-oVZm-FC q4Fcqƴ(c j&Rߕ}L{#}9,Wϼ3 , S!VCfi}ؼþMGNK?z8O.{—`bc?[BD/b>bSPo93){J<#}Yw:W@F4 WAZY
+]
+zHMQ xzAԾDkW pN8t8@`s$@fka;PYln "b HQƺ<vR# 9;PN@<G{w>oc.᮳cً9 ܹ11?` v뀍5}w
++5wqY.棇xcy/q14o(v7kHx AAn8x|A
+<A$5yKiFb\ g]nyyʟM Sḗi9Xd^ gAF /SB3QSJ*bBgx7ۖ)
+_ឋ&QKQO”`}vAl !Oہ*2| v$S ؙd}һ"Rb%{Tϛȟk%S1(q7a2`c ,A (= =H'PAI#DB§ 6i^\suYbMׄ^ aT8.}"4!OnQe]f|i`Yi'lm` w= ADx"S޲L7R+jp$yt23mx#>e=1ı.${5pנq
+&+0ȋ9 55l eԄJtJ{UK?Mj>"k>G>EOsE7ڙ+2<b )׃א{A1(rhH<=fDϠH:XNKS2jdК2SBQw)봑6HV+c$i:F-P,SYr g2mGkq#(BC8zB]NEz7ܒIN/3au#kX]y2xV:ȶyΛk?T9>k1`0)쉑KxP{
+]D#؄t
+J2:xՙ&V"_8Cj71RuӲ
+6YPsMҹ>jY,BOz;[Rd:MRhg75V]={__Зsbc kAENBv?k|?0j78H89PE
+-aoPoꤜYB#k 5*a\pP&k,
+E|>O<3KbXC㟡m+y~oߛ`b<&Uȥ\59颦lY€VɋTg*uũ 6cdJ3Ft@6cv`^GKq;}^]
+h;c;H N]/eS  VUfRe $7eMZYWF0W-3|@oΗ l1a ؜um%]V;B=vB\pW-%\gKERSy*ʐU(E_0}&79 @͟
+S߮\tncuO:>hp{+!Z#9RM2Ǫ* KH)T*mN6M2յ4\DgB9_2?B p%MumwuL@#pBA^ ST::8iQimlY"YY9}^Pd9(R6 D)LI3 %8)|'r2$E9)yW ro?(}Sӑ) ֩ COǥ]%c7M5Y,iY!iFy-_RM-ϻR?{9,Rl|RRF$5tYqE7 )ɏ<ޑ)  Y4PSF5;/xWg-^f72.ԊU!AyW2*R/}8Bfzc%9gʥAgjĥ:NwJCrgECzu6Wzsmsw~a5eJmN qȈԪkRbWH:&*_V/+w_rDgfIkU[4Pe1vGO}MO@ٛK_omϕY' YwFHNM?x=G_sb:Uݔɬyɮ|ɭRAb/+զtU|J
+WmR}mNW)6'|cDŽ6%ňw3\Heܩ%w_J{1 GV(d2*uTnVyxիE5.vmyN5ҏ.b< >oDrZc}[-U$rD$j {.TB2/^#.SjПS3gi{ݒ>'Oqb_B]\~gݑ&ft{w t\ ꨎltz9)z68D WoZ?u#ꇗT ,iCzҏNF<,iQL?ЛO`S,W}ueyUL+vS;3$~S' j#*eߩ]o^T,7Y+O;'=#e4@ӑ/rdbO,B&xȏYhuX#wvݗ
+C3깢L<F{FxA\T:۴|O'w7Sx [ׁ>!rL:{NFN&&%ST˴}P<4Mt
+/fVwWkS%*4ҩǡ; Ra:6p`F~ 0cFnuF##G!
+E$Ks@9]0D Te8v,`X` N70I>
+WS $x9[LkpXBA{c7$;C#@!MO/ X/AbAh)c
+E0"Z+l<Wz/kL^u!Xw"u ~R6lE8
+'jp1Ƙ0oEר*F< ~L!f(#QQP/i1sk99= nmqb5_ 4!ۀ?P(}cyJ MKB$gsf2dLeNEFc~cDϲ1 vK}
+Qo\JhKٍU}_6HϵIӹ{
+lLjwxѬw݂{"YMв֞\;Tw}˄ nʦD֤ctB5YN7)S92 C'NEEC,PGI1YR PJ[rY¹}'}K5Uv Y/Ηg1c|I'SCR(NYd*R!Z2_ɞ*!hTAc2px3H]}=@]_Y0^}gwt# cOU EttAVJNSrY&U+UJJE1HaU@5ikwxN|ҹk5zC'KԘ<^-j3$/K5u&-Qp5 J暒Qr4rn,Am@7dK[>Tluٰ}së otxՕ`ߦ*P'B2p5 (\<af(+et}VR Q9#uL {
+OU+ڼGr꽳ݳҚ7y(n)(A=Ǯ52:ZVf$+̂J]#EOP)=@/q֯/qxpoӡrΟ}=K+3FNȺ :VMi ӒLC5vDS7<
+*d/FI
+ Œb#ngT-.uGܷ0n
+B
+eqqu1S
+crY3aaH @FVҖECm<$ 1n&x k&i}V3 #~
+䛙āh'#NwY<L[ȧ򍤏염̒v"k[6A>3a)X<,a&Fc42Q)mkD,Bg_ ܒZTO.P&6+%_e-
+ қR ɗ Ih
+8LAȲ5,2_*\7{|Ž%a?<ˏ=? JI EޢĨȥۅow:f0E4(7*Hw #jc\ [YX-Tylf"n(<=ŷ?|#jd7+'TJ5krZCK&<K:Z%IO78+69(8.?b\̺:M/꼷, Ք]r`\sH3A]iȶ+&vAB,IF"Irj%^N(P)5TLх4=M@[~̦#3+}Xlp\J~Z#ʈ꒸sB<+Ԛ)SMJ)WŤ2f=P
+0"Ĺ1eYaf>?VM63rz\?Y Brs9z!p2;ik#|r[a[!g=,Ʈlׂw1XWef ƫVD)tL^Nn?Γ8rFJF7qxg3Pr|UO3& S5`їƽ}/0~_5t<᳷9h[C䙆xO$_TN r0<AvRZt%OLc4@Pv'fQr9Z-K :: I=mB(j;jykNmxgSzl8h8]Q. ȡbrN<K..$2ʩTAT3Z@4Ra09 +\!ۊznzycY ɪVua yLɭ˖d$+22^$% LY/C'i"=+4 6?^r߳F ݵ[٧>󖻍\g'9YߎAZ-՘MOd%LM59U}v!5J@XĖ1fGyPdв<SV#AӞ!u̓neK8/NWE5JIh$dc⚋QMR|PBF/EbD-BfYk'j0ua3pG4L~źrg`0h:‰{;<CIǫ! 91=K¸nIBRtGaZ 3
+M@ϘhZ i$:d^ici&C)Q'q㘳?ܢ~"ƮC4<
+cK_ࠝ>p.O80v9f< smOvcb8fZp(%-$T,,5K34HDuQP"KٗdZN<9\vupdi}{>Q `>7ZNHM$RCÆGda+2ZB'pĂp2SHr]
+j yhC_K^hyb5b=lО# pQ,[8XG*cE_
+b u: Z34b(@,
+{*D̿D[!އ-L쑾h hśH 1%:K谺8|H!rP6 ca=,(^%~wBx/[bE܋=!9a
+;ڢ0xǡ<T[({*#7UMkO UG:n=uS] -yM5YGqI98R6k'4C
+k %D+t@1rwƺwVt {z?u7iC̯? WmӊK˪ [V곚fnPs8aPݤr LdSo _+XɜzkglA
+RڳVR6^Jwc\~qusBd '#Cݾ^nf {&c𦐑=N_lN{Z!Fxv f)`_)\גYz*eyExŰxh21v& uA3lQfJo`MEo"=ƚ*zU5ŗҩ+,e'sG*e35hS$N>ؐ|Ѹ#i{KcmJqkjobMZ:Oo tgw%;y}w,p>zݭB/M6小\!8D߲^7ZՐUPq̸%5:=iszGRUgcefobEf
+b,g":z_Jמ 獡#NvF:unrsԱLvSQpxWZy}&6K&w*簩2yCgu9Irr{A"rYLtފ#oserɁ`{&^ɛu6LfJSdSy:qMP\Tee`KBE~Cb2isjrqؤϷ&,
+"gf(`*`Tݍ=.ne4.
+3)fhH1E3ZQN|:렻6о@&1FB $T0tE,+`HcHdHA'S*z|,hgK
+|5;Gk :{nq
+,
+(wĬMқ\?'?z u:Lw~v{ S?xJ;oe;5CB"/oSlKlYk3)Nd;9ut3{ܟ1N|ʸI/WIs >@e@>AngkJXO]%i2Bӟ֯eǤ鎣2Մ!n 1!ktkk:K7J?(}\[
+he-/#{(ܺɞq 5~4&A~]ɭ ;˯
+& h'ey^|[-ӃH7P\lқ(ݢJ]wr>ע/Kj{FܕXRgkܴ?ZWLdUE7pQ=’_DőEQoQ3C:~AW= 1%ޙhFIiV V\-[SOxgWVS{zTg*|$1ZpqXqU_-khbOc/scs^r⦅sx!!n꽫QZM}y6Tvnj
+Ҁ' ;#=T>)2U>(I*ي.Q$]qWVS4)u߀`_vP@cMjM給`:IkOk[
+lZ
+ϗΉ#j3I%iCibVvr/]$8)NI</Q%JTIcH4+T%  CJ 2D 6Ҹ{вlepimZuCԡ(U!%49,zfF!+M]MNk$'(Ro""Y2uN$~A t6td)yv hfpyFOcVsTHvUDk
+9d Zj& )07!N.Dg\Dg YaL vG cZcq^f)vBqɉ&ʏuum5"*Np.J/MM)V'1RNl~T~PwF7 #EyByΜ
+UQPȠ(
+n P #Z*KMyONz;պTxl6yoqBi~W5+y;)-4,^h[E|fI)xҜ9?[bؔQ4u,̱,%4xPɄ۵LRτ6p{zS{aam_{swfUn\茝S/Tޓݧұ06Q Aޞ 8H&+hhqh2N8r(jr+lקVPt5smLa0UW&m0=g{6 v1nX ϶ܫ{@4h:AVl{x(&njM]ds}[$^ؘ-װ24h*~6LgsPfuG Q QР?8Pm
+T^e@ PtˍRxˇzō΋%LC7j R˹~ 훂#۷KuU2M{\~x%W]W(/`<*U
+8|Z ֲa Ϟqڙ29בōXΏKQ(vl h Tt Pt
+$3,cܮ
+ aPBzV
+<Q=0i` 4LOt=.a.ʰ"aDCE4TQDU8 cPf([ .Rn(ASxX9xG r09ACڗZ1Jj ֨IGբ8hJ*\'8(>M\'o<GQ`GB't>t b`8dLT;YR6*q~uF.J=QrNި?(KGyR$%zQQţGC1 0Vg်Qf@e;b/CxbQި$D*,,  ]彂w9zЧ[0OE-z c LZ`
+c16\0j
+#ڭaMzo0|?@uDЧj*[>*/x}P~|ݣ|ݥBY0< }c% \*fS1wM\H tdrtqƽ7jCd n]7{G}^kNtiD/5D/4Dj=|f~Rc5uԙqIDQ⊈ȾCHrsH 
+
+#xZʴiZԱuZ>sx9||񐊵n.<o
+il8;2-
+^S3R2Y db`<)2kjcp~#߇7]N֢ ]_B?TUo-8(x.r"''GZ-EY @܉C4h.35]."Kl :|2 \07=F;:m
+ڮȃZu(9O!͗d)2eA:r.RS4>5YMAJ"KA 5 *#pL6#-pͶz7Ӧ
+n
+\+k{'B
+נZV7n7ˁp;8]~QBi8 c>H7'""zBJ*'T"}kC]dR!EBXd/48pܑ~p֑ ͎,xx5quoC('u"4c )d $L.9t?$\0Q ‚̷C|n Pݠ}f>g#Ѕf
+
+W(
+WR`HR~E$bP
+ev0CKq'@7' - r\>&@~ aأ+
+<<rU`E)zLi ,a>c)̓*u96Ϝ e^*3WuZM?YP2r}mob ZfkVPa~RM|%Qz|Ǹ$~(ŵO%n
+%ZnUSOPj8=G`ߡ_ҥhܟ)<fA%z)U#%ܫefeE䶉ò3. ҼMBZ P+ڰ¦9$P%+2-%&Dq
+BV&*)LU*CqP|Ce¬Aȿ!mp
+os+ k cLV-&۞˲?f`;Dx; ejgA'зhv 7|fkg/] z ٿկ{x`)
+AvdqڣcRBQ,r V+]Zƥ֭+&g.gA8;~p+Y',YUGG;}-mhCc3X $r+ϓ~
+l¥zb'&jA'^R
+4TxPQ HG</chm6F&Vjr
+l&e
+#n#D
+eSNCCC@:*"=S,kP%;LQRBlt$js_%nsFΐـ޻9sG^x<RH?1YL)ބ/A}uWW赍ElkUGɷԛΘ]2k/69h72!KXߙB51UHC'OcqJ:2STeoG?}?(s!E oPq7hW4^#^5π Z>WSo<UuxOP@aY%3H}$31pŬfS6pO//XQUU]SN9+U !ÿXoզB~hwS8eoKFuhrQ 0=92~ ZҬvN+ a|j12ua:vYA]+vգ8
+lg齍bvE f?$t5=+~[V?>-Tj}'润 MuyVMg/hF5DӠDdEa0$
+ʩg[at5#}!UgєPp6i 6-)>$VG7yTE_UF?UcP=LxI ds0<Z@{-ΑR.¸j8]ECF.-D
+ǣ_:N N&!Ƚ2~"RVws܏^ZqO%(ߓok"!dc@13E4wкXD]c[lظ ]lq|,úՙ3
+\+ֹM.}7מEIRN+g^3?*I1ބS8Ä́!9&1<&_b7r2Wi1_ì͍dIUTfgT6k^QIɷ<^3{{j϶:-畅w_u+7nJG騘=C<R}ZVry^).jpdI*/Wy`vs-q-[ 5gdBV.YMY2O(g6yK.omZ>a"^.#NzK\ g8@U+beV%y:Ewn_Bu.Ϩ<PD H)#LQA,"tІFpF RD *1XQp]f%'nf=G}s=WR*x-^nAIܐ84wQSQQ;aQP_B61xCTT0^,p̕_-]Qךnܔm^`UfWH+v)OmRIޒ)ܤ޹oEDBLH$ oA26.98]pfnt.*[;hQ]&8+e6lDzBY[Q+HouSEg|2R>H{-H#BK&E20\ߖpQ )qXt)*+4W֕V"ҭ &ۖg:J $\IN^vNWFv -h[i Q^R"<Lny3:dpR 讶gګ<9;ΩWҩ.1P7b,e%6EyRsN-PVP_wH \DM/!BKH,SC!pYW#4{ ԲѻKuL.wvCzMu2X_`,۱٢"Z=>K0T꺭bQ#U+,-}).$)"
+&{d1pq5k7٨&+46r5 j:^q:(X̝),dEK9wkE5/snAph}OQQQF_,Õ2ڃJwfm4Յlț5{V5d7DbRd+>6)uSu墈&ކ.uCq~hН)
+Sxgz7.^܃ZZi>5Pt:2e^iRuI*Knm7rKs=M2 JnHC{p OpCpC:=zW?
+-4 ]@e*{磤ϖ)sg.VY97[pp֮(f):v!;ikw۪n{B.^R=lRMPzA]H-u̕IrbVύ>u4BcuGLBd.XPWvﰢqy7N}7{;s& 9:t}C@
+d.W)6ncmm,m
+<x
+gZZ|hC+?r'J8?3NO3Og,grFlLP͞d={?6u@GS&=`\^Ws8j\`֯?,^ٛPb&2rMއּ#,߯PSb PNP}$}-o 8>ib191 qBG|KV@E1aɂ:3jQ!9N,vP>'Sߨ־
+(
Pϱ+
+8b¯37*535.ClU4-B 8۰::paQpڱX'v1e| 2F9#a[ lA{̷S
+"_ h@ |9 fрW2:pb5 a|'&Gq b{̽D|^'Fa
+oqy- p1qևo3go7jq|\|T©Ig΀S93~V3^i;N0 ~.܍,+w{>u[c}[k k*tΫf=btS|lùdߟ{#׻-~C<fx] Fb0Y &]Sc:O82x!o#%0<ӵ{=tf_aon=nֿ4.]: \7ٵר%O`vagz9 CC˅yK}4z~a%3*uo׽Km44èӳ<Nǯ<l1u
+½X.P\GH 41=wNvcY$ϺD_mر_|kO6Xli:suO!N/pm>;P,IF/ Pݓ- ;j13":wjY<㶠UǗ3k]RaXmu8`~Vg xk;`bƮ@jƹ7GhPXCt3bR/IF?mo )M̚C-oڷfopm}P]];Nrk~-*x5x[w@;M4V;A ݓLu%١ I2Z{| * =~stQtU]xΰmwUo ͭ
+im io)CC?€1 fNKh(h?/2*I[tԝF6\DiKulI#eY=FuRimbGtUd5g v*gTD#" G'F"K#k"?JA0M@iBSpUhtdXLҒ>_YؗڝW(5ܞdZnQcU!-[j!.z5{%-dp_jI:Pw1 d_hwWеL*D:臕fJ>Y)hץ(Sc +e&Ir2j}S_l_W- TC|)<i(WD; dnP=wp3+)#NX1:ǣ4؝NߡgVe70(WęfZ'qՉ[y:AvBPpR%Lx$ʔ ;fʾ3e@b gxqR"tg3V@GU;{TriU17eO+SFN_%5.H4+JOT(vZ2#ecZrH9K,y[<eB(ORɾD!DsgW|*7Ukh*[sZvmRho,X6/\8'ƨ0;L[e)m3UvYk|Ez 519(Qqy,F6.LLaRûW2CBW߮8{\MA lm+R7ϧ-"VC*Q~AiN^27:#'V]M]Y>3I]':&ͺ(f^zLd/.<s?=| ƸĽ3bf0FQPI.]))B[(%]ەnvDmvT[UJ:꼴5|{y
+%!9kųx)-vbE8{`u,=
+*̃/ŖŔ fL7=[+"|WhW+BwK' ,:}mDss^R(shRX\)wPCTffU*'EL;mV1$bل-mWC_^!S~\[~ uI}q-v P߻`G)@N9@ΡK
+km N3<:fjm0ormڹ55K֤Uk|YxWWENѨQ?<D:{P__a~~C88,~
+n7Ldcubu} F#5v`o7֜~av "Df/
+=@ fG|rG<a5Spoܮk@}\[u"AC9XD9XE9EC/gPm{1mi%P_9z `w!?
+d@pt`u/r)Qw ey2;e2N4_r`y̿|`
+B_  |ozr3^AkDC+_C(b9&41[Ba
+Bh;ڍJTFѷt ~
+`TRiyFxs.q|r۵yyo띭}w8>9|nrolʖҵ-ˤe=UΧ䋜o)`"&#3<#“QZ2\b$D+ mk ݾKvxr~Kqf(/]p6Q43` (; e
+W})j&-Z)=gGN% <4IK:4t!x&i5XÐ䧡GH\ȑ5)XKX7`\wr>x> ].K< ^9e>gx:,fٌ M`tWDL+p`_+ǐ5|U"wxP w`EĄ+͸EQ"\!dAל8#P ܆Vk=!㼽ay4gTh֩ȑtG] ;z6&
+,}sQD%IV%~pYJFii~Nu?V,'ZBsS` 9}yt{\T_b޼1zDw5Q]_Z|#x~sKn)$U9 48U*婄\C"⁒RX?"ZB =zOᨮFgyfG*˒V{3f{OBlMz 4eεFO >pZ`JUD/y:Ľr y̿_ # C{-4k-C<LƣDYV,me*ƘcA @p/Uޫ8[ Z*LnƍW&*2<jπJL+SzrCpgiC&lDIV4NcS+}U+Ř`*ʿG
+S
+tA*chsY3ͤlPأ1F( ?_ߏɿRR`,?>F(^ԽfjppQ0f|7\^a3d{wUҕiM դ 0ь]}QNbWT.ŪUV^+1\"h:еg=Փp>j
+-b oЫ*CH׵Gh(M<Rifc
+;JͿJ ZS/}tZE3rϠ7.g&) 7x9nz67ME:
+ԅijZ#ʫe!BUc%g{
+cɪ0zO
+m1hfZ<f 4K8jeɖ)Be82WkIN*Zd]\YN^EZzBAjr.x}5A~J(?wj6
+]ʞQK @ ?IoUWp㠻6DC{=7ff:47BsP u~ڪ`v? lo>mnV
+kSRsӚEs@a=2`8Ȩl3q}JCHb >$L$)^>8qZt^wK-uD'3Ÿ2q'vABpaRNH^ɛB~ CXHPCnnDOZu T 52^HF"$W셺=W3uЯGn<PWYgkJH܉gswq2m`/t_glHj؀6km1{`5F
+uu݁\?mp/#8{QciMƘ&3Փ >j6{ΆF.f#W'~#{;֫e=֥?:CןdNvå_…VW.D.rah+i 8Jc=a} Xa2bak7lcwݿfwܳm<vnJ5Cpj(Z<N{r)O.iQICفмyɄGQ9o:kYn,g׌keBKqp޸[Oc謱@l<,:m5čfI߇:W_nsg|DAJPx8ሡ 1#8mAqwعBipƴRdZ+j L|2`DN{$ {EڀRiM1FYjz(3qeώ Ãm)_
+%#mE9= #BdZ"SىBCBQ}ĵaT (.tې]6!Y|yy!EiH$AYrIy0۶(0NPW{I'Ij\脳1h 66M8I+'.G^V'MCmʃ [9WUh.RDk-v{?j7$ <Q>ЗH=_2p5YIr4'jqbjQ<UL*%''9@fȦ0n n2?ۼ/T{cvdjb3c{b1taG,wlx0
+K<׭EhJ3y5YxS}k]|tDP%VHEfuIcQؘo1}c%殺9Us0clƐfӧveٷ͙.J[}FG]z%WPt!A|BT*˗$
+~VA `T;!V.J亻r'?$
+K߱!u="!<J йd&7|#*ʷ1Pn9^oJt,0ɜ*WmYGv+SK/iO ER=K>{KsH_[p"$bP[*( b ݜB~xmuSv%2MYY^aS̃$0(8qKQ[Q&']%3ZZ:WtCY?֠ȺYwrpnvC}V}^8vw֕z&Vk}j15,(-aW¨/U V]uTz>+C4-(lA~*h7#};jdEqmim2Gi9%5\y볿_x,?:_/aa ճ`>GSʹ -]=m]]@^7^/dٿA0Xnb>/!W[cv 幷%ޮB:B:㦉fz~t.tV.=Q7![@$oGx(3͉OF"Ʋ9u5ctmim##?r>o<Y, Q}hPv ec@¤b=%F:ފ] gBgb=3) ΙmU?nqxkzq 7/ޜS'Xc@
+v>ʵ sH:D&u9_[sc>oχ`|mq2oTh3q6٬܍~Ivl?ᮝn9~Wc2 N
+ﮃ^ł_9}PV )x=χ_u1>FH}oM+@ lzx> չle D((`W% 1`A,H@Dņ(< C-O1D!ODQDĂg0;=;{9F 9PY0s C Yҿ#DHNb:D X
+ACFr<(g3J,Z=X=OZ8 `] h%+"6!j&;@:5ͣ1
+}k7jGK(]48Zw }0`W.
+:U3PŸ@7QMVen)wr{q]yMWՌCkp^øZsƝ{=fKm`f9/c
+[u_epKؐ**2,m7֛l1l5)0.7TJ6 W\:dk\^V2Yg`(vF#9. % }#cwJFscS[ŋ6-X f%YZ=_ڽXU9 ֥t'+mZ#PM88>(cEV
+$Y'MN'-P J7Jܠ<>jf<.iSGCp"
+80(ٯ[u^ȉ̘AȈҢ}QXqR9Ӥ'S E ]|j)ǻMk"-&1sT?pjPEq췍Ҽ3NZ,ҿqBj;(v<.@0wlpvL8!f)xy\ԨLȵ" uyGEuqwgfd`.誈i*e60 URUZb2XYK(nQ@M\)GO-hknQ999s{}b<31=uO\u]D1D[~:s[<ס='ˍykP0e P0I(HҜy2s&3.N#56CiuXShvNޠGGp>36o_kE QY|7jdYc?4bIQ4I\tl-4 6)1D")!ΐc/T+b۵ \z/NFŋ~>\3T`'ٔuy%&G,5E^rR!+ea򗤚a6IѶE
+$}LR¤r'Vaܦ 7w 3wY`%Rf5Q|'&`_ԥ<JҀtf9c(23=9Y0eJ2J e(۸xyLZri+ubQӆ| NNl 1ԄDuh;Zle鵚.fI?9YJ,6k=QX%rfْitvMTvm٨7ʵ*U/^x=̣9ߐ{_: ]t~Y]%9@!yF%Hw #v]/I#
+da6KRAKrP5+w/onw/~9;N1\,k
+]c'ŜaU灙uW9uu:ɴɔT\6kkl=k4=j"k)<V
+UxAJ
+GRRНLwL {MV{تVOLL$,h [bO"bIFYVIGZ,&̭mS6nطӻmXk2-\>;I 2ۭ^8cGbt8Nşi kܭz a5_b[7 W`=.Z
+׆]4T[]Mo:`+@.
+L p? f' iA̓0 8 ׃S
+{t{Ȁ>-fn)Eϖ:4@ro9tXr0y TO&`R3`Q19*hZ]nusp2Nm U{0C{2OAy
+vP7A%PJ^uqW}@w&cN7sG80u
+p>-*ka{l(H/xArA$upup}DwPA;6yDt3=S-iw8O.ձ]#Zr_`HD)PY^K:_KFn )kp9}5O= G; pKŦ@ ؋+p By:xy<KId;B$gcM|
+O4~%<JLRj|%cI=r ׂ&|\]8p%'.W.+\E0TI
+8K!N>C<O}'iǠd[[k;ϯEf\ wNrgũ!p/394L`""}*/@%Spk6\KÍ8†NQp:
+jp2`9Nű yy9t>`:G}vm(/cH?5'Ip?P;2z4.c: 'i8ڍVW0.bfzWt[=h/
+ n{h˸_E zyɓTb5 O7?OEOHhq`t Dg)`Cʘ!]Zv{*vkphsѦŭ!CΉׇ7OZ4gI{Y*w}? A/zPg&2S:Qh MP3}:5<@SnT6hZ4uuqUҠ%YVkNq+5WSHOQZ*HyYITꩤމ&8biޡ'H}1
+"'b{d86Gji`6D3-vv]m / %^^%^DR[- & +[v\^'_H {BWG7&3ҿ| )-F{
+[jfKS\q7K]*Ӵ'Ԥ1n},)F??2 J/W<hH]S۳5i禋P13߃'# e1LIF"[nd 3DӒ/ɵIs,sevKOAaMgu-K\'Q n4A۴؁&W)6s`VۘҬPeE1Y f`lÖ-\l[)gΑeZ[(ҬxsUddʔ3)Bu̙KP\K|gv9~(uDc<
+r5pF2y-pvY尉9ybΒS!3,F{`ۏR엉*'^-(_ar<?E>袙h!kS.s(N9]Q;yIq#IlĦ3Ein8U(1<RZ\ܠHt)uΣ|Q\A8/H4Kis>}
+$pGn?cUk(b,% J,v-I.. Eu݊#ʘOʘA'GHotE,9g0@X<ah`D2O
+1IHqK%q\LRi.(+لafaQA׺<T5ڨEA EEqA&.TD0j]S4VmXZc4DM'>3}9ݓT84ɬOOZqIP/y_,*ʷ8o{PzN-gߑn1>c ӧ#% iJ-,KRĦwIp^4;D!:gk{Re܋$$ӻ0
+Lg6)C8cl7FgaTV?x B\,Il|ଥҨղYeY&rM"<'"*WB[+XIYIoR٢M^s=\wD\C5`0D"83ƹBqfL7JHCvKCviH#iȆe!Ԧ.e.I
+^ ̦{~F`8[֘B99c@"u(AxI$ %_2JF_Tf!ش
+PrQ?
+_H
+\ la d5i!݉tOR r+ZJWޕeE9X 0e,sòb 3КB[m(xuQ!b#IY}X
+0^-z~I8m|E&w͜<P]Gc;==>>ɤDtح;DM"P2$ydIOK exJ<Eߢ'xxx7w3Q Q Q;@b C2ӹtqL<z<LtmB.z8Sv'n79FBtqvp(\GBHI{-cG">Vғ;؀DW!-tUU񭸆2Gq?"G@ο\!/"o™89iͦ=zГQ3pkMrpqUFjFgъSm$3‘O"%Cpb.đh8!x ܒNuY"o$[ TY:Sf*/G|6Eр&E :=؝~@JDd j|<\5x]7\uK18 Ψ)<Gzi8^&͇8و#"َ֔F8|\ڱln/`uQ.b>ؐ<޷=||E>86pc<yLaٰ{ P =q@ ا{&ؼ*`n:T{7aET܁ŧPEy"r]Yt.:ଗ+Z|pG{(M^Dޅ=/F2vlTb{@,e ByaP;+~# APD
+@ d!XjY?e=)P ƞ>QgvǡJ?
+`>e TNXI(ћ`Pl67HCNI6ܒCHrCEIίx̲\fimc?p}a2lEa$&4lLY(6COBao/}\)A55J .{]8..]n r[ۊ(%*XԱmSӦi3δv!mӴt2M3Mil/2f9ߞ>f&mJ`OfO-'_Ʌɍˍ "ܱj}6p/{Vp\qz܊5)hF+" ӚjLjIMs"fÙ!v43gNsCܠ"\4wYSe}~@DPC
+xJpsjqYeoğTsTM
+ܧ9:ި@WYL1Q[`KR,eQʃO2^*br%ZuJ͜C
+QE4!ҬB*#Io"IQeyCUQjy9FzK" hQ~^Y |n0je lcek9Y+E<.g( ތ)#ʟʨrʨϨHXt<SO?M@Su<՛˞G69J!3cm\aE`د
+?&#>UVG5U~B$Zʜ5!M^Z{&Mpݵ6W&dw*&]g] ]
++"\F5uWep2CiJi
+zE{RpqbS#uEuSnCw}jwςb_c٘B5Y3xwZ.
+וywy_sjJ`&FOy]7Gif-PO՟
+f"1j=d\?_T䴼n"[n~i~-J#0GLQ;;Z
+d!st#2ƶc8ia=R|+,a_؉pH0ç] M&)|II74eָLZqhcq=dL
+ПfIH^6]p) D"\ށX"vŌu+XEJ
+}@R;Nl_lL:X;:8 u'F7yۀ܋o
+*_6XAEl<sDw' L7;
+<'bg$<c뙈TaW'dy^k Jqq):2wNo 
+ѡIBTh0=4W -mSL
+'-kzaRYA#[]dK3f H0$h\FFhM04ᘮiBdx0%|09<G/>_#M273(Bj+7&
+"
+0=}6Oּ@uRʤJΏԸ(%Xg85ڙQNF:YFsi\oq2u1G;ϙ4<tH|yZƀ2X
+kdAFF(ޕ8Wr뚬Wo q]U(N !8cTp4hw3EM}~Z-謄%P3 2OEQ)aF R\a)b4=L qn'i{K~5F_v~ψ,nDgj 7UOl3CW(% LmxI .骨y=5p^ 7D=IT_OxLSoExYj#ܳN% Fx @!'=o4hk)z/Žs@Q
+&+kSwoے겤Rz_PwB'BJ+tO
+}g4 g怋p"h'23YR)̬gXyKyTh TĪshuL#XRyj_Y
+ܣ7X񱂞i̧i>E,%e
+j[5Vm8պʭVU_Z-mߺC[[7䷦A-Vsy\۾HJ1eRl4^kЯBnfs nԢ:D~aj^)K`eổf+]M"ˁ샓4(-wZ^;ir) 㞓nwF[Zi&sMk.:⽏B8jijpkxju-HN~spRb]05g9#э܆AV
+xE{M\0pvƎ4Gh 1.::6zIù:bQG, r/ֱ>[#>AVG%h8ٜh[mӝihml҉GccPϡ_ONIt=.9_9%tzuR glf13] &;Jw>%}iBPWf2PWIU̫8rf`Db405nt;xZj~yl ҧp>HKo[ȝkrf>7vߐ@a5쇃L  B,$B&'fѿHi5\Buz}M=żtC:~5V)@
+b4o񉖑
+R
+*ߨ9z˓x6*&|ޚXoC1Hw*>M@'_\h(Ac{)ezO<z߬M7tT~ ka
+~(zBEtI2St,RCہ5ΏǤ 9UPQ #J ChB7> }=]8c,Pxub'k&j~GIF(}Ls1.è( Qv 0 .E!qbz]BgNtW2)ZXKM於C~ʚ%X$|@5敏)pS=e勔Ǡd#$Jr#K*C@Z
+ WzPW [
+`5\@mj#5uiBuc:NVefZq1^Tr*L#NKT֬`o+&&uh<͔zS<l-0`͇VZ
+VTYZڠaj~,r%(? (-I)QVNZ/#dDHSfZse58mQmˀƇ: 4u*TPQ_ u*.(C'̾~IOLZeҺ(+#h!sd7$]CA]m4  jH!< rܩҩiU k
+X6# D(ЯvB / ?02xmY/sd?q
+e* {a
+#Z~/c`˹hfɱL52}'2|#ÜLyV-J! wdbR,)r'?WXXb''-&%PKG[̲ZZF%Y6 5'Rvv̒+4ĻxBMJ̐&l.@藢cl+eS0w/qƪxhU4j:qj>灼i06@0{]1K%5edX+aXo/m` ƣP;612@:Xvp {KO"ޣbrϯ.˥*4q~d%dԳճ|$$;G؍=g~Iރs{Ecpnk*>'͓|]%5!qw4V BB%}lN:PBp$aIvg9s~DD$<Ɂ' =Q%_BfjDd{
+4ci3TBl)Ɩ
+ 6oRQ1ѧ kPVb
+UPs Qlz4>D(9IQ&1S9DqpŚjdt/ a44ztc-Mh`yн\g̣:0+*"EPEaeXT7(
+.ǚb&Zq_c5֥1xXҨZMD? \{0t^>|߂3s1TG9y%41W1~PŌV1V$ٍ6es[2͔-WJ3-WAMJ`?fr1 6 k`T78bEqgO9+h`U9Kq&(%a,pFIJHc0'+ ?:cx#%S3=|K!1'tTN쉽/[P%5)J)Iq$[d-`.s\ŧ<+SJM2ZbSI Qg[)#Si)ZdQ5DJH5ʜ4LiK+Rm9-QtzƦoԘТKj0;1Ue
+v~ۘ7m]Č~2g V|F2-cY1YVEg56@cehKoPxve
+G
+r+^eti)̇ ߶L<G3L^魘Eilnr4:/NyEe*ܑ0GF9HGB+FoCN#w4"'V3uJEHg$Oɕإv;SQ}9"
+V0\
+50F4NHaFjxDkX -QP
+,ڬ!E,V`
+,`rȡ0 &2F75C1A
+
+)%
+. ҰP -RPiKS4ԮB .AeUzl~ej@~~75 ,v)̃r4!Rr :W^A<5dӠz<Xad3A~N;,U_g8^|[~]=^ܭԡK8"E; ms=&(UtV9^7TwezUoE>UvyWMP*սj4ʳrUS99~nբ
+.ϕ.|\`
+Q7We+_]5W\ 0P}Anw)a9Ssl)
+}tF?\I]j<ձGk] 5|krRKS?`L5`?u] <τ2G3ND;z4j4t1].<Jɣ3
+G f:GMhI ކ* ]{.CvyH8ZZg8 U|J}'|/Fk~Eo#v{n;tk`3?M—Nñ=]|m--M< W8/t?úB9sIm|y=C魇
+ЏF{ok:KkOB<u:=K[Dp\џDlAOЕp@F=+1ɤI *!q|@#q8մNjB)od
+$&!IsM4I&kf]zd=Uuӎv6դQҺN:mkUv޷dz{>I}R/xW%^սŋ7Zʥc:\G&dQqX<pz}^ݐs:Dv)^VY =HӨ5KH:ҩ .fƨ4&$^KcEi;:p\'zL}L5iTx{Y<򔞯+='$eKDY5ί g850wk8vǢ}'GuW9IXc~ξ[c_,oS)z(]Qx!˷'&sy[Ʃ ՜- p8nCqS7ρEl8yn7<R_ga4~c+Th)_43 17r|S+"-4:8bB ~&;aYLfWN#(ۓ2tיItLǶOJ|kzJA.=yJ-爼J6p 9\vXJb1RYH#-si#̦M2>tS gb"㙏5;e2|+
+O =.V%?{ewV,Y ,de#l33a*pN79nek4y g((FsP;."7)R.JŎ].%Yˏg m K(dXѢV 2X4Lq턶GIPݦ2=Ke6ҿ7Q׾H_Ny5K/Ib$SCrM6MNJ)&X:@w8]eos[<7C_kҝ6GYyҾLh_Fͱ 3k6Tmqeioi⧣"D{(Uh:D,xlO}fۯ_\DVyFWf/k\2,'XL5v IM[aS4,d +48/QxKEDd'{VwQi> f<aQS@M5xK+q4;\49pvX;HC$u;p:S<Emq^?pFLWuJ뗏_ڜF<T49P_C}}Ά6hǮƵL$M5} kwůğĿ"\FŢKyzKq䊧ѕL}SΦBjp4[7Q݁݋=FgJ*ZciO<[~/,*JR:M%Ҩ>ѩ6n5zqmIޚNuk>VֶJTzx#f(-Q[仗G~C(7_eJ"(YRZ X;TvPљN3eՔ1[(80EQ`#.x O~S
+U..HgI*1'k*j;ʃ(`KO>=&z(쭥z MIv Y =DFۤ~&~OF'dDwK렴ĔDPKINA? L!w("d U9@pA҆GI#ydGΈ$ ?KŻ$ }*wJkYEHM%ZcUVQ[cȘ06HD:)y$OyZ'$bcxMćOb_O7xG?#~<Ši1"ѡ5UIJQ٘U!}z I$m8Ms`/68e|/Hu^dD~@cL<0""2
+* 5"(Ȧ(( (8*
++˩₩1n&DQc%i[5ǦMjԨI44>99=Ǚg}T:++Hϖs<r0K5}ŀyoԣMYj%H.rDCf\ 2`]x
+"҄9a 9Hx<:W0\ht6|6҈)m4yx8l0fa[o=oUfdI;}ȚM Q'fRgxmvh?vpM᳇BC,1̬nsZsItJk9r9k_/7K4v' >''- <hiHi?:^m䤍k#m
+yd_AzNyerr^_j`}sà_2|W܀N'r1| G|`
+㱟LV<Hf؅;I+o[m${
+_v' lS#8ia
+3l4?6ᇍl>UG$oV*V[rcգ_Ks4g [{/^g A'
+hEc)hdc)E
+ZV,""[.v._iswr# kG>>wpelwUSVw JhYG%Vu.ZꚢZL-q"|Y܊TVjZ֤y-*s?RwTcx<Q9;đz㽅WMظn
+Vziew/wRZ1HCF$LUUxjg<KT5_^K5ǫAE^Tc
+_,w5}yJ'm|^-,]dtBoxۤy8Z%x'jO|T蓧"PbJ{nUNSMe
+~{''y0
+@Cm S/]TK%~4ׯ*5XNPg(?GPMcUfM%ئJ AsmױĀ6lE泊r)Ɨ92;C(?feTV8M JԔTeRz<+e@lФJ2J4]Qbȗ\Ն.ڍiTCs_/2#r{hZSfp2LQJ7 Si&+4I!8RBjQ杊 ;4. zn]Ff*`nˣ5!.Yfez*=W>J1lD%G(1,V aAي /иrF,؈lCuR#~=;iAo m
+1
+ǽl09C"J (EӸъQ)5UkTtFF[4b0dǼa1|`!vS\7ya&po
+K#.M ̣>0dQvMvD}}GEepcĠ`Ԉ\
+`ҧ)1ݮEXgޭX`>x7e8نV7m\30*ǔ.SR3(<NI(%'*!3U񙙚IePXM,TS+:k+2,=E[l"*3k65C!X!Y7%ey)jP5PqpZ'hBvb5>;[9%ʩVdLE(<wrWhpH!yBsC8hEchTB *'cW|_/WTA" QB
+-
+-,THQ5(YAE
+,zN;uE_
+Q`CEĪB9<\*1U2R
++3(,H"\dP'
+1M]&C3xQ*IV|QwW@2zhKUPy0 "_:FbUB*]4Sվ[=VcC4:Zx1ȣj)Z4ʻvjY~ <kC,d
+(bjP*%;&KQS)N2L!z/ @޶0yqyڒ!S۪46Cn:b땳m\%ܕjGqـ^5Bkvj%{]+amly=4r)gD dj v~dVjĨ6b3|9wZV#5YoXh'QXэ7I]N PJ[)^lX =m|!3] rȣzf`>}t jK4l)w)We 7v2l {Emg6k|m~sn0(z8E BװH~Rr_&,K8p.+*.]tqíAaa= Gw1]_5 ͩPFs([\!k\>ZiJɩm*si-䱎<S Q zt!aGO>jb`;6{[ Vf6SDEVFr{ 6xh$2.c}cc}ǹ}
+
+\eN>aFї2gl MVżuؠu <=w'-]U'mu}r uvxa}k}Ӹ_C<ω <74}tWE/JD3|t*Ш-6KANw}eE|y\Y"qyW(29?9<{=;BDzQDJ^Gt<ΐ))y|<NBi~NCُ<8$ S%^
+^8=t2a$J*"yI_k[Xk z *CoBݺ](Dux8}hșyk!~2f]ʶ$vmĞ=j".f kVj;ًd*[j37ѥ^}':<ZGH|?ÉG|#-t9إĮV棏9ݬYĞK]B'bBY zZ7DfV-7м8=vj=EE⛈ja_BJRz"~1[R:ҩr|.t}lc+78vce+ڼQ蹡MEǠF JB!_I4&QKј<vTC "RiOǛf8͑vu>X5<\i0w|G'X4HG# |4J=ͫ O[;i$Nb''sqbױsqiRM6Z:umU]K+T(L\Mh B6&B Ć m0ډ3??~:w}~{cc/V0]b -|Q_75O op}$1s4WG
+ :kѡ\i5ϫ~j%?L FX0i*\ъvif/hGɋ*ɒ5Q&>d
+eEi׸?-Ye,-5jԪJ-ЬyC =ij׌!ƔiM5a<NjĮ1]ר鞒ה0F,Yڬ^FzЧ}c~,lZsLf1;5mnДEami21˘F-Jn\U c>nzRqU Zju~?>./8l>Xz{f,3qږ)Q)&iU֦-,xwnm~LъksxUa
+WާyEit-<3M2s36{f 5dw*nנݧG=9bVr\Ym(TO5wU:koÇgZI"r=I8ce^FːH_mUPY^g8[R&Au׎*X;EuTo͉[=?kh=Rioޡyd,}<E]E\]VU.W:p^ߧ@}BI5RgZOxQ͍o;|BVW94c@
+Fjg{xr)QcRǦvCO<jmlS7oT!57<'o}']P["ww\
+ZUVnTTeOLCS-isCO,| $[[&[=>Vy54ИVA:R#Շ}…rn1*bQe\HnUCe٢CFS]C;'Ḵ{Mb?9WY73hzϣ3N Aۄ%n໣RU_*KT>`RـUA6 j`#e )>s2/]_SIǴ0
+Em$Pf>ϳ?ݿ}" JH%:bv̠RѰ$H@phĈ`ּ>5&ym xyX{g(b5 s/w)
+On1.̓ي
+U2E|$E/"|,||\q7˺LOgTT2CeO8[S6[.R^/i8:4D# <4(GJ31yJ}P\M曓Tp$:`v [6 jV^?!=8-:qHCh(fSwԫMԡAS4>. Y2a ݩЃj
+=!vA@{ql5[=0fO53\6;ܠICtgUaɚR{Xi Tkh79|uq 5D,P}JEn<jI\hn8z`fB7]<K^:Cn0j!Fx58lP!G1X:cjmUeTiڨ
+I߇4k#[c#;zy\s,k4GFI 8ՙ5j9KfUQUլE3G%1Tl,T{
+Fʳ'+מle'I.;FY)LTc|Pr:#x>3zhL9eHc_#yVR!: qq)ˑLS,yJO-QZZRL#}R\ z@IGeǕ6|W<h5 ћ<XuPu9~
+*KQ2.T ^pQC@KПDڑP P>ȅL|}^d+
+W\QhŔX]tȑ_$4(c,J*t=TO\K%7MEF4 gR]AQg]wEЪ(*
+-,
+BmăD3iFUi;1&ͤNkNc̴L56i֣c,d?Y罾}FL+`WJQdv|dȕQ Jv\*C ~;+ιOcqX^8V±`>( *id_+;IFYIJdT'[y*u)ڋ'/ыp| <<_h&q;(@1τ;~$J ~dʼnJ**@0
+PH9ĜE̓}O?/Q_µEgKO F+k+:w%KF.(\/Qu`;ϰ-DMT\~vPBsy&1O _?f4`9VAZM.?Ppxs{Ez3r [d!m\@̳p}jΫ)$C7XlaX?X6N`LM6s6U|RMySpw+TQ"͡|ի^3uK a·A? XWY<e0":1%7 p;q|'qL~xԹ|Ӊ9c5=mp>
+q/O=r, w}qK
+~O
+y.!MwAQj@|ν:+OQ8|H❧I~E?"sphBp;C->Un3o>$}|QX5=:7j ~{=Hj=k?
+Ux3z]W]Rt+pk>\P\fFi3[GP'^uz|:z:~CE0-{/J'i : A ƸE+Zd$,%ض㷋\DKè!A6]Tyxscu9/pޏ#N[f|a
+Gb]m;V]a;l/nvS<7v#dr EA+|2;17bۊtf.v#ʎ^
+rzSL9q,Ǭ`#vpFHo~:b&'2B".
+8p@wtұkuԣj .3HxU3
+De=G(\jycm+U5qr ?'L84^zJKXk'/SIF-6X3k,!K.l-HWMbHQuOzU&.UUfRqJL/tBEp |'6\p-^~w[62UcJӔjTM3Te|S**7WUV㖫hjͳUk}Eso*!=pm`cmzk
+MI*NS5[ֹ*ZS;IyW)7urR٩O+fL9p{HC
+U |w*_ԖTRST:A575Kslʳ*VDEʞT5#}2.5-cD55,! ¿4`$|e}oJx  b I5AI*;œVYKfnVbUQyUۺuն]ﶹ]n9 d'y^z|*|̍W%Yety-Y*R OGrjU(Ek
+&-V_vl4~PVg~<mYmj8! :h0 LܫJ)JA (ͤB[6pUJkRAsR~Y;|Vf)e;ו%?
+zX]p U[(p9&HQ#]vGlNN(V^OSkr\m2{^,&ezvyF=V2hoh*ցSJ|wIcTnI"re.r+\Yŵ, TҪ)ݻQio'}ܔ RSp @)>”߬8Ki̥*PfYI(/TzT) jhQjE'Uo@ɾA%;Ċs2T\*>W?a;Rԃ|ǤJ pϊ|THپx&')ʨLiԪP*JnRbuDŚXFwlU|^U կ+|DUݬmo W
+<wLFjVJe۔wiL@أ+,X#,~o?c-bf6WBQ9(.ÝW -RZ N)S 24`⢇X$H)ZBhB6 )B
+<|.HF3ńٴF4P(NiO;JN3X3.kᡖ&lAĵ)0(41
+a:tPuVr4%-|4.F
+4G5t̻jL?~ʹy -J<Cs?DP@LÜ: t k#DwQ};1?R1<eد%Sue2~ƏS(X'P84F~6fs0>CxЙOEh47jvP}hũ߄3,ji0)('
+L5{ #u̼M`pEWhT՟W<~`;۹v0Ŵi%mx} %rǘ as9jj=7{L`e R5:%.Z;}Q`O#6Zm/u؞{݌VlEݥ Te е/iVқbX1\G.t욱k.l{]Z쇰V+#]Lb
+Y<H0g?>:1~6ktv 5bׄE g?RX a2)snM?ӳٮ:e05&9(Fd}{\,XH.&=Fڍc~t
+ۧ:\G8N
+6
+CC7]'caVDY]-vJ~%uJأjw)UԱ@ 1E(llVG!~*h<G
+W^k[KBzN<Y޵K3JV% K1çF##Ѥ3zgC
+(ZpV>Uy9-粼u7 ;\MZL3v@gi%r1O5m
+ ջ+rW]'OWT]HU+ީJ.Uq}\Kryr{oj'荓@.pm4$x#FE[תסץjWU DJ[զ~UT㟐ۿA |EFpJ偋rPOtk#Z!kR]'D~vy*婩&.W0#gGڅ2j<4)Gh/òRYcm݆]h44O#"YePP\u9rWɨUy}4t'[d"kdlUidJ%#DN *\d ԿEسA,$!=P <wGr6.G){RhʢaY T%Hű*oRa^d?**vt# ihY#ԣY ~}<`1%%m& $=$USQ2&sET
+R^Ҽ{7;IƔ|fR(
+l3A4lQiM
+ h6xVLk+yt+^oJf%b2
+3oce}~z.hE75L\=5-Ch,I5$so%{sIFMı817v0&;XTVfH3׆A
+kyR{꣯s"!Rt{^sk^nh
+Ƃz8K!Lt?I!q8feep#TxplCN.a0UXR|e>oH])a0K$SgX'0ٟq%=y2ղ1@ۏk#VR+{ @^y3xޔT'Y{.o?$ %KE&<{ŋsgW ml}y`}ò{ސ͚:Lm`VKs%O,~ccl:W {ś4썓dŧpO/yC/s /d"oGG,~~ͤyIKLWW^/}_%Կ,jg'ހ Ufyw?6sZ)
+:2qӺ{Esxq~&̳gcۼ8m~v|;׉8iM鑶뵵)F=Cݠ$@cL ILHCC􏩈C$PP}~{<$%<t~n+k|> ݜ73 0(_fѯ=MgP^ <?QR$gHGHXx< r/0{ >O߰y ކ!$=~7V!Rd cse e:#h$>+xyK+Dgt*sB?Lm* у_u]S25t,v#Wȑq?>2S{R#aCdC/6k*< 3ϋJ\;-[Cw6Н@wY4:0 Gt7)T 2d V9-hm[=c0g!X=GG xl'[p<Sx<:Gϟ#~)|{6o 'hVtaE.UF &1KT0{l9O.:H:7Ŏv9V ]7&Dn,n_Gqɐ9ߏG5,N 2ix11v1vq|Xc3g9򎳥-s]yl.G;QgYlQ
+6`oRc% A=R] _L:M~O9_@Y_X_\i#WQVWZ1c)l^Q|NA#__ Kq{sQrrP後/EuK!ARGdTŒ(n&3;5Kkj (l*ZT0tDfhEfgᦌk2Boz?u
+7K3A)<}Pᾄ/ Z+r**5R8W(Q0ܥ`k֭
+D=$#zZcƮ%Uyߓ;&ܒ'rW{;i`Rʵ |.Zz2cAbQc2eu&o;K~yNʕ g9_;\ğdO1פ5j@*P<dy—6-ĭ
+%2.>|ayjiȓ*ʝʕ3ݔ=$[愬epf(Hicc{SP2(:x$!(*n?/UK/w6$gGL*)r F%O9s* r
+AhߌM-]N9K-uma*$MG+],ljj@iCePPo)CН$PnNS!6J@e4U6]?MS'hu>[w4qu:@zJʱ{-hAz<2Lrr®Y~ΚE~A!ah66@A<0ǀfq&m&А ឦ ]` ta/)q ĮQ<Hr2ā?B;ꐶq3dhM5I<4ɉI w&VB{ƛ!]a6)h8w76b, xesnYݙw]w4Ս*a75I{Su5@Q4L)te?~,abra0sqq8S$'}jNk)eA>aE{HYaNaV6 3]Qg6{9d7l[ Pb F
+*e(P*SS
+J/Pʥj-2 ʴ:ڱj 3Hm-ɞt;oel?V~YpYKbr5 c̉ջc,NY{&Μ&38]p~ᣴX,k:gHL6}?ѯ' v ?mI[-~x;gr!q68wsΕΒmQQ]·˨#rs[ 7c?}&{vdVĻH"8sIKi&xA;.Gd##h^e~WN0?HH3(qe3~VpNEj'[ٜ;nG<$H9X< WU~H<^W^ef\. euqDINۿ^p᳹ϏU6K<`,D$+5>>ɿJKb&>f- |
+Ol.>IQAaM2z 2zQ{u΢k~8 p ޿z]uq-l$.%~u9Gem~<GHOQ0'Hqoqtx=;xyWVw3v/!^D-<8~89:ΰzA4
+)w&>~|?D~bz":'~BiUh
+^VXe]SNڟ&hq48Zj%v؝lj~>^n.NC)u}v!~D_v<mv\pǝ;vd`IЈ"v;;eZu&v;#bl/"Vc(p< 4z"%kЙcp_/;muiG:ў؊
+]9x
+Lf]e\suu2U`Үt<x}FuaVB/|)n5|j
+jE5&(̓N}J|T 7+T,Y˲<e{X|xgqɠxW
+* +*TH**((lW,8EVp<%Lc"ƣ¡3UZE 5xn}d#QΣ_H@pH1#,ˈL##3ܤ(B1T82,Q7P&뾭@ݓj#U#7/74IhE̻e@ҬQ*ˊdpE@ht)d4oW\Zn Yߒ:(uRnpE5 -|9H.
+<7%aLf@ufPa3$Ê(d
+Z b X>y$;B5ur%X| EΊ}ṗs&o/E̻,HK}ܥx#+iժDb񠂉jO˓˝lSMG;lqf܆i I|HbxSGdQh- ϻ|Iy"QX+3SD~
+& y24Xr5 9gϢ)K{caq+X³Yφ$/"\Cedj(fsI>'ݲ=&=
+r73D V:HJW xmǶAlcoC%K"K+>|pN+=`hiy׀)ޅ~F5}faX5 ZZ"
+nUƱ3h:Z+neJ;=HYB6BIH@P !Ѻ/NT;նK2x:ɇ0p=!?}f^LRpφ`@Vr@G Aw"0<A!
+Y;y80_w97=Ecg@Ҁ= бQR$Ή {P1j` <z
+Fس٨ )S"̌tNTf`#H800;Iw>B΃Vݕ Yk`Õ(,7U
+U+'F|`
+ ^EMB@n/+iQ'B/ paT/D;C!XB"0cr>Q88/l0݊M?xy~n07|cǎ0q)SMs^(d^^2l/WYn_zWl۾ܵ{"ވ־o|#G?>3L6ğ=w>1)BY"D-U5ڂ¢CiTSźƦffpvv]|nܼu}ŗ_o~OD%}y1<\'_ gK<b}ˉ_+
+z޻}_>xo=z;xɓOkMuDT__ba~CٖsJ:CR Z G#e&\WfHKi h0a@À 4 w|kfdKeUh_ݯAųs94HASe *g)AxӀ n_ToO*HSoTb.W]ޠZA Р%4(ײ3n膆>nE$YL!`*_mԝ/QsР 4y"ySIfuaƹgc,i0,5pCu~S9Ѡriȇ۝+]xWY"Z:ӸdM3^Dv 97V0N6CC4N۝#>1tdBG*@C'ie$5hͥotРUrS!\ʖrz$N:Ҡ#{脆ƒn#Hi КʷkJ
+A˱)sNy6K"cwgI=q:E+6 Zg
+Uo-/4CTРa;rV(ՕБu9'_4qbf՚ *ʶ̅ڸ|5ǢT۳,8Ȅ#Eƾt^鎗{<6XjwУ-VZzQQYkF}QLVנ<VDɲ ̎#Er&ٝg9]|ak۝%m[ - jtgpZנ԰e*5+ٖd2
+VGp\9iϷ9[2CeXְRUt6 Ne54̖t5Ӓb&I.ps6v.iXmq-NzXS^JYVwQcghY͉VKm x*2G6A?^TRaX*+5j$!Anh9|N'hG]ǰ.چr'=Uti.4'$l'Nb;niP
+˱lpWDL|rV\`ƉмVmӰi4l6 m{Pdžg0|ǐ0aV]ց灡F!ʺ[Kn۹l{`?)`oh@lǧ"sf\޼-RtɌ)Nm-në=
+5e'#1=0htHh#EAg"F Vh•Ibm0;;6 7`2>A :SvIQĢU]1W B% OXoL[n` `Q/c×hޫF'Jcs_+!DtU3(˗vjYy`xN
+ǪhC˵};޼kaOF#}TYإA {\,|41eW؈XÎRϾ*m;BRq }Z鳌ٝ9bIlVȵB%0 2qȌO[uaDӵ7&(-k~iRNPF
+vhT@Ac<
+ʓ6;B?["ۊTa[ddcW(i  i}EUq%ݝ pPsvdcA>Gz(6lj;^i<)7m}Uɰw>&t%4aS&Hsĉe!e;l[԰0ݸ/Wi<kQ %ߤCX <pC#IF̍2c`7bTL8uxp{lh=W- rɓw͉;0@"l?:ǢH./#3>oƮOW}/>{cI_ᜲks,p!m,g9@Ov.Rgu6A$Ⱥ[5X=ښWǖͯslwrl$&";$
+e;5+jK״4Œ^S5x{z~q_=a8 ie/ŴxXj(Q@ӨʨVf =[rSPԤtuEhx{~ {/ͩ0/!=k[8P&ڪY V $7yMRULMogn`##4n%ubD@tPf*haTIȚ^ʸ,oe>OUq x -"8g3h.PԗMЬ] U,*WPW2M~K(d+\+x{ڍ^o_=NioYz!pg'ئb
+Z(e^ik{dEDUۆa}B{_k_ӜB3sޔJ(6y<d#d؞I .h5`UJUPW
+
+]_ft--} l?mhtƛ]k1m(@SV#8SZʂDC" Bj]*QTv?r?mcoG#'=c3# F-DQL u@YBPQ4
+-^uֽ/[|<7Ƒsp%'Zf#,՚Dɳ\S82C:vDos/{롽Kmx8dGR!kLBE )3T}@Zd`&7+ܞ}}}}TUK8=1% vBFcrQpXL"l*"D&[K76ٲm~~y5Lu?=Z 8 0 kcwybd+@"LCӝ]g^)5Ah]@Q284N`Ye)68GQs$#⯜mh\ltrB3lHaO$+aFT&.JRL, N(;1 Q1v iҷ4ްin|b-dY~FN좃a/ai.(I
+JM(-9"IJOE|3٦J/i=#)}ȧl1S#8N
+&dp$&#|$b32A:39>
+%<$iCPMAcqd<k[cݍG ۤYѧۗ 9J6"Y?1ᣱ&=3.tET]J0L )<up} '/% hT'bj&HCg0gdsX]sFaFG2MP`3nc8޿ ?)J._JȱNp/\ڔIAi9_Sb$kdlSݳax3`<_V夗]i5_Jov+À 5R!ڃBҦnu\#.@33lp1%YKִ_[l6$4 _1}Eo}O(E"9_72NƘɞx%+,CT堶 #y{hX`{a4'ĝ7PeK("*$}x-B
+NhJ&.F%9*J`mA G*Z]i;8EU͡kt@ {dKم) 9k~aə(k B~gxl؂kN(?d'ii/i
+ŴxX jxW:epC1u3Dr~ϜK6-(',eS$̻챡lo~lPu՝xXOu`.8YNJdb=5P:)'4c]|kˆE+؋1SK<l}FdХ 5<S 3rrETvp%9T:VL1O;ZI5xǛ;ƭ=iNse<T0nkĴ tPJ%4%V@3\
+Kƾ”w0)Fz.* -ה k0&Ģ]ig|78O섌ШF K@Nq4]iD%DqX-Tc굘wCw Iq#xqA+@[ q5@&}T'jUjM05o} z wҤ[{4p vKXL@ QLBcjM8Y+#UJVak0wVC*yCMhmgpjL줌
+,:5#,QPv?v =J‚KЊ5X5Uܟzx?7cM RځJ[~`A &dH&Y#$c0$U"W;[e7uC+fspO뭍(rW;*q
+юd,A#$9Z6mtoJZmio=aqS5ݾ|OӂSacO0.v8hx'#TQ*LIHLʆt ޜYޖ~0˪a
+аm=ć“!A)# xB1B 3QFg2R!@ R`, }owYr6[iì+auc71'R 9#lD}qNܱqZӝNUzuuk@zWEAAP I\Bx $F$@BȅpAEVԺ9;m-ʶ?*9M8bɢv:jh"(VV@ߠTei4EJtLpavwk}n䅜4~1+=n*(NU
+<L;sYINiBx6
+_sZfFGܰZ)HB':!TUr_JDot$ H\$\VQ"Fa]|VaG ^j2#(Q6"*r*&!i"$]0 k A]0ݺ4!>DZр/rz[IV-9~`qL45z]ECmdULDD](ՀOICVt^DA$"C V[+{$SL:Q 1hG 5M|CF^kʇZx3UAPi/  n҄di=ۊ~i+zd%C6@>k\OX["d>Еq]iB6gx;iذ%
+gd9 $*MM//uxUakfR2ȕ\o`*X( 0,OƤAq.<1*; O[T{j8lQƒ .3&Ba:A8/ W=hS g
+Zr-s.j)kjTAAdGO۸7`pHGܤM$Հ!o
+ju~X G(ZFixX ZEui2`y/7eZ{~dUbk"UWYse]-5 ?H 0 M((#DDYa< c0EPۯez`]Q`%y$4)l Vnb:36z&O3#dd
+dw6Mf_=8=M4<d3 Ypn j\ [ebۯ8
+'?nulֻh?‹Do.̴.V{df]%{j â'^@-Uquj' /
+mBS )`Bmh!1RcӒeYu߷dIֹz%!v]iu pd0!L̐$̯ۚ>? ӷmHozޯ'|%:WS 8#^87Ѐ`SӏT]=r{L&u~C*gN{i%8 dp?3 x \aheeh jOy`~RMOU!KrUh>Du38lj,J0pzT~ޡ{&`jmյk˦t˸("R(HɼX&QoAqq˓2,ah6EeX=7eNަ ;63e0uOɧ4]jnH"QRĀvߌ帶la,/1 G#Œaܔ>ehi3~1k<ʞ1tȧiPQ'5D^LRMl)l8q(˛G| 0#xeX
+%h>鵐ifqfb5\Éߊys&``1k{ڦ4vTᢁ/AɩYL"2B5=+ v:̂*;\q`r!=\= ycʚqOZO:ᢉ/),duPbM97Fz\Wjz{Be7&H΋ ( un̬uyP>8Z?]'[E(fjY1)QUoh"^jN^l^$oGs4o-Ҁ28>u9Ƚyhlu^sKO3;(jzIyD. As\5KT1E
+]QI%d@ [[ߎA;.}߆w[|pRB\G;A-٤}SKUT*K0)!D=
+Ӽgwo2oM{ ireӇŢ#3PS
+ }fj;8wym>3tE`uÅzA
+1*S]SwB?6o?>Oo~~ZJ^]rrj[Eۛb.A\Ԓwͽ xYbN8ww`{-CplInF'LǬ/F>-/,zTB^O>{.V~1vtnYHI׽{Bc{C: >gώP:}$%_z^US~nˢeϪq%kҔIe?R˒6^L|,Oxri' ޥ^y/ >9
+R7
+EUne2^dQDLr9I[M#D%@P؆~?VN8 o @A$o @ (pM@/6,qkًxդfu㍼*d %vk\Cn\ӂ9Xgh ?)lń(9
+R7DkPPqKf9T$Y?. c(w 5A3xی{6gsv` ;llHklԪa *,ђY.I38aOr
+6q[ͷOG$$_py"!hgT6! !E f_+Rl.[buũ@36.}"~'>]W6SL
+ 1f񌒢Su<*qOhfuqi6gAm8%h?w=
+?N٭<T3TTNؔfWZi[y噡rx ((xJ !x$)ef55M>s׏oPʝ~w8 JW14Gu'C0VЮ#ԫ%JFWV]
+& 7Ym((C U5XB~dgr[7h~ }hč87w*A?:Lڞ64^or]҆Xѝ&jL/RiYvCA)Tu6Ae}
+{48=?pkbPVg(3]BGiK{hnzicgXeTCP T!١} փNt[>59w#;vމ)/)+F $ev+Ӥ(󻒔.RPtSj]Τ
+eGrJc(D 5f&P}j-~&swl&n.Yh)YQtвE~Nkbr[iWra;=VCjRic.TڄjP E &P)46_.K{OkVW<>D:Ewa>r:lHd(qm6r[uKT[|ks+AutpP.0Vhaf' ,լR:!]: sep1"@L)FK%tەYݑ@ 29!kZb.zۖ7.nޭY["B>ߝ1cEGC z)?"WWc{5: DUՄ/
+jDA?iW7lZ7ʷ;[%NJd&Dr'IY\hR60r-ʺ6WC`}UI$P,1oDAÖ/V:eņ-`,oY/ݱ)|! 1iTܽشDιt^73h0!-/]6(֣5~c#턉ӗR05nl:CLy! a1Q_sOq!)%5#03g!0̃T2^6:ע4C_XW L: ip=<U_Aޝ[TX+jJrK&x?<pjxrY
+F֠uF51xn]!L03cy8Z,vcApB^GubϜ>'>sCa@Ci4kP z#T=
+|GF1<SJ^R0!Y@*'Ve.a
+f»3aC6b@ F Lrp`EeR+)1h"0Alq<T;K?CLESTZ8q]41( n oo>dl2.b" >c @gaЫ\BXK&=ה%?}*_Ŗ͐iŢIbhX<" JFA0(&~> C e Cfpc/شLVbJ-?k.A7_"NDˊǣ%cƒ1;;AͲ^bYgT2Cb!,OK= yЫ7DvZC&3O&L%Hq1|4JYqZy->i':OJ|C> 1d#LĐ3ѫorٔTÛcM'M$cؚr]0IU=uf# ȮZT!΢<0ZOsjӞqkuQj-"eA` @XB$d%!@VI %$lj@AA VG;ߙuzݼ</W-D 4P Ƒ- aXkSҞdh[djZ "Ox ɤ+3 -:]VlW1UV[TPQ-h%B
+o𘷢ϛNb
+ eRYD^Z?D^).uZB5yh5K/X 6CcuwC-j`]A@=HwKYL#IbdSjOl?9-;r6M֜o ,Bf!::o X {7$pȃpZQOZIwd4Oc
+,մs{.`p4b+6#1K=ĮԠZD =ˠiE~P? OyN9WzJLJ{+m:%:'lJVf\[j32JmF) `j/zhٽ :p(XҔxD;lN/UgRX'72vusUUU&[bXMU6cUb@{ųw@44r +,vRLS}b>٦$DbRfw9WiQ^cUT-U3f5URmJ*0P 5ṗƝK@ޱ C?
+ ;61|3$-!xUF1x&(bJfX,tf(FނOg
+sjlV^h3ksZo 5p wl\ٰ٥\빽{Ǖ;nEGu?&S>|Sv/%V})$;͚F.MeםuEmvC'hQCݢYаsh],^trx77n97Lw@,Ddu,B %k{=eե:uS.uܥʐt*ڿB۷/7&V,tOmx} o*<^DAxbyލ0>P,8OkĸDT6.HO:{9F#OV{xAW~%=3ϭ/?ulmWۂ%/=J=:U|?HdeP2<ELpY?h1} ־Fo/>дpy7g3w{j<Umv?6TXq*6;ϸAJS+$<u #j6r`D 3,opHOm\ekİ~' gg=`O?H'O޽P{\3A+E%,a\^~l\f/Zvllk sip9*XU,_Æ۩#߇EcDǧM'%HNIx+\̣$l/ptl%17~K^} 1dN<<yk g:ӧwG3/?_͂UVVY
+Q:j8@ϙΔZtV[p
+
+J,ʒ,$@DL$ QU"{A(" "Z3ynt;b7i\B+11쥂txNE%!fZs=ycȑvi@~Zj^֬̆M$k ەA>d8⇃ȀX <&(Gdl1?Ƞʨ13?3vjjqBn8J:j`G'`21| ;7`&oPh1G a}C )ȁedD#O/6 P{]䈪F (䠀Kc.#K<xz0C |s
+ B 9t ;{p?*NN& n
+nlw p?8_QC<
+Lq;FVk)+>eRƜ%Y8ωgz4Q0kMa?M47q1콌!} Xu;1pC:b`!7Ey!%x„LiRK33oT-"֋2$+Ill2_
+N*1hb d| Q&O%xΗL(Ɠ+jU) QS4w75}M{Ҁ6D6%h'h ĈADA pm|("F-lTže 'Z88kaVmFwII7
+i~~~}FY;A2 Πq@PB ^WfΔT! sF.JsѯzJrИk8W\+e^_4 1b ,oB! APw}A"NUqSJxBrR9aC۴s%Ime]+nnYfSV)) !cHɽ_oCP% I/ ֔J zP*5aniԚ>Z*|a98fkz.7q{ʹ=O@dA (F0aDY0H R'uJP
+ ;-ִWSXmzNf+2~D]nt1k%~fo2 0~Py]܊?K
+ՉLMeQkj\rU[kתKmVHaыLzqWb1CO@s0
+&߷uasQOԑLe-ZyUqR+
+Ygԕ[j2ZkkU6NQt.bA&b#VgL{BPz7CF7}V3GvHwVeU+mŲ.5[4my6kR-4UN<Weqhwwϝ}򯈀+N
+R9(1BN7׆K/vouQ{87#Ng&eTd֦T7&t6%e6$gեdפf RyC4%ІT!KOJѿ5h:.qƳ#^؉a`o t=\Eˢ IW㊅ 1ŷc &WJU HGІ7XjMv@o\ԙsy(`;0Q\~S\~r]Ji(*J( V!諍.9U0 4\Q,x\6\MPi PSϯF,~î)Ӂ o[#d^ΙKii7Oĵ%Gd ˪m"Vàp*lHU2\](+;_"n.P- ТKWX_izhV_FZ+ǨbV o ,)7&D.~ Ҳ唎{kbF,WZv,Ոɀ6d W6@ݾMЮ)a`cmYms͸;<'z<'InjL Esĥ~$BђfX G8V̩+2HA:hk{dv̍+I?U\4P|eۺ`o.z+'?C'~|*l*c215`#Mef&>#rH|jx>A2 91PRo<݂x.NW@Ʋ5΅ʃvz!0$lŜ KHH"N_Ԥy=Hzg04Ay,Ey٬,G} "}bg}OXeeK'!vD _0Yǩo"ȋąs^kJ86׍z99`t2~@2ȓCByvK߿靐E?)ԯ&X׺5\L^sv:F"ed? ƿK \⇻)t{]ue5yn4nq2ueI 1@&d tGeɍRR؞Z`nvb, S!O"
+Hu rK}*e:.װ~vxcOѥ$Z"oieLMoʲ@[ F{^ ؙΜ.zD{@,D۵rZ ?8rD݁A bfL6lL0V;f`Kdp3%
+,=j] bOrT!H4dT2-pSbj
+LDFr$j@#H$C!ױAU&46Aw'(vGUNkp+o5SB!JbD}ӃP*CD}qIE3 aQ*qGt7Z#`&gV[VpV0wEJz@٦ }}/DІ.ݐr%`U 0j(6
+pUa/S 1f-u%o/&|E@j R|iA
+~9_y" -c>CzϐBT0Bh2@EjpB e(;`uzP/R e@SWI-A+vw>o/e<{g@|˚]b={ǖ lMi2
+݀xr 9{"=qH{\v[laSBzYF
+Hz1|`D>e1̦X 5Q5P7y
+G,`Ow& iנ8 `ڹ} 3 ѻkJ&DD0 GMIT: wc;rjޑnct3:S ])lG en G `2w, oo~g1Ag[$KiPyRT'5kkCWlǷiY<V*ݙ,m
+ ^S uẀ- wR۽CWa#A&RXoH0HeNNZ-D[CWӌxPnrln6ۮ$ti.B S@޽ w',_V)޷aB<V33N"&iB<0]nMfS.kA,|w6-"hW; P{+$w
+h Vo 7m؉=O;~1#+ 4R)i$D},1pTPj:«dZLf"gԋ Q^'r财g}6pPq2 r=Y`<MVggv8< ܁?
+ȸZ+Q'5
+EaNsDfELƪ4eiwjisZڂvJХK4z[pQC 8me.[Zuxˍ2ߏ2Y|A!,֪5H(,_[VEh6)-FnPZ3mZgo+ȿ S{ڻ3gV4wnKW޹p}J زc4ZqmːTJoD|D]ni[Ū;IzIbLJɊ6@PCɐūSk<+nװuaNJƋ[qR(X<c(YuDY2 \3x:ej w-f@ӂv(ݑ֦ug5Y2l+T/.zએ{O;ۗ_߷.lwi .",d>jl|(9Uѱrfr% 503o':M,s&[W8nR)UK]^6a֖ 6X~%dgEl|AWIg)E
+ b K1F|q B̳(V=1mxCY0;̂c&εk\,č `rlLjxcWʴ|Yu6NQaK:|a6.ݮX:ҝbMf*7CIC<\:W{}w/<ص
+á.r=3'CM*${yC
+8HA6 MPnK|
+g#/ HB5]…eE*Lo@C^Ti<N?"1,Va;V>&f|U7h
+cP2A J$7?OCj!L0lSAG~DuAYgV\7?QtR6?I:?K 94d0 \`Qr$TOCl6Vh%<XȪV´a=}NUm3|ۣm׾mY~2h;ٗwX&94,5+bu֦MZI(VQ0qQj塰D>o eLpq__ӫڣI7?k
+ezvA;{ೀMyKPa,`Bхߠ>  b'iݑ/f F}KF-%:v22vfAi:Oǡs=_H`0Z:*J?,m: 20% qqChmݨ6foT?'j݆49u NU<*А^ _b`406YAP24]f2e\w|D x~j&TxXp%=6s@4j rѐǓ
+) [`bc1` i,p<f;/_
+|A;sT!5஘I 7X- eI$->CX?\Ij(cO3 4#76N0 Zd{߽\ml׷m#šC.9 !ƶ˜LV]Q[j6,KeDŽ =<Àd0 x9h@ZjKf{p?pjw˓S?+<ڕߡcSX8Z-PKj~!Bl0{R2Y:=,VGr=/mDP\s`z[k sBfjv,t^<{ j]7wZu@E מVET$xb%Rν)S $"B˸D5ŕhڷxHGz,߾ோ;^5YovYcS%]7+Îj~jrXUPPl,S.)Du2qrgH\&餢aH8, DO7"@@*,XSiy}-z.h umǟѨ1yHJ%e+f% b~jږʑ!K餈tXHFy1_d 9i9%FWa`FN֏oU6>\w1ҧ"6TU"Oe!<32%Q*f<%Ii#b|TȖ 8)GjD́dtm-,_tmkŃ]_t_w]|`eDAmLpfV"tnKR%q)yI㲇%dՈznLHK
+B@
+6X
+T#$Jđ%"\hrLǟ7J#rn<[%
+tYk24cGfMcݬ?Q }#ف!'Gz6⼆pq^o 7}:Y0y!`XNKg j,eUL9or^!p]/?4$BQ.X=㴞0&+Am;2]>0GzbL;Z hk
+.,* l!!!{ I 7kKGwKU#-X+:uA=zL[8
+B|潚|w]=hil*5{.]0wp3GN RqU"֘[>
+@qH*tA<ֆE<"\q+: }ѡ@9FQ_^$W)jmHQ`Reg |2 2$S cA3-qΈ&"Q5 uven .EW\AG%wA}(hi0u^BӸf#B#lX fF@>> a@TNq Gq2͓$ߡ(2)*%`8z dE!; qL.}6D
+Ru t:3ALd> 1y
+J ' JCʀÄF KTaP-!DXK/ldAV'ɺ.g Ivg|[xbd=xM4d'ѡ`1IgB'^
+tNf@x&v.Ywg!>Y
+A1(Iy -|v{8TgP^RWhʟk4Owyw:?.<C>)4½a#*}P23L}*QhAd$?ҵj}jzoW ˦QӅQ9g0"7x&XśU@|e渱jGʰs)wtuV+neEc88ᑾx_~aKyrpf.l=tГ|{]Ċ:&N'ؐ=ա#1+mWU]GF&K_
+n[nZd(0[mmECSC-_zl/yAo"ؔ-Y#zY[|%+p2\+9TcqK?gK:-;,J/Y_8Z4h 8NJ),9yL~#d+ȷ.ͱLlK2ȟ9( vmpo]_JSMk{As_%Q{k7%γfGpYeM>'( dȾWOz4̣a[4;Yp؛=n[m .ѕ++ۗn)ztAGd9׉+eU|Yy+׾ʾݮ~.'0FfQC5&2%?1Ad袻[~mC?h9|{ɉǪ]]mK:j\]Etm_Wly8yƟ8H%CESf_˖889v!5dl!ҴeFiK4L^XYA@3AZ6]MDj+.;fw9&G7%ƞgTF.8M<m^?7Ogg99v:>$,
+%tIIlb樒I^֥N{:+vxof:4 kRe i"anH^lYXVt/#\Ԉ 5=/%z*"9z&,9j649j>$)j%=֓0{"_B4{YS.uEp@
+k%Y5_qOfKf|Pw .F
+&BWLxYN\;.v%
+#<{+UͤHߴzrLNM~jK
+ODdg%222YI„)x䇑 ~d7*a:<:~7ǎ.DDaDrxY~nSћjᮽ&ʷmZ_s2P"wZ~ܙ *d 8ᇧOq#Rgy)~[&<pH, ' +2Ui! {Tanޮ#;ڭ5]T8<.)Je
+sC9ᬼ&3#/8g:"$s&,4c66K]`)KW[
+(ݾ=oZmbܦӖ u151$<,+)W[.ܿx&, ̙ce͇/b3]^6H<}_v.WgA7;=4iq^b7&g2J؞uC=ٞ5sSe!~ LQ !^0ZE&<AtA6J#ʯM7޳ɼ?)[ K ~Zmm=Lko]'./1=^ˁJT*-xVGmTEbTm&W=Փ*6VL~^t{!V~g_[oSoCo}۞~M'.!0 2v MiPR
+*GUIEWSc~Gm3tpPPPPqW'æOO?Z?
+*2~Z'Dw 
+ V渶(.@ B
+Qb؁ʹ'8 3VCX|#⌀.`]OW+N~n5|w<> `A O_B'=q
+QvGlYMtBt"s+]*W5Fh+ !:i__#;?=G+b `>7ҁO=3@$fAb"h%[WWGmtp:f}6
+S g8@> JdHJ[Q+<: D3q,]bk,d;2{!8?Ds3듀UHXAPAK
+},N&-*unH2 _x+lƴEwÆ؃Q7Q9/9}pŀw3Wq>&!?{ԯZ{d>@V#֊ArArUU=,7J$6^Z^%s^[%*7!q+C;Q 8/DN&A-d_Ɠ|Ň-֑{@w. …lٲt[R["WQT;KRgIO{[7c! qe#C1$WLhb-
+#G4g _4egy?YH_κs[+▲%kҞ+o.J{IEeW@ܩj$>đ|)֑6UTN-g7G8/yZ\ИNn}%7,ܫQ=V!Jy27ңv[V-@g_Bidg'=6M%sz_e_- ~6K]nt^7
+r 9戞;O?O9$w&8|[ٮ]ٖ2h[ͩ㲦ԷƴwI dgQ@zlZhRjwZOkCf>VEuv$ٳ!}*$\KlWv#Ir8}`ZjMk귚}#ꆵVE}Ƹ|{[)!yDmH@6o<l&} ԭmݣFyN$,P}U.+*wWdS6g4e6d\Kٙ٫NQdsqYUDH$[G dΥ‘2VrG6O]m5n6;^.{vW6g?h䷙6
+[
++eyU; jks?լ}0RiN0-1VU0.{$mJ l޲T͡ p<߽Vԫ{58xthWflYWf6nIY\#-lTWO0vZn|Z^03 iMqTU?(˷y{)L|28k݃(7x_h {YGՌF6Z
+Ě*yeNfSkʦԒ4Sb:ST41L a&.&{S͠|>rǔmݭ%"J};uʍbBf\.1M),,ոLZ^ُĀ>ӐX:)(UƔLV&Bٜ3(CU沧iFuh:'ʿ۝j[W[Ģx=rzSS
+nW&./fkIiViqUX٬5X9SY׺-CuyTe4\ѪuMBXEA
+REAPAܵEܗ#n=3v
+cNUԞ,gg|~zy}?ѐf͂1=ŧoA4ӵV+ok2?mW{$QRYk+;.b}˶S"{qIyy%w,>{I@m˶\6E~у*!ݮ3FtmuM原Tյh'ly}OqOj# Ǭ;&a)*>K_X?+w᜜}md}=@V^`O2w  Y٧DN6 u1ֳ.3&sՒ"/jT6慮;TnuÛf=,=sӪo2/ UYeCswFRևD"_IUǧ M%S,\RU\,=㰽CQ>wݩy'G,iY5-yc\vSѬc{SkRNo / Æ/?R>*FGRGCo#zTFtb=tG_]ҡkT%^ 1MmDd+/d/>08g6;>'^:1U>>f6#9(TѰ臝Dw]۽j/qTyÈM{\]ۑފ_q3m,k |VS\1s6zڌ1יӣ vyŴ#>3D]!h`?Utr뮈ӖO}[8:>˼&<ت};hVFByCx]DFvAu:yDgD7#jnfʯӖ"kNkzżr =ZkCO]JOxVcz>Fȵ=U͊t2T8w(C@u752ω.4>/N͈V/y/eTFWfɯfOxdחa3/N׷!oc.܂M |{FD7$/!5Z!Dul+Xvv'_=7-)_3{p~jZxY4C
+UClw~d5IJAlbY?hGXaD|K#Q;#JÎ7n:Z(3
+BHc?d`l.ATVK\_0l_Lj*P5˿C)<?gD(5E@SÝ 
+X."[$X
+Ϙ LGb3Prh-Orzż#Q(L(?&|X2$B9A9@A˷A,
+I|Kdckf.0EBc<M|=HU`J'W›'
+Rx,Q[9B6'2qc =/JGp  P'D@~&P,6:KȋYfσe
+
+;A2BY !"8@"nd3DL@IlEv{uDP3\jv KS_! X
+@H +5<B69XC'
++ab2,1m k rỜVКKiN'Խ#מC~ <WCV7>EpVCԿ.4YEjE( "A% #@#r A("HM׫XVG+VWZ]gߝ/g|g]ך$i VcjD0!D
+hzG[Cq n@=_\r}As}F}
+ns[
+ϫAy9*Φ9|f9DY@DB(KD*׌F!.mz<vli'k?~1KwZlDi&xb6S a [nb<$^@`1— x!JsC)W<GnznO1y5euz믬+[oz|} >?2a4;Na1vk
+ZC狰oR # ~H{/px*ٽ_
+LJjٰb׻ͷ=o:~y_#!|\qw| $|ÃQ>P@)wusW`Qn2#5hyR/ף5n3Q-߇/5uM 
+N :!x\$hB6&P(APo8.S3)mOEHd`\iXf6iK'Ed Rtv阽';' :>|$l*@zg!U 4S
+\g [ͨ.Ǭ="w99)xOHKU|%i t D0^y(ewE&:bh F 0$@@)=Į%Ωs?A şS~+[ovlLqɥgr"2.GR<G>IZYEࡄc|;+#vl6Knsc$SA
+j)0@7b-ǮȳCcSSfz3%쥓a㹱.#->J ;,3*o&e=d}06ߐp]PW%n 8r r`d0q-=-@Ѝ}M>*g./.q<JάjkFQQI>L'꒮O+IX") ]E7!=*nFgfONTF*=ERώ\>fP陕}z;D/*'Dˡ9a~5i(akRe
+-D}/
+=˷Duz|o.5-Bg7߿f6x@ wqo]GSI:mu~<YSѪ[xU0'k,Tu!THR}Rlu:@BL tOKA7*,Еy8>nG߶a6޲z1hQoge!̩R^[.*KחkUM/+(L U~P^^Z6j`0pXWwT hu:yMt52-&bEKh}]m[UM6]e_Q*P+K+njQ@ɵgCe"y;B
+Ht@ĖZYpـp{C |i/CC._-+aNn݉[S;mŴݭՌV"0G<E
+osM8"XQ4=Ej9Ba7jO3>)js23^;B|3$toL>,u'{RFj+E^O?dr7 N07]X!@*Bw]Ad Bc _ݤt{+<sA!(sX亄#qΒѤQaN:8?&l
+C DaI)TeZ=zSm:g\jj=.Z7w:V2ֱ. VD ױ ·߹?>k/7ZT_ks76mDna-r[;~cx|D_|J>KˎEћԂEG->v8T)Nв@]n|;)T{s%35q0Ͷm@yW5;dd&GyS-<D6z<m5򩊐ꈲWζ7V%}0֨jfe|CqH߱H'DjdV&ZrR@𢙝~4Ej~"tK\/v.dwf7DǤkr{<sHLISPԺh`S={lV"ZvЗ;x~&u+*.;ˣ]>vc_֍Yco,dYbjmt"\8\ۅHMkD Ds;^ ,4㹼~ocd 8= TxV{ .\;vhH5mL¯.CwC׏ma3>^gsX~G[BQ(e>*  MCraxayFc xGaw$xKp' l`3vog&_$*BM# |Ʉ@CBZ(( *.\,\ xH` X&c ࠇW!fpU3+l?D"
+C =q?/8T 籎簝'c??g5|M˾Erb(xS(b
+DZDhĒT /j!8K"f5SdZm$=m2]
+{
+-HEbfy"z} ];ҏ|!iү 9ꏨbD2wa1xd]
+B,#dX,T<Ii b@oi^;oTo"q P#F¶
+n e@t 1W͈<Y0*Y-CSph( {r!{Y<q6GOgYI-Gdn[/<a˂;g3&YHeϖrȗpp2.VO)RlOshpVWCKrޑGbf蟳b_{=SWdVH<U6@ud eD*%d*=' Uxx^h_IcpM+c/]khoR'/%vR?T١iC{$hBgX8$^LUp60,yߜ멚xmF^,]}*\{ʳ?J<S%鴳Nح98mus:04:a]CxvC_7rX lי@x10S=J>1Ҵʀ﫧4OmbEۄ?+[+M:VHiPv}>dj3q]3r57`g0o/iK9<r]QMgy%D
+*22XPHTAD @(Jޔ
+
+|&t3I l}#fr+Ȧ0k4f,9nD$s& J{j<b1=V7j=`~fYGj>UwQ1k n$o<.x:rVȖQF"vIv$5
+Jst0k울 NeNEOU{JX( Z
+
+
+/
+Es
+!Bh`/ {o.
+c2{WTKEV}9{[I rU:]M/6 %}_7[͖7[|ĒC_dD[ :U7JHu!ܪ5*5L
+Xp;O눠kXMaщԭq-5ǷUWFRW%TVzeRkYE;')O'̝{/!s[Y)(J"j& pk0hkZ1i8f .ZU*+{H˔Ԥj<|/_|b +.1]$[=gp{W#vVvYB{>bc'ٸQ9jU#'!@jYR.:S%񫚙'+|*'88|"*;R%S"h5[KLqf`34&w3T1Lz-#6-.Y(l5+ȼ&WdC#- n
+Va#FpV#ZX+*_ͿE{Wp ``
+fjvg:`Kږ:duȎ1{\E+WwA'@?@ίXΟH m
+!;O}}'~$~0Ofh#v^R+uBW e{; F;m_ x(6Q}اD֍"j)]5GPps`|(|H?-"")bϏ߈5X/v~nH>6J-߳* .C4'DD8?(
+
+ А:H>0ZArCOY
+yJLX R`Ev%,M4/q-T{cDAD 38Ӆ<Ajt"@4э$H%ΊB+gljٛ?-Q
+=9ߧȓkpg.\3D\ $71# g1,e|/Ab|}~
+,*l!$Fbf/oIl ErhWvngGОc73G:([tph‘W!s-FQ^wM'b3͓ x 2ao2_MJv(X#0bWaxbhpl6wh2w# P1F o / ^"uCe#|=s0/ri#LlSʹts_&} w/p3 !*s}t$Kzxg[w1˗!v]ktC:szk[mmkWjkzV]gIV [Mt:\BO$ 5JbL+oJ,ICC)/VvY"ay:g [ܟvai ?zMx}->㡽.Cw&]mqm{w'♯E^d֬QSzɫly]jyh'P=9]}GK4wV{Ju#qg|&xBSFӉПHD1v( Cjxm<oeRkQx)*~/] {n0k'{\NbNSKНI:JsWǪm
+S;B!󳔄^|j,Qm~xpd鏟W^)T?L ^3Gw4s&seJA}"Cv󓛁ݐL^; Бn=*ő•Ie)O4\S3p\Cus[Н7mϮ2oScec/a}a^Y)},QCPӑNtċ.2 gKJO譬z`HpOU_w-oV߄m]aސSiY#bg<-i.A\D.EĢ\/+Tϳƃ1#[cty;- ;K|Gn)4K!k 6_lY9hM-%y;0^̂76o0`D K{~y1ϝw
+tTJѹ t(.S˶yF,_3bBЪaSC_2da䢢 w-87fܬW_!zfl:Ӌ2QPux9//etrL]췖e6լ--]Y~σdeyQs/<kXeoZ\?jˢ EM)Fd{#@p>#TFtfNLPɮ+( }߆}fDTDDYaVePYM*X&FM0.59Ѵ1ihKs޼[ą3r { ʏ2hnڒ۪1Sb_ǯ*Ҫ=RDna_Y9sMF"",MB0R߯iPQt &VX) wj+\ټwIl徼Tʜl~Yv<sQq;Gr/+}_~?#_ IQ(MC0
+`~'4T?PL)<
+2d<gnn(3[=蛚u?%k?9_r>)(NBQj&
+S(Xlaᮔ^;4>#80Pk
+w`1JD}P:}
+Q
+bJs
+kpooȱ>^AwP~1?O
+ro }bL x`B/Hb
+DPAd230 ",BK5ZWcM=hbY-b'su߻}9(zy'V&q_ Nq%]ev^Hihde-r8hQA:'hE
+g'\e
+/p@w$@/#@oZP/^z~>+]}A&ݙ;U'Eb;w>3_q)0JƧ(:@38]z~@Iw}҆<4
+ÍxAe
+AO)tX6ei<q}nYuN"[c])gd48楯erҺ䚴O2Ӿ[F yF2)3 3SQFFa텑
+p:z@QV́tڱJq
+UbM˖&YgZmڜzGMv+,OvK|<wUk%YY蘒m:ȣPR9HG$hi9eJK'-K0_Zn-̝eR87vgrU2\tE-rtd/$Q8P>ʟPj=VٵuZaIBC]U(ReS*,˶I+-K5;w01E]#.BdSc
+PFF 9Pg?\N
+(8g6NZ`jNmzN
+)JYYػہΞ;0}'MZB׋ǽ2-c$)nJjG%W?ō'=vpUB`J56<ցYki3d^S`gꪉ~E+߷bz + |NXc.tsȥձK,i)X,1$f=baoy-~KU^)5cFi(ޔmJצJGxiqoMnx$p̆; .X$lhIix^IUDnIcDܵZ"sVIdގ5^u+7r~v'l3`Jy
+ޝ,}`k~ I_Zȭusf털\;')Yh?P[xJ$  |s×jߢ7 A R7
+`LRʢܺKeM
+ "]`Ȭ3VVs͆v~YQaIH?+)/n(|+)1"4
+(2UXEj/-唞ה^dޗd3MD1AJ^W%fA=X4By#45Zѫ ޥ~E@C]S_kͭif!azSz;\Yu:\YHUITf"P _]Ax<K  sЊ3hA}`oڎ(2k{5ų-'Uk) i.gi,q@0)Li8/Jn-J&JGl!:O%<9<338߈g
+0ЏXF
+ځ <h#it|^w|1Γd d:f}dž,
+`Cz'f,@w
+;kW j0\Ž-nؾ$mˉuY [uMeW/ة)ZxM* u]xpNA{&q38;p;@57h~D@t[
+"* D(Į ŵ`Y#Q QcC ֛"9sp~;̼~߽3Hu1~}|8sȼ{¾gO
+ wN֟5'sv/3kcߦT"-mK@MCn*)\DZD؂I{OY2pmfl_
+Ohk+-^#o#n4¥fK`[7CwPOOg~<}>-,U)Q٬jifM~/-߿-4˩ŸS۟*p-lQ犓|P:
+l0Ԭ7m\keYb׭Vh %? Z+jslgXgzj~:J[EJ,6PnLW . )lڜk\]n^bԼfy\d\h,7W9
+eu-??;w
+WtX1QcJejtȴ*
+OY4KTh;7h.?~vP}^P}n#~zБ]N-:3.mKvʺ
+SvfU6zY_L.4W:~Frǜ !{vziBЏdO%⹷7ubM7gjHwP,,ΏL떢u͌lsdvq);|a\NwYo _G=97Y#Y.{{3~,K`E=^&W{^VocvJ4yRp }ب<Bcfdm.#"]EtɈzëғHP)`e8pv$p(xJO2'>R=9$A_ٍCf =s c;eH~kZLtNr"}zpppc-<wLxhI1kI91:oO˱ ڬd9ϗv#tȈF?4n!=yp
+Anɱ^.c ɱBOu;yfd8X2y?܁nI6`qY5kG/gK4!=i>4CJbe6%%ppj\&#}YI %)֘ꌉ!;_3T#R4b JIOde7 1P,,.V:,UHA@*`-k1Xb]QQD#UѱrԊ:k+ڙs@wŤ,F/(GFWύ8;jSxTQWc(a>_# }xk+$|dm8IZ%BN(If4-yYrR"!1ba\eLBUt|M,9"V6:p kv
+<rX`A'uH^4?Ut[df8#=U1Fc(}Z`h՜눔ŚBmHIFI']p> A>0^舶Kgųf] ޹>-)9;r=$eѹ~Ȝ9aّʰ4<MW32O//M触 TOv=~les۲sr)y@|
+qXP8QE$󊼤& g( X(Srmj&/Y]RYrH{:\v>$Khz: w=}lIV|(fYb.sFx <%!e3˦˂KQ~-'-Vy[M(Yc^IWؒSڎ]*lH!)6=g;ؖm^!I.I}*$BP# `hKWjlҪP3yU UeXxUYRzVnQyTWW+>j
+a^c{s2|s@鎭
+M
+mv0o E2
+N?!k
+n:-ZUC@(4nOyi<s P+p%<!_OEl s"6,qq U/`ŷVo!,!d| EƑiCRɇ5H6I#89C"?aC5{\UoE_f
+G#֌CcŚ(CXxB3 <=i,)A?p]Vk*Wpl'.}VwL.t??h8|kD_X2=/#q_=ݪ eU.T+qVUFtz;:qR݂6NlE#Ь% Z8; ?i;z&
+*U-])[kkݵMp={aj1drrr_w~ko7CfC $r"CkKGmoWkqKp/4 nRZ.GRZpP9E;}VC)g~֬(b}Bq}Lq==WΑHH둄CHW ׇG1
+} T{TDгD
+&tRݱp@Gt>ի/`wg[]6^g@ێ֬@wV?Ӓt3Fݼ^wKZVw#ơ#"$9p7
+ci`@J0C1)Q0󊸞<+ߝ[ВrE 9{NÈaޒWޕ m'2H1D>O1w
+A) iN3X&{m.,5V4
+ZE5=!8)Ae_HSGD瘃[xqz~\__
+rW6tBW;dB]aX0#ImX4ܗj(IqqJaR(w1} io{ 7,dP*=P艁|v*ϓAx,}k!;Z+Ըif<$1-%6QnFw1s?FߋVq#:(0v2۵rnխ2utHyK6qwuU]&ۺ cc;0cۈ`7γqGv#M
+(q]ՠƂADET,NPXh{,G$1qu]{Xۏ{@xgygΑڛ%_>`Q2l]f(2C/)멷4y赌A.| b38~Z9P rxë;<+"Q1ír\\p4éUp,2!9V3yLYǻH?RO VF*gS݀cju#`WDak261ZCcIڲ*K%\@]+!=bԝC݉Eݸr6ԯ_ȠAV
+.2i.'WG ƙ5H?2|B>N"u9RkC:k%2SVo>~CG7A8RWm!
+GzjXjMf|tX@Tjds"@# ~I p'4q7F \hK_hZG9&ۇGx}Lԙ0&He%rM8O_ŠS 8tZ%#R9SThgG8A'5qU˲h%|:bN+qJ'98̃UYê
+4jpHՀ&|W2cjAxQeNW^/'7~}6}pV7lGX3`?`8nsWu2:AC=84aT9F@YBz7ˈn.yJ\C;N;tQwðԹGT{$aL敃*|Tx{JHfKi
+IA3!!Z=k, `;孁Pg} lʎcPR(bdl HVJ
+{Kھ>XX?
+#e&5E\F3+Pydvf>6#hE ()Tm(O|ǧJx bca@OdFwƒ0XiQGdcNR̎LNNγ]mMV71.!Fh*a`+"}ccbuX2qH &̏(͍͎)K#"q4!SR4VhuGEyafav .D&葨((("0 ̌ (qh]\Q0.cMh4rZ=&Ic\kmm&A;8}}yIirjIjI4j{'JxU?3~F[6a>(ѠԦ*CPnH t$=WV^PVOW5MߡYgMYHc֋*^TZRES.qaQؑlZVudD9TfCi*LiPlJN]Y(_Yeƕjq&˸KΘqZqC&#CT ҏ}mf`69x%RuԘTfbK0ʬcQbBA<!?;Ek͔:92)϶-5Jeh^1۵ifNoPjM5g*ԛDeITr,ځVq#SüTpM9:ۆ
+cӱ1W;$9J͎\yaVUz:uUM66vUP-Ee ^zo!c.*ZzR,U#/o4Xs`rI,鐥9 ʄ<j~vu|M\IrY@PT<xʟ1.'`!<NQ@X#$ &]0 id!e$rقry|I"d2xjvYߨfS*1 >>dbJxyhI%){rs
+ ~u@7hYGo ڥŠ$;Fc@G8;#\<өG]
+ <M hw=n];G;65+P`0^ہN``~ jCp(C!EAeaqC1}C"? 6je6րv1.Ao8]@8B{|a#hB>n~psynu󘈿+27ԝXg&Qs459=@{?0# pZM3lF{p3,?gyٟ!a{(pm>/д.d/`=fC70ԧ'J"H5K\~¿ƍ b^?EnD|B]k4RCIX=
+(z%-BR&kOm?rw޸p0>&?<a;QWw}I~%(Ӌ\C 9YMFM^"ċ XdOeD$H$'NJH#I3YOZ+'qpwS! "A$!%$X,"KIYIp mw`7 pwp:=L QC@E8& x:pS8Vg'y},qgp*q3|˙z:t̅o d,J͹"ZQUx.ik9W vn|S8<F8YvEyq^ ] [Q@PNAc9V؅v9vZe9 'xbzV,xhĚX4Sg:i$f:}Emdg}?<=?5T-u'@DOk%k)"d>62j4hGLAIþxq1GxPR*Ǎ+GsMԝPS20l<@?F-5Aո޸5ZxWXwq+0"<⢤MT8UK<yX>Ʊs qW\ %uW7hZpYӉQ\ňv ¸C8? ΍3n&<ĉIdGoN~
+^?`ST!|:lG<vq2k p>0V#ӝ84ߛш3۱j웹 Cv`p>ݳ10v%%U'8V? _LHjȹ{<3&̬)8>'$r&cp{T`: 5cgP'vö~ak?|^ .l
+>/څCք|/@܎FcyG9
+Xn}+Ra%=W.H Ƅ'NQ?RjjWr^\ Ekp4riӊ 2)I~<'yNGWJVRn0͐/BBl4ԉC6 rUe8T.j* w4eߓ(N*;ST<Uڍfրg_&k t3m6:2BСŘ&r4sHpbF66IUN¸Q.3TJ3jJ2qo؍5vߕ U~J*ٟD2j^
+sXnHNs\bZ8Lەb~MO馏[Kդ*,U&5Sl#5/Gi763+w.֧< 9SG%չMEe^P/8bInuKŹmranbݪX-4y3>u˯lU' j^,^h71nFȘyP"\ֹ-B-΂d,NJ`/(
+bAAdHyղ֯dۆ4fi,5L}2dZU%3_S11׫=W̽H;Xx:O#c㳪EpFIB81(rБ-6!Q"ګ{dwY>ey&& MCMZMZr4;ej\A+XEq 挄2r˲S/dSYlN)ݹINuVR55I4)I%)RCm|GiJ%i"ߋ
+U+Wg`/*!mMVXE] k#ݳFz}IEDŽdAyZ8Z1~SIOrYSZU!ϸ\R㻤Ž@H55 IFJd$LEb<[ðu ⽉f`ׂX.omBw{P ޻bh'bh*6FU {'Za'|/^@,%#k& jU8"W-EĪdĢn+ºKuG|qXYĖ,$&niTUk_p
+"$DԒPJ2UcLUjj:Jϕ:Gr#y<꒕Ȭ g*]FhI#tM#44B3`i M7-a *tfpY Sa*gC~mw@^dQbOE*<7Ps#)7Fay
+믐
+
+̟j_v;\y)`jcmAv3yf.fN5`={e!/b򥈥Rpq/R?- T@iڔʿ4A~kS>jmVҾU^#_WOjYQx?Vv&gR\)
+SM4PIYhx>]B IϕR)51JjIb۶21 oc
+ ĚzrjE oTK;$]++>v۽ c~ǏZZ}-ͥbb
+)O</~vVW%qmwڡkڧ:G6|"gֿl"\N:u[זjD+D1x4bj6plVcwvR+4gSX> ίu/`@hȉ+f7r
+N!Mhon6\[b6R\wϑc*=Vc=?jCZyF+n{>@<iGK iO)rN϶
+זѻZ.GZzִrZ3]+}fk}Ϯb?jԿVr(E h!¤ϣxzήA{ցgկ6h*kux/{*0LFkYljZ1IZ+'B[0xԼk }P~+OQ
+B_Hg3s9|/>X$E ҐcU8E5IsT@U-wdґ
+G@2#Xa:Ŏ;BGYn;[ycq9.YK$_mqg.j]L,kc acSUU
+TE<',ݩӣgFsQ3Lw[,q+'+yN+fNj?g8IK+MuJ,Ty]̈Qif3ȝ;KnEFk\mǽvo[Vr_\GF9ƱlMԀxꉧ,'r`fE8;J9SU3GK= qɔϛ\o@^o1Mfg<`9={4cVy+󱕒c}fCV?8+/n-xBRgT7\c_-or}'w*Q?_n0#b&w[I^+Z\xm&}$=o%PF</ot ]̂eR
+d)=WZX)#H
+̈́.sAx>0 7f|>xhA,BeVVQ2#*RzTVj|&)ԥ`-
+V(!x lc 4o2cؒbی-͸"ۈ+c/bO~o&j`<HiX1JEӕP ZJU|([C
+Jņn3ڍ١Y3l1tzJٓЂR}eeWJ>C5o(]k(FӜUʥWj֪"ͬFnԴnM=ɵ(zۚ\16&gJm<h|Pu
+ߋ^TB:^ZVŲNoAȎΉXX. Ӱ
+ lPX&]ݹC;誎3~AWo5nlol$ϵYPFu+kYkf`WѿX5L"5k̮I288
+K2vWC3d//`N' @~:s5PBwK)wDҨipЂvq8'&#aˁeaR#$pKȵ*5o3s@;\'EQ?* E7p ~ۇ)=I=ӈ?5Jzz,0቙ٳK''x5Wh+-"lMgx4#JÞ̧<'9=?Wь 19 e2q8ρ
+U&. רk[mH}+iޯp# ;9<K2Mf]j>s!&E:TKXܗ.S p8.jkaR3нAWe4ހRbc‡/L>e~>g|A`fNmh5@8
+q P
+Fe;{v0-[nrt#Lqjh8Чm>GulꖀiEP0'oeX׈<qL/YY=-s\yLǿoΆ$@Ä!\0` cm 6laCH %9HPҜm%Ҵ94R4G֩iVȦ-4e/ Қ')'tpgSxx ƬZQN0]s?u] W4#={ԌOJ5*:t0#4qVN|H5*}\.I\\΋xN.y^s\٧'y
++9qJxpBq|N^3sqL͛yphyLο ` _ao'L1u4trX>?L0?gpjJU^lbPx;w@x#F7b;&"awQ\r㑗#G~-QXM7gQ;O-SQp2"G#q$*q`i9-2 v/kΘV#cak6X.#/a86`Cj~c>11_Cqy,$Ȱ31;VcJlYi$+6%90HAOPKL=PISA&ze?Z#tI %UoW9R2yWP~XaJy;RU496*pz9֧1ڌv d?}ѓݙCM7!Y'KG=2%|'>KL!rl/碗͙s1  ec [Do=9 V8PxWtS9ڕ{QNUy^ g#?¡3m>K,;&Ygɸl`\*cїyŸ_΂j
+([
+OaZ p6¥jJ4 ꚰ>ªzB$a-@Sf4(cCO# 1.aV-EWQ|řh/΃D*.m^4aS$E0 u3J$a"?JE>Nśi^t!:Q%,r\pVhЬEv6VZk`n&AaԾ& EQH5咸Oͫz4KI='=駛qfܚ%piQ)CSU6UhԕêӣAgF&}
+M05Ƭ\ U'*-XQnEeBZb;PY~%TIL({:ۢ&`aۊ^q5, Q[x2TYQX
+[P&C~[6
+A#c^dza0Vy#{2 6 i-aU-8YOiɞm@o>r:#w#K V5HA 5Їf$&"p|wHdꓰb | .&7P[M`븪oR#$32R$uHYjA\, iD"*cDAtH8MENLm]'{
+S3`VjeSˌ[ۑCh(u:.:.Xn0g<̙+[F_sa
+SyH1g`^.@Us$z 4fp'Eg 
+m=E'{xK4bX94s퉮j#MCd;srÎ]ر;ر;h(|Ful]pwr߇ {)5՜ ݌>4Ap&B4hΏ{Hc_N`G#I#ůKuX4`;1'-cٮqux-tɞ%CR[1Y~ւ}8694.HbU(Mm™&>v ~fتnc8!;ݪu.4@W 9| -Mywt{>Sӆ#I? {YrU
+n
+ۧ*oC{S1ڝ<A <8~ZgնZfV ղZnjMRuj?Sf9/Qb9j&-p-Q;]T-Ԉɏ>eo{g)Q~hAN^Z0UiEUUnE&herU|w+Wrm]w?<5nk0I!vßWÕ_n/*}cJ;U *4X;<1*J,{T\,POfӌov?)E]C)!*mU2a.mTAE5k)7Vy~7L9ɚ?^3kz7P
+ج%E҈ CE#\ 06C9,{rhaVᮚɑJ쭉}5 5D㢒46jR'ktQ@#bjxFOCcNjH, Q-נ\ZZ#mPGjRRc<5>_b5&.R)qo%jd%ŧix|4,ޤ5^JأNh`'P-?<*?we1 $
+boeȜ6RpeE+#=ItsjLJ26(\MG'qA;Nw(4bS:F @QU<Cql6)c22PzfLJ5MT%eU ř4lWy4ɼK`nkBC&0#Oa4Â`0eIFsf{Ȑ㣤@%VBnrc59/YyɛMDK&XZaYpY) _+4ϡ\qh\CR,r()J<zn?e&{)_* ӤIXtEXs4:M
+Yjm5ں]#
+~B:wh^0JVE7Q)ٓ1jZM(TD‹5dJ"Z%),-SHiJTjPFCCڞ
+)iluO
+M y"ujM穀5Zzaqiȥg7`xa naw4'?P_\c
+z  a:̂`&h65z=}oÔx$}L_6op9o@ ` DA
+dca~P:۱߄V_?4z"J"<}t K=|YxC?KWL|Y[0Ϛ2cAدj~|ʴ SټT?QJ z9">uqN ?%wŗ̺75f/NLN>V 1,vb{%Ө;[|;xR><Z7tHCu8
+#>prWJU}s_DщTMNΨ@Ə7𣋼:~ŏZu[8}D|E Bm'|.85go-/(t"шZ:s_lخ|l6bsll29=قldsۮ"G'#$:D b]Pr\l.`w,$
+ϓTVWUD̮r]9 ];A1B9 (hr4*Ѩf,Ry ZDd+G#r"pvrԾѿ+`ܵ^ Gk4:ıT-TiL\Yn0˰/
+ŪIW=f8%K(-޲Z<.z*<tU bee6Z,l:M񔊧#|
+ğbFkգ(ǠYgI[LwU]V tTvniNb[a[ѶA6vר ꬟RmvBCYcbAL7c~اz<(m;pפQgm%muvZZhG}F~'&=US]g<][Q49ܠy ; ߫ZUS=8RhmȢ
+`騥N:)C{B*su 9 enpS?uBX!'Dk;4(>ֺ"tQޓDY3%R=V
+=xz1{GN]a92k=c`~53tRLrH[(m $`H#Ϸ\_!9
+}ue1ӿH4)$(~I$ =5XE_Z#_t ^}Wt,RT$k$S @:;I Th$9")Obp/ yvOL\Mb&&+#rrC|ǥĠp!ҮZjBVCq$Y!6BLaCSl aTdo1'"lgqHLݢէ9(Ji+"J_1uBp:ع DSbsMa}aܰnBywx fkf?T#VJ٭aH=Aa+\89JI_4)ҟMDZYXI׃(ORS_US[Ƕ\[U\=%=@vP5,O8"Y=%]6mzI0H_)K0l>.wR )ZL-vj5!/Cp'V54Xք,(z۩g C|D' z "9&5xZpT% -vz'57` BcㆎS}&Tyi0(:5 : HtRwKc)j<)^xrS긭Mz[95YiGcݲ9S OkI7e.5ӍB 2{2ceey(Kk]XXXv]`9DPEEE-}3Ѫ68ƨǚ&5UcըʹMG϶&iLL9l?qg~e}yG㣍 Y&FaV[O?r&4ݑ Cƹߢԩ~?p
+x6Otk?Sn)qG>H^WBԟqsϨسu8Mhl6uF*ާ<k1N161){:&2lQ|#&x!MgM:c w/wEcj/vwzYΗ:Irq\.+ v*
+aڃI$bNgkbw%[z\h3n6i#7PP]I4ou.w:h?K.vi
+4jИTmnq<Me>_x y-5+8{wn}W0zh%KdhVWfvWc!޽LӺR8MI~Tc&X[Us<1=/gjjb(Gˋla5øph
+B48)J^K<YMv)'9_eT(3VΔiHgf&SJ^@%wM.rdžP2(b 4@nQ.[lL͔3#Gj2R˕Nc [\Y(9yY(1iWS}Jjnts\N-کr>@);҃i Vgd(͑TG9du(9YgdrF wAF2:)SB}ځγ$:P^ ,g3_Yٲ5(ۢt%ggWk̮*\Jp5fuoQeEຬ(]EgS WgђL1P%P
+-ZE'̃>8dY]p9dj FEvǮ"!fRzD1j56$HӚ1ZsL5Gڴ4uSv~LLJ=}}}J,}Zҗe-=/kMي\!iZP[OhgJ(<E{,#K!ʨ4+iS3EL8#+W]EJrdsZW,͊wXfQ\g.s%k=~FG!":P ePidzUF38dw $ٌ4Y!J0FbW1U5劫Ƨؚve<HyEg
+_+TtuPX\~ ZpA xA{ ]36:<RJ 3HYLZe5Pw*ʛHoy $ R^Ɔp`}t
+V@L8GTKC3N1ϊPX1}\~u?Mg3g!0C1Ü`v.tޗTgYb3g`6Ffc!"
+2A]ؕKpS9 (b ljP!ݟ+ap:+5 pH>?ct$`]9sMxB@w~DŽ q`
+a2B5X
+?>Ǐ?Y>c2D|oI9d 88>//w@<)3̤NL ?>ď0՝
+D:\fkmt*t3zs<l`ۉmgbI
+R K9Һ`6o֓ultj 3I{nYа1f;L5bJqaxE:d'ӁⲾu#zoБFBWAth !#ZхG'~,#O&ZDX\@m.6ns;wޯ]{dXN}v&Qhdk&Q,E*xШh!##|B,֣r/!4GZ-
+uT&bV&ֳndt
+)C
+Z2ш%TJ TO e?<q[Ƞ}ǸXƑ` "mּ6͍LC4+5F7:G1SUS112b}r.RulLTi*M0Wn/G$3[kK
+-Ɵ&XdWy͈Q2c$@Ֆ2UYԩ2a*,aJ4Kګʷ~|!{N`8NZu\>7]/Rk3ɰZ嶥jm\Lʤ"iʒUTZM8K[T`T}wj9ME$QnrvJˤ3i ƗR-gE)v8T:Lũ#5-u&0PiєA^MԬI_ ەO_ kx
+G҂Ҋ. `+ܔ9"T0k#Qi*7eyG(AuY`w]`e]]6xM0xD⠉hhԦ:M4=$ΤvI۴;^37{y{wiJ>SMM,)O"t]-)n~]6pDo}=׿%؃
+M|!.oNP9M1#U3&_,UVSSE嶶i] u.XwzHb=xpgيlAS!|(^UEUY\QYM29m^a,-<ٗоY.e|9)-0pvӍ*-M0 &]*pĪ̑,Wi*-5,TRŮ:&5UW27j{/h*u]9rFc3e.KFB|P e;GYli*.RQyVe(S^&OF{f)ӡQ]FV>L+y>FG
+}/P06Fk[yoHCY2uLRz` XmJ<q%(YI{J*6-h
+q]C&9x1~cI27e8c~!|D^ KKX}4Y+]$>#I̯e'{
+n2.SY4yy]C4b9eh'{̻Ja,#tZ\S Z!}5}L>U3 xG;h^ms{V3]8
+Je|INS4hTO[}?#ĞIybZg)W*7eƻjArz}}Fwㄧ ShGV4\ԭ~b&Tb n_}ث ѫmM-v,ϵ'`| />g,ƒ8B-^T*G_L|7{٢mӉ9:w [iɨ Fܤ`< W;k,ExNT2yg?fۈ_FtA7
+Z9#9NZ֓I:Y'
+\9yv2È?#KBh&t0U
+ 
+!:'}<_+Qˌ7ъFQ4$M,c]OxaYEVW^eN{{J;Q>!ctM:^FݏNtf6R;Iha:fmMEQڣ^C")RQXs<
+uM!}*FjT tj"W5=dƲ7k 7,jpV7PE,+s_ܴb%4J{JCvJ.Ym\)Weʘ&+W*ߩd~
+Z4ZHAD˜*@#S4hтk"6P:MAZ]ƴwRIJfa X<1ٔ0974dnҀ9~sb}kIieF˜, WrFAeY*]
+7(hߡ}
+Skj.7-}G\ܓ<:B %CYXc)O/;Qb-SOYrʫYVI6+^UrD~ǤZ[ث&xFNjr;^Ɋphƒ8$:j0.kQmRD5jq*P mZjj9Ffy|Bu|A5WU|
+deTTaԥOѠrcʉVV 0ˀo
+UNڟ` +/hנ]VG%KL*ʐ(SvM`&$&0 F)~0C0^eoC#Y;]#U bƒ g)4O$I-Y@Oqئ)X`]x)k
+Ә$yҫo3h$a
+<߅o79|NFb-COoc\#Wp9/|^u¹|<~KhM^#80lO1|e.c_ރw&2؉_3/^P'=C%i/pZO~|1!}
+"zARBLy,|>Osyx4c$csyy0;G{ W=hϳ<*wnY6e6NY]adZyN8K΋eT/·df }?edNaA{)tg"֣=Sqy9 ܯ3
+OTnawj~ m+'`6@;vahO0y$>f{;{n2ŵSϰހa<_֜B~c7EE]TK2/{]B?J5hgI8Zrs̜y)u&x"<参 ǃ-hQt1"Eo2KnB>@6X=GRff}6C<o'Gq։JekC}7Ƕa111-4+f:Ol# <+xr d8rD.w-
+2k9s9Y޵XENf';VR+ 8WY\Nco5RT
+>Kc@ ZbKI~hyYE6VhF~ , )Y}E SQiT]ILkiS;,>Dj+>V%%9ib"6N&!ˀXf2ez˪cU99Ty:;QޣeJZV2V˼jQAE-\RrU!u9Eqs mohn0*]7t ԵTiU)CjꔴXSҤZnicƄYEyj0*h|JTgX>E:'?'n݅=XK۳|ý49u_;-s)(WaQV+TѦhEJgάkpnr*[yZsrW^Ru pSngN5pwoc-u@[>C )VB.1WljtU(r+RW:긂
+ܫuonkUsJ5_#9ϫ}*s:Ļv|OA?tbqo&FxL
+y,j+P[ZޠMyu7)6U>(g9|'e="|Ruޜp
+9?ހڣس^V>7CPǵIrag+Z
+eʖʚpȒp1xiE%ɔL%I$1ILY( IpB'Po+h{$qh~\r߅uc H^"sʢ!Sʩ%)
+S jV `V4NaRRRl֝Iّ]hϠņd6h3
+ G@e"
+JGC))RZСPflikRATej~Nξ>e`.ɐц?:񣛜M'
+>=w$) t9Ïa|$љY;6f_)b 5خǶ&b{gbx O)5dt;mG/Q'*;)p XUf{&wѺИPn.NVjd ~E=Kx:\?דDtO`X >-`U2K@ +\gQQH/5?z ORz^Nl߰Ǩc~g;h$i= lYnl WP:l7`{'!n-n_%sŃtAzDwm_P|ت]>`tdJa7#u:IDQR-4,MGZYm
+*ϗ'';<wrݵrLRg 9<el2<?Q| lυk1 C@"S |^PP,wMy^C\*7Tof3eUYɾ7;*{Gޘ W!A yA-@A-TPC-J ӆ)1B&aa0LbZN0uȣj~@$_@uϝŃdSdʌ*#Uz$HRÔmTbt("I݉À)a%ى>A׃AA?L pew^g;n ,$$\ T
+D8V^Bq2ZN6#2Ң >q;9oyn'[鐫%g+{ ]Il%
+e VP!d"Z "8<<]LpUq-@ԉh
+c> ) $Uc֥ &Sa
+(Hw#)<as29C>q-JFP .~1͵~L{ MHi 4 -JG ll+@5c`*o >40E70cۭ +W/pdK,1!a7fF3bll m B&xjG؄
+ɷe
+ׁ)Vޒ)Vp˻K4w(_ BS4n;6Yas_"xPz^dt
+u|L/ANAù#$^{Yz<SU) [x30IPJ_e:F=3S?)(G, J.y_
+t0Pq5;@H1q(N{Q@S tOxZV1jTWSUE_m^\[Ɯ$- zlu 5O}8! d W!\TFlU"[yOdn8(GF>Ɵ9D!Mǧ);Lr+jOU,U*.V_ZUbRmP*Q!y7^'q~&>@^gUcS;Y))*wzT0TjĞb{*tT(Ѭ<grq+˹ZxJ~!ȗ| qm2˻[ U2O%${*vTS+Ky<Mu(]wX&ez:WgX>j-JsHOU/Zl( "Tr O%*HV^SSSI++5W0*7BMJ3:eK1VmlxRS4Na\ɑJb1ǐ' A9J@!%7=A9$e(ϗP&#}cr?8ʫ
+o6$,fwI6l~vIHBH&@J$
+$AkJJJRZjŢXZdZQt:0VvږaV;0/۽=s}o
+|ӷCyd}Ke+{y3݌slP⼫`M2|ey*(!Uh+ت`>9ò7RN-F 6`|KZi
+|A|lr :)wr(4KP
+Q~RpBpNˆ/B׏܆hDѲ!|PNc%|a#hpJF0ߕK<GrrG*TPV+*X瓀- c
+-[ 1!ʜޅJ
+qŴyּ# 36\/5Q%,iD e $~l6[)l&`,4o!$>2ꄯMS~w9Xeqrđ&fNjn q/X6,ao=puV?&kyGC&g3dL(9!Qj
+!#6ko,c\ɊA(fC~yCv&ړ{OK߹F*JyW=烀% qe#3pH\΀j<9y{@&/|N:gT "bc|'ku4Jg-_-__߃?[mrrz{ҿrGQ
+-@t%"}v̨N|StLF8$P3\PEM
+3l3ԑ)eX%x?<>j*
+
+-tL4&qXsh^x_xONjqJtR{L(P&˽v+p^Z!3Ne8qY Squ sa(C2M~]
+{mf{Lm5:'`6?)=|w|_APŎL籟.Li$_y=Bz?"kzDZ}p_!B<DKM`2:~b9^_#nrGL_Y^.=4.rى;vo'3xlly`<gu͑v*499T ?n#/[ne tLhl
+Fn$'Dh R-며U`Vf&&L{s(!lǰ]v[a`^LS7
+U;Mܧ,~x? ,<fﲸU`s%vX SjjcX~l?mnQpJU=ŵ[}mtڿ
+6Z0jTqlA!vݠg?#o^vP}TʠNAVQQf^\N\Z]guJËꘑ*F:tJ3Қpc?RlBMfbfsR0$<7Af5e%"H'#ݸ
+ԁ8cҕhC|E\
+;{Tn6ٻ4wX܍*ɝyyrgEo/(3?do%3$$`BH@ Ud(Q"EED
+TPM(Ȗ-Z""Kw;=4s3_sg}ߖ6(M@rAk&Ь%vJ^ ; KgM@ úZ|u9I<9v,}l+팸 O8:C_ mk<b$J.!)A-A&.~OHtOHZsѴѪŭ$NVi%M["VxsRܢx:{u>4 gqYBzt}N}.ѽzDEģgq%+ġ~ŢNy}d8/aKbrg*bNE}
+A3A "M~K[4[<~M [[%VA[rNj?]༆ey
+4JC96g! -dSCI23!rm3A{Z"%
+ESjhrٓ\gRGB %xPEWjI],-VI^T0 GFZќ^IRkA#VN,c.'ZϕW:g/\hL1$iRUkkuRG[bNڱEAΚh˺نTIn}Rɻ@S3$( 4[f\" h /\4DSGwΆ݊+yލCF3gDv6gTT a[>u 4UFhF4B@?hI| baX_MbHДt%0>BS .z$f*|ըj@8:FF0'YPyH`pΪ4M LH9:KFf T{|jHh#O
+6izEqe-Z^Yqխ暶U_WݱSv7٫w8vC 1r17~¤Snco5{gκos~?.x?.|EO<䩥˖xz3ϮZ k^Z~Ɨ7ymn߱s[{o{>Og𑯎~}Ϝ=ϟ.\JJ]IYWQdg+/RKrR+kAݔ7) nƃe-ʅpa2b"NLUV܉w+3~ܘP~< y G+K<Ô+/b:&e+8fMy[sP>| T}<:I?().^J>\ͻ%~__b2lvǣaO G8#1<\|LҚ7?3' t뮶;f[mq&O6}ƽfϝ7 [xe+.j[ȤƟILiLT*Nhj~o'G~83gϞ;w?]pƶehbm֮-;zW_5a3Жj꩛sӲZdOG. 54PCC 54PCC w +u%^]/9 _ԏ-~kwe ܝVOѢ'~HPG VFծ=Ͽ1}C&|ww>/n{y /Mٵzo.Ѳ{_d'װ6Rk]/޳̾{tt
+)Uka"a>W~ՓĢ ?J!&vezzc-̣>$CkSFkCe\ )j3J-)|ʉ鱶d(;nZs>w'C71}fDm<W,QduYկb Oi6 | :n\h[S<Fǯ%wE:!D|%KXu# ?װ
+}~ϴv|ʵM4Yg`&_`3Ȓ;
+TEr-ZFbJ_6P@
+J!Cճ'׏:ڴ^tSM_CƼDz1$$7M0-,6PXPjw摳Z_8l|rE:Nxc~T* v2pFB6Ŵ6 ޲ veF`5mgw8ȀŒ9[yވXDBGG<3))若[زl^ў=ǏSϞ)v{7wo82
+bpO8">X4 >J6 3O;F.^hW}F]υ
+{E"f(/c`4Ѭ7h^!}w>85KhʙHAΡ 5.-F\ |{Gq{im=/ZtUppdK*8+#KD0
+3
+םj^A\ˎ*$,!2.KGv[=ZP
+$A=]+#zw^ XaF*bZ*SRD &^\4h`C͏@v~'x<\վAGi]8^@(WI<}IXA-edYÍDVa( e Zg:8QCHz,I^PQ%xI-02,탡
+8g:
+ElA,DBHHB@¾- @%1, { E"
+ZD|>^‹w>LpP8:H"Ol@H4@D E> Eߧh x 3{ =p~@bIb)y`o%65~)
+}OztGr( yĆ_ x {L|@mT+5s7*Nȁ3GR]xڅ)|9x^d\ \dyb.pPdmkkm_
+b} \hXL35j1|%/h`?b!4У( ^@9 Sa6r%'Pb 5A(=)|FIS|F!'AcIn#V4jBkn    {C.bE aԞ=ag*"tVP*GhHLf)sUQ͚H%PY~5[y6V!zgkhpwK
+Ly}\DM3 3]WdkijJ$#d=U$yA
+7B-P%P_6`ׅ3$}N+5AIL62U<CTE.3Q*{Y37@9b*
+Cű-NV>ߊ=jVy& ޠe=<S%tX+gJyR3!鱿AbhvW<Z,2<_)*46%SK3J2x&a`8?A8ͮbK
+zE\ N^禗p$Fs %AAhSϷ zO}G-rc).&xũœBW>ή0ۯk@G
+*h\̰O^LA m(U42fwO'pxa0|YPa47(t%1 Ο;\0^vwvgԟg oB l;e^cdUd ~Pb07(PfG?^;87rzĸ~_|)8Wх5SSrITdC!b@ As/<qvqXMCARFӯTbkt-#sUV%U}8Y@@yd;fј/ Oy`Q\GgCٝ8 P&*)&bWl M@fv#b\MG6lO?w3.}CU(&:҇+au*mDYD+6ZQ(~ʌ&sPcP|M 3[ǿ3E͋KAIT` 9IK0s ^RE`J2_mM67nՁ/t]wI}YSԽtNxh*w ǼIHNd r0 #oH,BS}ĈA7ar>=s߼tD[gnyQAA$LN'3 c8FBm}.)u#=g4b4~noUc[Q8
+ |H{ȠLdT}ūoݸ\7gMӫ[e`Gp=ϡnO"@EdYs@\4yjlflV/o.=ٴBj:*n%}lNmg[SeJKn/T^P@QQQ@@PA/],YinmyRؽ
+e[
+C>yE@)H;a#ssEfKϖ?,?_V3|~lEfAx8䌃XH?B
+P+6/
+f^ Gp1~)$T1|RB.玦TMI千.YoA777SCkCɦC ?#4wPO?Nfo0qZbNYLn~(VbOKmkZeu8MB ̵Օ??#Ȏ,kNDs:#:'>V\9Oe t̚R2'L掞8Nhmנ镡1!?mb#~GPqEfV 7UO$K.R+ \f9\cLu%uMXyߪoNhkGWF 5Ak(9ԁZ$)93Ε4RfiNb]6*MZInAӉW2v -&Ġڷ6
+ cSΙ# ͺvUD֜Zא )F/
+(F;Lj!
+14!
+rfס^w Y]1|6QHUU5gvŹ=utsԚSͳe׈2xRKFEMP81H|
+$^y9h:жrL~`v@ (
+CA"f?O /8עгV:sMx #L]dƨӯӌy.Zrp_OF6ߙ a^ cP4#@94p`X(^<|ͳº<ضJsmxoƒkBi팄Á}C3ȞP'{$N}s]
+݅Tf V;pd}l Im t?n;$TǠC? E}e {,k |7(^^B|Xλ_+'QTyZs'1]%~"0]_,p / PX 
+T7P1!O I=;scPcƪQm%WY.(IM7ـ Ad|LgGX"nJVx+9J%rS}Zd5LV%THdHm/6%^AfdP] ={}-*[[|SJј*9(#6a"[R)|Υt9Xe*\of{{8 o@eЅ փos{Ȑ選 WtEi2ȕMe*icAfa<&ZOki*QCP:gZd`"<A72`/FL]8|ÖT4dHc`JBFF%%*Rmd`lʨkJFLa4g!MP }ޝnI#\IH(tSM@ ZE< Y_'lkWOn:JTKIIlP ,d.92h0u/}ݾ tZXiڐsMJLGk6WJX}"Pby Ѥw6[ ܺ:y{G=~bxHkQIqFډsB+GC+KUb9#2 SڲuAd; ޺ܗ<ruzDXbbuȳd53MĎJ}X[SLP-i. ^7:gzdCz_-?Zs-wyޘ
+ 0oC츚P%R_;!Ȋ]D YKlCɔh$-q6ଜ@e>/zn߽ʯ'mytSqф̚t^s4{g%wQ5g,lmEڬJgd୛ m?gz݋NP*|3I;! RʼnC䖸 5mkey_goMi#֊NǺ_ъbZԊ"( D K! ـ
+z*)ShSes s
+)[+,vU%8Zyps T z;v6ُ.3 -#0l&. . x D ꞏ|ces`"5^Y{JOD'"E5 2p!8 ;B
+.I-
+vA@Dl 8p}!:.uXb,15(`ռbYȅK2Uw ׇ _ yC7^R@qX;
+BdIR&ԉqMYϢhc.ƓޜG{a87Nso5dX݋`J#o;A ccx⇿LNHV<OxF62GF_#yCaC[yh}!D?١u ( Kd&̒=KU'UQjx#$~Yx/h0_|%|@t)
+cuvu&ѤHom9v(8_-ͼB"ΆyPa)!fZ=p㭡є:
+2E)˖*kXF%Tƨo3M"ZWMM,S(C UKis໦z2*hgʌ0O֗e
+]k[F[ TNMAAg6W鮣//w ER $zGuY.-*\]YD i,Wy:3?i5z[&1T oeмg]l^um;8h=Co?P"ՖgWK$BQq#Pn f[~MxAb3Ԉnm#Ǯ F4i
+_(J'uq<,2ZVP\QJUd}=5@ !a ;DHDȎ VX Et>󞞹's1{.bXܛ|mz^y3-9D^鮒d L4T ~m8d{嘳@_h[;V'(PJIki)%F'\WTonuwWIeU'z+fjol/c}I6K m+ΨU\f\VnFeoÅwE*I> fh:֥ݰ˧֚.n&(袔[1Z(>D$h $k+{*%KGuS[o{d<5mq|셽qj??gpzB9(RF/oeV[׃ZE-M]5rI@.i' 7crk]:_Szp؜q봋sd 2hD Ӌ>n_ҧʫW\[1(\Ax*P& e~Qaўw5rr,` )||dh2e"1!>LpW1CBzmM><\( WyPzѿdf--hxomP1^R#g¦iIIVD6)/D~R:.rЬ,N/TV ֭],[y
+)u߃'/RBHoƒHgyQ0
+L=ED]
+DI(>݂]+Q[W_M[f1-cC\ÿDa)5:6`5\,+E$Eq$rV7z߂jZ'W ۄpN%4X`E3@D߅P Y &( Nv /Wm FI,ˣF9"/*J~ ?*\8 'C| X d}51RL܁i k|s'Z8B$1"۳ uod8:;r8 8DC+D8CN@;)/S~l ZCDݑA5"*{&#Ud8p@>3Nl ]80 {`ma CVsX@s`5Qd3c&?.n)TC*בֿ$\)/]N`,w[V6/SW1F@g JUTC4$"1 Bg $*AHP ' `jAj9H7Z $d;A, Q^jC>Ak6*8$l(|g<59jCo_j@nEDioK 0W, `{kX3_*yBJZJEZ n $/F.D>y;5?5HoCIH>,1Sd{jC<, 5ujS h5<:y)!j@Ky4@ݿ4$ig>3MM$" q:y;*CaӇ,.1ҽ?'qL.\|Q&$NzEseP ONM%O_P@<Ґ
+ FI%>aOЀ~9x,&i<4А͛lG68<d2K^QMk
+dV¾[6 ʺL:֐a)V+fęL{jGJ6;o TX
+ڣƹo.yMG`bF)B+DoS9&j+3%*MF̹gE [W>`H7K
+ANmtaLs)JM
+
+
+.QY2%Y")u"bb]
+q@$8@50Eڿp0̿bv9YCu7DrV,8dI6Rr<ĵH i(ߴ
+齒B  dW'`#g! ƽßo=UǹC;|{Z#"[o]MIjRE6') oTWV(VX5֝U[++h(\Aj|l>m/^7K>fs,ؐ'NYJdXʮK2_f dzh F<ߪ!zA=P4;A%r@Esw]kЙM? _p8#,-:Ym+jQYņ<YK G*hez}I$jp^ixo\GJ9t[ivO=W{y{7QUmqYd
+݄/4s
+b)R$Ī8V}pKsةU
+v|yl@jGr j`bCo+ o=]ޜ3a93WgC3"㧉1ԸkxI!/)uJTm sE7Cj?EXzf?l^s_);xًٳa'fKf`cfKʂCgy!$a~W}g{e(]P;# Q7la
+8
+` xd( yBr&gp>;~`}juBR*G!lu))6<קix A;/CԞPH i =H1= bPz\
+!: .񑈾7შQluXk@q
+,.`f@
+|W(mj$2_+ϒj= 7ewbʯt[bs{3ilE q`B3@{Cag0Iy&K<^RKe<"ywqEΤ*y{bVeumus]E.Iv 9Tҋt[@@\m5@; g5,zy C^p..蕒\Jy%`ܡ+8э|U|%ۤ;ԞޓU&?zY'qϙ@ZelyeHNι`^:V|`~yIϴn)0o$t9ͤh$j )Wr+qe)]bBȚړ]˲P2AzS
+<@%e׽+r*볢CR*Uq+RHs*riN9$XDe:5}km4dO[iAKFJyHu6(̌WˑJXUä+N/2XL<3fڡϡݕhZ-9А"Zy
+=VCM]j|bCڬ؄#ب3kel^P$-*U֬\9j40sf-EhU1
+g HG+@_7 Y@Y{Uz֧u>w[1,b]YHLelQuҬ`ZdY-IVQ¾guDY@< ␋
+_x:[9pˣ!5Q-e'&
+㤞-Pq$FDk
+(ܚ|9ǻenkxn1P` #|"Ȝ̍j]w{MEP[[L('1F:רgKjJPER+.4ŧ3M7XN-Kt_>kDP"ga^c'qqK>˞^=SgsוGŜ*OJ)*JS9ZSXW
+tr]:ǐ,ȣ+*,4EC>UuӜХKe"[
+IgMk@76޺|tŦڳ1ѥ|~y
+M_La˭LQM-àͥXL$}9UBȹn&;t$=)Y-0epD`anj{9vZkgoaGQudC g Kv1[F?!RS
+zdH4%Y0aN8u)H d9s8g[lIJŴ\u]I㚚G1hhjsP+]ռ\}xn~sDr^G{TAPI =uz:ڬ5>tk7ͤ﾿Mw/uk zDs7u#)y)6YAO9e;푷T֦P{@!AsSwZCRs?U O>Rj&;ߨ}M[Z
+W}^w76MUK,Ց=8RAbyڰsԁ ֫ uTqZV"D '(`A^Iyݿ20duQ琯UPi5w["I^OjfƵ<ɕawY9*y;zZ]k^wiT4لݔxwg 10dBVI۰ՙ!NG|=xa~iw\p7?W^)m,m*m+w4XƋk/ TA!GRpn .q.qst [q3c>VFn=RRL{ e"Ibw:C/8hΎCBh$3b\PpJx֮CyK2c~q_vdrT]ptInp<!IȍN0Y{،\1~dsRd }0b(|(ltT%44_+gY)FirM2!s:ω}
+ai&ܖImUlDZ1XKuZO;rpl@}v;nS0q)
+8NaZVha Ep6b)f1D̊pV qURV@f+_}냊5^Y z4[{།.N!nQ=A)Z64X=&cຄ
+/"˼6pͶBhrwr,"mگ78T:M Qm_aΆ& :Tqe_!l 8tC`d G-
+mPjbjRJTF\G
+/im>MKH{
+D6XkBA2]d (["O@~bN{@i 9Z F?x9 ϙac<M cy*K"ِ^r۬"/ccWȬ>iǩF9ݬۜ{1HH@?!i&Ri#g.Qi@sTnBz!<y1v> eJ ?Vެ#Cbhw/e=(}z,~L:%|HŞcdA@6}GnRŨj=˱j*n_J2}rcf32gҎ$MIٔqQ~7לG᜻ vfOJsE]Y*HPkPNaZnZweCI~T~%c"7*kHNT$Kc͢ܧEw/ sGxvt'g@B6$7ϰ&5oT#G:
+k0x QbF-&*E jQQDkbaĠ8?R9Q_3kỵ@` ܦO_,Z_t86]aɿe?'#a <RN`V0epIt&+٤FI7)DFP^2)$9enUH4 q!uL(n_َ+;WcT]vgGjx@c5FȢLGŦ 1RI
+.IN迈< Ed ^mdF1Pa]{f펎_.h"&% JL8YVE1F*dޑ YbS,A u-3АGrkuAK[~0zd{dڅ
+U{}.ο2HP%Gs%F( 1/SUJp `) FV"Ѐ̥ɑ+O湖vNYzrG}úMdGҩX\ʇ@.KX
+C, c L3EGDs#9hh>dëcV[L:<W޺^^r M&31\_.s)"$WBI) 2_F 0U8M_ "X =SvXkΛnky^ٖF+ukQEov1J̥
+)
+118)<^JH'HF'阵(|x'ȑ,Р+=t'nL}eYK^mwZ%.DR/XJVltKI*q$X- b3'a\tZ
+5@; A_m@%kPkj~CfeK0Jjn@A((g4:I?|kXyI*x $%Rtfffjj3Q*jS$bZ\uab'q(\} Tp0zSs( 2A hBmT‰c4탱!]~^qD:M"!#M)Xag
+'d&n,D#fa$ȋO0K!G>(B'j m6s+.\I9MD*9N` (7Fx!$fツ^
+'c-uh&W؁/1("B`p7Yke9⬐˶ETxATGLroc?KO~K RSS?{i_c#:u6ᐼJUOjoSp
+'r"Rqΐ1QcM#)'XkF/%mG{~B?d%KD.vX5u3Qi`slBE|q볢0H+z/}+K~?Hcd`v1n O ?dh=L-6kq=NƙLR
+=d,GJfb *`[%ƶh>U^ذl`=>ԧٝG0odg>$nޤ__I\2s)
+$Z-2dAC.q {'i:&C D,{ږ^;2(+r9gJ'
+*GUYs[eu-FvAdOse}N6V i(&A;}_;c䰛p­s}Vt*YIVe˯W6嵨~[TsdJiujejekq@H[2YD,%!iAGF>s:jh[i~W#J:Q#gW *J-eٍŻuMj*UgirYB?uz@Q5B];sk:
+*HDP]@?8*~Yѳ}ssv: {:,{~'ŠBzjZƲԨ3Y i%9ՙp0W(D/D)췉y@4!M?a{g6-—KR.~4qj4h^\:Y]_^+(.*N/gd)ŒԌ 񟱒@:mCySn~c+ǯx`q_8ΩZAd
+ёTaiEfFajŜ¾#E%/KiG $I;8-88 w>\/~e*=3rpAO^?۶[cK8!)LjFU^Y\Q/?//[>_LRZbٛ$8I rԫ⾶oý؁{q{nvh䘽a^k]gOhV0qјĴdL^M0TWõO5Ki1oxU+q@6\ET)I}QFˣ{*޴!ݖ17ݶa LjiO$3#>$Mr,ȅ#q)MU2Cu6d7m\N ;~8I j<z<!>TDfl\o,jo: {FeDzS{“zbb#; WקjHjNgv̦_ -8$t%diF4;$ݑFSh䑎T^Ŗ86_p& ׄ!q쁊D$߁!c`V761=/{5JqP)^^ >;JBf6gdtmB᱃F՜ACƾ,ǴPOhޝ6wBš(whñԉ9mb%~cPI _}8-ۤН <F=Q+߬O8)4miuy(<4' +d1*9s\\gh'ع_l{$2ZhBhFI+D>/οQKrk{5.T@%uR=w1щXE_R^K>KC  />/iE%FoZgaAլ HkU-ɫV"WCW9FHՔ}B[Z~Z/9})gOrveNfB82GuRbE| |#5lYwT [`wi} ӣ}x={ɏPcMeC0cy^a[I2ކP_B-7:=P&\hΆ80dWPh' bpN't<Pmu༮-t0y'I7V:VyD8t p|PG."IL0a<7y+Д_*bTmҷZAV (fMQ4L_nHt  #Dd\(YNm" In`! 2Q䬁"od `n2M&` Pԇͻ!+iC4+kBDud- _F(
+ TnR7X57Fp.0d!PF8;!\vj@ndʩXNNȫIC
+*Ȱw;9]笇ظm@X  o#D
+4/qN6KLM()|1L҃"_ǽ'=zC|KxEN
+i~ h/ykJ=@+H p }F@-afG^ANE;VG43%<9jS]CkwS΀ȟ
+4p1:?,y7s_pyP]yW~1GyFԦЎ'XGE6&Z,L( %;Hi{I 2+F,,jB&)
+nE>rSiT՟՟y z ߾C7u27ۉZ5/[|ٲ[WjʙN[QM*jmU-M-4cR<7U>42_%di>
+35LA,ty ]lrxOgwۂ_;CO=aCAֶ2fS<֨ThX%B}0/D=$קUR:U)?RHӎ1thk
+1P= f<^g̍Kv;φڻp;iSe #ݓ &ZJMr`:/2O_^*yNi7.*a^\W<ƴH=;af~.al̽s0W0}Wu8/l_t.ҳWl:j
+,0Et
+/usYq[[ 7sbMFuaӶ9Y k
+U E┆u9&NMit tIn3 .3^9w^SǰVՑ|פЭ37\X%XQ"L{~:ܮԶʬymdmC9TeZl7$chI-if+ qA3$MScCV{n Э _}#/zq|εIJŕJ*-A#HOr{kJxBrA7좑ܭt~NZn2I##rߒwYQ۞7<{<L Yȴ{x)}"I_DW%5&u}zR"Xp"]~$ҤGHsaF%z_ _r|2U^~AɃB%h`U,숋};&.v`o?O]GHO#'oLR9<|5bOrܬ W 7/򬳵b;6ItSh <eڵމ-N?#?Gk 9:"ݻv.: B!B^=)TLmMz0'r'LӧSHRmEӹbGtozK^șܹ35M᳝찹 v .5BAEB"DŽl Po B+Mg&<JhK=@±aI۬
+.BY
+^3C \?bY>.Ԉd#hݐky˰qooLlqd)jMlp-:2{-O)zIH8!J"HX>--t?x9g#0 ee:@i5 !e96̰p\C8hՇ" `Bʂ,R)!*Bk ;[s@\#/x7){4<ǃ.fqq!cBE1"ST,B%W"=U^jo3v+w)n࿡)
+>HmW] f{!և‡ T\cMPCj1de6C!>Q DHhu«)5QʤL 
+.HpAFڕLw8(XahS-^dltf',rw6&`FQ4%oL::!Az;׈Qɛo%Cҹ7I{-GK+ D4ȝP*yLa5%B )mP1oL6Ɍ=~iޫԆ&7rGQo1IyCWW/dclLg)BCBt!ő,:飔c}!"LPƷ:̚ bϱMr6s_`kcN8MEqkKXܪ {H @ b B-@"D@D
+A^VPֶ^u9ߞ3)1 ŌyD>$ < {>p}n0 1[ n32+$lw} b:XۯQ)GrU`0kq&LxO1 Q f#@O[ a#O}kTm=0}ډ}Bs"oףX}i$6hWѰV0+
+s~1e<c^{w;‡޶@2|)ҷld9\:زsW? mUwNxLyZe)~W#31ϫpݜvf'eaOγf_f<U-",@*2̏Azoh ;|g%ϋNo5z%EOHs ]:E\j1[&~77n6~kG@|m$D
+㐾^t hXݫ=)p~\i)m讱 H^eWB
+]Il. cd5Nĩ[x _/WJ~ eT!r 2=H@F:+C
+7gUTu|L)fxJ.ǽ']yAoV)D K1 ѕJi=,?',
+uҧXKStrGÐHS"2(Zl#76u{]v2ξַre~j>9XET2K^Q9A~E6fLH@S@V@((C^
+d!o5n3aNKǪ]/wt9Q~uqXN-Q1J8yj^NB03S?*?g$z$ {
+:G.5yionm>KWg(Kɔ4m#%']ƍϬfeiƴ$:7<-3.#%. lb$ zob0[=\&:7;/j;E W_v_U*є(ɧB-K^P•Djω^H;)ʋ*|˔|J d!"5.
+0idҌ,M6ɍOhoht#$1a-0 pF;0r]m3`fouw)^lw+{/J#E] J ˒B'Q:*(v#-3>xJ÷!a m
+
+|:a9z
+'\y0.+\2lZb憘gMOsN=ɪHӞK{*+y&O\0TAtLi/vNuĂ 7ucżsJ>?.\0s}Իym9,?-wnog\?]}oD|$u0R.`ḁS.͇=/4[/[$ɿ(*n)1wƎKNw=Rv<[
+b}_`߻FܽR|~vLU k,WTy|zߜ_);qc2i@Vs%dM}Q ỐOsڷYVp3? c> tF}i1\Ci`mrkU{*7iw<狹_(o3~n9h2m:oHXնf>L0
+NZ 4D#/C
++2TVkrRtLgve뢰%1Gz ;ryr)R~1)ܿ>YƪLa&KEļus->TC"{٘p#W7 ưnA:hO6zIw VzE':J <ZY$K_ɗ0!Nvq`Xan~na?C3/F4\U(|ɺrpz*у_Zo2}NfFxDkhS! Uu]"Lv/⓫ rA*fIvSHAy%<?\fg=0_#B'-͙:xwj6XԅG]; ÚcZ;z-/I"l[+cʼnnyd0VZTWTX7p^Mnz<';_"Q1* P E&|Iс˦nkaa_ Syk^icMCc 4o8D[*,cةEaIĢ9nb2'Efz)bJ?RDUp|M$TW<mՀ0ק&0wPjAbhqÙ%)^5>9U*%IeQ'Nt=h/L@
+TP![
+M1e?0Y~rD#CdUV&z 0_@]=hxVr⸁pD0`ƿޟ:esZdjJh*dAC1b)VO(P T{kn~x{oeFgC5='ݼios~)wC,D쏹k5t$9ǐ27zO17ml36E|blՋ6<ȕ~WNP0- 7HP5 #(^C}lgIqLO΅sd?8{ &`V`ǘ9f32g̠촋#:JR%n+Wq gC5(~/r!Z Ɯ% Ygf~,"/|&x6dtmGUnߣCnO6p`sY9P@ -HUY.B )RyLR7*71[hP),SOeNwen6sew,~^p\O;Cde.|-{
+5C^pZ>}w <H[_
+ְD{P9Jڍrw2Iu|u &9+m8)@ g)k
+ZH2E1ʴ J
+RV$4ePͦ24/-!E: >&ϵ|3So"j9O=w60G=/xߑI;vM +3 " D[1`@*&D3>+ߤL_$~YT|?V.z}nFs#b{=bwUywTyߥ7 Q> v&c a$7d;3,!7#ўL {g c NrPչ_Khȹ&v߅s1D <}Ip"Xˀ|ăs8Ép'4!ιtl2K %dsobɬ&?$3K/w)|*Ι=G :Pui㟈&LUw( dx CIb̀B R2
+{ƛ*WI5GneЌeJѢDNgN˽^w05@rp_Rhhɠj_Ȁ꘴?lww}Kop[b RH~6[EFVQlƯuNV+.Y*Ns:v(@Vo?,r=K%};;RC ˷W$VCؓ/M7&wУ(#Qo̩G06NX'3<Yc}"۾|sk}ٍE6d~ޯZz s)e/B;EÝ_g.`H"{dd:}e!uŌΑm3uQb0ReUqhE/ry 5u6rڥY=̾V>ZȖgaks&%C>_GT䷫I+&gRVRZfQ6Qmv>-"{9צU[^RZ*^Q$ސA.o9wGxS#VD5\j}\?!m,DPSO;!oQzR[3~:7SohUڻR]\Qo+/]%n.Y'k*ڤXUMYW0Y?U)aDm{gՕAP_&(TLf ֦CnAlMU``|wBmMIs2<;?n-_[])XSY/^],+oWԖ~*鏬(9]VrUQ.rՕT iiQohjl5M]_M:4:-p|澮
+f?pfތ=!)B3&w7- :íT~!3߷1 ײ~\btqjZVWdx,ҬdX]~at,^}w:}.();x{Br%FeTA:']Hx uE:L8˄M|j2$Z%&EŹ;itK+L)(I:Z㟘75Qp|o~ ^BD&}8jh]π4\nAG byэWYoP|&lmM95qU;U.pu<c{iG~[b.n..zS7dAWm(WI
+
+kmb>E !T*<M:P Pq` RGذst9$QF1_iF}  ٴ,hd~j*_վ5^\#UZ7WU\g&L匩_ߘ:Yl,y
+p@U/ɿ.?y !6>ք!>8^LI dlT,q*+N׶>~LW4Ӡg3s'|:Dx ꩻDa5`
+Ә+{XY2kY|uS}.?@O
+5ZJTP+Л^4#h=up,08XKt0Ļ75LU$;x #0%uj}4d/K P@領F)AWJ) (
+qz:O|I~`V=.h` t "7N qQTM ֆAH$2Ī3l5c ~[>`-c5Sfe~ #Ɯ}Ƃٽ
+
+ nOY xb - ;jp:DUʎ0\2ckY,ͦ&k\wUEbʊ:NFQ _r*(VP~[|(B0l5g>BU t]*щvutc%߱0Nkc,l 3R5n^Ԑb]P+uH<D5ZoaU0y,h*(Kt#+~U}ͫ
+_@&B/ncV}4I@Оn+@fwm!mѦ-IVҦ *ES\^R_ڋ/SPyҾ
+Nًo.3G\5RuZ;6'XTmڲ%ܦ*
+އӠ;dqf3Y7(lЃrfnEv8wu 9zkWHw{bJS:;s ݳ UWj7IKKPcʫX Z/%x& = p6&zaG5PjW:jL8r
+V.`j->d|&3e#30x=KvHU=ki;m_<e*դ-OزEme8i0,)<ۀC @-?+mZI`u'6@pqu|'QU޾Y'W. ȭX޳.$ܠN+ O)?/o Km
+M-2Tn
+>H[4@oƤ`GLspf=1Ze
+
+尢O\\DE
+u6~3p:7?M$!q6OFƒ5(n?`L<h;$g/坳'9}r羜)XLxs*}H3-)䩠Qa# {d_O4{`{95(g}/go
+[#|Yx
+CJdCJ,K!).R.>H_RT
+DQ!5({AW ie$J/wwT_ZIq<xuاB/Wk(%R"WKY{O#o T?1e(Q0dkP6 ;`͈"v&'3{@x1Z}&ej*BtB/SPTZ}.+m hDzW?䫿)*E2D
+Pcԃ
+:ȟ@=eOR
+G<zY([
+ҵПƃL##Z3p'S2'2h,ď,Q ;mu\ݾU{w+igaˣlnsۧ.eqhWD>F
+iՅg$Y(2my
+qAn$/I.ovɒkҳ{=Rd)=uMaNDJTĆj@ك`g>:kQ;kiZ2E]\PUnZV=CU`QJV$YNM.)g')v'(ds8]ٚ&3&I*`Fga4g˨}=@W:Eh[+WV(DVerی"ԒJiRqì5Mh'*o{DZŜb'z
+㬖u1D mRUjNaug}Pw5n|5s U3b7%zCt}v=7[*J5PjfqoEz S:BL6ψiO3ڐk6V*Y%]ֺ)s`7΁-Zòf&^l'~L !߽PvK'^e.=ӑ#Af'OЏl=R-4+Y֕mYdbkuf
+ǛCp+WC|;wTY,,33nNA _z |J>e|5r B<x GhfL{'0yZLA8 c<
+0~2$o򏁜a?O@ ([@z0F=7 30z ׋z9cQ- 7ö́1j5򄌑+)?W $ïK(ۍ(0`
+2=1 |f L<B_!3z3:B$ՔD(+;`.e 3eэ)߀z]" &DD,=q!^d1 !5.BCNMĴ[:8e1 OM[1
+,IK`btV`Y.u˻w52U&߽6]n|ѳMF<My~ozIfC޿Ʀ76# uAmaG-Ƽ\%9Zy%FjM0=favo}OOՀ)c>׬>~?l\Ȃ ah<N;: -4 ˘'כ [ 0X4[>a߿~}'l_o0'([wb+`50@hlFcYqeF9 3Й
+nn
++ogY^G-=w[k [?0^c_t-ě:aqFbe=-V؝՜vkNo o ;(61'ǖg;͑ض9
+|/=7SЅt>LCO!l/5ѓc;)մ31bGں=[n[cm\L_&X'\=* 1X
+ Fsr-PZvs-9!Ek)rkCFg\ktqC-sL_',IwK]uҿIoqɰ@p'؋iqꞀٳ
+*08LzпdcE0`
+;ej׻ȵe=nRq4ew8],X\iP%28Z2 XNvQSK髂X& Z:\Q-Qg9(J+FuiWIcn(YS
+X+
+8"8KlUk+.D:Zu}_Z?y}r?h<Ozwpf&p{|ΠeISaNJ >L1+'Ǫ$;LZ_3~Pec^:A?iÖ8g~&h;+Wƒ&^I>7AR9{u{d*`}¬4=f15x/j\jѫ;|v G X{EwϔLmn5l%$ ݓWoy?8lJeҁ529ega:__qڋQq=C89NwnXۚ]2xuj8QgCls4و<+al܃?/ b, q=0DGcr504/"~}Ts{re.r,EvܜGD7H}zQI;q-ri9Ѩ }>mmV ⭱5^tWtSYNq̟Xbߢm_6*m管;k莿+gs'
+d ;H΢l@@ѺEA0[TV%=вdKƠE4++JDuIU>%Kſ+
+T Oﳿ&3{_3[_ wE .R.uCKɗ"ۡrAWY E ] ombj/e?fSXhf? rh^U?mwfpػ>
+j'hjXU5@¨#񥤆5kxk ^]zB/Hf,d~Љٖ@ˀO&|P:t^;5o
+@] a\:$dwX<scϺW
+RJ<QI hB~l!u?B3LH{B̤) !mYp>:RpUu~ߜ%Hx]/dϦ{̽
+@!nӀ\!Cu~a/ZlEY`<7"{n\$n q͸Ah?J ŀ2EyuŹf)4S6b*B:Ul| 2ۚ0#Zŭ i4UT$wT9Si̴MuڴWUb*PԅJc~ 2W :b\Qq}nE%󖱢2YQjPYl:e^Ɯ>iNs8ar8.hvO820|aj|tmGF8BF"xY;ը&(n1PO|3Bq"zQt8/ǃKGhE2 jĪ}Eb'{c\jl!B!$K@$6Ibر@ 8X$vl'Y&vL=i&I:Mm433{y9^+b?uUL$L(8/~?b.JϤTJ> FI l
+|,Ki #ޖ_LAYB e"dDG_ŞvQe sIZOKB/yȝK3kFJ0}n3уL̽{T
+rr\9fW 9eAEEr5 z!֜l=+;ŝ\2S cr0GY)kXP!JEBl
+ӏJ!@xU&K>zpu6͘79o=Flc 61]ASF4[˩
+ʪnX;恸Jqʟp|&]ՇȗIz"CG/_p3u8mx 8لǚyRHG"^mQlFY]gTֵL}qq:46ZGHX#*qe_k%xa>}
+-Zeijg[nAYè>_b9Qe5^Rs|^b;Gxa}x&ּ+?1s [ܮhhw~{I6W*֕IvFVvǘ:˩
+zy{-ns[
+[gD<G(AxsB<!@x!=0
+A;=g% pd)^g/=vE' } /}J z:` ?78^`f
+T,||(I*r/+PNi#*&b3&[iRoCyة5A[Sxl8:80wp7zwa
+IV䔕J;eߊ+bop$rOT२]Q;v.z2,c)!+}s
+ wu콚/$'!
+aGJj#m yH[CC/lA޲ y_!"[{e_D}d{ 
+ͦIٴ66*TL';<wxPß-l ٦-/!9MJ%rhSa޷ q%Rճdo6z'D+7l9/6BBIhZ,=eB32X'(ar9!^H3DGzpts<l9a4 3F=@:^\'WmB
+鈛݄p#?(Iёe=>1E;w<;A&W E8>UQ1=H?y,NxdJ<2uQ-R.iOeEBvWjz/+/ x=K{+~rK NX2Z*L-!Kel%]ϒ%#/X
+|*
+})v\UlSl}Mbc#?4esZ 4tU\q/Q]}IEcdOΔﰦ)[+ZW(7[sUͪ #s5oPtU]*60>kt&T
+]dLk$d>=H(aAha^S}ZO#=vn4ݛjfWpj/s'Ϡ?FJ׀7GbCdr#H91Pf蛤^'Ygi3lz2 h8;8R}J_#6{܎
+|`BV `)-,5!Z>ʔULM7]?1nݗbWq\>r{c ;ғm|/#Y.h=?goÌX<5/e GAkТ!#@ Az@TBt]OZa]-3umn~L _|?~i扫t$))2k89ǹ0ՒJT2k7gk[=LڃYSL^&3iH$%QS{ Krٻ>5`:d1UKkR$iAzc~97⚣[XVu'4i^ԛ4#uNpK J?sYIjeC?14LӱظP\!?kԜsr2\ VAZwmꔌ5I^Z Iz-Y/(bkی8(bq1;¬Ay</,Ź9$9 RSv,3_nvI_^,י*) nZc:Ѹ#M&x`D1̧LڿbIcHQbQ` ,--),QLR}~,=?15/99UWH]k=OyƘT/6 *5 apݝ' 恥.8VrVbk}9%`* BfIH_PfZIWɖ09%[\KEuʘ-nE{# ;E<]UGQ(" ed\gSVkzer9*aGF4*CD)⤊EĊxLūr*q*/,ۤ_[^v-,-*TP[
+m t3
+sk]C[WQTYR3YsWZא眧'J#onX
+PBEE(z<(O=޷z]ɸ-w "N
+z%qx:)$D-"d% d+APg?u1q
+xk%w~AE?4tN"|G҉Xy8&>y;uvQ ?
+~ZC j]FҊ6\lU~\_qQBYOU"1J F* !zR}/&4
+O?$[FM|@380J]b^q!ވ,fM\2]WʶUqKiB}YHҤ_%o5OW̸񢔐O%RkL!jy{Io$('ClH&$%IfQmNpM<Cc6̔6$4f&,'OK!O83\P($>$2BZ
+P )Ҟs=n#ڌ2tŪh1hNMaf3sRNaC1,36
+K5e0j*`
+G11E٫`
+rٲWZPėX}5 + .ka][׫m]NVM_jUTXE gܤ:![G-^]4:u&rDiי; ^Q%k}j_ooUwj,\ub3^wY Gr`C3}Qye1LȸfnowKlE~F/zGn)\)\*ܮ6,x2Js KtNRS*4~$'j+텒x|Q䋃7q2 t7畖Kr!Yw]Q{;TiޣTďQV"_ <3:S P4vNO~%npUFQ9FXҘlRir* J$?IRF*ErVe*IXPT!*E9!{:;)`Tҝui />aB0H1șldBLf(5\ZO N$I2Cp0]<^PU T$
+QSo&7h"i4L#UOs: {\?a0G!=p:c 066)a ~nL>\yTƟ3,
+ʦ0 '-Dk$F5O465"eE 8Hpj%&*.TӨ(1>
+&y{E
+9^٬IθI&9]hBm^]u KY+ǢVwdX'!-'Y00g#YT:Gaf)r
+/lV&TƜҘXe\*T%R=PC_7f1&yeVr dia=H>}BR8Ο,$}oɽX{c?&ؾc~RĬvywR@Դ`5GQk׋WI%0PCi4K+MA/@t Cc4b嘆HG;rX/usRغv)XHk}/q ;z8x@Mi3_pz"©G3*ViDhe
+B*"r8*Ǣk$T͆U[U}V<B@_.S}YԞqp
+5Qod%00o6 r'Է%\:+2Avk<]SʄeUe]#9K@U{!my`<5X:xk7
+fRg>u p6Q)\s;SU[whWp}+\D ZBӅ9 H^!M?Ө3m&SǎXC56sjnݸX|8%:Uj- @oX ^zXHo2L77Z3X Ȧ
+󸮥F5*phf,Nc<Gia& UnOG;<#pW
+ .+mWs)hQ窏pJ'T98QuKpHnu5uد9:P#"uO
+v"©A;*<h?p{
+p-/ XbEw(Ke*\y>'Y@*o1zuAS;hvcGbl ^;CQ T6`sQl
+n?Jp!! "',Y<8}hHBmcj"G:r<QQʣ>Ħ lZDB4zT픊51n(T{GUHOic{WT^o}kd4hg7Pih2X8 PbxņiuBT#'Ib9/a2a"axFq-ENcEv:Y=k=ן@|U߶^pĦXcBIXcզQ74QZek!0}$-3-rPe*S,1mU,65*N*$Pf)盅"JCơqs5>}{`%v,iȵ2j/e[&IK-Ŗ兖 y%[a)-%yjťeyޙ{D K] qDpFf`fD
+5.Kq-5zXTkĜ4mz5m<96ij4Iۓd
+qJ4u4]R՟+ ozWryjH"> |zemA6G#ulI1kLslJFɄU&3-X,VUZMI[a(wcm<+1Vl y+6"SH"?7wg:xuH?6#<MXmE%4X2EZ
+S,7{2
+ۼZ[b~^*6o]BeKa?LK^Ze}%s4kahEI٦*t۲mPj+KlbͫqֵRul:lsm/ԬkCzu]˸9Dq-빮l-#QW
+eʔ$#JLHY"8Xr]+~)W$/U~Q)ʅpEy'<[!܃Yż1t7|ۊQBRu&T@j:\L5IRԀXݭRYVxO^YՐLܢߗuJ@o/K} J#Pdc:9pHG#KPX&.q5َ,Gjo2;uq.,q3l>P/^0GO4l^\NGV G3
+w><\$丌X]9bCJLWcqҦ6H&gltҥ^եOuo4gH꣰+y|'{X[rzTB^i$1qO➉ŞdyRaX,|!S$.TFO&ͽNkpoRrFIII>KB^ޠgS@-H zdW BVHX+' ; <)XTeʆUVU(ebNL,n{OKqޫ)ڸʐ6'.S8\>84ʕ] \n
+Dh9YВSG|kwqlCyeÆo$O^17x Ұ,\p9bu,ǙU85|z6S 9G#qGF^Qߠ1] sh!ȓx吻|!+ȍpy~.)DpM1lt-C[ :jtmD6toO$xm}qoc<6WL7OfRߛ
+]&s6L*gsf2ϴaR4{bW*UY[Q?kP7S+}]s_\uS^})ZO.;v{{bs%}4h1' >VlDoj|P[*BoηUX3P>G\=X6rޏb|Y,yP<\{-]~tS\ `<Wl?Mza?Tӡψ*? *ұ/~jR̯B(oJwE}bA]iYb~<@}6/Gd&8o;蛦
+1YV%nPGQo(D1 rq)jwgeg#߫v,vFqXLl
+G5]SD2X{sI,βoWLj9.]Þ7$L%a#!1p%`4kNl<!\*jbYҘKj EsE>y!E_H^X<j#5Y% `Jc/bS`H D[ZӅ(RAc-"UbuBǤ+RpR9_Pp| l6
+ iG}dc͝>
+1cx@k[Hb[fB+:q#1&.헥{Rh2q<3I+s#kvxa>Y=DlvBP&-~,"d%ĞXVjI 5bԴc1ZiCvZ3\o1\r{y{lb>Kz 4&Vq.]#4"!RhX0&>'dӀ~M}̽5G%]3G%>4G%VhdeT>`
+ 38E<gTJ&;iHbR48%LSh@jT6Q}Ҧ+:mҲ+3m),)tUShShdArCc#˰
+ώS
+˙МSPE9kS+c͹,2L/RXݲ|އB}0 f8*]A
+, V@a Zƨe|,3mIU7"ue<-\Ga<X|"i z˗ЗQbjP"M1+X aFJԵC]J}U"ϲ(y {Hkr)Osy)/Sf9Cy9~#ǒr*az.nc[5(Xhda V>cFgWA+%r:!-;klql}Q3dcMW2UP
+#[yL@^RE7_W?7Hq؃R)`+5okTg/S |!adg,@PՑXuw\ xº2s/)kS
+܍>iޖloaHa1~R=Ci}_CP o,^Ç<OXI-A GhFoz<^ÒsdwT2GvNI8Eag0?:Ǚg
+hrM@-H| -/:'֣?<!9׉sE %o*q|` N3 sѼ&'gSy\1)OIԾUCl'F h§pĨ}j0,]o9-4^W B-I |rvw뇮;y:\XJgp _۪p{f遭=5b0 )T@638=/0qLY0rC9+ln׿(O=ҏwvWrnǥ= #`<L7 2a!/c'Dc=Pڦ[uPts3?vVFk "`<g::Ih;eEEh*֯`MbFݤur[׈><ŕldllj֟%hMFg&9GEq\#dG(+t|+e`؛=vEHrsh@:st4CjQNFi-9c<uj5Y#
+ Էcbz;#w!`sqQDʪo1G'8N!#ZkuX9zZ{KBASy[x݈:5ud]hA>֋]DNg:ЙCGaoA:N:K(gJm5b>i-mP՝ U|ǴUl';cWC(<DlvvڽZndm ѡPVbU;U&wܭuZ;rrG*u6PS<B+
+Z皠nZ6_+T[JU^bZ-8UקtykşVۓVɵ׈`z-wV6zkuFXvQ%ݧh -NT-Β'_>NzM=~WO2|u{7W
+h- ZE%Hy!@$
+6g-=Xaڌ
+pŸQ ?|mX
+o^:"YDX\f!U<ຒX`d?|lΞH)EkӰ:;9:rLh)GCN9u]Q-\ʰQjIY̡TP/*IT80Tf?گ>8b팣E5yhV-O j Q`e<y [v&*w _4#2]Y&H4cO79rZM;렂Ʊ _39j&c6.N:tpQæ_/'EYQZ' ̆wd%["G+ ?Xu ;i& }60(Ӱ9lT4
+a+,ƕ(5`1h(.z^ɊLC2iTVh#HEc[LyB~'Z$[s8ܦIpf
+bLa5eXX0QRBq*[`4(0zOd:yc/"ɴfIJG=L+s3Y&Pa0JR si:K0PTf̊ʽЗ?]yX}"z\loTBe(me-rA/{"z`-]c,Mb{,KQhO|+UA[YJ*WC][:l1pYUD+~g9 ۀ}M.G}\fN*KqC0TGB_]"hj!&y5*P9P:+ZlW3 tu WH=*gDjUO!wIBFs/QwZǀ'Ɇ5y0(Ȑ_{8CAGL V;V߈
+bc'..v7u7Rj<xdL{}h?o?pl  3`!3npHB\}C~F
+daC88M/#<hFXHL0oM /s+<^f 9ZF!00g~?lJ2Ǜфm(/QpaAF{|gn8N_Ifs g&EMN8/%6Ifs _eKY`9ϓɗ[3M?j8bNS,돚Ԝq-.#²bGw2) &8oM-^|x~wͺI3sGԍM}c_3IB>#%L-[Jpmcr60%&^JI$"|HL8x˥^ȩI @@
+WțO!S\Qs2s fNKƟ/~lQ@RfV_ǻe}ǛN؃>%qαRgrragaoj^ԓ24jZ}\ q>)tvpgp//^_ğYopjG708=]O͙xԓ3I<87+]Jjbf@FRcn)C\vV{k4Wy? C~9wyD)B8%3/ DQU^jM]c:ut='ye&I-`S<m^i:?_ |px\LމR윤B=Vt8ǃN2tT9%h]g}w6vc>Gch"x^Qy1H}^Y:9?"
+5f4`Up>V.X6!QҌ%!X50<_EugxG|Lw
+d*g> Iǚl)X>#"BTGP\,SEsajTϭCFTmCyTG@Y̋ Qo
+O}؂ձ!|u iKd煕Q~X=u1cQl2jPkDe qN̏,Q⟠Hn (D
+•>.SL >{Hh%kS'F$ $Ơ\*C4 z$d(OB܉(L\|2dp:F87`O9Ia0x'29gIigk譞>'B>e`H![BIFlp&9H*F^r%K))w"KyUȢ(S`n:ظv``볎>VG-}+Ǣ$t(#R#O
+J٪\Rݰ#+F¤QsDyUd _Ad
+:X5)hĄLm6KaLAn6tۑ? HcNAF?V'.w/Zd=F.
+}Bk\q=LH5|Q4@A4 " F'Aj?xK1#MQ2gLdL3a Yt
+ZL ԙyH!RU2d"9k^>d{|~y0Bc{?wp$(^ J5ři h!Pۢf"Ֆ UlRHqCSyRHoԾsGBl$va3#{/u+9Tq/𹼜<\z1:EPyCYH΋D#
+rGd $:m:!qAEk-b]g|A#% 9i?wQ{">9*VK!G%=B$A ;y @TQ `NQ#"7#xŠO!m9B!H@+9Κ~/;9_
+4s]QQXWeu
+dά<Ȇ3D$ͭlJabWS2mzAWڄf_0'xni]' )vba'luPC!d|R[Yp156v)40wIwv
+eJ]*TNuA2_T=z6k\FXᷔaw͆SUnZ=̣U9R%3EiI *4,\JhX|~C9>5fSvVfspN_FъpuQ7N :s<y]Fin*KUtei_f,e
+Xm2WzJ:w4#^ocZן཭R$x(0@s]}5'df Ӭ MVFTCӕ6[3
+5=|WFjJQF~Q596>h@ h;3bʹvK| ]9ʎ UVd21fF ֌=Vi)=MSf)kRb5)\c7+9Zh|qݚy};`sآ#;EXojz\kj|MV*%~&unS5Qr5.at_7W=hTbF&6jdѳm/uT@T@S2 0 ]`H䲨1 `y ^K$Zf*hY)=Zֶɶv:k%ִܓ?>y}}˚ƎL}%q4bb\9\0 -_EUG$+7ª\eGڔYQ5ʌ5EJTjl,5?NܛEra #NJ + q-z
+)?zrX͎1*#&U,*-ήԸjYR)JNإ2%Șx~)S
+nWfZVh<))}#`/ߎ2z32G))NVb5Y]`Ru͘(Eg$(*3EYe9FY5#kBQp
+><o)8O(^`yR̳1μgyĘJ #oELQxNr437N3r4=Ϫ|SP~55UK+8)s>yS~NC@SKoޖt/*zXlȤ,bI&XP,cR4QE
+*(M+NTV)
+M-Ճ%4CJɧ䔼K>yC6&35‹JzYQ΅Zz-X҉oya+>J+)5I0=hD{&3SV$_VqOjlyʳ<˳:8e ,\~Zʹ4\SHl2y1!P&JOոJ? HyU%ʳ*UcQe{"n[FVKիUF.wZVmhȠF΅ǩzr@LI1Z(7T:B(GFe遺 : ;лX_mQg?ߎI~%g#=Rb|J cʥUÛйM\\<lF
+H-49xp!̖bhpj+ވVJxmH25?F5 m [m m%E%fnWS,b5:._B冴O;o-We976q&mOI0|3.O ov 0na` .6t#|NAs45{|w9>k1>$mIgiໝSQ;vMG'$]0P`C@uQN w+
+}|7[ًO
+FwJ]#y‘PRa#> eԥ8 t4v71qzjiW|?<g>-/҃
+܏WO1xNA^SIAN$'gR,Yhmy׵u/`ͅ35b%Ұ>Z ҅\Opn!p8>c"5ec,ýKKf+ų`ߐoO!|z-Kp\uCѫ 7RnWosܦHv;; PeP hfh(MEyEևb7:󺮢gKp>5HCax$q`\,<u}[rlwq8%̾F^F)^Bg~I AgX>?Yu !yaMZ`{!`{9)E h̏Qh;:.iofp^'Ѻ7/}J3G~1`9U~ YKm@k6Ӣ?ڵzGOѺѩlS$8AQn<r_ w_pYX;|r"𓈏4-"el
+ֱc X:V;؎t^*ׅ5h 9$ V,a߆};plՐZ| -]ɳ|kyF;lݘ؀m@an_L b 
+ۻ3>wiJ>EOOUE79𓣛}!\+q~F6e;K 0"WҽMyޑ`HRsxx/Yڱ8]c~9Xze TtOҢQB|c29wxz8-RLSγhqyi'Ooi=lff1s c`4!F?јop4Vc:Wy,=|`oŔ>1 D`1*u`6ƎjLza"ΏnhF0pC LÒ{_CI"%M{MlbdK II%LTc,QcI%:0,APڀ!i H;0 EldcdsI^EwUtmDG{+3wLYfV 37C;1"##) /ՆCГք6tw`z?:GϘ2іyYwz ^ω?9B x6`uKlfiq'L) (R‚@v9NgѦUGޜ!4LE4?-xo s@Ïy<m66(dᜡgmGJ**%V@n rјۊ.> uQD\, Nݿ{xmtMc[:oCxhdj2q@FV Z'
+ܨ-ZKg1TΡRav+(7~@N<_&-7p%~X R
+c;E즣(3@y6uX-/>K%"Y=r`wps:T:&9&*Mp a7Qn.CŅRKlm$iXga]GQ"}opKcm*q-$ RG7u2V<U5 Yfj-B͆b[,nK}0ul ۯ@gǏuW9D($^#/cH0uG'}c1fI(خٞ݀"G  W42
+&ZBw|j',r<G^qqij诲H908wQA2Umu5򫛐WGnMԵǡ= P}uW>P֊&E&.wm  li&IX9㡭BS5uv۠T!ӆ^(Fp
+Ho"!R䳈=%.p$[;xuwIE덂99r(ݬ«CׂL:|Hu!7 yI$lBr ҖHlI-_Y̷۴?77s, ijڥZ Qn Y8H!ůܟd2pAф
+ B
+
+D !L`0!J{e7#bɽ6ɼ0Xa,L|qzJ] PSSm$;8D'!b8
+-,FI> d0 1y7ȹf{5"Iq[\9 N98<j%"j:Ùn}HWdBLl!p!Cm8݉]^|vcwGxKzb%\D ~" '$D߱ ,[L"8[. [d_d]d]- tBFd {,J&Dla,.sIJZeNHڶΜAl\D
+!{\ T/ " ; &
+
+AWF&%IAbq\ZkԘU$KxHjcbXNԦ9{,޷|{ +#
+0rC}eHn NsB:@<@A_Ơ}G{||>|_%~ / .) ._\Z!,8 ]u'0B
+]x: k %^i optDoq>!;p(cv;i w|-88,~>^rlWaد@Z=ZAXf8Z_m&:-D`kwp~ >szK?"'f)X~vcN^F[4Eт&tl2!'*,42"^q6Q{rר_\1a#bP Gcᨆc2pӜ.E(>;Fvf|¤n 3a#<H#8
+-F"t<C},\=;:':4:SpWhϾ8ֲm;Vʛjg?&xlx\G\t<QTSY ^MӈT5M!m*Sպ|.GH;=_:)DZH>)rkKwմZ)eZTmjKU}*{lVEσF]W=x2undy>уnOun5W&h{j3T힫qCU1Bc=U9^= y.RJxh~Km**qt<O3~6+W<Xma`Z̕7/LZ/o*ozjwʽw|ԧP%>S>TgYB*ݨ|V {Sy+0w^s6|;:rT
+?Oj_J#5ߤb*ꛪa}sTw+?\Co50hv++2*3䞲B#u jv}L$7TA* 2 (F588CB)7P9!_) t21RJq%ڕP
+xwۜC^_
+DNRRl٣Zw}L֘Kp(щCp`<9k6d>FBr<̨~J2(-*F)QJ+):C ׀r%j"ǭٴ]&gzWq2}61dZʧyo":*1CБTCd3F*'k\T%b.TLje<XKb*:ᨢ::P+֣yéԠE rf.S_%Xel)!Aq Ɋfh-Plb)j@۶`?P-^;m&-¸z8Z2>΁kJJ%<d( -T1(E͊<'PXXR*4eBRW(8uR)0ং׉ˣ苌XCK:J78eS#vbbJwSt"Sv
+ˢsho]!l0=r-,Re"wE9͊t&d]p(2dp➮`w"?AIp]~/ON)78OZ5,E`l"$\Fy^3$2Od5T'FDzz(=, gB5=:to9tq9so\Y{\Wm!TWje( U@!Crx9l^E^^ǛMC75"kCOMw%U-axԀg#+ޝH&r Qex2DR*
+WQ%+@3T.¤Vބ;@_Kڕ|VKH F7D`aLr_hvȣ<ȣ<iFF6wh es-**12eXI3b3
+x Nw 8 ^o7h:9ϚQL3xm\
+
+%8b&qO, 7G;[s}F7}#8
+y 7{//x8xB/?xxd!]ʥ?8
+Jqq`2ϓ9cʚv鷈uXi<^^G~_['228}@-1/i z]@"b#v91::f)d̲%8 )=`A}`7x#vL*%x[fEA>Nlb=Ӊe2į~xVav];aA-63ڧamFnf:iyZG1cW6!~>gbE,C %F3QVXn8ױwl=>t 3mIB6wh=X)p1b8{V e5YЕ(އq#%Y/>`ݍ.F($ p<
+G
+ 68jȣZӴ<G UJ\ #J7á{6h^b{?v[!{8v
+!J$D @2-Dʂ xPW`k,@9GY?[ԟ0G^m8rК.5~a_\0A O:YT W*N.gd m$VM{Mn+rޓ+}GXo|/DA]U9fy;kfTW5-hr,lSNCݚ;d\%X mh#aǕ~Iww[~8:ZڲE7*HFyb=41\ T3f(8NYɲGNWfd2"+Y&YMj:.,/>R+цhkknтҖQ|k9T(ƛm,S/My2̣d3[n\F)%fĬШW#^wh 8ӂ%mhY y>̠NSikTF.+_l# 0 3
+(0.D4Dwq;hc9&٬i&VLlkXSi&=iZcܲUt=}kPqQE! 0ԩ,+7lFSNx1WUJ3nUK)rF7r+%.^nrn-d<Ffx<BjB'e1Ri
+A7)M٦$eҔiQJ,SjK)~Tr%7+))%Dvi%X_J"uww&|m #2,EfJ JQ`U9@a0f(՜1YrX
+4R؉Jڨ26f#k+;+˳[6~v#RGy84R^s+6T)`9aJF+jS-Yv[_dK5^%o9IE'ȤeE%}$7èl
+l`|nK-<&FehekVhxIqX&(6)G"$WȜT$N;_T;peNrn{
+*հI2dPp<(0C9?(8/<39AM֪lTi&Sy?;pMgq$*rkPHnȐP`~˿̖qHA>+#C *B ܼg9G0s%\*(EYX'btTP%b_qq-OI,WWҍ1 %gحNՠ:iV4x i|U<}/!㤀A+ Р2|ˌ)h`yr\rYX
+0嘵rCƠSW.jB豉4/Ɩd%ӛ BM
+0wE=\.BD."c'1!Mdb61;-s8KpG`O+yɇK*a@ȡ3$x \ \5\t5\@5
+XX
+nm 5ʡ]ֱ@!H]/Y@ &
+VxҏVx£%RZq.|j&UL+q4+ZOX9HfF$|6K[
+^?ni 53|5ezqA#_L
+^.{8 3w𗿂8#=C=:n$2y?t,Y?8VrEr?أ8G:rXD^]M2m~A馲.= ݠ&救GZq+YȑLLV8DDRKX%_"6cvv'iP6Դ
+8K)gYBDim` $]v>NK<n'2LY%u )tY='e*\v/<e'O7sKZꄧK{lYs[Ȩv2oVRZ ˥_^mOah4 rx܎\jKmqj֦iE㏪9ႚ!Ր
+b:m:r"8+GS IږVQQU6`(VBZ7֫޸Qu6Mݪ5Ri3)yNU
+VUX>T3S
+)1<GCF%-Ÿ*.E8O#wr'EXw3ny~ijlq0:RިF()RH#k/
+:;_ U:G
+2X&8ҫ>_{Ŵna"r܄*_a |n]M>gVcB~PW
+Iʊt9c/ggTW6\ۏ_ݛ¸
+{mf5*c?,ks51#ꋚ b԰>
+91%cيP9`- ђoc-^,p9=R BN<Q?[92tdn=L<Aȑ]Xe\hEx8z'mH2G>ek=:Bt5JR=pt±nѽ(\Sݰt*O.r?b̘C"f'Q~mmIG<4vPAo ɠy#ynsmEo
+ 8,
+)c:h_P
+~/k$?fOyF>OqmrѺ!.sSc>;\䱧"p᪇pMdptvZf^w@d
+-a4uAL&cjHָA9ʂ͞*P}LHuª4Z59_'`K0\RE-U$Fp+mw_ղqlI&&cqjHNQ8:CjU`b+4$JUI
+$5ȗ4VH%oUqOxBwU`BSDE
+*HW5r[)\ʱ\zD $#F#ϯw泥8!7#kȍߚ
+YJ-*RBK
+UX):Jn[rm3/T}RcxGi3-»[1nŌsJnFS'R*U`cO۞<{r%r9|I );AY㕙>MNgҝ+*{^2^5MlkH=Sl-~@ Fy24+iSө̌\P
+93*=+4L={l]< K7#L_O̔
+ke,K)EmJ.+x U\Qy|;rȻ
+n-qSM8z{Sx8Nk{M)(3H4z~=1pp;T_+}Xኁ' ,?u
+q@>zS'u/ >z:=E;N*ңn<7U#` :._ORܠԍp/h=k!G!^7YJgz\hDt*bn 6^ 489x,؋h2
+n1 BxS(fYjC(i>'{ogG;k}+l$n9C5rxxK<sGΉx*j]r~"}nwUL%o NqO*c}e;W&YC%/P8ffc_1) k.\p
+idgqedY1@3zMaL$?r2C&X5>ȡ1A.%jTPFgiD a!w+'tCV:7)5C)O( 1|!OwDt.Xm)1PANO!ǁ紆*dT^Ur .eGxGRZySbdS<J07*/)|Q1{Z|zx-k~k撧f2KmF•i1)Ts8%dɐ2\ (Z(L%rF5(.춗e]_[}vƭIm3l4Lb R ͢(b%e*֖[m%TvGlFòD(S/tN𳛱A486S42dSwF8r:v,3木Hf\RW~M>d{< =ZQ1]!2YQ,jLN\r,rNi 9~LSeLȄ*W*,qB=9 
+NUHO]pwL,Xߕ|VLl)f9#'CNPEyLxl2{2yeLJUD0(<eBSf+ĻPA^ 2z6$;݊%k
+ͥB+tr)D]᥊y
+ݸ~0)\*ָɽû{Xfmհ2V|ߵ=růĔTMT۩jEZWj^vqq*B˄ΆKZ[µo5c[_U`8,G bK^2ٓ:hh5i|1/jZV<jiV
+ሕKk4U@{.J1P╢4 ŗqE`
+1T<ȸѹm a-߉MKvǀz(j-|BL9~3p.Q3 xԭGn߶dN;|ܛ}6'Ѷ$3'qR<%&4S|qJ~DzR>ދx/9f |ʸ'yj= kâٱ ]0!,ڣp~ӳq0rN<Qٗc;ޥ`|<\^\e>PF<?WOcq|xiorM_a{ u| =&RK忚6W$dv}*1?X߶i{#_\Y3Nmc} 6>|d)];__/9Գ
+3%OlOI' <!=19Gc&}/>3d,mB=E;bW8{;
+,g_^U*IltBtl x( $/g :{'iv6l`gv;8hûCQO)͠s'I=. \x)9)#+yJ9ۉxs'5ۆ Tx>)3tSI/ WB)t~-vk~ƻFvNZMsEp]z>Dk;ddI8,ybi|ENbWVf{crVրco5(Xe1/sSG j+GYvꎣ7b%8pTȊ*J3L<s,rXy<3/.:jMo& 8c$|(KUVu#%n4xzȂ8(eYOLfd'gt*jmLc*Ro ];
+7i]ƖqQ,.n/WO<} S2c;:q&yb" 'D5}Vd%Վ=c(BUrբΞ F5T2g{̞@% W9*\p5'"-e]wHeϡ5NkZ>JY–ٲ_h9
+uk<q쨔+cv0 jk*z/jWPY2@8~R53~ަn0^i5Ə%F9F|2fƥeƙW~5UbS
+ 7gaV^ha,ӽ)C"G`CAN yb*c4Z̲IhWGV LgMbgXޅ8|DIQNh<)OzDDF(73@tiiNi63OLf1;CuIمQ|{b _?Zj`&ޱ.v?._Ə ς(38яWҗ>Tz.?.7i<%oD,!`R8\)`. .jȥHB@H1%폎@TXb/&f:.cK4#1wsb=8|LfҖxxCCxt $2N(mt 5&j0T?CpmG2aEh9K(U/0q&{@Ak
+D&x#8j$,byb!p,dLY]ّ!1CHlp\q .U%NLH-Rdch
+^@D3Hvgxq|Dp*жhcH
+?R#3I3< PS,> ؞Eq\=-R'6;9IAzɆٜI6|XdA,@W־+Y?[ړC iBF-(ӊ -A[(oq@
+
+$Y&y(ꕫ$uҽyܽ{!y?zߟUQEUTQEUTQEUTQ!`y bQEUonb}SV\+e:<=co*oWgֈ WG&;D›&N8:<͂[ߝ9qtO *Ʈ*Gr~\13Ǧ̏.K?ja`[ᖰ=7%¶
+stP"M8<[^R6+;k kkeU lYj9eKsb"<.RE?<wxcce0e;Q_/jn+;P|VlLu`]:kfp]V"C]Cb wÊQr[+ ,|jw:eUn3c+:|a톣<5aUE"WvMqФ>l)%dtUY#Wq€rFtGz](9dj_8`]భKJ7HKwsؗ1TT..(rۮѵ}4f>z{ϟࣵLAϻsƌzfzkfL(քC ~h?j}CJ3E%/c_TVJ*pT_xEy\_^Hڨ;Wi YA"ҭ[l!Iv^يR9$Vd2nqy>=/<y;s+Nw $ ӟmWy0\*c<0gלuN@B! +G[Yu?R|^rrH/坑,~$K]Kn`l=Z5[7q|gUnr"~F8ߛ-cY đ\ೖ-K1Es
++
+s=t##URuMT?|zq+[:sMnִ䂹33o\P7.B <L 0
+
+Ȇ DGr <6
+83|6 ~!]{=i5$>*OEtO1o,N4GO\ٞ~pc݌)GR0XQAl(f4 M<Aoc0
+ ݆/U)|JnPW
+x kFEQ`0|=t[ 1x}
+RWvH
+p`+gQ(^1ױ>9ږ騬*^x#qb ,Y2aHwcVMOb/f=-ȁ/} - `=瀾}k)
+4`" C
+^Sp|v:Q h Z1
+VKȘ
+=Vy!pLYzY*K;x2}{"w7er"Iw:GSy\V[<6'Rչn%:溬'5mDtbZL\&$
+ܾ~vן{}߻<%E&gINDHJ"NƄdD] Q!c@
+d *>7 8PW% \ h`3^l:93c<xWo67!ʺ[ЈZI4z{z?cvTgC |ޮX.qDh\1yXC>M|;
+ݡP
+`(dBG $8&{j?Sp䴥W5zNK6Vi|QAh 4ݪ(d*isZdD(k}P`
+Ȯ|BpW$ %IHO޿y:~0?_(gD,rE}KcШ+)J_*=I,?!4l=Å[Pծ=Ğ [ }g OZO$o!xL=5dbBC) Oմ>RIr\r"#;@V2[kclzi5a#*Xm?;62.#:ĉ֙Li_
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 14.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Jon Ruprecht) () %%Title: (CSVhelper logos.ai) %%CreationDate: 9/7/11 1:14 PM %%Canvassize: 16383 %%BoundingBox: 13 142 596 384 %%HiResBoundingBox: 13.6787 142.916 595.6777 383.4565 %%DocumentProcessColors: Cyan Yellow Black %AI5_FileFormat 10.0 %AI12_BuildNumber: 367 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_Cropmarks: 0 135.667 612 396 %AI3_TemplateBox: 306.5 197.5 306.5 197.5 %AI3_TileBox: 18 -90.166 594 643.8335 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 0 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -126.3335 576.3364 1.5 1221 786 18 1 0 335 299 0 0 0 1 1 0 1 1 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <</Length 9525>>stream
+%%BoundingBox: 13 142 596 384 %%HiResBoundingBox: 13.6787 142.916 595.6777 383.4565 %AI7_Thumbnail: 128 56 8 %%BeginData: 9378 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45181218111812181118121811181218111812181118121811181218 %11181218115FFFFFFD0752FD1DFFFD065227A8FD31FF1112111211121112 %11121112111211121112111211121112111211121112111258FFA8522752 %27522759FD1DFF522752275227527DFD31FF121118121211181212111812 %12111812121118121211181212111812121118125FFFFF525228FD0452FD %1DFF52522852525227A8FD31FF1112111211121112111211121112111211 %12111211121112111211121112111258FFA852275227522752A8FD1BFFA8 %522752275227527DFD31FF18111812181118121811181218111812181118 %121811181218111812181118125FFFFFFD0752FFFFFFA8A8A8FD0BFFA8A8 %A8FD09FFFD065227A8FD0CFFA8A8A8FD0BFFA8A8A8FD13FFA81112111211 %12111811121112111211181112111211121112111211121112111258FFA8 %52275227522753A87D2728275252FD07FF7D5327522752275252A8FD05FF %592752275227527DFFA852527D5252527DFF7D5252275252FD07FF7D5328 %522752275259FD05FFA853527D5252527DFFA85252181212115FA8FFA8AF %5F1211185FAEA8FFA883115FA8AE843B12A883AE5F12115FFFFFFD045228 %52525227525252275252FD05FF525227522752525227522884FD04FFFD04 %52285227A8FFA8275227522752527D275227FD0452FD05FF525227525252 %2752275252A8FD04FF27522752275252A82752271112115FFD06FF5F1234 %FD06FF5F34FFFFFF5818FFFFFF84111258FFA85227522752275227522752 %275227277DFFFFFF522727522752275227522752277DFFFFFF5227522752 %27527DFFA85227522752275227522752275227277DFFFFFF525227522752 %27522752275227A8FFFFA85227522752275227522752181218A8FFFFFFA8 %FFFFFF12AEFFFFAEFFFFFFA85FFFFFFF8334FFFFFF5F18115FFFFFFD0852 %27FD0552277DFFFFA8522EFD0C52FFFFFFFD065227A8FFAFFD065228FD07 %52277DFFFF7DFD075228FD0652FFFFFFFD06522EFD0452111212FFFFFF5F %3AFFFFFF3AA8FFFF8334FFFFFF12FFFFFF5F5FFFFFFF5F111258FFA85227 %5227522752A87D27522752275252FFFF7D2752275227527DA82752275227 %277DFFFF522752275227527DFFA852275227522752A87E27522752275252 %FFFF52275227522752A87D275227522752A8FFA852275227522752275227 %5212113AFFFFFF8334FFFFFF3AAEFFFF843A84AE8418A8FFFF845FFFFFFF %3418125FFFFF525228FD0452FFAF5227525252277DFFFFFD0452285252FF %FF5252522852277DFFFF52522852525227A8FFA827525252285252FFA852 %52522852277DFFFF525228FD0452FFA8522752525227A8FFFFFD04522852 %5252285252111212FFFFFF585FFFFFFF3A83FFFFFF8312111211AEFFFF83 %83FFFFFF12111258FFA852275227522752FFFF2752275227522EFFFF5227 %5227522752FFFF27522752275252FFFF522752275227527DFFA852275227 %52277DFFA827522752275252FFA852275227522752FFA827522752272753 %FFA8522752275227522752275218113AFFFFFF831284838A123BFD05FF5F %121883FFFFAF83FFFFFF12181283FFFFFD0752FFA852285252522852FFFF %FD0752FFFFFD0752FFFFFD065227A8FFA828FD05527DFFA8FD06527DFFFF %FD0752FFA8522E525252277DFFFFFD0852275252111212FFFFFF5F121112 %1112115FFD05FF5F1183FFFFAEAEFFFFA81211125FFFA852275227522752 %FFFF2852275227522EFFFF522752275227527D7D27522752275252FFFF59 %2752275227527DFFA85227522752277DFFA827522752275252FFA8522752 %275227527D7D27522752275252FFA852275227522752277DA8FF18123AFF %FFFF83115F343B12181218A8FD04FF185FFFFFFFAEFFFFAE12121184FFFF %FD0452285252FFA852525228525252FFFF52522852525227522752285252 %522752FFFFFD0452285227A8FFA8525228FD0452FFA85227525252277DFF %A82752525228525252275252522852277DFFFF52522852525227A8FFFFFF %111212FFFFFF583AFFFFFF3A58AE835F83FFFFFF123AFD06FF8312111283 %FFA852275227522752FFAF27522752275252FFA852275227522752275227 %522752275227FFFF522752275227527DFFA85227522752277DFFA8275227 %52275252FFA852275227522752275227522752275252FFA8522752275227 %52A8FFFFFF18123AFFFFFF5F34FFFFFF34AEFFFF8318FFFFFF3B12FD06FF %83121811AEFFFFFD0752FFA8FD0752FFFFFD08522752275227522752FFFF %FD065227A8FFAFFD065253FFA8522E525252277DFFA828FD075227522752 %2752277DFFFFFD0752FD04FF111212FFFFFF5F5FFFFFFF3A83FFFF8312FF %FFFF3412A8FD05FF3412111284FFA852275227522759FFFF275227522752 %52FFFF522752275227527DA87DA87DA87DA87DFFFF522752275227527DFF %A85227522752277DFFA827522752275252FFA8522752275227527D7D7DA8 %7DA87DA8A8FFA852275227522752A8FFFFFF121118AEFFFFFFAEFFFFFF12 %83FD07FF3A11AEFD05FF3B111812FFFFFF525228FD0452FFA85227525252 %2752FFFFFD0452285252FFFFFFA8FFA8FFA8FFFFFF52522852525227A8FF %A82752525228527DFFA85252522852287DFFAF525228FD0452FFFFFFA8FF %A8FFA8FFFFFFFD0452285252FD04FF1112115FFD06FF341212AEFD05FF84 %111283FD05FF12121112AEFFA852275227522752FFFF27522752275227FF %FF52275227522752A8FF53272752275228FFFF522752275227527DFFA852 %27522752277DFFA827522752275252FFA852275227522752FFFF52522752 %272752FFA852275227522752A8FFFFFF181118123B83AEA8AE3418121812 %84A8AE845F1218113B83835F835F18111812FFFFFFFD0752FFA852285252 %522852FFFFFD0752FFFF7D27522E525252FFFFFD065227A8FFA828FD0552 %7DFFA8FD06527DFFFFFD0752FFFF7D27525252277DFFFFFD0752FD04FF11 %121112111211121112111211121112111211121112111211121112111211 %5FFFFFA852275227522752FFFF2852275227522EFFFF52275227522752FF %FF7D522752275252FFFF592752275227527DFFA85227522752277DFFA827 %522752275252FFA852275227522752FFFF52522752275252FFA852275227 %522752FD04FF181212111812121118121211181212111812121118121211 %181212111812125FFFFFFFFD0452285252FFA852525228525252FFFF5252 %28FD0452FFFF7D275252522752FFFFFD0452285227A8FFA8525228FD0452 %FFA85227525252277DFFFF28525252285252FFFF7D28522852277DFFFF52 %5228FD0452FD04FF11121112111211121112111211121112111211121112 %11121112111211121183FFFFA852275227522752FFAF27522752275252FF %FF7D275227522752A8FF52522752275252FFFF522752275227527DFFA852 %275227522752FFA827522752275252FFA852275227522752FFFF28522752 %27527DFFA852275227522752A8FFFFFF1812181118121811181218111812 %1811181218111812181118121811181218A8FFFFFFFD0752FFA8FD0752FF %FF7DFD055227A8A85228525252277DFFFFFD065227A8FFAFFD0752A97DFD %0552277DFFFFFD0752A9A8FD055227A8FFFFFD0752FD04FF111211121112 %11121112111211121112111211121112111211121112111211FFFFFFA852 %275227522759FFFF27522752275252FFFFA8275227522752275227522752 %2752A8FFFF522752275227527DFFA8522752275227522752275227522727 %7DFFFFA82752275227522752275227522752FFFFA852275227522752A8FF %FFFF12111812121118121211181212111812121118121211181212111812 %12115FFD04FF525228FD0452FFA852275252522752FFFFFF842752285252 %522752525227527DFFFFFF52522852525227A8FFA8275252522852525227 %525252285227A8FFFFFF7D275252522852525228522852A8FFFFFFFD0452 %285252FD04FF111211121112111211121112111211121112111211121112 %11121112111259FFFFFFA852275227522752FFFF27272752272727FD04FF %7D2727275227522752272759FFFFFFA8522752275227277DFFA852275227 %52277D7D2727522752277DFD04FFA87D275227522752275227527DFFFFFF %A852275227522752A8FFFFFF181118121811181218111812181118121811 %181218111812181118121811AFFD04FF7D7D53FD047DFFFF7D527D7D7D52 %7DFD05FFA87D7D52522752527DA8FD05FF7D7D537D7D7D52A9FFA828FD05 %527DFF7D535252527DFD07FFA87DFD06527DA8FD05FF537D7D7D537D7DFD %04FFA8AEA8AEA8AEA8AE1112111211121112111211121112111211121112 %1112FD1CFFA8FFA8A8A8FD11FFA85227522752277DFFFFA8A8A8FD0BFFFD %05A8FD1AFFA81812121118121211181212111812121118121211185FFD32 %FFA8285227FD0452FD2FFF83111211121112111211121112111211121112 %111211AEFD32FFA85227522752277DFD2FFF121812181118121811181218 %1118121811181218113BFD34FFA8FFA8FFA8FFA8FD2EFF84121112111211 %12111211121112111211121112111283FD69FF3A12121118121211181212 %1118121211181212111812FD69FF5F111211121112111211121112111211 %12111211121184FD68FFAE11181218111812181118121811181218111812 %18113BFD68FFAE1112111211121112111211121112111211121112111284 %FD67FF84111812121118121211181212111812121118121211185FFD66FF %A85F1112111211121112111211121112111211121112111211FD67FF1812 %18111812181118121811181218111812181118121811FD68FF1112111211 %121112111211121112111211121112111211A8FD68FF1211181212111812 %121118121211181212111812121184FD69FF111211121112111211121112 %11121112111211121183FD6AFF1811181218111812181118121811181218 %11181284FD6BFF11121112111211121112111211121112111211A8FD6CFF %181212111812121118121211181212111812AEFD6DFF1112111211121112 %111211121112111234FD6FFF18121811181218111812181118121883FD70 %FF111211121112111211121112115FA8FD71FF1211181212111812121118 %34AEFD73FF1112111211121112113A83FD75FF181118121811185FAEFD77 %FF111211183483A8FD79FF3B5FA8A8FDFBFFFF %%EndData endstream endobj 21 0 obj <</Length 38740>>stream
+rے}`䭰1NOqDrھpfRjo6`_ZgZ/ct-d[}JΦFNù3%f#yc~|mxC/Ջ=+YS.; 17ze^<Y|j ?%Qă섞 DžʟYrkA(7V6Yq;׳o~WDc^ʡ}o*_+>SPSO:ўxsh2Jrwv}e4>ղū f0#Cb:k禶wgyHNJgOz3~& )eL)kv> C+Yhǃ{fgwźۡWZ۹V@Q5[r}܈;YC{otQ~xC5uDK[9p;džd1ד/ǟoۋ_97R'pSZ;M%j t[ynAOj1]CŌPEǕ˕]PTKrۍzrhmc?Ku,QfPy) ƯvTu7+{ j6r^zjC;/w|<_9T6~8$0mG\W
+V*wnޥX;Ȓk9F'RkX67_weoh*$&'#bY}%tnī.&h;&,|6(`b/&NMaX uw-=6/+0Iϵ/6/p%r27y6݌% tYcio2/PNI` r1M
+Έ'1œ֫kݛ`><%}~+Y44b׷f)gI0fmռP~yz~Ty)[5LQDKea`LKkzJt9.-r~a}W#naZ>`$E H.iV+vJWkA5_ZҴ3tcjcz]QJ8V9 vAByDZ!`kc3K`2'Iui7K8O݂5BW-M>'wŗ fn<ǹ1Zk‚41\^ׯ6^{-oG% $smsLø=Kin c'_D2HzfIߒ>{d8.8^؊7,RGh3j ^1g]Z77镧{ F4#g&[WELfZv9ԝVTw'/x'fz8^Y/%o,[ I߉(lt!̲hU~?H[I 5|}Hzbv1w<i(QC"sI_>cb"Uvg<%d~5yc+HaT02T)B9@92E 'FMEDemn7=Іڲl
+=2Q0A2t*Ϊ.3̝Җʬ {Mstmj%8P.M)Hp1|82gcғk'
+
+yJ=DiQ@څR8GuY;{* kFW"',RHze0tY~EOC,nWNͅg
+;dsw9*~ s"'O81X%Y( UHO~rLN
++q6w-yaƒ9F
+." Ew
+.;jd #, @`jdXdԃ
+q37#"
+[V
+B46SlJd>٠F9BV ᓟ7; y>ބ0Aq`j\8[6`9X)j}al\*BbegQV*H[ sqO3! !K0
+wAܦ$׈K{?eYݝg30bTlv[v$MZEAVރ(ߴo2u_9n57P] _N#3şY=衱G}'v;y+eu! ^dN|$GT;.g
+5_u t+M֙}udȭ^mꫭ 3͖X?=p~Ưw+V͂nmZj?zݹkD
+~meN9h籖/e]=0:q+}hD}TqmZ<|bSOjpQUUݨ[ݖQ͖a2
+֡$'ҰVz/EmGũya6__&oq&kQPzxhàݤ\zi94>1֩4*E_Et߆lGhc6qO]8SsoZAYESS` |2ůy[oE (F&.= QݍyҨhT66q< thwC7ɶXA0ukYMN_lXGc}Ne{XBA0N@㫧;FvI7̳ vzhbtfr/Omiڳn+>oUqfF*c;w8cF?S!ꘚ3eyorfT t4cm=} ^Diߊ^qND8v_6 S~10y)z4쐏Ggʁʷn*;:v%xP1IV tX^'⫨yUH{6CvQ%*2ېܕjq"=dJ˫8himU`Wq2à0%`sER&`D/=OV'NvyVzeRJ%MSq|L)|)*G*L̔(ZG͵!ZJ,؆aǓPs ݭ{ Y;x dxRZ%\gPnןrJmrYbkt&t)IJgU"YH|Zgђ0wZo~oücpn=3Kn~Y!{2sܨFb%
+
+w*D,vJ|I#Dm Q
+0pmʁFnHM9J3PbGܭ~# "`ƧsඓvCp{5 ׂʅݻ b\?b݄ FP~^B$̞df F*oGtRIzPbtg'sDIQ!c#`ؤ<Xc MSUЊWQv?,rHg\h CNܖљdJ\6Y m͟
+\S]G}ޡ1& &gcr&0sgMtֽ>o4\%URU$';^6uyqRUiZՌhzYz3 ~.opfRz#S06,,3n3X=IL?{rt\ptC+voFgƝm?7zk;~ib/N Dl:5-8pT,tXzM͢:99 Xslf ̩c٢Z&AU̪d-{{ԅT}S"S֢Z2#LC ӥKCzxӣ?7SN{'7vkUt68V F k*x.S/e4m ,H4jBتhEuYPr*U5ZՎCT?BpƟ1aWbgY*!{ʓM+leNLMHb5t5ڱ6yr˩vU*U vPW8RL@#}~4!hm h5FК߈usA 4Y{4Iܓ:v6w Vg(2t^&+3mG;%fM&KoR`Duh{
+QhiD
+U[wDT Q)DU)*4!*JxӅz* F/>MI=w-􋶞En#IN*paYz*&J6WՁlg;Ф13@S!*0lNf'YCg s }&aL<"qdS^ cyJuxZvmC)լzc,f\5N}k;jTb,u\ZO6VvtAs#ıM d!4@"_tT$<6Z5cJg|2 a**vްk׹ucTY-#NΥSz<J1^ CK+k#ꦋEԅ` h*D]A %4:
+"hÈ+5&W)`5$d <q>ckSUL]#ceUAlchT:,:SaWlҜACiA3!xM^7anf4+NcMz qHR&s1:<KF U _c5]%oh#-l-4%Y1TjC\~ ھD4cѴC{DSO&B@T#ҀhNh2
+8T®~<{ndrh]PV/SJ EZ,, 1&=_˂ Z]wmGt= XUG9DWsu@3[!Aty#<[wDl9r :8u:,ҋj bB:pUWc.& "b 4օyWƸ'lT)*\mwBI@Vo46gψ!F;#3ǂmoYta2,3Օf2FXUVSzIh7)tSϼlgSD ]g41T(hv$bӈ!!!)b0dr5 ɦHN2f-gQ9+lX<|/x,ڈFiS$Sn@LxZH]S"jELH1dfC} U&ɸ-f=Ɩ?h܆2KsܹT
+RŻ ;G\w2h
+]i)wwޕ7p=;RfW-mڸx- ND JD C`Ss[FNs֦>]{\;}K)W3g>RNm lY(Rl(1b б0٫=HMSiɝYad4X4ec,Je/NRs*0[[쩑7Mͱ&T`N(mwVlۯ7x
+, =؟J Uc:L`Cz3 ֤=Kn~ܮ4*7De5jiVP1a7Vl{Q Ԧ@SJ/3~`0GfZ%!$[h=<;RŅcghWSsP@g@E9$%l]O (J1K}R'nP 5j) 7L
+ S^#lħǤu4*Gs j(nyR~<@;:I̜25b8^N2KfurS[
+cHtLv0Qz㠈̼?ɍ B[AQ$\%TY<NˇMefiٙA
+ K's=ٸ~0#\,w?5 Rv>ߚ34re[i3 ɴ㌎~]H)JHg
+-Fy'f'?Y0S>'BZMirWA$1(9%=r@rSuVW>7t!GOf`Sѳ@=c`0U\nN*W:=Ji~-miiU<cݮcK,†e2X{TBw+ˠ \O65ЇSrq iʢNNyεDYzܫS"Z>`JI0f:؄CiK)_μXj"{5(%b g0vnHsΙQSބszk;!1 " ")zqUyIcuFkh!r-MŏVF)B&% |KH9Z:%*ɔl?&1em>,Gc^; 48g<&;t>""hc1*i}X59\H56G#"cbCQ͡Х=*1x _yFbO8V*;tl]&WJd-a 6Pq_ yЅ4/fQIUVѕx% @_bNO+}0WOrz8Oq̨4Ծ<'?X^XȔ1puMCcQoC$U-dzJڡO"F"\mzNBz4zg1U)Py_c|°yS]xh1tx`I&g0r}+7
+&~vea
+o,U8!heމKoy:)?}"4%DK1h>#Vr"@"+A,)ω~^G?X?b!|L8YL/#WG Us%^/̵n"=gyEʓWzEd孑~)2gtY
+47VbsXn..*'380Uj}Qu^XNgEiKcmZぶx>DpR8φŔF6xJm^=C4؍חW4RdJ𤍍ǣG?˜_Ho~1,le^ŽqtqiMoN\&Vj\bSH!%V~6wIv{3Q 1 9˛؂V(jI0pf}j}}0"ýZ] xh:|t~*EhYACȎ:{OTbo_Ć4dv:G-z'>^8i/
+s+L$.hOb^i1r<h1 G淅d (R'E$#Wu Muꅩ
+c}.©uE&p\|]|>b/q!zV'\wzSWuX(I-Vb_XomJZ[n+wh)kB
+hpCj<rAc!l7z؏8v)JFMO8NV$/@I.B0U|YZUOEqwu gB=y)O"% _| 1Y_?:ᣘ(qk$.eqd@4߭sʌ6n5,?؊TL(+ڪ~;Dyzv湰 N5|teF!Z=aZ0)L3H諺V]
+ll$d_AwXR#ܤ$y
+7&n 22(q|$Q|[~~Sb)>[q'>u WF*,ua;L 1B!Ti1az1ƪ<H8B
+?b,Da:{BB-E}Ei:;m*f)/Q< 6G.j%wZmO`Xvqz[r)]B<V3TR=
+fWuQ0#jl3`~!T{0L_XVU/۪`W֭E j}Ju2s Y&̩ҴyUP}/hf*ۋ+#GhSi r}kX8M*#~*JU
+I. h<gN٨j8B]Dyv2^Yjepv{YSӬSƣ2RC뎙dՉӌx'|: y,Aڌ]dڮ7L;r{\SyH:!7ѼL0wЪ,k0O^h+qzTR$2쌡9zjDe4 34{*k[ ѦxH{XÊNGD,gc/9TD% /JĶ]k槌:%2Iu3TbTsCgyK疷.c@N|Vg%qx- w.6/9JqZ~L]j}ԧ iӐÊUd>fmMvjϹ%ծ,Rc[6j6NN*:5'@i9F}ϔ-\hl'.U4LrQuqGqzV,/ 5gacf
+! slsZƄ{^Q|olYҦ'<,R`AmÃW Hk'B%{%D.:
+zCLY<X6ZDEe|)R"Ui_]҇,9,yL1Bdm
+̚Fe2 bKuk6J+&`!rJ9[.l1-y׆Mq<X#0iaw1ii@`ku=2
+50gʉUt eH՛i18cr$mJ
+HYuzA-c14WNQif .O_w֓,M,h*c4uFMM| Jq@p0E[vgȥ\3 ᭏xiߤ+Z5D|qqUM?Q(g=zJ|ȻhO.<էAFOKB5V8Lr댬gmˢ,0ޱi\9YNeH8Fh)O*0!t+.mFԗ*;zať? Uo&%J3w0@Fٌjܭٝ眶k0MDT'C4K6Jl*J餴 ph0n-$\O卼3礉(. ocL:.,{w'Q@Q5+hc%Qth[x U$yOm D%eR0[ԣvv:TT6'(mIFz{þi^dŊNۢ*Mf LJtqA^vxRzAX=qJQ@Oֶ* 11 G>څzϤtQB m<;2ͽZ9kVͤKk+7m@\V3g2=6c>We@v7q:|\C$An(y*?X~!,/ό¦=-ҥ`ߞhjl
+c9 D =SF*Oƅ+QlYq6YՒ1*
+lgYR:CNtK*gIl,nFzEb8p+/@<$i-*Z*FjޗU:+Ҹâ]W %w9?Ff`EkK>FXQTmA.#Xvش2oϳWfS]v$,r>ɴ[o .zBpyTPH;,F, T)H)S*O
+{~-q' 1'lw::i}b׫zs8'4Cc5l=v_h!laS? QEkZ[L;^ XٳݔoqgYeN~&JLJpSB~_3©jQљdܧ3IPZdűw$lcɹIU+udM
+LGb3+}wZX?| -5]ǠWHp}},?X~sT\Vj"[- Ϲh6w {sTR3-)Z*s*65It3^Y+R9歂>t%Џ<QĚjt! k;Vnb),$]֒́,XP|j^؅ę `o-Uq \[J-q7ԵmwVg;% SL̫$RU\KGIs#eWXM#h9^輱K\rj@6UWOrK1
+kJ/ W<k0WjuZ9wGk|j^zsT`Ul/Aa2kP>11sP~
+ܗ#H?w)h_c_E ?X;^z(%7(\frV#tr:{۾tjH@+mq^f>/p6gw!+(yйEet} 5@ ɤAPC{0n}u?eDʦ"C|=L7HF 3ƣ&b$ Uぬ=tlp95,v;j65%̪gԅ|:&fõS&Ζs`DT*3n|N<VD-{@1,f
+ C{яb#GQ^_1Їxg]BgшY¿$31[&yy/5 n8;pkC̦Ho
+oFZzMu?w:Mlj-|%-r8R guyGM %6r ,Mzp;/6mO鬒r` L(@PȒ6Y'H@d% Ѭ3fKR&Ƨ}
+_C:+%C&ahEf4ݰ@C J,m:PJ6iL68SC`
+N' /rO\ ߽ aUlj
+uPmhrْeثmjDjU%̈́_ zB ~ (woh܋?rZO7Q[h@.M UvX g7\87$n `.
+&?a8(H
+c@I,bb;^FNJ3O[0;/Y6#lP`F@basL?7?9P73/R"%n˘`!s6e,L9͹3윗"@S؍~4o4<>&z{*@z]$扫r!%⽍p3s9:r`%^ Gr}H쀔vS!bn%e湿xf$k 0 es7dnez'X0•ZzC,c>CC>&".5}H\2x
+Qc? 00B3,OۖVۖ<OH
+̵M11S%gåM.>c<?]!7%=$ە}8sO(žgl8j)JTH;d8]/?2*eX;[`|;wq 0eԤx,6pc(o۬`H6R`]BԢޏ;YcS,&Yo wƖW;( `ȂjjyE[`
+u+Yga% pSsl۳BED)ŮhEjRǁ)v5T Wϧ^镓uu(ۜV̽v]#T9ʤ"B̥]s sMiwaߪyX0g=F%KtA<@߿JV8hLGY=p z`YZ-`+3\Drڭ{D|4fS=Xk yM%g3|/
+ݻB~$ӐA?-6
+[}DLpKO_K|s'H4cGoV*]*蝵U*7oԤBMXfaG(܎
++]d&Ty4jJ&mާ  sP2u=k8^<7r7考ҩ}$Dj ׀S$ȫs5MDX jo5[V2$w9g e x͐w綈vz:]ŭN3.-evp:ʒpb, u~+aF$EhR%zcCc $h.Z ޼C8}QJJn=Cx&̸tq/L4AK޴*<hQuwPM-OP}{*jU2-N#.)gFtmpF%\TFώ$P:1l
+Ԃː/r1%@%~JEMe5fzqhé#};2a
+:t6-BrY8M?S㵛xܳ
+Z@n R#N*Z>+8t|o4#, wV9PàM]Bۅ^Z\ݳNBLc;;0.uvEZ.^ 2 %B>Q+vRa:lbCa&Ri.4$!Gq
+-v SwX<?t>e.~HŹ"%P2g Ėi Av eݣe LUgZi/"{\w IݏLdAU<MhJ*ҵxBR/U8Tr=?e+#\ =Wˎ34>˽5bmEލ12֫諌=x\pzo/
+޻H_EIlHͦvsHԩ*y)
+Lw\I[nQ99N jH0jM ҦA# p0g_,'-94X R
+L<v\K|H36J|~iR
+)mWdΛ4%4{nWi7LrH"2H;.s2H#-ve X8a#KV#2HUslNI"u J$5
+.Kryz\DZInfʆs(SUW?1=F1U>7Aa~?PD0!+NG߻Vs:(="UF9o( M_)&|*٧Sa}Y#SK:Г{ u>MY큆<ŰfXȽFɎNi,OS֠"O0bUi=2O s̯٣
++c4j 2QusN#y3V}oz"cɎYO*aFC#FMno#.RjJ+/.9OX
+OpcH*=Wyd.# .0)PvytbcwցQ6/yZM[I! `5;
+{"Z,`~7+(|6qqs9%Gr S$,G|Y%W^ػg:*0م x3첤8IޓvZX}}1S0%VKҁ!;tW)8W>7KwP$q| q]wx/Lѫmb=a΃(p=?$A9VrF3 ;`Kk)cZiU X'p$s ĿORnq- oii0!0
+5!` I +@ #ei߈M"[m{$7$5'a$͇$_
+;B
+2$Գ/S{P &I[$J,BzMTq}^ T{[n>,_@&_C%v)Ӱ{rCg+ @>xo8Ӑi+7x/؂U'.X[ aZ xSZﶾB6z{rR`/$+ X/xa_$NΗ,t_C,?nVpVwAV$9
+c^[<FYj{}{ 
+}C%4
+7)8^oy$7˞8w5r&P6;p} `O;[Dqλ 4g+S#; QT}o,7=>'r"?bBv\jEna$3$Q@w-ZnѮw<x!-$-M+hkRۺ|ߢr<߷hrp^mǤE}A?nJ(v\o bQneЛYy$|{f
+Lbó2׸X)pMP$gak/
+8-m˟1$L/uR FbXJJ${{㣄L'I\ϊx;[*
+::9+Ot$sի!Is֡lMLP
+rӷJA1b留`jSSyAN7cv۶y:&px OWaHLp{K,ulC+R.K(uĔ;}ױ= ^ξJ.];A[,%{
+Szo~u}JZM?ڕ*7My}Yv8߻\ļt쏝=w>N|>ŞI/?ɻE%='~F\Kzϗ|aMKkk[WOwH@ |7-wPh
+r+ii\8γ-Ɏoݽ~{847-"]$tp?1]\ u7s=2ޯ`/ȺYܪ/UnԲK`o Lqv2TR]Ҙ
+̼CJ?6$Hc|9swE<2
+X#4RNw 6Gf [G"Ԭ<s(Lc|9.RZXޖr<Ʋx 9du2YS68ӛ' m~dcGb>4;xBrKͫSRGS2۩T)W-S Em9]t0|8|Kgᆿl|S{·+g1D>\ k]pȇ41k|i7eEqeePJ>\(bhpQ,LJ; ]D&ٖyD?:FQ3`HF~fV?g?yH{SB&I3 b睕Z6 ''_N<Od,Dd&z{NlC|xnC,Z89 Onk=^ern~> O)k|Z,+nJ:f=x%pmhatƩA&_ EF*2礋GH̑D3#z& #կr2R22R1_xF*RFF*$;G$ԡMކ'a$.^
+GSO
+. S,+ ©wQ2?I*TxXN|vf@?9-.jj+=]Y<9YvC0 \POspnQ[yuDCQrbոk@%.v6/o;Epao}: sRo뽥MJJ{<q
+be!JsΒ/s{*{:Zw ;$-RsaW:W)/ݘFs} Mv3OvDeH
+X#-ٍ"/ {7)ΓҲg=&N6z|_N_l#ˤ~ gѪ†gM|>W!yGsj?;CTs [G>PhS9='T^:V/9Ru85GeV+;sJRZ%pgkHfdCҝC*"z/??eK_\ݷb#y]k 7ѳDR+P?.~&"J<
+Md[MbE"]Ec%eӍDRsJ˦ϭ.;.xKtqђCM)).[MG iMUN6]\.]b=
+R.'LbaD>#Ș3
+{DBw)\4G)sX]n;WR2wI\rH?, [<UfRTez06Lzex[F|2X"ϳ.4G偩O(<{şF9+.ωJva!cC"C$œy|2O&9nxB2΃> ]e}
+:w;`3ɾR2B`u'Wm׸^]e@e =6S8;:˕XT"X{8X{XޭY)`yIyGzigC7x:'KL7oI vVVCb/9D{ U:)
+SCS-ժy/&pG9N5cqD\ʤw#lØ֭]Zcm0_ᮔJyD*'oÔ
+wἤ<!TK5pVs~*X{"͜$;:6s*y ^nhUbӡAnIˇ2I΅$1Ury%1QQ3p9ZAݷiLy&/HTbyҘ“ʮĺ$15rev+yve$Ǩ=*<*)NLѴ'~o[#ae'D9[ [nrDd{촼N)VRiT07=fTkOq #Gsv+ )wsZ…q~9vVWw?Tk̓ 6(sr޹'ָ!׮;?>// U=U6zv7{caIӦr g{RyKa.cg#qėNnݴ~%a/\{4֟t:F$qxJ 9JûR{n~^>hFeK7&n|RnR+/O#}Ndv$̷vx3VJjzn9G͹u&aΧfV)~brZS
+U1>8C7CĦLIrJѪ!!''j5OjSvbS,ͨ̒ד~*q* 9uy@VZ MNJ>~ZcU4pJ+_r}SZzڠ e9-<gc#j|a:^2r\}ჽX/Zsd#Fy.֋D+s)->d=Խ#z÷hb`KhKB-wť
+x?#S*%0qFvNnf523DgYUt&ٵ)EJ1ed8rYbt؎y@puSl,9!IJ˕r:=G`A0Yys
+z~qirWBPu{A?u*I|fZ/Tu"P W 5tz&e潖R/u\+8^s5r]t[B]ֿ7J7Kz|r+TO}뗒yڶ;l]tKo<(_?$Ü"Y0_z9|`~ajG;\#Ǘ')ÕfrlTCT9 <6t]~om#﵄~U7RnDZ=^ꧼP]AWZ/閳ahtF.JU{o9O @]?)|z0R/#
+ 뗞ku“Vrdlq&&ur0+9IɮM؟uҕCjgi \c÷4m(G^;~bDWBkk7}$m1M}S! zڻ][s1M@|5>Oh{?TO [-Xk8{6wtcˊۊ];5RrooܟU2:'VflW+Gwqsgp~Swr{KϋFcî<ښz?3λsާ΅ÃZyT7?KZge{EQ۰zW^wn/웾us'2-ٯ-c {',6A/}m[($߮X}zyic0w.D-qظ;\x;tm3I?ɡg3WH9a]{
+ϑS[U椿U8:,շJ}[{B4Wo؟Woǖگ>.;%p|rin㗠[^>2^,ߩhV~ll'C vg8_N{kO#\rIܶZ' 1Py?i ϐ-vփVNrM6S46/^ph8lz_}f|SzbuRZ_+ߎ/ c]&ɶ1?-Qo(_~6`%aM>?ţ$$ ufi@ӋRE91wv{mL;n +yf?fsa8~ۄjI++ mv}ܯɣ·u"#9co|QM8Dx0Hzn|rvs7:Kõ/a',C]>p9)p oyٝ%͉nv < }anӭI]|O=Β!
+ޟi w7vW5s9u_}z\zqUeUUvƩ2AM}lfۓǨjk_-/k3/ϻlf>l֦_{[B~oH»i0`3<+5Qk.Pl60]/PNڜB現6{Ĺd5hlc{ʏ艇k֖p%a #L9-hc`s%I_Hh6
+*W 1@,?7ipiWE YxkGp<]H3P"@oyg=uVgR:݈R颹:.N iQv[\÷?MX N.кcV;2:hgb$Jx[AsIm-i^| Y~ca=},;[e : &1) 饯ׁ2
+T☹-q庼5ffx~쇣ϪA:Sle
+!ﭱ?G@f^Jmk0O ¹$Bٮ ABqS+7zH"~
+/J=iLoXj*6fu?*ECNdС]cG:yTt.
+ǗJ. ƗKyM%*2z̊)qU'1%CQSFuLVJ$D*5ObJz$ObJAU)6r}}{˕ߏ;*UVu˂?,lݹ4*<V{aɧ\?{ Ͼ6`4%< _MaU+OOAkuzUSu 70ˊV]V~OhhOլ~}תmdUZgտm9ueӎlsuj2ZUh,aY-].A,ڲ?*rmZ9Uh`gB|0LW #e<c4e:6&3魎;#66-W31fCr\fkٶᏂ&:0hbnvUlNn3=j><f0U0if<4paɿ.nz#@(Mwdv۵Է
+KK4 l8ۂ𔍼4&X GMaР;|d6H/ Ў| Rua+ 4$RA"]920 =EiH*[ l|Ds,^ C5ߤ^^N, #LDy >tql'0@ހ=7X2$mV`M%l_ `z4X:b #~~5@Ր PMg@hӰiPZ`?jI PNQ^a? R5!r`h*.@llh C=z.<ÀrH@,{媢˅#Kؾ:xDw`u f0xg@i@}13py Aa!l|ִ^s@\oM5wMLzWL SP;E <L`MA.0g&:CfQ=S')6\T:1 z5G/2%4y. L1h:%|4}H@Ǟ u`
+@'kCF n@$Q` h!A;d#9 Ձ|;E=lX_V@(\Lk\
+D vl`@LdN>P!p) 4B !D",Nj}u$FIV1[
+lq %#Zc/ 8YRKD|DD<@@H8;D吅DD7ADD셐EL'Dg@mLq 0#0PDG
+h CE>,41T;@E*"KX4VP-R{r aEV,A蠆" +Ν,ruzQh.ZcFI @({hvZ)@Ѣhh "/
+XDMA*^m,},,,"Ne&"ݨ"*TCX ސ`]E4mۖ`s@ pXmaLbEPn:C@EP @][Q!RU<<*Fp
+V،0Z˵3"W
+q(hW^*J3
+̦bE.+m+UEt*h_Za(6%Zd:avA$"b-cxg^!WtcZ6V\'hS *aU:Lӂ]̝
+#ܒQ?1[i.W/!0 SXxܰIA v/(# @`8"-~H%`s|Rm8m:tVۄZl_m26jm6X&Xy[LeM):zG7eZ<h[3Z茧!fߡJg!Z}V(C0|o4`(WD`v%2s5h`[Gehlۑm:u^M].p@M0
+0>e#D~4;`R؆"Sw
+ &3cD.E&A}H1<`tCN&9t~!\0d+~6d;[
+14ȇHCԂR
+EFq&ߠA@z,0FlmZf
+ Hdr `ǹqa_(Eu5r!Q0aahJnYȞGiJZ.:~B 6(:>7p ݑnt[Y>t#mn$0Ul1?[t|Q҈U*ɫ@ "ц
+.dk/&
+5nrr:67%Hλ10"s!A&#qg~wGtGNBc_V `AiH߀
+1\1\O18DTZԘ&E_ &f\!?$EAms*4I6ہ6/t0<a@釵ё`&&mghQ !y=؆&lWW /}?#
+AyC7<ටڈ&s(„k<bɴ-)pMTdqrסGigE.Ύ-&txhFp|v 4p:FTUˎ(w?|-0uaѐ uBcqe ?bV8,(- 5=<*#E1tEo.Ykb
+ M3iZF`B }ka@oj< .[ s\i߂U+步|o 9fűN]ui aªq?bȬ![ذ ("۷&X{cR[&J+aߚx(֭IDZҼ
+%AI12_CompressedDataxko$u( ?p?tf[+,@Vm ׆q!{R_c#yGDVVe H<8q_ͷ+=]ݗwo~+^Շ?| ~_zN7U~#ݗ ?|}~_??߽ݻ/W>o\_ #|N/_9\oo>߿s}鷷_
+x/*w񋫿/͗.0M_ݗ+_U^Zoh)߿w_ao?+^7~wa3{?#ռkp3#?~Y\~1;,g~`wWoL3}ymּ\?x_$
+9P] a.)0!Fr, [۸x߸$O3 ?k = >@b7b;Z;ZԊKb0/~se=qJ㤆ihjVijhzjzm79ڤq_yxpxpvimquy}ڍl#o$ll&n'o(o)n*okMw#E^4bL3n6#
+nmڥ}v4 oiL_\m}+ ,W(FURM-/wGߚjzSo]A׻z0&wś)7nov7{7$FZ##O/n8uL`mN&MSMۛ-bv(
+vww{r3߇}ܧ}v~prf@ha2yT! C4dan׍N?vOX5^׵jyʪUqfnWmjzFgۭ;i$mH/aOVUi7n9D}e6789:;<=>?@ABC'H 1qR0q1:DR*-T)&nwg/m'HҊ,-I
+Ҽ4Ez0ob}y?w`"\GVZVCY@ DNWqƌ@_c *o{= >s^uG=7{#tع&|,h* zN_3x철i
+@9%@,P"PI DIAav",‘42̸ ܶCm,Rء@ױ>eww*犬; 2"."2j2zr}q˲"Zf_Hجm?;v?6X1gSQvV,|2$tZƗy?LG+ a{x&X;X lR$)3wS{H1捪(S)wMY2mż!"YәzIHctTT8h,AsAV'8_O@8
+ NDWDMG3Dj9e|$nK2`
+dRy'dHd4a1 1Įm !t"3;zd^C`d~A|>b>Fo>Wf#W}z
+oe߬2&^rkW_\Nx+ 5c%DUf`* ׸!ztçOo>a7Ai
+
+R-d,"c,(Q$V" aOv@
+& ? 6SinΈq!%gusy6\nf4z?Mj-( 2WvgSZʙ|UMRIK-01Ц-眓K$\SSKFz|/>{4ff^JqL,׳9GgJg>4S:YڽS[Ƨi
+Wٰʉ\ϖT\;I|]ʞȩtCZf=[=jĸ;
+Þ,p%钃$ZeiXܑcpKz3Huט5~sA6Xu]rغݞl׮\{vـ7wNKڟW@9nj
+J$z!YFf>
+@  u
+ؑ$LBSNhEb1A4Ć n:6!}sZ'Y7w^pnswQOL!){CPkaaUEi5y"L%]?Zz%Wkj&Vi{WeȦNT>9oE`I7I֭9;r^IYE
+B%'F&`t !uÉ۶ܽf9hӚn)جQ'DeT J 3eo"43a݈KlB]4_ʇ4ǰa],jx~ÞWkZi۬Yf6ɰ"*FzvIzY2i[7߈Zv~{9E휀30ڣD.9&:ʃĩ\S>%>;-v֑3t! $9 ތ&A_hg3LLu&0ۛd =+7N
+zLπn+‡ˊl:YdM)L?PGL Tw6s)a89"-qҺIӵ
+f ĸ.0f2߮Zlס֜E$*lթYgy>9GSIvۖG=frϵ1iAVE ]Z:kк향vjiaZZakc.tF 'U
+j[]|J2VN2,V̑ETKAg(e(kD1EVxPݝ~?̙>+Е~Za""|`|||;YJ'n"|eg3K>rހOsǘ'hL H<WL@͗t,!'hܮ?VI1$-2v4ǐ Kw]pvG9BjOD
+"ыyżb^z1/楟<B^H -] ua{e?O`rXȧ(75LRѡeO3^Mۥw*
+W;+}v1اk]&m=ᒇFr-;\5;\i*l[ODirx򻋉DСy:esz{l])\43ܯpNnWظUuNݫp
+Nަpp=
+v
+w(oPXߟ`'N ΄SY]tDw%$DWF5Ch)~>k#W#p+ugz-ƺ܊!:˕ت"L! BumW&YڟπKOmhVͭJmt-[I.ހgv1#Y-}RҒ *? 1>2EKۼEׯ^;Pj7\-X~KQע pНqxxaPޝs{.KQs.u/T.L)1?/ 2Ԁ/te_|h?'3ts(X?x{=пKPPd?VsYo5/==>5xΎAyG #a5੸鰛K:2h蟎>]ok܎Q; Zm<Gs=a;QE2JFH͌MUGdھHHǪ-%}QPpy4TX:Upx,XjXIut]]zJVqխnFlX%8SŨ5"\C
+sjr!#ȪA(Qv5p
+Z'o*(g+yaf9sTAzN5׭:[RRf%qeu,~OHXn fB@ un$B{B![;љ0ЦeڨuvM.ug{ueȏ^{ӹX/7ݟl'jŪ2%omt>6W#+un4[iYJ LKkˡܥqBڙ2Ɣu)lQY1ю+j?v ekWv߄
+'VfYC^\*WH~ a4t,7̣2f12}ܭ|qud@t ^ i;XG}l7oFZQZ /&pK O\BrC
+iZ&~OS֏]CrCe*9"r)O#,tŎbd`;D%ȠF/$}ID2={Pt@M{D56lq0-q> } ̐f$sqD#;Y КeM7k[XXnČĆqo5<HwWCN7XW 7Re2tijYֽVjWfW{ڜi]bzWzylMWs!QZ1@ ʸEq<7zf'ЯUֲ>`;ka#=1XQV8,^lyV쮣#NV;Խw~<َ(`Gnu6.=tڨp7`
+%er~r
+G(H;Gᯜ&)jMjdU[Ig HqrɶVVMߜFEk6wOilyP@
+x2ɮgВD76͛tffd3h&jr(=qcq#=飤-N)۲(4h
+PJ'(U٢+#eeV֪q92ngĦkqi@ƶM#S?PCjLOjFKQp@_HAyEX0ddDVh( R H:dIU_#
+Fk{oon+L^Xݐ
+ӒaE7&ɓ|~5Ed_֕jUZE>y˝tU:UK*ZeñTiu)}s7N 7m9R׳,VիkxsxOj}te*`~o(]*n/:ECzuc1>aԸeKϯ{9 bk _5mZ
+". >̢nZJ\캀1b bfi<bcϘH3^#
+ {kfP<6@4r O@#S g[U)g+sKJˆ
+&<oYtQC-\ C:=,3`?a6K98˦F΢utOևJ|a #ss &
+IP ;̫pY
+87_vshkin
+@=hPٌH{;KAsy7nr/ݺ9x^ |=2ca.<m,gC& Ӻֱikȶ5`yJs rm Y,[q%[ %]vƅ~@'ؼ
+CcPgV#ŷ FMZ+e]5].|z4j?bv<lj#<PgZ*ԝ^8K@ÈiNPJI$z0ѭC:Lӊt <\`楩==4zY /Í<7E=1/;OhƫN_x]bv92H">~x5JK攫Q(ήFY_{͝v)gwh7of]ZSh0:iKOh>汵Nk2V"^Cܻ͟( w<$) b:y\ c7y,]%m4.S7L+X)P-ij.1ta*@m\yxx<)p er
+;5"yݬ1{/kQ^a4_:>~rA{AV⤁>T\Նł/tw2ܢC;Z~%|vޠwMDT~rG(u!)gW%WĜ#exN)QC#3C-^ V%K]`U_Uk/Y%^SԜf(IE=NZ隐ݗ)-HKL~ewT{>'|"v hbA›Ka*ZA,?}xI,a "z9e7^x(厾f ˡKu[XG [2tnyfgvjTw;{zhG/>ږ>ە֝tvt݆a.p{KD&r'DZ.(iNڈW˪*I)Cnwrp"Vje h@:vJ@W4
+lF.+aee+Dpg2l$v|,t*fVHa?I(pisGʦ<|TaՓzYRNpuUSWE# `MGzJyQsNJoOTDj_5[ .El o&wULoXԉI]*FToi֤5WeS?Q%tX$ ]1f4!n*' YqOFTs_kVCL"}K2`}؛Ep9aޯzxXT<<]pjWНQP9QНWB
+d
+깿fzXUO ԯ̬ѝ6aJ ?(+sϏ2}-aDRA#(,J5)]Om|A4/ǀxZyI ;x_aeg8
+ .m]@ui8eUAcJ
+s^@sUa2w x>%]i<4c eCWLxb0 (zV[xs*yBZ!݊)JRp|CP ]p
+n*x
+2(y,", . ` X[ʀ!0Rw
+RW!3#}K1r /0]؁wCatU)0Ú,a6Jbݻ錬Y}>ovdQ` !te 猢WHtB02o 
+W<x"S+ ٥Gw8\1{F›:"*=wCs:u}-> g;ή08 }{X_ s!C6N8p u< X:!NߗG)Cߙv`GUvg90h e`٩·*75Ax1f`[{&'80 2hw;./;¤dck#ktf}t:[~ SL=64 89#(f87
+Ή6'] qo&.8d_h&yoȕS s
+: GYPP
+=O@Ji1
+,TL "D__Ա*_}2Tv1fDN,#aZhbNr]g8<|QXO*{P7L~AczPf":0@< \@
+]@ Ww= ݻ Ou\@
+4<ry}r)4όAE(W?s
+S0-tB] Rςr ,B= +ԳB= =Pς0
+u,0PB(ԭ|B]&KLzC/t+,`B՜_M=Pw`Bu %qѹ1] =WP2+WP#|P<A BquH*L%̛h}"$#0_p]eEӍwѥwGcsp?@NN)UIlτH(_
+u#8<m-X{ØS ZtpM0pu^
+yBA:':oac"<\kбqZDzuceBY&_sc %~ V'Kv:᫴ҾaݪlW~/N@7BYb<5hB򞍺xS0+^O#$k{BO)7z[%7< /  ijг^@vd"=GkbOp' X@c`jA h=lӀdB|UBO
+
+XR4MDT
+|qb
+
+L
+ La/t3zY:e/@D@_+4
+sԗ-
+ObD']q$dS 6$a_(0< Qie,
+!Hb&.
+./d}ڳ$} ɕ͉X$v-\=yW,} Fƅ#C"0 zސ&Ӱ|d,=%s $Ӳ v
+0W !pJ:j|:nA#_yxJTڅ@ UF"M)5[[bo [#-29,:썁HlOEpI)K:@C /|-1-"Ӣ[Yqjk R4FQaj.6
+Wyb8Ւx~ExMY ,\ik; [5*Hr'Nq)QkLA*Kr;ǘ<"dcW+e/RL?ZdOfJ>(]@Nm2CR" _eGb:uqH*dhSAK0UT JjPȅu`MRhܦva!+ L(7ҟS9 @
+6[z&5B٬QC[#q\&A^
+OHI1q’c\8kqv)%rTYU V*0{|+ CW|p 6p613aш( շ$U.
+A R^8Z00IĠ.~%
+VGq "((a5G=b|HLkr0kZUHjJl2뛀 NE%Ijn J[ljt~$ _<])C `ŮˢSi$ԂUO)[t&ӲlTnMe6nMIBU zSʁ܃T0YJO؄ͧM6u (
+@ ݇5Dm.07/'Ve:1Mc
+5oP  9V54(4RV 'ԉRZ(pcImΎVoKܢdZ{[n82l<Z-^oVK"F!
+[%C̷&`aj2)Q
+GE%J~dOAuMSfywQG6KҢҠU8Qھi1cm|Y6# 1;(6Y9ՠS,>j+?BSrrfnuQY<7Þ#[âJ(zhsY9OX[X%a-G}}A7j9Dpedm#b6J
+`/D@Ғ7_` Z4BW~jqb$(
+J`yġ'ݙM/),J,#"g.,ʸY4i@ lYxINlg \fcqeI,I (¾UV3 I77JJF:R;+8mAT՜y6
+2:DWzUזUUӥ4MkjMJ2kSU4ڸ c ot]M5,b+\- …#g¨Bph_MjL,G""PS %'XHEH7Emi`'MO#+6*F-mL^Ǖ8[,ud(g$}Q+Vh+4_K*8YK!2Y|~X'ȁ5V"N"P_T†_ߵ!^[ \2TY@ *-%h'Y5#^_!Jz觞scQOfıX*@TW$zSjd*5
++ LX[)A4&{Ň"^%9s˜ "KA(h$7FKR#h170 9#@E'o̓.B
+^KS "A
+A
+0(xtF
+QA r,N@h4CH到N-XTR_=A3ЉHO Z Ӭj~JIt/Aa5O R5Yd4я
+1"ddL*1X~dqO -_!*S8FWՒW_L(|UGgu$RH99y}-/ Re򣀳.5t2^hI
+T΁`N,J'R&q):3b,
+
+x։Ic SsHS'b2fN(4Daz"%duOɀ"4cMl*CuUF(ULQ<E#se[լ(wP-D>
+8VK@C[iDFǫ)ւ ꣀ<NC`1hy#vb)JN}Ҫ' {R-
+V;s^+,>O,HK≕j^Xհ u\Y6SVP)7|FbamՅuVשx\7!4\oòoev .* їx\7!
+Kgd$IVXwI|6!ɞ}XGC#
+Hg1U6fQp-9`F$z|+$raP !ֺ(0@孜HmЄ(/"}|$ZwJb y
+ŢGGDx!Ue5-,ݖd)R?qgG{Hhy
+J8vu
+EeNGdM_K]-uοwp.F=]$Je҃
+E
+Ddd~H"Xe*Q/YԲ.J!ޓ)ty{:腯[1ʺ+)
+3!۝(KG%K#KY1ɑz$v*;n7E\Df|
+"e0 3ոzx2ȦOz^1PL"Y Â
+\CK* R'+c76J9*kt(qW[Ƒb_O`@[B7x0]fJ .h
+|F L|3S`$Ȑݸ7s5:d} 4C2Cּx!jj AG0|4Uǽ>mrI+zG`!"К`xCj,S
+.._p2 Ps<컈 fijDKen(p?5X90R te+hO*zsREq٦ҙ`$şcZn
+J"s1Z
+fp2IWKjq a ⁈sv#[r0ǫڬuB2)Ӑ0CP3&J00vOȣ"&_i^(#ٻ>$C0W%anBJ,yIη'46vglٌ!/!(Lh#?s B-xrbӣmO|qהb;\1ji;(S<N 2% HlBy
+M8zUBlz0Pm
+s͡Y}/S=TbA,)HP"kSQ7R2YcSM&[ W("]nWXH6QAY Uk.`XOD$` Z`VWk&U+:4) mWh:(TpYy+iTvj~)N6mB E>\Cˣr;OOGf( 9 0Z\;
+|B{ͅpuBVlxO4H>Zda~@J\O-PnVSǹY
+Wx4vTdAH<?`[_LRL$M(T-E+w񨐋ƺ;L%m X)Q
+a_ddQr—ހcđqO&=b.8N,HZ/;
+;^ǗDDmVTb5=}tqmׁt$ּ<XVrB+I,n%g< #!|ϗ p@|$my#M;ƞ_.DͲ91IoW
+<7|Os3ςjH!ixʗdcAUl"mc-@yXLyVr);v}`ҮX,Љ੹o) J8y_C61ME f~ GJOLΝjCBU˔*ҢX0^BL;
+i:qylyϛq67un%$hUndRβ%3rt;[:q-9rI/@gImrb U)n5Y;
+i<6jF92y!v#bYGZJZ tgj)C<#)" &+Yp@/]LViOrjpp$zBJ#AS~
+Z=9Om3ҹ!?Szq_e0c>J29Aذ}|!4}8w!e$Yo'.Gk-ߏ\3KIC
+f`/EVPoJa~u0z\Yp,o퐕_Tdε G/Ō@zp )ؽ?dzIx!$3>.}0FWH#!Ջ'A3{vҠ.u[ۜJ<A4 W_"w| qP 377yCmHqR;ӭtI3 7Ypy&QmNB~h( IGp}6'i;`P mr,|0IԪBC0k _.~-;Б-4$XK+gV܊ĹHOC)0(YiDu&_ۃ Kq J`*Ĺ:&ѭ3.RlrA$wr vr~C]ymϏaKa"4._[2X
+tRl3 '9uɫ}Uk lRŵ$ls6F*dvʕicڛ? uRHr$ŧ&5+ Yv&Ja~@]hB
+qf8bŔ墬p
+[Tj-_UmUa`̚`תp52UYê cU.eY m9ʲVcqh|pq<sUFu9yU*+_W֨k *+$bm8ñ{2C',&W)'X,Un *fsɳYVJ'ĻU:jy:Z~ĮeVxj'8m'okDuJU*Ko<)<?|/Sqy̕<\ekbv`EOpKWycv듕0w".yk l*$x;2>H^e/W9ѫLkXY U)^*dp,q?_T$0QuZ`m-ABŒj
+e兕 bS$XW͢|QQjZb D6(Fj}Tʺ+
+-j./1dgRSjoV*|<XUuwzu}&*
+J
+u\dFGD[d wlx9||u_XK=P[!e%@_ʩLTzj>k @PZ ʃS+Z6rmcW.MgNy'Ygr>U &ȤSUU:U#kMJkΫBUMMX3>[GV%_i[G6Ui&(*sUv=^*NW[7A7
+*+PA64Kè;2#eQ1.ը$NtOU^I*Tj-UxUƚѪrnMsa~U&ĪcUlfY#mOm{Ҷѭ` &ɈSOU֑ w:^Էo
+p
+' X|kG<Uc 9/Y墬VN0\V0k96G| *#Z*舓^:tZaEZV\lUf 5|jvʍ;q`Vu*pxxΏ\eR^Ǻ\04W>8+l,U>=KvM{y]=p<|ʒ^S^Ѵk5*Zu~~ʒ_ӟޯW'5*V5V@VKU*P+P0QaVDDjj]550F2˅9kpTuT+{RV !,Y*nroj͔*XU[]Ԃ)T
+LԢ[SpSS3.VYge{eyUD%jPD-jݢjj-jդj}j-jݦ
+Oՠ5QjWU\-#
+U]M-qU^/,We2Uz]oWp˭ JXLm|eJS% Z'4Oh4Ui(KDMkIJUTJV5AlU%eMPkUhJ ^Cb҄яU&Hͪh5ujekLmcN!-V![&W(&*wUuzc
+M_JTpD@X*5S O8AX0'+4U r*ereAYc̜\euΠ,h@kEGDU z*j4)'*\nːU9^nKGq&?1I*qO J%Ͻt97/5M1Cp(|$NfB By,:%MtQ>gNg҇8g(N:$D'(>{E$Υ[?g foT?͌m$%;҆ ,*Kb,NRUIdJFM6JCnMAi, ׶K"2 Y HOq_,?oݳ~[w?˺_T#?9}?~?}盷:u{w[_ޞ.]qk]/~ooUM-~닳(.>N/˵?_WcC[mۻg7)]-ߞq߼7jn{.+״<zSn~?gw7o;YC~V/{7{Fnjm6ygsGn/=OЪ=r/6]|wwqwfOW|4hwo8u Kw=z ] Ʈe4oyr;--.׌ayGcݼ=;?_ozF%7ߞnpÓ_o]Y4T^־/\|M{ko;۱#֞[{_iT/|sno'f{vܛͽ-,ۛ{gghmЦ0s16i֛|/Ϳ"̷;֐5GBwwo_8m`7=N]^
+wV>3۷t8]9;<nx
+̶ٍbxe3gyn~_/}~ӏo6
+m b f[tgXzMo9R
+V`H̶o%lvvsͻž{[úIf [ 1OА._ʆحnȚ+!Co).ؾۋm_;!OM>`N͘%ղ'O5sNw>'}e|ў!Cȏ}>!Cȕ&Cڇw;xNַ?~~5m
+6lή'7һ߲//o5?|~x\m{RwkVQݬmNmt[<Ұr>|7Q;O7|<77?^j{ovx69.K۶wm \\[Sv|37M\>OyyA[lOy)١)N~=?3DGE{1i_רlZ 0 rc<{oSko罀F6ɉCo6{o294bzx'wA/ԳLwöxa94l994 1"m|5M./zz΅{g;c[=|lIٶ5rty޳sw=&D/S|_Ϡ~ўi.loG_B k]p?$ߐqwmn~ۍO۞h-: Oh l˨<NPadomiLSbZio_o7㥫EݢJSPd^j}ScXۖ]qjSckU\wjwjlﱻwjlNwjԀivweoao.c=:{8 cd3oɮ7]ܝf3{3|4wo]񞍊~W~`[vTxdG7WË9+?o)ϕ陱6=k =uѽS=Ё.z@2#>3 -7$dwժg۠MߞFocdž}y)J)ЪK|\3Fh=K|o=kso-po 7P|oּN|7vı-Gŷ.[|36hnX||d뭾y=vo, Hl#;ϑbgx aOy_Cy(gg7;v2*R?<=囅n~==x}NW?>{
+۾6j̮-ט;>f-?]ߑ9mOpOޖ9)ܛV<`07'麲u|ߣ7_?o~0Khm;2Ӿ;;M{ӳ6izAh P`lC񗍜Ocm
+e?j ~o
+GK-hyJ3^#vu_OA^)}OY߾77²?z&P1=15kRЯۗǎ~w/ZL|te&܉S7ڸUy37oz*sy7<-tKV܊ 6{1Qt!g_|7򛼍-q8 ឺ)Gܻ\WWr |1Q=vM
+V3.ųøh׵Ђ>`yVy*.mѸ|Qoܺ:]Єn<1ꅸ5n,Rq3{[!h8܈!3%ش ҝOGL[v-EY3J;mVJ}Btz}y[GǼ*O6}r||Oޏjy]w덿K.srۗ;[voQ7ʽ>7GD=6&^DMޗvJ=L?6ӻ7|O.]ݛW>?{PL56,IiNS Nz]N\f2ʭƮS[6]<N
+fgn)ho .j!zcG"tUk:i+/ ˝_iv'ڄؤxҿa: xj'oT蘚Lhm^9zAxb3ohySs.лU&S3r[^Cc7k\dbaf_Q/#Fڱ*'!}if=b;WRn`Cd4컱 WF{VTfB {%3*ZUFzWK>Rd]Rb{?&;fez,y smЃ КvPAF@Ȣ6Zv@䧁$'N_Ԅ-ZC^nC\E?i$)^3ӻN=XC%?з2fg<Vu6ꐝ S!ɒ\QtwU-|{x4(-]<be~6Ƽ~k_-q9))-ص]Q8xRq:kF葊zZ tCjg731H^%8h\SٸdGMvX\m=o#;8w.SvX?]zGt95wށ\\HXaJ"?.*nv#%&7b>ܕ͌ZGOQqrX(<"ĵsr0jlHY!\BnFq*)~j8QS1 D:I+m:qB{`6 ͧ@ݩabioU'=*Ŷ%'ePթ.WN8^8{қWya_fd_BXWu~WϤ)o:RPӔSk/-LhJ 9X
+ʜDD{vK3Pۚ4\IS^<T44_ Q|D_0x.ʍs1h<5,wi*5*8ZFĽ5ފFܰ?MČ6e7SB5}N'mb:"^-$DKM%.<!I->6ѣ~@,ng=Rpc~4uk'[y!m mt<66;hg0>'Heh H4;{ i.._@N dT E5+o \Э0 h Ows'9pXh_ K؞hD{@MVqq ml}W`Q%*~ǃD{V06&Z;@]Ml*zC[}=YM<>7w|<NsƵaߔQTP؞ME(4*Wi0ҝb'Yةn݊ n(wh'K*hH ;KKէ`Ɩ7NSjU r>b:8M]]!?B? !_GP;('d4
+ΰ-14V |Rls5c-B ^LtƷҐ;/i<0Na1ze=杍}yv'p<B;򀃔]B$ nktH>P~zb/ɉ?~όqؼM]ѹ8 qF=QA7^X3?n!KX{fo\ޭTP80<4&uj:f͆]װ`&n6m
+Q 6JXMhv`, ݺe*it.!&o跸:RH~BbGJ4^^tUvejqgP|sJ|ze NxwH._rJq{%-oQ3Qg^tTB+ݢ%Ψc;;7FE1%co2?Ӹ7bK{V,k$jp$tm˥([%[:Jܚǜj\g*B\MVD2Nz qzGmCF'74AlZ9<vA?9@90pz gq$g^w׍y |M!ܜx7Dܜ +RSn}unN[>*+W1:k{;pdISɒY5la
+CCL01liRn5uKȮĖǯb=XK804 Wĝ%y'Mu|hS͇k8#aKţ<@MywJQ}jɠnR=ݠޏ|AsQyT _m:UdNܫ\$I3P*_ZQ]N 841Hl~|zH^+QYX]HZ%e.Nn;`l/={-Rw9xJ띑%ڬT ^O
+%}|גOر <Kā@cIqEJxa]|X9TphGLťwkxƆN{r$ݜ~[B%ɉڏ)olo5NS*>A!y 2$?YZO)a+rG(Nޘ|0P-p'ôL*0J#+`M-0`@@aEcѬ])O.ajIp8+x,mdsnMb(v/f7g9|:,xbUeӊ Մ;/^>lz{rܚW$n2'T[+N
+w]JͲU$+W9DwA)G
+W-;wV;Q!n[^޶릛V2-!
+ho6PFdjk${-U808@uXR @*o83djVVgoձ:n?}n| !-xr?Fa:vkn0ҨN&D2g.T$I]2I3Ny9ɼKry^{_vpZ?Hӝ=Uʮg
+8j bkV Ȇ2]%.=Vxn]HzF Ģl/F^ь(kWH . {WI TI[ Ĥh#6d+K{dMs fGT,VlaiN.%BNXƓDTt8kd41#>Ȍɔ{`Ng^>LHJ>3ҍHgۂ//L1Y'$"4H!)?jTi銟U#mchzt6DGUOMx\ÁX3
+l `U;Kyϗor֤WG516 s+
+W6rMep_Y2`H<na1'9p (H^t3S*0iiyzLf`xSd߄dKʁNxƖ% ,mX/>Q]-/8UT[ǐҖ-Fa"W|H@ʭix\0x-i[mT m꽜.5 X~* >yV/HXDm(xv+<x.W`n;+p2ʘȢ
+)')2':\Y
+cqJG1j& Uٍ9GƸNƸe>؄lKRJH*pp[DOL]cl3jR:VBܹIe-l(ހDϷ}
+f"!W?9Gۺ
+trTP{z#Y~Ѥ7=tSw5\F0#UoEʞ;=[+l'q\^k::Nbb9xL?s
+=<@2{GRVCъ
+  J WW4-/$ZX5H!?n 7[#wȳE&
+#  |;z?+keF{v':rwp@z^`eaI(>PѡS ]|l3 xIKM GZB ٹ~J3C'1)Q=.H)c ;;ށ]zo !XNdt#J;x*
+5.=٢ny<y$~OZVidOW#NА`iB12q0O^yݮhS9,{l״kr靗 8|]ܾWO6K_XjƦk+g8~ˏܖzpV.xQE'
+M"ע wPxHZhh;:܀= 4\.áK6-EǃOp$11.J;+#68=G2|W89YJQ'YzGSm6ͮ
+_Ў
+;qtjæV쎠*YEg#{A>*:ڭM "̑.y):C߉F>xNY#~C܇T|AVNƀ AzӺ4 T‰
+
+T:CX^5P8 x:xFv Q!8(~_F
+ȋhO;Q;˒K7z"2+܀("8M0 WEL|cB0cENYn2oBu25`Fv,-֧#Q2ʈOD5RݜK826чW4NYty1X rK @uLYB
+c`WL67a`
+n 쩴Yq,-W㩕H/sJvi8Z wĂ\I Xh}>LXW(^W MTOHIcg^?q+W-cyڌ_C%~&'ր;&D fM+4z,`oyxvS%%νkzQ#BYIWAXߵaq_:Nd$Ċ/[ԙt+nHf07C)#6-XT!- o =}t n; Bhl+ÄåӦ՝>O PtN>N! Z8|)ģms
+B1aQSЙwXˮe0.xE
+L v'!S1>,),L@.Y1u
+n̶@O(C]|̙6Nh[fgksac #;,0g}I%X2-gڎJk2WԾ)نi]@bdFp6#e!hz֍==RI9Fd9N{Za]~ܓ)eZWiM`@-#$NL6
+ɑ=OI-߰wfba
+>J^F~L::{7'4Jb;߹HW'
+UZ1nB5P,fӂ-i*I8O髤-S#˩Z+`_ ʼ0>ۣظh'vQ53꩝j.w}'|s={=q&j~viѨ`
+2 PCqIYMD3qM#T@b8Iz̖<g1ضA!^3k]wAӅS!Ig,x%bبzI_eF6(-)8;+`2ypdɜٵ*))߂a41ᤍG_$>nCTdY
+\wY htyr 7/yrDXl0huj 3R矹߿YW!Ƽʼt/jV>{J S:}wj;]&O2oڼ⏪yw~OIqٜ.G?n%4=
+½4IbM.hcI/q~Ӟ,^.H"
+gѪj1T٤r|<h5358cނ;Y
+-H»1[1"]+Ԙp/ȯke0$^!l9–1;Ja} 8|]#oq@@!Oksi.Z'S%
+ldvYF\092K/ } bQ{]N0;Pb-̮`HHu .<\iY
+`$h~XyfՍ򷨳WIܝV1_#4aY&P!J#eZt!
+OA=pvy0b Q3^yjOv\5\mhK5ZV*D-H!s\cL $
+/lwO5 p;%9#FJ%k H&aPB">1zfPN~%
+Ձk
+:.51
+{<ˁ%K!ȭ◚4Љ`
+6nTgfPb ~-J3b${OʜGM dy#^Mh>aɞTVWBDfӀDcO2  ?N+2`$Q>X%56@ƶD]s`gbˌD~´~z// G {*~B%996-MZÌ]/aPad&Ζl\\a"- ڡdP TL֍c&NFc$?{7w{L hf)./^8:-r01,ll%bv:JevrEqZNTg!j
+6`\KN+~gL]^]E^3oޡ-psG 8>І"v6)xt n#8mTTZ`:'V⣋7c-*U.;ϝ[X61>疬58+,zpӫ674",9@ϢU%PHbe'4yh3j
+A+FM|@I-ڵ%V` wO@ex/&u/)Wv㹻i3buR *=4|Nxxl%$NFv؜{JXP#P;$SK`)434 >H]KVIIGw6[Ŋ2H$ HՑLK95AKa/Tg#KVt]\Spx`jԑ&!鳬8NVKwK{`;X֤ZؿfU&&Gxee*9t@4aTnC<
+b
+!4+Α`i*{1B
+.‰'X) ׮%>EpTI%Oj*<ȣ4gZ@8afuiQSX'pKucПO'܉/C|\ũD٥NRs
+橢<
+J|ЂA6
+:\#F`$,Ꮕr @_#C0:.v H} "2ل[NxsbAY(ر}'l
+eQTLxV'hCx& s68Nr-Ex9oTH h!x?"uxPXIkǸ h@vg+GZH J?%[a
+ mrhСoe|'n_UD1K
+DהJ( ,JcsQFGIܒ~n0 /)A rW>Kj*χ{X0(T \bƢ8H\"T@FUs&}xU>8T8q',t[B -YMsd1?cK;+YۚMqgaOm)w+jIO<dĦ>${ciDFѽbBQ 
+ypG)ZT 󬃃
+@$݇tvM\xyò1uĭt*%( ј {'"JiHZh]
+ϊQx_#)y!UĤh*uNA?ȴOhvBc$dRM&/j&./'4%z}"
+Vi׉qH
+V
+WY[QcH\xCQӌ@ppS}\.^V!spw-B&!31<Xy(\k&2oe
+nQV,NzijEzjS>I@`%3N J-" +iQ-D, ^1 eUry7,.n
+g:Y$~"DE+!b)u.]gcI%쾆"!
+d,=V"YMN*uZ :#فlaquQG"J-*Hbo$sTyYcsYb%v8Bq2Y>@N{*>"
+~\,H03|'()@sA4tIn5,Ao<!iX`{ 4 شR6"F];j
+R."jRJFP)lDU M +x`?C'{@>pǸFLԳL),JHFBOW*UPXz:Srx!kH
+F dF(vX6܎nw8$
+F2$X\/T]0C2MOmѡ1ryFRece
+ 1qZt8&hjJy%' Փ |{0N8#];#I-pqJ8XFc7+4viCIƋ>NVmW0#ڴP!@x4 FFq24
++OIn 0Zbdv-T|^AЭhiehQΌnhNemJ%Bѓ%Ho`J0v (iy#11 Xa&&*.v 0Pz)
+c+4R5s stctz]i='Bˮ#gz`03K;b:e; [9j%&phg."K.N2 %R9L^ՀXG(%~v>z
+3NJJkaS cl}]ބa0c9wن3ka D<Np;]T2d)hdi2 p
+pKcܭ-Tv!~RH4"[@ $ycX;L
+тRMPBb09:V裲@6"wS~4 wϜ_R˛=Bj6[ Q9><nM
+eH$c1"d;ؾ8Q0jאCDCw 3!K'AJ"4J ܁ t#5d;njE&$+F!1]ήc3Jp"c D =L`'f+Nw)fI+$+S0+
+i:KC\r;]PSIP2w-8
+tKJ]Hm"/@a0%}&&pezR/ +b[|+C`NhOmc5 I.G3$\Ј!ݕ;hմ`xRFzпQG᠄P5bB-Rdd0y:(O¢9(  n%Ah"q5;eCkpYRM1=`6u$*hxl@)tq
+:'leOyͱyȄ19\6"~^D]XlA1bFN0
+Ǭ
+ͅ'*AI^:cb!
+I€{h5йG2m@ÿ cN19Q%к-;#6Mm2N/D48|[Syb*D88T- b*iY94Myiܰft@W2⯡-Nq B7D`2&'Hi#bEk uC
+y؛iw`KnR.e -Ik8d\m̕a6O͎ C2irEʠjN4q6Y
+
+$X0=B,t [bҧ vHAc#Σoq@`Ls$0`n c1GDa!p#C$ _C]BDG,֦>W`:d'lt@ (.i 7.7|_yQJ
+d@CLI@?,1L Oq֎f-j&iW44Bc9#\ٔ%]GMc#^|8Dxx7b<j_M<y:Y/xr(If.Hyr:CX eÓ
+UgC?
+
+G.h,; 8zv Hgoh<z0Mr+Ƌ\l$ʆ,9%^+z.a{E΢E#"Tְ;:b
+5)u0H= LT8
+@&U[hBC<I
+wIL]fr7[hDHS{ Ҽ
+p,nq,Sv#e&ѷ12ؒ. 2W 9t d
+"`&YplnJoFwG)VǤ mDܐZ_@ L8SI:br$m
+gQ!ᦩ&Rw=
+%xj{KU , '4LH[Wr,R?RBcI`-/r
+L@b ,ϮF<!4Z޸xTCo)@^q* ӅQ5Yx}$(dCUy.BOh @S
+dPBg(Cjt/;|UHǐk(A$9uLoW:|G[?9IhJKk0v!|4($ nH+[ai|Rc`%'rd_CH`2Bdj5NfvϖI"5/Pr @kX&CVf2!j;ʉrHE^y)=*1QHqIAVcɺFNtXdu!
+
+BMDAP 7&^8QkkV!P4:F@GK; qƴ%hv55ٞ]Ka14-3
+j\
+ڙX4!µ
+'`<&#"g}7<-Ulv-I&5.G,,@`
+!)q3wY<rӜư@
+MgG+|vdPƫqɣ iIx-k/ )dxp-L9FD=\q8a;Ŷ
+HlK j"<%D'I !ȁXD
+
+mqҶf2E΂h%LYHuįf h0gFgl8b%1#+pDg;PbI2"OSs.Ę١,|. y*(Dj5"uoya%Y
+Ă@uvP yC(AtK/b aӏcL<xP,gS xGJI^ kIGc8:u
+m`!b1#!LdNV  QO8 -0S4‚ @>!.ro~>0x"`eJ2K%Mdt E|!h`FO?F#
+[><
+|yDx#9 s6¨M`/ptOrJ2df30Y8¨@+R)? (QC2SLAC&̖RBBr"O!)6H&i:(
+J'$n, JWtxm( T%hJ9P0HH.Ζx+ `#dmO2' 6"q
+A(R`ʡM;c5 +b R[%{:Bwٕh5D
+GCH\$$H<C:r4gPd1
+QtnS!3) Լ͏M&d,BlpC˝&$A4B @\'pxR i2&b%dP(PP"a&)!.i
+%GL[S&(8AQ|/&g)7(/r 'cϘt(%1Aq0Eф85mׇ ꅹ}[BАWR"I
+!BpB&N_efpapzȦTڒ$!ieS)*InPcQ&|
+IL
+  n1L7YS|J5ъZa㔍)LFȕIۖ_rP֔&2(O!A
+EC`8c(-
+2ج <i:pkEY5M2+ g/$qvm 6
+KHH^,ì(ج X.'}#9S#s‚il$vJY'<IW2Kz7I]8;yqƙz
+R8&n*:ˆv~#zQ qs6 ̀/оߢTq8Mw
+':a7gY={L[$t LM8 5EiCb5 hR)W'y4Xe]mcMx:3C\ ,vWgֱJ0E,IM;#wHNb{6 7!G*Nui<7$+`F`$DQ%
+CM.{
+7OP.y#Eh%)5 puy#S
+KFV@+i#CЖ݆ryPGU[$68gخLkj>~ lKJ $@2*@9/sz}i8`lԾ@uSj9a '̣v Kbn :Q%"eJCF􅤗f endstream endobj 23 0 obj <</Length 65536>>stream
+t˖!.0ןe>lr (@GSk$v`{Jz tF0o[w_iqL}(ӦȕlRh#gmC-8: /PyOH]E}
+sh:CO ݎ'ay({ !;@i(̥EB''_<_J<$/3 sԗGffBnG ` ;9W<M-M$h׀ jK&mH WH tBaod~E
+Ioh,[@a`Xz5$"-wiMET%+ Vc!
+hbLs,U@ :+%Δ%SLONKK
+APi|#`A :s dA=ꛈ 詿a.;)v@`b{BB+>E;$9R9sAeǘCMGb[IӇtY[Ա`m
+{T!ڀ01P
+`Xbiq $ȓDC+|'+@Hl@Sdz$bm$8CY(?lKGy
+w @QQEѵ(͏<ڞM6d~S3ݰNӠ@# !lǎW'5a69tMS;
+l=$ .J<̀!C<YcOh +&S+B §x4̨Ad:|YN"ԊG/nAPXPBC)LANPNP3ٛ8%BIr
+]'DNaopf>bzb 3 $FtI#>a}L0xmSFAb<*1(e+)[tauu(,ښ :h<clRxm"!4 F!‚@-S`$ # ՉaL
+Θ!+_gL%kEBurh+!CȤD8?tNxځSGNdJ ED@p '_X&5ZxQ 0|WbV$%0Xiv9T(! v A}҃ ´m|ȉH&$ۻaJx7
+oB6.WE
+7ㅈi*Bc>J{#YGY]Da]k*739NH9\FAe3 o .z\|!1bķBpjHg8%RL3Vԙ0t,nsŊI](ҁ:+nM88rEul q)-i##Xs䉪@6@}M0O[8<ɬhJ3ɘ[?h~b
+,M]#ݮoV ص j^$; a!($Â2:)NuB+ѱ*aH,G'3i,
+7>c A"ƇPUC QܾzǮ]al]k #,*+tQ\ 5 | t;@\I6M^+NP[Onѳa8ř΄N%!/%˒!Pד/lPgv*՜dgߔtt@:71A{cQh4Y eVAs:ċ$(f3Ɍz%IiFѾSxnZ8 ]R豂nb|rO3bAI(ջB6P{%?u>b ,{yy~iqi^ _\F?NەDZN=Z{Kx^S (.qS/@Ə\d0Š70}K{KHce23u$ڳ=^編ą+Ot|SfeMҫYO~z132ch 3314]+I_S٤k`#`ԥ+Ҕ2}4h@/w-viqPFZ#o1tPDbu"  HaAkn=(hBJfOiltӊwFQGD׭JZ,:Yfvt o2r&
+!LT'F2՜Ͷ&v2J7Ð0@ᙇl
+-݄0!7 CTl=<^`1_]3xFL\8?D3@0ّG,u$}0"`P1)pu %豀L2#z1^Qu &A,> 9$ТSwLhZE&mQC(9ѧ5ˬdN
+%!(X/\^c@`C
+47ƶPĠ0[s0\ڱELֱ։jڃhQ@P4%&cfVQ D_(7Ei'pJ{|K~ǚ DdMw_lh1XzHF%Y
+@ĥ@-iD?Vh;fṭݢ4@^S%j1~~a Y&.buS,d9Gt‡$,pQh @@6 H)PZJ
+5(*qiN]ʎѵ!`':Shq4uGsaό披L6g#R-~~bPdFĝ!tS'ěkʝD!z+JLt,$% V"e7809]@<lb3RqLwVy=6/̈~u
+R$Uf)0|K=Ԍ/Z &Bc9S
+h)2 ];ichd~T@  \n+xmU|f(ISע&J"f#L5&0t_!rMٛ@MqKL`sTPEV[ &.}iU7;ެ{qˈ>Yǭ2|Jw̲tEG J"Sr6 ^%*;75qdzke!:DFVI`ך~f `o's3%$O(:~L6jZej=-Ǿ
+L6M:S3\7 6E2k(P$1(!-nz ^f{$hj0gضl"2[5[oa"h)L[jajh~)b+^!91,?nhjtk/T*;+_Io4hӼFmѮ@VUGJ(x[f_{BcEqR]1u=I`hdDA؂aQ{蒃, 5%Yzz.f$p"kͲ6ĺB (LjNГ;5D]P$EOkLO\d
+a`FD`M4SJsx:58(f1)B9d aHiӰ؂ ]_M3{G@Y
+C&7)00X+|CWshpѫpq͜%=#3EOӶ *.ߘ
+SFꌧaCp|ng Y~؈6)5
+O nb69&<I96fD
+X*:6 |1wvEgo>q>3X)Wb~NH
+ a%
+5l]*- 8K_~$azr]@;uUK{`Yo]"z- \tiR`4 C}t3z[G2F-8fWKS>9FIةP,xA+yNhw*\i]
+ߥpgTX8]*KW
+R\TY=SydmW_@pةt-2yyJhʥ}9ZKU_i>Xr\u\\^nWʻjz4T{I)&4)vnQw{>ۈ()$P~+SkZx6~2a%Tb緌{wDR="^}~|r1xhG!};ee=:}e+TU3|-K_?XirRXu=z<~_=RG|Jz@0%3JM)6xcWz??-<<ךkOVFc{Z7!=K}|aZt'duh'
+U}q2PKU=L&S v@[hQ|yUջYFoۨ=YBcA~jU uݞ~g)wGaԁ =>y ]/K#(A[n#b׆PX5ɍr?e^((pr^I_':9rP('JI]壒' J'4@',dlrxͭLѻ?%xOXSBU %caX||q&ZKԐVlE9&~ZMHmt;>F-MӕW/P鰢U>
+MEdl{-r~o7m7/Cmϙ+&!Xf
+0ϓ3\CnDxԆ).E5vӉXh@hN J.z].Q{:Y/PT_YLJ:X綞D4^-?^{W}hHeck4n榞o$M_TjLlGyЮe[7Pd), WN~K_?扥zm27Ӱި/6٣z~|y'GQ.,z}1ScZMPJS}Wv/njur 9_2El㗝":m_x4?a&<w$<6<l0 @gcGn0aD!#;ƎF7vsGZ5پ㯙";EƎ׌Nc7v6xxa}ǿ{r}G?<zW<_{߷yES$eH;W7yM6w8@ COض݇w-fdLzFvE~Ĕ}Gض޷x/<9sox[}jF&%FaF` 3p![~tG`40r_>Σo}?n[[=By F"}ǫFMN7yD?/Fzt/ #`&'@~@7Yo>zO޾8Eם"}kFM_Nˇ۷|-6{X@<02] ?4 7N_6O϶x}h揾&!¡Z-/>tGhv
+Gi;}Gvݣվc^㯙";EWA{N俷waZW?:nM'3mT-{Rﭪo󿔑V)"aAw T ˲h3=ie^dE_aUcNB" c\if7͚)ooW?|+ds/ JIkm7 ?X)2ZF(l!r_-ӠU+jxӨW˰J㦴&n&)ۃfHn]C\2g
+rcSTΟrۧNOŅC5v
+C?T3wCW1Qge[d|.SUUZ'.[٘dW&
+鵵]C W? M}tau m\o]qݪn괱\a%p篠'o*A=)€uڗago'E+a-STjb|FtnP4z6S_kYu UkF\޵ZdU{=q''S/Vp:,]xB[ByRhRW̔sQ )U~G7muنB9_謁U6ʏtZҝVDR+kuHƟ]\jmmx-95~|rbOƧ?qs9*BgUոYDΩZs*J' mzibEuQ|) T3gz_z-W^jO^~W_Xjm5~(:ݿvܯ4Xl6݃BZln b9O#zewNЈ5fx~-\*k %ەnM.oI)^ȫ)u԰|2~sZ,ƾe
+1gUϪ@L6\r,_,E̎b~I~0~X(>曯UUF~K YeVlB'; ĆkZBxT4TTlma[k6?U\T[ul녪)xMjGXZUݞm
+O*ҧ͚QGm_/;]f[z? Y/0;Ha͹1cb)V-3N|>l֍3u'BMm}k\kVYkcxحn|<hsۧ&?j[
+Vmҹ:ͩ[k:zRYS7zۚE<#އnTѓVHece|\GW5iVmnf&&m."-i;^ժV[ٜll/U3N6]tzr&O4* 9 ^zN{mv/-_7~χTnqᶌs݋zFtZU|΋l*A~v߯G'75wvoGhQs/. Pt ۫VtW ګyx]oZyպk5'ZWh^|V{5֛՜/uZnkaS;$Q):qbb@o! vv0}nva;żqBSDݖ"?HTn\oTz[n<o]Վp./|QjpӐ~/]Wx6fﱕ-3;`uL̟UK i7;)q.7$k5\IT-xKtG/V%#/fZiJ|>܆׏ӉesRVcC< jby<?V+{W(jԉ:_ռ:6R_է!U@(?Q[RoE{,:{MD5?.s+MM|ck=a>B溘qT>۫:>y8U$3O-N?}]@G4埰J7?yԋ쯾[XoC{G5&fJ/}
+9F%U(ӱRQ~c<?_j[JCN|U=A屖/&߯.,WjScn
+ۦ@ϝF_n %BR_[|uC34kx^W6
+@۾
+'UlЈ\VoU|IUq=?fu>N*8'^u]xXyx WIͪ)E/3H?5z'Ҧ~vJFFvc;r{um7nZ Z㺒Y:u=͝m~4cJH*gbW{D ~KՍk9Vtĭfn-bl;[bŞxjF kwՂB.QKhE_ǽXqfۈր-8XBknryn5Vc5)>fnJ5[\nz^OV#_פIDyM J5u̳R~jQK4XKnc+Zs̯%4^ aܥ^(=3ќL |>{qk͚OZk|-p1I0 NPC/gZ_qi)jmoKtc=; F0)4K븎uIbpk3&z>}p7O`[Y+瞻VsJ/-h'q JB&{ Li_
+%Ņ=gP8xsj3hmcGMʯg- zv{۵UuV:)s;,V?xQݤ:fd:/ܗn2ЫܞsĶ~/visɾ&u߹nZGMV[El۱2J}j&՗J|X- hs_ZQB
+(Jb^Ko=?~JjM],\(&|X>>DدMgJr)竏zsYtIgm攃|q5Pz4_[[Ǥ'jbu[#qӔX,:C[]سrC-?i8* vC㙭
+Id%CBnB 6"D󦗻L,ӝ]wG܃2T{ugI-zan|eVk))
+0ix.GFOTæH"vgeK->Q~_*mtj5y4Fh4o{9ٚI^^SZ[͢fQI#Plr/wéO쥏Ց989^\Z9+ڙkS ;[O388~88a/OE:j{k,~\Y˯W~׭]SSl\-/^S?K7ǥuky=ˁ=SϺ{\WwO26rzf~Xx51=ZN?$kVz*S6͑Mñy_nyfid/uvbÞiUkƜ4ֶ׮gn{GTG~YR1 j&Ṡ+f澾_^j⻓]0%ǾvSǽ?9SCFtltrͮ לeT/̦=}^z_ۧ3h\gƾC4+TjTaN~Tcd|4=>?YfOVtxo7R*utkKg+ɽ`h%:zaz-38}031=e`xlۜ-mV=cxۨ'G;Fa{x_}MNl|[8MN66f7#'Ѽ70|R~|>~}r6Zڸ;}%8|_^6tm$;vz8SBaI~rxvYro_Lep$kl6}]:ÕN~v棝|sYo7w˫wNa_4{<}0t{f_v+Rl .W+]r{PM}|W7=rfҩ`Y^Nva3J:[p7NF{فRqcq!x>|(?n&v>N^_~81Y_I}[ϟOwTY4]pڼܗN Q0:HqlǛsWPw|8 ;pmhaanh|?9g?Y֧/>o^&' 33jO2粞8X4&OR0]V+Wf6kG҃|[/Lǯ'#{wͳ?y{o6r;Íܻ3>[1?y.?-.xk8c#Gû Gg ~:._8XӉ]=;<89{\r_6Akes:/\lO/SBvajK=ܹs5~[g^ȭ|'gWRfn}v;n.ﶌn
+cO7rTxuw[*}JRҝ;7O*\)\<>V+jߟűw`70<T
+gU~x6?9\ݑOQ˳so㙏ći`l|##ɍ;}jӻ-̉i.&㉕0!g>r}8ݹ/Fv&*G/0q_f>N0? +#Sik8]x89~913]=Zm|vQJenahx]n%5v,L//vEoxpp=X9XPZ8_\Y*-#ߒ'Ӂᵇ^ld<q3ql.pm;)lnӑ͓͋ݏμ{u7}7;?-x˃enm'GͲW>^Kz/'Ԕ}X>Km/O|x<^>og{cLnEfY\u7GjYg}$[_s_
+N.f|7nnwOo7;88[؝)~?qߞ؞L'žW+Mo-VKՏs彏Ax\'kǥj?~PCU=|.gq6#{߇N2J,>dG\Ku/WGj6μݙqsfiy<9Z6*?<~~7o&?N9<&gJr$5!5۷0\59xgmݖ=u8tkߛڧMw^ѽ~f/[]= & Ap>6>5=;:όMK{3+ّySpt8)~^_sc[s_o3|q{XXM w_-++K+g;5%6*+}q%wY[ٗcmo} \YVw7
+K[ [ NZ޾$/vJ_vObmZ+ ŃyzP_}p/9Ll]{~䰺>uWߗƇbGr`uf(ur<=N\WkKwSWͺ1[v쯙:8O93~8?d=*޺F>%?frW~roG~)S},|2+[ߝUꃛFNǬ6?gGOn׮Fֶ?kFԷvZI,[/݉dyvrQ>|n˻:[;87>Py㴱vƼ `Z_>;z3~0f'2̬sWʑJlϦ]cm§ϙ`n˚ݙ_Lg7/åjQPj:t6X\ػ<̩rm9|w7պ+NmeGkW\u!kN\} ̣Z8wz15;|8j}q]:md6ׂ/nn'KlW/V&v/C#/Iwuy4~.OVӣi\Y}<gjCkΖӗk]j*PX\u}}~:{:Fgzatl^?M?VJ5kli&ʎ]&sBlubrdkyZY;Z΄g_VOg}t.G
+٣Py|xw~;_}{tt֒:|n|9}VNM>^>o _Wk ɇtJbkFy~yyǽ]tyy⾓=n־ ߴsrzۻ畹3配#ot+k;[J?X7\Ŭ/\7sGk۟ݏҕ[S+ɍG^a6rGcՋٍߪp4{D~i8Sy3LO-[H_ o oL˖/챗
+1w'wx;<8;7֯L{i-ml[_c{ilJ~08^8;~qR:8&ɞT=ׇSs}@3Www_חo7#ߦGln_w٭~<>[/YtzsxqǃsU3Mc뫛wM\g//җ`nݚ sӕuag`x=Y9|n+x5yq5cd.uo=غ~t9|y𸞺Yn8K_?L<ׂ֭`= 0sbe|T9Xv]bndzM}1<}2ߐ~\T򥰤t
+BxM}HIDtV,Xۓ/6xFTtV=)w+Ntwm+
+#2C쀶.XP͢;跢ɷEdYf[WR?TkV"^vG wUHFо.?1^.Ϫ]ޅiD]Y |M½KZ }iP պl#1BtpE:E}ԛZ ǫrk|#m6e]_;?DZ{%5 ?vPA>4.yeV=3٫gJ+j"s9W ICVjk;]`$,Fch *2ߗQ~$ZIRWH˥;3e
+dVEjPޣEF@s͛fvձuRƒͫy-r Ptamֶk֥&q\{9:}|%<AUogZLuA,s?hh@e%2K%=@<HG;W=&#4ƃ>ꆲjSW e5s !Yy3Qo?hm= Kepe[FWD'ءfyE,^U3)9*U}$^;ͭڗ8ZΕ Vdw{ig.jDK知]umn ~J=[HܒX[Ϻm VnQE~дVmjߕiF`Qc%sT>2Zm-nj=B-|C'ޮ'dk:&2yQ M? GPrנehƛHvjOԇo tW|U[ws
+hWm]&dgBBurݓJ"н%hkԎ^H5W|ukDS*iF)+B4i\ڵ٩]1<:YVTwy5]?$
+adI1'"4C~7%X,F#4Px i$y"mmU%rXn=bL$ d  Om׭)5kZ[&m,=}UNz6!v:)e9LVZ"%yCq[9/ljUO/ѡ]2~jpdc4 Lǫ/[e޺ݳ0Ȇ{Xݧ[ԘM !;6{D
+wRef#;Y#Ӽ[1 rFS#Ѱk:Z֧ƭV3@>B
+[exķHbD89(JҴSd~#4;Áϐ ;bhHȶFTծmjֶA0fmlOGLkawO6&22aʯƜSǟ з
+J&jA=/a q<Nl
+<;{m/ꡱ\Ԩ"\n:>ח`<kx1W+m;`OYtʐTcޚ>ʦT?UӶQ9X|FJHg_hy~'͖qd5y983xˉ`BZi-tp2Fz_{dٌvjqUy$ٓ'
+~wW})|yBaq|YTňO:`=KM+YgcrjъV1X5@gu^Ge[QKmd*Yx&7g˕~4lpr+һnʑ3x/ŰҨMٯ=?.DDKVۻ\([UWm)} lӏj}vhQ[Α W@\>a>]f!)3I`](K.re8]yl f
+x\jXR$kRʹFȁ0zտ 9K0cɝv.@Ay!|&@ԮBV3G=Ă>C;u6t֬鵪bB,H6yn1}NB{-S`W5K0 u[ՀeytYXCƣp|?k6`|`?"R=Eӽ&q]B[g!r>cRT+vn >hDV/N!yxfTztMix%5Te2K _p*ٌV?]fO/v7c<poyu{P`*j9r+kߋS$ R`;<աhb5"*h\rR}dy0W.Ҭ]+.RɽnR4^{9. j7_r
+b_dт`%atػbJ3¦ڸË]WtW؎&1巳n^uxmX&Quۚ'OΦp|6eQLy)}m ,VQ`PD/y#zp2UMD2O2 vNƘ9QWKςQʚeKqs
+v D#+\a]jʨam!+n,{J"'1ϰG~Wܓm!BA2slʋ.w+&[Z&WFT&$Q}
+oLo-*x_9S\oViFȣGK)e
+:!jٓz!k ɩ8H"{zuQk: 'M! ~5c9)GOyX7!PٕZ piqrv(/?hBhEZ LBKʰ}x ,8P3רlx`zhVu 5W{ԛ>R-siV( DGx'ZŖǶtci{VBzP%g`KzNfZa55Zfk8#r
+Yx
+uKS:H78='h%xU Ȥ-VJWV{--ȯjU|Ez(y&}Wbήϸ؈7ލMӫm۾$QnzI++<j\ވ'ߙ7K-S9U~/b'"ޒTa
+%y,}Z9 ͸N[(utg5gT-izH [11`S$JF6%2pZk69̻Q!u!x[yq^#a6( )!ڱ YIOfLә*7:s"&rT{qxªրL_-é<}d3Xl͸|g)@!l@0 v4ފ>"?ӏZ+ 9IS[]7b7{١*xݔKk
+hНMw7~@ƺaڥ<dzѾ/~S4 c!u oJy0yz ֏JވZ>L|vزI!ܽD=9?/o.PdL%[Zl`'Gtm tmj^ޝ/a6`*~}=aEʖz,N7Zz>@ g 367RJlǧ_Z>F1*^TZCc!M{+{ԯޚhґ@yf!4 jd׉2W<&tw:jp -*58yT - {_Y*1q=}O~J =e,ZyaEyr:sw2 8jUb}5ӊev#Q|Uhi5/TFQnT_Sֶ.FϒaMJ`V[3Ҕ_JOKC}CkΣC@U|ڏF~7FbR+^f#C2
+ל=[9LⱩN":Kί**
+V^qwT}nTSoCOMPoE/)f%7ÀZ/6r6/DC8}bM /Ӛ5dKzć{inVvtU^_wm=UeH\%i=9a&65-_գ˯!? >HWl>IG
+E\!vHsVZ0NK+Mճ並j K.c;c !֧ljw >2MCOŎ_Degω7X?h଼Ѱs*MË(f6/&|G`8-VoN˭GMԕhUR0{!#?سט6zԔ~F0xf[߬%;^ \{E:LA?B7xT|xo=vɹEX c|nmf>zem t7n>x|'@y$ ak, }@ ie[!w*t
+<߲E7BzdLg}++&L΁9{K4FYصT:ⅷXHfDj2/'ܚASmh񎈏ęK
+l$Q8t;p(}#P4 xW N.2vr(®Xm5\9Ã)gM^OL]u;RJ )~^o#`FPޜ+9I:}]XX2!pCJ}O?4n&MYoyj(8 #6M\Sj61t&HqUvx &7ZB35&KX_Kf-moNiw4+ueM}೩ٸvGwPe[z͝@PB+O]9eP3 `>S ;_i09^]H'j Ck;f[eL@&=uo i\;|(qz]"}ks31TQR|prM\ѨleB ^ ݥS7Jx.˽Sإ;Tܟ
+tV6(EWM7VA'Zhr|^4bBm uՓ4'/d{
+/v%˪4ݹrbZ3^bj"ʂiVlWآK6|3MF˳d'6`g>hF!}DlB;gؚ+!y'oQSvm#aiőhO~ϙ$k~lYW0jk<{r?NQmU$qb&vg:4X"Sn\|lug}WMU&to
+U)ω[M .C Gڬ7EF.ʤ~'4j9jDcm̼tѻ;#!0,hO{Nΰ4d\7. osW,w?mͭ&z9wfͮ<c|^LD-崙/fflwjsשܑxCYH4,VqTfk &l\ޣhz3 b8hyW;)VDQjjPNL YyQtmnF_64Z؞n7e4x
+ZIδv7D=0@O8>gv⋟-%Dخ
+ֱWl'Mv#
+IO'>7c2HW8ݚ
+f:&2~]|2woV7
+k<Wz(}:6Y i^ff -r.m8hn)E%+X@X鋤\?v XߙXJkST MagKgR.ۜjH^bn*J E1aH#߼=a9t6q:{,žɛR=]ʭE"p9;E}mV"%ӓ8Օ<6BwsP:h7+\Cߡ΄ 6@ za.8::)ƣ4j3*nzkkֳP'a]u@#wmYM{ζ=rkx'Gs"f<n^?<̺LuR@.~{v4v%).]ӹ:3jYA#i` Rdh uz~ATA]udWSYK>XT7Zb>@tӖL<61U^nŽ hqv4*G
+ p<|mx "]?[nJҎu.P~Rf45Hϔ5~5nm[_@G ޘW4h~"cxhķG<ЖqyS+M#Q _}(n6E/WSm,m݋srSCʻ]roJ(::.R Fw穏syckN^4S+"cZZ&s]CRTM-=kjaz}Gۺs)8rui3= {(j䫊QX3ۊG5pJ/ߚz"/F8泹na{/:z_;MW&x=JsE<I;8KqՅ4\HFT-&G Yv]@s]_{ dI&cfESӺSuZX]̊'^nWޘ5r ^{ X>ix SrۯW7 r<׷puvq2=mZfr{y\"
+ '(nJ^Ԭegmi3.%C4+; RC/춻s@׌pw-Z;hWzش9sBE!c\@Ï?נU你x?lw3&]_"#žxe.ZB}-==!?O# )s_ӍzR$6Fu߭#},Iܯc\yNP{pgG\Vs
+\24z^ [\:IyMrxbcxhzU )4YJ )*V:2 `6+@q[Ӥ"?KTڪ,Iя֌<L:}MVx~ѕ 9k 'ܺѵďkβ|Qs֑^<Wli6[02izhW<xVBꭹu~=9w2u7Ҁ[w3k|YПѼXRjTsE9+7]ȨQq+rinM%xN
+}ѱ_3qK feQE|qE:" Ec"JYG$eJt"-HMx:Kq/IŢՌq!,ٔBRVm)MrT뒗& gH9/q %x+l9<K|!i)rvl\1xOwjKߠK@OZe+.LcZyRyKfoNGkH0q4]YVc3ݼ}1ǣ3,n1Q3DmEXF<5fE)2CLq|d Xrs۲8/.RUO€ 9gP>1Ij9gj~P-*ߜneuZs7>,"3>WYr;t'S
+qS֩un ;4Y7IҮR֬͝MA㬒w ZKϐH}#'ȷn3޿u
+)%b`-ՁքvƝ.>U$}L'կkdvsf xp]$>AP(v'WLQ7'
+rjh|׻wn:uD.}2:̘kPw\!NRL۟,
+<ƯWM*W&d ||=Q3RJ
+Pn6g
+7CQ_Sg^@ڽ`"B^4̸<{i!NҥB<;UNL[EBA(YOD/רY[ әP16`pGNcډcX0?s9/rdN03W۾4J'ߌٜ3Wx#~TuakCF>>r+Yh& lrjj . :q$y#pԁQmܝ({ӼiUJO
+Ɓ+4Vc!*^'lz>dW};N+S\L W9aܟ 0<i2)i?@6^&MQ.ꁬNatCм3 eI8RWD6,/3%yĕOMy& NM
+JЋW-룉ݖrBŎ
+1Qjjat % b}?1;@w WZUctRc3 P<A-.'Jt>D]hh
+$\8˂)P#$;( Ͱ5g:~VLgoiM*'kI|Ts^g
+7*4f{4PsQS6C񡶰Hv*rs0mک,.Qqoy7Z Yk"ٮ}Un"d3=<?@/u#__T&]N 9,?C [MɫA|AQ@o7.  z^T>Wt~lLGa
+\$ÝC/':ha Zdw~N؏_Mnt94ZK1
+d.K7qWn*|uQq [jE&]h &9l@fRӄ Ҡ1V$O5`*"pvN46
+d`R(ڨ;8
+=fE. >ʶ3jТ0E=l}-QHYeȠNQzO =Ÿ…L}*<cS7GF(!n_~hY8NGz ~Hdwo4<B2>`KDg uN_sݿ˨4)8K25ջmlvl^P.%of,3}LʩbxN`ţ[õCh@JEU뷀6Zѣ}OKR A0Βb
+*D,j*o.zV] wϢQP 䯻֩<֭oos*D҅N`(8@GJc(h kK=yE2P *:-sګH8\oJ}];Ї
+4Je5MAWnHwe
+6y |zDZu`S+M~$~/ñ?y)c:ISoMtW^9gȢm`9-uF./j.$\vp[΁9B?aNe1ۈYt\7s|YXKbmz>n)YrJӷ"Գg(Ѓ
+&ou) ^eq@KJ!lZz5]裋(ݧwwG:
+,{;q+JMF܀tu:#^ Dye],Y7n~O*>`J>q0c(L1ka6O]QmV EawҾOBRmC笀];)؊;^f]8$f0@e^:ݟ3c$cR"*Rrs¬5ٔ+w;v*`ة_F\ܫ/|g &1,)mm1t@J3NYX!_jX} i3;sN+y-ޜ}xqb g@D?@|&F{xʆzDemeaKxd1i_kc5/*%רpP]w tWT0ͼLʗJ)zS˹.bV8;֥zsIa /O22Y3*}]D-&VE?/rµ7u`sNae.`pl3SאpW3eT-ªNySt.OڭN#=2>ϞOpn?Bg
+*@VZ@0dk{M/ ̢<CTzȗ6.<ࢎnhN
+8].t$2(Viӕ#z%Ҽa e՞/.c
+qH78 ۂ(Ogͥ2(
+&\|M#ps`Z3U1̯e{;h3L3&> 0\3:]Kܳ ҳpT0tt/]yle9dՅ`:z!JooN\7 u7=TB5w^>W˯SwhBlP׭>(Zd,(֣E&(0o'J x9}V7&˔*0F
+6l[@
+9
+౵1R-Ӎ"^.3KCNL|5IAuUJ2ٺoؙq*E4@@5oe+līW5UϽ7"1^qSf^q1e,.\8\ KIQ2;ssSͺSS%e1Nd6*d#\Eڠ[ܻww{@y+OYU朹+tP)e ZsK)9ftާ1'OJ)*vJpg|T>!Ŗ'Al'HY][K #2^c%JlT\d^K{*4y-d?Zͤ
+U}/9#FQJ2*j>F\N
+3fcAG ;1)v@HJ_a^urI.)%25&陁Gi@̠guSZ?]`?;
+&4w
+
+r`2ư%7 ë
+QWg|)$d'Ij;]eɞ:ܙʢ tnqeQYIG//25֮H*S3(.Z-FMr-&vpG0 8,KPFb6Ɵz_65L_YS^׺Bo)qR߅n-ҥKcR*W^_wZz:DyLYi%=[M(o'7>h FLnz3)[!`ǹgPkL~<!\YC7 G 8͹9XBM{JQ1uAث5kKkc"Ϳ;.3cXVu(#ĕtagt#m `eS鍹rRűTI)@#ƿh'w2^i橅V.݌&ȷZXe/1m6
+gK+'{]^/X| uAjqq~f҆4?"qn&Yn7 -wJDTNG؍=W?MkfԎZ}
+#g;׋/YrA&X=za򵽮;) ˀ)}_!&ߪ5Y?4G:hQ-W >?U.Q[E1TgO7꾙ټX&Guwx߶mhW=w2=rB}yzwSw~)y RδMXHݨ
+!S&i8 p jh"fnO#xr=
+Yą%ݽZ9Y@qh-`٪)#Fwd:MRӶ[oz-U(tOpx/3y9u*?)7Xr!١7ӻr({ęNU 3( <Oͮ9*L.i-3
+5|;ENjD\@U{/ω5exZD,=> QoXl5"'ǹYVo>*}Dx%VnЖ,ǎzbrWho?U8πS!>Z0d3X^=Bc+)ʪqfQ2"Ӛ6sYJ-N8JCnPawD &aZg[>,&H jnZF/nfPEwY.nzoPk?L=m*T^0Ԕw:jEiOҌr!ko{LP3ȣo vяS?T_^ ڇF2//gЦGmgkUPjpqIumC`e pA2~ŸE;D~}g<tR#e
+}[^mkRg j˼wĈ+@~#&' ?_p~ vn{+/@t>Vt?Ab.Xݹߜ:"\3:
+nEx>"bBcc/q
+ҕWv+5ihq%!z.u'3T4/2gcrYo>k&4Veh;[񲴌eLz&W| /nIX6nG`2p)[ZTnd;.{:8QTkӑE?:y Ӿt{ƿ |6x
+{䠾#]]F W[j@I re Iـ~3d^<:銃kJa&5yaTRY ȁFrR۪fef:n ;]e-J jZɦSo:Un%d]@Nz/ >z궞/L!SmQ_Ji}e˧M+-7@
+t0/<7X?]Yҷn{5f'o4>OE)bTH FXY˙Q9@C`MU:
+DŻI^_y}pݗrn%|oel TO*-ʛW'9Ukz9HЙsԋK<Vhqi g4G^3LURYxuΙLj/%[K:C'\tuk6,F뗤ۡHsfKGDr *=m%ߜ4_~ mu/H[ +u[N6˭`3#Q9І3RO]X-ר&U=-_KD'%d7vH9V`NsZc)>%Av<n­X,iyPީ]]]ѽӣI3Q\pM#3X R3(&)nK&>NUk"G,㳕SW[Bw1`ZSsNo'pw5VGFu;xPكׄWGưJs(o/{+X @Τ^\<=w+H?UVpwg(Tw'hwiHOP RrInT}&䱹Zhp^o_/)mQ*d73MM"^1kE=ܣY̲gA㨤b+{ͶEN}>]0 C(-P#?Z?@gu]j;o{>
+%TՌ 9%cNNdAξzMb>bNtu (
+ũO<\ oֆ6b4|1Eq,!6<R鸦N|/XԉS%PcyٕcM %qАR~WkW|+~dm%@&Wo\%S_0A1ZkDfDEiqҸpbl^tb˔
+`*[w&pZˎj/ٵVA˷?u<G顾7z {hN6aY.I~ IQ_*Czl_-{Gģ
+6-|n
+-wIY_J=[?^R䉟%l?12#Z(:-wT\ \G U܌w?dhުpJaQ[5=vyXF^^lylʮ' Ԥ41Ѷv%&sK1RrZ@8Tk8uWf19ʪ4~HZ"& e<W(_5/ܿʅ d \Z}3]+ؙ3i13t)Taʒ0cEOK/ƚgՇlJw%)] eÛ R܌K_ FkX:Zrcg|.@OB$2,.ǻŷkdcrgƙ-4+8L׃k]k&=5@;L~{9
+\f9@`2oh!OE&1rp_Tm3v=rig1mU̜vʏ!WQm WӃjM|flM$bóUyg`6A?$頾{bIݭAY)x6vc'ܕn`;SOe3A2p9g;_Bs%
+F.αAo pu{? f:l5z)_qb'vg<hVڜ`]hD, 9?R6򝴐z:5.d"%D(mkh|b ?*eon0? eh! =-f0"&kOɌY pQI#Waz"S' z;Gn;g\uȉoj-VZ{2Oy MK;_Cz^L9tJm2^W݀W.4i1I[oK˽` nyWj{~y9xn$4ѕ،ZN92:9=Khhp c/ז͗ʁa/hx*_, }ퟛ
+(CDg=8tq<<z 64LE_C~3ش԰hY}uǚQ0΁)?^(wS`|M^aIF꼯5 ArںUZw!t}l>X)ZJFAVfK̝&?f)9^*!F9N}gU
+yUUSl*]M
+Q;Mfaڮ|~rBz;woZ7>^JnlU3|
+gb #wptb_PpJ;?,0CZEQ<Ig{Q7"Ey*y u=L+QS$>n}G~Hl-HX\ګu'{w^XR(1,96c=aWxu)T= |*GcwE;׺Mt+cpjq>FjKgy(*%8-v1d^}n«LΆ\!}[ڍ+\cql2-nhɎpUI
+STޜ5is^Ud|lg4ۿEt6mFW-Uǽ@3Xϸ}v7mg|e\x mdгDRAZ2_~*sEE`@xWgZr
+{/P[ VK*QKDcg 3- Pa0%Za_
+G;bZ.hݗOqHZ²`|Cv֔:P2KlϔD J_F៘i!oɔ8_g)D"?uT6t@kY[9+8 <>.'<^s-^X7-RybbU9JsK_Vbexd)aٻ3agҟHX)t=N?0Sz篰V,2 +;]&؞gudVrmں ܃_N.k)<ʈ}E,n:9MtD,9'GlQGV잹h5O `~WZՈƸF"E\CeGͼӤQK]cĩ 19t5IdbZly[43ouŢ`T[>}]5<"u$[]ͷ7"ԨgK5<,UY#DF־o0B䨯`;[7khJq+<
+gJ۵[AQ5&]W^
+pD˜@ 0G _Zfzo< "tkxfxdzVTP4X^ar}*<^6u`}ҍ+#6Qnޠ6i7}FlfS<}Vy=CY[:1ӈФt
+Ӯ&5%9{@|NEb;.
+BV~>.*u\W?x䢎GBwm9kΝ$:qk
+3-"\
+D=3XywL0ě^|/QRrub
+ӡ=vfQF->JD,4U74xP y)WhZиu=u 춆m 8|*Qًj q<J4߬<۹+۲N`=|H
+/ک$cS p@^Y;"?ܻ&52|:cJ!ndu}Ӌu_i 'ɜZ͛s#>3U4r-&u-Wr[f1,dJ4GWO W:3,NQ
+tJې%b|ft56CR&ܥk:R J/-p
+.;.U+l^cAay``?3>Wa?desܝxicգqzC.OkkMJ#^
+oɟ# N?4n.2-!ߌ}RM!M۟L%g$9Cč40&{:@{h7D<ՠCı]׽44sKFBW[ 2c
+VoSh"VH*ے <rf)˝Oњ!pPVv!tkDOXݸ!gq4D# m]/ؓ19Ŷ8&V8]ibP=I/8g`l}/?!M31}݈z,_g*܏_7㘞%~6X٘s }K
+UuIv7(խal' ČhKcHkUIqSMsIsS i1>bn֍Ϳ'.T7IϏz 8AT8cD"d%z0nT:w~o@%o]OBU#nk4FoQe>A
+!R<~9yh Woet2 J`G;Uurr)x-awk8(TUُMNS6>\n>ʏS4]2'𺚸cgX@
+n/`
+v:N-xXWڮ'u[ ,"!cc+if*ե
+4Mt-c8`Am\{;U۝n?^t8Y_:
+5ߟ6 -2T{ٷ[_6{5[|TȜ[~*|f`+P-wg fR~m6|68
+ .ZX*
+ָ@k/,S 5%Vp= R)X2ݝ*Ug"rѫLO즵&fk8VPs[Ί[iLi$Ȣ4/U3P`veZePa1xͯ%Ba]diD6*` efK3<fzKIf(UϣCW[WOߔ']4Dž9zu }%;ZN -5 7Oni;u{%<]$}lwfkfYrn{N:[}ZXCdTfߊ^&gdZƃhgh)M\o̢iz?]@]Z,tsLoTb=<덼7elp߹y !D) g_3ҮNӸ0zQa}fr{ViPSqO.UW.q_d@ 0tE>qxJB>VVsx뽠d˥bFR-J}.D:U#`,_rZꄢ}<uKo@Qh755zw-m!`tnM̴pv5"Yeri %O%X bL+w^ rVpÂTNgxql;GBf÷t՚lsM SyV=M3S%7 zvٛR{- fE6P=@C’sX
+'kI 5Q(P/P&1PAǔu{`"\]oi/ԑzg~U'l2_3dQЉӋ]^%
+>_({K
+/(^.f5m9_׊#Ge!0@|Fi#I}x4tGY!,uvak.1q֥ "d.4E=kj0g0R7L7*UU-sW{XhV͒ѺKPʌIdǯC"16`9>ꡗ7 (Ua|Y+
+`ui~|wTlnMtR+nn-b;5osd5YT^$TqMk!uRA&ywD-$1杊ү5P^,w;sgm^G^j|iְҙkj@0:\U?{7cկ'K+mnKǎOɖ*}uq:$0ۆZl<5t]I)h:fIHYDrf<]@Tu:Ўf3T >y#r/qY ZpuXNt|t2+IY55#zPAn곗+ Zsۮe.2YWa Squ`(5Oߡ: \{ֵ̍ƒ֥({8i$s.M",Ϫn.@ D)BgOe~~*WkRΰGNl[)N_x%Zxۺ7JMj[*/|''q-TSYU
+G2?A2>|5?qvD@&:~s\غ{f7Iy]Ay?nƸ km{PTyGC<2ӘAZMOL/l1\ĘocA 1ֆ"s9o.U3temT+oSi-lŭBIx} UdRA37ւk=
+,XbK}*Q\|/:sZ95oPj:2/؛n,
+&eF]^x0Wj^2Y^=m-%} )FR_ڼPEz. Jvg.Zm4|`RF~p%GTxWɘ 7M +VޑXǏR(s~uRU8u
+JS~EV>䟂V]޽们*7mO7?
+Y;fZwގ*Vz15RtKRpxSºfɟLtn5gAaU[:(tw\L.*šJ{vRyp|jʛ[n^!uTS܇ 4ek0`7ო ؋lcEP<tzݒ$ȲPV<; Ζ/ٝǞRz"Nec~2'>Qsa0?ɽg]\yVNæ:=`sUu1e2<t
+xLeN6ء0 <2uZ#O-UNﶵ7fmm4%#g)Bͭ*qC~{%Lc\b2 H{^3uSx "SM
+".D:W֜ZBPW8{ etn8G(Yc4(ճQC|\-ͣ;zYZ- 6d\MJ,]"g|7ڕ@-DFs:mC+۵s @-H>iłإKPdAnZh kfw_@qhpvEտJ*%5
+]Z
+>ɔ+ĈHLq0F
+͒zT鹗jL`/}sƱcE
+1;.<!ѓ%=WwMGM 2Gww2lϲ+31}xa +&kylAz^)IczSN^~i挪ckNIuL=-X}2-RY+Dҥ}yvJ:'2:5cWHG8ٽof T*~ZÞ*oM<sWqT#" ܫ`Z Tjf^ρnTKIrF>>6dzXf*M(P endstream endobj 24 0 obj <</Length 65536>>stream
+ϹQ6ytdWClmsbĕi*Ա*F<Fɬ**$CDneh^)Lhf9(vM_^E=׳y_/H= nDDh^_27{ToU.Ϸr\՟iCԵ7o{K_W-M}x~}~AΖzBnf4nr\@ap,VM$(Lj{O\/'
+=Fٟ\+Uw1R"^7P[74+juP ^ Z6^P'<*bZ6=2{Ie&BF!~ĶNi<Z<h1)1t0C^n[Ɠ H
+;Mss+vqnW(n94F^4hH@cz᜷/;ƣϔTDzAοܭC}ՠ׸=6Y:@]Ͽ<JE
+kz%عUf ͎Y XT8Y/7Sm?%Ξi!} ǧy <{}6ԙ8VgFtF8 mw^Ӫ}F:{:AiWoG')$<dF;8-_p8c_%UMmtfвkes|]eȟ)yLEpD9)Jq (Q B*Z܆b/]yћcӑf
+(: ?YXA /M^η6:H}VR>6 @b8vW]ST1:o<~yAjX})f ͙?PccCb ƨb*=
+{]F֯}I`eә- D|yi쵍W3+\|2;3|djux ?1ҟ3˃IZL] |)%r >:tǿD\[v6ZekG6jT:4-'|t֤nhJ/H!U*=u˞RoImء%A‰}p|4d(gmp.T ԪU
+h]t*zwyn ?MVOrAWhQx-[<\VaZKIe+Kqf
+Z4bVӔWFft~QgV(hg)+a>.qJ<wdPazJQqT_)l_kTln6V |xQatuf{йMxe_zDvw=?:d[fJaAӽ~rߩ"{at:4]>pi>}н&q"I¨|<jA74s$Gw6:Zzzt)/}:+N[\Z=4yqPQqwY/1V_ܝ=F2z.7+dc7^j.Kẙے{5so(ۻ$rz[j *zbujF x(*HZ`5d}YOEݬZtQj"\hAiM +\,jwcvwQG»;]ƻEZ Q WmhJtNqpkuߧo;v.-gQpwu s{KtFst)ˊc1Km
+ypj*ӂx~7JF8 \|p'o32Hu/47U,ΪQsdN׫e}<~0UZ}+{N i8z}wX}:?hpb\8pZW>|Z3(l/ܰ_McA!B$7WnB 8y?ڙR"G,|y2Zc"Ec._<
+͡,3 AWFǷUtXJSVX/eyґ(y%޹&u<ACz6gJƊ_j&<e)ACi_6g#KFMIhX=P.WN9xCGn"jJW;0e|Ǖ.gRW
+"磁LNqcL7&6^귎ҘEKaݙ#Ԏ7Hy0WR^}^TLm;t 0]xө
+uʤVwlȿ鰤AI^OG]šU(&de{sޣ|b51ѕSyۿvLXyzbO}чcixLxWl
+/N]w܃З&cQ$4ZRĺѱgE.(A3/*Zϖ[䧹t[2Tp} K 芨;A9W '߮bŋY Ѷ3Bѡ>
+1ՓUՑz9܍C*%mD6ʝ#~F]*}65 yxkMf oflu[L[W3WRw596X
+3T
+=LyR!jZ7:nDnSf+e3z nqG57$Ryqr?̬2ƂU@#4gvZ2xE7!XjCƜ .ŗ+wwl"}1(9 kf/\kPOFyFjs|5] <ƻc7gU{bױz9s;[kvɭ$6wr [FVo
+eR/{wxӬvzvFB0m`>(n߸I`wv%J<eZ65YbߍFLesqb*˽K
+V+n50B@K7 "n+RIL}XtR^iUnwsV[tZK4"Mz ȱ4YX{yP'Ѷ(.BہܓX <F\M BrVOHEԐQ$>% V;< mtEZzԪ
+\Tkqyg]OJjROmBK29Tڱn}UO;n<o_ĄZϣt/X>/SR/^Q9`4טbl@`K'vU5) QJ81~TާyqV/{y"ZЭ-fyx5FѤkc6޲;h6QFCkRkԀS{:~N5HyCˢ1l@Z!.zsU_ŇwO rDo$-=4mͱ69fr.}IWe`"m8e6ў8_+-HNNO|0qP= `0Ău*keI/Ke`? Kgq<uMGaT>'*AEB8y.z  84e+n8_:Qs9UYD
+*U@ eȸ\K]A*yy?$oi\e"P~m'꾂AyPDX%l(=pT7ui;0&ݧ6W&B,Ez!e?|؅ [wOm짻J·FtZz"vMj,|D[y3ʱkQ^Jӹoʹeأ.MTmA6gmNRi2}'m4UC!KooxpDթ̳1Ϋ6pА#:#^p|ij|^+7ZqWJl%{ް78h)qbK-%c JZYeac]{]}[~=Xo _,(38A,˄y)V󻦹't;Ǯ22ǼB޹-By0luěOpMQ:oN5pjeVKRS8sZZfszߔi̫mzAq2aiW-:`a+Z>MR^:3ɐw=ݬyPy:Qo,YRh.ǹk#"ٮafV7{Ɯ{\7|^[*`:A\l+b..n٘% ߞ1ǶݘAm[:PIϯE\0ПRrz|̎3s+ǶzmĻFd'?ka>%<{Lja]KKt?˞^NkRxqR!88){<tb#K
+r<+<^퐪v욦|q"
+cSrUU끜ϔ)Sv֨vK$f
+\ S䧍>RҒH3I.//XLŝ1$J-fQlKБs*hӧڡaPCk6:u%h]鈂`#EC@<$Yp!iUab{+⯕tE8X\;iЗ<I6ҧJ:O_>]o󄜍}]/x599e$gd$?A\| Ū҉E0z{i gJi,OY@
+vnOd8H3KU-#0`$HP@9Gs9ٽCߒSz5}@ۥC"\GLPe{|-kvl5 u1pL>naRRm[%6
+mzxyɮg-75Wͨwk$gFusro/ /]K.Z{ݹ mع&? ;SwxcX6\&Vċbao)#WQVVGOfi'vi!C=JP\uV[zӻ9)+H'ok߉xp26v9w֌/VxJHBlV]sҧ|y:+-FǫcO'k7Jqޡ4vIRh'y8sYhNoSFc|-WNw8n*]ܚ^SP-Hdzp}q1n,<Up-
+j+&4c
+g!'۟vP'۰h¦ #Dka-;`zS<jWkvf~k= @#ٖImńg>F|L:zI_<~R;syvXujF)"Twjq߻kϿ'kBI9^>bX⪿o/^R>#gXT[AƗp^h>x[hKJs-?z0OKZ6dʪ7k~5kxeUCHeL>)UW'-%&DoRIj?\L0Βi8eS= ZtWgT<|uxsA>d3Iu oPDϙX+MCktF5o}nBįd}nfzTuG15شUF苂':~Fu0jLvjdC S"9IrcPn crc{`|o&1v=ȓkjFNZiĻ}<"]VsZy Bٙm8l^;Yl[M_EEٱ,1o(VFO~m
+:ݙ{"|ׄ
+aƜSc
+YӪ
+M;dG1A.|fb 3`/iַ<:2s~'md:UfMt_5ʠ%pf~I_Ӛyq4;HZf -gM9VEJSAq `Οhm/yLIx "u-( %&P xˉA|O
+.F)[ߌ&S Ͷ셃Cx3r|y@߈U5>f6b7r_m6zt?FjwU>J0Jt̎ zTlK<@?2GiߨA4@p_EOmlM4qᨍOo+?7kוۨkCȴ4(/-k9TӴpV2@'fp/3RyԾs J6u Hɤn6' pP]\2d#ܐmk !i{q:3+# 'l͑C =GҶjWvAܽ9A%#Gun[{RM.S._&i`N1Fky~l_kv*Jp>W30NJrVV8+:H*zYQ
+AY0"n'-%F(;lyK̛|Ϊz#nc^~T*J OLxul$vLe4 㭬ZB m0,05-m.y3STM,?<޺5/
+:Ϫ5Ƴ5EJ r (i }ӺN6
+moBϕ97]Ժ)j{#c4epЪ$tfwj[+޷jy!0p ݹ[~Cb{3Y<NU$U؉\t V?@PW3AEkf٘ln#2᤺
+TV4* 55E=۸-z@$,vQr0ݳ oaJ~;v\Sog>F[շ!ϗ \N#=BjSW DieZiA "ܠ%y[xx!hvPQh#mZUq ud%"S[}{zf\z6 l\&/xTL.\&ɤ-LyThAw/ѸCn>S
+A}%9mz_Tu0F2kSkPO_Reg+Q5 ֝=MKjz7=%e6 G_EG˃ز#nTLvo֍jjxʳwg-Tͮͺ)MM\ Mj% F?tS]{61}z;حVyhopq66Nм>pړrh6A=gr-<rpS~_+@6-IڨtIM^Juq otz&K,aSUWCK<N<[aoփa\vcRV
+`)@giG=.667'[1i>A7>dBXuЬOگtkzkuC:5uKU5/\Qh8phFę?ۿW;m9AN&̉j~gj]z0w<g5?NCHfje6cݐv8n<zIW4.,%o# U#ɏ/ƐH@y_؛n4n@3گ:,w;p2̨4i=fha1/X¸J5*7c}5ytk7K N) [YCÃ,_4Ǚ
+ΒJ
+#:y>-`<! f_O\RRn{Ѻ{Ce~M^e\50w~ݔ?<@wuV-F>,>, 1k݋N u9}pDN+͡;(A\%N|!%7C= r;wwiZDYNh[ӱ0w%0r@
+GsLͲ{Z /\2}jۅz\ng/* ͪ~3anv?KC*jͥKRni`hIp\+b W@[?5b8q[TuUp>@J[r+}-
+YE=sS9{.O`Qb0칦}WkFIxv!\x+Rq]vN:?o${m9c_69ⰤtOJR)gJ8jGEΦg[qGq6wU$Lٶ:+R#ԉvR$f{_f#8ut']א^^hcrw VE$23󟪨gUdsئUIg٨\㐪h޸s5z<Cd+NEM^pB,\mAN>pMKjK<PDlFquu4ݒs573pGmJ٥klR !0̀~w} ٓҚmNxhih,9.oZ-aߦ<6y|. y' jVZ,oβϩxZ puZud^BoS1];E<۷5N/dmH O\ܭ
+<Sg9M'Wg0$!̯瘸Y[ 9C}0
+C_ק9ؔ0+ձ%1K!vDkRU!Z9CGDXK!vs%U4+Ǘ}g6AP1[Gaf;R/^e]
+.VM QowH@E1JzmHүmf]9]
+4NaxviϾϮsF"[gYTcJi<-n_IF; 9?N0AA>Lw|
+SnUDvGV?A_&:\m
+x떑7"pI+by H7  SnP[󫷂Zne]]= ?dM<>\dS}GM5=qW}0RYq&{,F>A
+a@v;|bXf3*;v:\z`Ю&.:3L{0bvEf n|7c鞸\>E9_"
+ՊUKLok)_UNE%C%摭(E\dmwѻd.(הeiɅd$x]5Q8~m{c$،-Htڠx: m&Jo>)=Gַx};6zi?zq~ (չ-J̏7ahڲUVMi%mx6?+¡-vk䚊1+u^nqaډ}K:ޔᐊ2 ag{ܨ*.#VAS=lAQ
+_R؅=rk}9=a&yLwZj_B6Xˏ ?@vPWk@4 WJ ~ʺ&9}S O'{*y
+mCC: $8{ZȐ)JVvgO~}
+j-J=*Av_ p#!ZR?'b:\?}2rF^W0: ݼ\N?Z2ٹM{;FVK)PKox2 =E XT+gY`e+ꩫvvK;u~B8ND2_2$7QNi9bꇙj
+kh=kL\7(vz?>L|;- g~J 5~3]Z{31>/45Λd,qo2[$Dfׯ}t!٬<0یvqPhysz)a+A&ӝ؜x4v(s4뱾⇜?YnK|`wmqWYR>tDgm5#qSDyr!ažQYMLk3ځohi$5j%=hj|4}L +5}؎~ָ'vY.Q5yHXOiQa`[O,q J;+ w;E; iM1U'!v\W@,Im5<;ewVcŸEw~7zfkKݭ V/`++jC{ ev\hwE{4+eIfsGV׫Zm浒ؕi:%^Wl6j.jxxxu
+Q&un>(miRFah3KǺaV "
+UL*'j? DjGۄބ_[J
+&[Nmu1c|_NGsV%TkFYeQqgAj0*pd"@,Y[|վmnPy\gcZs\vQ+ߺqnh-`*f]q: soJx4Sss3ӵF kP6 /9e,cd}\VE} cޒ5-Gq>d/n3֫bm,Zۼ #7ڔJ E&wn
+Rł/|@gd>aS˸-םnq[~4Xo?zN&u[`OW*\yĿ]Dže)O3"(&'D#}C&*p~X0fp)w.rgŖl5,
+z/;<C |
+;Y#;2a21굗P1+&9!p
+(PZK|?2g6:`VUГå kL
+U5Ȱ323
+lWD8xef3'}۩Ƕ:ʿGw.|!Ƙ{_l*ְ`-ﱇ .^Ϗy.] BNІ>?[/1WK8/r!Du^
+d9"_1
+O32{aU.Ls(wOx͖ R{:ǑFJϻA-zi;%L57"EouN 7Xm}.1j/?UX;$l*V5 E"O= CjoQ[WTK=iA %X\r]t[W,尹jVٰv_!`#!SjЗ-g 5Y}\BnGA^uۺn @ ~H3͸oĽܩkOEOMoU [(XE񱖿mfR#]ͳ//ŐMTc)4x9 uPjO[#Ʃf{3oZe6 @E93[YS NdTx|LJ5 u_4>,ðJt~IU|:Ri&J Ym>B+xTAtKҡv7;,5q;H2[(PyCXLo,u՟?Q-p֪Jb 8AfU#Fދh4DP5Q}Ke>* - W%eS>mWx mXJ!؂)k]fڸSiμPNi=0NU4>ۖk'SpU4]4b=_uV"HnJT5[^״ m-7[3AUϢ_:y>nao9<(#*@:ڥ'@TwV_2/UG>fKNnW"qF
+^4֊TwSz[sk sƾ$KքڬrejY0@܃w¤Ԫ X@WOc)'9,k&r!Y[e99* #Ůc+q[5=^m('?:w
+@oz:qטq=}n5U[ZU])¸y4ɷYb_F<a 0 a|/[yhvm] u[u}{S~Y{KOw#L4NTlypN*B>Bo׽Xd<QH+3M<^u:)*$.#}D&Z )CC16
+A4R:,mɏZ^aW(CZj &h{m-[ C0䜣sb@ӪZս_չ&E5Xۚ"72!Nn0}Se*
+"*Kwkm q]eSڅ`Cqzq762 iU7XJMow((2b2nW \.\B6%Iِ279s ef]*…1Ӝm/ u?O,MQ{(r߄F2ZUwG Twב<VMC!ε?h%kExjq?O+bQ|sZ^c6PD+tl{ܲ=1+wN+op-N9|ӞHt(Ӫ.b^
+Sy *;Ξk:Zښrrǻ^#zl;CQRcxY;AD5,CT(]Gg!eֿ<]= JL NەmޔcP۵ynlAON7f!F߅VGScD?w{3xڑ^磸vBܪH6]>]d;_.9{H)cgakx8O}ºPݱ_=V7Uhܞ>Z
+K]Y+uj4ztpǼݠC[<|@-VkK8׸swU|& BUj`b WZNξ"l#HzM툏p0uGy
+^.Jm-p򬽛~jVK៚ח3mWqCƵR;)PcSPG;YG|o:E>{vff=#xmm>cFU[db6x(WGS:O-OkX5+7ʉ}9jCOWwk:ET|k,sQ~x ^t`ϲxQǘ
+IJOQ\hUm6nîhg|S]:cWzuwmv;C^[-A.&y9
+3N:zj.^QZC5^9'&t \
+ tC͊^& 䚐CWs{{8眭mevU`}lwY܉3y[ , ?
+wa-|F\?"$3PL+5YZAU]a;SX!_AHXHm%Ne wzHo"]i::Eݹ U`
+Of~Nw/5٨y#/NGM*a:vƠƂw2mߚӒ}뺍u+Re(|K;zpմکkLUANϷ {x>uu`zM0uzv ƳiV!YuRy f18B{pEw΂X1\B1'6~1b|iŮDt5]ąJcG w sr?
+͎N[ssptlpJPkҽ+X;>rU}޷?f{N*1YThw"%+Wnw?}x*P/=Re?=Xȴ Zvv
+ג/Y2p Ddu;GHe8-q,.į Ko'8uƐf)ZgW\X~Kn>0;{tqbGg*ꔦ?l[|٫kX1Z#QAP[ОQO3cT}ܒc$qU u{l κ8"kZ3{
+t5UU8;%'Gj]W3Eqdb5TL^_``53[U>~?|@U7^
+f73ǔ=[6!fՍwqiώ=٬->`ZTиFz5kjE+'I8tghC¹KӖ[NX~,
+UW֮g{.h&1V0*!Q<-uӖkΪ/St|Z\wf ;Kn10e
+rŪ|?vWsV=M59cγp+Ak/JU]:[4$Xj{i;qV6OȮbp&O'q޸vVSr[9 Gꚰ1Z^r=<JU#оggIJ
+ S_` %l뎵'J.
+
+
+&K(rzy3o>UힷT3_EJ^V2KNmhOF^[T~ԕo[F_#rPhNPI0r
+J07[[xBHIYQթ>kV9{K^4o&7
+õ";MGS$ R6PbC0RE?2R_|XV F+Ѳ~}*@^cW"[[IԳIgz+ә_5`U5 R;{<30 k, SOD =Za1_؜8t_H%M٪{ӞͽUj6\lD褊*|ɴ9o[;2Y l)L>\퀽 +}*bbCعi}BQԆz٫M>խ@=֗=io3*tYO?M<E9bUg@@7+x"ThՙmcTk.mM #r np{OdyҬ"ku󺣉_8n^tOƨonK ot#=+]SS
+ǒf*ܞ r٪г16kls$U^4ӭk}oJJk-І%Aeph~oVt\z(.G+k;ɬ;@{LovL2"V/e{$2FSg
+`㓷iC1%j3͓#zF|rޡއX*&. ^a%<릻Yj,C6}X2Elw Ap_>'>K4
+m@>=
+Vǫ
+)LYm[N{;ꈗ8(aCaZOS.= 5+wq=6{*ʳ` q].1Q$TC#ՁFUUB/;I%ꔠ`Mls6uvN~ ouͯ=śyʓQd\QyоW4ϝ3bh'%)Ɏ|Wn^OCi#Zn/Vb:bn`%b^`̠T9&2<A^:2<}Jwak1+%~RiZ1fwjigHؽѼI3|Di3nOv] ı~#>b~wGp(ݱ9b(n˷z9 >Zrǂkk-p+jTўWV^o{&#T_hẘT4S6q*oB>W Yr;!{#7II \ 7.2+}HJLO
+ܣ[6OElW$AJ=}%*WXn5l[vl'wQqqィitq.s A\V#k.Ko O;& }-X8DeRLG&2kjNK|,]: aM>SݦE__0oL,N00FTFŊe~qw!KmP>[z{s}^^[̫yLaUh1Á^jp\jJZ@*\ >SI5LVIVm8{n,>0tͧÀ/-+Qv*5Zn΋<q*4
+K e>w"_kAg6+MK /b٣t
+6`{rLW^
+).m$.^q"?vh9㕼wLhSzH,Z'uLz_EMlTxL`7/@=5'mSYڋqն-d + "KB·bTu񒤚C]ωe s1
+pg@Jȴ{8 OdgW۹ֵ7,-@92YLS`^UN<mj&B_qJЎ^n=e$nveQ2X"ҋv
+l>d-SZ;L:¬߷•wQ+ k(rۈ0v̜S)KsW7|y>ڽɘ2w*MXպED&?d\n3Oߤ/oG^{oy0ʖ2X0[׋m9FW[a;tIt-R#핯5Qk.;b$9sv$,ډ:4Yj֭mH`>WLT
+ PJ':^ jS ]ѨNXeJ$ӹ3XVuYj2#}(koтFfd5^Te]&n&ݒ.OFc_nw]CmTr}qq搭kֻvE:^skMO[?(|T9D5ؠ0(:ݚ0x<0'Tקσbb{+Qv*,Ԏvw)YȭcfEcW]8dY,Τ<<oD:]zAR4 `eVcDLN99.ilc$V"3Rqs Eqt\~Vo;cj[ִ`ls<v-ML9Uh-}`iu)'UQpn/>cѣidt|]fJmAEѼUs
+@nW<GYf^hX&&EMMO`=fnt҃0ֿrғ+ (y50UY<"ǵzo;3sՇ PAbufI#bQFik•C1y۰Gh hcY
+#DTj^<K}04- 7@/0T&wpG::n
+vrBQD>7
+U9Ċ;ubHU,zX|yFs L_P%i܅F.
+ޝ/al URפ[<h۷|fSuUb fpJLYցKFjcLl=|6h!kgMMk SWoN dILWi4#(ϽQSs!J@
+Ss8 N"}M(lW]j2U>fޗw_}9.&oԕd"~}oڥuc]2" g~5V2k<
+ޞĺBBkPLâ\Pߎ/s6vT- Μ$,hO0{^
+H5
+SͼU+ٱKw#!5Uw-g;vb>&]L}l(L#Y;"Ajw^u:{v}^o~;G/hoH
+♲ǓVj2EO:C:^@i[}`CvNELRGT?
+BVJ6(u O<4%0vA23 [uU$CU@!Q \E
+TzO|@*{Y ufFγ= ^HߝM_J.U_<H`~Ox+;zEhc{nƽІgnN/RBr!/6mUɱMV{ T-b]rx quc+(pPs(kb;g~a[h}8L6F4i:Ic躚em]k_bT]܁F|~W]bߡpw2]`,xi }f)
+qk|Wa0PJy1#(Ȣc, G/o;ݠ[^K^{w謱\;\2WSTk)qoVIT moֺ]MAA]|8`jeUhlQ$@kj>3kQ=/G6=x5K}*e`c0&hJw8qϓc"&Vсvزf mCc2d3@]pC[q
+́?;IV&Y:
+<<XlP^֔:/OP}=-L0u_| [(q
+ߎ])l+m!7/ءЧAlVg.Aۻ&@Z\TK f+F>ϬNT]ڌdA3tTRvdŋw~VW'{, E9vѹuiGnc"_Y=29y2]Ωl3SsB*xC(]vo^}/P;.=<U5Dq]}/?%RM Ez\gP5JaZr#n'cdңw =ymHGv-Y»&ZS'{7WWcW2[@;5g 88Jw.='gp3V~SƎ-XڳugnfoW]I ̾Qt;qZN`#N8ftP-gMBlBQ-ۿqC3/Uz'|ŧ
+Usk+5rgM3mH4Q'֖B}8#iY#_.M[=C <qۧ+D??U" 3Xu/JfD@: (C˜5F$|Lj7~wCl\yw5OVwb8\l9cc񺧍Ufs6Ǣ95e0pAs<g:/q;_/{oHH .=+z׻՛< 0|TUeÝ}R<-ԴW(=>bcrlp4zP,f L# je3[1QnmU~Sݡ#l0Qso}e5dwjb2'sp_N~]y&3g
+6<ӻ 䝎dy+^n7
+#Qh
+WG>
+4?
+fXB_*y{WU>e,b>XzG?Lr,&?7u,)7Xf*+y{~iخUbuAߦit^&ZFU-Sv=???`*~WԎ=*>8pu;_
+QL:r¯^ɸ6DtxC'<g߁[*}
+e*y&Z ts!< ]S h/<FsZ lv}6^ͳ0Yk?Am%)h3|֭̃<?ʁ:vo <kP44a92A;_[z0 m~pknEHyďgB]|~N+2fv9|ؑPlVocf ȶ~WcRf!bO~*c\cW)vaHg;
+O&[~A
+eӝ/e(-CC6ud#C;̙avpzUup-Pgz|e%S|1NRniDapޗz~]gu~2N
+Ng%=>_J:ڳ1hß<˫ =2a7uשguեnA{9?:gNjQKfr/4naqȧg
+wZ+D
+gZ\~"G~0;0]y'?9.s\O'~.wZZt@gʳg* Y9}ʇ2ERfsؼfzLE+H'%;7{rk7uz
+N?]/V,9<#;AXӟ ?Ӡ@u@Ղ)-;ɪmuokNLTs^CR8 λ,+'/uk
+v>LltAn>Fh \&2GeAu|ݼCƿퟩ1\Jul
+. j=j :x8u5x*UVK;J<E7
+hio'zIV2*<E-0NnKcj yBݙN*,㎯Ok6|+f;8*ϹV5qlztk+۵5_:dٶ w2j- q9 ~6q׎vY[dĂ$K!ֳ_$qȏhr'>@Rn֪
+@pFP\i, xVd#&01BsXU@߂B\C\\JX\u.2gB6oSzw&]1'sڦQqJ[#K*s,I](?UG{-yoԴ؋$y|y%a_aeFhDãڋ昂<n2F~0&,87&xBvAL6ղ_03OD
+kߏJWZK`J)f*QU܅5&ŵ_ K?5ͅ>so WT]seou_-0JxAX{Wըyj0di p0},\kʆEwc15#5=,2
+Y'ʁ}p=A*lGkc<`dz
+VeGP=@gA#^2\DW%h=hK̐&gӜ<or7}eSŹg9?^=gy%kC4ҞH
+f2<gkp 
+3;
+~/j(5;>yTz!1~h쓍8;ʵcN3VWdCli&a#gW 3/ĵ= X\ǣ'
+ٳA9tE+#nNm^f=u#-B3
+)5QXV[? Y_.A}#Ї\\OgD.P( f}NjM7!_VL8+x_ 鸋qxgIlł_^3 DYNt\_ڣ? .ik-;]y'BR dX%yF\;s̝Y:&D3 X=j5uga 3$z)ש&cp=5cU/RVhPk6`B;sK$Zp:-*c 2b=
+)x9Z-ݐ ə k7u.7 h꿟;gI~brefYl>WK3:e:iJ+9g\sDE +y}q \dt]l} b`jtf#4 @.Zgjh3{MZUmUu9%YmTe-g=1lV*N 粆w`8!5f`=u. $lWMÀhs25œ.%sibZjD).;.(0E+
+B,qC͓8-ta4~C\5_Df~9<uo(G˽K5E,|\Hސ-vQLs@ۧ~[v
+md"mW{'bUnX]OMX|2*qSJ6f%߸/L}ME 5 W|SV7l龖ҰZ86=WVLsӎ'#kY4lն  Ž/ԬotG9i}kv=Eu W^KFR[I+r^8X~Q^9i2]IטtK$?hT"xg: ʩ}T>#^\m>nپ(O Hzk^, :,w68tGR7kȵݯߒ>{r\ON\z+U{3D':j7[<%^:,_/)&<qd$b~ZcYmK'^ES9ciN>'/t<~/^1̏)(i; Lj*6b$SwHH:I܎PTIu H@y6@,=_G䅸ͻR¨pR|Yrڷ _BB,Ck ,r#(mɜD[1x$%}Vw /ͯ7Rh\/uvЮ@.[>@~_@FP$7+)JVCsF̧%Q5'[:WXY2U\a6?!\qWɯ.]ݸ9V>`TYd.qB"cvBLwL0"rF-h\6zk\UcD ׮3e\bi7zz|b)xfD;_dGAﲵ5Yȏ (ݒy%[G mcͯʉu~I@9akСRFRߑgܝ
+Dgj_]ySR\Ӟ_hwMG}!]
+DO䳽S}t[ضcg+h'p*JmTY}'LI/C&AvmiL2
+ˈT4S̫!Z6n/cu34fd۰Y
+) 6w9nݹ$b 㛬΄v-l;Ã
+;<z?4EZٰoay IŦ̲ư?->|yp"8~0?|x"v^A=0H@Vg+0.Ǖq\!"HΓ\^;V/D6[ݎ:;
+D%[3!n烕 $Nӱpǂ#EMQ/N?oh&&74f˹ˁD_ fNM~ڿV̀q4&\@.z,ns8sq\XJG,?ΑK}$+9  !/iy z"/E<8~gu<uFrK:Ɔ5_E X)ۦ}}#+ߒD+8E ~zzQyD6Vȑ/
+rFnK<Gņ Tp\<MI8gVӇB- bF_"塸"H
+w! `tlT+^v3-Qr68&\Z1ӎVcM=w ٌaUES>)ЕY
+ _?{Z߾שmF76 WT˄ wrexkŨ/:^W`jQZ H+K4Mk#Y
+Qyt4tH5WZkSr?njhmPq thL ԢQckcgO4 Dg#5z\򷇠wY5p5=_>Z󕓴LI.{]f?cJfahI|e|Uաo!G|殓}~ҟ{-C4c~s0^XFZ^hTGُDZMKGUZCmC)Ci-&4$oەp7 kC+"
+C?zK-M#\yף^+1O@~b"Y`#ڏY[eZ7$ʺ}wr/WET}ۈX }K@
+T%
+D%=|rk> FWqiL9]EaSnAX'YY`/嚰z* {a^imֺ%8~l?O
+)`њԻ K_H@qfj3ϋ8ɸF۸
+gK2Cu rv@2O$ 3øXn\(j.lKaq^ S# „.3!EJHĜv?VTRR:gyЙ:3zL;L?LW譃
+%øF9^Dugx*z2-oVҏWN\絑 q^ }mh>1^xC~"=QtD﯉oL/P6;\Fu!D@. qu":v@Ӭ.zI[m-$
+GvtaCƚG hsi5G${~qnxD 1R_䒲27
+13!}mj*^1ڠq651S-.^WdW3֝-[͢uo 3x/T? y~5M@ n W\Un8~<[zK4e24̢ɺfKVnmDjIXn~bfAwjwX kBgk9ΪHmePH@VKNŵ ?%Ќ{J;E+8vd/7QN2^QFQ$xb%HN:Y-Zxvj/.ڲ7Ѽ32$fCo&q|A㜽?o`-uu= 3y$Pϻ</uid?͓ P]^YO ϺE!#F m׺
+a4^8%bgtôBj=ay%_E^ejWu0kU-) g9eF_RwvFK Y S t
+e6`lqEZCjw
+|!˒9}fmA:A@@-uLj~Uy_۫ł38*l48a 6\W{H@__De%P,yN^ż ЋV]V Dv7 [˄' 7S)9jllsircnYvO_]kIB\޻zq%;h?`3y>C?wz-ԛN`gد#&<pRWlkLaYY|1q[Pmi{8醺PoH@(3^[+T|\Ǹ!݆2Q ؽyد'fB&9CV@tZv,ppsl=o=D9u^鄳R'ś@L@J94m)]Jr WM.K/<{,cS0_>D]z-Zfv
+b|Bf>WV+۳PhD% q ypƗn-z$a,2ܯBX6]N^-iM@9CD%f, =5ʻ=Ĥw%,m߯G÷0;+&m@.vW;H" u)>M5FZQ蘆TPVʫ DKt7*}p6qmEƦxG4Wuj5K<q+B^=ߤJ=JF!B\ F~q%^
+q ]OV1CߩFRB%NjЄ6ڒH@V{&k:2 MT=BGm^y ;m,ײWRʭCB+JiҠRG?^9,1+T2~ qS^ClׄT'֋'\o/NwkmB^%'榵nڈ2+78dž8Gor9U^eƒ©A߬?eU~^B!M<3CB޲ח٣'Eld]- J#n|I/o_BE 8~Nj7&= \X6yw&ũ33-_<GCpઔ?oN7q=7x_"x~[pݝ"o1߄OOfT=Y*-yўY@U0v#!SzS ˋf~qE?O#UVޠ*Ĩ^Vuv*$Ŕbg*dP<P숉s4w^sg#ҘSE͒E Azɵ΂6E\Ωg\?T|ΏQ
+ѷݫOdiR={ZVr#$?+ qRKĥ92HsIӱ~=Z6C/X!sODoc/ݺ™so%bxW*^m_`#؟fioh&&4]7.w@n@TߺO7/M
+{\UwnW㴎
+> 'ŻĹFghc9OIOq/.\Oû [y.TG0i6O)~-]BƠ[_;VhD ]iEx~?frRWh8yt>=VɻAp/}n84M8
+]Y+ono畺!*4}_D uғE3y^ѽg9kjR^;#5@~:24vփ&ueN6zV;$hbnq+Q }G6{*?ӡU $K4 nR2Tvދlșn\;Ip6!~'Zl ! hŠҺW1f_4>tΟxP帪\ǟ_=&viZ/34L<?o-.ۙ 7')L9^\^,++uVgE
+_;&+ oOթp=VɵaT_ƻ<|mZF!qz.yV8jl,L$
+ۃjT=>{J%z˵tS$+r,ϯ n\n6͂q-o*9aB<N6=8|ە`k+E Kr$Um_͇1
+&)Z~\Ti(m.(qK inޛ}*ǭ,gW7¸v-I^GO@J/gr6$T;~{j,ܸٶ+ިW/z(!㶙[fmYͱ%9LwH@(~ukCK\3q=l>zY~pws|sWadͭf,h:RLTW3n2[nxՈg9 /|:o_G
+́h@oGs/{ߝytYazj-[F]4,Q=ࠂ
+egzZƲ"b"F݃m" /ǽMFŎПƕ{Љ 6w0ہ0֪sr3xei:|y3eTf c)qAh\c`NBoe,xl2#AKuG#:| T˓B7Jԩ
+3 [$y^*Z $dU_k>]N@ލFg'ea<wϣq q;ڪ]ĵuZMٮTț1Žŗ{s7sLgO-rq2?) 0Zv02kW'=ckF4"&:J-afu %
+eT`՟fNvܓ{9Q0à^uZv•Q޽I_tGc; w^ ^Fᴎ0cXȶo1|..MʻÛovUzV}6 ^˞*}w1z.|̜"pz''̌7Ȧ0(m-C&=udܷ'JY;S9PAVj+G7PXMgQ$`k(#>l'7ez
+vQcÜo/E~Zψ~C`V͛I+.v\\j~\:@3OOOn燗3nn<ވiaO8 Y߈< ZHK.qn<<JѶU #.(.Vf*%}L/W=ˍ:i4[支}ױhT+w8=S^3d.6x:R6
+8}F vZ W?qgCo\-<ܯݓvݓ nfۆ}9rڶ#vkj ?_vu
+AW_yqlO㵣a[{3GWrAT^
+?xDET2Lʕ5Ϩ⛢M%堙Zn6ITS,lC_j1 w2
+ta]!)/w:ŜhDiwTszE|*it9yDZrg,eG-uֺ-*;ϟ<|<1>5n02eG=b'
+p̵ 7]3>Pȳ:(as7=4wMP~GYr6`A~]
+=gz$ejw]#S|dZeu}Ӳya{ϋXN֮*ݼwc+ VӮ[ie6."WLny
+{"ќe2*#0y 2ygNf9^{ =|Qھz8;}(>eFyK],]j38L3 `BCƈ{U.[567ϲ<)rO
+ڰ;}^ٷ8H67kBiłR`S5t-.hٹy58^V7[yS[NF{O
+ԪpJ[(?*i{IRb
+9,:LE+cTV6]Ur\fg3
+`mTu%
+px
+i-Z2W?}]#87)[79u ?
+[9=H$25kM4db^kN?0uT\ܨ\q|8\ijcm
+./TM߷Nޱt@w=}1.nl@>a#?
+E] b%mTbh<w%u3Nz{;m 5xBY*5QVV6+q{-X1|gEWoi@a@Qv&¾׼ۂgq{޿ NftOMKlgv6l#L r5^YH]y̏#{.)B
+Wx
+&"j߿&4&zT@H?t> =^+FN,Igb&tJʐ+c6jŠY)ǎ8x!7ϦVνpAzJB}
+zs^-gZ' {
+[Iqچfԅ$Q=}_a)+DyJ
+fGK6naJ 7_}r]ʚs؈Nm'l1hM
+`kވn~~Mb(vx$3k:bz }{
+
+sL,dz趆jJlps]Hwp_"S?]>5'X#͙WyK_qj雧ͧa|:>x{:ˇ^aw a$MF^l1="] !p ^X# 6oIwm$d|cQ./2ҙz&Խ<ꦲj, 7]+&f?иqSekZlO*5mej-V_쬺j+HnEqٮZy k
+ +f7ݦNjܦsl
+ZRSfW\\kwflGURsF+AU2^^8;Ljo&fxlbGu5Jl[cV(k
+d8XW{zMWD?+Uyjy/Y:*[ {
+ G WP/ fOǬn]J-CmDP0{u-Oztԗ
+Ý rp93 EWEڶ)h;½F&S̄*hi]&ն=.ObfJXJP)O+=
+C>t
+֋~#Đt8 S)c+7W [ L:hj eE?}{d$̑T{F :踀vk0v
+ֱEkv/ nV[U̴-wW鳥
+CTءjVƣBhe[5w79*ʫ|-y{H痝]^܉<(O}Qw@Q
+S~כLT92tfa#w]%OI20{nd#9sEGFu, CdV^ha1.vA맂fw
+Y4cX9k{a>tkТPV4YW޺ջYAM.z0gF<np0i;a~{{AǁA:q!o9}Ӭ=+ A]4` f9iu};.=1 ?Yk뱦-3ziµwy9_C=2҃4D{%27}?gS6l]=6"W5E/  `u
+6Fu7Smv`gf;nRc"~`/Flo9jbҭpB~=Wc
+
+R0gaݦQ(12)k\q$A=]TU״!!^HZ1g;-%Jo)Rz`uMד"S\S߄{ F&tv]5X`?^oaiVrc8pZkru3+mU2R΅tTty.S"Wn;eP2]I5뛇w=93*\bݛ-3ǥ;3g~(ō
+?u:FjnxdjyPa[%wϋL_A
+^
+ywh='fUr{7G`i\~ j=W{5wV9ljVt\RcwJlmt],8I
+MZMvB~An>[
+ 7
+@ my{dfm
+rpm3=6
+?:5#m!XkA~]@֠(c `0,@i``mCK
+MM^ k(wt
+i\AEyrUdM]s{Nw~NvJǵgϒs\р6l{<| Z]{w ݿ,ܟf&6 MZt.Um-SN>9+
+y'
++ܚCIm-ZkQ^Onox P,ֿY_ݶYiq5>o Dt(:^? {0Z{Qʎib5LIhDEaĵȽڲPZ-4?ȯ?꿋M
+z0&ƅ0
+N/y“0߇@wT4hTgF`6=fbr.Uu~I/#e}WF!V|ė-@~ͷf>eΕAΎTcj<kD9^Ȼ Mޥa2~~siul*ULαʆWf>?]ezٿ˜1<Hy-~/N) !ŦR\BOBЗ^`.iWM=puoױ5
+6J^ßPю` xƜDV]갘MT3! !CoPl_.6u&uxƦL܊,RNWvfu|8]GI7Sgq>GҞrK[ y3F*ݛWt2 BGIWB(:*3m!>$8;yux
+>:q!rp>_i e[UzaJ&fk.vTFmx\M=I
+I]LF
+v4jp KQYq<gBƟQe"G ?_Wr π}
+SuOKųaͫ6ے9coЖP wG.^{d+Jڪڔ Q):cA~]
+Ny><i9N&VɮN gGăE[ܕ&>pHa<se۸2d{=m}]LIj-lW=cZLWf4j q)]+v
+Y¢=:ӓOkYi'93s0 ATnjEWКN/o6~Y.D^{Zjji ڎUݤ oakHAL\ K
+ըgʘPm4V/(qL,R])Em|+mVe=ش8ߘ5RZbB`]=T9*欑d1Y˧fyPϏʹX!ntqiH*> Vfw/Щ'er>M2eiW/7 u:Tj\DW7n]_ݟs{Uu^3Jd"?t#Y埰VLG~lnnnpߎmRwVq֌`<ϷJcVl
+`u:]<B/=*݂s|JXlf)u$Rp[P}dp/x4aD|5r;"2YC|3?>5RY endstream endobj 25 0 obj <</Length 65536>>stream
+lpͥG <Ϣ& :U>N<*g&_:ʒX¢ٜ\qRpw-PEZ&ȹ U|3nT2Ig~ C dGA > OQU{ Qw.|F
+]Q˯Z[vF-)swmAFuWchk
+@
+KJd_̟
+h>(tBݶG ʂf҇LAFMy AD<o^b]%f;Qz2{ab&awUza{[' @ k~Qgu+ YyeQQ?9Imh 2uY€젠l޼ΣW{Gduԃٙ0lCo篇+_k`ݜygs2rrVg=jb04\{
+r\>Y7 ;v6彷=׻fl% !6!TZ?ӂxg:-bl*_ m1`|_ä
+8݇8Wv..#g#n%zV5fzw5k0:Xdžɨ$rWO+IO|B=)\GFS\{/I(\}X4g w](s4X}MWPߏ^V|$n: ΑJ4 utyǵ9䩨7MƖQőz=b̔A%1SpgSښsm}qVH\|ڻ T'+4 6FxU/̟M<F}<{- )W~%MZSt"(Q6Jz6ʺj- 3gwX6&Uϥxgq?ؿݚ\eqwj~:!CE{*N>)r_5tw0:)C\ƒp97/ǾӻJ٘Cb_^_QwdN' f`z̒NK0i͔{%MT&rI<6NI\23lҰ∢Bc!lumtmvy,{Lj+~nLVV*WT_i&l.-&M:sEN7hWQ[\Ӯ%lO,?1"dte6}Eɢ/Mb]a9(꙰eO3eWT?웟J 9򛣁S-y쭅e]ɯQyԨU2n mbz76-W2?ҜM7*U+%wvW@uziԹiN4y/5O@G~'7Hg[zUۮ:˕%R c
+<@`H{ӆFGuaRzA}k㷊Kk@p&5_hOVqa_ٶ1nigG<~?Z6;tHJ 4BN辐HDduiK^-q-g[9mssf1Eo\G)/45.HeV/_WxCKB NX׀2k UX|2ktPgb(d}cSF{ݖg}64b1coL~TW_l}Jiq9;@;oϼ$gGI*6s3~PnY^ _zL邇uӘVlZ{v2Z>/7+o6֣Ro٩6'z?ٯunR}Cu_^5I$ ؄~&t:YbcOO9^Tާ{>KGo*TJ#SkkFn$jU{"۩券GLyg=Za,z8Iؽ KjjBT ![܎]J!ӒFyÚ\u֏f`oNЙzՒ謀TbUbygr&V%Zed)qP6wa*r SZ[{Bwdt1ч1 'Cn Ҧ<am&~ݹFX@VWRCxUE9}ܒlg9LX7M"<+9{lŔF$ OE
+)?IkE <J@6 4]R7+\h|h}X̺)cFMr2٣8Pis[ngm$<BbC? Mk[d>X
+->@ QZȩ50ω#^ 1!.%l-\nMjT *.󜌛rʴ4(%e[WY
+Y%T
+]
+J]'U/~Gu[PQ i@u=pĮoko_ڳBێf}bsz
+Jބ= r.xzhhØ_8GLnnq.[)M7
+Q{6>SbE
+%)
+
+e2+O[!{07\|[XvBAK\S˖Ff'˞p[XpFy od^^7TǵgacFD+Fp,\3dv~'eX6Ȝ率8KfٲLZp-`G >jLvsgm:l*sYGmνxEgD%ٔe$ϥ.C7]{f|h=ΛP)L:{'| yk~IHr_scO|8bvATdmvb0'uѼXh|f7_̉;: F=u1 c |K ٮߒ\eҩ+
+x{8ՙb*d[kcqHsY3^OsiMy#=xt5nk?ipGp;X@NP賸I(8'rU|$!4{-twNM.zsϏd6nxjkSāŏDi8Jm/#U5'PK5>Q
+fׇV
+4,Coں68CgXj[،vD''.o?ȲϜj=4сxCepTcԤ*΋~&a 1N7M\VkY܇11NIg/ETV}~5?EpŔsיe3 V1h"?k,xA[ԘM<Ks| 8xa\c(9G~v.<m=+Fk@1PHFJư۴kN\a:Zc ޚ39uox Gi
+؈Sƈ[ƈmvw;B<`h;(Bog %J^9=]{*o.z)4YEkBj z&rU&w>=R\Ȃ#zUYp\fܢax; !Ȝ:QGib8;6adnuVֽӥd~P=+&3 +iNNBQ=_/}Ib6"sy+\sE7"ݻc㵐ۇ .hm(mg&Kl%ˣS.tKѢM/u6 ?bKNn=^'fId8o'cv.O+|C_ oރ:*Z4qf6w۟=a8~|#}V´"&׾$K1fmgvb
+y!8cu)0迸u$ѫ}?iw^
+}=Еm,Zݕ[iv7TJUxk0+h1qiJGcbQAcpm̥1 KC?6t JM ]!0SZTd\w@ѯxMڲxWm\tv%)9k\ߛM‘czOź,vLxO!2,'k&)CkimeEqxIT5Ͷ;^muwL;`bVGͼS2fC)5U[z
+U`A9m޸U=bqu`%^C\>5.itx?4R%X9릿T,.0~u[Q$dƧFK*ijіp8:|[8fIOPyf[J, oƴ%b<
+ssͤǩ,\qac<7opeBLr*FGT[aPʈFJ>U>̘ vuLR[X[_ss֟4KP֩Q]Pߙԩ78ϯ=6Qί2-5et=m"oҍdT1@JX\*6;,jJx= :(2w6 w&:FVde@4ڒ-_oFen<[ձrh0Sxzaulnp]b?U<4Vp f,t{r4u5jfSt[E07|Tw-I}jWᕯ-l-g}P:ZHiKyKQ oXTX<HZMjNgfr`jt?@<L(4R'f*24љqM~/ac]M3kQr}P#j>ӫ1o`bvxzCnb 3s/M#Ek-Gf`U kdshT?S[i SD4W'5{ɅiyZf.&-J |ON7;7h_dVIAfI=zVo`~kN[gM*rZ|ʻ.I:%B y;r,fӼKV=j_Od>s?0N [>L b7
+.Ը
+
+??IS p4oo=85pG  iɪczc,-k~c3+2d:"yJ3kٔOzx?8ݶًR;
+Nnuz-oűn̏"1\}+kqɔ*`TZfl_-xfR"-M`14'$z
+dkXEv=Q'|
+UŜYS=>8*f^)vq2v'3Q>0xkgRU ~|=!\f'oko)^hf)^
+ u3kڊșmwwާ;Og
+ D*Oqo3(oo=ٽTi ЂwwMgyO^{8B6#
+ѓhWET8ݑܕ'RƣVBk,hul!hZ=g %L3ގx]Щob0 o\e]);VW[o[/(T&RunC\?w.X ؘ&b8%)AnMVǮޚN VN{a Zp;&]EC~[ p9c'ofUZ]n3(wo;sotUӭ|N75~e7Nel9gfX,TIEq]wϙh<KiCMlLz\N1݈CߚGWvԥBOYIՁfΦvWV b[zcFo6 Qu yf&^&1Ju1@SLc M_NJRG&^y|'mV{.--Y}6}b97N+7f>W3;Nb1;.w>ւt08]vL79F᜔y2{Sgvg:64!ߩ7t,jCdFFro4VzovJu)-Pme毇^$1]T  zWE|$ЭIҦҋMGASFm8$zүmnGRUp{QM kgᤝy4~
+{TȠasAn1ȔB>WcK](Vb*vfGӖ4VMEA5f7y/U W|JXNf9}W70XAK9؉L>#&B,/=}_hB0B(j^2.QWR4ڋiϪo}nn[~dK(,#x"(X"Oۅb̊010I:4GX.̞@/L'js8TI>z|9UU8b'wyRDY'yQ _y!E9g?\$89مV?g &o㌔
+ۭk:zξi8ۭFj4|U`)L-W<b!XQB y:9{TeseJ0NzdIH&S:~
+evp : q CvLuyf\֭"xWީ$5LJB ΅iDdp^tq̬uAB/EⱁC墈KsSd^D#@k /X@ m4
+*[
+!cxf:
+ƀ vglw{6Gp=*G{3|޳c'gMy/hym]}ֹcF>]uxgmgò7
+W&Jn['ܢ7N
+ 5hc`VOhĭ()[ɑ$N@fs hĖ+ uըͤ:n}
+'x/9Νgr³a1_>Ź0zv;m<A쬜r20mDZQWv0$6gմ P5'w{hY1xgi,K4#@_{!uqX7w^<k ipN[si nGKS=OUFF8Ik޺$v]fcj/16^NPFWEp^׷noZm:bpʡśqNk~l#3aոkf7ҩAmH!k?w#8Q̑Tßۍ+=wtZ/6ۧZP6'DW&{[i.JhfAo
+QVͦbx;]YOJvwJ? K
+WߋS.w]ye(@cZʯ_l`Y*÷?t㩆vMvstJXJ\1WVRr$%Nd9Lq5EESxYCx i3 & ln1bQ'%gXhJzaWoTnK*?XEe~xZcA{uNm w8gUI`1E;
+3}qeD6_S&5۳^a
+fyܑeo,]MsH
+\ײ? YwAHV2OA03xkjϠsce.ǣt>Guz6ݛdb')x@%6 be
+4O˴3LNs!Is JsLsPKsrf/[Jte7{ oNrZ=6>ꠍDF"XB5C<Y!x^Hs,}p<eHLHGiDӼ=|k{O<.r}~h]z`cndݝۃN7(x3uĐsT5Nsr~dE8/jܿW/s2l7z)8|Vn&|I[kTnG؍\qz8̥5rZ
+p8݆{:>cr}kE`w>`nZ7r\ԧz$wB
+އ#MlSy<.7?Y^ӯbcs/qW3c8:ٮ=Gk}0kkS
+b
+jZ K%n&ZͭQ`L5|_zn?kW?m]{)+ 6Sa_ulwJLE0jg|{()+#)riĩI21 P1`JMi5eK5T=n}r;m~vK; hLTF\7Ӌ2>X0Jq8Yi36x+cY(PRBzOJHZЬ+9.rdC}`CM?i^T͏-n:ǞYoC0OG1+2)t,/~
+$uRfXrݤ:}*JV94,ܜg}[J<w+jT|P읠czUlT(M۾Aa{)Ui>AIa w*Wi"Ճ7ˍfit!ꚥ??$/>k^w
+ߓƕp~cŎp2}'a؍ 6aqW׺ZFME~=v^@vޝk蚫M^|Q]lEZg1;y5I^^K_^Vcפּ˶<7oeO,}aNfEם
+ S֒%,߻mR|U\4F?5g}x -vQ~rKm-Y%jKa1^ݽnQy 8u3#k쬜Ԫ> ;mmꧠ*vM
+w]GyNLCWFEXW+4,6ٱE@ Xnn˶jjnҲ[@+>vJtYU0Feg2̑~;! O ~ʗ`\R۟;݁fP4R6ܥ0٨^vT Z/o큎`%PşQB),PRǛٌigkOs٩2j~1ؠ?h[?t ԰*Љ%EY8_ flT8?T14?BJ$<)<);,
+X/v ~]&ٕm8JX7gc\19tZ|wzMP뇯>wE.4&5ne+R궀ESӚIu_Oʷ8ӄJS0ls䍦vO&rY\Ưu/epV{_Mh~m:( D4$||Sں 8,] s'YPm
+2Y~Q:ԅևN "g-:/+F%&QS_,8!.}Gvo8츥!ŕ*Bg]& !㖷.[zx AUhL5Ǜ߱'H|
+<ZH+V71.>~J_bHO~7\wl D\ھd#7*llvȥ;|]G-`.
+jV̱ya
+*,wzYLfpiX%{tZb+jD 9j.F0PZd8HTzPzYZ(֕H}i,,ͥOy+utqQ"<eA~~:2/&+T}Pc9q;$l":ŬkqD]&׍Rh}*cL˭2/qՏ۲2n"
+rq- ox V8 iA=y<^~HIsGL@ۘ@,`ek?_4=s0|ZI͑hF6iiܥ"8}xTOuH8z?m?Zd ]6ێ6q
+4 &Z@ߺe!@놥@N>:H>N>fy|%&aѫgȌ3|:|D4g,fUǴ|FR6%9O`~J)?OR`%}R0gU>{( S`)0:j))tGmsgi#J>q^ YX7'<]%OY*ڬp)FX~2!Fk'?YP;+ kGR4ZYjxRV[8X
+ܷ^Ml-Jhu$QΗ$׺u^c5d ̙{8\wroSdXfU7)[YA9^HsVGW;͕J
+އf
+e
+[&u%>z)]fSzԪw=>_V<q޺ĻnT(j~TP_7YwkD: Wf)>]'48XiN)_vq}~gPx{d{3}ӷ
+ *֙^yu'sF'[hiՒ|uUBW-Tg/u~sO(SO^~ԃ@̊ ݧ5wBmW'r gG/|yʧP2^vLտ=wq o)x>>>DZnW:>$5,dk˝P]"8.6%_W<[Wj _^
++/)Wptڱ1{G {džB8Pag]]suhGmVͮ5/nJnsuJ2lK|rֱNiXw|]s[Tu}Bc<Z3[A65|}եFG,'s5SyY4211N <>ax{v_|wrC͆]Ոz_dN!n d)l;
+… 
+'GvO4βhJt"I֕8b^6 h/Ӱ_i!oKT\N$%Oz}I:[i;Hͬ.8[9ENbe~jiǪ
+ߔ97z~g2ؿ''0~Ӳ`c3&G~sؖZl?e8pEIuh`_o ƫEnfg ʾes60FTW&0:)H+3пH!yd]Y݀&}9Y6\m"ޮ"˽@_B
+%$݊2؇)i ;o6/%lbMdcGwWGKWaR28r+~ʹBGN
+O57G+$w5ZA vD,+"M}+N8}R<Mf동Xxڸ-0i-rѶ%C?|=wVY?PEa*lytx:4fpK\3w2;MB@;iSVtWgXT 2){Ae\׌7Jz!+L*"KFJ:{'v%=pAQAwAiڍǹM$w7ɶ[]zڻV]
+;|Ğ8]ڲz
+'g`7qu|F
+ꖉ (=UTwJHy*=ȫӢw)| 
+r,t-o[芏/L,x:ڃ]Kvؑqѣ 'b-
+6S#Jw[XdME;ӳpzj
+noR@e?lvo)(Yjcb%Aq3v3rWk IN*W^+x{xΊDF3gG+q}=n}-S֮&Τ.J6_` 3$G
+|
+
+yNKKO1Oټ3FL,cG~ykΦq{ǻPfjfQKB <y _r9KYK`""4,B|ICfDR)hצxўZXčOdpFՖhoAPo]}CVa$]z;Ίm3t;L 𳟮rpL`X~'fKcQCoy!KV{#]u)`5ݞ7:lBUp
+9horT
+VSc3O5bhh_.)38Z:;=!,г;Vcz;tVpYl:19;vV{,Ee4-}5gKxw6W(ӕI?xCq/@)D_B_JH^6Aa.?.{X _mMV0)\KS3fHBlD-A)=Ms~ytrS ~'bj7#AH?Hr5}Xk;~7d~?Mv@VQO1vko=\lU[t׃Pjavztrf6!e֍MnNsE GVUr1VovU3|qtH/A _N9Ej9=u9\d^~ f;QBl56 L}y7_J'kϏwd
+aM}FjNqa ٹy./`R?wZl-2:/_oXy}xE{>N@ݟԊȟ2Gwo,:++Wy7kC4AU$K8HC
+G߉yeCU9@E\.+'DQꍶmv86"%GH)$Nm%NmexIvȘ 5J8ȑ̰u&֧me"knVru?d7,ٽ7T؜\)`%hO뭮Ub<4zI|%K#Mx۸!oa뜲x^;ζͥ #we?SRX(Gb'=}V Iَ7yPi$17Q$:(
+\ha0 yq~k&, vߞB%BF;gݙOWQnκ98+4Sr`^BdV[H) WçǴ-+n߹A5W5,~ n//6,mr96f,} O0b lt"btnJ%L>懾4r]ob1;"S$GZ_0K!ڥ檓ńՎWE5:dBZdF$1!XToX=~q(ն߷˲E] pne3niT<l{'!7CUVTŠӍWZsCǥd!8Pj]bJW`c'E3ʹb";vsmw}J{sq,c━ $ad0G>b$zoVEG!]L|MbGL#nWFқ[yqDZrJ4fCKD R|k.P|iR|q{E
+jg(<i(/Ez4Յx8ݬ~mݿ8{ٶݲf2ћ| Erߕ$dE3TZ#x5n
+nosZI_ʓ{G,S]wb Xa90{?PX\y-͓ mM
+11I-$)zY~Sx5Th#1q-$kpQ24>4Zd.Ycn|:yCɻs%zaW/ 3 1 3\nNI54e1j<˟4zv>R[[nM9M& C$Bh5+p>
+h?uqHqJt|u _sS
+.:ꂟ])VQ|A-O>}Ox_0OB8wdSb][7G^"k(Gt}~zYy[O~xQX_*a ׿rz@21slRF}}ErV E`΢{{5Ο^?VU,
+V1~^gg
+iԹX9 Q +8BC8Y_-?Nr^(y^s&9yq xfQUmCi+Ȩ3&eWڐhhK;!^3'ސFLTo)̠C;}? XօflK3,fLMڻrh=?qˇ9~ZܨFG]@ڝ*(%//J*&9ymς;?!{;_,V;^{ ҵ<@fK]sjZf3;R1ke<~y_F7fQWYWZΚt!4! &$]T>{)J"Nz' ʹ6;wΉkfl-O? /-tunTHvR+SI}vd&bHmI͆1"Yoݛ%%avcH6Ywe0䒔V }gs箱bp6X'ޠв#뇾wJ%muF1 "~pđ⼌ۜ5miu_ #3+h_ڒ?y%Mt2(L~v$X{ ^Oy >;w+/0?咲WsT@`K~!N!O#M=ᇖI]UB_moYekuo:\‡sPSu-U%̟ HY"2XM^/O(_}q6Qsr>au1~sYI1/EsƆEQ[7JAfZkGQ<y<
+QKULO6'%ʁ[נoJ.uJNP:^gc(eU>'Tk*{@^=
+hX~ 6;bpM`pZp\pĘǑ5
+~TB
+ҦW
+X-@w/nk\P;x̖έ}e +lЏWF (4WRcBzk?-< 4ktY&S'on7;8^fr]nwY'/Όk.t?ǂW&FOHwiNx
+օhR.*X֠j
+b93 s?T z1mB`W"/ oâVĎM/%`oKln3jIKGبKpZ6~M=ZcxT+ܨXŮYcRKBtϔ?&X,XQY"-Xa|]kR]Ɓyնɖum{XVT?Uz%MtAy2Uœ'?`iĥAo)9J+W5UvИ+VՕQAX2@Z`64d'z+W"Olb0O{PR
+>
+@ٷ<m"
+`'}i M!Mk>iʔ NXYM?3\VVg^ NڹCN%ztUhz?# ͲXq.ַW5 %. B>iz1+i@7,PO2,U> t[d\?T3y=j;,>oJxrmƣx򥳧M3Ƨ;O!COwbXv-}n0ͧofَ/K顉, $=B]|\{eno;=^ښܟȝ|:=8>N>q`ZB\,|_ϼ0O?ýE댲ӭoӷSwB "=:ؽn |#\ ]ιy|+ى*lyz
+)[vw{>EyULLuzG#,x]7q~4<_YZÿpyH?Xm{.C ]zC㌁[DB1~\(1o{]<͒|. .9{҃x췳XDҫxٺ8A%&`징~Sⱽ\)݀|NݱK; zӮoFԤ\% 2KGqhDs8g.y7Xa]*,^AxZq+=؎QvrYw=dQYxۖ'WFy:?OX0n٘o㇭W0yE@d!Ss+sRT|yv|~h+.i\{&Dk</.ctyj͞3ݚYHD٣y9׳ӫd#9:jLěq7uyA5N~c=V,hzpWxd1k)-?YwQfmsμyw.d&J4668%~x!@F!_;c|%MG-{5~1{ S[س go9)<fKwY/nsvϋ<4ɮd'MSwʹ4g7ll[ZψmB4<js3qm*f7ZfXj-0Q: wyMYG/g
+0LvyҪ|]:R}x'4ٺԓ9 zHrR]ƇKJ{~Q伒x[wӨ ;|BdBOV:)j6z愜sqpo?r[Leha4w4èRÊ %,}On
+5ykC1b ,ۉk??ήlZ>/DX>2z&bZ0
+YcX=U%f9c5?ǒg&ԓN>C$$Kxb;}c5+k˽ _#nPz.Ӗ9dm$z4!}h5*b*>){䳭/K07DQm! Fs^^-w7[:5Xh0wK0n0x5H/[x^Q&`Dz6c6S{J-uo^cG?6 <zԇaFă@?^ oY17#{m!133j
+N?(iT}󤞴TMSa=*/ǕYe p]8q!n@bX7*{vxW.鎒ju&0e^lt5x1k0MU\I@GI 'a2h` :7<sʽ DaϋDחsT_v`pK 5姧s`q
+XU? zyN'[Bva4@E/,o14nYYEXiQyكrkWnx!;CvDΰ|!:{.uyMߦĴZ:J9Y'+J3cXks{kBm $ýp=Q[pr\puu6uEm۱\ 5}LZ8I[x~la#v '|2k7UepX~T\fU&x^7uRZ\@>ea/pgROsBYkZ ͜lWM5C.FqLDzpAZGc߫-]Ԓ![(H~ @N׋sދ6FSVŭxi~Z髹8&<=5|0 "օX!9NjՌq}Ti;UcT('S8u5/9RoS[7t?Yu歹r%j3mѲau-?dUNWG=H:#5Wj|*<XzE\kXNuvKz,j*XЧe_ڄD0懸K; k,QWoβn]Rn&8gl^E,/u<%up!? I7%4͖T q
+;X2ŨS#V+'lXF;a=jLʳG,4Wfy[xssbg;? p
+۳znp!W
+5j6ZP> [L_{H_\Ҵ/Y8cs`p1cxi |HO~~3ïEs~ M~,;YDzyu92`HJ/9;k},Fxឳʹ GS2t|n/^a:ɷVVWUX_nk{9g8-{QwTum1ՋYm3,ֲ'߷}QjABW?zsKgCĵ9; .ρtOlnYP8
+m~[}0.$ZDVEmfWn>/E[woTEl0H*Yí)#Pr\(vN8"@p(zʞ3{.am"WӶɩq~%;=Vr/;<zik-+靥ս}mh^88[1nc2߷
+Ss~mtMU~!/
+*ˢ;Y:-ȫ^LZN˲l
+{#p^L@MO%M
+
+=#plN z0g|Pr, hUlg?
+VyuW y(4*.uRO,T9.v9H(ieT_CFFG>E蕆3IgԵ]W>=kd؎9}nvvW> gޤyIYqphT}ds2u{<C)^ko
+fP=>p\aX/s݆|;m6i:mZٯsYrFQ1c_n9bTer zzL/_UUSj=)rQ'Twp=AZp,lpM.MۥJgxڗiq_ma}Ҝ{QW"R6h6h+6h4(1O03~29^%C)Iώs&
+)96*R\lnbF>62ڬZ+iMsȥb|
+j= nQx lԢvUƻRuxUyWRT*Ycz58qÜeŻSxB6~Awz$mrUa+5@9ܸ^aԤ&SխW5VW9A,iyE~'c+cŕ^F_,,>TvRpujH2wH9l?kD=9Մ3~5X2SzdI|_VyZnonlJ,JTP/*M#*_pWc*AN`RtՆ2/6k-ag&
+} }=S0 nآ^dqs
+tH䪻ABYyAAJj泾M1ol#gX=I? p3
+Fq>
+/:
+^g4P rj /ʚs/u$4ɫQ~Ne߅YQw"My
+J 303 
+E|.;garbY=>,*VB_ '7vWVC&LjcB0^jj^:
+8m"T4C IMFt6g1õ͚Uׄ&q ,gGQL}y[%&YqX6!?܀{v!ն 6yN#I'
+خn=;B*Yӯ G6HE34"c1Ȣ^`ت09J:?Wz52ugV]ԏ&B9s
+q-Y{=PVh}0:(o?}ǯjL ?:^R–CTKߋUYfɡgm7E' CTеy<d\3B<=>n%}6cq;14['ڜpg۝ي+H?3'ԳŚxRѸ
+sBb|JI+ a.:^P˳g=p-nd:
+D 3xuN bw̩k)Sh~Lj\5n/Q`L?D|H'zP¶U=\Z;Ff(yGh-m3p)?Tz5뵞4VD2
+ctk9#Ķ=YnR3([89Y'ʡy]O%i1-{oy[N+Cvox<-O9Aہ̾zo [zy>ZnA(fېTŨR]jiErnz
+k~x/9}V0>PŲsf}6vkV0f̜E#NFYl4|ou !7 鍧A)#*+[
+ez/8ZNfs}ۛWt-kpFo@w+m鐙(0b'C'|vٲyH;Xǥj%iE?a]Lncg~Uk?;8Tت^G0]Zu\irfr1̭9 Aߏ85g(̵©kWNlTRf}ɐvk"}b zO6&JS*V O?
+f\ǬZe -8#nUw{{N$PP_Re.d#S>H^!3b6bIsGx ? ܨǜ.׊2{=)5X
+jl|'(i˨4\ )o($<~a&ъ<?LJ|s"L~*:`w_G]Y5%$̥Fऋg;l=7e,ʅ1pI
+mSt#>u3H.dQ$}Uo.Ľ\e#uL~XN#-o76dd2\8l3c6U zuh;.wL&0Tm?9)![xxLdwR" p {69/脯CDtB:)b4lhx6; pbFA?72/l[14ڑgU>A/|XOp.Aث1ۺcsE?N%Ds)ҫWYYQX*{-Hy>AʾF1y|O 9]4fF[:;ϣ"]ݷKpl>rhT=ʨ쵶0A HvSֈ]}A<)T]a^"PUŮ#LDSNf^
+i-6;+KqKʘ3N?0 c#IH
+`
+s>B/Vq'G&ZRr7~;]@v@\ \K/ Y_{*ҁJ} A9
+-VQtA~S\.$^B쾰sX܅h_KQiҙ.}M\;?yƥI0/OmkK}Fo{z2 %}y#bMܪ
+̆?fG*e^4-k3g^t0'|ΜU7paʍdz{s1Άhn|C
+I I?| 3:7bo@>fo[ ;sތ?lU6='RU uV3ED + 0cN)a0 iԿ~>㖯Ѵ>|Wm% +z 8Lu^<ۃȓ}ur xAE%%;I|hm`gH YPy6{\lt;r7wn8]
+f&?Y~]A+m=܆ F$INWOŽ;mrn5`no ^y].EfA&}ywk6lgL:4ndѦ۸w[nvaj-˼,.&畃SW %z,?{fvN1ɹ-|Wz
+fpcϼ|a::Ip^r{cɋ7yɢIV@]bȲG}N8W%jv韢yI.Lz:V|*UN2#Y wڢe%I.CZEBc.$O.z#brFsot:fmVu1/xSirnUcoQe U[0bo!/O"J,Z>?6n[Micn*mPz_;MZ<MANxOBG3w~QU,[%R
+Ab DF%>g9EUK!/!6Bk]1l]2 '>H>Nx@(4PmOowV3`J_a~ivmdM~YuPRz!
+]n92A8='X,QF;LU>UyG-B5vڋcl8 h%]  ¯\_y_q_K)~-!VaZSdG}K.{?E:~s Qi&!5 o/[gs#nˏL9ע2⑇> ^{Bb|EU޴WSĆKxs?ASX8ݻg:Cu#l0;$KUv3G#̎yK6
+XQ1
+)ʽV Oc*8FR8Nth',fP8.?٢}~E_E[9Y,b#b31=W~?k*w6i5nNdoh0\pI~tUL@\{6=^"DRIYjZwjWβƈ) cu3sՆ+VCU^A>|: p˧j|jKdI?vn糛۳S M?mulhNԒ*?X{e6'R>)pZO \»0IaYlʽiz)3uZ0
+NoHg<4;=hl$3Dk
+V?4Uij$ԽS;K:
+|PY=< soϳbur"Q^#=K}Aj%(<4 H.=H
+C;b}U /K˯?iގ$o?Hfq~=_/!޴tv#;XmۮR.tv5,c߅ZupAqv
++t)ߒ&H>r:@͟b:n ٺ,/3
+r% d˰NM-~3ejn4|ćT&q+:ςᐊ033X軽Ey^; @Wl-jjtØ
+-Q@)/t
+R쏀T3GF(*v(y̸!,4WT6WiOؐk=K׾{wNz7/7,LI,V 9{}r<l- >N=׍C,m "W uyzS|E%1~b{wnXvH8%B\:~a%(z:Uy^^z~Ώkp<{ԇ/QvWdWT<֟.vq!ߑ^:aw}Mp uv6Y=GߟiAN'?)rp>=h1N+nH2 [ovZ'7HׯN|Gil)í@e',ɾ238G5uүDY)gĚnqßVuHkz~gV_G9]UY ^7;:Gf(_P4]˿-,-%1|^B1=u~b8y8R}VU~AwapJ-3lGNDM}bP<zڄ> E"Q}zaq6k3\^gmMj6UD6oK,ݼGqa">ڔ$0ƝPzmq$q>zmFFk~6<,w0t`X.[_WM .%^Z˨C{~_c8QCzgI[ח.:.}jdlܨ[+XA%H~'-D2%h{~ݶX!C|6z]Ѽ;;t>=˜
+Dʬ`J?E$YttC,Glr/6m {$bt څZo;< w&&>ubbU}ծ=VCkғ_Ÿ,qEqc4;&ݰZY`0:@<0vےN"9>,eHUiG(DT˫BX=J:}Nx::~]+!WcNMј`cfT(0j90ga'd}oo3w9 |"Zryq9z??ź9ԾIȉ얅vE(`v'sQna_'uĎG+n4R L0*кlUFKjuR7!jgF4nGXsë_tkރ3V,S.D<C$,Grfd6e||DGQЀ;̔^0-?Wj-|Qk<JN{[XF$Idms["}y{\!4~:HuǓn5կ)dw>Q*ї%& Dy0b"˴&]ʅMj=?(ۇ&T?E'FS*<~_3BU338x|<>0?BX^/7\sK3ADY;+'&o2tn)6R :&T N&Zz_R] r0>CQ>)byO#@GdG}Z` t]FURrBg8aN-ǞMbŕUE+8H؝}UibXc؝n}6E|-d-Q dN]vob`Z zY:1d͵]+'?EW6ir=={U<<~FmZLgʳ3:
+\^FNa:
+"ZіI 0G_&#&cMorA'V鉘VAtj_,7Q*,j0ZO<SZ_s;܎%"<poo}f@ O
+
+ vs_@
+M:.bƵ h T.X@#Pg=1n"{L4ãkGV3?T!e-IQ4&wEԓ t
+[ʏou>.٠XkobaZ
+M}v\?%Z
+㶖v2}*fR{kr/WҎ8ynE"|9f DNՠޛ8Q.wkwk{%Nݑ%]1<;CtSh9Sl-e
+ElDϯVC9<=Tӧ@4 gW'2v{2㯨'ciwhljM/̿jwtOvq:9ZVu2ߢo7 _EyKMb@k]:q gN[_F<7$obڪ3cv[zV ?K>Ĺ+g j7\w㥎Z)!B`}ƚ7}f{%y໽wwFJ? i_C(ƭ,9ڰ_{. Ydo@Lr95le',S{-~}d!n2i.ɎMF thl02l|kɴؽYfa'*5Vo}SpqWBJ6w[o̤O}h+->rq+AQ6>MjlgomE֡fדc-lƨa6`5+;m4kZ_?̱ 3,ZWݟ5:[WsĈP߂+Z)nT&0eRv2zJ,:Ou֯b Xd]٘{Zˈ eӢ'iX׺Umv9~ ʡ:zW窸ʴڼ* \@1HJ>v,2d`90Bvޮ9ionF}av,<uXR%ѕ؊Z}%w`5u%duOQ,:s}` Ra(c,x!xcfl[ l_vn<Órsci"gYcnJ$bL>.(_ԯ(j$`d=:Һ뒵:l-qGH8W{/vv >n)#+OӐKƁK.%K)fv?fɤj5FqapL$trbUC8MB|e(g%P;.Qc>q\>^$]c!OֆK+׏<8D2[=VTv0VuV8C4
+ BWM騉%e 9,;1094 ;ŹǵtؼŠiAYt]wF ݣ+T>Әg҆gKzN)q&|s w;bFaS,HB3%rJv]vk4u$ ѩ!V! |A
+tDꍉԕDݗj䷭V1?D|rZW|9~S1꫻zuFqS} :`{M&PBlDTD
+QjqDxU)VyY7ޏ(Jn ׳| ͚n,tv
+{$udmTcy{RdW,A`\-GeˎsU,=R`t7m_nʢLIKuJ{l{ V,u_eW;L?鞫)C*~rqq@6 斨^+N[c<ޕI~ydt%f"X P@#=TUڮ#(3"(f1(f1aߴsw.{bR>&p ~_1/Y6ėǬʰ>:޽3sG۱/&' Q`R68 JsF@uy8n4]hW` zdS!@f UڃWkYL,zxo^r
+aLN Y0/)X|V:QjaGDy"?3
+C0ӣ:M_1ؕ '6sPN)PWԭʝeߖ
+5g胱K8 2A ,:a3E: [AK`2`\IiLe)啢&#ƓUfdl
+H+鵏k^l=NlCX̥,8l!a
++~7 X)rk u+Hu//lb;5ʨBt60w 6'G;
+҇@V@^→ -4
+pKI[ 3;[Ωu"[b֑2sΖrז:HߎR_3$'aQzszkLj(_h+$'W}c\^n-Q#?p!s gmPND#m@לt?xI)4ql>%§毅(h45N<2 t[XolZV.JZْj7+ر,G2Sk%S(<JC %!jFTtwaY(f
+EN<mg.Cdg勎ZBոقT|+ML|kׁ`.6>URA>'~e>#rtfݬx;;z#̹Q>bp{TqRt#?Qn C=05PbVQ"Z$!R\_nUjjMRmfŇ&Ɲ4[\Ww:3/en-:u9djD6dtc2˹ lj8V3aYJ_bVџ{beYA.轅\p(%kwiF3+i͉ ZkI8#cǭC 7VVʩm7|Y[NK)u\' \lJ5b^ξzb8Ns<t wvNZbxN~}i u+ToΣy̴b|.1-9iu!PG)wCN?W3x6Na3>u&(̥]lC\e) eW;L?p 3X
+};g~J@۳RPB-R%7$3䦇J=͜h5klgCه52,y.8f 6CěBRtX@|$@、4 nT i yB%RyM1Bt[;</:#|W|7#M q QzP$pbNѱYJP# o8EebJ
+hhZ
+ I[-BtE&&,y=;(ndpd4WOW8R,W6&:Woz [b\K ]H;Ltm=8BvR;o UU4Ĝ^1pпɇwPC3\8+@^P9Pi<*f51j~8[qsfacak5Yif&O=bnK\7q%R?3p~NsP夬QrQ!d>%QtmdFN'pwݬխU32_0mx 6}JtnrTϸi8c[s K 6xmdɠy+Z8%4/Bys髻4yTpɨ1ZW
+VOLzӭ8AOuS>EgKOw?NƱ [tpa^6sGryLcץ lǺSfu` D?ckp樯mjs4s۵˞W<\4] :o**lcկ:(L
+w9voU<@rA'FEp#[N.,+rXWo@@w-.vEȊh$͙޴'Y=Lr+=x{.;
+lnd1|M:-u~D2psT'v^ף^>Cb֟]_6:~ 00KwgqRocժ/SE4o)La*pFF1t7ey'6ڪ m~>w.ݻI:Թ P, (cBNU&KƲH?peJn=:_$G91=jx,ry?f.}/b~nͮx ʝQno}nc؂qԌJuA}cAGM։Gb(;xmMiy{7&,U%g?_'qa
+ٹ,1|MZ3HG;PVXx-(M'GqeN0zZǂ[ۥZXMث^[ɨV}}p>V5!WlA\4}rq9CRtjI)fy \Y3kڙѸ|ʞJoð=iqJFiO%sJ%E κZQe}k 8fl<.9XgevM6y4<XCSjhZb#YvNz]ɯjlX s֜yLn[6;(7qteP2Kv^r4Ji;VZ@4~5YL-bW}졚V/<Һ0\"ϭ:jwhs+VhQ;k*^-Ay5f孜5<\]q;f,]<PJj^i5\xfaT,b2&l:":b3:0\
+I"g(^\q&UٹYJ9+uҪcۡumpeU_{dd0:Y>PFp9*zL>tfڡ>upWL+Ĵx#F {R?px{tS/\յM [^VV{=XW7+;(vaj|UZ"Tb=m_:e蚞ckR4U%垣4F¸H>aܾ|v -R?W!S 9vQ -TtVҞ7)AX}sZz F1םp7VTJץ%EKCir)=Od~/H=ɪJrv-lb׾
+oa)"]0iqa<᝵!N26%:~%9mBJCrUfSfڋ)IuPk&ZrXv뼟eCEͩ›Yh. 26g~QQ'y>*](/ZnЕq|kO搣4h]>-J|I 虨a.Ba9yB}C%-lnр\YLU/'l;z7@Y:e
+NYU6tUWOZ=n,|qzU"תܬRs,;[5QAKXQ_,8=-Ρp#ágGgAd cQc2t3@裺֧GCIh/\h|۩cQE^e_zMvmK]Z#Dw\9&M|`f31L{hzt[WiqRI`m)߽( -\綔D~ ʷlB-xܵۗ2j;rR2k2[W|$gMnY\vS}UY"~5xqRv<$Nd6EQ%(]&~T{x<Y0}0Ɋ ^A|Ѷkͻ0zO/u:)ZUT,r5XR\ ]}isP>A.$"9wOxu.b,bQ<
+4qxcIq֑ns EpqZ.MX|-d7}Cvy~d)ѝ"R0錆-6^KݹZ>%vk 7mM~RTpDle֓\x /pZ)ni}vZr-uaeS\
+3ɵTđv@=rVjY R_Mkwчg<ծJ1<e_ T>k k<WEJ([W9l2f`QD6ep&IQ#No!w  4lP7?@K6o3wiՋw^*J6t7BV}=̏Yԁ '?0
+tyJ\BAQ endstream endobj 26 0 obj <</Length 65536>>stream
+kv
+ IwH@ l)X*րŴG՜.8"fCwu/&U0jP
+; zjZTR+GC]PaP#6rTb
+#G"$3x" b)M
+
+\*3bĻ_OljdGw{XVw%ϒYwq!u#*
+"Λbj:{\]$};vdHsUMۄS+S7gnE|=)E0B,;-q+7hoo{Zr=CS,/&W {[~䱙EWǵ-y`PM*>ie`k9 rX"%<%de+9.GgbɊ^j6q-m~)RBLLv4SZ9e]eXW*[쥟QfZ8ȵblh< 4Y-:dubi5!;^Oμt)gfeQ}u
+"c<AFr!}:Yn[6OxTګ=N<Z_j\;ʴeg}\w ^vpmL5)ߵX;}af^-kؔޥςVMcxF!x}U5G[PcumxZZ5W*u8FF*gǃO܏e8qs۶ڐ˙Sr(l[)/l0mwFޟbϴC&磶V&ZeMLߣt)us)4WVeN;-ǸIZ(\G ŀ^voNnqb/o,:lQ-V6>OzfuS0 ()HnSy"Wt*)QQ>⭋M^2׿!R!$qK2Eh Ϩ sOmOB.\(
+|ݯrs||✘E\cr1rs(/6 R^oV*Эz'OS3 '3s7%xw!ji /N (64l|s-9 朏O쪸Q
+%VYm 0JGf(35<36<f:c jrc'x3޻U|R̦0WI.UZw(}jcm\dZ-hqsgJ}˝velL 6i8Cim>?.T4=YN;΋Lk!6m »BسNvV 3Ѻt7Ŕz,j&/J2[UY池syF(Pbq1 ~&I;<LcM+@ !C'dM*"K<TEM*C:B.շž2T| O5=%ԧUC6[Y4-[iV"Wc>6ݢT %by݁RQzD^LV"W6K|r{<}gc0kLݡ^D_JeO#ڌ!dc+8V]z1[L#32<jS;)1z"B_bS~]/dq2q5C# Y*] 2ssU?ԵJ20cmP]/$>%gpwEbbGcDSeS䭕3"(V 3Zx؜T"NJ:?X'SX.;-GVo.0ʗ<i>v򤶝网sogMdHՅK&V}`ϋn̂DG:M:AGsxqHH<OXژXjѕحm{'!v&qZi9~ Qct b"Be!!'Ig<O;q16 0·4WÓı&SlǓG![)aƍF+owG9_r1Qɱ;@Ι []|q)%0Er>d}&BN[sXl,4%
+q{e'UV{o-fqD""w,r"5BƄg3aV086Q'du M 꾛MU6wƖBf֛Y_^A\vkWP+si]뷅)rJVf_^Wa&Ⱗsh5ws݀D (Oꇆ}Z ܦ
+ɭdhq`= -OP~YuFy(}j
+Xes
+pR )Z4E?X;X6k
+Ͱ|
+ٯVVM@}@) &EĤ"vw'bj
+.+W37ء
+6ܯt^ցC + ?+((̽ mbV=VtX/pWBo2M{v?ht*Y'efzGk`} 3{"qzrc;bҤtT6ܸ񹻺5r
+@t?f|~
+7' 0 }ky Q1S`GP$Q ڥ(?@ʹnkqR#͟yh<mb]b7a<`$xv{ߎQ|~z
+܉Ҿ7JN{o浛 kfW|wSWZWOJDO7\]@OkD=^ߛGhf"9@O^\}=:~D~.}vnfoY:m(s@H$sFHeg?lMRQХyߍdd g6PQբ"QtmT]V^F)Ղ XW߸u]!ŵAMT-ՖIr͞J4Ӱ?xa-QZ@ֺ#ޜTBYTs+Wv\oO0*^VjQRxޗ}EA|;98H1P.6M^ע{[ÖЩZGeS>}=CS n~. WaфBݺ󟵲{L1# DZa~6^?Xv2 ,<R<mٹi2yZWVu,䀘vPJh8,I#*އѶh婐L{AWp~R<E\T\ R;zPL; 0Cc,][&{5%cxWWəH»iZ$r4<N6*E3*'9V#0n7XV4(y@G[?T쾻}d흆k8o“!3Ehke'Զ$;a +8dC\-{ַ'ަXƑm+NVMz8lPcr#7jj7MR}gU]*xZi{{W"k\䲻ΰ|:@d.W6".,+@ ]s>f<M⌭)bilK\"֨D4ƒz^xzݯLsg.lfnHbgs^5Q ˲=U⮝DLdumYTZIC{F0kp D.pq5]SjVSaQSE]%5),va.|w0θԣD2͞eFӿjb34ànNc@ohL?r^; oE6>2|RTDzʳQ+q)u"2&TjgOjy\v,k E,5,#M6#GS_ۢv]r6[]O~Pe+[O`ei_}`Y1#`,.O54&\ 㡸i=WMEȴoWeN4Ki>!7F=eey|5Lsԗae;"HX@ĥPxxcVB0?U[Z|E~4٧؟끴|z6G#7Δ~Zb*iªގPPʂ?(gN]%#gfIy6ťVMӜ ,XZɢ`l%;X;\lثl1scJT0Ig~g4~<ϛea
+kڦ,fbjLȓHҠ$RYPasTѩg,J|uBrgNLז\Yp` 615}AV~}~mrm&+Q{ww=;j5kFXuNs vT27`XwL q,rM8V99X&lG̔Xj0qCtXZD7=Z ;6 QT^JMo0&5}l4r~95LwP!LNoG}[Mqs g]J\ %L({wD${iqix$?ZUg7ݮnҥ`Q3SK1֎$ny\!E0%J Xu#2>C^s)-SwG3 .&rvMPBya_GXgM/'P7T?q(?ESmy4AImuD߉RPF4|wiJ8 
+^)3|6 -wu޵E+{!k+мJy OWx8lB̠ʼh
+A:: ˑ4<ݔ4=/ JR_c'WEV+b5¤$AѶh\Ȕ1iNSv*2懘It+eUS>ͩc{/CC+Jҁ-U%ki!;)yQ_0Y1Yh=ߕNRlHol3KrHo"3{sӻqBJoX;[R~.YT6ht`*P@R?};k##*ŁG;YA;$eFGSl:H_g1<g/ ؅҄a !# y Mmb<|g36cU{YakUWHSeU=,@Zlv`ȓPUjIh5`HũCh1
+PATu+էl@=PI9ŧcfbq
+Xz
+W6&NN3zV
+T*@#B(wVHe\d\>Ep_gmN |]nn9:o%'Ouc/C trO_h7@,qO+;+~ɞ2?Džk%j]^|X:V" Kzڕ^v%-ZݎU;Jˡt.2mz&#g>LaH 4;Ye?W֧{H9r0sֶiˬu5W-S\|fyyd͹8hx㈜Y6iܾNNHGKgĆ7w*ѽk}FFb7Gz˓Z ױ_jelGǥ}摖{F0OOCM4 6({GC~С4b[Knڊݐg]>MNϾNj^p[Anvl㰿O=~qV _FCΧ&!ywթOQݐh>NguM6j8HA%'YrW>6>vy?F{LQx$uōѩ҉nq7aKk͞7h־''}VPxU̾ Z`XeS[
+&]mO4< 45ՓqqM#tej_9tzlد>q;:<}R<ZIUriM* u+ O6tVJԶOQdxRM_Ol!q, blY_,>ՍՓ{(gxհԩL/W(<5O4l(u)R%e=ׁ&`+ϲ*' #'\WtM'8gC V .]]!K_|56{j6VUJqP(گ [kJ~.`UvAAxMzu*ܑOvߣ,"p4RXfL<+? \u{Emttp
+ˣB0~X\8+iy-bnv!Y*Fk~˓ҕw& iE}>Xl$/aĞtk{bIص Xأ<2,5,8m\~-C\eHjmX
+'YQ3,j^ɞT ]+jV Ofvݬe'ޛ3͐y~j6qu״6\5J"jPLFٶVyњZr_}&3S֞6F)`#\V[-cif,Br94FXu}vu!sjgAjr-{Q !5>{Y˯!tGΘG(2@#&/lrIgKm;hxsR&{&m8Ppiڹٚ|{gkNuqn~s:Q,弒Gry$))Bt UEq`C17Ŵ %DS"QE: Ǫ橍qdƑiWl9F?KZ GӿR̓jgUR*Veoy8,wC.ܙ6w"9܅`l2ܝs [厃ry: }~\C=j,ݏ S )%{HK'L{RiwNBY\IC̓R%) wݐ%w'ޞNi<ZmV-,̝.@̝d;KwX5lIőRv&5kgH4dp~f06y
+ _7:w|->N*16f2uXu'?(c\ uj:m?|^g95i-NBus\_hDiڕ, _#.ەHX(~w.J| gE{ԙ#t4aQю
+gBiu2?/afbӢ=5+]QHMvK9e~<r"֭Ev|oT?ј~7J$.MZ*d<'kSDl}(MqD<@pLԮb4!~lyfgMI&0nW WGdNi7w供&prq$aG~ig(i!I
+_J(_O:3\hjWqb[\VzӚ
+~w (h
+)@iAVo!hY2
+_6Z$?V!wm$<P^N;} wPE@霷@L# ̄fބ6@럞' rӕ7o]~6 @'鵯[#t]5@g @;Wf#'O8iSZ!;}NCr9N~~]EL{~){[lmN{8P| sl\rg<xBr$̘M}~ i|Wu]OC|9C[2v+iiF"sH/[slPt'mln"pS~L}g<n |?ȸ~$ <$yu~ξA>N`ˏ?֗XLAVU,A' *s9>ץȈ0i~`b ~/5b;2}SEԬҝZq|~vX5Mؚ;YYzwE6g̤<;}\+D)wAg_z;6k7ˢ-oV[~Жz{=}k/*V|f-*
+5lgX-^%/JFj߇>tZmxE7kz]Z~$sעtuZ-ЯfeSyu+& OJ*Wڋ4{~(\HGhn5N~*Vy^`PIQ%dUvotP"0Sj1s?jф1D||0~#\WI_NwnyI" Iڿ|_=׶oyS X4>ZaYuu,e#mh\q;`YAA,y~g>,i=8N31^ٝr޽ )=|l尝$~(K\ dJ)lUus=zI"OnL{3^^&Idc 0,ЕIp̕O; +Щ=%ìK {[w+rT:<FS
+zZ^UmP)2VLσR~PyxhӲS24 ɛxL^~M ݞvPG4? |kfyCc*ZbW-m[hr򙯞leFw<ǧb+Wy(6nm<ep`)^!q˴꙼P4EoWK/srL91X zJ[񘛶j1a!H\FRW U 3FVrm̔봦-D젷Ҭ눐hsa,*g{rx¸#u%pbWًl3i33ݴma[~Kك^MG gJe늂+ʠC`p}u͍tiBP*!=$S"iNB󻙼+<%{̉[*f/eQ02]H1g$Y$KۜSj;&l1R!rDKȇE,6R
+/6n-_ry%j20HDr\f<|q%Xx:gUbn1~^VG7}߾qN&G,fervؤ?yBXA'|cWQ<3n}qWͫ3jN뼍݇~Zt4w$$.'D`^I̥7M:bfdzH-+;qvMM`kK'x"fb
+OgMcU&+'zN4,m*zZo,l9BS횠 yOڌcNs_dK!1ЄМ^Ć(8-AA73g:5Uo>&U#qoQRD2rHtb5%R_V  WimOg)T l~r]tag𺡝\mAy%1[z.S<ܮA_sjqńBFIqSPƹuLg{k+Z>~`ŶגKlթ;F 꼌tHM6̃ ! 5%j Č ^S-qAUt<@l@Nj[ .N%&49
+W
+
+A)%葨hD
+§oI:X%V׃\0:J)^9gڹkV{J hzۙ%*4?|n=tT`JDmh=r.#k `KQ
+P|P~q:|C5{;QWWbd#\@;[?Q
+O*zMI)J'gAԙנ$RjܮJcÒ}P)KVnzr,dܻ XLoU
+C@ L#
+~Nsf'#]:226ץ_DՎ~m_ȄJJm/_mSs hhsZc̫' GDrnJAz2Ϟr4$1sy6Ƹ;[iՍ_XiLzID
+,6ʴJKɩj?w{T6RBZWu]}w:D\yђ>uo"!ϡLHEm2cWҴw)=pqeӢ42pϐ[ i#[V^ŵOvD~v:%6A[<-ƏF;^8 AԜAcPF%Xj|zay9~![G.-).-*Q~vC9}-ԧmަim VᤋojuYgڕMk~3M2^)O;pNJ§~^g_bq;Vx;d_LغC- [uP<Dl%?fyÿ OteTh:C۸wk΢ۆ*x{P?IqI;9FVS%;)_
+s<}f$~aC͵2(炓^I
+1&ɦ@c:BťWl0v-<5Z(ݼNm8iͺ&s?%yEE2rQVY|?_uqf65$1d\>yrz+WW-a>yx2sخ A.(b@_u uR(#?Tiv٪|b0{Nɠd
+<qEܚ7,ݧb#4.7}?$zչ}t5Pk2fju](٪F=^yQ!Ͼ\\Gi9%ϰ8 NM2M0M+;o^61v^|m]?9*urVz$VLsJ#z4i9䩅t'&F#&ק",RG(d*3G~3!>e%stN/eH'ER!sbCL5D*Oir~'d'Mp'yEg/!vpCE,qrS
+4q~31|]<> nd\@ ;i/~PѭX(&>l&( &=_Y>$S-A5[[3f4,:ͿWCvc,e[ka KXAVB^Jφw@FG:ǜ>س.z1DgW2*Џ٢vc5jf[r^%弛HɣZ)[޶}%"MBQX W)6'j%{gl3]3ױe:LJ?WgݫeH&jΚ[(HCQ~|!K1ܴ^!Da`-i5tIa`|I}֫^+><b/UĘG Ј~9mUnKͿE(w(;n hTd9v5*b*QŸeq#UWwy_5VST?׉DX`ƞKnΘns@z@rakBʔDD]bq ׮ V2c! 7Zo4TR?!*)r9*񢔭u`&Ԍʱ~o)Oac&yt)=#C2"}| qnar*+1^1"Z_m~KԨEHj5b)[ݏwyT~oeذmOY\7w=W%))Gw{$m"?%p&wz}Om 3*[$$,Ҷ~9>UZɍPr 6Ц>{|r^KYQZTH,hm-c"m){Dʧj[>uU>=oҮ+D=|7vZھ/b*{)қ k윜]Հ cP|` /ߑ؎d"nPVNP5 4J$eAY?[ûyx03*s<HMLQ} k1 `daх|[,"% GxRhk 7 Pik{= &׀"O-+P@vj Z[8
+
+^
+HïAX(
+yGU
+z p"Z?ߗ6wH=Gh1( ҝ&
+i:+M+
+B
+Ur;D9&tD3"g DQsĥzĦT
+-q%pRszHX
+q
+ r> r
+H\kl O.<{ۜqle3$iifr&$}HSI%SYlϙ\il
+C?r ř~_zr y7pt]vGRo^+&K=tf-b!sL.)9ĺ4 %G0+CBq$z4 1n;ҧc> 𾐁嚏;F^*i EʫiC* bՐړe*B%Fh=JoR,Z(erh%{LOl8Ev.%^>xDcшsw RܧSx7
+
+:3E˛ThBh霓'g>hCRƝk
+EyaČ=ݷ{>tL[((;YrA`_к:l13=5U5E)51yq|WڄBkBÍ(ws-΋.^ϱ~4h `B.FވG E JfwI.ϭzɃtez#E.v vp>z*4da^%ʴ%{.[\s\LGbbTM%h3 Qd>FN{%p"4ch vR ۵8Nv+\Ⱐ컎DyY Tf:5IZpLmr~5"n`t8P&2"0VKk:G௭B|VQiIǓc0{$RTW>FO
+vJYkfks ֻ58;Kx'1`%({U͘XXΣsN%"Mv1GsliP&6 &"PDЬ|NYu"eikWʭQKHx5kE??Ӕ}*[T}ZZ2G N6"yK1^FC VCu;z'RnîYayzʂC9ihElaJi;=r'AH1Y㸨fU0+ $\!'$ӛ!52G#Fqɑ$A!မSJ鄅u2Ӌ4xFvZ3L.R/A$wHR@$yn5+^6s.s:M8%ZKyG*s.K Mn)|)l(zғ3tN&I!$RyytY,[VRac<<+S(/jFY3#CzHmpˌ%bD8;c3oOԔ6[),]l!y31(!Trse^vnǁ
+;QoK5@#$D- MXx!
+ƝQe`c²@C Y!RrĴnAy%K@
+J
+oIڹ]Qf-]"Rv}~R`Z;4sov>!'V[ AYd@:ځd,7 ,*8 1AW,x,؜o|~lw?j?8}@~rP XQ?8|pӯG&W.:H#H H7HNjs uZM 5ϳRyg=DDkKGHo~;Xpji4kKc~o[+rDYdd+dy߷̖,Ȧ xc#ѬsѸd`l#o׋}~rP-nH;4 \۠7`oqe4I{
+go
+kR%܃BQ$@i@$hiћJCHb.V>a_նe_}ۯ=F ~B[N) %'8۵P^(5P_/D4I*n=YW":=ģ:mIFN%t"Un;eGvE "V*˜8ںw)L;K.dI8}e
+܉3E*f^HO֕CU6_{nQ</<k ߵ vF#a+E]Izޭ
+z^ܸ.-)`mkv}F&w"&7߈ZV~wB;Bh=~%j!{_Z >}!w9R1rͫ"-X Ycv'"{%3eݖ3<EB[ފR$>X'<gvO`-/0e-yaFf16
++}VQkuadrb 15*1~u;1_ٕ~iCL]ΡcV_`+Qzx|se.L_Ϗ;AGh1^g}"jz))ϿGoB(Bz"[<K{IE{3YJ\]v/f/=&5J<(]?d>pi7, 6RG=Ԇw=ƒ4] 'Dod=^i<#8I7<7-dչxKPt?$i8HD:Eecn GxH&n,{m2\=~CGer_잞s)k~okChg
+")x4+,unƹG0 ;'փB,~xq)a# 4gl67Y\@x,1(+l84Zn@iiXt=zi~^ W'GW HUlx4jY ^E445H<J3Zbl.UP<cx?=Awqw '<Δ)
+ XZV8p?C|/ @^{xRl*t :[]˾Tlv~`j,
+A]WIe/r=B~?t8VUt<Dck3+).Ek[-"^y`&{uo+YP2D̺B~e9 QD}[7'
+,^(I-%gK$ηOQJe=Ц4،o0
+A,g2kkkbr|X1c. 8QK `E*- e1'_E# #<G'+6 LA4jW"j3QF7Iv*"(ۮ՗3ʶ!*! ~Hpdt^&7GZb<
+1,,ep&Tb 1ƤԲ
+WLWNRc }ս(G6$ѾლI ?)_wQU6!Ͳ"fXHιx|c ˹.GSw#98yn7øZP҄T=1y<E0񴬅>GsK>qZnrBc8E{!XJH.8of?AE
+b>ݿh8:T \uʷڍ{Q3Gvv>[/(^zMw]{'mq Aw*&)oJ-rM
+Lqxżzbuj1X_&ONwxq4yq~G>q7Ai'P$(^c L*GRfb'֌Ҵ+4 `(6G9m*qI
+^Ż&2T"&~%N&g+HA<
+)Q? UbaYʎcQ!̌(Įr7]iV<`5y<Y)4Ue镆4X$3?eqnOHpݣic.8XbzMnnJqB6tYOg&9-0 /JM*y\<5Ԟk#*)l=HZ69'Ibόg$7:chn\C* m[.Y{$~Ǐsx/2tyudB}+KW&=A혺%t{֞'շ)d+6I ԋ髢WJlǯHe3_L8GU/~&M|g&"{ 6׾ f&>GkxǾ+(L<y6
+.!eTٓz}sU
+yQ[FFYhtUAVLOiW Xee]7a<␏S% &cx+i-D!87Ua&W5](XϦ+3 W8ee$cU`< ]!65X7uWӵ;w,Nn
+F-)mu_/>BLb^:>B!Ѷ샞xF nmzPQpa\Y.B`؆y|sGX6nu28c
+OLGx|S>>2ykȱ&C<4o1Uq<pO<q%~UV3 hwA0V[?]]۷OmO՗xxUmF0'YJ̹-u{y^:0ptpFrfFM,>}[MmX^) dGnAgU[Bu?IG0`AI
+>Ik2qeb.A'#?ʠQE #{ *s(1D
+VbFrWYOKbcje,QQ:_z$7$ۡ~Jpk3LN3G'Y|J|]CPU5KshF=qEW΅3Ut8/,ڋd8E3EߔH}~RV7ujkBPXLgimu8McSBA]vu8{z_{0!0Ju{1zV?u@Yҭa(zCi>Й| Cy/s ޳ T[)\0:[|?js( D~Zt9[SmMf9U By*ɏ1%gwB9=]^4+ȵ
+뉱[檘67a$~ֹs+u=QA[3'Z-\Uo*?Uܯ/s˷@32w'A;0CNfWBp/.&ʟM| 6ߟ_'M@4>(Υ U3j+} tB̼żξr+'=<$Z<8rQ%h Ur?VR Ƴ;y01gY+
+_}oǮ]mU
+<t2a5=)΢Oz UA:o
+2R0 g!^Uck>e;18$ 1_aOSU붣"].7ɔIsٕƍzX״ǪԯC|:8oR ԏg?
+Xz6 ںlXJX`⼢&0~^Zn9HH}e0{ ˭SmmhS(`va-q0y}V[=IUu gp.rၞJ@B+냦*k/Gvujy]K/bUpt׍nطCcJ4V¥ԵG?JW)嶌WXj|,;(]SͲ,x1idЦf7J\аo>y!lP<>(
+Nrt6I4<{>f Mxx}ƶun)Ӿv[^| [\ a9N2r)_[}վP~B᫄,ooR`<XTEA>_߂gЋ$rډ"2t[!z\5IA.Ia\:y2B ^Fk=!Cĝ(ť{ DN#h&Zit|a9g2gʘx W#/y)CQǰ[pQBSYDn`_ѫn*
+2AcSE&_3waZhώ0Z Z-A3`iT7۳OWYZDsNUCJ`^Uy5/<^5[rQo2S=g8~\Bc4xkyy֑v\7rK+WMx S94vfϢu]|{A%4IQKT)v1?)w-Ҫ<T}p|
+YJJݧϗ۱W8Ua!l9(X|G四Ƃz i۪rNѭ8fml;5]5kN fmm&vϾ]RPt {3g?(<()/$TVy!zt<7ALw"ԥsYrq嗵~l^'ʊLI}bLw2Tc<dK㩱0b7'eߝ!rmqުuh/[W`PK!{'ەJzm3񫑙$xv
+Q3EtvfB 2[UOnkmi_zY&3Dup%*/=E{PFNmR^J?8ڶ"MYC2<믓[ GƲ퍂y1a=7e˜tM^t69,pt=*W8A32w`/~ҷ7&>c?
+'sAg>;Wtlzɘ[>Ն~\4KxSY@s^'7IO[sq$.fߜ &:J2
+[fzy2<i1ŨښKUڊ>udA_ _@FƓ^s?G?v1vm٩EnNaЍI#Y^-m GG1}g*sjnkWg]JW/߽J@PuC=3?je׽`^Zx(G'a/Pj*vV= nwUj!d(kq;`r5{(\o"_ya–Y@RWOW?k–<iu$R%vV͵ ȑFelb*! U>Aw'hC9m9QKJtlQo^i_| >}
+yVe
+񋫍_|W:]%:a[Lquq[?$!4/ c8vmC82\dkW/ۚh>m~.wj2u‘p| 5=%s}b Zb.KZޯE>=?,kQN6_<˄ `h~{vSo,@FoS05?F~>z:-kЍ{;uѷUcɖ;˵rWS}ֆmhRqGJP&O{琢 GasD dA QPz_3޳gf炮^חwEMQz58x̠x|JQ)6sC)4-)ـ`q Tvh'>_Ǝ?4ix^`<&x"ރVkvk; -"l㓷Rr|I'l7??'Wn|ƭwBW߀ &Oxxv͵ØTU86tzo)T깃9'5-b璍 W ] '֓K_4M?O~aDgEᾭ `D8wTɲ ]t(~Fz>Um46sԌfKB1g3y {rW +0 j^_0gGN2hr˕yw,{t-+b:=
+:6O[}xEk_oYԦU>sjl$+s)ݰt":~Z˥`AP#)i{6~аkUoe2J;zC-&ڈI23C]dWqp<!RzKҹHBiLu6ἒ=ϧ_tlBѡ
+j1 5# _8J q^ ׫~/476[~/{aD2sȰg,οQбE:m&
+bmIEޯד뀆}P]"O''\"e흣f//x~;n٦NN8@dw5ޙIжKdfmʂ.T >@UCQӁbTuKՏ4㛼g͙#ۏgKy <"蒍[g%ʲ:taTٵJB>?
+ Kd3>ͯW擓Uydb[fY4 i̖<qLll;J1[W~3wdwL){JDhlB/*%&:Ygي0٪2%r7?
+m|j}DaPԲH_SQ n}䉵XGazk=3nLr
+TqTGt?\;vyj73pMvigTzW Fg9s3 "WC]E:ڟ&f]i
+w Kww>P%q(Y{;z$_)
+z%}ӆE6S5 LQ-NBL:gr{D4w{Y52/t2ѷ]DR70(m%;
++@jٰơPNbF4]_rN^&9-SR˕J6pD7
+#CS~ hV`<d\S}FvRn <"LQ|fIq;UOfewob˻];,k(qSOQX˺\HP=K36a?f\rKFWo9z[
+m,t8L|2T6tO?Z>vک
+Pt_yݯҶ뎝/Zf}*-O_>NR5k k'6g:Gn\i^s~A%OMSF/*+qg۞z0?QΙ9[=9O-k>t=\%/,uol5t?2!wVpyYtv߀ss
+}M-`т}kpXl{x,«ͻžBG/_Ѧh0h=aOVąhH`5T՝Y^i
+I9} $ y\Zv$p|]:&GO%wO_@'ADƳjvk곑i;mxW*+q{s81J %kA7S]oO#ā%& G @O 
+
+Fw&Nܲ/T HTqs3FZ]P]RJ*0b<:VMhtL91JQ}^)Ɗ <YlƨohGnM,?
+Tg!
+}p ?˨;ЬRϞIޓ|xF6{w׍k >ڡ:F}\;pw,BR
+JҀ>=0?D9U޹h,Ui.;L3djuQ;]ҪeiًoNٚ)턻Yן4a@^Sh~!gRߚX)96P.5Pgw+RAWL]HzW~C2l^Q8>Xj9ﬓܺ'st<̦4 $Y 9
+`RcY7#@kAEOѾ` n)glU$lӷS|JmEO{6(PYNϚK,g(gamO<6NfMʮ C5Gy@}YM(W:n%J( - Ɂ&_ߕ~Olwz <
+PT.OQyI& 2:kkZw˓g5 U%EjVr£h=21ڋOf'W`DϣKJXӟA8}v63zFf׿-;VSlfmR"wŊYJ<m6 Z롼=MoEWƏg1-
+0
+sY4
+{~CփK8d{`Sܴ bHʲ'1qV~ȕiriu_i "+%(/JWP&??+v*@]5t<yEըؓZN,PK޵೿xLs>i>֏teSw}a-g
+ kE@sT~V6R7fs,?{C>kFtd0|lKATd
+%OQ4= ?d5('A
+@jg~e:Pt|@u$mպ:I_t64&oMjr|v=~6E%ve_ N5
+t;BLs]SWNe7
+a;#PgȄ|'cj}P̸H{m!?t\FLij^^uKj.V|/d?O*-*~ EQy*r4k54mFNtGI* 1Ei2DHmeSo$R_N-}]w `ׄ$*姻9P<P4iP
+68jC!#;O 2s aޱF9k*WY!A\M^}zKtS:/ZA`|L=,) >k;/4SI$}`@f^&wQBjq0Q4߭|S"cj)!߇
+|݄̩9#K+֜T0O :h,jWEʥz3ktԈ쨹oVq?K{]>"cmh{1Q@a '}#1]IƖ7=]?<~eqR1+->oaWڿ;.anx4S{UݝD;4:^E%/6~1( iZe]<%ЃSfV7mbPzQ¸j YixOGCvoޝ?3MyKBEu wq5:>b\_1s~|Oq>=y0˃.VkuAİqY U[wKdx(&tH//ZL6-
+OEǢ?Є#T_oQ<"O-Aq,Aqy?nRGP١gWፋfzg_Ҫ
+[
+ `@Β_SM~ly: "_])tBQÁm\`PotxxOw}9(K|#}\(fa2\TL!
+1FQE8)ަ^8^Ӭ^88Y44-u XY?
+AJX;}Pt~|[2_Qb,wsE=gW>*SoW$y2xqj˕N6</q/:(y`sY;L
+RC_T$;SA⪻(4g?X@Cxn{%P2ʹE *ORgAeѿ=tse\[p G >7$Κo^ꩰg,sM#s$[.+/]z[EF֥mLm_wQ26ATB"~l:%6HhdtΙ+2ף=IwYgǐ3]4z•mdx5wyP27AggЮty#z: r_գbKT\ZVr!EF"h'$O#kQej >;@a.*<|*Pt}vn,
+{3_pdYOۅT6)-n{ux#Zil UYƏ-)S]6T
+PEE<ڬAw+ԙ.sqHoil R0`H^*z
+H.o}LRmq4{Xr?21a6|G&de r - Rv5{EX@ɱ?rQxy9iauCP}{yUwN!R8V*G,ӨʗoΞR,ƪt HP0]WKǔ%M&I;
+MA+㲸jg$6YWr3N`ZH'|cfE +%zWegCT\طlҔ޿r;,=iJ uMk|.ޗFL5ַټ\~M V2;!Ruc:8~;vf<
+* r
+HɂvِX J^o[lиWW!5j
+F2JoptQEC>Gb
+'k-R/
+?p,.C[|2u}A-yJn!r8zfHMd9_T[_0.ixC;m2 ʷٹ?znZb.`|Ctu&mG "{4ӷg.]]Dsx9e*i˳~|,os}~
+ 
+*ɖdrѨVN[ҿSB_Ob @q(9AȠ8Nr(죓o7|F</. ><V
+~x_䘳Lq
+
+ 5W}@AqI`OmrY2
+KN[ ?94RMߣІ7k
+:>(R e%O]<dc Ojn|V IX<@ׇm:/s=*Jf'me{ރؑBHoeðP4RP."V8e>ۍ_;P}PV[5rg5WleZg ~?ΰq[w4{[^::ʹ_۝'7?Y_;@BMٹԽmAy 2Aeلb1Ny{T"jbRfHS[=b no:mk()J!06"uR
+CHa,iBR
+F4FB&7#邔9N>;ĜĔQ[a(Nrw}1Ο"<ۈ茣RY*';f صIS6FLlR{K$9HE1~7ġއ1=
+wjǕFy/cư5[8ڋ(Z} Qn02@ />dG >#@`Xh9I
+Xڛ[71nW$7-|BMC_!$[ܪ>nPNkraz~rP2 )C\mЩlv5sB< ǪhJJ1=oT@9,Li7a)6\Y5F@r~kW{s-qZ!- ϭYMZYoކWPzIl}3 MY@x!wf;)*ԸnT$ R'M$etms:0<wѮ?75{9Yoi9NЍa-߾hA޿CDx¹K]18idx4zw.1[g2x;?
+˶z&qtuuAL(?͛66{$('?kX㒯ebV5!r'|CqNx褛ܥoS:%ГҜO:* {0HSoQIoslOxhq!dBƠZ&?IP ]I)}fzj;T3WAX䓉l<wvU?t]Qe ׽q*=74
+ؠ!`gyɲ|IDժ^£ܰ 󓒔bt
+(ϝ6l_2H3w(*O?D_w
+mK-h
+;9:^wP&B (Sz|р@
+(D(}k n
+s?_H+= (k*
+TC1)^/cV/Rqmt;*@>PUYSN
+t(>.nt#oIӕ>!*}yDm̧jNWyT0_{DL؅q2؈YvVMnI]NlRsG}bԑs;\ y;ScRSZLZr7~7)qRw
+E8>GH}^vC[ZKe\j&
+'utwW
+eƒ?@gڼr@+ןoC^!Z3襦U
+OP0.p{}+ٲBy~Խ9fw5r{%sI*=/|Uر$NERɧ.B1„L9D^\PQ1..K@ bqnKN;wp I*,Omsr6| +{ُUӲXRa)ARL
+G={\ڌyǻ*AFϲ@'w'd9tx.ֲ/l鞑h++M*XO/s?^bW(b"L}٫U$7(  j>Jy*S oyvՇ:Xhu~SQiAYt<ެ\oN#
+CΦˡs>Mk5C9{CG\ww5aU;ϯTS%bjH+څ.u+mkamc*Mzz5L&G/ ^o0:\6sgs m^q!y-C}GReqsTJn헤Ґ(ey؟2SkoцMNڹݧqJfC>mQͻ5^KR ܣ]ڪނRkXʴܠ+j(beMʉb|myM;`,^UPũ7 T, <N\Y %u.%y-ruKy
+w<yĵ+ϵ);j /4&[\"vg?%4Ϛ<[Da6SY3f w8M=e O}`k-)pZ?l>
+{U1Uxg>~uV܌2˂7~n
+d<;;SR(cT~yOiz]
+9+,JFmS pUJxf5:fJМ?Z0}f /er3Zޟ^`l;F6X220fgԥрјrcf.)U>nwS[TY}#@-NXx~؍M
+Z^
+W?Xs
+U^S%c ?
+s6:A.rZ~_R?"I]i6>_Fgϊ2yte{z*[7`$n4
+P)%eG6x̧]A ?]kV;.?ƒZ|]}n>k.
+@(@z >tڞ {'A0W))'uatI?$Fjax:&U! uh^Sּ.}_T9t<$Y kvJV6#>J:x|Wfj%$1Aɧ
+#숷6i_/׏꾭P^@fsKX1uߓnRi֞8+导L+Ǖu):Yh@-/S~6L^{CF6AD/QK?gA<1Siv-}[8IR ͵MŎ[r=ϋD_nXONT5WO fɹ0Nvx_5?o&y(t`s ۳L#K3J7鰻\#)Rdr&#6lOUc;XMz|w}gU9>W&m)=(U3@4eu{> 0Q |ˡוY"BzѩA}V⢻B;l@7h=<L6{읇1ŷKFQ+:Ӈ' -AP,A{w;
+(d:<8L!ufL@--o*8M/-hO ?)ΓFܲ:Dh=:]c@:m)okJ%
+)5ڨ.vLL)*WNHBѴSq*x
+
+kH4,* i(E$<A*e\\Su9
+~P<iMk%@+O7rˎJTl{AA|o~rCMd _dLi[;h>_ZPa]F%QjC~=gEd:2jtOw:g3s(OV$<0oh`ksUnۅT B;ϼp5
+Uhvﱤ#Wc;!0Rf ^_a^z=A;5AOU&Ԃ$<WdRWIo 䣘ʝgo$[2E9f\"yTDܛ7e(=/MXСB~P@vb+(4+
+5A'
+Yج}~+1/'[
+
+,Dd
+m2Dc$߽
+ .Z6NW@ϋT|HєCN WcfN>y69C&(s75̭TY"G~\xsKmR4a|ryFZ}OzV+@=[R0k]'Ef͢džPmgV:/x>ƸxASxormaԄ!}0d%.;4?׆,(+`g74QT . a뤸OQR
+jEKyl6_Dz+24
+ewն=S(Vn6-.O)*psv_oWLز1]ݲe_7TÌ=XE^g *3|~kC?ˬv z~,Tb6ImUgrzspf8 YynӖ-O6m
+M _ &*PQ<RqjT
+;d0oˌjZkw˻GpW3_&v*n:
+ ]$ kKEKA}N&CjRVZg`qzbY+KWɾF^G#>UA NC)I])ib\{L_Iݿ];
+Ui6{Rmȩl._9%7`QMpBzx58eR~u/*jXIvnJu %b(8s CO\W5hб>@^h7K)0Uq0^ӤiC%m;Ť%r'C>tM֊r8=IMʛ
+ngʛyώ[_ 7IJ`!>kLq{tf =#?n i0XPN݌Ǻ93 }S|&At Nhky|dW:1u\|V˞ǵF70%џkffk{޳ޙ/\[Jw:,Burp]ICo_Ww:<+E{Wm{ue&z#k]3 drט>Zil=m- ?Xwg}%3n8蒜<Q|Z< Bz
+xL/q!qLmEͲSņ-TJ_!ƙ~^HZ4˝f=h[R+ֵj񍗙yS
+a=,*'fyj$ )q!gE;ح+uϣRpQ
+SV?!t;Dqn2K>#ߍ*>Taj=Uru~/IR,R[sڨZS+Tu&ƫa'+NW\l_)eaCi]4~QE,;ʴEvS՗
+"rieOWꄏW399庐UJKz)-w8 Y+[>+# ^c-:RRGj3c8'o֖{p) E96% `fq'Zt[״V),b jQ伿7^˟߰^n$ |Zyڸ `Q݉(j#gWPd~{];bbXnPŤ$Nwj%Vnشl2!>OSNZ V_"bF%!լۛK
+FhsR]B[e^ͦky|J/Y[\ n)skEv6
+dYyZ
+)g-3c*ALW|\MIÍ̼%b{nF.A{h6dViKK0GMN-eN0 Y-B*L@YjC\JlotS)[neY v*,~W#hlIxϫUO9>{XĮGT5˿3sߠmMBR*)Jk\B`Ʋ2| *Rm)S{4_~RkD
+Xt 
+ J@z?!fWaIT%!OsVя?Ai@NZ1׀V?@3(s
+<i5 1;[\nRj̬&xcrֹ;1@"Pz(xug*M ;n E
+H
+ȭΆ%~E!>v]ynh0)gW>Kk
+vh%tq|BEyj=nM=X3݅ٻukmzY'08,-65=dݱ
+"zbI~Y7
+-7SLo/ aSVʺ֏M׍ᦰE;<s c7}[lJ7|g
+ gfwP
+K̓=WVAֹU~tlEM\y0L(fgakr
+K4xoutn5׸Iz*)IbI<YxMW}@s@-G@++tZLP${ވG1;ϻ1oD ;&5?lr6 K`7(KNIt3}&5Y'0AX'ba ?
+u;b%TJw\yl 
+3x€/L^GݾkjΤhNи &y~WU1ݙ9eV،vc/! +-UwBGU`03Ec6/~hQI\3hKGGioŷ>2D HGԥR,Qt2t~|s-G+ 눡]`LE~cg[m Oҙ*ލҕGȶ3]a﫚)Tm]qqRŹۥoBפ0Jۗ5nnق~`|W0\g"Xҧ69_f _8+=YC.YZY.{kse\ǟw'\J!N뭓rEgrՎjߟ
+*# Hc΁iN{^O7 [(rt/XS~S˔:/1
+=USyEn-8mySl>Ã'ܥՊvN/uP7{T˂gdt}>FGn{$[9fԫe} C~lieQekIL RoI[Kn]v7'A}y># J PIFgNՅMެ.slbZnH&3L~p&_%-:\KwZ15M.ڸиrAZ'EG]I|i}
+
+_ƬeMF̱>WXD*%mr"M-XMIתxkp4'4UsqQh*== vF2አ]ogQ`F.̀(4VzriO&dvkc< 2j=dXv_C1B:K&(;~+7ѕ7%9_^ v7!<+&ş7n^RMe6*-"wRhfsA8ALN!lrHK[L4=z F=>TgWi}Kj&թFi;*Eͼq\Qm(J+Zớ7vvV/)6.LdLg}tM/ḽ6xrܟê*N\~>LnVҘ-`B5W+m]x5J;6 endstream endobj 27 0 obj <</Length 65536>>stream
+8/b@޻<$\,&LuW?|6<Y>sZfk$g"?N'!?3&c8Swsg~ڝv|JUߨbuzŸI}O+:]c%+rfȰs3Wjv=O #T@cB)-OoEIrR4)EI⇘n?02[SkC]l^WՌ+[6(~ꥠk_&]Q5U{gLM,Mr KS
+0),`52s*aE{|csXxdA_̀TZV{"D`I)a\K;)ܨ1<)-1 \S
+gSoI!D}"O|*6
+C % ]H
+<h{j@\v}t X5XPrKRovZC HͲH:DU[W0${jEC>f9UuOqҷMq]ARCez|~XYj_d=+Dlxpɉ_
+ ԺU@s=8Qp]N(|DetKBl"9X=t4jLۇ/ 5Ƕ~s!fl܂7ewYlݬeR%}_Γܶ}psNlfA}+9f~]߾ԥ; -f6YryqUX3oɲoiT6>Y0He:fx^ VtPkYFlrb]>S[*^kDzׂYcKfZΚfN118GfϤF^ne=<\;}. S& T@'w$-)޾\[W|uVOF;MX}VfnMEO`d= 0Pk!sx =OJwW?ğ 9 @l'qR7ꁕkGtűvܻdhؗV=mEհ|eNTg;YtW?+rt֡cBY-#S]J#zVݖ[rf"wyQo>؁9'Y&d.ma{4_F=쾻UdirK>.y4 ^ΜC-#s|\olnj`قQ8oY)6\Sz Ck笈dgPjAtΝZ KUw5_|?M
+=b'sA~Wz*SQ,TK3)^MNk5yЯџRZYz Nʪm2=>POZ/v9G,ڦL7 <.[jSll}~newI9ŰXqN<N?֜+R}2&˚_U֐x6[JkŻ){)5fp_֗VXJEC|LX>8ݴ+7+ykHYp0fYY8*,[pԵ׵йeJJrkaMLe%W^uIe;3i_rkfM4gM MlX_ ϟJf8!*Kqа(WVWLE~< ۟{TB4%;"oB.*ih䞷82?8@ˆ> ԝIkw/`o%s-7%|[prKy{[B~>'i.n` >>N뇮]l?!ԷJLAq:Z{ֹéͺrX*WUV#Y`;&{U_
+۠Kd^*?ѝeU^,״+u8Um"Bԗͭqwqzg @ЫxK\s)}$ZWRxZQrѿYl[#w*=iJ;pJ̷i}4t13 +4JeX&V L5|%MY^&gΰPQkKeZFwun؜V[sN!1ʱcgΚAeeffM!mc3V;RY8 gv~+d<;2GPRt0HŸrsw>+OcZB{BY'/rѻ 15}QA*LԘ(dls vWW^aa3>';;)
+Il(šz^_AIA>!*_Tq/6`?G|Μ{3O`4b^-.D-n5"OUfʉdy~`%lFFvgU)l$w n>v
+Ssc9~~`#~XZ}[eƊ.{sdf]<܄[m\}m ŏTX`Xj?MF#&1dyz{XI1~XZ-OQc%ȹC®/>=:0M?mĹ@.j縱)%[\t4VPX!ʫ%٘Bp{2σd̩YJ˥SR*w=4F>oAe̥D|.$]`Am*{>0wZv–&w#3⻇
+
+Ә鐱zkD4\';iv!ӟ XH(]S4x$DMaD>UौPxVQkY{d1D,"j]D+_w> KѪ:C\iA
+M)l
+Co'Hd~oxefh`#oqm BFG*븕g~#Q"Q=<z_
+%r_G.Nlה,Gʇq*[_uZF 4vh/Y#Sb1ŖohtǬ25_k=JFιdĜ$kkClmObsue& w}"ޚy@grFM/;gIs$2&{_n̖źǙt4o)86d- (ojSKǮ)
+= w1,:b{4 4*H?K
+ 5Qyۧ
+E|% *>vk<b#}M e#CIiqpL[ӕt鮗ۢ,9/YN›4g/uffS& dfH (z!jt4%]#n˫{,Ry9: Mk4Y%և詵ؼ3,nxCsG\{fߵ&) 2^_yrҺZ\Yt~;ݍf3{Ogu ᨄzfN΋d/&qa18U7S~8: sxaWygn:
+FhOKҥvLwڐvֺۚV鶚C6HmhM-sɓ爬ॶɞF`7^LnW\p^YtvZ
+Z2e00& U?RnQ uѳ^SXV"~T~!j}i֡ ̝,phvˣx7ޗ^à+ӻ1+>c֤UU&K}w]6R)]nJ+N 7&cѶ(BV N>;yl Y WÐx>S}I>,clW;ԗn-V, mX_?6Rn1˗<=TK M*>p훻s^slh٪5׺Z
+*֑C݇hy <?FxlƩmyOoּR-O l-?X{ݯ?.]Ft%)"fJvZsE5&=r,eR7,V-j.Y 6o@JZCN/mkgVlٚ!2]CvNk[N_τvX$J5n͏^[*SX#jtҵu7"u)#LNşX_w)B׸ڷ8{O)q]AG**F:ռOޤ<mW)eDN (qDebZ4 wvB>?;ઈ6
+/s^[HuQRGh[VWA0rT\ѶL8*u.P!ш\ӯUT1S*[X*- KejcmT#wY sk ov:v0 V6_I-LvRTݴ<W3"8ZQЕ2[/Ӂ
+V:|:|ckrnqU|m+CLX<[7nzjә);(d_Z"rg$vŐ,4}VƂ4WՖ%)?~;3I8W4dS>KVE7JG,[/M=rz8ſ=*?:w&
+f^ǒƍGyz9|82_ݵr
+:4)w65&r)JF:_|mFܐVy{F8F!
+0M~sq}^OzNMmTӟ*2I1gsjTiVySv]ɳcxҳ!Fd_pJg t^!z<t'~\cvYd7!2]TgMή.OikyfvAsYkk^ƭj Юdʍn?Ҝ-RlȺYɷ{p=xIY S?8WrYrmf ɖ7ye>2|f _,
+&qa9Od{+ulVKqì}a*t%V6KB
+{ϻs'.0x32OӉQu0N㵧@<RjS7R;-:ʩ<fw!q[LGUdT8'Z6ae+6˓ҫHFaDm'wj?)͑Dc"O է||(^b,661;oHfJѢ1acVem
+T澓:5--R0
+IKdFM-|TMty "|9X~"b%݄w*G RkYa,篭6ƋSOWi9d(dͱYJן7؎m*PdTI~dA!G"^fuvDTW%D,-H Y7k{`5
+`U
+͢`̶k
+@&D5,{_  WHDoqj믴u2Ga3x귡ety꿀aޟ$`o[
+| ^KJ !c'.IlяwASpX(uqԵQKp'a 1}ޖ/% X
+ .[$x
+c\%-M1{JIBCʞ\}WoQn&&X[q,
+x~1Dnng3 k7ȣ5\,ĸڌS88L}ꤾc~[wQK%>^ΐ7vk`'*nviwm3{5!V"_*yVd2fںNyxѪ3.(S+N!3: <QIBe(_4a"QXZ1rJc`\nd>}wIܝ[ǧ~AXoEF)Yr=kj{HYƲM7f>Jϡn09ۑuɸ_W'>*pfj8z[ ޯ]nd-8JK"}fz;I[
+v#F=:V[G2>8ӟjB6)^r7W3/
+
+X׋V]vMIh_d"j$uPqƋ}~}
+O̊kh;98//=b[S{5۸ q,AX=,g{17zzjZs[C-MdE8Zk!c/QjmRIP gj!WՋ\:]J)aCSczroQA Ãᾯ.~yiAwK̓jLn&QX!FO,A|^**a
+lxɾ2g UA*?ğ_^R"8mgg\r3Cm?񠊮zgl3عtL]=h!LJ2][,YyZ20Tl+0W!»Ҟw5Q.˷O)TNjEw|ٝ֫w8#}X_8cYC"FmՒoY,ɲNrrZ_csaGATܚbM3mAUeXyU^>ؤ\ G3"oFUΖ}:]f8]f;/]l9J7ߟEQ1MR2hɲR>0~Ez9⽝:գnU2.rV@LJF|ƮL9fؖeX2Q*;&bTuD^*{Taw- w7ζH*Xk-gs7!kR[fCZTMA=UUUIN|}¹9e<EDD/ϳ($ O\qӼ3r<Sl˕ _lyq7=w/ERC5Ϻ%r `1sgaė!^(y1Nه oC +)盷źRdg3-;ȝz{w%S9\`فX ">鎽
+cP
+Ŕ5}AD:T#+mS GZisxөs)/vH|ɮݻY!LZ#lA$bڂa<V5uȾX)aҬ,-g Mg%o_2-:J)-د̭`Sr ~K̋A "!YGDſZ/Fytl҉دϥv?b1<KM6[jӴ \):K.AkAHK쪍
+Xv wCĊGj]f
+Xpy KУ_Ra)_\zVqfv ZtUsLz˻<Y.^3Cu$i4LASޖ:N/|۾&>'Gܝw/˫~ hգ*y-+v.s
+ ,x:\lY#*14Fl_ z=6%Qtc`U٫/6-T;{TۼQb'.^
+'|Mn0We%{w4aҌ?0iZ3"09#z[?X'$L8`=mzpLy.ʆSy̚ &XowՖ&TBJNq\eO[ed8Wd9ӟҸIgwC=MW> MgOz?VN?}rOlp9X\dfcln
+v%MJ]t4VjJ䠙O
+s1)9a?d3D3Uc[ԸAcM]0 f]ҵ 2n)^7qW ۄCgu6mqPwF3OyWa^@t|GVIi<C.߱DdЏU,Y-EWT+bbr +zz+[zm]@Ժ,
+F 鲿}o9tεФ>Q6?p+4Mj5\mwjxo ǽc{((zrN|om>!ZQ8ζކݝntDvyC:E{@&[ FƧܯڹ׸lW+<CuÐzhfvJW%Q?MebP|ZTn_B1[;F)B,d0[#Z/q+VJlUAPyޖMyMgo]Qֶtے#C\po*E(5 ya8A~+-ik6nYPu9!DәC[X.6;)|U3
+zi[# Q#L"H>bH$ '{qyuvU43PJ'1JIҔ?pغ<K(. YDbAV~D^h, .q0{N[ \ qYgjq
+zL.w0oYyMa@Yis#C]kWm:N|"qQdo23rʝ^D*CIC q߸E
+}kn \.5rYi&44<Ҭz=2۵BP.6'absc貈qiō2U1-E-v^0==HR_mŻoJs!3LAoٝp&t5ǍT cz陰PYOdFax]<Ⱋ>N ɢ$btϦxIF:-e7;'W)G
+p,E;JK6=c;c.^Ur,6
+>LWp6ˇ5œѫt<*Bo ҹQ MEVh.n6;}rMp؍}=[x܈C/X=fzh2m[Z#,1D|T]ddP?*f^ΞmP8TB#dmO6Μ~d贔lP|n@?pLG7>f(j꺦c+e2Ceh/W.]6iSWyoRBOf"ۣd7=zas r3*5wqןUE ah(a`ENz˛SPn/_a^>K@
+eqS*in'_?!L@M[J-|E
+Ψ΃^s5&Z%u|ʯz%\i><f[K薹Oj%Dֳ†9`s0e\C- lŃ6,:vV srm:o{}tQ0j[pc
+VKo&dnH[8K\r^CO], 7¶C~ <R|?^
+Q'Am`]
+DV"y"=@ۉ}<dƪ<qzAu 2 aN
+tx[(d:splIz
+n.[2q't~e
+=zϳ5'3?o02_f^{#[^ekjj(U- ۛ;%d&4Sf4!iƜy"˻&
+ ϽE{n;u$ﵿ|"L1W]nXmfY`e%sQc\[{ySBs_O$nAWߪ33&{{kN`%;4Cy>KLO"5h˅(3r]N/5ցEB.^nBs)Sˇ|vrkM,H0MHg7ҫj"}qbM9wLF:f֋by!~vߎrgC,;*bb6/fO߁|?o}=f-OўBjƑ'hn9:<םٽ[Xga6Cc";1Ͳ`7%-y=7aq0sP͹ju)IŽٷMv?Vg8꘼|fkM<%1hk"cgmVfC>!9xD;aZEӨCWqB}x"]>p.#h8Ȟq;L:w ֹQ: zSwP=$tQTtԩ#bEu[Kî?W6Wɸ>Kr{$,W`-W$ڹTvcM)6{lֽQt o44cHaeGVeOn)fRA=k~1_?|&<n,u("z6O!;9}>1+KxL<K]*w
+/ʕ甮;/h0ouQbp b h2<< (:3i<7x;+VTD߽>8rrZ1x 96duyw4uk67k6<ʓ%?"fϕtbclp.d
+{g)wUӿh_TVř~&1; ]Ź3?|䓯[݂dQPv(Q5S.]^J>Űs99cKrTթêqB3g2mN FV|?z3)kԾ#kSB ,Pߍ(:Tvtof!@U5ַcTݽ8bx|ayFBrIq5xf5N-0&6͝gKCuuOLO
+ T(t
+.c_?\cu㱶ڶI6tspwIzK,dF8,]Kԋ>((w䩶J#Y7Ž刘sm7fuufO5Hn54J <
+b-ɻ%, 7߽]_3&|=<ڠzm][KYu
+sDQ<G?&sM7.ўW.>s!F3Jql~ˬ/23ݎn* 2?MR@l{He赾ipXq1U?~Y6T] 6M|]i=7}ݭ_׀_rذ _7-:yԄ.V̛"גbf]/C=Oc|~ӯ.G1㋋\6M5٠Nv= K;@0{QV#-WPZqY]-*6FsvUbzM)`IhpBçB}_
+niVݎ"§BY~{}W*v,1b1
+rZΛ`vDq>bg俩<x|xS޴)wSDlL|{-'5'8ugwvg9萵Ii&SL3(:XBU4uF݃Gk s7DFNWhn>[DY:A#}6xI֣-T\?xcl4 cH sCBn ]MyE}n
+vx }<}HF2-y -Ncϯ>P1gshfi0dHQxRhqݪ ,K)4O+ P?wB!ͬ!C58#+' R?-rۭ.;U<Ȭ
+22C0ؚOz)6\ r]x6bV#l7HzZDaӕ1}'!nߥm [n1Y)9@O aۻ
+KӅSJmbA^ɤr_$6EǑb>`!<wf-@*{2G}!_p/5NH86AKsJ[{L+kZ xxzF EVW7ncȎkE4:w沕cT6rKf*eB}A/vnmdgͯU3iҴ;a3<FJ)'Rbj3+Kcz@aWU‰qs"[g.o"vtV98~r}6]sYU\upb8M hnj)<3-bl=Mm7ԜңuŨDP3^`8OqdՁw` l]C~}@#i:&żrɜRpz.9-U\f>4nyQtzs߷zHf9t=<SHȶh?$m{6e6Yv<|vS,M~m00H1+965wª;9HM fhhz=ɂ燱6[ܙӠC[1F/a>aRlN'UG97[,ݦk O~*SH6Q"K{_z$PQݵuk޾#מ2[O<ɝ]aA]eأV~e:%1r[f8"&ړp.g{ 7,"!>~ kѢk>~3_ǩmic-lᦎ FЩ+vp׷#syR˰ NwJ;%aJ8L{[qu&:tG! NCNd;XgW_~_X6``|XD
+f>+|*ٵP,]-f|I]Oxt>S,rN)"V :~Қ [
+ :AL?^>Fzb)^w
+7ң>bx'ڡ7^]պ_up:lHu"YNZ]hw%Ow良;`}ې57!
+'sC)M_uF*)M5d7AݻD J }ac M@I``wYwh ؖqa#5[@mcٮX6_ch޴EGRS3KF
++΅/=JXLD
+JAoFl{or/?*vQ%E`:b)=L~֩8_Zr9.sӴ[<΄i4i5l6FI9DډmF0l4m v$lMB~WHćݩ6Y{vm5 m|ev'5RսP
+T sv-Z7.ŽQyY]8Fu ?̲T6,蚿C]/ z9Y/O[m=[ª>LR?͎TR=3j_k ՆuPHe<Z 6ʠ^2\7# UJRY:BfYv^v=Xn Gj7Lm+Shf\6\2r}17J'>-NTj]c:_E䋽(<.Q)#ɭxF<;*"HFF}n!<TU֭}}%JΠ(0sD9{yRXU ѰE/[AVeC( W&WG`|i)N2#KZ52[g55R37$Û7l +&jLOXkQ}VkB 5d> 瞝_tEYQKIR PZ)1X#Z<V$;A<q/63DC !j= -
+ֻy
+ :`O˾ZԢ?sIzbH_opٺa9'7!lLCȶ] Ȃ]9y35ʊ%-y;X͇ 8.gR_.n+`U@'L]dXZ^m?YWڏ/Ȥr,%m* IWjcp?3:i\Z+/_S׿']8wP#ݧ%y_'[>^WG.KJyrIEntpkG.];R~l<kuz~n[KՃ ?L}zbwä__lʌ_PϞ.qM:K^/n'uaڦff4{vubf汗yt
+.3ۏdNUѺVk?HɟgD[U>4yX\Kseٹ6'N^z<
+Vy`cBcE.ctqsq-Υd
+ӳ+wy=~C)'X筭$Ւ~A;1zW]6F kGWCdsqPAsݰQq֬:pUMs]r^B d)7)rǯQ{xq#yx.zʊ0=YM֖s5'Qf/"$3>OOzk7n2M1S>/LOc1Aأ_h8B<+[J)6~aY+ޭ \9,TZhUg?X `^ϣѭZ4l<,GAT崷
+Tw;]:촚mmCeaR=_s3l*6$=vxrp4PnH`7уky 簿 _?V*z yvw>ub.̂mо/GBSD [Pu絕cbmY9[ݴ5C
+ 7tU#o<[zoiut|%}<Umt8ǴV޽9,OCWkY)EVsfn4`㑫 Ņ1S(1y?CdzXfoQ9rrmKѹ
+lR{E{7)'z;vBLl?e/ Qܨ^P`- #<hN*qj)vL]K
+~c.}d8բRwK%%{s\>< B-l^XnXv*W^ȯ1o7{Wtvr{}1̆Dwe/7;b'Fn]kEg05'mFK6y8l$;7PdlU,Xnak# u/kn׳S9Wr+g=3t!=\v1i
+U3\Jfdpΰ+>'eiMb䜉k')ؔC6Kb9a 0S) -S*d-kI洐5e%vF_E2z PN*!e"ZW^#0`- pt^tSF D}@|-%``&S,2z[ϦGEmBjr+9xQ1p} ++PAS4L9r
+&%@ m@OW@< (
+ihͦiF) !9rA/=toڰE pԫ]k#&ĕ\
+#]xh~Mʙw?H.<!?cM7]{>*^el
+D€X*P $YI@- 5OBki844_̥#6)VÅ2#/hӃT[KOѓ%ZndϓtmmL>L@ZNF7ㅤı) Zjj~/%{'bmt^~vde,Ǹuz7?Z%l_.VN*Mo?'zOb5ڂoXnǻEuPtO}6'M3e p/ütIC(4Gŧӿ:8x-gDm 6-5?uEw+{-?]Jbt>ȗLN'f^ bwA)߭UA:B6)`I[c%`6om{@6\.[v<-|&GɇzM:H[Tۏ񬱇<iWc>7Жkա+rVRQ/Q=1:99M*};Zx9|
+鬰ݟdURヴE{u3|f{k'~^SvŭETwFc1Me+]~:</~_-T<?.}9Ngi]ث[iI^oeT[෹dgwn<σǑzE?HL{fӹݦ •Vτ'Nn%6f&LjGfpo/d~E-_N2{:yvTㅐ`gNΣ<͑ZhCk ^[wGǔGKY؍Y:<۳l0,$
+~펭ɪ|BM#x`l=&eAۨ0<CzyWyؿKH7uMR!;ɾw'6n.wokE9 6Y2d)EΜy}s"'o"-fޛfg|2ɈGuarXTzJLk5sl
+vKȪ}P0^`LE
+ܹhW
+BkMѡFUSӭr~hg(NwP#h~Z^kԛRvٔҵY053yz̀ڻ>zz2(2jk=k -\*':Gş+-ŔvT}U]/ 91ۣz.ԩs-w=k>F'_-!&uQ-q\Qk P(1٪;K VR,zE<FpYܨ){T*Th vzT*] LzSo/>QsMhL0ќ3*ZnnކYM"jѷR
+|1@5嫪%T +YOsYK5,E2郣dܷiގKs =*Z5];F]ٹi+S+5[ jkLHz;io:Ȫ0e:ޅ,i]lu%^ g*,O X a2M
+ԭ9tR;dtz4-j#^Y7ӠB;^T(d^Jy^/ڢ$ qDS],*3GWާ\g<uis۷e*a{C~<$6M+ 7fUj K DGrX;N7Բvښ(x%ۣ\ci T䲢3(Û\x6mqW<ᄲt`e]a!udg#{`bz_ @A{<y]<_[Au+kBUˠ(]ؒz:Y!ًT8v.±?~ Cd-0\_U9͇̤۬Jf0ҳ2p>0p`˖)`a<5VAzG.x{h/dֆw"3J-?蒼0yQ}T,Zk'h}_ xwNԁ{0)6imU SGajk O-SeLˀʻHueL݁ʓN!~1mp&.͵e.٭/UĹZ!-G>94Iˏ18)8Z鳣0rb4#ц@h6)m|bDÞe1O37SĮ`V|1{:0$Kɹ9:zQna}o_⻡g?!̴R :ez.5t=iQ+3
+{T6vй~#KPHϑ[U5Y1oŠ"Fl_c|1X;ےI]is̨:ꩡQf 0q=뮟,İV8
+>MxJPˬ_ښwntカ%1C܊ϥ X;$+ ° 9jlT K"[,zmt@ޯj|#ɻMдj㙾:Z7R-5x<']^1dKXe.h@P
+ĩcQebz1c9/[6oGKeӹMdr%gd
+kC洝2YʜUF&K4/V{9bgVkJ\f\XM܋q r>hނka-Ae)h"eۧd|w3,Qo`CZ(/
+h
+*6
+roh);F{fnQn'/zrD?Ns}8d #b-\AVnDٍ&9^vq,o̥gGTHf <!³VMpEC NmVRWK
+ ` %h `Wo
+r+J$T
+8sǙXky2\9_[ʂjDhR6c<pC6*YRC#-^973zN2^CU`ZuǛU[k>ѨxU
+>>[
+NzX9jk*qNV~T,vǼ!aF2|" p㉰{'
+M?(BXݮۈjGO6xɘB7J ͳJ UFT_XSGpjPA|#˙>ub-G^F)wY ͟ir;pW9/U$' yifE|٨Xϸ0^TA<Ș:b55pIiD"G%K˩Hfu20myKL)4{"ʟFguw [VR[i ,'_RQIp,} \ʺ Vf
+6BmJe)5uCrrVI ے٧h^X=&B+YgKzGwwV8~ϳA1Dg+eK7h
+;hVP{̯V '4E&m̶X&X
+BK.qd4Z<3 5L ΋G 24]mUj_E%%tr=4&WMDC*ݏ\4
+0~߃a- rsshK+";UNR}u@GAځp}\K;E\
+]-r,Fz-l:v, Q~Nzʭs<gujvXvN`쳸axYG<9N߸ċR(ucڕ8k|%J× 1w[QMNXzaTae!k,A:iesdhAX/,<2*5"_ETTMoTh_+{-O+bjV涪d/KPYBw,S\{9f':*5BK]ɰ۩-paUpñe>L-_A,Y! ((0rC:0`QzT=Sז:{U0.؄$m7Z;), g@{tONQ
+
+*3J2d0z4Kt&vB 
+%
+"aڀ
+i P2jxk@Pú 5Z8ЩtK犪" xkR.>4J/r_LuAߣ5qGO~wO@7E@RGODsOa]3mo#s`X.RLVE 00}aMk7e]$c 4W=<&*iI𲀋5J!Ql.Wu.`qoi 8r\xy"Sk
+9kdm8:[枏Cv{@g?U>:My{tWUb8i?n3b@?Hyjw!SkSOV<%&_$_VZ#]}
+kӜ& myfMGQ5GUK/U?Hj;w[b'j&fYz< 5
+F 0^/DE:<?=S2̒͘Ŋ?n[t
+TO\,|B*ަ;rv;WRAo:7u:~Jӥݻ]GwkY۬nԴ(F#웾R^~btX/mh" zyNpJ)dLq>y)t'2 rnaUvcDzS63l5
+ [͌/|j(GAq04>O(j#ZFi3kѾ<4sqc
+jjce|'|4g
+䊻pyLXd N\]?6@5U<{˦]&FY:i;jAGWTTaK *&0{bC\4f  ͧvhO^BE^:>
+~F8Lqoie+ i[oQʑnWbSN[6CO3&H+wa_EV<YWi7eydRE$!YQbCv}4l#[11byqVdOioeW獉>A+i9tk\'ͳTŨSDQ˵3WY_iu! !/e꙼?Z"FLa< %DXc"ⵄ$^;޴2dتMb2kӪhNWQ&ѭաK=
+,_C>C/iiآ^F`be=ǻRl[ CGD$ NbSOW4)W?.S>*Om.|l/X MNe:^cZ+c99dJǁұd2Z&z
+^$Of]Lm2;D+sʥc2,9zAo-^LҪtg jG=/og0w_
+f ^0cCJ C !w)+m*Jd~np>$f!-u~8iJ2 |,|sr3-LJhk.R.[r;(wy |ϯW{9Sr2n-پ#Ʌ' +t>Ϸ| /z*8(X2a|g-4͚7}"78_F%UjkѰ4%x7 \W8ӿ1Mxt>nB;pܽ \=s:9s^0hFKeܥ>ķwFEnك_?6G D6;J֙;!4E6k\։rv4磧W?9As:яm@fHipk -ld?-s8ÚgtI[:;AVl~~fag ªY2s=S:">؈F T)cnI(_
+u
+6Mbj'-xƝz<'rJeđD 9!b;hsw
+Q <-]ђj D0Fl3s<<C _woC6kʧW'/ǡ *JiZMh#ezf
+#gFKoAOcttpU˙:m[nS jFq% ] I.nǿ}T `02 L]iЯ7OZlW gs_mTKjَӧ1VQ8<u~OQ46m.֦
+4Po]RvxFS=_nR(kmNgYu:Xh>uzS$n% >襫IY^| #zb> tGJo4ܺ]dJbS1l-;5i35f7?pP_OҲ5ېq%\ĸ&bhL1F lJilOgݤ"珻O
+:r]Ҵjƶ+! ?+&!ŹLiFѾmZ? 5hor9[0cz%Sk%} Ґt¾&{CNȤ.7c߀߮T,Vz/؇PJܥWiw~m\p^,XC<,kupL/Y31fFud`Z_VNmD3Qcҵ#[ёgO9 rj*w<s.{G͢P+'tNkԟ\B|:&ȷ~bhkŲ{:(ljJFY%}y:TtmhLlxR\{rjXTR$v\Zơ[)RZi}^ʟ㍭4; N[m4pׅ!*h!j5%?rJdS{9&y"9ND: $80M'anK|qXns%蕇 Ǻ#Kc|n;jd"u7hNثy6ML1;I% *k0^a"d+ɖd
+b~-
+9P@8jA; uYhUug9N83P͞>*m7yRtV,B.mAz4P.y ̳eqM1 ´,
+92 Ht@syn~s9Dc)1 jO-k4яAkn'8/4)
+K >@;]0_5)stI甌l0''
+YF'Wh.wڲ:B4"lmձQ67pDھFڥ(#²A)}qR=q'V]aV1 +UNs!͌8tA]$0In#0oc$ڡ'w~E[,
+<c&蕼w/$أ=LrsyWڒsFz [uq&vڨL߯s3 6
+,E~A
+D?y*/6?Y=>ŤW
+n˻9<nsm\DW_Dpc ?{WZDdnG^Cc.*TĭxX27qIlu>3`3?&DAesSS_7/ _~Փ~m'x.=ys|wxבe+}&Yvs/c=GKC1M wa[@Y5б<.Rڲ"fW3_+o/=_9
+L\4GuzavYؔFq͌`ϐp)-?EL>g͍s4 U'; 5[mlx`_kXMF?4p-ߌ.WVG˳[-n4V٧N'^O3:j=uneuvV<OFfЃwC2t<w'ҳoΧWϳF'u^Ǝ)NNOVg6G < #*b.^Rt}ڃeONme GDidڒȹqez?^վ~iV;wQZm2W鹙*V=q}~ԫk]d~z:6iCr؉dɤ^yKn6X]zmafl}Db-N Y?Ἒaw"+Uq/cX4И2ҳgC_ :TH\Q[Kk4_99M55d)Cz!5ՀuUUB ]&hhU><YRHR\sJtNqjN<Llg}CQ\][rlmCn5d^!cՀЕm}(VP ؽn#8*iY?wM}(Sݧ8
+YHvcЛ>Ͽ|Hi^nR~"٤G5;ATy'28԰ K4PTu֩|gﲼ=#.$ͫ>تVq aef]oL=~ D 69b?}†w_Q;kZar>kmFi#rʊ7 mA[zfF@zK!Nc1NTwZ.=;x} rNmwW[٨իL$p.L˙K#.^ 7DJj8KV9I1QGТ"6L=n5_{#q@:R,(vmYVṳ͑5 uG ^eAͱQ-PVVV͜8Jμ?ίH ů7hW-, NN-Y;?pA^FNmIlMVX,NistKfV|Fr\@_Hϕ&FՏΌypIaERf AiGQi<BR/IwqK(T.楈I$|@ӥmwдfg3㵙K}BEUzIqz9P94:Z5WW9+hۓ(dIŦ++)Awnc+6!WSJ{ g˼8 FCoX'1
+>7B'^FuϿQv!([҂ "H\r]xX84h!Lb$L[_:H9+ip)Ԗ'W~"c'ɥ8#F3!VTZ5;Q놲UN#무KIVfoNz|hU,Gd+eq;vDfQ
+U(i>z
+jӯ d]ߴE%k<Ql}=ʰAn. b.mb w y'O^>lV+CQ~Xő( [H da$ʻ!Anf_0?j1{žfa =Ε4/KHϢ
+}ˢ>e !y/
+TJu,˯gvh-~`T )$TD%N@=8tH:c,lgK&&kCQ ʙ\90vBt.k0[F^2WH&yX{v
+Pb[F)KXv댾(e-y,ˎ占n _z1'd`1~`G"S.DfZdp%zR]Q AfV{.$|X0޶AZ2nqe~;9UIsBu:8STc`KP 3 !L) ' #
+)rPTf6n
+6`/%ͦK=twnFmh벨}êd2qYfXIqjw
+|'UВ_zWJ^8!ȸ !@z<* q;
+\t\I!iт'~|.ܗ:YcR`
+5'0)?e!XLQM.t˗f,G]MܰfE$24= y9r(p:ΑJN}m8X(cuy7_Ѭd*9L1R :Gr>t+A2ڼ}nd^+',=3-պZAXNLm0r+b-.|9vuDۋ
+c+du7cc0AcdL2{Gsֱ]ҖN-
+CRs@B .e-;wVnޥ@KǙ _;fN+wKl/~`Ѩ-{<~>kff'ܘ40ր/GAE+/F̥ZɒJά|BR\"]^1<lpaGPo>yD`ǹg;o=nk~jݴNlB~b@A/諎GFN{-l:YeC9f$Gq*K*48aM7#>D|.C Ur]PX4b
+erupՓ l*eTn0qLaUI_8ْuaR'c~|Q~xA^eO}se#D*ajљ^tV;%:}BTKH1Jiz!ld:`LBއ˫ןlfG'YMz~my
+=ϖ"_U+Otϑ aXbÉe"TEGX_@ŔrAgI|+O{Df4'E:iCFv wc}mlU믞,5?{yar_h)Jt=6d%9̡0 Dӑmi_(M8Sb4\]CW0Fgf _KfmAH'R]=ev(RXFD6z
+uW-J돻<NA,Is#IP sDqgsl 7%`Q[DwQ3cc 0t Y9l+|SGM9jJ˗D ww*?0õAn:rKz[?j$V]4t2rBҜ?sX:f9(hM6t[gCU_?y˳fox&OK _z.N,{>)/CJ>#辛_u{D ClE^;Ű9}X`"/!멪-JmNR۹"dP(%z->ӫOL16|XY\K458sjBau۾g25N4}Z<do_L… A0ZVg}C{WM.TT _(¥z< FroytqI拉WKoFDΓu *־sFP,朳?s}gk5
+_.l4z}v<e{/R@y"BȢ
+Wda% :Q{sڮƗW@ GlF[ŢcЄ<j`UYLXvIhɪcyNbY@;27w΢sHҀ&/> y*AVqzH/.M7(FyZeBLۀM@Nb0h WL<Lu,
+q
+<%f`w
+cy@`V,  Kl
+P05=Cbgl7إ!T06Of/E@g
+G; ԟ_+3.vi
+v $!1&9?׾ JT6P&c
+(Us ;!$P MI-vxA8% MΫr_-j~_mK/x&-'3@{!;.,@v )z u+t` {}dɿL;)*IN(2w7~ݶ M^30-=CG<\/d,Ee`IX2\-TB᷉u5Y+IFՓղQ,?F[Ē& Hبd#P
+ I?0ۂް7Ү3pO@v1p={[na#*$V-|]X;'60]8=%$ .1 ENIjZzu_?'}x-Oٙ{Z Z_=sl taʔ${!1BzF1TNZoБ ~_ozsS2ۃRamRҗ[k`mU$wwbMZWϡƧ8?I
+iQ̩]dT@1/׾M׸gwG"ͤGkq?5 BBk: ֍FvXEiX倩mKj/*q386P1ꬱbhDt6q<ugf䡭Uy\C#e4W5Z~Yݨ%YW폩f Q?H .&*[Z+*O2,tl3зi]Z49t�E{Ĺe. u6Zb8$ n>MS'q#, D3)&i#d_KH ϣuIp~w41.ǰCk.Qע(_+?Ga6~f'/c_غu<9ؼ:a&rT o 6`?7i۬FFr%0KfN$czX31ٙYJ˵^ɿ'lvV>KP
+VY٣H.[L~Mgs% -8Z9j碌pm6f=&>N?H|=nDԜU˜{lsz)7,!ݴzhҺ d +öY-^|{yGm5>.0~/3~TZ!,}t7iXƧO49#37u&w
+kGU>-uuM2jOdZ1J\G3M=իȽLv&U~淾gjpGEzW kNvVkӚ\`e^aeR뉝3WҷJC/KnܧٍDS :RG^꘢k#N~-[~$ 7ہqAϘ˼:ǕYD~q9nuRA7yLFjHsц 5ӎi l/{{C;W{^4*=,tTף"A4HHr>#N./b+cZg,\viW2A;oc6,-T4\C3YK&~2UMͪbݬ<ovN5-HrB5;a ]~)=r?wS4FlVXg~]ٓ|ZR'VJpS
+uO&Y뎯b^Î9b=HLߎz~VvwhKYܔUye!Z>Ř1-PE ?ԐrF%-_ĂHD>jZ}prEך~wmyvN;Ϣ-[+pcl&-nZs+!x e##yg1iT(l
+ZY9-S bљw x|[x ;<(n7ǰJU[@4D%xAZCJJX֍Q$w({79#%4׍åxUc[~HPs25AT71Og\ۧ-SvB~AeF.BW=+ԏ?lkpl{qDFXRrw<WKbIo^eh8"|{KlX*s hʝN ^Uoe.6ZKELTD(ZGZ h~s? nE
+>A
+WTƧxjb_cwfDGa}n2ho% !(V LQ䩱 1$xbPp"YDG~%]z}005>?H*+*k0Ww(EO} 
+6Yj8SxLIx8NmRׄː'3? IeMme-:e8
+3{- +ӸuLﴪ5x]]8Ij 4oayoDyy:>=t
+^nܥ5FY8Χ +Hx\x,WP<vSԳVtgWk#ҬAJA(V&POѣTQH48v<1_L1:bfEXr W N7޹96uvq
+eUvymfiU=T* _{V|ץ2QLBp kj F16Ena`@m˷qdm5i5Es|Oy6$&V-?V[Nr@j7bԶEi ~eV0@}?ӓo#k~>.Oy̡̅y$#ubbC8|ܺhÜhN NWNXl𿒀~&Rqck0vNj|A'y#Gy]7~6if֖_ٹ~Օ@儙fQ \ SܘYf[5s'+]1҂n\ɂ!W\uJr9gR5{*fUkم 5[76sNJ
+Ct'N~6,ZJ<^N9mbz4B2|׃C]\gC͖Z/ݢyHd`8׼BSB/Us}9pMǕhfEJ߇wb)6TQicY.{Z.M4~C}NgE1VJ>]TMe ߹3ȝ7\b!wFנm܇QhG9,Y '~CǓx [9TsVj(I*i:zz:sHKMZp[=Ɂԙ*3ViuHG`R6]_(D/QD)"*"^eK3κ]?X5ol'Ndo kRz3f۞@e՛Y,%gYsT+[.PN.?eWan+i')?y pa>s;vxj2\YKWܶM.xj,f%;k4rV5 # _vg5R$!:hJ[n2c2d _=F*/HIz|QyWӅ/5>[ٯ [xM&B\F)n \LD,g?*GyG2k|`<0`ipIO4"9u [ؒET Q:W
+[Z+`0ʣ;6Vp@ec<ϥsVsfVwQ
+4l_e [Jl VF2gVV\gb8>K]:7EƀfA/{3sø|XFbAkn i>v
+vOb7qXɤc7uD2P ?I L؄oc+;Ftj:)s 6`WSОFAvRH
+L3h*굪XPOבaV۷sdb'F?
+,H(&X{G3~t
+ȏq]
+IMĶBMTlA:AöQ)M0@APʆT
+\<V,<`VjRt69|׮\FIGz]| &kbVB6GOIy2צX mxpw:9/
+~7%Se10rHK@v3Yֱ Fһ?rq~rc$>^&ߒ~%_ _/9w/kMf߷ |<='&W@P ^|Ec ^wݛ YRʒ&JgrrlHj&noʭ۶ LG㻛XMpv!0YLwઁ5$#|2b%qmbG޿ L2Nkw~*^sN֣ꝣlq,HIBb];2lšdɈ}L#4߼g7NFeh<0X:hw|r*=ڔMbuUHe~ͦiOKXmR\3:^k{'Y?H2Jחu ќ>u|pvEu"uÍ*VuN:V}9ߛ?nt dU@~zP.L_V]&n`VxS:O~)1Xǻl2:0*_[=2~_5ާR=m]RsZ7[3 9o4׌o׿ZU2Wu~sW8ttP^>e>TΥ1;j*+\WFGZSe -LeQF]'cVz+?Gd#j0*$pihY E҈нPv3xo6)I5hZիVĶP(r"5c0*fUATd
+;:˾MڅgJYek
+tjiβWUGJXmS9O0,DX^D|F@KYf>AV|.t.T0R>hϏwɎƧząe׭:K?Lγ>qZdxfLO"%΁VU7B ʣffwqF,^ΣoQ/=4d׍1K_̮d*| n=SN4a'fmʥ;i?m!o}Ϋ6XۖȸLIqBe.64>L+u(evNpG׭ϼ+~Ćb;}Yc.~m}Fr3D"&zko<ge<<,|A6 bY~e=9 n86:xS\)`NKŀX>bJX.{X洎LՌE _S{&W_sv]dHD=]^wm+%,0E_E % \{2|nY1g`f7!Ә9c)m=1W&AV\e=0޺mYX_=N*afQeDmSso,%V{یDZYk7XzPyQ-폺5roqUOmea/zB*(DOS…%wΥF^ڼ$ GS@\t70Ӯ@/M )œۘmr
+W.zr) (76]Q|$SϝrJROuYݔVZ[Jאlx$.'#է b|\rA&OYځ+o
+9ol t{g*J~x $&7\]@%Ndb)&njk<n|TA(ٖ8m"uxz8rrGsgz0(yqt'>si}ZԳ^S֥_!GڮC:OzNLrD}ѰuP4CwJ [[zI/yEsq[ HQyP[V`aMzoݹJawf m@'<_miًh f 1=x0~`އ=d2(MORCQ\J7~(cX_VcÇzl/WiX ޛ bc ށlz-et䋄"fj$nŗfW>mc%hjeV#?4HBG
+—洁HEOYZmX ),}YŞЍݕeO2wWĬ9;8ovAp
+ۿARS1VI0GSG+w67UG<d^jpRoniAנ4l$,8kZZُYDq֮fA\5W|ryzmV8U)lҫqF Q'*lW*R$i_,NqӅzL[ʡU
+L*k +=Z
+('3K
+)@9:V+a.ͤW͘J!0cxȍ*D0:Wɠq5-O5#ᷢ
+dQ`TrSBm+!ɈmVcImbܒx{gSJSeqA$7Gg=F@Wyvfӕ]zk MSXׁX"|t+ݜQ:nYwr0bb?.]6nA>fsU[/8g6ҭ"~V$6oi3CaoAOh$v߻2|G>6 []Ũ0K};ֱ+.Um}dʤ(p0X,Q5mپ?zA鹐z8wN`UDV |giu(,{;;oʔړ EFq:jpN6;ާS9Wpz)YdwXdv@֮TwPƭY6 `~Y{QJhglƿ=Nua,=M3h
+tx,GfTM+5:ںZz:vjqPs:VUt9T|{U-\t.8v@\ e;DPZW /q&
+Eoqe 4}O6ԤJZM?HPWJ1fbhӅ۰-t^N'5ν/.wM+W<sݾk #O)X !_lC/_jи-zPb1.­w'qϱ1oC%(7 [ݻOowZ<_h}gl̄?3M~P*T: 9*^Iok;IffO.D!46IXm1j}߆<lޢ̩u${=ٵA,F{7g2vBw2wTxNfCϑ\G goQ֨S-|Κ0ژc
++"ג^TPGc˧BU@T LѼ~JIvt|RhgD61bd Ox]y2[4>"x(
+'u!=!P5j6:(5j(v9Rqd);Y.L&fT-K!OP{ޗI
+7\~T>aK&3.ɖx\.Ew-.X9E+z&E]NZׇ򾐘0RA=c\Jc22ʲ-q(UV܅V=w` IFWlЦ|QNdpL󙩖QB@nцM-+W5kGeJ4q99)X8 ub.E#' cMC
+"\dANwW"sD7>aMzxM> :cK ]k=iП!ԓ:V_ǡY^WVABRm>;H,;ͪt5ڃ[5#.2<`x3`GOc3 .WD{$|H"8ĪFӬҦldO4ՃWr2:#/+wҺz"Bг~6Kp䣣݅W i(q GWc)+d_*=3]_fTZMC:JNMj%hA&=,?.uy˧TkZbLs6j <Vrk(zr'(ۊ#b9w_d\*禼cMs35-%(O.&8؝VZ"EK6YpvA(JIآ+Ww"sfA_մM D0$ *-<
+ʊXr&vX?teEpf!\~Sk!=]\'*~SĆ'K#Z4OخN7W]{(y~u ,0վZJ/xOЛ`^{?6\-I*;g2e~B,Zŀ˖ΞQį$Opx`0b-czb݈j}f&[Lf6 d
+r
+̺r&sIf^Inx,ypزGδ[v2.{3N'$:!xp9]FCpuW[s,c&> &o.bŭ9&gXEQXOAHCo,+ā`ye!j8T|o|H v޲@n.L4YcL-ЬSpݮ-6X<GGcC^!F. 4
+p0]!x2؜8^+
+ Q oA
+(d;n  '
+6c8jB ΩN螭3MYܗ$䯘͉>k #S
+kyD/^a`A2#h;p9nr. .3 ^' 4AX
+$j<:yr0xgG@71
+]SntrO4՛I]JmN]Z%⻷
+#u@ (
+X^Ma!\ Al
+`0mCfk.SnRzk{+$Ft{/?PD,$%Q7=mS,E?+(vp 8>q1/ qX
+H)7uiW-R6Y]kk#.ؙDJZa1tw>;})fʓuۜ
+lNq?k S׵N*{W*"䱓绅C -j?uX'tnvT[B@N_.-ȄQY_izT&*u,)/>y,wR3B=ط8mH)TGl\X'2nWWw۰rU= ]lk
+W16:_v^P pV0ˡxwyZ콚]ĢN5TsTi6azzէE3u+q'i u9-Qu'nֆB3 &@CloTSiZ^Ln
+m[vKU͇'b˸C/C'*aOM z}f,  RsΕv|4ZڣݢxU u,9V46N~z I&kfԩ%yi‚78K <U+ۺ?Թ:mmb!OաPNPׂ*դ*US*LX&^TUE&T /rTYmw
+V;#~@; B /Z oإ}/S{%!D{e-KU`G[XknhI72 wM\pddj*wffLF\v* O93UJ!ŵ?5] VKorrbP@0KYq$iI6u8{΋FO2UR]Ow\ $vkF^M(n]g[oUs~SB!CzЊ
+V3*zJpR¦+.%W}AKVcdb;3F*ULpB5Nz\BF̘Qb*Z.]7Sf{R&aTT~Mj%'<LQ,$MY ɪw'c\%TBcFaCXS ZC(QoŢ&Q˫Nf^[y_7b>S'oP)dZj~IE1%сL١\*05﹨slG}pE셆Bm̸OZEdMrN#f(v|4h1yA.%cLT6 vF)<&G ++Hz$HUA.ZzKo~%VK&&cQus:QrV)ITj0ّKB&'ng| 2N
+J$zOC7LWwVK.w%~<TY\Xs %{NʍdJڥ)2˭+:z֯*\leRmpѲfmws.##B&WԉW򝻺뷦K>y{ kNky&@&3YPƑmmc:_H#g)hNQ(sCJԋd5{r90v;ĖбfZ|@Bݶ<>nݗ } ; +X)u"cg4ع٤ݘ"́\Y$l.+d}bWdUD5 ZPi|mEDžC)rT±vKfs6J.~>3t̎)*NmE&[D~ CA ~X!73K hL]3o{$.|#rGx@KlS1k憼LQ::<&҆ls~O2bpLA&iؿ ]إ4>5@5E{rS:|&A 8^[.%z<4t ã1^ڤlZ^%P:ŻT&k^˷OQF&KTt1#hFJQ{LۨC e ~&D~Õ4cwı=/DD| ts7lxJ鴣u drO8VW.M?\b)b1ؤ7G1GG.R>o!N3 ָ2R5a}jPф+DVH2n;@x
+O 0tXWE <zgg7֏6 5m`e=z1# %{Z+w(|Ie
+o-jeMr ;h]\=Yv!Ǎ;np>Z1 Bk p=
+_
++ Ղ{ExƞxsWxLw>vT:/;c܏\,ujn 7"h4:}$6Rr-@{ z
+EޛW76f6+eND[xw`77FSɌLa7x6 i!#@fsZ$
+:aI+j׉CPɼzbEOk
+CzVY')Y:-;=9B+s'SAf
+n
+]=]+Vtڅ/
+.
+ݙYnUㄔx PF點]*Wm!N
+Ґe
+d>>qR4
+l 9
+ YA8E_Jh6-paB[y>ߥ[>VbFoi?Ωk>TOicrV9صW!4 ­BN_JhXA>=T>޷~8ԃ{|[I؏ݹYvsӄ.7h}L=ZQk!׉6_/2 jh3&S+u}
+}E_n(9v8hbʡ2Cr;Ѳ>psv+shi>v/ ';os{L\n++= W:WJ\$xvZi|qhp~e߄ mVC9ӄL]dEm D}vNMLI@hVa>r2nVKgؠ6[ߘ]N岧ݗ? {F;y"!~"VĞ ^2Pu>qOJ ~C2=B-/,m`MxG+-+Jt%5,[O 4[*Rhx<)Ogg$6U'_]b7j=@Іbhϫ`BM4TkC3^5*]PnAއKp*jGSKƺ:)4qk'o?w]fBvZa5F?ʫx]'*ׯk[zeS o54M
+yebŊێ J*"A@Y7F>](w쬷НYn2ff&-ឯ&t^.)7}jGcnxvxM'$ kxw;Ӱ6.$)9r^ &kkx_EL{'i _yJ:*)bjlLҏaqVVqg̨LL)ӺZrJG"s0c.mҡRBW=Oqw2BV(w44;͋rL%rQ$~ʮSi=.]uyՌ_)uS@).1Tؗ܂
+f1T}'bE>w 3
+| HrhAx:UsWW>sVʋ\LY<&Y{ؤ&kVy2TcOA۶9mgBelĢ|arݒh,Z G1ᰍsp7K7Ahp(vYϧ{wip&T ߴ3L&^BOo@B8Mx": WF! FVuA#Wx\
+\\*cf{A R*zh3AkBL &s($ hl Ȼ}zL+osjA+٨5?d$SQbĎWN|aq$DswC\bO?yqhnhYe}/ M͋]&"4wZ1iSäCS2z:3%Y];$bЮD 2avWeauĺE,Gb(~%;>A{o2nB=9qt<AN-c&EMr#7Zdmol=&\CLh:!c9~$-޾\_E0X5Jk3@>#c!JWƴ1<TwwD2TG\'*U~mݞq 5fbWltrS6:UՉ}=:*0:`2--CJ=\^Lҭ5}~dG!!㬟/hy_d3EbR
+6c\(%$|&G3Y3flfnĩ7'C/\^D3@2u p .GO.ט]@6
+E
+_}F'2#rX9HgHnZ߂_R")#o> )
+ L~e[(
+Qi لDB/QmCwKP'l&[|x]dv Ff@$9ٹC_Ybh\Y:_:7 GOuЉ8| MB{BgY Jw OQR@AJ-ArFA-s2<6ֽ pڶPteiǼ1(
+-;u
+7nE/Wܝn:1Zw9=KOȥ{-O%E'ޭtckis2q(G_翋rq(G_QQdp0 a0chɣóuw>.On6!-\{{OlUy,M+Q^yƾ%2&7K>RBbG
+@g!h*+ÝF(MOZ#>NŽ6Rff1OѪ&䰹Ǣ뜌ۢO<a8GXk'0Nsٮ> \&,gW}4ȭOKӞ|?' '|A8 ^T*^x\Qv~^YR'v<ڴ9g+WG1]u#WG1]G1H=i /d <;_NDC9fzԗ?;/u#C l*zZrGN~54<g
+j+Dmb*n׼ҫ++|2)]ZYnb-\l~ |\x/͛*3MrݍUz "_Y$K2$J*s֕5
+-yʟzvf"? ҳ@-;ț@LD@:*mN@z4n >>IW/m9~Xhj9, G)8;DPЌ?M3DGgoMs⿵7'WehFߜj˯g͉i~[ kߛ )ć4?xFߜҖ?MǷg@'L@Ns0n8bAOofCfV[X-5m=ӭlz.웗iyRx7JjQHe6zyr/ܙh!2nTAԝ٣vۧEkvR~1nwx"|?B {oD;y4ZaG7Ֆ࣐ywqo(]xbCCG?B &:qb@=Pp?LW 6!s=,{Y֭"ш_9j5{)t47 6/@Le+~5n{Ld+Lz[u kȔ+
+
+$t D{x\{_Lt+9\kf~'V,Nytu>ݟ?Ih
+vy՛^-SV G YƓy-iQ!|=K\åChʤi=f_WtL+GxCe/L wW!^>/iۜN-,JގPoPR/ A8&aZܳ})_MUkf N*:6Kw /sf [ۚ538Y50Jf}ТZͅD8\ңCgö}_֮~7Y6c㬚[%1oɿA ]WtI0mo Fc|!9=evfW٦ϋFG*ʚiv ,J (EtpUZ%a3DĭZoN>I!,jM)'| 'Ɛu<=ّJ$0ȃ(6`>sIr
+T0-&iҘF\
+aiJgȂqjli<ŨНBPqP)1ߐ.S+ *=j< r䈼G\:.jj_ v_o+7\uXO'6&fZSL6[;@nA-  ~ngᓬw0n`DZgeJ#+2[BgijR%)|KqaO6d` MP4sp<d:w{4W򌷍ӛ+9џHFa6tj"mFnzg~ZdF.G%T!AbȯFT@iLu@iul>W>}!wɗY׬cCȡ鎐N uTdy%\uA&3NRB$ߍYLf4N^%<%q݁)Hi ʎt SoӊufK3'"dgG&z' Js>{Ҍ13oοH'?P}-}r\\rEMT#$e"Η›%$tD_|8JpݿBWaH"&x@٥?(,ih(9֑#n̎ߖjΆ+L D,?!}R52D.چ8][pA]s
+sP(oň'as.:o?&*zO|1o*0ʓB]îL?%a_ń!A+"(^{>V?mp|/|h(JV`kUmy(I]BӲw%1fZ;,MI@%v@JWGe'%%iC_FݕY3gm}?PH.۰PK;$6bI%`0~99y MSssw_giw~n6&mQm!
+(N|-o(ם
+T~aԜT}iuiV-IB(
+S$&rFKXL*kզ=WJbȟ^) @P<UP{\Ԡf~ c
+W?c6n #;V({[p- ]Br
+6=94el֫3WĐt
+Vw!թie9pޣ=JYp3'^%dŤX$mϽdS5en:5OA/)<ll"(CgſZο+
+vIm
+K`5օ%s^<QK"C^ʔvOҙmƦ+6w6᎑4+okު#5#./D?f Ǡ! uU؞1hT,ӄjn
+Ժ@ui7wLy_o掩x[5V4+(Z1Eꆆo"}h+`=,Hn
+A[ rRm `\.ڠ Ш} GSm{ED |~{9)5wgCp(.*7k(9
+T 
+)X
+`X~rD{NBۓꛪhqwydT }f'o<8vq;^-M.RОX sq&AѼC bl_XW곱P~mu{G|-^zH:w|oKqOՖaQڊexV+It.Đ?݁TOcVraT+a']<;%]9%[Lhf=dܘjѸj͓)(KDF&nDC! wG=7X LaH_ ϙPk㥞8"*&øyMί^HN<O*
+,Qk{c-/ 斿.APYI@w:
+^Sϛ[zfZ}m9ƾ+zz0;-26(N"ˍs1b\wOprv!<J< |Rh k+s85Z|LVh ǿ'[aqda fZ[oPsX[S>JTĪ.V]nufaZP\8Y| F{nvvn@!10|j04(7`k
+\RnKRl + TP0Y^m[cq/EW_C~C
+YP ;76s4>r#{gI /QRC!s3ȃYYcي^dMLJ37p&fy ЄSQ"^^愳:q I&Z3'yLz!⏓}Ha0]nGXJ#::r]
+/jmߝJ˙^l'R-Qs!tVF'Ьe2 =ZwdsX߃mH
+
+r
+<sYjYSU /P8TQBN|R kKͽ'mrν<+J o~3co`BSo`b w:v&b]Ш:M,E<U~躗]}k?x5!qw)KfQ3~m6]ǣce5b
+T}MC[yɝ"
+ʓysC_Z0XKg*jdsgdFy<jc6#Kbk-6^Jk7 0,8
+,<Mx{o3v˵zcۧt3|R᰷,q"]!_PЖ:BШRu%la|j4,oKC`EثMrF' v 9C>j^yvw2Ux.ߒD Ĝ9qX)|'+ Fӛ_AS*E~ܩU\¼]$ޜ]3
+V[!>^ ^[A*M夲ݕ3{VdXeSb~%p<a4Yiq,0/r2i\f0L_aÕ=ʷq{]gkC:B-OuM]*Y㊼ٟjN6JsSYkul#4VL%'buSـ&
+I,\p
+=Đ_*@{,8C/z.r(\q ܹ(•:OQ[si[a"CU#]J_^6J{8?,M"G.9HoKX0a~,ońׇQ{2du)~Fk"9@ڛB㈬\J Z[i7*N X g 6}ʵO3(o @C `  >ԢpDŹzۍZc,+VFdyڭTj3_yʔ\j9lٶN_I K?@anivpr6}rM.Z aE w[49|_8=f뒴~PaGh c{fI B#TѪUG[В[V~w\T,YWfзÄ)#j'E=1˫]Ckja5nrWTǷ۠Ǣқe<E MYzf
+{&Z(n^];Q/؅)%ՙ-_kNeĴWHT8
+N ׊;M !s5)9>o*᎐<n/۴P0yRp~!2׌W)?J8+'"@<<$K{ vG#T.,F3$LZbN{- @%Qz+wB6ѹFVܓxh0L=[E~(iTyL o'ΠN#/
++U־iNh IP7 c|T2" վ_{] |3}n 
+ckv!af=Q)5RYޓ?O@_1cU:EoD$͒Gۗ
+ҙ.}dYȦn7MYI-"O3\m>u0qZo.ȜU=1GLCO
+cV_ ׯ[-'dLJNMWZ i]7FFi֨Y}ㆷh4κ.@w[x
+Ang@~ct@a"ԩZ
+tF!(=6˽Ijߕo`~r AC170„?/ AS" ^BB
+en{5
+y5@F4`{[KC^ \wp2r[ڶy<;?H 藀th>UʂB-߇I~
+TVw-!s]\dPyqн:O4cIz  h#|©9-U"(6.(w(^0K_G-RhnINGQYd::>sطBadkA+Q+!:xbr!h\]ʠР@qFOB;So~:s{~>~mHWWuNjoP={9Y: w sG: ADČԗQ/-FGiq,moPcgy/ S*vi%5Cit`{fOPw:Оt*UyQ Jzqk'3Ƌ
+m<溕.H;1pn(]saxRSkxvOYVӥ4 ?wChMZtJ0|(/ǯ&!ly#5ْZᵛwLt&cUfpuڡpZ=KpzJE[iV'
+E6QcЃDU=|r9(C~
+<yh }}Y&?-Y:vq|􆱯:+p/ibsKo}l{>Ϛ\di}^+Q#/W+nǿ!~ТJscaǟ]yRq&.<jȋ~m l2x9QY3
++W ,YHtBBd5uBjgCPCSi)ݜUwؾN+3-e=9IJ3ECʮNO$] i$<SE(6u c(q1#H[ Ή39Dd+'4WWY~/қw>=8o{u,^G4i.93R{i) ESk\gyq0|rK怂vJ4o=#+.Mn_Ds9yw
+kuۗmAӥ3
+knGOj }T#N( &Ye]ufk1M&΀Xa7^yo"y=V^Rw W& o^Gc8ezzMGy* IJ%zMm&wѓ$LbSb p컟R0.<dywVH\i@W6h##{s20UcrO-tڬ3tu~XdM&,52'>2U!+dJ npguU۴Ֆ 4\F_v\yҪ?湰}2s$nh Q#1{gbb ᥍Ͼ+\>@qd|#GotsKXOɴWSe=(T/ojTP"gݯumf:/bOxfqpX.pm߳$jK
+@kJ+qGk*+9jq]soH6{|nwͧ 2)W(JIT0 >_jZ,L5P0*ۻٓ=?
+(CyڅN]é^5Nm!WQB;wda=vI!GpQX3t٨sz6pn٦{Rv/a#$j]нt-e7kBW/eu{Ro95Di_W`dsVr?Rd/ֵo^o^RvŠ]u*UZPY\!UQ :fLI_MzDO@W, - .5|?:>|^C z?s%KM7}˟gޫeV
+.ȳelAoP]Z: ~J.q)}i4zqO%͡%QM_vG_nNپgVO麍Q]m-;v  i˽ɟPFHZ=f譇̗Y4x&"ux]MbW*}QnLFle&-Y^OazEY}7w7ͥn]_N¹=F]!f+⩙1f
+:t
+A]emzp sW,o:ﴮTd:7{L\u0N^IR50&¬2-ZV`]NBYpYR@!ς0
+ʟJ y7A ??Z{+zc O;О
+eC_9/Ms~+@
+r iddIljv6p7LT݃=ٺyQ<;s
+@+uBk::^0ź>zbdVEШXmȻǓ!k)ϽIjr \*n,J73Ժ F*V<(@O9@
+i/=äCG͢5|O\;ܭ}õ:Q3SFIҧ,VJZ|Cٽ8&@@$"ZB­ADZukϵ~6S!w]oDh#x NnbbYdVeo9.q~I y+k ]#]ny뼷E>kr
+)>U1u ZQY2v /UvaE4ƶVf *ی^|L=H!كe98[ZϠTU`TOeV<r]}) oɩzNDkQ]i=^U׼>7)ZIhwN.) 4\}nB i\#]cH? U/^[{V"njn-&{b6rݟI_Ԧf|-O!) p(ýŦ{l뽠7Wt8%15=; hc*jHJꐪs.Kҙ[4w%6 l#y_yC@BYXiWź&iʆ_ti$߹aZ QvP
+lY ͳhbWz9?`Q[n1oI6)*Nd/<jxp|-P<7
+ ((Pzb{cu\MRCfT9`tŪgF
+j;o
+Hݰf$Ɣ\jRq]n!~ 7ZoW! i:jx RDj,{*hع9o-wo%NZQI\X{ #5jiUFTQ-nqs\ y*byFdx-AV{nXqB>Q"U,sG 2&w-4^쉽a*d氋f 3+7ks5yz
+4e~/<jVhjJ*B:4=fOJsZvVD#A8[u2\̸LMIzzGIkܑtFo $bzY(g>2AM_I#9~Y"t0 &9)9y3g=iqt6_wSϣn4<''+<"q)R%0Gi߬h17h٨Vx/<h \9lH[?Q"ޚt8Op1㯵<Ƀ^vos }u{u5#E)V)2G'W;7Z=idjodG06$Yß35rxeoXB.mzJf7FUwdݷC {H;%23֪&|άxf㳾u"6}<yt&9QɄ\֌ڲ>{;6 HWy؊~85 Z$^'^̷Ѫƻi٭~AȮƲ62Ë{IGOSJD#nuURFzh&;CT¿d˶NIOJԑM^F;iKO(nm7! %mlC\I[攂C2Ú֎Y+ě {O,I?HQ% x%Z+uXn 7oukǸ!8`XzVv[ᛁg(52S滮1:Rk|z_Ԙ*[5*&ˮ*)e4 fٟL,)ɕovfSXԄ6ڕJ7Sfzː0u`8l'ϩ e@ůD4 2}Y nOfdN$vI ]EzDD OUF
+Ӏq9  k"ePe)qx
+sDW@.{RA&.AND  6CFk? w TkRмДx!j dmA<>gw&;+
+SAγV w@cEiOl TRZj"TsPmx2(5Iteo;n_6azy: 1q` @
+ k
+a]PWoڠ8sKs^nAsHl
+_U=I_V77g&P%Za:sδ“^V=ҟI^qi{uZӥm}-8tz'6H-^y1Y=cWxټh0_ 
+mT45tW
+=V92v
+ Cs[96ΖW\ݔ:_kYzܳx?ȯ`okPϯ`П-e{D4$ 3gfuMq nf/u97+5t[svסqR3+J pޮΑ_
+6N1Zt.!ܣٮ<P7^ l};=\vJ(L'y^d0;UV;.6[c)ǰkYI*,qHcc٢1Ƣ|cgȮ[`U+.rt{.-o]>Qlue>X?^FvLlvGpF1m[Vc󭚹US6
+}ՇxOM4w>"juR14JvhsܰT)2h*~?BsЛ
+5ϋ\?޷򾌺 npv;@FPxChgY8&;,Miۘdp<&2ai=Z:O?J̠vVqc+|3
+NjC5p=^9
+;4i/` =.
+Ort6+ %(mjOSVc)mENkqVY&Y[e3"MLJr1qQ(/=bxMxHPJSl#m-\^ N
+^IPPmP++X
+?9~Veng
+P賠@ #&(h]JG1=iF|2<
+k*qdSCAr 2Zѽ_=+od/ٛ-+Wŋ2Όti2Ѷ7fπoњVfcSu M $h_ BONZ8:OΖ>vts]YWdc9Llܮ&)oUmօ胲zǒgZ?m\ _@BԷ" (tJ/
+6ۥnr?u9U͋D^qX?$ưị)$tB
+jZ֧ld<^٩r͢]j랞tɷԜaJokiT_@&(e}PhOVC@tscyZT%;!wi]O21y`{qbߑKڮSnZ/؉2F.Zƌ3#(<=۽.߲oIt^mmĕzl&9q=u@o52îf=\<q񎫁iϹa[њڝbV?%n|QXT ؇ o(
+B~ƫfZ6gqfMk3.w
+?;MRSԉVæcFJ;arB}.u7ц*aB
+q }.I|7>s#mD u8{"8ߏ`HP+HhA~Afvά<0ݖ݊d3hxqռoc 8ڨbb@y,
+
+Yxkdvj=lɪӦ::Uڦwã2#W[Fo1h6½S`QAdn 8n# Uubt
+PVNBTvP
+=(Df/*RmGYТXr5~]o̴f Dߩ!p5:#+HR[Q]\SieZi6.b7t|1 )/HZSjJ؉XO"oܷ G(g
+ƫѰ5=oX2ow`+C*9>|
+%EyDXQ'k>o5\BSsqx3|Q.BwZ-'
+
+0Es5? =`ru4{4@6Z
+ag 
+2P;Zߒ
+!CsP|T/C6ZžA7&ZuR兾'%uYlr1]'gCQQE0ޙDwlyqM"7֮H-ĵHKRH>%
+Är5o2>`A3:+ ,;@-n$#.#"<lZpi[,z;ڝorۂfqsnO)婿 \S}^.Q+V Ds c6q8QL>J~m[b'q;>[zQN5Oژn/PrP M
+I^[]_c]N5Ge\EEi 52 ͮMmyI6*sއ% ӘN}[Knq|}L(>
+,c]F#Zc*Q"UꏖU?rҟe o'Yеi;R΢.qn79=|Uf?HT8ftO)<x_
+.,|sYK {n) B\ADwsi0 OI=<̻Lﯼ-nC]t~cP
+}|S U@g @H G2i
+Q0h.4<0@1 [
+g:+a-mw I}NdvۭFa:ZOjI'ܨc1sSmn2G79ۋjE}H o7ʴ'ARxB9!w,m;nԌЄvDA|s WlKy^Qrlb=oLZe&)ew_w_TrPF\;Vb\wlԏFlw6r*zĵKWRy Ǽ yg-w)\謟>@2Iw@60{{09kl FіCp7r//Ʃ7E+K;?;
+,_k1;o0HuZ3S|/{
+4J"((v(?qή5ן)e^da ql*y,|'kyturkB=PZ߭ϵqyJBc
+<٧fק[
+?0}EW/^7%d HiQY8M=qd&)k:ƭ=iml 9V9,~wz0hӏ橜O]1Fh+a?è%FRшީd j}w}fC8!88s
+=R!Wag*_ysD\#GM]bT4z·lPhTe[M`fNrLWI'4;rI~9i/4v l*9e|t\Ja[ɦV
+IJC2ls~ֺobcaptLw""kl_?2qƫmW*az#,5x.KR6|k
+:9w9Rua1 )f0~aCFVU~xu?j!Pr
+t\u[*H ◄_2lsB%~:ߜ0>o=`㛞ٹYގ3f^H/'0폑(n Z_ICԼUN|"<aBXdF៬XnF?גy>K n)E+5|`>Xoi'eRgcaL:be%ޞH|4D θ4\K.ՃhF#UFo^ ppDm_ksWƛ?lw
+hC1ca]HAmuu VS-K̇:+k]YfDfVPhV\oloYε;QO|O;|6訛 l{u$m_
+_9+kvWY5ӵb &8/h]u)OsVY"8f3bz;[kJVFQ8j*{Jqy-Ԗ;YTnվVa^oyҤ:j &˴)QߢɾGx|)JgJQq2tւqynMgRa#27궺朮KC^߇OHT*\m.TX&ܻXRI:bIŪ3?<֫O*lx FoFѭN'ub.ZŒ8-R7fZFYu$ծȭW1(gc\I\Zm|'mgrg{A@
+~V/-µ96_{v8eTf jsBoVK.gd~ 5t'gÃ씟lJ3
+}G
+ "L|)
+[V#ԌCqħ :
+>w0'~ *(ggqOk !3>^/yx<Nako?ȾgvDAw\k8} (sQB\j [ + UD|7Ϫ=Zy:"ODoC A٠}jQ;;\DtBߊqB%rer5[7^`:@O?7(3,A,@ǹgmr
+G+CXgA=Uް^tG=!>9qBG<y]Mj[w6i6UsUJ|;8]r #
+:dy*"`:F:ŵ;
+Rm]4;j;m)/gE'%󍞵aE^`rTro
+
+9?[Hq@.^g~?"^e42F̕]nЦ=|G)68Wَh-璻8O0ҳxjٻg]N׉o0֗Yo
+8o
+c[*]6)Jzt緙!lY'N"7{ϱ]yPwvl7ІǘٍN24y]2N`sȷÖ)$Rt_)@ZMɘwD2-7ܓ해{Aή#&Kf-^q:WR&1@+oLtm GXtz݃Ow#V`m]q kvXmF%bTx: 5jh=H)pջ.XW$u&l—}zf6d%4̚9
+ 9rSp\F_iMʬJ75WMj&Odug~[g\qjM|~kaqO[[z0Pk |4mMgnr_BI-J1eRd߰'˄*2Ȃןp5ׄ۔Q+~A<rкe1TAG`4ߔXjOELZM>zCgL1jlj|ϓ2las0/p{
+nB]C$^0>RQdf}gۭ6BPØ1]tkטcPkERMe3xFVWg^Djr3j%u's~}[އǾ[ݸOd tv!MQ#Wر3׊f
+~b]*I̴]ʿRQWb]RS/ oe=JPf:oGv4gݙkS ?E,4"WlxIWv`Ї)&lV,eA6< st,IKdҲ: @ۯ6E(pğy6۬Sȯ7Cmynv\ϳم;Y#e6K->\b|xUstLd"_/;kKSK,C|Aa`vW/\B^+y5XۚN9\2_U*V?ٙ ?ca&!)N~wp7.ХILh-ǵҦiX*<}26w~
+A)t
+ iuҠ
+F_\~@@7?<lu3,&y5b`<x
+Pk
+=~λ
+=q<d 썏7@p UIx<*.%poF$kwe/{2tI>T
+^+,s7@)B@;;" ?gwI׸/ۧOެIYnŅn4燳ȍjgMZ+sxC<eu+fmFx?6(w[4~Lp[}j%w
+#01fo{wx+LvA(lMPsMi`3+ouۄa
+I}g(+nXڿnGy?ģ~xy&V|nK6HRK/ N7[ lm}ۡa#W޵Lw讼m*`+Pq ,N϶#ʾMEQpw|vi,κBE4iuMϦӱlϧP82x/mdq"B!P(Jo波Z5׉+il;ճ(X.#ےu*T^[/=908VB"[;-T`/ښz9w6LƮ/>;_a6E0X_,~9mB'}Mv|?Xg&9NwB߾z6~oes>hV!<.BwxS٘lʹrztfPs#u j֔`)
+0ҧ;IJ'}6OmlM5sfaHaЭA㞁*]sqz7W ͌vBfP-=|s 4 Õ_>Gط7Fm)eC\ZS~?
+#uͧϵ@vEc\8YrDe8˻|?膝F:h?RΌ{aڙyJIJIϤIgl/GTwX?F\38,s]_{Ķ U`_3f>;~
+W6~y7o:36Ǟ0PLM`j5$ =%9-\1H+|{_FTfs/b'>TT{U+qupd ޮK}%7jG٥Ιȩ~/?>ʭN*pDP6)+BN
+:ޡ.ͺ&Ag.8b#{YjC4؇3/FF>4`.;21oO!`9ZueںJRp='^4\ JX%9$W^+y0t"nnjt};UʑqFkP'1RSv^+꾮L]'!'|kѕ@փycUii8]?AB~d;bi=՛]JT+^vOh7ǼfP:=7J3EU>^?Z,ZԫZVZUۛ¸iʧDaVi.gyN Ը֎(7gnwFAg۝eUڱT ظV4fUvI߃
+ͶWc*⹺v2waآT4_:IIuƿeZ:Ya3=@˸-:.x3'<>9Bt7aԮŐPlM+,g'u)~n=
+; (o:;Ϻ#@S.>x9Zâ5~_g}V)Q9K2~F4ݨYhSQ)kB)pn"gNj袟od棜)eҒ=#<l]23f̾;Tm7{V^A4N(a>μYZ.WA)Tb-\
+5r.$;~O_ ׈H_Jx`(\{X$h侻Vujc,֊r;FA[)@NM׌ yӕ:;$QFz~R)D,r5<-" h~j<}AnKA*e"ijNBXT 74@:
+jv:B )Ӏ'nymY}es?:O1^\0TЭQh\q@
+]}Nnhĕ}\e3rxvzލT =)нwpv<[9/kq_Pwww, |\Ius/o_m>M1P=.СP ^
+mWy?cPss2?귖=4!X{;?yﻲ ՞?4Vl ̽IֽcgC
+j--߆ߓW M/԰b՞֭p{Lc٧6wY̬RѱΟ<CcՕ,>@V./|iFr\1oo֪Y5ƽZ{]]7 2>>MWw~JQ<t#m7-uߥ2h$rnSjA$SI/ړ5kd̶t `pfm,UovTo0YG35o3(
+/jhɯʜ
+'{)BTym]ެwˬӕ+sك U/yV}V[Q.՞մ5D*zH3g\J8[ IOge.F\kȤ(~y8k'BU^7~'; <!Jl^&L:~X|[/
+~X?עx/A~H "Mk~mIgd[A q
+ x__b1Asy.0F% Q y q%=jC,Q\(}e@{eyox( b CXQl:\k͕g(JSHH.pʀ@f2!06bȻx1t$J/,=h"_Ɛ3
+?oݎ/c/b+ F:1zy1V.Ɛ"Fvъ} } endstream endobj 29 0 obj <</Length 65536>>stream
+}]~\qS͂<`ΐA=o7Ѧ%M(6XA'ܽpn91F
+cؘĘcc+1ljvMy:n>oGg;K&?&sQM8Y}*Cq_{.81ښ ,&߬m-H^Y ;.k /e7==`t#
+4En\tvUZiΝt$Nж:Chdí{d3䐿=i[u=kafE.4ƺlŭw g7lN>D$Rz Vל;k{gOHl}}¥"nك cKgb="-s*|-fGכQt غuq5tp:]\,6mјиW+f1Fp)q2pfMbKEn y4q  :f@=?}ͤ9/ۧv?x{=;`+49\E]a
+/ϙp<,mxiڸ0;a`|
+Ë&7V髦JrJf/KMVٛnv(X17jF0۫5ƝG::1>?$S*'̔,4*Va<-{椋j'\>H6Uv[~P7㎒FV񼒯IsTgZcn%p<c|8Wbmp3ar`˕I]\/*On$3ݏ3Xt_oG⳻[6]TYli@ªՖ|Oyg8qFY[S(] (\1~I&:\
+7WWsZ\^4N챰Gd?n.'+ěse=R5ny#ް;Z+?ذ˚a2GGM"NYsy~WDC
+Q\Z-jKj7b,esTFs}Adn/q-u=ԭR8~ yqN?D5!3ͯ!Isyߗ/ԛmimzGm?\:ld7V[Um~^?'i+6qg+tjmCPD8CxUجqyR/VK ZoީlgBU-!A7{5݀[qڰ0M{[vbtEC} Y֯[8Ύ>ed  2Ҿn"_)I´,|W>.eVvg{7(wNGY ,.vej[䄾qo{2( pOI}>&­nE\>NsNmj˒@e֮B/~0ov3&<{o_nC5TM(ҕV0_
+fck%fYT{sp1e{Jo֭&8NkڝCML
+mYl qkxl[;mWKn 'vf|8ka;쫮!cQ9O klX90Y/JO,n=M;LuB 5HŤG8Pfn7ܔoyܘ28q/N{nS_ׁwXd/lfQ&W2?b:$eW7/ W.^ik 9|UhXImݘ
+On.LVkJtbyt /Zș_^O}:zWf*=zd5R'wuEDى&譝,JY
+-.jIP4KtG"k`~ִרTݖ -&:$UZ~U2_X]tw s:粣L%iVpʭd2Yxg؁~+EHi 6MҐuH'$G`dmmj;]Vv'Pw2vv(ϧr`^Y"
+)B~d:zOrcó e[rCōwKK{eX3
+7[2WS']530N.Re>Z"zd 9PLHVfΆcUwg|zG#<iQ
+Q90A$bQlZ1Yؖ>RѳS,IF\&bP/7B,>"| v/fh'`8-Qߢc!M9MB[ 궄wժpP `=ƸY3]?X7"aJ6mHӗ
+d63ֱQ74iÚXv.
+.^ޭ?k 0@SçS
+|X~5
+艏!Wbh}]CثˀC$|s̤&FVPq{g떷K s穦*lBͿ`AP(Fpy|12g+zt10WZM^1Le1\ѐv:-}plIcNߗ>xO %"_R_Z py.~hޓ{>F-]e1XaHOxX hPfG)e_bDo~ O=֯|L\cdžy X.Lyzr"wB/EzêƬ|I鴱/b@«@w+4` `}hOݤPK֒rǖ߀nm?c/V IU׆tuk^T؞{}줳U g_K繘 Q/?؟ (G8$AqoNTI/w"=ØPT_ݦνEY S"T1|V %J81|Cа XwdJP5u`==g /bT
+j>lsֹ貪-Ằ9
+?g~{w>v{#ւ~@}@´i1۩"?;nh%e 78 E.{ gFl!j(RxمYen%Nf kP&SAVe~HijgKsc=eAysQjS`\ךW`zàԲCWJ;~^1Q^VZs{?|} I(< ;\l{큹uk[nqehsLʮ(VYNwJvJ퓒i.V
+:B,,#!VhNϗ/ߴBLˆrÍ:_O2m=o =8:n^5IULS>Վ%4F%x^fBݚv2Eлd7|{<f xo` l2/LʗsEXV6limQgPEN 8HQ̏y[?0*KC釿 OOy| lKxchqnx N&"PqhP/WT?2ÞI[vcV"=3+QITJcFnԔw}?\Jc9\'ilsd`7"c2k5gb=? ~Od9ﲙ+ ;s;l^T\kakP:=),zBH{NΈQF"1[Cz| &
+w1D3"F2+kcQc-%`EX ?~p'/ZDr;]Ģܵ˞ZZ)<ʗ(񤻷-Lu2qIL^j'IdcLz[
+鶟 SkX2o\{ 5&n/78Ntv2w=OMs~.xr ]yּz1\uS=A+ع~ʕ4E펖c֙4ԡz`~6,mH=~;VzNvt諿'j/&QH
+ibrn-RrxO̢gҳmBԸ}!_?Iw%$)^#|z=ԣ3ܴ%M9W@W~w>!vk4K5^Wp.6lDwPQq{gN?]}+iMef9mב:4Rkr\\qWN.q3#J{)3!RQLs=fy-̎&kGk_._¬ǎBA:?i;h/do2c]m@Qx%tGBXRY>ֹ/x8OA:%׭<]GkNva.vdE?Vz' TRj[T$_+cnK^ݺ7꾴^ȕؘ`Bݲ᫻ ǑGTWg1_k .핺bJTj֘vZ^޴/amPD3b|3{M
+|Ӭy/O٘vluX\ҝ&үbBv
+(3
+zkT.)֛^ !W.i=jL!6nU˅d?X>K呟JNK| !g%67$EEb+sg}[)DVrrivkz'U+kR\&f'W{<1^D9*ŹnO“d
+ͮtf_.Sn[Z96~0<<%.3Oܰ_hk#+UݐOj5apzGFYaVD!SZx֙L>6n.\Kb^4|;unvRl6`ǩ2q+s\aSo=J|J(JL=,dkכ/ε5+٨/wq QL80Np34Lb5Z3CCT,ZVˈu u3sF
+0W5x v8Jܪl
+Y_ KE%>sa]0&ﺹ_V/%hL&Xڏ-'DɈYNv'@s<(C42.!Mۥ&G߅ {4IJC=2O>9;k?yj(V5&J's)J&J
+ xpVpB~>2&J H#B d-;:LDew%rN4hLUf-{W>
+SoŲ7b Bmy%!1{ҿ(|HuNcs1[1|v{0|S}zU):sxZ3{]W5[vLG~Dߜ}J_}#-/b8@pVޟOK1Z?pSϫryW٣=;d{6[>ޖ5\V%:6$|ni3`+';hu:[o?^͏]o˻qsQ |S+$Fwn>BbqfWވԻ<?ӶX8f8q:[^3ⶆ"ԯZpյLU5.cRK`lvzK vM޺@7Ԣ;|n%(A.-BɟzEz܏3ԁ[ uWV}bNf=f{|}[];O(yf#mbnxǽ/'X /&VmMXE]PXg sy^4v1 rǰp:%y<0`]5ݫ
+O!I0^76ۛq/&qIjAz[-r}gjy__\uO/D`^8$L-yN}2rb[]up4ֱUrͤTڝ<F7:LnW
+|Z/_k-[8r[=GNC7-0mt[`xE>?5_WPӽ#-{O8坺iO dzmn@^pqsճM7BV#,4R1vB?z5iݏα f'͆F*< //TƧSLڵ]/i]U9b[A#:nurJvj=nˬ(@.Fh#;]f~yQk/}>):bm}?DorS +SS;O|9~9O V:r1ޝ<:׌v#˜b<Y~n-$ ] F=h)覍,B>/GqyNn B:,N~9mnIuɠT&H`JvL&x6xӳsi(Ci{לDCg73#iJ/7㨂imΑ@.d^1bVf ٘1 z
+Ƣ|vZȘxq<K.?2b|4?b%n%<vLTq1Ƅ@_i0jo@SdM#zJܝo\5Yǰig Ω25k8{|Vܴۢd%GwMg0jVl[зXy{'Ox/j ZyDD۞)I49Vł;RͻUn9pG0.<>&
+a6uwW^(N`VH\ M[è s:MߺLgkh ba.eOkV+(lJƫΔ(ϥF4ż<.f2J8fO?O(W$ȿR&Ι!ݦIm?jؓQ|zG
+ -T[*^?=,g;^\aي^Қ%<azs}INfn:ʻ$<$V{0r2BBe^2OzJWVOso)'rGNKbNMEMZ޴)NJtkhܪWiu`(*}P.j<8lQڌVb6<,wCwxm ʴWR9uș*Ӧ>$PWDPk2>a-!0?\'өCunP|xY)*ga|c^pfvC?Q86מ2ĴbgYlzey2뮅P{ӊu-_n{go@cd~0KՊ{4ZΆ6PoSL jpXqyzēEwF^g <1z 9b|>yɿsN&-mb(`s]*Ku4{Π[3.u*} ؉e{ {̄]7(]~h1p&jJqFa7꒥*ԥWw[1Ǩ4-umV[m붷3167YL\dmvTն#r\{O HYh+SmeE|?4λAd7YɣP]0jUgHDRe\~
+:Fv/vFacmÌ+u ǜD8!my^@x/9i njX=:Ym.NCErmmy8SZy?Xi%֜8%|ڀK8hĸus2X,6ZAnl1Rw[g|Wo]eƟm[Tʹ qB}kiQD yt
+u?x^ZL^mWa\/ߍMg0VgF4+ 0/7nD^* <S ߍ$e<]kxR-^ l\O<% ?Z;VA~g|2\5ȰPɰ{̰%@z^_uo?=
+w:6L Tafx8]$7`gW.&he# eOkT<,Ƚ吺4>ԲsX}OPQH<vJ:`z2M֤gt!$~Vvcy~e3a)fЪ-"JY+ëP>S:D+{:aHPgSB4D ת]ql ixk)ܜqNnwnFJU?R7F8bL>oQ#kna*j"@ D_yߣ.D`.C]A‡D ܨa(uP"8͂頨AGqn1s\l]~cC4|@:
+?ToV.:ն 6KնG|YcnDi}nۉ<q5uQN=?&aEaph.h0yo+z^Q*W;+p}G"'+(ӭp@r
+(](A,Ź})1tyY@0W ^aiEsBkFD2
+u>C}#|* 3_%J#gA}uYq9Vx;XQȩ
+q+ǫY]NTǦAe0<?-0h/?ᆁoZK|s}!܃=ՊƐX~P G#t|nDi Ց,2 h2.5掁`>Ǔ&<^OoAq#Ue};":qw<]/m=?.&{ъ|/b9~E
+=5=4ݣw^8=Q}FLv;[>GWa*8_/~P
+mIYi:^-mfS7\a}][E+ͧY_QsYS?1S8Л]x4)%\o{|=@ւ]3F<ߥZJJێNJ}_gׂk7ؘk4A;Mհj[wDF^ ]Dt@Z71rcT8HM
+|ywJ3vuw#=ttL(v.H[tV`_-\η-5|}CyE|YNoP/!;.%(?w7Oy%mh.GswǮ6w1';{TjZ
+&M?Huszu8OݖK~DIUz *AE>؏ǒ[@e4kW֮bu³͔Wo5#߯;FOa>?{幋gc>O mFdՌ5G<5Q=-q>)-dNoG?j!p\Vl^o8kƳJXk8]k&IPiMs:121^%Ns-~0g{ P,P&Ԣۣ}/
+&lϷ żhҴ|6{PI%kO=M~J@Fgbf]n>i3N*=cK
+3_ղo3P?l~o>y?0mBl-W^zbWj2D+3\nTYm>gMMl5F)v q8&\1CP?mtcE&)(dYQV\k2{ m0n)i lR.kdʩ z*X֕Nj=?/ג%2n8Me5gO,'x{˽leZF1Ata`1K2K3A Q$A+ڷ
+̮ŧ`1vjY?t皪(+@Ŭ` 猈QbFQ^{15.vXpv[Ḳ } {'iriy>S{gWVUdR\A<pq}G2?f?ȓmM܇*e{&O…_ ~oW
+=*t2UUY'tc 4"W1gtrټ7E6} <;ZkR[QsB|֏}܄;Z xAnzy.,w " `bp9f_.yYF~N%uH~|ytnospFByOp=9*ɚͱlu/g_ 5`~|zs>auebc=h5̀ԙ3`Ii O<T_70q6\s 'NhQwUEd.B<_O%Q6³3FOh,LEYô(PF?7rph# G[g&AB 7mZG)l<0sS]wge'-٬dvU`*J`4¼ѫbVw1fx5G{&i $q>T<9&'<9;
+͆/:q{MQC"iI y.rMHNã
+kGqedCȬʔ%,٧ZUJ<!T1Met1k6!%m26es6>56׸k'g6'}":ӷL$65-%G>pLfeGOYtH8X=}cFQKȒk q8Hy)uČcYBj8^>WT:q4\ތ0|x
+ ~pńՒat5ч ZtzT[RI// VbgaqRhLT.v#gswN<;@;C@R/?*QތDGHފ`mENP)p iu[wb2Mg䩀ۅJy75,6[[ZYv.sӱZrش04ÏF?ǜGS{Y.s-+ 8mNOo.bL0'TvI FKeklBT38N
+m^,[vS)C}AA5<qZ66[o
+Fo
+<1>p\>rZ[c^799 )Uqk zIX&ٌ~)Pw
+CBC\
+:P'ƚ_' *wj^q?,jTŤ^o(,ga3Ut%22QxxO&O]7HmwWrѥv>cUkm^.u8]E}6߯xr\%(r<.25RBҧԦK+׆^
+Jc$ؕ3{'p'IZ;M>ONu"W{Ikl_N*7ۼ-֫u>m8)W5_, p ]Upk*F忿vP)oHN>+|<2[^hl2Wb N>,m:._+uTwUaq`-.h]/vi|]ηgqjªM7 ǖ Khyj3Ku 
+9
+MEn"-xSckhk:=?zVλR>Es5>JJ3Y,/Sދl>v3hgLɸ8ezeK/l]LSTreoq A= :XsZl~1־r'>@ZqݤBhiv~Mʾѡgpuf3exO~dI\zJG!AGYm^]"qvs%qB.lL@;ˉ5n\X=}W 3Yc+I7U] l_aӰjz72+ߙg&wO.)ķ0*hssiD?TtdٰG~?}8Ҕ/qY8iԉo,7 VQ>x%WZFVw`OwrPvƒz` Ze1{ܦ* a\SJy}<1ON#9%9euQ)0щ@AйЗ07n^{ϑ<جئj oZrZF G`lt7{S*:9EZZh u^jNU|KTЮ,9Na/svRv$-돐iWJ
+>[IUF(SZTzmE!v<vHƞbJ;M%o-ηZ%oB0Wp)JL2׿H¶7ͱE>5l_-iPS:3We)uDŽᘝH!ID>|v2E<N}I(xOm-Le/GJI~C}lA6C6(:Ѹ)$ʧ1}v[r,m<Mf9QLchx}'$[Zm@*T@E8@|/v#wb~1 Fc![c
+-*;Z˯@Ft*$ӵT>{qP`*20%o-R3%O&lB 2rRd1bT|c>1X6;"iAO LY oQyu]$^~^ c.)Wje7aFú4gݚFZM N#F۽7:(7²ﵰ轺 uD[@ "~:XVk=iܹ>y7ߢ1 >W? ur`2gydN^::2mz<qGwMo)`gb$a9<Gy; ')vUFvvcgnqſ`8*kIloon:  0y{HZ;l$FF%噽ݐ/Lnw <n]m;<' ~[
+ {=7=P2/UL[ߣjoa3]_Ee/ m*!.W^|aB6mR:iy  ?k  {Fs<(/'wn,9А n}#Kj]‹C+uu?5u:g ^ ,aYoMa
+^[=HQuG{ b56ªsCGF%uꍚ/rMįήj9O kR%oacd(GcL 918Qd%b=4Dĉf-/<R;֊]F4NT06)?[dT_CtJA-_ t8o_"E%|P bJb.,z&C^Nk؂y<Dڴ4:>,
+Swa~{nuq⾖;khXuj57f
+
+amL^-`oFT'i\-
+0rE8g0V2$܋U^PEF5\cݺ@8>ŝ \Ũ5>&̼)ӛ~x>'{8׏S2V'
+?|=χw[C(Įgn^}9-,=%yx,Pƃ~TmԢ<fօCuTipd}l(nO>+pO20,4l6vw$4 WʶF6lάH-ⶵ(,9Ľ&ٷd4Euzh:CbփvCVҢ֊~:%NhqCTϺ@8P66ZYnh'׏aö0ݠɭZ[@ҚNd3O'FKpƹF,=r M
+3j S\6X.L\\DsZ A/r0Րl+ʜj(IKKKpmmvZ=1SA#FW݀SsVͯ{d0RZגw68LD[m'=Qd(sSh)wXxtԬTxP;IpO0"N,Bu͸/WϰYKKuUxr;>ٻ͹3
+Bl&.wD'&Co;XT{m;{U4w_J(۠˿.g81Ys\# .Ao Bߔ#l>`#"1%wrX3]F<MZ©L\C@k @1 X be
+ح=[9vgrn%(2Jn,l ;鷗7zqieP]9]UsG4N8C$S;'nzbV&.rE UީqHi,S;6պso7~x\lԆGp.2/iM
+Q'm [W}B%N""@>0nD|̯wCFpT+n'CQ@_umQ9+1q#CXlJJ{ֺ֓{3%e@bf }o?nMEVeAUkU׫zɺքWմNj>T_+g/U_L}{T6R5]Ju)*7_1QwOÖםs( B6dX֚ʵ_+a K2l)ef/pHɠlՋ*"9-0_ nȣU-jsɂk.` @S4f-0=r# j# kFdRA-X>[E\i` J J,jaтZfw{ s33#j1|'MnlffWB<IԸZmmPaT~ZgIVU
+
+"?m-Cq&B:-89<*):,GQueҾ>?h,uKZշm.e9}kK&kTI_L_#B4U5a"!N˕9lωp:ROo>Ǹ uB ݁vvP4ƷVilZ s=K+*!i_DE,D|n7 ,Zuy5B^JςіVӒp,?[G4oj냇(__{elq9~/ ZcV9Uw?p8,>X p<E4~zҿ<>&^~z)賕Met{+krp B*h}ǚ
+ͽ[]Ymֵ>TYm:)~Е ʵ2`Sϒ0 i9/cK澽45ťPhdI[̜4o ӴRL)1?(1w16!0^X~4:-100O޽nPEzI/_h?`&pfP{_ClhW*<geȻ99/ 5v"ZXYwѮ#}ϏRglsgzv8|\tխ9j_ólOqwfji~}@•ꠔҕ/_RERwAfE6);/|.j,Ƿxvf/zϖG=<3Сh^5dži[foa,
+5ZN74,lRbദ/IoQްm%{:( }>5@^yljs" -l>dbX:#r?(MZzj7ieai$]ے!DǕ@tQY~DTgVޠrdW&hy0Ztҥx~!DÇ咻U\]?Q2uۯqf)RY`z.UdVu
+muVF5DTV*ȫe!+ޥ W\/W|~T~WS9?I1`dS8#8 flYl
+~@?҉a]y> Nj[{X&qeu$Lmy]|K^|J cWcBE8@"<Yr?
+ܫk6\ }Zp6Z'΋Gt
+ܷO(#)2HƘ7J[6i*FCz}I<>Y2y9\vBw4ƕHOcPVtA\8'KF-G;c&"S\uZZ[єLT`ACi=8 N
+~TD}}f$<Bw7( *qV؋z5[R'7l?(PuZ3-ѫ4\S&>A+3p' w9{t26]Xn6Jf 6:_Q {Է_.%*嬍ѻhKO[3'0ˆ8 6Ru]գzL5'iCRf(cElkNu񡀄A U~[SGYg4_{3X&u5tS,!F@\zM\;~'"6ɟ(!hPF94NJـE~wY.~eŻao-s,t yL dL>au{%پa>#[Tj:'iRr@(ⲑ䬏!uĽz+žoxQZ𧮧(۷ h^A]V`XhvO۶1>m,"mNP|lCҽ U/?a>D$j*6IEh<&N{zfFl4t8~^Xtt.yvb[]MKn5չNh2%ZMnYSn=%ۃxC"Ax}wPqV~Gu <j{A+Ɨ]L!2(HWexb>;㐙Mܶܲݳ[fƚ*|
+Ns:M>FH"2= 5dr Pj%N`ssAQ{bbYj9r"{R>a`DLBq` ,],j7JCk2湺lVmsE5>'ݬӁ]ݯ[ޖnAe~=ͱc1b]V23: w+mPMlۍdurzUjgPjuUXm+^nT:ƞ,`WFYr(yJ8y-=oj_(?m&nOmw3?ښ^$\Esss~)trV]U6g4iR~mb@&Q1|g179O!
+\*t@zzOƧ tg]o\
+Le3ϋ\qyU
+c r|+a&6@8n@$Sf
+?]k7űtЏg}{`~ HHީFۗF1.Oڟ7~YgMyD2GQ_k?w6N'm3`.m? /hxC {!q`#Up3Ͻw߾#^ 9G: Z䠊G$%mPv|Bh;u">*8<cu;ҕy[Ӯ]vΥs glf~ܜ8{y>ō W;i{P/^
+; z4u83*\(>M穕|ɮ&;Bv 6PTLLFl>_#_L+p>e~Ou<@[!ڢuuKdE5.׌ɾةOv=vN}otQ'/xąz)Cx@zSOi_Q^A 1|'nVcC(/_;!d}Ҭ~eg0fn4I۵1SB0RN+}3sle[QQ0~>6]fS0o,wU'Nܸ=7!|عaf4r.X~g(\_iVٔ9.`ڟNVzӵoХzk2gӽn Ni.pztm-Uk/VI;)D?h^dO[>gezsjŴ&QL:xۃr{xbҵͽc3;hQgtF3|r'hrnܥI<<|)zVZr!{KSwг||b;ݱ<<nަ_wc3gd쑿̫]0՘a&JL֤kVٷ,~x(3Zڮ6"Z$Xl>sp4ӀF͹+\mݠyMH m7zg5cN{fVSM'5tl\,~ZBGg⣵dDT}+V^Ehi/g*_+h+
+ZܼaMG 줂
+b#h, [zma5t4 [x^k׵n7拺jpQ-P\H̭s祂U"mNwWyuZU^2rL贳^GVUM]pӜ/W^Z)dgFz]nf"j.,ͼ+8q/Bnj1ZP/չiwBmjbO5UVA- JKpc\F"?_.{GTn ~Em'c6I[JTfjW_vIT&~qn'wSY(dlzIYF+R>ljE*YYk*xv}gu5X`uvgv#zky&c6k̅4iL2t}WS?.lԒ:)*|& \yPC䕬*#tv&mUjDuL: [\b@qn?X .ZuWTy=kqdOXsJ* l/詥=(M{`9⠘]κ)H"IkyN e.Z8SVa 2Z{Gb,sE _^i֎+60 :xUM+!me>'#y;.z)s.7ސΙ"+x ]G~ }q"Ǩƫ= +9#ݳU~uznHM?ZQ%|\a֔^ɓJ N(FFt
+pnXo=x{y۳㺇ZqPc52adv
+C֓C|.\_ۇiH
+10 nw;S"ܸ\Lٜ2FEt`G8_ =S3+L"^.38Y(HYYLxL9y1ˬQB2O6%jоQZ +۩Y[R|PiwS{FO^A~N"| G
+ݼ*FyyP~ (8wѹTC\02]h+
+Kj"rCtrxgc{.KjU?#XqTfaN(c<yU\`\}渔k>j,mf^4e6kBD<=wԈ.V\aįB5_K9R?th\E>y 5յ]nm$3̩ZaLUӫ]뭱DDdPԠpr2 $:3Bq\]K%1yoz/PB8F/)LnȮh>Uwi<tˈLKOu G ֮ IY2Z3rG /2'h
+~
+[_0.V>,cLi
+K 8o.t%4ce=.TWk!o!B3fn Mο ϴ;s UI'we| ,gddh\\`,IIA+{ y|+APva~!|`<$yWȮ_vb82𘹖x:YFCgYCt<|֏bSD*J9k*- 7:S^2oA1Stξ>9Ųgg^f嬚vH܋H "Sx(`((`õau,`xt|/>q{Wqgm*M6qTZ>&y%l\Ӆ u)U!<stGyX~x8K[,= V,t6@˩
+H6<R FlٜſqT tS7 Q 2n9.sfÅ\&˗&^O5\1crQf`{F
+8NsF pg[wG ,mߺ%H% 0,S]>ewv^FIG"eCarB/*Zh߫/
+J֓|~>
+61U
+_2G^$_HW\k>ަyk@7qxG <C뚣+ڷK3/x?;i>v3qE%Jh$mDg]m
+K tx7ك}H=3۵tlnlТR8d#J/fncrJҼ3TM Wi}[&kj>O걕7k_
+in_svgf\JS+c&u8w!N!S1u>;?2m[﫟n>'v85G*bfMV"/7,72[޷kmNٱ?ieqTydo.dtbG@hb4fl+_ʷ> |L+wهxK$#4.{R8߾q'/an&2G5$>b#h.$^o5#3sثf݅vW_Lg~Dv k{G{uK:]^!N7̥?k}pgA;\qkD6o#`H!C^Y%3bWCɸ8/>9.Yp^ky ܮv)aOOA0y4)ڝpkm]yv6p#$f><2mfUg86_~{|r}t9`^ܻUL5t䝪ݽ6/?΀²]œNjViehl\۹tuުWS L9AˍT
+kvav0Vi;o8ں~dusR[g]ܯs
+DtVc T%͟kj=u ֪<T[˥q1$'q8?6Agk-rB|-h3jPA/Xg*kPS;cq4f{TUImr{U [Bi,ْJh;J
+8Epr֓HßoիZuTۏ Lٱnؼ&k=u6Or;#=x.hm_j"ITT*:ӒVJ&RRF^:\UiU/YT*z͇mY nx;`9
+SF륆2R%f>wak9V>B֬^I8mXVf^Y H/ii6Nm=<%gr-I)%dQl3I$n){ЩS7 l̴0gT`VV'nkS**@ftŦԡåI )[U*KG5ŬK lI }Փ0c>V"Ipt^Bg(WbR7LtH?
+X&-hP8&GzL2FӛUxT3p{z`:,䂼 8%LT}@Mpy3>y ==rʰ^aG=Xqllje6lj걥שAxHu5[qWl OipdRDU^ǯl w0^ҢY亜#B毣dBw^s~2ꗥ^WVdGcAGbKb6Cʢ͞EnːQ 3t4A i,c( IyInpxN9*./8sk*糐N`ƸW қ:2 j]?i:}\-y-zW%wGjՖv'RCiJN'_\KV'Ezo)Ɏ4 " S.2Iitv<.bɌ}j"2R$[!h7e+q^pT A?8?X :ѶJ
+ZGKPTyR<N7WqwzO/*<wJiJM'wSAr;[8OXߧDL)(*ǜQznqh-su^~Y۟GT #aNaBKLtN/H^U(OwE-ua؀ӆ,*榦F.Pxc &vQ^uBJp9xAMjk[ù،..WJA~9crv-gQ"hA/HQ),e`@?VYނZ(*rBSlf# ԃ|Y*ҥHlD;bt6@j )% Jed vEb0ƞS:<b^Q361٣~-e;8Y\` w ?Gh<ab/."Nݻc5`%UVaյ;@:r+%$d2\qbnj NȠ2#rvFG' Z鰊-8uГKzjViAn
+A;` P;H 6=ߏ,Zp.R8(w*e۹&Kwإɋ_02bܯ4tez>9t@rr" " G, @Kj
+823lZ> t.@'c 4S4߷mdF [΃c
+h0Ipy
+g5ZJ
+_)
+Wstn^]OgXah_ex
+JkV]<C/&o]6NOȎ58; _x/ܙdyy{X]h_Y6kN2*jWijIeثoQmw7DOsy ŎXY'81%z¡}q;QkRjx̛fvGMGTku[7g_Rֆpl?c9.qr-'AGb/N+'^=ڳ֮4^ VA-sMLhڴN4ַ\0ZT>!kWB&S%cQ(LI1>=߄ѳ#UنήV^ %_M-SxZI}_O.t Ő򂫎NQU]1CƬ0#W TrDfGTGMϲץLGa,$ kn^| -po{.<ӝZPi~TpbV"eci-23 +U}WH/[NY.eT`Y?;aKG`qWx>׉A(N\V8Yi*ZS,S&ٜa|߉YNʍtwh+ݩ.ѽW|Ӻ 9 _tyJI^Y/ XJW פ<iua_Uo|&[ :1YdRfe3F77sUәک]TW[ P?ҫOR^RiT\j%)~܊O+)lb?,F{:`/^_wNY[*X=Wv;v[9=gt&1gV} \z-ZIRjc{ʴ)X[˟Piue Mq)l!b&cdjb=m}KԤoAE;~/)˲TWO5Vj ʩ.gKc[$uHGFr?rDmi{RN7ߊ-8{y3+DNJKΟ` ~^V⽊Fژ:I3kVA{ϚPjwZpPz[`Jj>\MgҺR$$xq:e-!
+oTС@>j4izƉ$``Pa*b,`~7͡+(EaAXATqNm+yuVw"/ȝ/BcsKQCwCh>'4e1;5~08nkyArP<jQS]ze[[b:ߖ^Zo֓8
+/Rww:ק'Ȃ=91L6&[. sLԁS=A8]i0Z.Gj2\EZ^ :kӾˣ;^IoC&Gm:uhWtW^8>r$W>yJ eSXb&ɥa^g`y^tmKbS DmM(¡Cb8'ͫhN}h[Nݟݴڶ{ZFpMfiiy/`vDlkG̔xvHs3sV^Dչe64ZKpoݵhqƬq^#pVTpwվ`?)]1\:8KXCW_{)nF q s#LjI)B6w۩#"U+g=잘av '\_ tQTӢr1b@\ƍ~DJ"N.&L: YxZ=5'jE8W :,9b
+Ru~|rsPтfx}^LZEh/Sn6\9Ca 1Y[JY*3ϰ@""w~
+E^+t`PAΞJ$.ַ:VPoAl>(G
+=zPNpm[{^NtFGTv.ujs8zUvXŬ^$zkU@q9,< {@(#R |+'
+Ŧ=6@? P@4`@A
+
+;nFO]+Hf7$iO]\yبiOw\}ď:?"1 w,\ }|yb'{x[>$̷݂ڴRvaM-AEe2s3u My9rdgհIX*vc^mC+;N]"y9d ?.kjp[qNޜC>ό…3&Z0NZ9b5vatn{j@;)q?_
+95#hA<f>s8/[][w<D,3)4_X<EC$5PftaobxP8UD\u
+y^絣[Ϣt*Hi7;Er@~܍*I6kH6-\6{zF6ʿ0`TWl]VWGd_eފ84=64|8+ZjIէӻz<- /irSJ{ƈe !trtHIl,DŽ'>2s4$8⤜Έ,kMmĆG~*/U)O_skRGz,J=K Փ,Ty(mVO#od8wsIC$VϘm;qR;Gbt"|]`ͺKWKck 0ނmזȢ °bXnOS"r9Bn‘h"}rٗx,[r)HC[LlTUf02Ba5 -r[\ ,[\qڋbCjTjPbJMmkiAjCvTc/z0Z~3c}1Me*{$[zWr@ DXPx\G!~ LVތ n<g$/0| yZ`LH:s> &WEWJ+^ɉ6ˆ YZ+;}-]˯/%ψ==n\w! J[e. (=m,20
+*5{5*s:W}ALz-csA6+--ZWo{ *pPRBs]i y=V}I?f7̥kYyaRL&IkeAwPl Q~M$ElG"fDx/*f٪(>VIל'}>71mo޲_p}(ҁ4?J9!;1bڷF6zۓB ӎЅj: '|''
+\ ir* N'$c /VXd,Λ2NM=>'kk4(F_·{RB 79İ8gϚр/d
+
+2g8U8e64z|֕pJpp~UZw5Q}!+΋\M6NQSDxd#,R*ry c7To?J2n]{;4>n7+`:ʲ'PnW^ eD@"(!'}VSQT5\QR's% X:F֐Y΅Q(Y=6 Tht
+δc`= l(W.%HB"4
+0 C6DL W`Bxό@<* Mo?fY+ٯ5(Uw(Sɤ
+]_^Qrˎ2@ny W*}(
+B@a
+Pr(
+"PY($JpRK;4ڣA9fJr罍BK3\itۯ_cw^@=!%*;& -~| td|:@r
+tu:zS̖ M> ,h;W7m5"M*%`t:00 D>0zW9O =W[a߶^?ݲFo
+dcDtl*ÿɟ(SvYYɣRss[Oݫ𱮲QR@m2u_Wϼpkh3 Nh)*i*v^juBϚFkz^u} ݺM0z<vdc
+c]]F(*0!z@u_L,)Y>j<fЦVUUIP8i\xnCGVyiv:4dk92U+Fq$u
+uUr8V vNbq'paT~ĝ@!x<U.)/M\r^*4zfRW[Iڭ:Y{Jq *5tO}GT/_rP7Bo'KW"_Xt*%e댦^+ y7kJ'?vz p "\CRd_
+[媰1crC3U+^HXiWԩ~vcOZQ_bNrhv[s5WThX.?HQ!Z-2ZKRdpu&Js]:ݓg⭺BaO_
+DDNץ0k;˚7G)~[߀$\U6cۇ3׋+,aV86&67"VU%2^yf8ڠZWBIKv0{ 
+ . xx\̿7 iv_lA-VW̩{3a!8M
+Ԥu}2)w;bƦl#~,6ҍO綱A#,8]LzY3ktM*;W!y\Z{~L؆Y`0J7lIP} 5[(5r$:H(?HZe dsv*g!ꖯN8Tryv@H!sbQMHꢐaQfҺ a =o9}Awҥ&7/mST)
+L
+
+9d7[Ĵ\y 2ݚb,=$>!iI=FnoVɯYոb_ևfaֽ(ӊmڨIܫ&R6_L+hye
+QP^'2mJ)92%g>/"[`V$D<8Y7ϱ yb`,te'gp|)ǰHqp/Af5*eu@<ےF5oG^^rY-&I =bV.* lmnkI%d7eHzz#m+;EA\r'h
+rK'T.p8쉿hSsDz5XWZxgczJ.XܭdgCԫSЦK%KM9ݠAZbTShW gT~):,Hl Dg
+؝FpQ@ DA2o-
+ސY^=>%d+|A[Nl$u c;
+ܢu.dYl!lxnX}l0_37l33]K^+s_[TG-TE.gY"I:X:z]Re<'+w@w' %|fN
+hp_l^@h­@T3n@rrbF٭Q@r>)o`w/:{#G-vГd}5`s녃~.DO14So\|@q~\HLj@M =9 sb ȹy:'dD@+Oz 7Y*+dË~r!gn/UWTxw?c# +k?>
+W8ufh
+Wۏbou'2l0"տQ_n\^BA=ܽ?HT ߧ!rB VTgʳy)3=M[9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٢b&l*nMՙ=aɇ\
+(q9jje>ݪ2>NEAdKnX07ޭB6)ˍYW3dp4ݿVv\tը
+ɺ2SJ|rIri{gMr4\nA~{3ZNݵ2Lga|*?ȨzYf^joLC\}OCU>?*\eE3󡻮.̲h6#}ޟ_I!{$2˰֋'w~+(gl3ԙy|1C}XZtrFurc߭iq:q4' Z в8^M#6;1e'Xwvmd޲1V5s+Uḻ:ٷt7f6<KشI>?urV4^ ԺGlUAh?WJ3.>oϋq?hJث6fGOԳ4w7-G-=u=+u}&| NɃDTtUfuO*TiQ||͌=9]kgp/Β^]|J1vqt-lZ0lZIr(T{UV(;/&:]ݿ\-vú *D|9*o)ZC,%4K\!7qBhz${(lSBnCC &Ui)VPRMuu^g Af%t9jG8J89{;P
+q֢3"\GTB=s"xbws^pBq E$>pRb`j5{~ Fz*VQy+=6遉vU,, y1 J"<6~!޶&7va˓Pt 5g7ZbRsU HHS4d7s4Bw,~?,VlK)׶} uD}@SndP汮\%[Z0%S8拁I)[lcV1q[{:'GNOaҗhRۆܥ5츧:Fu[m+~_e{Nv
+A3eZm}g\sTd qWZȱqiWg:c2M+bdP32]З mAAΟes9-#rpmoI("{Ą? O^@/rD_"Z0pITcuHoE_鹺'f|1Fas싂4愌 F6}wvdPeΊ7Px^I$4ĥ<xAڧp8ߦx!;rXQsܘ]Wj~H>c*6wOhSz4ʡZLXhch*]rX/k$tɐ9'"jfA{aatVi+4׷47hՓuMo#Cf*7UN{
+m ( )ox`Zw7)
+P mxf
+AKFI
+58&tܘz%(9]7 iy8@\ow2i
+ IO/sH{zfۇ1*wl'|eY`gR[l@^{m:uZD ?<7O65*uy:1I/סMVu~/s+U2>Dlɭm yW{^ʋ)6S~n>DmehNwWNPSӠ6bAs.aZOm_Uz3tr*l-eEs?#W}^kDžjrw<+a48J{F`d2Jnp_SټuNbSDgt;4t t3sjn۫ڦ6Ӱ!P<ܔ< ";2C:,,{_'r!Z58Q{;Ĵ}`w[POwj3.y23$ұ5F3Оe\Wڤp/ЍԪ
+Zd$
+ujV\PS-Z'EZ$Q>P:=M-rdX|ЕR@[n|+0YgסR0YCVZ~eU&WZ㠱/c,FZx,E\{뿰ޣŭBV'Erb<
+Gm ^7j$l:q?E2ܲøUz!TD1Iam^k,JSA'1/ٱ,B!.R (}>aU3h޲~Jc92~gDg}ÛJբGnK۟uۍҩڭT+.oC4'x(]}8 -xʹ% -!WP8`L+maV˕SmH#q6]_A"D&<JD|.!쇙&<s1\s[ ]@{pj\n/)´r\}؏ceΥNGmM_.—ͭ8n @''o>nO+v@ݖ)asPGyۤ>c!җK";[btR{Of[gjj|Fό{Xu $E_=ռ&KAnH:FūM(#WFfzTn7%# ;
+ࢍc38|!ZcA1.c\c"Ʊamv}P*
+ky>4\™E~:p; a~L3&.ɁdpdjP;sr@+,C4Gr<[c~c&қoY{@A=l}w1)*r(k:eR^LԎ"fm{oKpcRPH@)D@tgq5_W*X}#Y.WA*\r:Q[
+Q<(2BLfŸuۣ`<x$Werr|GEqeFZ1vLOĸIMIK-:7.1wzmK*
+rz GQ3T4*RzfnSȚT5mPiwl`}ݝ4{PoTZ_pc+檱yi!HjK±>iU,gCQq;%?bdDy|Zy$"cPFp8P*
+B
+o
+ oe
+&Pj\
+&}k&/Pz}j=P{`[+0~ݶߗ?Eߌh'p
+-+~#)rrOͼMdԥzEbOu8@ڕfg'8'jA4v/:|l+ ^S'':>F5y"~6k^EW&k/;)\azQrV׫<.%lNSb8L˄6ե1idQc [ܤ4Uu]~~F&AlԵ!:$V-5~Wozm$vɡ/SM<%xQ@xxA(8~_7{@?wwщ 4 :k't<Lw
+yV[85[܈{pYзvq=?f#ӮCfk'q#.mO6[:Km-ZUUL3^8\XLg];W+ēld-l(ǿ꣼C̹f'S kiN C/~m^-ry?2& mZWCmܽQZFQ\MmCˬ;T6TɓJRe
+w׼ oQu[k1[3%F^-AY8"z)=ElGC_,:Mc>qk]t];7[xdNmm|b=Wv;6'͗<}f}BB^i%h>lvZE(
+
+^w*g78&KB:\sJs*5ƾXvr}R,cX"F߂;4V]vǘFۤ8uO"lmm O"wq:p
+2&Sd8:m|lMi}_2Dfkl'#ix_n<;c.0Yi^V<6}Tj8&v6upls {aR'ꃜ
+'?H6,Ym;9&=fF꙱G҆&Jh(W:74/i tӻYOQ+;uwn5K:AN1ZbP.gV =R+2Ō1 aKj@/VWwP'\2&[iߋ_?zEڸ|Kvr`{OD/F=l2Gx`LyGX
+1M+{[ɰYAwֲmԬ1l.74yՆK(mۊ]׎g<AjS]  +d 0Ǽ`%2Ê{@e*Tq })aSnVS3LŦY&] tJS;:F K񥔆7 Ec!A(n_iy/?Nn[\z9v7{.r}6LpqU +] iI6[sT /HҺn:j #gPUQ)E8QcV!IgP"ĬsE~U+ ܶ{r wuo"k(LwtFtLwX՝2טJgm@cwzaf9k1zX:co DSRSj<M;4MǷT\g .LDBgEt)Z[EVJTwo}!G kL<=A+Jp 4I0Li1BuRfeҜĻ/q+OQ|㪞C-hpjRrfDdG}Hg ݜ:'|T+4=yi|BdLg*u)G9;R͉^A)`El!L+?i=݆~%س
+H>C.^: >ask _f34NN9lc[XEI"V
+=*c7 *d;13P6$#GGj8TʼXpHZwzE8\SæX\I/,ScWAʰ`lnE &hvBO&&fJ5kg;zc"a;@a͆W<~~] Ye
+q0Rs=e.я\|S b;ƞ
+!{)U8LΥH$p!@
+ua@a)n/{ѓ#.ir2oħop0,+FjeҴs !\Nn!唓s/>l}Lףl$+6 :Ah%E$&5@3uG/پfZ_?i_0ASХJqGsFyQx!YtRe6+ [?s$SI5̎'(>ns>
+5З]/\DwU?GV:{I[SIgʻH/~D~C-η۔qitөFAέB$69+;TBk}m&:@**e\v,ˬ3=lUvzJOq?ȯ
+T.nݸ(r "v:-eu}Ҽ57<wsCVYAӅtĘL<Dw%g?:z~<tDɀ>T79}YW?+k#5#cAn|
+]$;Xdl5_i=L2c0rA\Q-qZ^S;ͭ.:ag?HM6wV
+o2V#fU~y}7j`QCeװک3FЃҵAe:H~YGT6W޷}
+%kfKq#sݨlTVͦKqnuUOֿ;x/9'x͡}п.:\ݢ>𭀳fKF63AmeuhijЕxGikT]֬JMŗ[w,ޞLz0BXvKe]Ƭ˺j¯vZߤaT^Lt}zcJA_Gu+Uk6ZyU-]T$xZݨ[֧^M<,Ye*zQy+NY=!Gۑ =}K%<l2*[gTumfTzhΫpc8Nܖ6CqEn%h=zmf
+cIali^j尝eLz}%6<[Ei!ORVBZ Qu@멁^K}ю:q_4$^X~><Ϋ~%ڜJʏ*xC9>dj)]53l0ꨰaSjVr)_#j咂X̨̄Ri=hQYm4-wr%z6j`J\:mxIJߘEC22{T%i?L%dEU B[Hhq?. 8wr8a zWһ MJJ!E%EU/SӅD:dzD9iJ5|v'_J)w. ';dUc!11t>\wJӵh6݂T;kmղ)10JXw*;%} =='%pZݐxBB]ɗX6zcɂ++u9^A+Asզ]-usAߒh}g<:jpfwN3^mnJ6X(6n>#>JCWY,{HmU4c݇ x65d=2djM9h9. R3Zۼ?R/tU{lmg!Qk5>TG$(]yj8v:)]sE3M6 k=LXNX2S#~̙ĆQ(@>?x<p²rxi],*ںY+J-=ˆJ̦AyI(Hꝫn['Fa6;Z{~2x"B,MBBQ&&A( .Zz/s1G4F3yt?s8jFwX*LnP,w
+ ,,=jA4\lMl Oԣ6ޒ#ؐ-'#>(
+D"@:o q! iJ.]E]$KRӨ6}#%,Vt-w#2BS^ 3?^=5P*0YW%2 @YS/ Mw{
+ l2O'˘ Pj6q]ҧzE ޯ 7-E6[ŔSZ3ig;{БHa?oH1@,xu69t5%x
+r:X@IGZ&_pnXQVUuFj6~Hh:W5ɀ/xLr9=I_SGڂk|.&ڀ @:9 \kHN~u+DۧoD3l<(X,ݜڭ2Ρ<6a. LDug!Z*EGJU@E %X
+b41 \/H
+7 ě%8gxOn*- 2{@|@Evܚ6b\P~ ;r.o*֣e.b7|f6Ur3Qn(6VNvR+R(H ( x&&_+&sjWiDz|:LZ9AcOu>ﺿbW̆HT,Zz8
+0000000016 00000 n
+0000000144 00000 n
+0000063666 00000 n
+0000000000 00000 f
+0000068608 00000 n
+0001033287 00000 n
+0000063717 00000 n
+0000064082 00000 n
+0000458775 00000 n
+0000068907 00000 n
+0000068794 00000 n
+0000067580 00000 n
+0000068047 00000 n
+0000068095 00000 n
+0000068678 00000 n
+0000068709 00000 n
+0000068942 00000 n
+0000458848 00000 n
+0000459200 00000 n
+0000460215 00000 n
+0000469791 00000 n
+0000508583 00000 n
+0000574171 00000 n
+0000639759 00000 n
+0000705347 00000 n
+0000770935 00000 n
+0000836523 00000 n
+0000902111 00000 n
+0000967699 00000 n
+0001033310 00000 n
+trailer <</Size 31/Root 1 0 R/Info 30 0 R/ID[<04474F520CD64343A8E31F2BD4602051><55825B7DCFBE4F658EED79D573CAFF36>]>> startxref 1033489 %%EOF \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/logo/CSV Helper logo.eps b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.eps
new file mode 100644
index 0000000..fd5112c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.eps
@@ -0,0 +1,6154 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%ADO_DSC_Encoding: MacOS Roman
+%%Title: CSV Helper logo.eps
+%%Creator: Adobe Illustrator(R) 14.0
+%%For: Jon Ruprecht
+%%CreationDate: 9/7/11
+%%BoundingBox: 0 0 582 241
+%%HiResBoundingBox: 0 0 581.9990 240.5405
+%%CropBox: 0 0 581.9990 240.5405
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%ADOBeginClientInjection: DocumentHeader "AI11EPS"
+%%AI8_CreatorVersion: 14.0.0 %AI9_PrintingDataBegin %ADO_BuildNumber: Adobe Illustrator(R) 14.0.0 x367 R agm 4.4890 ct 5.1541 %ADO_ContainsXMP: MainFirst
+%ADOEndClientInjection: DocumentHeader "AI11EPS"
+%%Pages: 1
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
+%%+ procset Adobe_CoolType_Utility_T42 1.0 0
+%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
+%%+ procset Adobe_CoolType_Core 2.31 0
+%%+ procset Adobe_AGM_Core 2.0 0
+%%+ procset Adobe_AGM_Utils 1.0 0
+%%DocumentFonts:
+%%DocumentNeededFonts:
+%%DocumentNeededFeatures:
+%%DocumentSuppliedFeatures:
+%%DocumentProcessColors: Cyan Yellow Black
+%%DocumentCustomColors:
+%%CMYKCustomColor:
+%%RGBCustomColor:
+%%EndComments
+
+
+
+
+
+
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{currentpacking true setpacking}if
+userdict/Adobe_AGM_Utils 75 dict dup begin put
+/bdf
+{bind def}bind def
+/nd{null def}bdf
+/xdf
+{exch def}bdf
+/ldf
+{load def}bdf
+/ddf
+{put}bdf
+/xddf
+{3 -1 roll put}bdf
+/xpt
+{exch put}bdf
+/ndf
+{
+ exch dup where{
+ pop pop pop
+ }{
+ xdf
+ }ifelse
+}def
+/cdndf
+{
+ exch dup currentdict exch known{
+ pop pop
+ }{
+ exch def
+ }ifelse
+}def
+/gx
+{get exec}bdf
+/ps_level
+ /languagelevel where{
+ pop systemdict/languagelevel gx
+ }{
+ 1
+ }ifelse
+def
+/level2
+ ps_level 2 ge
+def
+/level3
+ ps_level 3 ge
+def
+/ps_version
+ {version cvr}stopped{-1}if
+def
+/set_gvm
+{currentglobal exch setglobal}bdf
+/reset_gvm
+{setglobal}bdf
+/makereadonlyarray
+{
+ /packedarray where{pop packedarray
+ }{
+ array astore readonly}ifelse
+}bdf
+/map_reserved_ink_name
+{
+ dup type/stringtype eq{
+ dup/Red eq{
+ pop(_Red_)
+ }{
+ dup/Green eq{
+ pop(_Green_)
+ }{
+ dup/Blue eq{
+ pop(_Blue_)
+ }{
+ dup()cvn eq{
+ pop(Process)
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_clr_spc currentcolorspace def
+ /AGMUTIL_GSTATE_clr_indx 0 def
+ /AGMUTIL_GSTATE_clr_comps 12 array def
+ mark currentcolor counttomark
+ {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
+ /AGMUTIL_GSTATE_fnt rootfont def
+ /AGMUTIL_GSTATE_lw currentlinewidth def
+ /AGMUTIL_GSTATE_lc currentlinecap def
+ /AGMUTIL_GSTATE_lj currentlinejoin def
+ /AGMUTIL_GSTATE_ml currentmiterlimit def
+ currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
+ /AGMUTIL_GSTATE_sa currentstrokeadjust def
+ /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+ /AGMUTIL_GSTATE_op currentoverprint def
+ /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+ /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+ currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
+ cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
+ /AGMUTIL_GSTATE_ht currenthalftone def
+ /AGMUTIL_GSTATE_flt currentflat def
+ end
+}def
+/set_gstate
+{
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_clr_spc setcolorspace
+ AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
+ AGMUTIL_GSTATE_fnt setfont
+ AGMUTIL_GSTATE_lw setlinewidth
+ AGMUTIL_GSTATE_lc setlinecap
+ AGMUTIL_GSTATE_lj setlinejoin
+ AGMUTIL_GSTATE_ml setmiterlimit
+ AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+ AGMUTIL_GSTATE_sa setstrokeadjust
+ AGMUTIL_GSTATE_clr_rnd setcolorrendering
+ AGMUTIL_GSTATE_op setoverprint
+ AGMUTIL_GSTATE_bg cvx setblackgeneration
+ AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+ AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+ AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+ AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
+ {
+ currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
+ {
+ mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
+ }if
+ }{
+ AGMUTIL_GSTATE_ht sethalftone
+ }ifelse
+ AGMUTIL_GSTATE_flt setflat
+ end
+}def
+/get_gstate_and_matrix
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_ctm matrix currentmatrix def
+ end
+ get_gstate
+}def
+/set_gstate_and_matrix
+{
+ set_gstate
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_ctm setmatrix
+ end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/AGMUTIL_cpd nd
+/capture_cpd{
+ //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
+}def
+/thold_halftone
+{
+ level3
+ {sethalftone currenthalftone}
+ {
+ dup/HalftoneType get 3 eq
+ {
+ sethalftone currenthalftone
+ }{
+ begin
+ Width Height mul{
+ Thresholds read{pop}if
+ }repeat
+ end
+ currenthalftone
+ }ifelse
+ }ifelse
+}def
+/rdcmntline
+{
+ currentfile AGMUTIL_str256 readline pop
+ (%)anchorsearch{pop}if
+}bdf
+/filter_cmyk
+{
+ dup type/filetype ne{
+ exch()/SubFileDecode filter
+ }{
+ exch pop
+ }
+ ifelse
+ [
+ exch
+ {
+ AGMUTIL_src256 readstring pop
+ dup length/AGMUTIL_srcLen exch def
+ /AGMUTIL_ndx 0 def
+ AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+ 1 index exch get
+ AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+ /AGMUTIL_ndx AGMUTIL_ndx 1 add def
+ }for
+ pop
+ AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+ }
+ bind
+ /exec cvx
+ ]cvx
+}bdf
+/filter_indexed_devn
+{
+ cvi Names length mul names_index add Lookup exch get
+}bdf
+/filter_devn
+{
+ 4 dict begin
+ /srcStr xdf
+ /dstStr xdf
+ dup type/filetype ne{
+ 0()/SubFileDecode filter
+ }if
+ [
+ exch
+ [
+ /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
+ currentdict/srcStr get/readstring cvx/pop cvx
+ /dup cvx/length cvx 0/gt cvx[
+ Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
+ names_index Names length currentdict/srcStr get length 1 sub{
+ 1/index cvx/exch cvx/get cvx
+ currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
+ Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
+ }for
+ currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
+ ]cvx/if cvx
+ /end cvx
+ ]cvx
+ bind
+ /exec cvx
+ ]cvx
+ end
+}bdf
+/AGMUTIL_imagefile nd
+/read_image_file
+{
+ AGMUTIL_imagefile 0 setfileposition
+ 10 dict begin
+ /imageDict xdf
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ /imbufIdx 0 def
+ /origDataSource imageDict/DataSource get def
+ /origMultipleDataSources imageDict/MultipleDataSources get def
+ /origDecode imageDict/Decode get def
+ /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
+ imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ {
+ /imbufCnt imageDict/DataSource get length def
+ /imbufs imbufCnt array def
+ 0 1 imbufCnt 1 sub{
+ /imbufIdx xdf
+ imbufs imbufIdx imbufLen string put
+ imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
+ }for
+ DeviceN_PS2{
+ imageDict begin
+ /DataSource[DataSource/devn_sep_datasource cvx]cvx def
+ /MultipleDataSources false def
+ /Decode[0 1]def
+ end
+ }if
+ }{
+ /imbuf imbufLen string def
+ Indexed_DeviceN level3 not and DeviceN_NoneName or{
+ /srcDataStrs[imageDict begin
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi string
+ }repeat
+ end]def
+ imageDict begin
+ /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
+ /Decode[0 1]def
+ end
+ }{
+ imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
+ imageDict/Decode[0 1]put
+ }ifelse
+ }ifelse
+ imageDict exch
+ load exec
+ imageDict/DataSource origDataSource put
+ imageDict/MultipleDataSources origMultipleDataSources put
+ imageDict/Decode origDecode put
+ end
+}bdf
+/write_image_file
+{
+ begin
+ {(AGMUTIL_imagefile)(w+)file}stopped{
+ false
+ }{
+ Adobe_AGM_Utils/AGMUTIL_imagefile xddf
+ 2 dict begin
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
+ /imbuf imbufLen string def
+ }if
+ 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
+ pop
+ MultipleDataSources{
+ 0 1 DataSource length 1 sub{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exch gx
+ }{
+ /filetype eq{
+ DataSource exch get imbuf readstring pop
+ }{
+ DataSource exch get
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }for
+ }{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exec
+ }{
+ /filetype eq{
+ DataSource imbuf readstring pop
+ }{
+ DataSource
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }ifelse
+ }for
+ end
+ true
+ }ifelse
+ end
+}bdf
+/close_image_file
+{
+ AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
+}def
+statusdict/product known userdict/AGMP_current_show known not and{
+ /pstr statusdict/product get def
+ pstr(HP LaserJet 2200)eq
+ pstr(HP LaserJet 4000 Series)eq or
+ pstr(HP LaserJet 4050 Series )eq or
+ pstr(HP LaserJet 8000 Series)eq or
+ pstr(HP LaserJet 8100 Series)eq or
+ pstr(HP LaserJet 8150 Series)eq or
+ pstr(HP LaserJet 5000 Series)eq or
+ pstr(HP LaserJet 5100 Series)eq or
+ pstr(HP Color LaserJet 4500)eq or
+ pstr(HP Color LaserJet 4600)eq or
+ pstr(HP LaserJet 5Si)eq or
+ pstr(HP LaserJet 1200 Series)eq or
+ pstr(HP LaserJet 1300 Series)eq or
+ pstr(HP LaserJet 4100 Series)eq or
+ {
+ userdict/AGMP_current_show/show load put
+ userdict/show{
+ currentcolorspace 0 get
+ /Pattern eq
+ {false charpath f}
+ {AGMP_current_show}ifelse
+ }put
+ }if
+ currentdict/pstr undef
+}if
+/consumeimagedata
+{
+ begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known not
+ {/MultipleDataSources false def}if
+ MultipleDataSources
+ {
+ DataSource 0 get type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width cvi string def
+ 1 1 Height cvi
+ {
+ pop
+ 0 1 DataSource length 1 sub
+ {
+ DataSource exch get
+ flushbuffer readstring pop pop
+ }for
+ }for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
+ {
+ Width Height mul cvi
+ {
+ 0 1 DataSource length 1 sub
+ {dup DataSource exch gx length exch 0 ne{pop}if}for
+ dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }
+ {
+ /DataSource load type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width Decode length 2 idiv mul cvi string def
+ 1 1 Height{pop DataSource flushbuffer readstring pop pop}for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
+ {
+ Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
+ {
+ DataSource length dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }ifelse
+ end
+}bdf
+/addprocs
+{
+ 2{/exec load}repeat
+ 3 1 roll
+ [5 1 roll]bind cvx
+}def
+/modify_halftone_xfer
+{
+ currenthalftone dup length dict copy begin
+ currentdict 2 index known{
+ 1 index load dup length dict copy begin
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end def
+ currentdict end sethalftone
+ }{
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end sethalftone
+ pop
+ }ifelse
+}def
+/clonearray
+{
+ dup xcheck exch
+ dup length array exch
+ Adobe_AGM_Core/AGMCORE_tmp -1 ddf
+ {
+ Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf
+ dup type/dicttype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get
+ exch
+ clonedict
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ dup type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get exch
+ clonearray
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ exch dup
+ Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
+ }forall
+ exch{cvx}if
+}bdf
+/clonedict
+{
+ dup length dict
+ begin
+ {
+ dup type/dicttype eq
+ {clonedict}if
+ dup type/arraytype eq
+ {clonearray}if
+ def
+ }forall
+ currentdict
+ end
+}bdf
+/DeviceN_PS2
+{
+ /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
+}bdf
+/Indexed_DeviceN
+{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne{
+ dup/CSDBase known{
+ /CSDBase get/CSD get_res/Names known
+ }{
+ pop false
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}bdf
+/DeviceN_NoneName
+{
+ /Names where{
+ pop
+ false Names
+ {
+ (None)eq or
+ }forall
+ }{
+ false
+ }ifelse
+}bdf
+/DeviceN_PS2_inRip_seps
+{
+ /AGMCORE_in_rip_sep where
+ {
+ pop dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
+ {
+ /currentcolorspace exch AGMCORE_gput
+ false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+}bdf
+/base_colorspace_type
+{
+ dup type/arraytype eq{0 get}if
+}bdf
+/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+{
+ /pdfmark_5{cleartomark}bind def
+}{
+ /pdfmark_5{pdfmark}bind def
+}ifelse
+/ReadBypdfmark_5
+{
+ currentfile exch 0 exch/SubFileDecode filter
+ /currentdistillerparams where
+ {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+ {flushfile cleartomark}
+ {/PUT pdfmark}ifelse
+}bdf
+/ReadBypdfmark_5_string
+{
+ 2 dict begin
+ /makerString exch def string/tmpString exch def
+ {
+ currentfile tmpString readline not{pop exit}if
+ makerString anchorsearch
+ {
+ pop pop cleartomark exit
+ }{
+ 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5
+ }ifelse
+ }loop
+ end
+}bdf
+/xpdfm
+{
+ {
+ dup 0 get/Label eq
+ {
+ aload length[exch 1 add 1 roll/PAGELABEL
+ }{
+ aload pop
+ [{ThisPage}<<5 -2 roll>>/PUT
+ }ifelse
+ pdfmark_5
+ }forall
+}bdf
+/lmt{
+ dup 2 index le{exch}if pop dup 2 index ge{exch}if pop
+}bdf
+/int{
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop
+}bdf
+/ds{
+ Adobe_AGM_Utils begin
+}bdf
+/dt{
+ currentdict Adobe_AGM_Utils eq{
+ end
+ }if
+}bdf
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Core 209 dict dup begin put
+/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen[currentscreen]cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/AGMCORE_Default_PageSize nd
+/AGMCORE_Default_flatness nd
+/AGMCORE_currentbg nd
+/AGMCORE_currentucr nd
+/AGMCORE_pattern_paint_type 0 def
+/knockout_unitsq nd
+currentglobal true setglobal
+[/CSA/Gradient/Procedure]
+{
+ /Generic/Category findresource dup length dict copy/Category defineresource pop
+}forall
+setglobal
+/AGMCORE_key_known
+{
+ where{
+ /Adobe_AGM_Core_Id known
+ }{
+ false
+ }ifelse
+}ndf
+/flushinput
+{
+ save
+ 2 dict begin
+ /CompareBuffer 3 -1 roll def
+ /readbuffer 256 string def
+ mark
+ {
+ currentfile readbuffer{readline}stopped
+ {cleartomark mark}
+ {
+ not
+ {pop exit}
+ if
+ CompareBuffer eq
+ {exit}
+ if
+ }ifelse
+ }loop
+ cleartomark
+ end
+ restore
+}bdf
+/getspotfunction
+{
+ AGMCORE_screen exch pop exch pop
+ dup type/dicttype eq{
+ dup/HalftoneType get 1 eq{
+ /SpotFunction get
+ }{
+ dup/HalftoneType get 2 eq{
+ /GraySpotFunction get
+ }{
+ pop
+ {
+ abs exch abs 2 copy add 1 gt{
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ }{
+ dup mul exch dup mul add 1 exch sub
+ }ifelse
+ }bind
+ }ifelse
+ }ifelse
+ }if
+}def
+/np
+{newpath}bdf
+/clp_npth
+{clip np}def
+/eoclp_npth
+{eoclip np}def
+/npth_clp
+{np clip}def
+/graphic_setup
+{
+ /AGMCORE_graphicsave save store
+ concat
+ 0 setgray
+ 0 setlinecap
+ 0 setlinejoin
+ 1 setlinewidth
+ []0 setdash
+ 10 setmiterlimit
+ np
+ false setoverprint
+ false setstrokeadjust
+ //Adobe_AGM_Core/spot_alias gx
+ /Adobe_AGM_Image where{
+ pop
+ Adobe_AGM_Image/spot_alias 2 copy known{
+ gx
+ }{
+ pop pop
+ }ifelse
+ }if
+ /sep_colorspace_dict null AGMCORE_gput
+ 100 dict begin
+ /dictstackcount countdictstack def
+ /showpage{}def
+ mark
+}def
+/graphic_cleanup
+{
+ cleartomark
+ dictstackcount 1 countdictstack 1 sub{end}for
+ end
+ AGMCORE_graphicsave restore
+}def
+/compose_error_msg
+{
+ grestoreall initgraphics
+ /Helvetica findfont 10 scalefont setfont
+ /AGMCORE_deltaY 100 def
+ /AGMCORE_deltaX 310 def
+ clippath pathbbox np pop pop 36 add exch 36 add exch moveto
+ 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+ 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+ 0 AGMCORE_&setgray
+ gsave 1 AGMCORE_&setgray fill grestore
+ 1 setlinewidth gsave stroke grestore
+ currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+ /AGMCORE_deltaY 12 def
+ /AGMCORE_tmp 0 def
+ AGMCORE_err_strings exch get
+ {
+ dup 32 eq
+ {
+ pop
+ AGMCORE_str256 0 AGMCORE_tmp getinterval
+ stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+ {
+ currentpoint AGMCORE_deltaY sub exch pop
+ clippath pathbbox pop pop pop 44 add exch moveto
+ }if
+ AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
+ 0 1 AGMCORE_str256 length 1 sub
+ {
+ AGMCORE_str256 exch 0 put
+ }for
+ /AGMCORE_tmp 0 def
+ }{
+ AGMCORE_str256 exch AGMCORE_tmp xpt
+ /AGMCORE_tmp AGMCORE_tmp 1 add def
+ }ifelse
+ }forall
+}bdf
+/AGMCORE_CMYKDeviceNColorspaces[
+ [/Separation/None/DeviceCMYK{0 0 0}]
+ [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
+ [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
+ [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
+ [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
+ [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
+ [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
+ [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
+ [/Separation(Cyan)/DeviceCMYK{0 0 0}]
+ [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
+ [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
+ [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
+ [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
+ [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
+ [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
+ [/DeviceCMYK]
+]def
+/ds{
+ Adobe_AGM_Core begin
+ /currentdistillerparams where
+ {
+ pop currentdistillerparams/CoreDistVersion get 5000 lt
+ {<</DetectBlends false>>setdistillerparams}if
+ }if
+ /AGMCORE_ps_version xdf
+ /AGMCORE_ps_level xdf
+ errordict/AGM_handleerror known not{
+ errordict/AGM_handleerror errordict/handleerror get put
+ errordict/handleerror{
+ Adobe_AGM_Core begin
+ $error/newerror get AGMCORE_cur_err null ne and{
+ $error/newerror false put
+ AGMCORE_cur_err compose_error_msg
+ }if
+ $error/newerror true put
+ end
+ errordict/AGM_handleerror get exec
+ }bind put
+ }if
+ /AGMCORE_environ_ok
+ ps_level AGMCORE_ps_level ge
+ ps_version AGMCORE_ps_version ge and
+ AGMCORE_ps_level -1 eq or
+ def
+ AGMCORE_environ_ok not
+ {/AGMCORE_cur_err/AGMCORE_bad_environ def}if
+ /AGMCORE_&setgray systemdict/setgray get def
+ level2{
+ /AGMCORE_&setcolor systemdict/setcolor get def
+ /AGMCORE_&setcolorspace systemdict/setcolorspace get def
+ }if
+ /AGMCORE_currentbg currentblackgeneration def
+ /AGMCORE_currentucr currentundercolorremoval def
+ /AGMCORE_Default_flatness currentflat def
+ /AGMCORE_distilling
+ /product where{
+ pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
+ }{
+ false
+ }ifelse
+ def
+ /AGMCORE_GSTATE AGMCORE_key_known not{
+ /AGMCORE_GSTATE 21 dict def
+ /AGMCORE_tmpmatrix matrix def
+ /AGMCORE_gstack 32 array def
+ /AGMCORE_gstackptr 0 def
+ /AGMCORE_gstacksaveptr 0 def
+ /AGMCORE_gstackframekeys 14 def
+ /AGMCORE_&gsave/gsave ldf
+ /AGMCORE_&grestore/grestore ldf
+ /AGMCORE_&grestoreall/grestoreall ldf
+ /AGMCORE_&save/save ldf
+ /AGMCORE_&setoverprint/setoverprint ldf
+ /AGMCORE_gdictcopy{
+ begin
+ {def}forall
+ end
+ }def
+ /AGMCORE_gput{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ 3 1 roll
+ put
+ }def
+ /AGMCORE_gget{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ exch
+ get
+ }def
+ /gsave{
+ AGMCORE_&gsave
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /grestore{
+ AGMCORE_&grestore
+ AGMCORE_gstackptr 1 sub
+ dup AGMCORE_gstacksaveptr lt{1 add}if
+ dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
+ {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
+ /AGMCORE_gstackptr exch store
+ }def
+ /grestoreall{
+ AGMCORE_&grestoreall
+ /AGMCORE_gstackptr AGMCORE_gstacksaveptr store
+ }def
+ /save{
+ AGMCORE_&save
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ /AGMCORE_gstacksaveptr AGMCORE_gstackptr store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /setoverprint{
+ dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
+ }def
+ 0 1 AGMCORE_gstack length 1 sub{
+ AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+ }for
+ }if
+ level3/AGMCORE_&sysshfill AGMCORE_key_known not and
+ {
+ /AGMCORE_&sysshfill systemdict/shfill get def
+ /AGMCORE_&sysmakepattern systemdict/makepattern get def
+ /AGMCORE_&usrmakepattern/makepattern load def
+ }if
+ /currentcmykcolor[0 0 0 0]AGMCORE_gput
+ /currentstrokeadjust false AGMCORE_gput
+ /currentcolorspace[/DeviceGray]AGMCORE_gput
+ /sep_tint 0 AGMCORE_gput
+ /devicen_tints[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]AGMCORE_gput
+ /sep_colorspace_dict null AGMCORE_gput
+ /devicen_colorspace_dict null AGMCORE_gput
+ /indexed_colorspace_dict null AGMCORE_gput
+ /currentcolor_intent()AGMCORE_gput
+ /customcolor_tint 1 AGMCORE_gput
+ /absolute_colorimetric_crd null AGMCORE_gput
+ /relative_colorimetric_crd null AGMCORE_gput
+ /saturation_crd null AGMCORE_gput
+ /perceptual_crd null AGMCORE_gput
+ currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
+ cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
+ <<
+ /MaxPatternItem currentsystemparams/MaxPatternCache get
+ >>
+ setuserparams
+ end
+}def
+/ps
+{
+ /setcmykcolor where{
+ pop
+ Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
+ }if
+ Adobe_AGM_Core begin
+ /setcmykcolor
+ {
+ 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
+ 1 sub 4 1 roll
+ 3{
+ 3 index add neg dup 0 lt{
+ pop 0
+ }if
+ 3 1 roll
+ }repeat
+ setrgbcolor pop
+ }ndf
+ /currentcmykcolor
+ {
+ /currentcmykcolor AGMCORE_gget aload pop
+ }ndf
+ /setoverprint
+ {pop}ndf
+ /currentoverprint
+ {false}ndf
+ /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+ /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+ /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+ /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+ /AGMCORE_plate_ndx
+ AGMCORE_cyan_plate{
+ 0
+ }{
+ AGMCORE_magenta_plate{
+ 1
+ }{
+ AGMCORE_yellow_plate{
+ 2
+ }{
+ AGMCORE_black_plate{
+ 3
+ }{
+ 4
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_have_reported_unsupported_color_space false def
+ /AGMCORE_report_unsupported_color_space
+ {
+ AGMCORE_have_reported_unsupported_color_space false eq
+ {
+ (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
+ Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
+ }if
+ }def
+ /AGMCORE_composite_job
+ AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+ /AGMCORE_in_rip_sep
+ /AGMCORE_in_rip_sep where{
+ pop AGMCORE_in_rip_sep
+ }{
+ AGMCORE_distilling
+ {
+ false
+ }{
+ userdict/Adobe_AGM_OnHost_Seps known{
+ false
+ }{
+ level2{
+ currentpagedevice/Separations 2 copy known{
+ get
+ }{
+ pop pop false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+ /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+ /AGM_preserve_spots
+ /AGM_preserve_spots where{
+ pop AGM_preserve_spots
+ }{
+ AGMCORE_distilling AGMCORE_producing_seps or
+ }ifelse
+ def
+ /AGM_is_distiller_preserving_spotimages
+ {
+ currentdistillerparams/PreserveOverprintSettings known
+ {
+ currentdistillerparams/PreserveOverprintSettings get
+ {
+ currentdistillerparams/ColorConversionStrategy known
+ {
+ currentdistillerparams/ColorConversionStrategy get
+ /sRGB ne
+ }{
+ true
+ }ifelse
+ }{
+ false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }def
+ /convert_spot_to_process where{pop}{
+ /convert_spot_to_process
+ {
+ //Adobe_AGM_Core begin
+ dup map_alias{
+ /Name get exch pop
+ }if
+ dup dup(None)eq exch(All)eq or
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ gsave
+ 1 0 0 0 setcmykcolor currentgray 1 exch sub
+ 0 1 0 0 setcmykcolor currentgray 1 exch sub
+ 0 0 1 0 setcmykcolor currentgray 1 exch sub
+ 0 0 0 1 setcmykcolor currentgray 1 exch sub
+ add add add 0 eq
+ {
+ pop false
+ }{
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ }ifelse
+ grestore
+ }{
+ AGMCORE_distilling
+ {
+ pop AGM_is_distiller_preserving_spotimages not
+ }{
+ //Adobe_AGM_Core/AGMCORE_name xddf
+ false
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq
+ AGMUTIL_cpd/OverrideSeparations known and
+ {
+ AGMUTIL_cpd/OverrideSeparations get
+ {
+ /HqnSpots/ProcSet resourcestatus
+ {
+ pop pop pop true
+ }if
+ }if
+ }if
+ {
+ AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not
+ }{
+ gsave
+ [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace
+ false
+ AGMUTIL_cpd/SeparationColorNames 2 copy known
+ {
+ get
+ {AGMCORE_name eq or}forall
+ not
+ }{
+ pop pop pop true
+ }ifelse
+ grestore
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ }ifelse
+ /convert_to_process where{pop}{
+ /convert_to_process
+ {
+ dup length 0 eq
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ dup true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process and}ifelse
+ }
+ forall
+ {
+ true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ (Black)eq or and
+ }forall
+ not
+ }{pop false}ifelse
+ }{
+ false exch
+ {
+ /PhotoshopDuotoneList where{pop false}{true}ifelse
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process or}ifelse
+ }
+ {
+ convert_spot_to_process or
+ }
+ ifelse
+ }
+ forall
+ }ifelse
+ }ifelse
+ }def
+ }ifelse
+ /AGMCORE_avoid_L2_sep_space
+ version cvr 2012 lt
+ level2 and
+ AGMCORE_producing_seps not and
+ def
+ /AGMCORE_is_cmyk_sep
+ AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+ def
+ /AGM_avoid_0_cmyk where{
+ pop AGM_avoid_0_cmyk
+ }{
+ AGM_preserve_spots
+ userdict/Adobe_AGM_OnHost_Seps known
+ userdict/Adobe_AGM_InRip_Seps known or
+ not and
+ }ifelse
+ {
+ /setcmykcolor[
+ {
+ 4 copy add add add 0 eq currentoverprint and{
+ pop 0.0005
+ }if
+ }/exec cvx
+ /AGMCORE_&setcmykcolor load dup type/operatortype ne{
+ /exec cvx
+ }if
+ ]cvx def
+ }if
+ /AGMCORE_IsSeparationAProcessColor
+ {
+ dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or
+ }def
+ AGMCORE_host_sep{
+ /setcolortransfer
+ {
+ AGMCORE_cyan_plate{
+ pop pop pop
+ }{
+ AGMCORE_magenta_plate{
+ 4 3 roll pop pop pop
+ }{
+ AGMCORE_yellow_plate{
+ 4 2 roll pop pop pop
+ }{
+ 4 1 roll pop pop pop
+ }ifelse
+ }ifelse
+ }ifelse
+ settransfer
+ }
+ def
+ /AGMCORE_get_ink_data
+ AGMCORE_cyan_plate{
+ {pop pop pop}
+ }{
+ AGMCORE_magenta_plate{
+ {4 3 roll pop pop pop}
+ }{
+ AGMCORE_yellow_plate{
+ {4 2 roll pop pop pop}
+ }{
+ {4 1 roll pop pop pop}
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_RemoveProcessColorNames
+ {
+ 1 dict begin
+ /filtername
+ {
+ dup/Cyan eq 1 index(Cyan)eq or
+ {pop(_cyan_)}if
+ dup/Magenta eq 1 index(Magenta)eq or
+ {pop(_magenta_)}if
+ dup/Yellow eq 1 index(Yellow)eq or
+ {pop(_yellow_)}if
+ dup/Black eq 1 index(Black)eq or
+ {pop(_black_)}if
+ }def
+ dup type/arraytype eq
+ {[exch{filtername}forall]}
+ {filtername}ifelse
+ end
+ }def
+ level3{
+ /AGMCORE_IsCurrentColor
+ {
+ dup AGMCORE_IsSeparationAProcessColor
+ {
+ AGMCORE_plate_ndx 0 eq
+ {dup(Cyan)eq exch/Cyan eq or}if
+ AGMCORE_plate_ndx 1 eq
+ {dup(Magenta)eq exch/Magenta eq or}if
+ AGMCORE_plate_ndx 2 eq
+ {dup(Yellow)eq exch/Yellow eq or}if
+ AGMCORE_plate_ndx 3 eq
+ {dup(Black)eq exch/Black eq or}if
+ AGMCORE_plate_ndx 4 eq
+ {pop false}if
+ }{
+ gsave
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ grestore
+ }ifelse
+ }def
+ /AGMCORE_filter_functiondatasource
+ {
+ 5 dict begin
+ /data_in xdf
+ data_in type/stringtype eq
+ {
+ /ncomp xdf
+ /comp xdf
+ /string_out data_in length ncomp idiv string def
+ 0 ncomp data_in length 1 sub
+ {
+ string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
+ }for
+ string_out
+ }{
+ string/string_in xdf
+ /string_out 1 string def
+ /component xdf
+ [
+ data_in string_in/readstring cvx
+ [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx
+ [/pop cvx()]cvx/ifelse cvx
+ ]cvx/ReusableStreamDecode filter
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingFunction
+ {
+ 2 dict begin
+ /paint? xdf
+ /channel xdf
+ dup type/dicttype eq
+ {
+ begin
+ FunctionType 0 eq
+ {
+ /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
+ currentdict/Decode known
+ {/Decode Decode channel 2 mul 2 getinterval def}if
+ paint? not
+ {/Decode[1 1]def}if
+ }if
+ FunctionType 2 eq
+ {
+ paint?
+ {
+ /C0[C0 channel get 1 exch sub]def
+ /C1[C1 channel get 1 exch sub]def
+ }{
+ /C0[1]def
+ /C1[1]def
+ }ifelse
+ }if
+ FunctionType 3 eq
+ {
+ /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def
+ }if
+ currentdict/Range known
+ {/Range[0 1]def}if
+ currentdict
+ end}{
+ channel get 0 paint? AGMCORE_separateShadingFunction
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShading
+ {
+ 3 -1 roll begin
+ currentdict/Function known
+ {
+ currentdict/Background known
+ {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
+ Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf
+ /ColorSpace[/DeviceGray]def
+ }{
+ ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }{
+ ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
+ }ifelse
+ ColorSpace 0 get/Separation eq
+ {
+ {
+ [1/exch cvx/sub cvx]cvx
+ }{
+ [/pop cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll put
+ pop
+ }{
+ {
+ [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx
+ }{
+ pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll bind put
+ }ifelse
+ ColorSpace 2/DeviceGray put
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingDict
+ {
+ dup/ColorSpace get
+ dup type/arraytype ne
+ {[exch]}if
+ dup 0 get/DeviceCMYK eq
+ {
+ exch begin
+ currentdict
+ AGMCORE_cyan_plate
+ {0 true}if
+ AGMCORE_magenta_plate
+ {1 true}if
+ AGMCORE_yellow_plate
+ {2 true}if
+ AGMCORE_black_plate
+ {3 true}if
+ AGMCORE_plate_ndx 4 eq
+ {0 false}if
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ currentdict
+ end exch
+ }if
+ dup 0 get/Separation eq
+ {
+ exch begin
+ ColorSpace 1 get dup/None ne exch/All ne and
+ {
+ ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /Separation
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }ifelse
+ }{
+ currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
+ 0 exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ }if
+ currentdict
+ end exch
+ }if
+ dup 0 get/DeviceN eq
+ {
+ exch begin
+ ColorSpace 1 get convert_to_process
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /DeviceN
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ /ColorSpace[/DeviceGray]def
+ }if
+ }ifelse
+ }{
+ currentdict
+ false -1 ColorSpace 1 get
+ {
+ AGMCORE_IsCurrentColor
+ {
+ 1 add
+ exch pop true exch exit
+ }if
+ 1 add
+ }forall
+ exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ currentdict
+ end exch
+ }if
+ dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not
+ {
+ exch begin
+ ColorSpace dup type/arraytype eq
+ {0 get}if
+ /DeviceGray ne
+ {
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ ColorSpace 0 get/CIEBasedA eq
+ {
+ /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def
+ }if
+ ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or
+ {
+ /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def
+ }if
+ ColorSpace 0 get/CIEBasedDEFG eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }if
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }if
+ currentdict
+ end exch
+ }if
+ pop
+ dup/AGMCORE_ignoreshade known
+ {
+ begin
+ /ColorSpace[/Separation(None)/DeviceGray{}]def
+ currentdict end
+ }if
+ }def
+ /shfill
+ {
+ AGMCORE_separateShadingDict
+ dup/AGMCORE_ignoreshade known
+ {pop}
+ {AGMCORE_&sysshfill}ifelse
+ }def
+ /makepattern
+ {
+ exch
+ dup/PatternType get 2 eq
+ {
+ clonedict
+ begin
+ /Shading Shading AGMCORE_separateShadingDict def
+ Shading/AGMCORE_ignoreshade known
+ currentdict end exch
+ {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if
+ exch AGMCORE_&sysmakepattern
+ }{
+ exch AGMCORE_&usrmakepattern
+ }ifelse
+ }def
+ }if
+ }if
+ AGMCORE_in_rip_sep{
+ /setcustomcolor
+ {
+ exch aload pop
+ dup 7 1 roll inRip_spot_has_ink not {
+ 4{4 index mul 4 1 roll}
+ repeat
+ /DeviceCMYK setcolorspace
+ 6 -2 roll pop pop
+ }{
+ //Adobe_AGM_Core begin
+ /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf
+ end
+ [/Separation 4 -1 roll/DeviceCMYK
+ {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+ ]
+ setcolorspace
+ }ifelse
+ setcolor
+ }ndf
+ /setseparationgray
+ {
+ [/Separation(All)/DeviceGray{}]setcolorspace_opt
+ 1 exch sub setcolor
+ }ndf
+ }{
+ /setseparationgray
+ {
+ AGMCORE_&setgray
+ }ndf
+ }ifelse
+ /findcmykcustomcolor
+ {
+ 5 makereadonlyarray
+ }ndf
+ /setcustomcolor
+ {
+ exch aload pop pop
+ 4{4 index mul 4 1 roll}repeat
+ setcmykcolor pop
+ }ndf
+ /has_color
+ /colorimage where{
+ AGMCORE_producing_seps{
+ pop true
+ }{
+ systemdict eq
+ }ifelse
+ }{
+ false
+ }ifelse
+ def
+ /map_index
+ {
+ 1 index mul exch getinterval{255 div}forall
+ }bdf
+ /map_indexed_devn
+ {
+ Lookup Names length 3 -1 roll cvi map_index
+ }bdf
+ /n_color_components
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop 1
+ }{
+ /DeviceCMYK eq{
+ 4
+ }{
+ 3
+ }ifelse
+ }ifelse
+ }bdf
+ level2{
+ /mo/moveto ldf
+ /li/lineto ldf
+ /cv/curveto ldf
+ /knockout_unitsq
+ {
+ 1 setgray
+ 0 0 1 1 rectfill
+ }def
+ level2/setcolorspace AGMCORE_key_known not and{
+ /AGMCORE_&&&setcolorspace/setcolorspace ldf
+ /AGMCORE_ReplaceMappedColor
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ dup 0 get dup/Separation eq
+ {
+ pop
+ dup length array copy
+ dup dup 1 get
+ current_spot_alias
+ {
+ dup map_alias
+ {
+ false set_spot_alias
+ dup 1 exch setsepcolorspace
+ true set_spot_alias
+ begin
+ /sep_colorspace_dict currentdict AGMCORE_gput
+ pop pop pop
+ [
+ /Separation Name
+ CSA map_csa
+ MappedCSA
+ /sep_colorspace_proc load
+ ]
+ dup Name
+ end
+ }if
+ }if
+ map_reserved_ink_name 1 xpt
+ }{
+ /DeviceN eq
+ {
+ dup length array copy
+ dup dup 1 get[
+ exch{
+ current_spot_alias{
+ dup map_alias{
+ /Name get exch pop
+ }if
+ }if
+ map_reserved_ink_name
+ }forall
+ ]1 xpt
+ }if
+ }ifelse
+ end
+ }if
+ }if
+ }def
+ /setcolorspace
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/Indexed eq
+ {
+ AGMCORE_distilling
+ {
+ /PhotoshopDuotoneList where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ {
+ aload pop 3 -1 roll
+ AGMCORE_ReplaceMappedColor
+ 3 1 roll 4 array astore
+ }if
+ }{
+ AGMCORE_ReplaceMappedColor
+ }ifelse
+ }if
+ DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if
+ }def
+ }if
+ }{
+ /adj
+ {
+ currentstrokeadjust{
+ transform
+ 0.25 sub round 0.25 add exch
+ 0.25 sub round 0.25 add exch
+ itransform
+ }if
+ }def
+ /mo{
+ adj moveto
+ }def
+ /li{
+ adj lineto
+ }def
+ /cv{
+ 6 2 roll adj
+ 6 2 roll adj
+ 6 2 roll adj curveto
+ }def
+ /knockout_unitsq
+ {
+ 1 setgray
+ 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image
+ }def
+ /currentstrokeadjust{
+ /currentstrokeadjust AGMCORE_gget
+ }def
+ /setstrokeadjust{
+ /currentstrokeadjust exch AGMCORE_gput
+ }def
+ /setcolorspace
+ {
+ /currentcolorspace exch AGMCORE_gput
+ }def
+ /currentcolorspace
+ {
+ /currentcolorspace AGMCORE_gget
+ }def
+ /setcolor_devicecolor
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop setgray
+ }{
+ /DeviceCMYK eq{
+ setcmykcolor
+ }{
+ setrgbcolor
+ }ifelse
+ }ifelse
+ }def
+ /setcolor
+ {
+ currentcolorspace 0 get
+ dup/DeviceGray ne{
+ dup/DeviceCMYK ne{
+ dup/DeviceRGB ne{
+ dup/Separation eq{
+ pop
+ currentcolorspace 3 gx
+ currentcolorspace 2 get
+ }{
+ dup/Indexed eq{
+ pop
+ currentcolorspace 3 get dup type/stringtype eq{
+ currentcolorspace 1 get n_color_components
+ 3 -1 roll map_index
+ }{
+ exec
+ }ifelse
+ currentcolorspace 1 get
+ }{
+ /AGMCORE_cur_err/AGMCORE_invalid_color_space def
+ AGMCORE_invalid_color_space
+ }ifelse
+ }ifelse
+ }if
+ }if
+ }if
+ setcolor_devicecolor
+ }def
+ }ifelse
+ /sop/setoverprint ldf
+ /lw/setlinewidth ldf
+ /lc/setlinecap ldf
+ /lj/setlinejoin ldf
+ /ml/setmiterlimit ldf
+ /dsh/setdash ldf
+ /sadj/setstrokeadjust ldf
+ /gry/setgray ldf
+ /rgb/setrgbcolor ldf
+ /cmyk[
+ /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx
+ /setcmykcolor load dup type/operatortype ne{/exec cvx}if
+ ]cvx bdf
+ level3 AGMCORE_host_sep not and{
+ /nzopmsc{
+ 6 dict begin
+ /kk exch def
+ /yy exch def
+ /mm exch def
+ /cc exch def
+ /sum 0 def
+ cc 0 ne{/sum sum 2#1000 or def cc}if
+ mm 0 ne{/sum sum 2#0100 or def mm}if
+ yy 0 ne{/sum sum 2#0010 or def yy}if
+ kk 0 ne{/sum sum 2#0001 or def kk}if
+ AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace
+ sum 0 eq{0}if
+ end
+ setcolor
+ }bdf
+ }{
+ /nzopmsc/cmyk ldf
+ }ifelse
+ /sep/setsepcolor ldf
+ /devn/setdevicencolor ldf
+ /idx/setindexedcolor ldf
+ /colr/setcolor ldf
+ /csacrd/set_csa_crd ldf
+ /sepcs/setsepcolorspace ldf
+ /devncs/setdevicencolorspace ldf
+ /idxcs/setindexedcolorspace ldf
+ /cp/closepath ldf
+ /clp/clp_npth ldf
+ /eclp/eoclp_npth ldf
+ /f/fill ldf
+ /ef/eofill ldf
+ /@/stroke ldf
+ /nclp/npth_clp ldf
+ /gset/graphic_setup ldf
+ /gcln/graphic_cleanup ldf
+ /ct/concat ldf
+ /cf/currentfile ldf
+ /fl/filter ldf
+ /rs/readstring ldf
+ /AGMCORE_def_ht currenthalftone def
+ /clonedict Adobe_AGM_Utils begin/clonedict load end def
+ /clonearray Adobe_AGM_Utils begin/clonearray load end def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+ /getrampcolor
+ {
+ /indx exch def
+ 0 1 NumComp 1 sub
+ {
+ dup
+ Samples exch get
+ dup type/stringtype eq{indx get}if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ }for
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /sssetbackground{
+ aload pop
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /RadialShade
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /r2 xdf
+ /c2y xdf
+ /c2x xdf
+ /r1 xdf
+ /c1y xdf
+ /c1x xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ c1x c2x eq
+ {
+ c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if
+ c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if
+ }ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax xdf
+ /xMax xdf
+ /yMin xdf
+ /xMin xdf
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ /max{2 copy gt{pop}{exch pop}ifelse}bdf
+ /min{2 copy lt{pop}{exch pop}ifelse}bdf
+ rampdict begin
+ 40 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0
+ {
+ 0 getrampcolor
+ c2y r2 add r1 sub 0.0001 lt
+ {
+ c1x c1y r1 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ /hires xdf
+ hires mul
+ /numpix xdf
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ np
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }{
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }repeat
+ pop
+ }ifelse
+ ext1
+ {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }{
+ c2y r1 add r2 sub 0.0001 le
+ {
+ c2x c2y r2 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+ /GenStrips
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /y2 xdf
+ /x2 xdf
+ /y1 xdf
+ /x1 xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ x1 x2 eq
+ {
+ y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if
+ x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ rampdict begin
+ 20 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ mul
+ /numpix xdf
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ ext0
+ {
+ 0 getrampcolor
+ xMin xStart lt
+ {
+ xMin yMin xMin neg ySpan rectfill
+ }if
+ }if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }repeat
+ pop
+ ext1{
+ xMax xEnd gt
+ {
+ xEnd yMin xMax xEnd sub ySpan rectfill
+ }if
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+}def
+/pt
+{
+ end
+}def
+/dt{
+}def
+/pgsv{
+ //Adobe_AGM_Core/AGMCORE_save save put
+}def
+/pgrs{
+ //Adobe_AGM_Core/AGMCORE_save get restore
+}def
+systemdict/findcolorrendering known{
+ /findcolorrendering systemdict/findcolorrendering get def
+}if
+systemdict/setcolorrendering known{
+ /setcolorrendering systemdict/setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+ gsave
+ setcmykcolor currentgray 1 ne
+ grestore
+}def
+/inRip_spot_has_ink
+{
+ dup//Adobe_AGM_Core/AGMCORE_name xddf
+ convert_spot_to_process not
+}def
+/map255_to_range
+{
+ 1 index sub
+ 3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+ /sep_colorspace_dict null AGMCORE_gput
+ begin
+ CSA get_csa_by_name setcolorspace_opt
+ set_crd
+ end
+}
+def
+/map_csa
+{
+ currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse
+ {pop}{get_csa_by_name/MappedCSA xdf}ifelse
+}def
+/setsepcolor
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ dup/sep_tint exch AGMCORE_gput
+ TintProc
+ end
+}def
+/setdevicencolor
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ Names length copy
+ Names length 1 sub -1 0
+ {
+ /devicen_tints AGMCORE_gget 3 1 roll xpt
+ }for
+ TintProc
+ end
+}def
+/sep_colorspace_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ currentdict/Components known{
+ Components aload pop
+ TintMethod/Lab eq{
+ 2{AGMCORE_tmp mul NComponents 1 roll}repeat
+ LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
+ }{
+ TintMethod/Subtractive eq{
+ NComponents{
+ AGMCORE_tmp mul NComponents 1 roll
+ }repeat
+ }{
+ NComponents{
+ 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
+ }repeat
+ }ifelse
+ }ifelse
+ }{
+ ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+ aload pop
+ }ifelse
+ end
+}def
+/sep_colorspace_gray_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+ end
+}def
+/sep_proc_name
+{
+ dup 0 get
+ dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{
+ pop[/DeviceGray]
+ /sep_colorspace_gray_proc
+ }{
+ /sep_colorspace_proc
+ }ifelse
+}def
+/setsepcolorspace
+{
+ current_spot_alias{
+ dup begin
+ Name map_alias{
+ exch pop
+ }if
+ end
+ }if
+ dup/sep_colorspace_dict exch AGMCORE_gput
+ begin
+ CSA map_csa
+ /AGMCORE_sep_special Name dup()eq exch(All)eq or store
+ AGMCORE_avoid_L2_sep_space{
+ [/Indexed MappedCSA sep_proc_name 255 exch
+ {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx
+ ]setcolorspace_opt
+ /TintProc{
+ 255 mul round cvi setcolor
+ }bdf
+ }{
+ MappedCSA 0 get/DeviceCMYK eq
+ currentdict/Components known and
+ AGMCORE_sep_special not and{
+ /TintProc[
+ Components aload pop Name findcmykcustomcolor
+ /exch cvx/setcustomcolor cvx
+ ]cvx bdf
+ }{
+ AGMCORE_host_sep Name(All)eq and{
+ /TintProc{
+ 1 exch sub setseparationgray
+ }bdf
+ }{
+ AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and
+ AGMCORE_host_sep or
+ Name()eq and{
+ /TintProc[
+ MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{
+ cvx/setcmykcolor cvx
+ }{
+ cvx/setgray cvx
+ }ifelse
+ ]cvx bdf
+ }{
+ AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{
+ /TintProc[
+ /dup cvx
+ MappedCSA sep_proc_name cvx exch
+ 0 get/DeviceGray eq{
+ 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx
+ }if
+ /Name cvx/findcmykcustomcolor cvx/exch cvx
+ AGMCORE_host_sep{
+ AGMCORE_is_cmyk_sep
+ /Name cvx
+ /AGMCORE_IsSeparationAProcessColor load/exec cvx
+ /not cvx/and cvx
+ }{
+ Name inRip_spot_has_ink not
+ }ifelse
+ [
+ /pop cvx 1
+ ]cvx/if cvx
+ /setcustomcolor cvx
+ ]cvx bdf
+ }{
+ /TintProc{setcolor}bdf
+ [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ set_crd
+ setsepcolor
+ end
+}def
+/additive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1
+ 0 1 numarrays 1 sub
+ {
+ 1 exch add/index cvx
+ c1/get cvx/mul cvx
+ }for
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/subtractive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1 1
+ 0 1 numarrays 1 sub
+ {
+ 1 3 3 -1 roll add/index cvx
+ c1/get cvx/sub cvx/mul cvx
+ }for
+ /sub cvx
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/exec_tint_transform
+{
+ /TintProc[
+ /TintTransform cvx/setcolor cvx
+ ]cvx bdf
+ MappedCSA setcolorspace_opt
+}bdf
+/devn_makecustomcolor
+{
+ 2 dict begin
+ /names_index xdf
+ /Names xdf
+ 1 1 1 1 Names names_index get findcmykcustomcolor
+ /devicen_tints AGMCORE_gget names_index get setcustomcolor
+ Names length{pop}repeat
+ end
+}bdf
+/setdevicencolorspace
+{
+ dup/AliasedColorants known{false}{true}ifelse
+ current_spot_alias and{
+ 7 dict begin
+ /names_index 0 def
+ dup/names_len exch/Names get length def
+ /new_names names_len array def
+ /new_LookupTables names_len array def
+ /alias_cnt 0 def
+ dup/Names get
+ {
+ dup map_alias{
+ exch pop
+ dup/ColorLookup known{
+ dup begin
+ new_LookupTables names_index ColorLookup put
+ end
+ }{
+ dup/Components known{
+ dup begin
+ new_LookupTables names_index Components put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ new_names names_index 3 -1 roll/Name get put
+ /alias_cnt alias_cnt 1 add def
+ }{
+ /name xdf
+ new_names names_index name put
+ dup/LookupTables known{
+ dup begin
+ new_LookupTables names_index LookupTables names_index get put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ alias_cnt 0 gt{
+ /AliasedColorants true def
+ /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def
+ 0 1 names_len 1 sub{
+ /names_index xdf
+ new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{
+ /AliasedColorants false def
+ exit
+ }{
+ new_LookupTables names_index get 0 get null eq{
+ dup/Names get names_index get/name xdf
+ name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq
+ or or or not{
+ /AliasedColorants false def
+ exit
+ }if
+ }if
+ }ifelse
+ }for
+ lut_entry_len 1 eq{
+ /AliasedColorants false def
+ }if
+ AliasedColorants{
+ dup begin
+ /Names new_names def
+ /LookupTables new_LookupTables def
+ /AliasedColorants true def
+ /NComponents lut_entry_len def
+ /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def
+ /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def
+ currentdict/TTTablesIdx known not{
+ /TTTablesIdx -1 def
+ }if
+ end
+ }if
+ }if
+ end
+ }if
+ dup/devicen_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/AliasedColorants known{
+ AliasedColorants
+ }{
+ false
+ }ifelse
+ dup not{
+ CSA map_csa
+ }if
+ /TintTransform load type/nulltype eq or{
+ /TintTransform[
+ 0 1 Names length 1 sub
+ {
+ /TTTablesIdx TTTablesIdx 1 add def
+ dup LookupTables exch get dup 0 get null eq
+ {
+ 1 index
+ Names exch get
+ dup(Cyan)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0
+ }
+ {
+ dup(Magenta)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0/exch cvx 0 0
+ }{
+ (Yellow)eq
+ {
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 3 -1/roll cvx 0
+ }{
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0 4 -1/roll cvx
+ }ifelse
+ }ifelse
+ }ifelse
+ 5 -1/roll cvx/astore cvx
+ }{
+ dup length 1 sub
+ LookupTables length 4 -1 roll sub 1 add
+ /index cvx/mul cvx/round cvx/cvi cvx/get cvx
+ }ifelse
+ Names length TTTablesIdx add 1 add 1/roll cvx
+ }for
+ Names length[/pop cvx]cvx/repeat cvx
+ NComponents Names length
+ TintMethod/Subtractive eq
+ {
+ subtractive_blend
+ }{
+ additive_blend
+ }ifelse
+ ]cvx bdf
+ }if
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ exec_tint_transform
+ }
+ {
+ currentdict/AliasedColorants known{
+ AliasedColorants not
+ }{
+ false
+ }ifelse
+ 5 dict begin
+ /AvoidAliasedColorants xdf
+ /painted? false def
+ /names_index 0 def
+ /names_len Names length def
+ AvoidAliasedColorants{
+ /currentspotalias current_spot_alias def
+ false set_spot_alias
+ }if
+ Names{
+ AGMCORE_is_cmyk_sep{
+ dup(Cyan)eq AGMCORE_cyan_plate and exch
+ dup(Magenta)eq AGMCORE_magenta_plate and exch
+ dup(Yellow)eq AGMCORE_yellow_plate and exch
+ (Black)eq AGMCORE_black_plate and or or or{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ }if
+ painted?{exit}if
+ }{
+ 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ exit
+ }if
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ AvoidAliasedColorants{
+ currentspotalias set_spot_alias
+ }if
+ painted?{
+ /devicen_colorspace_dict AGMCORE_gget/names_index names_index put
+ }{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx
+ 0 0 0 0/setcmykcolor cvx
+ ]cvx ddf
+ }ifelse
+ end
+ }ifelse
+ }
+ {
+ AGMCORE_in_rip_sep{
+ Names convert_to_process not
+ }{
+ level3
+ }ifelse
+ {
+ [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt
+ /TintProc level3 not AGMCORE_in_rip_sep and{
+ [
+ Names/length cvx[/pop cvx]cvx/repeat cvx
+ ]cvx bdf
+ }{
+ {setcolor}bdf
+ }ifelse
+ }{
+ exec_tint_transform
+ }ifelse
+ }ifelse
+ set_crd
+ /AliasedColorants false def
+ end
+}def
+/setindexedcolorspace
+{
+ dup/indexed_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ currentdict devncs
+ }{
+ 1 currentdict sepcs
+ }ifelse
+ AGMCORE_host_sep{
+ 4 dict begin
+ /compCnt/Names where{pop Names length}{1}ifelse def
+ /NewLookup HiVal 1 add string def
+ 0 1 HiVal{
+ /tableIndex xdf
+ Lookup dup type/stringtype eq{
+ compCnt tableIndex map_index
+ }{
+ exec
+ }ifelse
+ /Names where{
+ pop setdevicencolor
+ }{
+ setsepcolor
+ }ifelse
+ currentgray
+ tableIndex exch
+ 255 mul cvi
+ NewLookup 3 1 roll put
+ }for
+ [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt
+ end
+ }{
+ level3
+ {
+ currentdict/Names known{
+ [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt
+ }{
+ [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt
+ }ifelse
+ }{
+ [/Indexed MappedCSA HiVal
+ [
+ currentdict/Names known{
+ Lookup dup type/stringtype eq
+ {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx}
+ {/exec cvx}ifelse
+ /TintTransform load/exec cvx
+ }{
+ Lookup dup type/stringtype eq
+ {/exch cvx/get cvx 255/div cvx}
+ {/exec cvx}ifelse
+ CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx
+ }ifelse
+ ]cvx
+ ]setcolorspace_opt
+ }ifelse
+ }ifelse
+ end
+ set_crd
+ }
+ {
+ CSA map_csa
+ AGMCORE_host_sep level2 not and{
+ 0 0 0 0 setcmykcolor
+ }{
+ [/Indexed MappedCSA
+ level2 not has_color not and{
+ dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{
+ pop[/DeviceGray]
+ }if
+ HiVal GrayLookup
+ }{
+ HiVal
+ currentdict/RangeArray known{
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ Lookup exch
+ dup HiVal gt{
+ pop HiVal
+ }if
+ NComponents mul NComponents getinterval{}forall
+ NComponents 1 sub -1 0{
+ RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+ NComponents 1 roll
+ }for
+ end
+ }bind
+ }{
+ Lookup
+ }ifelse
+ }ifelse
+ ]setcolorspace_opt
+ set_crd
+ }ifelse
+ }ifelse
+ end
+}def
+/setindexedcolor
+{
+ AGMCORE_host_sep{
+ /indexed_colorspace_dict AGMCORE_gget
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ map_indexed_devn
+ devn
+ }
+ {
+ Lookup 1 3 -1 roll map_index
+ sep
+ }ifelse
+ end
+ }{
+ Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll
+ map_index
+ MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse
+ }ifelse
+ end
+ }{
+ level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{
+ /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin
+ map_indexed_devn
+ devn
+ end
+ }
+ {
+ setcolor
+ }ifelse
+ }ifelse
+}def
+/ignoreimagedata
+{
+ currentoverprint not{
+ gsave
+ dup clonedict begin
+ 1 setgray
+ /Decode[0 1]def
+ /DataSource<FF>def
+ /MultipleDataSources false def
+ /BitsPerComponent 8 def
+ currentdict end
+ systemdict/image gx
+ grestore
+ }if
+ consumeimagedata
+}def
+/add_res
+{
+ dup/CSD eq{
+ pop
+ //Adobe_AGM_Core begin
+ /AGMCORE_CSD_cache load 3 1 roll put
+ end
+ }{
+ defineresource pop
+ }ifelse
+}def
+/del_res
+{
+ {
+ aload pop exch
+ dup/CSD eq{
+ pop
+ {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall
+ }{
+ exch
+ {1 index undefineresource}forall
+ pop
+ }ifelse
+ }forall
+}def
+/get_res
+{
+ dup/CSD eq{
+ pop
+ dup type dup/nametype eq exch/stringtype eq or{
+ AGMCORE_CSD_cache exch get
+ }if
+ }{
+ findresource
+ }ifelse
+}def
+/get_csa_by_name
+{
+ dup type dup/nametype eq exch/stringtype eq or{
+ /CSA get_res
+ }if
+}def
+/paintproc_buf_init
+{
+ /count get 0 0 put
+}def
+/paintproc_buf_next
+{
+ dup/count get dup 0 get
+ dup 3 1 roll
+ 1 add 0 xpt
+ get
+}def
+/cachepaintproc_compress
+{
+ 5 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ /string_size 16000 def
+ /readbuffer string_size string def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ /LZWFilter
+ {
+ exch
+ dup length 0 eq{
+ pop
+ }{
+ ppdict dup length 1 sub 3 -1 roll put
+ }ifelse
+ {string_size}{0}ifelse string
+ }/LZWEncode filter def
+ {
+ ReadFilter readbuffer readstring
+ exch LZWFilter exch writestring
+ not{exit}if
+ }loop
+ LZWFilter closefile
+ ppdict
+ end
+}def
+/cachepaintproc
+{
+ 2 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ {
+ ReadFilter 16000 string readstring exch
+ ppdict dup length 1 sub 3 -1 roll put
+ not{exit}if
+ }loop
+ ppdict dup dup length 1 sub()put
+ end
+}def
+/make_pattern
+{
+ exch clonedict exch
+ dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+ exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub
+ exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub
+ matrix translate exch matrix concatmatrix
+ 1 index begin
+ BBox 0 get XStep div cvi XStep mul/xshift exch neg def
+ BBox 1 get YStep div cvi YStep mul/yshift exch neg def
+ BBox 0 get xshift add
+ BBox 1 get yshift add
+ BBox 2 get xshift add
+ BBox 3 get yshift add
+ 4 array astore
+ /BBox exch def
+ [xshift yshift/translate load null/exec load]dup
+ 3/PaintProc load put cvx/PaintProc exch def
+ end
+ gsave 0 setgray
+ makepattern
+ grestore
+}def
+/set_pattern
+{
+ dup/PatternType get 1 eq{
+ dup/PaintType get 1 eq{
+ currentoverprint sop[/DeviceGray]setcolorspace 0 setgray
+ }if
+ }if
+ setpattern
+}def
+/setcolorspace_opt
+{
+ dup currentcolorspace eq{pop}{setcolorspace}ifelse
+}def
+/updatecolorrendering
+{
+ currentcolorrendering/RenderingIntent known{
+ currentcolorrendering/RenderingIntent get
+ }
+ {
+ Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd AGMCORE_gget dup null eq
+ }
+ {
+ /perceptual_crd AGMCORE_gget dup null eq
+ }ifelse
+ }ifelse
+ }ifelse
+ {
+ pop null
+ }
+ {
+ /RenderingIntent known{null}{Intent}ifelse
+ }ifelse
+ }ifelse
+ Intent ne{
+ Intent/ColorRendering{findresource}stopped
+ {
+ pop pop systemdict/findcolorrendering known
+ {
+ Intent findcolorrendering
+ {
+ /ColorRendering findresource true exch
+ }
+ {
+ /ColorRendering findresource
+ product(Xerox Phaser 5400)ne
+ exch
+ }ifelse
+ dup Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Perceptual eq
+ {
+ /perceptual_crd exch AGMCORE_gput
+ }
+ {
+ pop
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ 1 index{exch}{pop}ifelse
+ }
+ {false}ifelse
+ }
+ {true}ifelse
+ {
+ dup begin
+ currentdict/TransformPQR known{
+ currentdict/TransformPQR get aload pop
+ 3{{}eq 3 1 roll}repeat or or
+ }
+ {true}ifelse
+ currentdict/MatrixPQR known{
+ currentdict/MatrixPQR get aload pop
+ 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq
+ and and and and and and and and
+ }
+ {true}ifelse
+ end
+ or
+ {
+ clonedict begin
+ /TransformPQR[
+ {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div
+ 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div
+ 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div
+ 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind
+ ]def
+ /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def
+ /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def
+ currentdict end
+ }if
+ setcolorrendering_opt
+ }if
+ }if
+}def
+/set_crd
+{
+ AGMCORE_host_sep not level2 and{
+ currentdict/ColorRendering known{
+ ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if
+ }{
+ currentdict/Intent known{
+ updatecolorrendering
+ }if
+ }ifelse
+ currentcolorspace dup type/arraytype eq
+ {0 get}if
+ /DeviceRGB eq
+ {
+ currentdict/UCR known
+ {/UCR}{/AGMCORE_currentucr}ifelse
+ load setundercolorremoval
+ currentdict/BG known
+ {/BG}{/AGMCORE_currentbg}ifelse
+ load setblackgeneration
+ }if
+ }if
+}def
+/set_ucrbg
+{
+ dup null eq{pop/AGMCORE_currentbg load}{/Procedure get_res}ifelse setblackgeneration
+ dup null eq{pop/AGMCORE_currentucr load}{/Procedure get_res}ifelse setundercolorremoval
+}def
+/setcolorrendering_opt
+{
+ dup currentcolorrendering eq{
+ pop
+ }{
+ product(HP Color LaserJet 2605)anchorsearch{
+ pop pop pop
+ }{
+ pop
+ clonedict
+ begin
+ /Intent Intent def
+ currentdict
+ end
+ setcolorrendering
+ }ifelse
+ }ifelse
+}def
+/cpaint_gcomp
+{
+ convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+ {
+ (%end_cpaint_gcomp)flushinput
+ }if
+}def
+/cpaint_gsep
+{
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+ {
+ (%end_cpaint_gsep)flushinput
+ }if
+}def
+/cpaint_gend
+{np}def
+/T1_path
+{
+ currentfile token pop currentfile token pop mo
+ {
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 exch rlineto
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 rlineto
+ }loop
+}def
+/T1_gsave
+ level3
+ {/clipsave}
+ {/gsave}ifelse
+ load def
+/T1_grestore
+ level3
+ {/cliprestore}
+ {/grestore}ifelse
+ load def
+/set_spot_alias_ary
+{
+ dup inherit_aliases
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+}def
+/set_spot_normalization_ary
+{
+ dup inherit_aliases
+ dup length
+ /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if
+ array
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf
+ /AGMCORE_SpotAliasAry where{
+ pop
+ AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval
+ AGMCORE_SpotAliasAry length
+ }{0}ifelse
+ AGMCORE_SpotAliasAry2 3 1 roll exch putinterval
+ true set_spot_alias
+}def
+/inherit_aliases
+{
+ {dup/Name get map_alias{/CSD put}{pop}ifelse}forall
+}def
+/set_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias 3 -1 roll put
+ }{
+ pop
+ }ifelse
+}def
+/current_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias get
+ }{
+ false
+ }ifelse
+}def
+/map_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ /AGMCORE_name xdf
+ false
+ AGMCORE_SpotAliasAry2{
+ dup/Name get AGMCORE_name eq{
+ /CSD get/CSD get_res
+ exch pop true
+ exit
+ }{
+ pop
+ }ifelse
+ }forall
+ end
+ }{
+ pop false
+ }ifelse
+}bdf
+/spot_alias
+{
+ true set_spot_alias
+ /AGMCORE_&setcustomcolor AGMCORE_key_known not{
+ //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put
+ }if
+ /customcolor_tint 1 AGMCORE_gput
+ //Adobe_AGM_Core begin
+ /setcustomcolor
+ {
+ //Adobe_AGM_Core begin
+ dup/customcolor_tint exch AGMCORE_gput
+ 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not
+ current_spot_alias and{1 index 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /sep_colorspace_dict AGMCORE_gget null ne
+ {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse
+ 3 1 roll 2 index{
+ exch pop/sep_tint AGMCORE_gget exch
+ }if
+ mark 3 1 roll
+ setsepcolorspace
+ counttomark 0 ne{
+ setsepcolor
+ }if
+ pop
+ not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if
+ pop
+ true set_spot_alias
+ }{
+ AGMCORE_&setcustomcolor
+ }ifelse
+ end
+ }bdf
+ end
+}def
+/begin_feature
+{
+ Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+ count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+ {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+ 2 dict begin
+ /spd/setpagedevice load def
+ /setpagedevice{get_gstate spd set_gstate}def
+ stopped{$error/newerror false put}if
+ end
+ count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+ countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+ {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+ //Adobe_AGM_Core begin
+ /AGMCORE_inverting exch def
+ level2{
+ currentpagedevice/NegativePrint known AGMCORE_distilling not and{
+ currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{
+ true begin_feature true{
+ <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice
+ }end_feature
+ }if
+ /AGMCORE_inverting false def
+ }if
+ }if
+ AGMCORE_inverting{
+ [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+ AGMCORE_distilling{
+ erasepage
+ }{
+ gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse
+ /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore
+ }ifelse
+ }if
+ end
+}def
+/lw_save_restore_override{
+ /md where{
+ pop
+ md begin
+ initializepage
+ /initializepage{}def
+ /pmSVsetup{}def
+ /endp{}def
+ /pse{}def
+ /psb{}def
+ /orig_showpage where
+ {pop}
+ {/orig_showpage/showpage load def}
+ ifelse
+ /showpage{orig_showpage gR}def
+ end
+ }if
+}def
+/pscript_showpage_override{
+ /NTPSOct95 where
+ {
+ begin
+ showpage
+ save
+ /showpage/restore load def
+ /restore{exch pop}def
+ end
+ }if
+}def
+/driver_media_override
+{
+ /md where{
+ pop
+ md/initializepage known{
+ md/initializepage{}put
+ }if
+ md/rC known{
+ md/rC{4{pop}repeat}put
+ }if
+ }if
+ /mysetup where{
+ /mysetup[1 0 0 1 0 0]put
+ }if
+ Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put
+ level2
+ {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
+}def
+/capture_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put
+ }if
+ }if
+}def
+/restore_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup known{
+ Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put
+ Adobe_AGM_Core/save_mysetup undef
+ }if
+ }if
+ }if
+}def
+/driver_check_media_override
+{
+ /PrepsDict where
+ {pop}
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
+ }if
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix
+ }if
+ }ifelse
+}def
+AGMCORE_err_strings begin
+ /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def
+ /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def
+ /AGMCORE_invalid_color_space(This job contains an invalid color space. )def
+end
+/set_def_ht
+{AGMCORE_def_ht sethalftone}def
+/set_def_flat
+{AGMCORE_Default_flatness setflat}def
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef <d841272cf18f54fc13>dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Image 71 dict dup begin put
+/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def
+/nd{
+ null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf()def
+/AGMIMG_ybuf()def
+/AGMIMG_kbuf()def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/AGMIMG_maskSource nd
+/AGMIMG_flushfilters nd
+/invert_image_samples nd
+/knockout_image_samples nd
+/img nd
+/sepimg nd
+/devnimg nd
+/idximg nd
+/ds
+{
+ Adobe_AGM_Core begin
+ Adobe_AGM_Image begin
+ /AGMIMG_&image systemdict/image get def
+ /AGMIMG_&imagemask systemdict/imagemask get def
+ /colorimage where{
+ pop
+ /AGMIMG_&colorimage/colorimage ldf
+ }if
+ end
+ end
+}def
+/ps
+{
+ Adobe_AGM_Image begin
+ /AGMIMG_ccimage_exists{/customcolorimage where
+ {
+ pop
+ /Adobe_AGM_OnHost_Seps where
+ {
+ pop false
+ }{
+ /Adobe_AGM_InRip_Seps where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }ifelse
+ }{
+ false
+ }ifelse
+ }bdf
+ level2{
+ /invert_image_samples
+ {
+ Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+ /Decode[Decode 1 get Decode 0 get]def
+ }def
+ /knockout_image_samples
+ {
+ Operator/imagemask ne{
+ /Decode[1 1]def
+ }if
+ }def
+ }{
+ /invert_image_samples
+ {
+ {1 exch sub}currenttransfer addprocs settransfer
+ }def
+ /knockout_image_samples
+ {
+ {pop 1}currenttransfer addprocs settransfer
+ }def
+ }ifelse
+ /img/imageormask ldf
+ /sepimg/sep_imageormask ldf
+ /devnimg/devn_imageormask ldf
+ /idximg/indexed_imageormask ldf
+ /_ctype 7 def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+}def
+/pt
+{
+ end
+}def
+/dt
+{
+}def
+/AGMIMG_flushfilters
+{
+ dup type/arraytype ne
+ {1 array astore}if
+ dup 0 get currentfile ne
+ {dup 0 get flushfile}if
+ {
+ dup type/filetype eq
+ {
+ dup status 1 index currentfile ne and
+ {closefile}
+ {pop}
+ ifelse
+ }{pop}ifelse
+ }forall
+}def
+/AGMIMG_init_common
+{
+ currentdict/T known{/ImageType/T ldf currentdict/T undef}if
+ currentdict/W known{/Width/W ldf currentdict/W undef}if
+ currentdict/H known{/Height/H ldf currentdict/H undef}if
+ currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if
+ currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if
+ currentdict/D known{/Decode/D ldf currentdict/D undef}if
+ currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if
+ currentdict/O known{
+ /Operator/O load 1 eq{
+ /imagemask
+ }{
+ /O load 2 eq{
+ /image
+ }{
+ /colorimage
+ }ifelse
+ }ifelse
+ def
+ currentdict/O undef
+ }if
+ currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if
+ currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if
+ currentdict/I known{/Interpolate/I ldf currentdict/I undef}if
+ currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if
+ /DataSource load xcheck not{
+ DataSource type/arraytype eq{
+ DataSource 0 get type/filetype eq{
+ /_Filters DataSource def
+ currentdict/MultipleDataSources known not{
+ /DataSource DataSource dup length 1 sub get def
+ }if
+ }if
+ }if
+ currentdict/MultipleDataSources known not{
+ /MultipleDataSources DataSource type/arraytype eq{
+ DataSource length 1 gt
+ }
+ {false}ifelse def
+ }if
+ }if
+ /NComponents Decode length 2 div def
+ currentdict/SkipImageProc known not{/SkipImageProc{false}def}if
+}bdf
+/imageormask_sys
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ level2{
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ AGMIMG_&imagemask
+ }{
+ BitsPerComponent ImageMatrix/DataSource load
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ cleartomark restore
+ end
+}def
+/overprint_plate
+{
+ currentoverprint{
+ 0 get dup type/nametype eq{
+ dup/DeviceGray eq{
+ pop AGMCORE_black_plate not
+ }{
+ /DeviceCMYK eq{
+ AGMCORE_is_cmyk_sep not
+ }if
+ }ifelse
+ }{
+ false exch
+ {
+ AGMOHS_sepink eq or
+ }forall
+ not
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}def
+/process_mask
+{
+ level3{
+ dup begin
+ /ImageType 1 def
+ end
+ 4 dict begin
+ /DataDict exch def
+ /ImageType 3 def
+ /InterleaveType 3 def
+ /MaskDict 9 dict begin
+ /ImageType 1 def
+ /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def
+ /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def
+ /ImageMatrix[Width 0 0 Height neg 0 Height]def
+ /NComponents 1 def
+ /BitsPerComponent 1 def
+ /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def
+ /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def
+ currentdict end def
+ currentdict end
+ }if
+}def
+/use_mask
+{
+ dup/Mask known {dup/Mask get}{false}ifelse
+}def
+/imageormask
+{
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }
+ {
+ save mark
+ level2 AGMCORE_host_sep not and{
+ currentdict
+ Operator/imagemask eq DeviceN_PS2 not and{
+ imagemask
+ }{
+ AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ /Decode[Decode 1 get Decode 0 get]def
+ }if
+ use_mask{
+ process_mask image
+ }{
+ DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
+ {
+ Names convert_to_process not{
+ 2 dict begin
+ /imageDict xdf
+ /names_index 0 def
+ gsave
+ imageDict write_image_file{
+ Names{
+ dup(None)ne{
+ [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace
+ Operator imageDict read_image_file
+ names_index 0 eq{true setoverprint}if
+ /names_index names_index 1 add def
+ }{
+ pop
+ }ifelse
+ }forall
+ close_image_file
+ }if
+ grestore
+ end
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ /Adobe_AGM_OnHost_Seps where{
+ pop imagemask
+ }{
+ currentgray 1 ne{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ BitsPerComponent ImageMatrix
+ MultipleDataSources{
+ 0 1 NComponents 1 sub{
+ DataSource exch get
+ }for
+ }{
+ /DataSource load
+ }ifelse
+ Operator/colorimage eq{
+ AGMCORE_host_sep{
+ MultipleDataSources level2 or NComponents 4 eq and{
+ AGMCORE_is_cmyk_sep{
+ MultipleDataSources{
+ /DataSource DataSource 0 get xcheck
+ {
+ [
+ DataSource 0 get/exec cvx
+ DataSource 1 get/exec cvx
+ DataSource 2 get/exec cvx
+ DataSource 3 get/exec cvx
+ /AGMCORE_get_ink_data cvx
+ ]cvx
+ }{
+ DataSource aload pop AGMCORE_get_ink_data
+ }ifelse def
+ }{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ /DataSource load
+ filter_cmyk 0()/SubFileDecode filter def
+ }ifelse
+ /Decode[Decode 0 get Decode 1 get]def
+ /MultipleDataSources false def
+ /NComponents 1 def
+ /Operator/image def
+ invert_image_samples
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }{
+ MultipleDataSources NComponents AGMIMG_&colorimage
+ }ifelse
+ }{
+ true NComponents colorimage
+ }ifelse
+ }{
+ Operator/image eq{
+ AGMCORE_host_sep{
+ /DoImage true def
+ currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse
+ {
+ AGMCORE_black_plate not Operator/imagemask ne and{
+ /DoImage false def
+ currentdict ignoreimagedata
+ }if
+ }if
+ 1 AGMCORE_&setgray
+ DoImage
+ {currentdict imageormask_sys}if
+ }{
+ use_mask{
+ process_mask image
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/knockout eq{
+ pop pop pop pop pop
+ currentcolorspace overprint_plate not{
+ knockout_unitsq
+ }if
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/sep_imageormask
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_avoid_L2_sep_space{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ }if
+ AGMIMG_ccimage_exists
+ MappedCSA 0 get/DeviceCMYK eq and
+ currentdict/Components known and
+ Name()ne and
+ Name(All)ne and
+ Operator/image eq and
+ AGMCORE_producing_seps not and
+ level2 not and
+ {
+ Width Height BitsPerComponent ImageMatrix
+ [
+ /DataSource load/exec cvx
+ {
+ 0 1 2 index length 1 sub{
+ 1 index exch
+ 2 copy get 255 xor put
+ }for
+ }/exec cvx
+ ]cvx bind
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Name findcmykcustomcolor
+ customcolorimage
+ }{
+ AGMCORE_producing_seps not{
+ level2{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{
+ [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ currentdict imageormask
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask
+ }{
+ sep_imageormask_lev1
+ }ifelse
+ }ifelse
+ }{
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ currentdict/ImageMatrix get concat
+ knockout_unitsq
+ }{
+ currentgray 1 ne{
+ AGMCORE_is_cmyk_sep Name(All)ne and{
+ level2{
+ Name AGMCORE_IsSeparationAProcessColor
+ {
+ Operator/imagemask eq{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor
+ }if
+ }{
+ invert_image_samples
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ [/Separation Name[/DeviceGray]
+ {
+ sep_colorspace_proc AGMCORE_get_ink_data
+ 1 exch sub
+ }bind
+ ]AGMCORE_&setcolorspace
+ /sep_tint AGMCORE_gget AGMCORE_&setcolor
+ }if
+ }ifelse
+ currentdict imageormask_sys
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ sep_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask ne{
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }ifelse
+ }{
+ currentoverprint not Name(All)eq or Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ currentcolorspace 0 get/Separation ne{
+ [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ }if
+ currentoverprint
+ MappedCSA 0 get/DeviceCMYK eq and
+ Name AGMCORE_IsSeparationAProcessColor not and
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse
+ Name(All)ne and{
+ imageormask_l2_overprint
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+}def
+/colorSpaceElemCnt
+{
+ mark currentcolor counttomark dup 2 add 1 roll cleartomark
+}bdf
+/devn_sep_datasource
+{
+ 1 dict begin
+ /dataSource xdf
+ [
+ 0 1 dataSource length 1 sub{
+ dup currentdict/dataSource get/exch cvx/get cvx/exec cvx
+ /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx
+ }for
+ ]cvx bind
+ end
+}bdf
+/devn_alt_datasource
+{
+ 11 dict begin
+ /convProc xdf
+ /origcolorSpaceElemCnt xdf
+ /origMultipleDataSources xdf
+ /origBitsPerComponent xdf
+ /origDecode xdf
+ /origDataSource xdf
+ /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def
+ /DataSource origMultipleDataSources
+ {
+ [
+ BitsPerComponent 8 idiv origDecode length 2 idiv mul string
+ 0 1 origDecode length 2 idiv 1 sub
+ {
+ dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch
+ origDataSource exch get 0()/SubFileDecode filter
+ BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx
+ }for
+ ]bind cvx
+ }{origDataSource}ifelse 0()/SubFileDecode filter def
+ [
+ origcolorSpaceElemCnt string
+ 0 2 origDecode length 2 sub
+ {
+ dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div
+ 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx
+ }for
+ /convProc load/exec cvx
+ origcolorSpaceElemCnt 1 sub -1 0
+ {
+ /dup cvx 2/add cvx/index cvx
+ 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx
+ }for
+ ]bind cvx 0()/SubFileDecode filter
+ end
+}bdf
+/devn_imageormask
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ 2 dict begin
+ dup
+ /srcDataStrs[3 -1 roll begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi
+ {
+ dup 65535 gt{1 add 2 div cvi}{exit}ifelse
+ }loop
+ string
+ }repeat
+ end]def
+ /dstDataStr srcDataStrs 0 get length string def
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_producing_seps not{
+ level3 not{
+ Operator/imagemask ne{
+ /DataSource[[
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def
+ /MultipleDataSources true def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ }if
+ }if
+ currentdict imageormask
+ }{
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ CSA get_csa_by_name 0 get/DeviceCMYK eq{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ filter_cmyk 0()/SubFileDecode filter def
+ /MultipleDataSources false def
+ /Decode[1 0]def
+ /DeviceGray setcolorspace
+ currentdict imageormask_sys
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate{
+ /DataSource
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ /MultipleDataSources false def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ currentdict imageormask_sys
+ }{
+ gsave
+ knockout_unitsq
+ grestore
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }
+ {
+ /devicen_colorspace_dict AGMCORE_gget/names_index known{
+ Operator/imagemask ne{
+ MultipleDataSources{
+ /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def
+ /MultipleDataSources false def
+ }{
+ /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def
+ }ifelse
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+ end
+}def
+/imageormask_l2_overprint
+{
+ currentdict
+ currentcmykcolor add add add 0 eq{
+ currentdict consumeimagedata
+ }{
+ level3{
+ currentcmykcolor
+ /AGMIMG_k xdf
+ /AGMIMG_y xdf
+ /AGMIMG_m xdf
+ /AGMIMG_c xdf
+ Operator/imagemask eq{
+ [/DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]/DeviceCMYK{}]setcolorspace
+ AGMIMG_c 0 ne{AGMIMG_c}if
+ AGMIMG_m 0 ne{AGMIMG_m}if
+ AGMIMG_y 0 ne{AGMIMG_y}if
+ AGMIMG_k 0 ne{AGMIMG_k}if
+ setcolor
+ }{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ [/Indexed
+ [
+ /DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]
+ /DeviceCMYK{
+ AGMIMG_k 0 eq{0}if
+ AGMIMG_y 0 eq{0 exch}if
+ AGMIMG_m 0 eq{0 3 1 roll}if
+ AGMIMG_c 0 eq{0 4 1 roll}if
+ }
+ ]
+ 255
+ {
+ 255 div
+ mark exch
+ dup dup dup
+ AGMIMG_k 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_y 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_m 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_c 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ counttomark 1 add -1 roll pop
+ }
+ ]setcolorspace
+ }ifelse
+ imageormask_sys
+ }{
+ write_image_file{
+ currentcmykcolor
+ 0 ne{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ gsave
+ /Black
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Yellow/DeviceGray{}]setcolorspace
+ gsave
+ /Yellow
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Magenta/DeviceGray{}]setcolorspace
+ gsave
+ /Magenta
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Cyan/DeviceGray{}]setcolorspace
+ gsave
+ /Cyan
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ close_image_file
+ }{
+ imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+}def
+/indexed_imageormask
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ currentdict
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ /indexed_colorspace_dict AGMCORE_gget dup/CSA known{
+ /CSA get get_csa_by_name
+ }{
+ /Names get
+ }ifelse
+ overprint_plate not{
+ knockout_unitsq
+ }if
+ }{
+ Indexed_DeviceN{
+ /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{
+ indexed_image_lev2_sep
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }{
+ AGMCORE_is_cmyk_sep{
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ level2{
+ indexed_image_lev2_sep
+ }{
+ indexed_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ level2{
+ Indexed_DeviceN{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ }{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne
+ {
+ begin
+ currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse
+ get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and
+ AGMCORE_in_rip_sep and{
+ [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup]
+ setcolorspace
+ }if
+ end
+ }
+ {pop}ifelse
+ }ifelse
+ imageormask
+ Indexed_DeviceN{
+ end
+ }if
+ }{
+ Operator/imagemask eq{
+ imageormask
+ }{
+ indexed_imageormask_lev1
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/indexed_image_lev2_sep
+{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ Indexed_DeviceN not{
+ currentcolorspace
+ dup 1/DeviceGray put
+ dup 3
+ currentcolorspace 2 get 1 add string
+ 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
+ {
+ dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
+ }for
+ put setcolorspace
+ }if
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ end end
+}def
+ /OPIimage
+ {
+ dup type/dicttype ne{
+ 10 dict begin
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /ImageType 1 def
+ /Decode[0 1 def]
+ currentdict
+ end
+ }if
+ dup begin
+ /NComponents 1 cdndf
+ /MultipleDataSources false cdndf
+ /SkipImageProc{false}cdndf
+ /Decode[
+ 0
+ currentcolorspace 0 get/Indexed eq{
+ 2 BitsPerComponent exp 1 sub
+ }{
+ 1
+ }ifelse
+ ]cdndf
+ /Operator/image cdndf
+ end
+ /sep_colorspace_dict AGMCORE_gget null eq{
+ imageormask
+ }{
+ gsave
+ dup begin invert_image_samples end
+ sep_imageormask
+ grestore
+ }ifelse
+ }def
+/cachemask_level2
+{
+ 3 dict begin
+ /LZWEncode filter/WriteFilter xdf
+ /readBuffer 256 string def
+ /ReadFilter
+ currentfile
+ 0(%EndMask)/SubFileDecode filter
+ /ASCII85Decode filter
+ /RunLengthDecode filter
+ def
+ {
+ ReadFilter readBuffer readstring exch
+ WriteFilter exch writestring
+ not{exit}if
+ }loop
+ WriteFilter closefile
+ end
+}def
+/spot_alias
+{
+ /mapto_sep_imageormask
+ {
+ dup type/dicttype ne{
+ 12 dict begin
+ /ImageType 1 def
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /MultipleDataSources false def
+ }{
+ begin
+ }ifelse
+ /Decode[/customcolor_tint AGMCORE_gget 0]def
+ /Operator/image def
+ /SkipImageProc{false}def
+ currentdict
+ end
+ sep_imageormask
+ }bdf
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_colorAry xddf
+ /customcolor_tint AGMCORE_gget
+ <<
+ /Name AGMIMG_colorAry 4 get
+ /CSA[/DeviceCMYK]
+ /TintMethod/Subtractive
+ /TintProc null
+ /MappedCSA null
+ /NComponents 4
+ /Components[AGMIMG_colorAry aload pop pop]
+ >>
+ setsepcolorspace
+ mapto_sep_imageormask
+ }ndf
+ Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_override false put
+ current_spot_alias{dup 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /customcolor_tint AGMCORE_gget exch setsepcolorspace
+ pop
+ mapto_sep_imageormask
+ true set_spot_alias
+ }{
+ //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec
+ }ifelse
+ }bdf
+}def
+/snap_to_device
+{
+ 6 dict begin
+ matrix currentmatrix
+ dup 0 get 0 eq 1 index 3 get 0 eq and
+ 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
+ {
+ 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def
+ 0 0 transform
+ AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ itransform/AGMIMG_llY exch def/AGMIMG_llX exch def
+ 1 1 transform
+ AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ itransform/AGMIMG_urY exch def/AGMIMG_urX exch def
+ [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat
+ }{
+ }ifelse
+ end
+}def
+level2 not{
+ /colorbuf
+ {
+ 0 1 2 index length 1 sub{
+ dup 2 index exch get
+ 255 exch sub
+ 2 index
+ 3 1 roll
+ put
+ }for
+ }def
+ /tint_image_to_color
+ {
+ begin
+ Width Height BitsPerComponent ImageMatrix
+ /DataSource load
+ end
+ Adobe_AGM_Image begin
+ /AGMIMG_mbuf 0 string def
+ /AGMIMG_ybuf 0 string def
+ /AGMIMG_kbuf 0 string def
+ {
+ colorbuf dup length AGMIMG_mbuf length ne
+ {
+ dup length dup dup
+ /AGMIMG_mbuf exch string def
+ /AGMIMG_ybuf exch string def
+ /AGMIMG_kbuf exch string def
+ }if
+ dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+ }
+ addprocs
+ {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage
+ end
+ }def
+ /sep_imageormask_lev1
+ {
+ begin
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {
+ 255 mul round cvi GrayLookup exch get
+ }currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+ {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ currentcolortransfer
+ {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ /sep_image_lev1_sep
+ {
+ begin
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ Components aload pop
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ {AGMIMG_c mul 1 exch sub}
+ {AGMIMG_m mul 1 exch sub}
+ {AGMIMG_y mul 1 exch sub}
+ {AGMIMG_k mul 1 exch sub}
+ }{
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+ }ifelse
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end
+ }def
+ /indexed_imageormask_lev1
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ currentdict
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ end end
+ }def
+ /indexed_image_lev1_sep
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end end
+ }def
+}if
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+Adobe_AGM_Utils begin
+2 2010 Adobe_AGM_Core/ds gx
+Adobe_CoolType_Core/ds get exec Adobe_AGM_Image/ds gx
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: 1 1
+%%EndPageComments
+%%BeginPageSetup
+%ADOBeginClientInjection: PageSetup Start "AI11EPS"
+%AI12_RMC_Transparency: Balance=75 RasterRes=300 GradRes=150 Text=0 Stroke=1 Clip=1 OP=0
+%ADOEndClientInjection: PageSetup Start "AI11EPS"
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/ps gx
+Adobe_AGM_Utils/capture_cpd gx
+Adobe_CoolType_Core/ps get exec Adobe_AGM_Image/ps gx
+%ADOBeginClientInjection: PageSetup End "AI11EPS"
+/currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse { userdict /AI11_PDFMark5 /cleartomark load put userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put} { userdict /AI11_PDFMark5 /pdfmark load put userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse [/NamespacePush AI11_PDFMark5 [/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5 [{ai_metadata_stream_123} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter AI11_ReadMetadata_PDFMark5 <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/postscript</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">CSVhelper logos</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2011-09-07T13:14:36-05:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2011-09-07T13:14:36-05:00</xmp:ModifyDate>
+ <xmp:CreateDate>2011-09-07T13:14:36-05:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>108</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAbAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AIswHyh2KuxV2KuxV2Kux&#xA;V2KvaPOn/kgrL/jBZf8AJxMzcfIPpXZ3+L4/6o+58/5NzXu3/ONf+8Wvf8Zbb/iMmJV7RgV2KuxV&#xA;2KuxV2KsP/N//wAlvrf/ABij/wCTyYq+UcKvWv8AnHH/AJSnU/8AmBP/ACeTFX0JgV2KuxV2KuxV&#xA;2KuxV2KuxV2KuxV2KvkCysrq+vIbO1jMtzcOsUMY6s7GgG+2YAD5XjxynIRiLJesWH/OPk72ytf6&#xA;wsVwR8UUMPqKvtzZ0r/wIy8YHp8fsya9U9/IftYr56/K3V/KsC3omW/01mCNcIpRo2PT1EJagPYg&#xA;n6NshPGYut7R7HyaYcV8UO/u94Tfyp+SOpavpkOo6jfDT47hRJBAsfqyFGFVZviQLUb03+jJRxW5&#xA;Wj9n55YCc5cN9Kv9Kr5k/IvUtO06W90y/W/9BTJJbvH6T8FFTwIZwx9tsZYaZar2dnCJlCXFXSq/&#xA;Ws0P8kLnVtGstTi1iNEvIUmEZhYlS61K15ivE7YBisWun9njlxxmJ/UAeX7Us8q/lTe6/d6vbC+W&#xA;1Ok3BtXZoy3NgzA0HJaU4YI47cbR9iyzSmOKuCVcuaU+e/Jb+UtRt7GS8W8knh9clUKcVLFR1Lde&#xA;JwThwuL2loPysxHi4iRfKnofnT/yQVl/xgsv+TiZlY+Qe57O/wAXx/1R9z5/ybmsn8q/mFrvlfS7&#xA;+z0fhDNqDxs92wDuixhhRFb4anl1NcVUh+YvnwXHr/p++5+Bncp4/wB3Xh+GKvavyd/NS88yvJou&#xA;s0bVYIzLDdKAomjUgMGUUAda126j5Yqyn8wvP+neTdJW6nT6xe3BKWVoDx5so+JmPZFqKnAr5+1v&#xA;84fP+qzs/wCk3sYiTwgs/wByqg9uQ/eH6WOFUttfzF8+Wzh49fvmINaSzvKPukLjFXqH5d/nvc3V&#xA;7DpXmkR1nYRw6mgEYDHYCZR8IBP7S0A7jvirPPzf/wDJb63/AMYo/wDk8mBXyjhV61/zjj/ylOp/&#xA;8wJ/5PJiqn59/Nfz/pXnHVtOsNU9GztpykEXoWzcVAG3J42Y/ScVSOH87PzJEqGXWKxhhzAtrXda&#xA;7/7qxVX83/nT5u1q8lGnXUmk6aCRBBbnhKV7NJKvxcj/AJJp+vFUN5Y/ODzrot7HJcX8up2dR69r&#xA;duZSy9+MjVdT4b/PFX01p+rWV9pNvqsLgWdxAtysjUFI2Xn8XhQdcCvDPPH5+axcXctn5X42dlGx&#xA;UXzqHmlptyUOCqKe21fl0wqwCT8wfPUkvqt5g1AMDWi3Mqr1r9lWC/hiqfeXvzs89aTOhubv9KWo&#xA;Px290ASR3pKAHB+ZI9sVfQvk/wA3aV5q0WPVNOJCk8J4HpzilABKNT51B7jArxj8xvzU8+aP511T&#xA;TdO1T0LK2kRYYvQt34gxqx+J42Y7nucKsftvzn/MqS5ijk1sLG7qrsbe0AAJoST6W2Ko3z1+dXmT&#xA;V9Rmi0S6k0zSI2Kwej+7mkUHaR3+0pP8qkU98VVPydjR/wAwdO5qG4rOy17EQvQ5h4vqeA7CAOqj&#xA;8fuL1/8AM69vLSz0FrWeSAy61aRymNinJCJCUahFVJA2y/Idh73qu1ckojHwki8sf0or8zo0k8ha&#xA;yrjkBCGAPirqwP0EYcn0lt7WiDpp33JnAv1/ysi6fMIjdWIW0nU04GSKiMCv8tR0wjk5A9eH0H6o&#xA;7H4bMHf8yz5TsLLRfMek3rXkECwvcH03in4KFLo5b4we/fx3yvxOEUQ6eXa35aMceaE+ICr2o11u&#xA;9/xadfk/e/WfIGnAmr25lhb/AGMrFf8AhWGSxH0uV2JPi0sfKx9qJ8j6cLS/80PSjT6vK3bcNFHI&#xA;OnvIcYDn723QYuGWXzyH7gf0vIfztvDP57mirX6pbwwj2qvq/wDM3KMp9TyvtBk4tTX82IH6f0sq&#xA;86f+SCsv+MFl/wAnEzJx8g9d2d/i+P8Aqj7nz/k3Nen/AJPeR9A8x6Z5huNVhM8ltEiWpDMvps6y&#xA;MXHEip+BaV/jirzDFWe/kdLw/MnTlqR6sdwlB3pA7UP/AAOKov8APzU5brz7JaFqx6fbwxIvYGRf&#xA;WY/M+oMVeb4q9N/OvyTovlhtC/RdsLcXMMqXFHdw8kHp/F8ZO59TFXmWKvovW9Wl1b8gGvpjymks&#xA;oUlfqWeKdImY+5KVxV86Yq9a/wCccf8AlKdT/wCYE/8AJ5MVYd+aX/kwdd/5im/UMVY3aQevdwwb&#xA;n1ZFSg6/EQNsVeifnf5S0Dy5q+mQ6NbfVYp7YmVAzMCyNxDfGWNSOuKvNsVe+3msSWn/ADjvBLEx&#xA;SWe2SzU13o8/puPpjDYq8CxV6Z+VXk7Qde8t+aLjUbYTXVpABZylnX0mMcj8gFIFeSDrirzPFXrP&#xA;/OOmrSweZ7/TC9ILy1MoSuxlhdeP/CO2KsW/N7/yY+t/8ZU/5MpirD8Vdir0/wDJr/yYOn/6k/8A&#xA;yZfMPF9TwHYP+NR+P3PTfzstHvPL2k2iMEe51a3iVz0UvHKoO3hXLs3J6Pt/Hx4oR78kR9hYJ5j/&#xA;ACe13R9EvNTn1WKeG1T1HiAkqwqBTfbKpYyBbptV2FkxY5TM7ER5sm8ixfmJ5W0kSX1vFeeW44jd&#xA;GMTL60MfH1GMVeu2/A9+4ycOIDydj2dHVaaHqAliAvnuOu36me3tjoPnDy4qyqLnT76MSQS0o6Fh&#xA;8LrXdXX+w5aQJB3OTHi1WLfeEht+v3sM/ImVo9G1bTHIL2d8Saf5aBPurEcrwnanU+zprHOB5xn+&#xA;Puei2tmlvNdyLSt1KJmoKbiJI/8AmXloDvowAJPef0AfofMn5jXn1vzzrUvXjdPD/wAif3X/ABpm&#xA;HP6i+d9q5OPUzP8ASr5bfoenfmLGY/yMs426pa6ap+Y9MZmQ5B73QisEB/Qj9z52yTlPbv8AnHr/&#xA;AI4fmf8A55f8m5cVeI4qzj8lP/Jm6N/0c/8AUJLirvzr/wDJm6z/ANG3/UJFirB8VTzzN518z+Z/&#xA;q36cvfrf1Tn9X/dRRcfV48/7pErXgOuKpHir3az/APWam/4xS/8AdRbFXhOKvWv+ccf+Up1P/mBP&#xA;/J5MVYd+aX/kwdd/5im/UMVSPQ/+O1p//MTD/wAnBir1T/nJH/juaP8A8wsn/JzFXj2KvaNd/wDW&#xA;dtJ/4yp/yfkxV4viqdaD5y8yaDa3lppN59Wt78BbtPTik5gAr1kVyNmPTFUlxV6L+Qn/AJMKH/mG&#xA;n/4iMVSr83v/ACY+t/8AGVP+TKYqw/FX0/5V/JryXpulWy3+npqGoFFa5nuOTAyEVYLGTxVQem1f&#xA;HArxfyFr0Gg+bdO1O4r9WhdlnIqaRyo0bNQbnjy5U9swoSo2+bdm6kYc8Zy5Dn8RT6L1HTtC82WV&#xA;jIt169taXUV9BLayKQZIq8Qxo2x5Go65lkCT3uXFj1MYm7EZCQrvDFPzh856Ra+XLrRIbhJtTveM&#xA;ZhjIYxIHDO0lPs1AoB13yvLMVTrO3NfCGE4wbnL7O+028l+YtD81eUYdOFyouzZi0v7UEJMp9P03&#xA;ZVNfhPVWFR9NRkoSBFOVoNVj1OARv1cNSHXlR/YmJu/Lfkny5BbXN2IbSyi4wiVlM0lKn4VFOTMf&#xA;AYbEQ5HHi0mICRqMR15n9rzD8kdfto9f1tbqVLdb6Nbn94yqvJJDsCxH+/spwy3Lzvs/qR4uS9uL&#xA;f7f2vYv05ov/AFcLb/kdH/XMjiHe9X40P5w+b5Q1G5a91O6ugKtczSS08TI5b+OYT5jmnxzMu8k/&#xA;N7v+dFuLb8rbi3HSE2sY/wBjIg/hmcA+oRjQA7nzNhZPbv8AnHr/AI4fmf8A55f8m5cVeI4qzj8l&#xA;P/Jm6N/0c/8AUJLirvzr/wDJm6z/ANG3/UJFirB8VfQf5h+Xfyy8maZbX0vlhL0XM3oCNZ5Y6fAW&#xA;rUs38uKsB/xr+VX/AFI3/T7J/TFXoWq3ulX35BXV1pNj+jdPkib0bLmZOHG+4t8Z3PJgW+nFXzxi&#xA;r1r/AJxx/wCUp1P/AJgT/wAnkxVh35pf+TB13/mKb9QxVI9D/wCO1p//ADEw/wDJwYq9U/5yR/47&#xA;mj/8wsn/ACcxV49ir2jXf/WdtJ/4yp/yfkxV4vir1z8i/JvlnzFa6u+s2K3jW0kAhLM68Q4ct9hl&#xA;68RiqVz+cfyrimkiPkevpsVr9ck3oaeGKst/KvzL5F1DzdHb6N5Y/RV6YZWW7+svLRQPiXi22+Kv&#xA;Ovze/wDJj63/AMZU/wCTKYqw/FX29gV8c5gPlDsVdirsVdirsVdiqc+TbA3/AJr0i0pyWW7h9Qf5&#xA;CuGf/hQclEWXM0GPjzwj/SH7Xt356f8AkuL/AP4y2/8AyeXM19LfMGFXt3/OPX/HD8z/APPL/k3L&#xA;irxHFWcfkp/5M3Rv+jn/AKhJcVRH562clv8AmNeysCFu4beZCe4ESxVH0xHFXn+Kvdv+chNXsrry&#xA;3oSQSpJ9amN1GFYMfTEdK7V2q+KvCcVe+C1ktf8AnHD05AQzW3qiop8M176i/wDCuMVeB4q9a/5x&#xA;x/5SnU/+YE/8nkxVh35pf+TB13/mKb9QxVj2nzehf209QPSlR6np8LA74q9T/wCciry0uNc0j6vM&#xA;k1LRmJjYMOLvVTt/MNxiryTFXuurac0v/OOlpw+NreOK4+g3PxfcHOKvCsVe3/8AOOV9Z29j5h9e&#xA;ZIvTMEz8mApGqycn37DvirxS4kEtxLKBQO7MB8zXFXo//OP1rLN58Myg8LazmeRu3xFUA+9sVST8&#xA;3v8AyY+t/wDGVP8AkymKsPxV9vYFfHOYD5Q7FXYq7FXYq7FXYq9E/I3STeecTestY9OgeQN2Ekn7&#xA;pR/wLMfoy3CN3fez2Di1HF0gPtO363o/52289x+Xl9FBG8shlt6IilmNJV7DMoPcvmn9B61/1b7n&#xA;/kTJ/TCr2j8grG9ttF8yrcW8kLP6XASIyE/u5OlQK4q8X/Qetf8AVvuf+RMn9MVZr+TelapB+ZGj&#xA;yz2c8US/WeUjxuqitrKBUkU64q9e/Nn8tf8AF+nxXFiyx6zZAiAvsssZ3MTHtvup/rgV836x5f1v&#xA;Rrg2+q2M1nKDQCVCoP8Aqt9lh7g4VS/rir0D8vPyk1zzHfRXGoW8tjoaEPNPKpRpVB+xCDQnl05d&#xA;B89sVe2/mlZcfy11WzsoSVSCKOCCJSaKkqAKqjwAwK+X/wBB61/1b7n/AJEyf0wq9V/5x507ULXz&#xA;PqT3NtLAjWRCtIjICfVTarAYlWDfml/5MHXf+Ypv1DFWOWNt9avbe25cPXkSLnStObBa0+nFU081&#xA;eUNd8sai9lqlu0dGIhuACYZVHRo3pQ/LqO+KqHl7y3rPmDUY9P0q2a4ncgMwB4Rqf25G6Ko8Tir6&#xA;20/y7ZW3li38vTKJ7OO0WylDf7sQR8GJ/wBbAr5w88/lJ5l8t3ksltbyaho9S0N3CpcqnYTKoqpH&#xA;j0P4YVYKQQSCKEdRiqYaNoGta1dLa6VZS3kzGlIlJAr3ZvsqPdjTFX0z+Vv5ex+T9GdZ2WXVr3i9&#xA;7Kv2V4j4YkPgtTv3P0YFeI/mxpOqzfmHrMsNnPJG0qcXSJ2U/uk6EDCrEf0HrX/Vvuf+RMn9MVfa&#xA;OBVD6jY/8s8X/AL/AEwUGPAO5K/NF3p2i+XtQ1R4YVNtCzRVRaGQjjGvT9pyBkZUBbjavLHDilMg&#xA;bD7en2vlTMN8zdirsVdirsVfQf5I+Xzp3lRtQlXjPqsnqiux9GOqx1+Z5N8jmVhjQe69n9N4eDiP&#xA;Oe/w6fr+L0PLXeuxV2KuxV2KuxVp0SRSjqHQ9VYVB+g4qh4dL0yCT1ILSGKTrzSNFb7wMVROKuxV&#xA;2KuxV87+ffyo8/6r5x1bUbDS/Ws7mcvBL69svJSBvxeRWH0jCqV6V+Tf5kQapZzy6PxiinjeRvrN&#xA;qaKrgk0EtemKvpmaGGaNopo1kjbZkcBlPzBwK1BbW9vH6dvEkMY3CRqFX7hTFVTFXYqhrjTNNuW5&#xA;3FpDM/8ANJGjH7yDiqvHHHGoSNQiDoqgAfcMVXYq7FXYq7FXYq8G/OPz9Fq92NC02Tnp1m/K5mU1&#xA;WWYbUUjqib/M/IHMbLO9g8X272kMsvCh9Mefmf1D73mWUvOOxV2KuxVO/Jvlm58yeYLbS4aiNzzu&#xA;pR/uuFT8bfwHuRkoRsuZoNIdRlEB8fIfj7X1PbW8FtbxW1ugjggRY4o16KiDiqj5AZmvpMIiIAGw&#xA;CpiydirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirwPz9+cV9rSSabo&#xA;gey0xvhlnJpPMvht9hT4A1Pc9sxZ5b5PE9pduyy3DH6Yd/U/qH48nmuVPPOxV2KuxVfFFLNKkMSN&#xA;JLIwSONQSzMxoAAOpJxSASaHN9I/ll5ETyto/K5AbV70K944oeAH2YlPgtd/E+1My8cKD6D2T2cN&#xA;Nj3+uXP9TMssdq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+O&#xA;cwHyh2KuxV2Kr4IJp5kggjaWaVgkcSAszMxoAoG5JxZRiZGhuS97/K/8rl0FU1fV1V9YYfuYeq26&#xA;sKHfoZCDQnt2zJx463L23ZHZAwfvMn95/uf2vSMud+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXxzmA+UOxV2Kp15Z8oa95ku/q+l2xdQaS3L1WGP/AF3p+A39&#xA;slGJPJzNJocuolUB8eg+P4L3zyL+WmjeVoxP/vZqrCkl6604g9ViXfiPfqfwzJhjAe37O7Kx6YX9&#xA;U+/9XczDLHaOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;vjnMB8oZBoPkLzbrhU2GnSmBqf6TKPShp4h3oG/2NTkhAlz9N2bnzfTE13nYfj3PUPLH5EadbFLj&#xA;zBc/XZRubSCqQg+DPs7/AEccujh73o9H7OQjvlPEe4cv1n7HqFlY2djbJa2cCW9tGKRwxKFUD2Ay&#xA;4CnooY4wHDEUFbCzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdirCvKn/Kp+Uf6B/R/1jb0+VPrP0ev++yuPB0dTovyW3hcF/wCy+31M1yx2zsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir/9k=</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>xmp.iid:0880117407206811B297A84155AD39AE</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:0880117407206811B297A84155AD39AE</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>xmp.iid:0780117407206811B297A84155AD39AE</stRef:instanceID>
+ <stRef:documentID>xmp.did:0780117407206811B297A84155AD39AE</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:D27F11740720681191099C3B601C4548</stEvt:instanceID>
+ <stEvt:when>2008-04-17T14:19:15+05:30</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T16:23:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T17:10:45-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:EF7F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T22:53:33-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F07F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T23:07:07-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:35:43-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:40:59-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:26:55-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FC7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:20-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:30:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FE7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:31:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B233668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T12:23:46-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B333668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:27:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B433668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:46:13-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:47:57-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:51:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:52:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T13:28:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FF7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T16:23:53-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:07C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
+ <stEvt:when>2008-05-28T16:45:26-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068119098B097FDA39BEF</stEvt:instanceID>
+ <stEvt:when>2008-06-02T13:25:25-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BB1DBF8F242B6F84</stEvt:instanceID>
+ <stEvt:when>2008-06-09T14:58:36-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811ACAFB8DA80854E76</stEvt:instanceID>
+ <stEvt:when>2008-06-11T14:31:27-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0180117407206811834383CD3A8D2303</stEvt:instanceID>
+ <stEvt:when>2008-06-11T22:37:35-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811818C85DF6A1A75C3</stEvt:instanceID>
+ <stEvt:when>2008-06-27T14:40:42-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0180117407206811BCA78FF66409E4BB</stEvt:instanceID>
+ <stEvt:when>2011-07-29T13:26:11-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0780117407206811B297A84155AD39AE</stEvt:instanceID>
+ <stEvt:when>2011-09-07T13:14:30-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0880117407206811B297A84155AD39AE</stEvt:instanceID>
+ <stEvt:when>2011-09-07T13:14:36-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>8.500000</stDim:w>
+ <stDim:h>3.615736</stDim:h>
+ <stDim:unit>Inches</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Red</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Green</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>14.999998</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>80.000000</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>35.000004</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>5.000001</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>19.999998</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>90.000000</xmpG:cyan>
+ <xmpG:magenta>30.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>30.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>80.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>45.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>70.000000</xmpG:cyan>
+ <xmpG:magenta>14.999998</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>5.000001</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>25.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>35.000004</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>10.000002</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>19.999998</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>25.000000</xmpG:magenta>
+ <xmpG:yellow>39.999996</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>45.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>5.000001</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>60.000004</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>55.000000</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>39.999996</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>39.999996</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>30.000002</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>65.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>35.000004</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>70.000000</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>89.999405</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>79.998795</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>69.999702</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>59.999104</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>39.999401</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>29.998802</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>19.999701</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>9.999103</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>4.998803</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Brights</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>75.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>60.000004</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.003099</xmpG:yellow>
+ <xmpG:black>0.003099</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> % &&end XMP packet marker&& [{ai_metadata_stream_123} <</Type /Metadata /Subtype /XML>> /PUT AI11_PDFMark5 [/Document 1 dict begin /Metadata {ai_metadata_stream_123} def currentdict end /BDC AI11_PDFMark5
+%ADOEndClientInjection: PageSetup End "AI11EPS"
+%%EndPageSetup
+1 -1 scale 0 -240.541 translate
+pgsv
+[1 0 0 1 0 0 ]ct
+gsave
+np
+gsave
+0 0 mo
+0 240.541 li
+581.999 240.541 li
+581.999 0 li
+cp
+clp
+[1 0 0 1 0 0 ]ct
+51.0254 43.96 mo
+35.04 43.96 li
+35.04 33.2744 li
+35.04 30.1763 34.8716 28.2324 34.5264 27.4565 cv
+34.189 26.6958 33.4307 26.311 32.2695 26.311 cv
+30.9521 26.311 30.1157 26.7754 29.7627 27.7139 cv
+29.4077 28.6523 29.2329 30.6753 29.2329 33.7866 cv
+29.2329 62.3403 li
+29.2329 65.3306 29.4077 67.2744 29.7627 68.1875 cv
+30.1157 69.1035 30.916 69.5522 32.1563 69.5522 cv
+33.3462 69.5522 34.124 69.1035 34.4897 68.1875 cv
+34.8555 67.2744 35.04 65.1333 35.04 61.7554 cv
+35.04 54.0317 li
+51.0254 54.0317 li
+51.0254 56.4238 li
+51.0254 62.7827 50.5781 67.2969 49.6797 69.9595 cv
+48.7827 72.6221 46.7959 74.957 43.7168 76.958 cv
+40.6421 78.9585 36.8516 79.9639 32.3442 79.9639 cv
+27.6646 79.9639 23.8042 79.1177 20.7646 77.4126 cv
+17.7285 75.7266 15.7114 73.3726 14.7285 70.373 cv
+13.7393 67.373 13.2446 62.8623 13.2446 56.8374 cv
+13.2446 38.8765 li
+13.2446 34.4419 13.3989 31.124 13.7012 28.9131 cv
+14.0063 26.6958 14.9102 24.5615 16.416 22.5098 cv
+17.9238 20.4575 20.0107 18.8481 22.6831 17.668 cv
+25.3569 16.4941 28.4233 15.9087 31.8877 15.9087 cv
+36.5972 15.9087 40.4814 16.812 43.5479 18.6284 cv
+46.6069 20.4575 48.625 22.7227 49.5845 25.4395 cv
+50.5435 28.1563 51.0254 32.3838 51.0254 38.126 cv
+51.0254 43.96 li
+cp
+false sop
+/0
+[/DeviceCMYK] /CSA add_res
+0 0 0 0 cmyk
+f
+90.6318 35.8037 mo
+75.7842 35.8037 li
+75.7842 31.2451 li
+75.7842 29.1167 75.5933 27.7617 75.2163 27.1797 cv
+74.8345 26.5972 74.2061 26.311 73.3169 26.311 cv
+72.3564 26.311 71.623 26.7056 71.1318 27.4883 cv
+70.6401 28.2705 70.397 29.4668 70.397 31.0542 cv
+70.397 33.1123 70.6719 34.6553 71.2236 35.6953 cv
+71.7534 36.7261 73.2612 37.9795 75.7441 39.4556 cv
+82.8604 43.6802 87.3394 47.144 89.1875 49.8516 cv
+91.0376 52.5552 91.9648 56.9263 91.9648 62.9512 cv
+91.9648 67.3315 91.4463 70.5571 90.4268 72.6284 cv
+89.3994 74.7085 87.4189 76.4458 84.478 77.855 cv
+81.5469 79.2578 78.127 79.9639 74.2271 79.9639 cv
+69.9482 79.9639 66.3013 79.1499 63.2695 77.5273 cv
+60.2476 75.9111 58.2705 73.8467 57.332 71.3433 cv
+56.3936 68.8364 55.9258 65.2798 55.9258 60.6733 cv
+55.9258 56.6528 li
+70.7705 56.6528 li
+70.7705 64.1284 li
+70.7705 66.4282 70.9805 67.9077 71.4004 68.5693 cv
+71.8174 69.2246 72.5552 69.5522 73.6191 69.5522 cv
+74.6851 69.5522 75.4722 69.1353 75.9956 68.3022 cv
+76.5142 67.4683 76.7686 66.228 76.7686 64.5864 cv
+76.7686 60.96 76.2788 58.5962 75.2939 57.4858 cv
+74.2808 56.3662 71.7837 54.5088 67.8091 51.8999 cv
+63.8389 49.2661 61.2002 47.3574 59.9102 46.1616 cv
+58.6201 44.9717 57.5547 43.3301 56.7021 41.2305 cv
+55.8545 39.1279 55.4312 36.4429 55.4312 33.1758 cv
+55.4312 28.4678 56.0342 25.0288 57.2334 22.8501 cv
+58.4375 20.6709 60.3843 18.9692 63.0659 17.7476 cv
+65.7461 16.5195 68.9893 15.9087 72.7891 15.9087 cv
+76.939 15.9087 80.4746 16.5767 83.3979 17.916 cv
+86.3247 19.2554 88.2573 20.9478 89.21 22.9868 cv
+90.1548 25.0229 90.6318 28.4839 90.6318 33.3667 cv
+90.6318 35.8037 li
+cp
+f
+134.981 17.1875 mo
+126.851 78.666 li
+102.566 78.666 li
+93.3281 17.1875 li
+110.185 17.1875 li
+112.147 34.1304 113.545 48.4551 114.387 60.1772 cv
+115.212 48.334 116.087 37.8076 117.01 28.627 cv
+118.125 17.1875 li
+134.981 17.1875 li
+cp
+f
+148.229 .00634766 mo
+148.229 33.2363 li
+148.229 74.8042 143.307 108.899 133.461 135.522 cv
+123.619 162.145 106.566 184.744 82.3198 203.347 cv
+58.0698 221.944 30.6328 234.337 0 240.541 cv
+0 177.09 li
+21.8799 164.697 34.2798 148.097 37.1968 127.318 cv
+0 127.318 li
+0 .00634766 li
+148.229 .00634766 li
+cp
+1 0 1 0 cmyk
+f
+51.0254 54.8843 mo
+35.04 54.8843 li
+35.04 44.1953 li
+35.04 41.0972 34.8716 39.1567 34.5264 38.3804 cv
+34.189 37.6167 33.4307 37.2319 32.2695 37.2319 cv
+30.9521 37.2319 30.1157 37.6929 29.7627 38.6348 cv
+29.4077 39.5732 29.2329 41.5996 29.2329 44.7075 cv
+29.2329 73.2612 li
+29.2329 76.2485 29.4077 78.1953 29.7627 79.105 cv
+30.1157 80.0278 30.916 80.4731 32.1563 80.4731 cv
+33.3462 80.4731 34.124 80.0278 34.4897 79.105 cv
+34.8555 78.1953 35.04 76.0513 35.04 72.6792 cv
+35.04 64.9492 li
+51.0254 64.9492 li
+51.0254 67.3413 li
+51.0254 73.7036 50.5781 78.2173 49.6797 80.8804 cv
+48.7827 83.5459 46.7959 85.8774 43.7168 87.8784 cv
+40.6421 89.8828 36.8516 90.8848 32.3442 90.8848 cv
+27.6646 90.8848 23.8042 90.0386 20.7646 88.3364 cv
+17.7285 86.6475 15.7114 84.2905 14.7285 81.2935 cv
+13.7393 78.2974 13.2446 73.7798 13.2446 67.7549 cv
+13.2446 49.8003 li
+13.2446 45.3628 13.3989 42.0449 13.7012 39.8311 cv
+14.0063 37.6167 14.9102 35.479 16.416 33.4302 cv
+17.9238 31.3784 20.0107 29.769 22.6831 28.5889 cv
+25.3569 27.4116 28.4233 26.8267 31.8877 26.8267 cv
+36.5972 26.8267 40.4814 27.7329 43.5479 29.5493 cv
+46.6069 31.3784 48.625 33.6436 49.5845 36.3633 cv
+50.5435 39.0737 51.0254 43.3047 51.0254 49.0435 cv
+51.0254 54.8843 li
+cp
+0 0 0 0 cmyk
+f
+90.6318 46.7212 mo
+75.7842 46.7212 li
+75.7842 42.1655 li
+75.7842 40.0376 75.5933 38.6855 75.2163 38.1001 cv
+74.8345 37.5181 74.2061 37.2319 73.3169 37.2319 cv
+72.3564 37.2319 71.623 37.623 71.1318 38.4058 cv
+70.6401 39.188 70.397 40.3843 70.397 41.9751 cv
+70.397 44.0298 70.6719 45.5762 71.2236 46.6162 cv
+71.7534 47.6499 73.2612 48.9033 75.7441 50.3765 cv
+82.8604 54.5977 87.3394 58.0649 89.1875 60.772 cv
+91.0376 63.4795 91.9648 67.8501 91.9648 73.8755 cv
+91.9648 78.2524 91.4463 81.478 90.4268 83.5493 cv
+89.3994 85.6294 87.4189 87.3696 84.478 88.7759 cv
+81.5469 90.1787 78.127 90.8848 74.2271 90.8848 cv
+69.9482 90.8848 66.3013 90.0737 63.2695 88.4512 cv
+60.2476 86.8354 58.2705 84.7676 57.332 82.2607 cv
+56.3936 79.7539 55.9258 76.2036 55.9258 71.5942 cv
+55.9258 67.5703 li
+70.7705 67.5703 li
+70.7705 75.0493 li
+70.7705 77.3491 70.9805 78.8286 71.4004 79.4932 cv
+71.8174 80.1484 72.5552 80.4731 73.6191 80.4731 cv
+74.6851 80.4731 75.4722 80.0532 75.9956 79.2197 cv
+76.5142 78.3862 76.7686 77.1519 76.7686 75.5039 cv
+76.7686 71.8809 76.2788 69.5171 75.2939 68.4038 cv
+74.2808 67.2871 71.7837 65.4292 67.8091 62.8242 cv
+63.8389 60.1899 61.2002 58.2813 59.9102 57.0854 cv
+58.6201 55.8955 57.5547 54.2476 56.7021 52.1479 cv
+55.8545 50.0488 55.4312 47.3638 55.4312 44.0967 cv
+55.4312 39.3921 56.0342 35.9497 57.2334 33.771 cv
+58.4375 31.5918 60.3843 29.8901 63.0659 28.665 cv
+65.7461 27.4438 68.9893 26.8267 72.7891 26.8267 cv
+76.939 26.8267 80.4746 27.4976 83.3979 28.8369 cv
+86.3247 30.1763 88.2573 31.8716 89.21 33.9077 cv
+90.1548 35.9434 90.6318 39.4048 90.6318 44.2876 cv
+90.6318 46.7212 li
+cp
+f
+134.981 28.1118 mo
+126.851 89.5903 li
+102.566 89.5903 li
+93.3281 28.1118 li
+110.185 28.1118 li
+112.147 45.0479 113.545 59.3755 114.387 71.0952 cv
+115.212 59.2549 116.087 48.7319 117.01 39.5444 cv
+118.125 28.1118 li
+134.981 28.1118 li
+cp
+f
+190.083 0 mo
+190.083 28.3789 li
+192.783 25.8813 195.705 24.0015 198.853 22.7612 cv
+201.992 21.5015 205.356 20.8843 208.938 20.8843 cv
+214.446 20.8843 219.135 22.2837 223 25.0894 cv
+226.872 27.895 229.232 31.1304 230.093 34.792 cv
+230.95 38.4502 231.378 45.1372 231.378 54.8521 cv
+231.378 126.145 li
+199.899 126.145 li
+199.899 53.373 li
+199.899 47.3511 199.603 43.4766 199.005 41.7588 cv
+198.407 40.0537 197.072 39.188 194.994 39.188 cv
+193.071 39.188 191.771 40.0728 191.098 41.8413 cv
+190.422 43.604 190.083 47.1157 190.083 52.355 cv
+190.083 126.145 li
+158.608 126.145 li
+158.608 0 li
+190.083 0 li
+cp
+0 0 0 .799988 cmyk
+f
+281.947 59.4487 mo
+281.947 51.8936 li
+281.947 46.5366 281.664 43.0854 281.089 41.5229 cv
+280.52 39.9707 279.349 39.188 277.579 39.188 cv
+275.405 39.188 274.048 39.8501 273.531 41.186 cv
+273.012 42.5093 272.751 46.0786 272.751 51.8936 cv
+272.751 59.4487 li
+281.947 59.4487 li
+cp
+313.502 76.2803 mo
+272.751 76.2803 li
+272.751 98.6372 li
+272.751 103.317 273.089 106.335 273.763 107.681 cv
+274.439 109.027 275.735 109.701 277.662 109.701 cv
+280.051 109.701 281.645 108.804 282.451 107.01 cv
+283.257 105.222 283.661 101.755 283.661 96.6172 cv
+283.661 82.98 li
+313.502 82.98 li
+313.502 90.6143 li
+313.502 97.002 313.104 101.914 312.295 105.336 cv
+311.483 108.772 309.606 112.431 306.642 116.324 cv
+303.687 120.221 299.935 123.148 295.384 125.098 cv
+290.838 127.035 285.137 128.018 278.28 128.018 cv
+271.633 128.018 265.766 127.057 260.676 125.133 cv
+255.584 123.211 251.621 120.568 248.794 117.221 cv
+245.961 113.875 243.999 110.178 242.906 106.157 cv
+241.817 102.13 241.272 96.2832 241.272 88.5913 cv
+241.272 58.4341 li
+241.272 49.3999 242.496 42.2739 244.936 37.0444 cv
+247.377 31.8271 251.373 27.8315 256.937 25.0483 cv
+262.496 22.271 268.882 20.8843 276.101 20.8843 cv
+284.932 20.8843 292.215 22.5571 297.957 25.9038 cv
+303.697 29.2568 307.72 33.6978 310.037 39.2266 cv
+312.349 44.7681 313.502 52.5425 313.502 62.5664 cv
+313.502 76.2803 li
+cp
+f
+356.199 0 mo
+356.199 126.145 li
+323.788 126.145 li
+323.788 0 li
+356.199 0 li
+cp
+f
+408.48 52.8228 mo
+408.48 46.4414 408.247 42.5669 407.779 41.2178 cv
+407.313 39.8657 406.014 39.188 403.881 39.188 cv
+401.807 39.188 400.468 39.9707 399.869 41.5229 cv
+399.269 43.0854 398.976 46.8516 398.976 52.8228 cv
+398.976 95.6851 li
+398.976 101.914 399.286 105.808 399.909 107.37 cv
+400.531 108.925 401.882 109.701 403.96 109.701 cv
+405.985 109.701 407.245 108.992 407.738 107.56 cv
+408.232 106.138 408.48 102.667 408.48 97.1577 cv
+408.48 52.8228 li
+cp
+399.517 22.748 mo
+398.976 31.8906 li
+401.776 28.1943 404.868 25.4331 408.247 23.6069 cv
+411.625 21.7876 415.311 20.8843 419.308 20.8843 cv
+424.189 20.8843 428.415 22.1948 431.966 24.8159 cv
+435.528 27.4438 437.75 30.4658 438.63 33.8916 cv
+439.516 37.3242 439.956 43.1392 439.956 51.3467 cv
+439.956 94.8994 li
+439.956 104.3 439.398 110.993 438.28 114.957 cv
+437.167 118.939 434.881 122.107 431.426 124.471 cv
+427.973 126.834 423.801 128.018 418.92 128.018 cv
+415.024 128.018 411.41 127.099 408.093 125.282 cv
+404.769 123.469 401.728 120.759 398.976 117.164 cv
+398.976 140.87 li
+367.497 140.87 li
+367.497 22.748 li
+399.517 22.748 li
+cp
+f
+490.056 59.4487 mo
+490.056 51.8936 li
+490.056 46.5366 489.772 43.0854 489.198 41.5229 cv
+488.624 39.9707 487.462 39.188 485.694 39.188 cv
+483.513 39.188 482.164 39.8501 481.644 41.186 cv
+481.12 42.5093 480.861 46.0786 480.861 51.8936 cv
+480.861 59.4487 li
+490.056 59.4487 li
+cp
+521.611 76.2803 mo
+480.861 76.2803 li
+480.861 98.6372 li
+480.861 103.317 481.198 106.335 481.874 107.681 cv
+482.552 109.027 483.847 109.701 485.77 109.701 cv
+488.163 109.701 489.762 108.804 490.565 107.01 cv
+491.37 105.222 491.772 101.755 491.772 96.6172 cv
+491.772 82.98 li
+521.611 82.98 li
+521.611 90.6143 li
+521.611 97.002 521.204 101.914 520.404 105.336 cv
+519.6 108.772 517.713 112.431 514.751 116.324 cv
+511.791 120.221 508.039 123.148 503.499 125.098 cv
+498.947 127.035 493.247 128.018 486.397 128.018 cv
+479.749 128.018 473.878 127.057 468.784 125.133 cv
+463.694 123.211 459.73 120.568 456.9 117.221 cv
+454.074 113.875 452.111 110.178 451.021 106.157 cv
+449.933 102.13 449.384 96.2832 449.384 88.5913 cv
+449.384 58.4341 li
+449.384 49.3999 450.599 42.2739 453.048 37.0444 cv
+455.49 31.8271 459.488 27.8315 465.046 25.0483 cv
+470.604 22.271 476.994 20.8843 484.214 20.8843 cv
+493.043 20.8843 500.328 22.5571 506.066 25.9038 cv
+511.812 29.2568 515.836 33.6978 518.143 39.2266 cv
+520.456 44.7681 521.611 52.5425 521.611 62.5664 cv
+521.611 76.2803 li
+cp
+f
+563.376 22.748 mo
+562.129 36.3506 li
+566.7 26.6099 573.32 21.4536 581.999 20.8843 cv
+581.999 57.27 li
+576.228 57.27 571.997 58.0459 569.296 59.605 cv
+566.594 61.1636 564.931 63.3267 564.309 66.1133 cv
+563.685 68.8872 563.376 75.291 563.376 85.3149 cv
+563.376 126.145 li
+531.893 126.145 li
+531.893 22.748 li
+563.376 22.748 li
+cp
+f
+%ADOBeginClientInjection: EndPageContent "AI11EPS"
+userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse
+%ADOEndClientInjection: EndPageContent "AI11EPS"
+grestore
+grestore
+pgrs
+%%PageTrailer
+%ADOBeginClientInjection: PageTrailer Start "AI11EPS"
+[/EMC AI11_PDFMark5 [/NamespacePop AI11_PDFMark5
+%ADOEndClientInjection: PageTrailer Start "AI11EPS"
+[
+[/CSA [/0 ]]
+] del_res
+Adobe_AGM_Image/pt gx
+Adobe_CoolType_Core/pt get exec Adobe_AGM_Core/pt gx
+currentdict Adobe_AGM_Utils eq {end} if
+%%Trailer
+Adobe_AGM_Image/dt get exec
+Adobe_CoolType_Core/dt get exec Adobe_AGM_Core/dt get exec
+%%EOF
+%AI9_PrintingDataEnd userdict /AI9_read_buffer 256 string put userdict begin /ai9_skip_data { mark { currentfile AI9_read_buffer { readline } stopped { } { not { exit } if (%AI9_PrivateDataEnd) eq { exit } if } ifelse } loop cleartomark } def end userdict /ai9_skip_data get exec %AI9_PrivateDataBegin %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Jon Ruprecht) () %%Title: (CSV Helper logo.eps) %%CreationDate: 9/7/11 1:14 PM %%Canvassize: 16383 %AI9_DataStream %Gb"-6CQBdPFWgGep`K'b!,8^''+oV-Ka%&0A&dht/?!EH%:da5=-m)JY",7u>$C<sht&04&bkG4b3ZPfAJ.mBSn'MljPbBV_k6no %nF;8Ehn8pWmG[+*qoaoN?d)rhLc&K5'&:f^p-7F5m`kL,/se#RN;YBpS=jd'5gJkL^C2hcGj=GOlQ=uuq=+3hT0Bu<oDSF8+5_ME %o_gErY5eFb_o9C)H2$aeT.UWB?G6=KpTpp8MdPATIJ;mlj/;XT5$ug_$"<Grp#1\8n%SVB&+BPsc)4oTpllBW^S[.ml2+Q>^4F]$ %h[KLr&$OmhnBIH[_O,8Uq7HCjkO7pOq.oj$=)U9PL=sHIAsh?GYQ+:aqfr3Ag<]fdGAk3Dqu,\RY<K`"pu-`$K#dl22t+M.pZh>h %qKP6$bBU:f#lif\>C+/1n.M"E(Nm<Z'<Y*?8ASXKn"j)iRl>hEqrU\h]_M0#f5Em$rqQF6q!3D+p,+MHeYg`#^&@uh6dr]`CSjbn %4oaVf5J2@7l(:/Pr=#;dlW*c.?[r"9c+@=h/GB"t]3"d\'=GCL5BlnC=.d3To,78rj1?E&Mgp"L-M\<+r6&/kIe/EJ$t&K7hnAjT %O!"CiB)H+E'$_h1`/O^eiF7P<R$VBua<fg>j(km:;QIHR-J6Q&j(LE<^'(n=B>9/&qM.jb^O?"<QSQPXomd#6p7&L=H+>@$J+OJB %V>FWMs7(3ib<LK*o0K5apiQK#2U4-brq\-ij6_V?Y!9Y@blDk]f`=#2"(9-\O5KNcm,.FOGl3?cGkUe,f>%+e]j^)39_TM&9DSFn %ms]dOrV')0J,&I#55bDTqt\c$+92;a`BSgg4oY07+9)4g^NoeR(Df:P5l9/75J6smk47'Wms]7s+S`$6D_CgGn1ag@s1SHsRlA*; %A(D]6kj=-i^3TJC]5C`']__-B`W(>Yl+?hJL84M%eY`e,gW2&*rXo/#$J)/8h-ak(qWdYoJ5EoSnBL\c-N?,ea0>H]qs$$_`M\X3 %V]WYQ_o4ihr:nQl*WKZF$^dU>s"ECQ^SM0!r5/bGT^A5E_tm(m&cUeH!kjZ0!WMk\4Sn`OGOOC;qruXTIsCj:mfbe&[l<j7*eILD %IfJjYhnB!fID_rmo%R6<5/2OEm`eg_rr2MYpSUKuebK*t&)R@2'%(F"rV6@RAFp[FrSc:NDeRA@J%28F?eKu"CESR!l$Ms["ASOQ %ip`Z=qg\Y<lC57JDLVuMs7*_i?jaXN^oM[oE3%lI^k[ic2t#SYjF63fX6BWOHFeZN45EVTo/,LR!mT$l>+?854;V[R^4LNqYG'dr %\'XQ/#o`:\q!h!r93C2:Q40lH(#%2YJ9JW]5eC=iQ9.<V(tgP`ItE_F\c3U\64`X^739)'8*GLm48TH7;"[ohi33(gZs/"r-CF!0 %HjCmM'QPUq\o8AoiB#bIgMdt,35arDL)<4:b-?J5FVPGW3o7g0GaBcP`[,o!aYZ_r#l%PdT4$k3:@S!,:BapU't^1T];?=TV%oIp %XdD2`AG[k]1RTnFp@[CnH:$YV`^pWg>&C+6M:'hCc)oFDL<7j8k10+X"F4q*9tb\V8`RPUB(:''L@LSgVHqZJ_7%J*n^c[]nb0d' %3o35;=0dguOg(+VRCJg#TtI53WP#?u2UUAeO!%(_(I8mad>0LtcF=VCN/.S7"67=a;GIC!9ipS@Y1$+VKm!^u1rJn[$u^`3U.ep! %Y5&FY+^aE%I%0S4,B6d#=KYIEMup"E.A`?2E[]Q$VVFMMWtXjR!Zr.,IVYsoQ<NTS4h,eImAAak42?Rg2@7):Q7lPjGYblM=86jH %]"Ybd]"PZWCmf8V@8F``d[CUeTqB+Bd=6aq!6lTuhp9'0I<!0ca/S[KAa5b1O0c8T4..p"q2c*^:_*/;FZ:AD%l]9u_]>EMI(]N; %"k]LO;_,(!=4`5nlg(&+gZpqoE\lXT^Bljh-J`3V;f:mFe]m(8qW?r&p>ui[c3t!G!S&B1?%t5?[o^%og[!U`gY:IE4B4qi&.P%D %nNg9dRn^M#[C^RV'/V`KNub.4/Xs3J$*+9_lgXqcQ<#T@>$88EC0/\fXkI46Y#k"f[@XJI=lOUdFtN)Ng9%_DDJ>7l93\4>QSADZ %Mph5F9.SGjZn#hqC"LdNYW5+"g1A,Z`](ms`];%"`]M1&`]_=*`]qI.`^.U2^dBKJaN2Hd8-fM20p6O>Z'+TS0U$L?Z'4^A0siu0 %;OT'e<067=.?;[$->p;:deMupg9id62@'8+-*9cid^$5*:%p//o?n?;M8M=J^PQ[s;<Ig']K69%)kL-\pCuRI6FIf_E_*VWb(@\; %C@Dqqs5lS8GFU=;.3lX[=QTeaJbo9:^&8Gudo`9n,7$BnY+#[8)e`_Gg-%T=]Ls@*cP\gqKT?9&3*kTc3<>h]dI-<j@g.pC?I/h* %2Lq1)cTFp=S.g<YN5LWH[47^7bH!R?^4-7]_H/sLq#8NNOB9K[@Jph^X+2lTq'eD?2=s`K;A<"Sl=Ga_JZ0;D3Pd*U*/"l/$gG28 %ghI6]#YiF\k,Zi=Tc&md4^fAj*FdklFHnk9,V##b$O^C;$3:B?V21BqHEQh0bBJW6gh(8Y2EF;TNl2u+mn^pr>ejTLG;T06d>g_, %lcRkF[4?<"\O7\Vk4$=LL!(^5B20P)"X(9EIZGIU,o,M<aSBb1qV74WJc`aS7!)Rbirj)57@5eKP9%/IcSphR)I)Q2TWgN>ENWeg %b0Fm)NYP]?&nIM$_H]L7A^k8_j9GM@KND`!79[*BA^.rNYZ]`*cu*.!*ST?%?ra)DHqhuFf0ZW.!P9D[[RJ\"<Q&:EBW^C6Qf/W* %q52Ur]UVARLlBUer*b1P\+%06*j%+eL>a<bm,8\#QsdUG@K!B<8$66`$Hsd38-*>3^cX!3na6+b]1Uk,MJjatDH)$Q=`USqW=4%- %PT`E)fiH<9U+)6_SZ(.tKVUUt-Q3q!7>7M)iJ9t=&e>p<k6X]'/KEhe37(`GfErVf":%**n-^67$#%pBOFh7/%Tbn8$4r$sM]<_\ %!d8mt38:)$hR4DBc?.T8/Y$X^Dbg9V.l+9LkuBaP0"*7N"9P]_U>='=&J+BhH=:NHj<YH&838n06P@F(85#'OYV_5"#S0+_*jc*D %M@S9Bm\k]TjbW&^=G`b#dS$=Tr.@*8)&(G54F9cDOAd8/"6(Oa&_;PM#2"n[c?$sZ&)<E`gNn#V'QIbnd9\p2,D\D57cLH8A(*.P %4G(/f3HO3iT!t0lD7`HR:Y#0<m8OeB:OD2>]@r"qfnS==N6q8,P_:R&Xoa)G+LVCq+q(=ae+F_Pn2I"[*.WfFQq.Dn,m"PL5cWu4 %l#6m5r=*Eo#N2p'-CI/YM21#>)U4$D\Etm;h.trb=+IFWc<LE'*IqHJ5R/[pj/a+!QK!iZl!]_LLaSdGKQJDTith;-TUA>4Y@tK9 %lS<0nOXR=ZWf'*G`MAk4=hZ3qNMO,ug!3"&UMf9<Qs[j9Kj$^Ibe90?O*)RbG<m\/PJgekO1nj'R,1795oW"f%<HG`)K3W%$d..O %d?d:O$'JC<LS*j"UJ)'=q]KYF]APpC\t$A-SERk#^^klJrV83WmqHAC,0`bLVt1=+?oR#3&%!3DI!\.Z@MT\d>0Uuha$WgZ]3!n& %\bQ)b?/)"rN5*8<Mjh#N:/qtjkR%pQE)sprCqo/Nk54`:LH";#@gL;'%;BkfQ2M27n=.&U]*$-a'o5Bb%3gu3N[joo$Mk2\jB&.* %B@=0iC"AqNhqWe6IWKS4[(ng>0`YC]+>n-$O98s3#@_P(=BZtNL.lD-\p-Tl&F!SB7/eAB4f!67dC:-iCgSIW\38.:(rl";3'/p> %&<3`P]I;j$8_pM1\LSkD=id'[dRJoW<eqY-Zn0/>'>$PRnd+<IG*."F''*Uo;3/A*#`SV=][+ZG&p`q9aG1o6fuX'@a5;AY[W(c_ %Dnl8?k4@apJA?M.ADP*[/f4EBX>7aIOSW;Is)<jp>l#AU7J<&of;4ZE:3L-@A*Dobi/j/;.)<Lo;NHgEm^=q">4UAFlU)H\T0@XI %p&<2p(Z,S`@YQbr!Q)8KV$h[0=[nnm]22a2JN`WLr!b`<8X\]^H[i`bq($>QnL7J&<'YSu4FSKs.iHi0rmhE,5DR`hj4jlQ@7utt %_&i4-@kHIR^*bSh3A$S?R60Ztg]qB^$*\tBca3=>?FnFK5YZ8`p,UrSA7&uX('B!%cpRZN'"%8[YK)&s+,;=efgQYV@j%87$WDH1 %*+lSF7]dn4ChQ@R6q2%nB\4NS4an5BMtsBCHA#*#LgWPRFp\6rgeJ'>Ir*H\".kVa8O/]K5FPHuDZ@[_k+rc>Y/f+K4NHnODf-*c %RRa,>h+*0VW"9g]An<7BJ&(d75&GWfnBpXCh)t,gHJR?l7."s!>ode4h:,.L4"[X>)Hps:WE!`ILV%d,cdjF[+O+q*0.VI>U]9Ng %H'ZQdHpo542mt*=!JnG=lmud^!.-%Pq>fS9LQXC6`ci[Mhi`qG6R23K'hQT64PGMe:Pn/p8:Cb=dPK%l1YH1(</SD`8KC3bY%65. %j?ntP;mTHJEqPu*5Hi>s=]E+YSVZ*TlqYb?)qggQ]p5rjc??gOG&R:q1:Bg-.UTN(c*B3"ef\$U'!#067RJiOe%g3"Q:=HWOq`m2 %oM"iI29F.3jQ6UO575U>&=,*Yb)7)FbsCtim<QMIZ3/tD!U6)c^PfjR89=?_gU#VY4UjrCgP#NE>6bCI>6baGOm:XX8,l_I,F)!= %dMU7d#!3:A:i6Q(lGKQ(LfNm^BX(\Y^sYb8d90!>&Pk6o9Wq"#k,(?=/1l^8S=BA1Gm=1&41:T9#NAL[kI4nd^ELq`61!f:@S9d< %H8^\-1on33SS<L!pB=dQDj;7N2KlL6X.A&tmH,!h&pF#f5L0FT5IY"NgrVe<4K+BiipNsF[)::7[G*qZE-HG<A_$@OV4kl28OS1M %6JQr)8ia'Wh):sE]>8C>:q&1+XUfGfiGC0RN=XS\=Yri0DR(e7U*=o`GSrr5<68!J7?J-]-p3=QZT=3KPF+UfaF#K(WK=%;SI0Ni %e1K\71Q/1f1%%\nU:mXo=AEo_W2VdV75QoVZ@'[?=d.*01/k^lm@GGc_;:>Kk!1?<,*F+1]+K<>O`_>6Yo=n$Kk.HBCeZ=7'qg7O %")$8MCERO!86V4o[\:'hCX3*3;&au>o#*cmW<:H/1j<7bBkKh?\D;+_]<g8Z]"'D+^,aTDO#@bY%Sm%4m:s,\9e2]&;NDLMVhm[@ %`Dmi\n34@r>@ohg5CMn=?.WtrFiqD*K/F4BSB4j_Ub%e<<8(6,Wt/VVK2fDfPhlJ%YmdCIZ@a.2f>$KpRI]E?I2"10Q?%i#p*.IK %?^f5emn`M-0:*LfH4f)]dldA#XT-59ah5i_U)m4#.bU8'+*3J3c]SNsjF'05B8Tsf>o:aI>,AD-ldDBpBPfT[2'=X"ffJ)tBEY=A %N25Ld).uHq$1mIZR9l!Dd;).U(0`^W>9jBG8/ag[0BZ?F(3^7BNHtsM?01B07uq8\Xcqlqg2c;p$1gQ.ma5sYUp+KZ5GL$0>Cmn9 %Wria"\RY3RjH#_`c[8!K6RSf%J/LQiS`;mpa3LtCM1hDL(aU$-b/W3FR>dXeW55Z[8768uMr%UlE8&G.]TqR&Fh[$q]KeEO#&7[u %T,nh$B"GrR?WlZc7R^M][%gIX8a-0u8V:=^#<D959!V9Z`^+lMg+#D1*Q_.3jsWqE,?h\0Rk"OeXfQT0`lt86IqbIo<&PUge[9mM %#u9f038(J3k/Lc?G4S/ietq-!D%@TTmf)@ol1C)2="p<07P@.m1/Nu5;@T9981u/aMCYD5G=3I50Ha6&,%A=o"@rO^kjtL'ZgK)Y %5SJ?$o;gu$[B-RF"IG\?(2);PHWa]]hH-'>V7BrCHAa&Y:_&j<YP't//^$TS>coKb>8(:!eYQ&bTnHZ`))%NOd^!1_hTJ3T5<"#a %Me0[t+ur:'N#T'1PZ6mMcIRl[C@0/Iqmemq]7[Vd"qTJUcrO2>lY4g/dGNVAG>_uuC[tF4lfPVu8\=o;k#R#-,k'ON*^@SMh1.Wl %8K`@b!Lb_@#f%^RHJF*gJ[>L_M@/RlP[cGZJV(`j&Ijs1;CH3#6Iq23"$&Kl$fp8?/XTQ]doB#VF@(gP:EY<M36MZbbm@ZeZA1.@ %J&l2fCj%0tDOTS9'(N0uE6Fs+FSm7/3*XDmOE9bFmFW&4kO'2O3T*?PP([)]LO:DIa9P:,^/jta)aVTQ/'=r.o^)'D:QKh7<W5jm %hK0ge*F,L-1aSkt,t+FDgA5Fq[BO/A^7C:k*P4btgc?PW6p&R\k0E:9)pW<gr2tN*"#^MG8V8H;KqS-[B6"8m/Zc4][\C@5W[P!P %N)Z'^P0I+@`8^Bpd`9"BP#>OX+gqM_9cqsIiBDDZL3%As\RcX6L9m(siBCPW:DLUM>[>VaAs"EBeo$Y0UE\\lFcqo0&38oWX;UBm %\.aF+P/LZBI(4G6J:c-3DTRaLOf_3d;f+a#?#)dJFk8[3iC&K:m;Ca9_N&KjQ:PmrGI;8@XqQ+piHTD_:jcMh]ATG&h#5J\k2F)' %!LqX(7%iMR;#u?Sb`jlKo/'m=<iKN)Co.p*>jU.?*q5-@:M3J"*4fSi/#`)5o-G<M07:9'Et!K[oq1:O9Lk"6\l^YuXQKM=oq.\< %G\ofsZrnmGS#+P@AJHErRjZmJ_Bp!510>f'`C:AmdN1uR2![lu>#!`IT.i+:C!2Vs]<ra>b8YFTMs\-k*R8Be]PcoA-QJ3m7RTm3 %dEW%l3&B8sYC1CQ`kt/*n:Sh?Y)`$)KQ32,e:JMp@>Ig9`)hC\ZGCZE3-(Hp&X+g-4P/B^8:h#7'A:124\^-4UbopD%JoL$Vk))B %L71m#)d7SECGW6helA*A;o<?g;WT_,(p)LQBtK.@0APebU21$5GC,H/>l%p=XO5,s/gos'@5@XJKcU+E*\\m:4eN/7`/Y/"KOKqV %S^WuW&YUUFN3FoX@.J4fJ-lR=0OJ1J\6g<P*5Cg28NgJ\O(NT]TAAUMo,E_b_S<TD&,93j+R!ET-WoA*m3)RLUG@"]]=1F^=E?R? %*iI`*Jsj4u=F3u*EA)@.C\&B3Z4fs<)ca2(/a6_<>Sh'oZSJs2<ioG\ld/7>c6<DB;$)*p<;(((XNI8VdbPT:4:h3s%9UBX3Vc0j %5g-'oP9cn$[P)jm=_5ftj6WCRUX)Iqqh*=$Q[6i=)5OWudrea9l-M"TmE.I)/+,50Gg[d3_$u[$[+`t[a)kT\k_sOKY,hI7es2l= %g.sYn6ZnJo>-*Bf$8%(9VNrH4KF8Wq2M+[-<CP&,@Om6915jk+/#rJ4P]]gMSWl"q$QEnT)a'eSQBQEl5,tV5Cs\G)i1^EZdU47C %bLI$2Q2qW.kPU(,@)1t'L?JJhkPU&V429`Gb4t@g`HrZqH,/SDT4Ykpb@,j6(!Zck!?_:3?T5`.Sq'/&KeXkrfUTB(!Gu/k-Ge[? %Y)bD/map8t`k"74,i@_9-Ls#"@u7To.RM<I8CIut#B+g1f8\R,_sbRKW-7.?iQ1ehAK)dl_'[\6XSq-h3M1@RF2?$;bBQaJfjfDs %oUCD5+0fLOfmbR'H"7NuR.$f4B>7?jEd":N'*bcrC<m"]XUOutPfW`jHc!V_BA]ffANrTIgm>8#*Lj;kGD8,'YMC16DV*rsg&Sg) %MO*B_<p:XjoHm4Ohc*>;^+/'=X+'Mn0$e.&++(e91XNHGkh-C:A"/$u](>hY38cS!HR<1I,j\%1AD_Tjci`%oJBn<]&,>5gr`?>3 %rrf4h^NrQHPf"+eUrrVJ<3!bj>-O'3H(=EPn(Jh2GJ/N,EMq:f^04oMftHiqI;b1aDNDVo>jF0@Xf6Ga_8*SlN&KQs@`b+RS,3B7 %m(XURL3_NtID<RcrRYPWWJ%ToeOR58&m_A_I$mGoa7a%eQe.%hI'7%RrCule0Iu7&p"U-L"DesK`0lXA':j7J$JjL</qn]&"`[nq %%3k5Rp]5G`m"Xr[15aDE"T0VVp]U9gO4EkeYIaa/<I`Vc@lm]Bs3-B"2o2&dk.dnV^L,%=MYKgSh,qRE?,;"r^Yc'cY=eO^iI888 %gHSa+D`.Ei:3F3PQ0Zb>Th98:*S]32^Qss^<@%<W_A^rr$ot0N2Rg4'X5/EYMXun*q)M[o6Ugh9.kSr*Z(X*OWq'Xj-jG@M;N`+( %6+%j87.HmSN^)q[Q<];S'MI%lQ<j<U-Y\&l"'Xopl\Z!3[S^_EZRSDA>J@"<,r<"[D75er(cH5:XhKj5OBXHHorbISOCn28,?ZV# %:`%Q3oBRlt50G\JKAZP+pHFbR7BT:b]%ao7\4*0rY8U`Y4#lY_gM>o"@5hH3&M:M?Q:j6hf5dfAWP8RS\-C9MEGtMp&`.aA?Fp>9 %U;WT+M0"Jt)D:>PZ]ifB]rm!__U\F'-WG[Mm-*]P.K/[-I\$dl*q4Hj^T%=,l,<1DcN??AGi+&OFj7`Kc_4`0p'efI>]t%A>Sh?D %o81L*MtTdr:rS-!G>pfk%FmDj4m`^/Ge;grhG@L`HeKF=j.1PN)le=0:O>Gd`]`1&6hM,3_jhajn`7M0?P"^H*Z.cF70B-=5In7o %%UXKPdo&4S@U?Fi:06<Djsc`\qPU)7O&%]YG1XWWc(3U/eTT(^Ec];$oRKtHF8[afdG/[Ohki+Pm!WM29%dJ1f.QY6YOnTJ4Ik6o %(QR?oFQ?2hrJPpUdHbq8h4\nk3m5q!.Jl'boRZh-0_h1Ep7ieoa3'_77u>is]%qW#qhp`X@mT#?BQV$^.f5LslA^k4^iNRL\VNP$ %>>A<..^s`Hc3c$s3sCniElql@jWg+r3%LKR(J,B/4OcP9M\gF<>n2_?Wt6[]c:R(:a3gm:P0:N0GOR]dLNnmH1F&q)o5S`A7/PYc %(t:NA:b'Y'rDp(7hc0lfcQH8Ea7Fl$Gl(CO]=$/DQPWSq]"6X2C7C+=@m0<^%@h0a>9Rr<"+H=Ei-/)ugE2%5'&C(W2\u;)UGC^7 %iFX?O/;/KX_RNf:ZC0&h&0b[PSL_:XLQLSWcse.dLpZi/G5FQ%HV6F]diJ_IZqME]79cN>DV0uupU;3Sa`Z)!108\>rN<&9HX4,E %[T,Kb08&)f,<pKgm&=de:?OI9ihtQC9QbQbSZ#,_(8jXEPe=EOPnH"OfVkZFdRIT'n2=IOe@EtCV.GXt.j\jbd@W&iW\'!HQc=$0 %$ao8+b-2d';qBOU*iE8InO@)X`^Dn_YM?2WfI_i;?Rle.XBjM-'*;,aBYjgD=8aFKj(2Z>Dk'%?hn465h<:eD[I%hTCCtZ08"\N_ %H#86!gJ-H!m-Vh&(Y>9/Zro>iC`3jj-g\:VmCmMn)a)\1J_9'-9Xi:uc@9_YfRW_PSpeKm?Ti-#9-/$\]m:m'N2$LIKN8uB@dfr/ %.c]+!J0/QlEC\i]&%9X-Q5nF![WNYC"W;Nb/\3b+h-=_3CCOc%RHSg7?VdT)T$C9"RlQP[8mLPST$B^bb7q]F#B_&n][BF=3kfbT %T3fK\ng[+iQYnBqmiLAs8%2a5#@DOlO(@XlW(c`2=h2->qg-q2Pe26uCQu5A-Y@K&Q<Qp^]j,+]<@:K5JlFBiRJ>i(fr5dV7Y.NT %Q$OTF`S4-GEe@INMF=!h,_d`_5ZhK,%?X_J5@D>(I>_>=ksZ#AG!TXOM-oq-.[NS1ab>i^@IVE?=<nqeea[;(LjCn;?A(kY\fl?+ %;YRdTlnp^IaMjF9]PZtF]3^\uk.4p.Q_ZH,HenD?UIPd!qrZf]MqY"'%\E35(<&fGf-GA^T`(.`.qPSZBXWdm4*%H_AH1RgN+$68 %CLML!3,?00<HVFDN3$pA$:dQGe0j[,V6/%m+8i8?eE]q5JU/]8rQ#K9n'm2"F%<\-aArdf;qQYZ47$hQZ&Lr]jjr!VJ#i$UgTe=+ %6\11p=E4IQ[OUpX-HNHaj4-b^(2DO%DTr7YZ]k%78\445rDG$(4V#2)?FkQN-#K3FIQC^3<9CbK\!tHf4KX%d2GCjbF^I13Vo%o1 %q3W!SABaMMPHJEjECY[-8[j0ZBR:e^s*QYgD6=`21IosZcHU%7k8B.6WYNT!B/\%+KX!r)S4\Wp4-jdN1]#Oe)5oCjEUc<c(])/T %'V#irJ2g2V@lO&UO)TJGoE@GcM=KqX7alqi=4AhoJPl/bPm#n-kL>8]<=eA8>-6O7,ikQoa=?;TL9,*:1U*,X)1P/&4t_S*^J\Y= %"cT%5jDR6*WR#VMZ^gkCV`r;'cZ8<7a?dM`o/tr\\H/>9--tG2B5bnu\)c4Ho'@t(&\TL:Z!G\\?-fc]VhTMXm<Xf[HB.B=5]#%n %`lW;Aa`GJDF2l=C`lW;AaVSQZ4M+"Q>p@Vf%A'F[f/IrWDt%#hi46Qfdng"$l5TZUP=PTL'QH`@+'\Eua+O=-;/C*WI]VbF09>'q %p-Q9Tm`L8k3?fBArU<UYQDfAA7MJLs*6lL.Z>\Ml;Jgp0<BFsa]o5X=ICY.d<PAVSY)jWijo%:Xro#lSHtc(E<r;=Pj(8ae=meh? %7qK[e1A3L?DdN%s2*W/9=mkL#-i2u9>@UrG>@%'alH#3@`XJ.J"sa+\ia;_e]`b)H5o.S1'23W89-*JlhgM`J\7U[;C"i^0B0g>e %YS*Og'YG!5qN8BNc@(5gh\(jF)nRn@-qk1b:_r9ojh8huc@(45YHU'MVW)CNc@233>n+Ml?,sJdnEA%p,$![(F5T,>jsB(d2H9_5 %Sr]W[]9dXkFB?N2`Hog=<sW>(@(S]N!s'>EDTMmo9#$^CO$;X"&,MYuLOMAfFso<m@?6.++rY08El-<afNST-qd==cCc9/e8iT4l %oTmA><]F1hH[B1>1$ib3^'&(\6Sf^FH+-odHeVtI4m_QkSH[CM7`=/BBSJogc'$`6&oS;)c$I;DUEJ-]/=)qZ1&J2KBA?]#kL&,9 %OIdDh)_Cle"@dT;M9L:,)l[!-Z:4U,%oKpEhJ'A#lX$VLGdZ;ON5DV)8(00ZpNFU-5-0+62IbB_f58-eMJ_D(>eJp=hYUO3HaOgA %m^mB6eU5"u!&YrN#,i^@VRHmb@K@HEm$6q<T%Q^/Fa\!^<9p"I<TCLZj=9ItT3Z"NH@!W&[0Wr.&Q\53Smf%rY>=\5Nn)]fh!-;g %a^:#+(>h";mJ8rGr?$47d?.HW_"pm..tF/kl420^c+A<]SnpnSrn0$!LKg;Oj6iq*5gMB[nG^'Y.bn]VUVMlghA^Fs^4>aGFMkW[ %r@mEF@GL[-R.K)emX.7CH#=IC^)pt5%5Z."3DLjuUg-jgoT';:%+U&G:16Yb3;\P0@laCHUH7Rd:HVAZR<PKh\[u>9=72ag+STGs %\;)D]Ca-(NM8MA-'kBO$CF;F/G[eb-.3dL$``7)048InXS6p;4F1^@W*,HTVH.%DPlTmPq6ZK_UPa*J)'=ZEe;L39(/`$SND>1fH %06:%#8oq)4CSgB&o.mS+`L2pd^ZU;V/aR<<ms8E/$ThW(_ue?V;MZbK&pAm@&'RA1F-?E-DFn$C->1PRm_5[[P!Q!>+uUF^2<2eA %Z]Os9f!.;,I[XL3e_Etp`PM3GF1$HMk"QIN*@g>`DelVXpB6#;ElC/b?h.Sp`u"Ot::_+a:O[;]ZXNRr)F)bIkKfZj9sYf:qk\-g %+m2/Y3G7H!^f(c'R4N^P1j_:*m8!\Oi6*Jcr(a?Mn[Q8,Hue-"ae6@j4!bqN(@AhHFY"PW0,SYAm\ocep==%aGZLmE)V(kbEbUQr %e""R[E@n;)V]CiW3h!tNp/>d^fZE_@D:0m$GFX(&kMR^5LuT]#EV\aMcu`_MN[NjLdEhE7s2b?Qlud`XDU34TbT!iXDh6MQ\&5Yb %4l@e0i`'+eqFd"3?<a<p*G__B!4PN930lOC]_1e4?"1WV>8MpR&A[fgdWQRDdo5"\UeOdad(iL[FV5pTb%`eFQ"'t"=mbs+eY];] %do8n7FV7%i8h*]m>DXZ=(>Vs_dVKh90KjLnePfJmCM0p!eUj-O72pR]&"Y>DpVt(KXt8Q[>@^NK(;DY0Pg6D)m_SCkfUbPG65Pn* %70"TQcC&?H9q"Zi^>^_6KgQW"`10=DCqGH.3p4REmNI2-3HC.,LnJgLSDtY7kaWm\\E!;C0oR2t;!kPo6H^5I_%2A-G%/-G&J"`C %BOH%63:Oh[J_g:`^^l>-#0s#QSEej,^SUe)7itgg"GbcUDG1EGEC3]]HG(jLKP8enqDC@\k!GrR?p6:9E3^QZ4^mX=]HtBkI@]Zj %<"HJ7`L:F5I:I5lS2nZZMbMs`l3(*_=n@na;ZbFMGse(IbQEcrV,WB0b*Y++nMmXm9K*h&81Z.,$.Wm<*e$Z8(fE(hfbJqrXMnh` %+Z-M9aW(C;a6:]$ic9j]FG$MI8f=CS0_4q".<cO48!`W:JZ"mPm.lOZ`TP>!+?6Q9fnhKMJcO,GL4)X7NcW3ZQO9ZMCH*Lh4T*[K %9Ag@&n&<L2Fs/gUHKl[DN%nY9\NDjK;')Jk_2_5)3ro/I.-b`n9?c]:#iW&nhnA<+cZ-m5S:O(;/5KE7(i\/<WcbZ%olBK'"+BZ[ %O7LHh4f=h=@L*G9IcXVa4\+8/;7#_P%#EQ^]fg@?(j3=F&3u^$i"u&qm@2l6R@X5jkV>k'G2fCj-HPQ/#KG.Id&*dY40O:\c@'(` %pQBpVFPcW\*pre`<8*=%oulRWSUan<%5*kCm@%j01C9j*N`Hc\;%,l:'Lbh45Z.Gii=e4,$_D0@]@Pb7'ff:Pm)@3S):dM3f^-T% %]f7\\3qi]-18_$le4:Z?U6-ZPG!ohm,.S,gKofu(O@G(XJEf+_K]LWSR*$UM,oejsE[sYHE;WNZV^9BOE$Whr7$OB=HgN3iQ.(dO %2-?tGc1%ckE6I9TH(r+n8L9Ds6a"qio$GP+lD@k[c,i21rTmM+Y]dA)g^`iI1!QEIs-1bkm;RPd"0.n'/c'/,7r/+?W6%Bk/Ln52 %7Sb@.C6ML/<+o:&-(<i3C;3e\cVnA`eE,8("NDO?:V5;>:CDg5D.:!?jR,n1Q4R"?4[ONIB'i2cg9nnq&f#FRL*eWH.5>:P_utog %&ecQ<91kY?3%9D&,3>U1NL&gkJchRc=e/!pdB)G$p%d];b+)9bVJ30/<QhFDFrO-*?.GKhlK<,t3W&!:4O4,!<.JraO/Ha=".nk* %"t`DW-t=J>S&i66-YOQ:`\B3-3>58MAlKbD-<jW,k_WN_1*;Eu*U--;c"upo9MsT:-@_8Sm*h1LUFAH.>U(biGb\5LO04G+,nH4D %BT$(,Q\/;K]%PGs4USNh12b/HoiknS[CF]:1ku/)\"r1N+uGCVZ0`4&o>oGLO#su:4]H;lm@L9T<=RSo8K^Vl)@gHF$gBSuO+9&R %Z3X)IPr'GW)hDg`/:QB;keRT8V-Y=95Uq=A!pKeb#F73./20Y'EhM]U>0>AjhH@s+^AWXkJC.!GgW@.`$YL9AFuuM$[%rs8.R=[4 %q3=PB,bNu"5YVh>1RZ].X4jBBRTd+r<iN&oU?ch:*@JmM'q.nJBSohFE3.Mf)W>ZV#AHduT;adKg^\2nNKYI)%IlN,%aa6Y@WorU %\Q)Y.o3+95go3N0Ch^Yp@t4:%p/a+Zo:"!C3qeUV5GJ5T?-N9lcBf3+!$,PQQ%!G]7-EWb&!q!jU$oYnP<=t9J@MD5A\.M,c2A=A %5KOSP:!8!8SDgKF?-<t5@3q5)*V@97p'd6Ws"RlFN:p`Q%Qu?ZUO2DP)'A`9lM!O7W3m(].iX3_oi5o&XV@.<q:0:FVY'J,':"@F %o+l#R#r3T-;U$3c;mD\F>D$V@jZ$e5pGJ^M`TT':&GoYY6\`.Q_/.Cb97[h5U<W=-=l)6cH8hiMX*egs4p%G`j_a0#lZ+Q(qnAYl %,n2X\8UJ^'T#.b^me_>$G^0dq8hWDqF?Gug^7IG.#*(=aC\DJfgSu8AqE4'8`4aV5LXS%Y6Jenp4;9k($!"@N>6udL9NPI\Imn#: %ZRaUP''kJ\9/N;s7-m#t"Ec-j]F6"<.&_inMK@JWCj@E</X'l\8lo;_P%N2hq;`[G8fFli%l$`0i&r'0H>O7m)HEegU0:l/j#Jtb %;eoj*E%<Z,[oRhFTf(L]5o<l5`it\%oP?`d<,D\Q'5I8WD9LqMis<(l8R(nN;/`b9h*hZ3p0e;VTL.H@<\UnGaRIl*+U_f,_AK^X %C!4KRdI;G"jq3s#KUFP0A\@e,lK4/Z[L>+"aErZ"<)><CR=&_)\*8"8_r\TX^jDmJ"^"AbIlC%IOR!c<C7_\""`.2`a(YGSTAs*B %0V:VV/1C`TWY%"bbf=IGSGN;I^+AIJL)pMrKJQdU9F7QP\J?Xr[)X1.p`.%!_[`?WhIg6)lui$+X+&5ImdL!#cESnIVNGr`_.7Cb %Wn%hMmK\O?JLK7aZq^@+Y7us*"VsjWcS.,@)\,m/);tBf4[p8MK1)#=GCU[Q@hS/E@itE7i)GX=;'Nt=NtEcfis$S"*5;m"^Wc;M %EB5SKDt3R1ccLB*KlB5,?s*"<\`7<enMk@AX^I?i^!M@CG13[I[Fn7V$8A!cPM*'/*@k/;:_q>YZg!@Ci2tB9Lc(<0-IbS`H]oB^ %BI1t;QAWW6M<HaYjt@07X_?LtR+*;V-?R6b26C/BO'=2NMZfu5cB_M$R*kac@(0`.Z\'i=QjR.LChX@MAdH"gII6UN[+1YJeeQBM %'-ZJ[2[.B1=0_\WKUPoXch<Nl+a[k3s2OHgj.*jBk%'('Hgm"Q.LP$r2#OSPW_ZS*p-c&YQaQDf'la38#Mehhgdl6\UrXr1@d&0g %\>X0dA'K@>7B/KU6j6)FXGELRpE([N/m]JO>>4<eHOu:3`E!>&SI"C+'Q+4]T2aIT&K^%&OJ!aED?Ps_3QHoZocSAU"4rDQT"Nrh %Hb72Z1GEHm>PSW7*eKYi@-%sP)#i?oRK'Vt5&XV=c#peN,OOc,>D5SXUN'3o(F,L"gkl+p]"+^Xl>Lm^,B_*bh7BdLGJf,NX>X4^ %3nNZB(!`E"oV?9's*nYrk[pmd+0<n`<\2^7FT%b[<*%bVqs,m3>?:Lr*P:EOkDm=6J3B:(c%nM"EAn&(>>\EM*9o(R,^2+6Mr]js %b9"4"*"m,eQ!Kq,`^tJJC[4s\Fk6IK%<*^emGoAdGAr51mHBUps/*,+^;%2fW'%5n?#]c5jrX-`o70'RJ@i35f$tu@H4bQTjZ8f- %dOABLe@nmo?W-Dt/g8bcRI_cm/GEjkmRYp^=H9mgQ;o[!0)82hcWm)nB&m>@1=?#=L<$&K*el2I_0N7)29f(K>W'W)Z^eGFbee*5 %?9/1nk@1Qqp!fZ7a^$DaX/gF*<hWcR:#!3+EI4Hk1J58(DZ#\WLNf'N9liD3':IbP2qQqFn.b9["0V'?Ei6*pH?f<k*:UVF&^H]3 %-a__*:hq4!HDkD4RrEqbqYj3BMPT&PQALK$H8\0c6[klmSCWsc[8,Is8(FgsCjQ8Ma#(7-,1kCp+bm]F6XPeG0+k]1[kYEnfZ"K6 %d:Esb=4chE8_7jQF7PCJMrr<&h&UQSHgMe#6f3BY<?Fi]o%,aO^"&IB9P,ZOm(3EJ/6fYr.^ptjZ'pQH.(`3IP>ek]c<rUnF\6u> %oW.LWb4F?/,NDPR+o$)q<iW`,j<"Q*;4JPCG#1J^`MeDnVsp2>7"Q*(gUO__fYc]lh!$:-]dK.;2b9s&dYOe<-o$&u-%p,;fQj$U %\6d_iUgisLq'DmAe!4q$`"<c7$"$[$JUZ[d*mi;1:?)@2IO)bUHh9LGIT40o^CugCNScU'*buYfeY695B]4`,hbLq51]?UO4mnX( %5.6h.AN]`O]jo[Yn[De@$3dU$Am4*6[(cH>en)@hn^o_,V_4udrg;*$U3?BsY-<=efZhDLVRB`8cAgQRfFim=9C;Z#6]YLmC:1=u %[&%/P#@I90ar#jG:NK2Um5j"JImBqt.4(,+aWEcCj^kmIMp]4erW>3-SO03Q7(R.;3d^YSrIC"$+5jc0@U9*K-.o"MF]Uft5LS,H %IeFG9UM%21qKWtHK%\pFoZ3XX)/t#kdEp\55<leDDSR8'"aQ+&"P.;"7-F2B/)?I1B'E>H2]7_4nLHUXQ`[4Q:omc]8N7pO86#-L %lW2"u3Ega'>fmY&mc8>1.ED;%(%j+aCE-]JUtDj')%/!7^/DZa.t!u'[WM6RcW,@me^$EZe9^NX+"]E]e]ok''80@;d'7'D=9NVD %L:$t;f0p/BZ%K0<Lj*%o<7UFjZmP2j,M#"p7GQaJr?N+tY9lbRV.8TIPi)R!OOOtl-3;Z;9Na9X&C]%JabN%"'o"D3R/)ia@S0O4 %Bs&ECEc9:EEL",Y<GH.^_&@Go%r3mi]GG4Gg5+;)R_.(`d^ePk78M1q>b8F<54<<ZZ=*eS^3E)WaFus:q)4"!*]S(^3m8kShT="P %[hPQb,P0If-^sR0S^^GK5IkQDe*_?P\^dlCBqWM9RY7`AKNa_H=O;[Qco0`rE@8XDqFLKE[%fYUDY5O%eGFH^\!oJOmLHtEKC;(? %,;OI1Kb(@9ncPZC0GL<B>59^.H6i/QR'X/"Y?BaYI&$bD>Q*8))74A7f6S[<gdXkp&V8>t^EM$L"Sifda+99UX+l&uT^LC1qs"F* %Wmua'FqCkDWV]Q<]j[MT8MYI[/Frb$lBc;'M7,_Z'OR`E+PeP&q*iGB7:15dfH0O@P[sBB8uj82K*@*JSnB[+=--MF?0fI^TAs>5 %oB,c9YB_Cu0"X,h-*2`5mun43dQoN.F;I6KN6lUp`eso-dd-,oCmMZ;i9$$2a7HjTL:)_0ZquSuMi=<UD!k>QcTTTeh!ob%^/$?+ %ktZOhDnBE+XTrt?JhH<jD>>sa^<k7H](Lo_4JV>?MmRPkhUB\]l?:s]pH)AN2"ptllrhRrmd]H@pBQ(:h2>rh05dWS7J%M/b,,$3 %O<7gibTZad`D>Mp=Tu<>"lWMtrB%iFW"88:,kR^b>1K9GB2SICQeu0#\W0mbV.Q;'kkFa',Y[+'&fA7.X34+KDW5\>7Bq_\litj] %\2DuXK,Nu`/3Ct>?)jaeG!-qj[QGuBY0-1C<S<=R=R>bESiB.4YX&"-b'(8)q`6jH\K_8A^::_O*U]gCn@j^&Tc-l<e<B+C&pLk2 %<pW_.DY9=ZY_dYW$D=B!Ra\"fOa`8/K>DZf:)97)dug5blsBWpZP.r=?Otm)'eSS$Qgr:#/P7NNBt63r0<QhT3Epa@mm?(SZ,p:b %bpt<UEu7P]3jBa*.qCCJeB!a:mu8;E/O"@5RM6jQ;<N:[ISf<RFo%(umuAmhVo-N8-J>os&t=6NcFTn[0m1*pPrtd(%nNAL>(&=T %CU>S.>kdi%mct."[B3J$fIHQ&#Y;9p*l#LbYL@^N/4kRff2^coH/n[^.Xeu:>QgC7C@nVYoX29&f0eB?]62rUA+fXm<p(E[o=7S4 %^=/ACp8`[d7JY^V2>O\\aGD["m^rmSkEjsc<a+r>.pR::5uIC?MPP_2".idg.kHBJ4/Dp++k+^l!SX=A-2ZLZ>%^(i2\@$4G0AF# %3-YJ8MjplfAl@ssV^uG=BGV/>QO[dZiN1WAUQ9)OaML#s0@VnE,8lYSg,6k8G3.:SkDWH&2g/DC1Pq0"d!%N^G]f):IAt%qB(igr %ah;&Ob\DFUA,`lI?LL;EXCH=+`Gm9VAbROgqj(]\#Q=FY5,1qMIp\A)ld7eXg;VorF40'&]=ml\n*Aqen(QUgS^$TC7nKh9>p;^U %='XVjGOh?U]f+AE>N_8b'&)loP%A-0D8oRI\a&R^A5M)47PtANloY7ADo!KtWSTW2f7ehE.hgE&%?+-c>tBKM`;k_??cs[B=UC`G %/oA(9hHH1dK0dSh5Xf?A#hF9Vfq%Iu*Y0>Chi1Q5^cR!!CB-=<p5^)Eo5MX[o"aFu/DIG_S293SN",hps5r?shgTnKiUbe7hnF?_ %n\>&6mPj%^?TeAM\$%uFIe2e+0ZL`6huDY%IKb`kr-FLsAR+ABiTJC7"b>_P0b-*Ke9%*5"79`.s+$<R3E,gA5LZh9&,c$K"7T)& %iSrH*s7X4)Mf/n#0>E/>X9X074C&1mi6*/iD^1o=]a*jFr]i.7#Hf/*dS?Z!JrBXOq!ZLMPl3c<M\gkps+YQ^.ZEf=j]!EuH\"ar %nEposn&'1.i@WD$@aNpN0)gZJ@h??_B)A`\-s_F"GG2q"$W_9<(V#&%ptpS5qXjUGmH`):5CRkMl-C0\"OPJ%5USO*5#8r'phsMf %L9:FJioc*7ea(gO]`6g.c`aSE0/!6"kk]eFs)8;',s[u!5O!G#GcOiK=dO@NB3=;Fg'[0.h4EY`gXna5bV:T1%g-YdBZ?A>2YeQ7 %N5E6sQXFCPBn?N7QO=eHM`LT+pu?a!?qO?moI1":pg68Wa4R0KZ;uocd2.HA?Nj*qe6fQ!6!QQ\T]%*4r[3f)hs4?QU/K"P9#,,0 %lB3rP-"!p1*s@HcI:^]h^@LMcAtJpsY9f,u;^s1,0H!:jR,oXFr>r0iV9:;f5GClC0,$$kL,\V`(c:mW(f0HY:Tul/pi0a*)/n2[ %P<H#6$qF_LSCXO=YU^<aqi`Z")Q-Ma\P/F.V!=J''#H<;@qbia9>KU4bR*pKGs]@[iV>07Ji&]2j>D?0Wb$8/&(hGT_r[Whb?AAJ %*DI,@WWK?^\QUX`E4Mo$);marp,e@)]UnPP?([94nMW!@BS&GaTY/)40E.4`i:3,G?pL/XnF[t1/1.gp`91).5k>2&1*Q\)?4#Yo %6c<4';Q?!?V$'m,^ip;+acGE?q*9_.'"TFJ((&L>!m=U5U]CI,&d2_f;"@^V,$tpa:aIDQ>Sqtl%0YTrZ#1UIPQ>7pFTK6E_!f>8 %=^d2a+Q&b0!*0Q*>(4\GYZckHRgmDLqfbqPYJ.?ID$gPM'HtaX,CN4m0tm;`&AJLT"K6@?$2:]T>VE`.0O4^lfR\7>on#R!@C(%i %rDh^m%k03MROitt2G1NuJq2[h"Mg)_N3&AkfZ%'B(I%Qi-Tc1NVua+,G)m1qca%d"9UBfiYq)VC3[#?RJp0E\<`Y:h!.m171S#86 %!]s'a7BAc\hR:Le$mZckrC^+^)MAk.fZH&H^0e[M_]U5A'Snq2J4u3"'4?A#RrMCJW6hZ,^:d;CHDkL\Xd@6O!CS7+!t3s%)>WlK %&IK;pX8"/I,X?^lja+179&6Zu'X;BVdAZ5b5bh83#C;[Aquq3Qj+oBTGg#[<0Z4^V`q^`Wl3.ci%qm^FLZ!OqkgPG5$L=N"HVT5* %*W%4I5tpq;3PC<Jb329E*Vd:_H8_sf.@8YkIhX65GV\c57?iAB/#F/==&euE(d,)sO6!G'mr5dG%(WY;N.a-4C`>eS&lj8G*ajcc %*XG8Yl<*or!V>:34_G#n>=a/Tc>LC@S6]RGfl<N"qY#jgYd%6D(_#OnieK:*S?S&oi9D34-P1c[+mVT<6$[cBe3O;mZ#lL'ADs(= %3kd6LO&C]B^GF@+pc6-i#EGhN*.Q<*4*#CMcp/_r^s2te;h]-iD@UG?KCE?o>^u3f\\WraYIF4!:(Em<9(<!.2]-OB,^g=G7:jiC %mrhqu-XLcX"(HJ-8]_87>K9\P-Ci[W&CtZ9l1ha47/Q11Fc=k[r#!Ws"K%Po>C54D0O`cDjqi)Q]Gkf"F#Z\@SP_Ak^2\#j"S=Ab %6O!P;l=K&2+SdT[9+71QOT;I:Y&1pt/5]iuZZQgj`qlR(A*\6J4u?X.fD8>b]@IKoI]X!Qm!??i*OkI9e/,FU!7Ee'&a@XN`8J>u %P6>FL"3ln3nHI9Rd+A>O3[$SQ!nt%i8`6j$-,2L=N9SmQPQ7+!>`4&'^oASrK1m^;R<s85@E!:bQ)Hs\dL68`bWJH.A!Y4U$l3K5 %]]W2oEFqL;h#5O@"fs'b?%U<FC8B"*#nH_3=H:O_(Ogmtj@-p0k8!BNn-d;X^b+7!_Z8VT*`**?*8ka?:_NoX55L(A^Vrur.O#Nh %!6n&*JWBS\J&Q1Z:f%/!`*\iVrGquD&dab6S/\[sr70+27"e2uHseHiQAZR0#rTa2=I4k\%%r&%BI[4=B+t_^4mE)";h(]HT[GeG %KAi7GTT,VE&;,LUO$FZV=!@r!&sn8*mnj,9hZ6gJ.e>lJIGdX@q-WUI\I'<qT1fK3p/Ua4!I=<]_C#OMJ!JlS8Zr,Z(F35`S^gR9 %D!R9>%kG%BoQPS?TF&L[S@=/TZA\h&F$c]jh]onBc678V4u-+Y@f2T8KBt6Vfd]N2\.bN)Z<Sk5ptCP3_NCLaPlRc@jC'P=8J[Q2 %iHLCL7%kd9"bCD44K=49n9^Ti-s=p^Sn@lu2%p5k/;8@kQilM>)[,/ariT2;B+0O)2j7g>`W-teF0aE=YHN4\1_To34RkAkb5*R^ %HNN/[KK8j5J<;Nt9*?c(.<b#'HW"=6jtj)q1JiG(j.ZD#PC'\1Ts7534j$kT=8jW?hPSg8I%+,3nT@l)nT@ks%EV,*IE=ahHC>@< %*)7:_A-'s`**)35"F\G0\iQi%&fqoA'aCa&(AKS[qB0c/;k+)uNsjp/AdRSNhg=@$0VSMXL.+MLF:h^ol#8cn5St+WjT4lJ!_@6' %!.U%m%fcT$,K^-sWcO_`E<4^UW;s*pC]G`$ngl16W2T1&7$PdQ)PNtU1BL`MPY\CpXu,u4PkO-d@"Q_?$taaf7nT`8TE.)s?pNZU %S#ni;+eY-[g1S_D$mt&J!oeL$:."AGofs;BE<OeXVT(Fm4(9YHNM+%1UtT3Cc#j;cp%ji3*S<K]Mp>6k=FJAR@`/AV(I[))i!9Nd %Q@M$(7kIM^!oV7TJj[it&;O.eN%)R2GdWhLr/,TkKRkSFJY[lI@DI.4$^G]8rOo,C"r".IK*]lV(NjO[kFt+MWlc.MF*bQ.hlMd1 %/X::0c.Y=geZQGfr$A5RN#n<VP]q)U]YKAs^nT[$OA[9+".n;17FUf]HA"(99FFR2'@<`+_cADU/05%bR"m=%9DN;W5T\HBAIn&1 %K#oZZlqf?3!6XY*A5FY8!X9a.ohlS;L^0^XRL;Xe]aG,,l@AbL^IOT`HP[7++d)8n/g+7mU4@k(8:fn)Ju;I`0Fs9C4ue)"O8=>k %%eVQ1k5Uh]s0EgG5H"i6FPs2!B.dZA=8rd2kdV'#*rncUMVLGkHVil9rfXs@N5YOui,*a!Y.A`kofO)lE%:^0FT0'BA!)t5br.f9 %q(p#`-kNn$7JirC>8CI43994b;8D,hBt_Hme&G78]PVTfH,T@?Rf`qUfsH_72?aL!T[lbKD<%_3m72:!+ZdX^7L'LImKlGrq`[.7 %.8t*O&HL;e\D,s@5p2%hk%6mZqJ=[u,JOb\+75gE*KSN!*C/dHpjGsrQpPY=+4AH]*Gg0O!=XFLek8/,BETs$@k4cJV/uQb1<?V2 %>o\)LkV\nYW1W(1iV;XtLt_G>"&WRBndi.is![5$VpobuSPmcrbSMS<6RVP*YR\'-pRFSk%*CQZ^S!,Dh$ZC';"'"Q`4;O'6CeKI %cVVZ5ndPE/iu&%7StXG`Sn4jA6"0%`&8%TLKoTN=CI(5N=\s"0SqWb=W+SDAKmFN!<N'Q(k7m2a&4W@R"m-K`<p1ET\eUH*W67HZ %K`0bI$%iPJ=E!C*h$Q<'0UP[[2<QLS=-J-[+4MlMIDfu1A*EA%\Mfi%F<*`*^'3\BS3c=II<;VQ`p.o"9\2VW'bmN=5qVHG("<NH %1BfYc.o/u/^6!]LolhBAh#RRTDh7H]rOo,:$<(hMD@%KXk.Bi%JN5\n+813j-SRJN`sBnU,+Ln76lEged<&mtak^uZl0X7E,^T*@ %_G^jBjm_Min,K'@=I-r^rPHD5_>jMr:[SI$6eppTe1&A,^'GAr$'=PBO:qr^$_K]c_\B?cr,Mq8!p>2+Y`5jlCQEsa(j!i@Rc/d? %I8Gi^(bPfm$'c&]?N:;5%MI.-$XZ1U:M>uenN7)I!(0iN"B;;4j#'N8@dLp9jOMb"Jqn./48p*YQ6<>:lWBIcmeB<=3$Xc?PLdF[ %9ZYWZ36QcujGU1sfQTZ=T*At]ii:Pm`sLs-^)goJTs>08FndHRqrdM@]=r-]ZnHl1\#M?A@Jt>WRuP"&^N]_=lG_)!EUb^^'E1GQ %$0XM0k'\XN:lM:V9kZfKZV`ZJJf\h;L3\=^oTorsrsA7:KI$1s"5A9=:Mh9IP[`mdDWZ0$+QV\#=F@be4ODgiL0#o,^$2c^d8-uk %\L].:@*!l%BI*d9#_5Ih:kOLool:7/FcF^od&T_bo%A(p-pD"**l5H8p(SZ(YmCY]JrkM*:MBeck'@G*nNa2le=I3WN7Lq#+3HJN %(eH'm=!dJAnGn)V$cNOi(Qc<BJacf"$8CGU+E0e.')5IoiQ;6F,t.#(i8kSM<j46M;FY'u<]I@5c&7hp/J_KGo"kL%iu"R="P:gH %T*p(P9G*:GZZ2.T-?AY9X2l?5"6:@[/-,r?'@27`bCu[1BXSf"39[HU]80"*KPaW#VT#I>\0gY*bd[e.7s84O(U0P<a=_okZp&q: %Cab]+5R-.399c9M,3sl%o&?M7N.s_i-P.K$Y=Ltc6q,nWN&W)dnc5UUHC>\p"bTAX."5MA@)dZs0MFSE%7$ON"/)Xth&&8LGn1.Y %BR:DG`\](EOrt,tTQd'efDtE_M)U&Lcj5<HKY29]Jf[ko/f9IE(ml(ehXbX4o*&tJ$qta3$s_pm'So^$J;Jn!F:%#!Ap2Ja*fsgE %L`HV\4CIeXinYgQ".t_V)\V@*<a1+YVbO(b@^WD=>jPq9#o$UjAE;om(5ah6B9EM'Sk2\t*?g:<]r][>e&t=+R:oA],S@,.,m@I< %dmO=1,mt9,Nn6Z#e)aJ#;=Ho!Jcl=4>6Z^mqM7a:dK,YeEpIY&CuQ/fW@9HY*ruO0S`5UeDfg`#`"W_T3=?Q(V$)K`I_uj+D6q/e %d8o1`'2o+NL!5``d#]e7bbuO*&B)1SF<>"mn=BJ>oW?ej?lg"W;c$k"+=sB"&A:hH_X%bZ=el.jd0$#ScDo6B`kO0jIK:'.)?BVc %=<XRC=KO\m$^3+-)J@a!1rnAP?cs5c)Fju&I_rj3hBNFO>@q"=cn:N25[NgQ0I>V-q.#+fdf<&P[O^iN4s8'H?afG*815!u'H5qS %(VlWG3U+h0?hi8"a4bD)/e7(]?tu3`,7adM"\!C%Q!_Zt'$pXBWgT+kP=GXN1\6GN[Q+XM"tG3"NC#``q9YLuc4fRGY%I73he5ZS %P^G)#+L6>(?LJtsG:RrrA=mdFH7Ar2PcmVdIXmMK7pUeL:/]MIo$"j&7Hf45JVpEC]lT;8BeLqS88*\ZMUpTF"Oash"klBfmEm0: %iV>Y+n$`]'"&JG"6dRQ5&M(e<AicV:/Q<N,[iOgH#K*<sN+"m(IIJr-*r,MHc/uE_P)/m[3Ae!n^$K-O2G2[Ul99G0@1U",c)4'E %s-JVgq26pemm9MAc&Y-G]YW;Rc>G?pmm9K+c!Q'sH%VYlgtZ@NhM$p`R"'E]$t$*H!n/]l6r4G],MQKX'HM:5$7f!Cb8!!e^`$cW %\j;@,D30bMKt=,!3^Z4<*;]%n9jRrGZ=)Yr!i$PLYe:)Y=XAuV"CTRI`$)$,I</_*e/:^Ih3Xn@bUVG=ZLeW8%^Ic#25J$fcn^`F %P&!sX+8^AV#aj9h:I&q^Yc<LkBi_@Ti[oR]TYk[mGmlcd<$:(f<"I&Mc3!<@A1Sn3FIpsuI>]WnAhVA.=0[E&b3jlX\kJDXKU2ap %g#d9s-J7d`aRVfZH"N_JgI3Xp4>)6!/f9HZ$m_#:"/hps:p:tdTU+"1@-NM+Qo,i`_Ff%nTI@%iMB@t&BS;+5]Rr\bZ4]pJ[KqDr %!h;^NKF(?D@KV]1_#o4D/h;R!P=-jkVoj_oN:ND?_nm%3`=pH\5E(c2H!C?U[#7"K]adk+<+#u/JQ4)K4q&`2`Vc0k/G9NnmkPI' %U_-]`8m.6c;UlGRMgPMH%C1]goK"E.#a"3Q\Io(ckjtCR9L@E8TB?UlHI]lY)?<@KAg$C/CnRJPGSqX!TnIujo$2d<*./?+#tZ]X %(h9EF!(Q5hbZ3:=L*1+^Y7$6sJ^JAgldt]B"#*DGAkOJ4CDe7l,,^hqgN;4M-FJh4erKgPnU#At''h+?_PSLPi$=\Ci"4u(854O^ %?lt!EGDWC[!Kc=9G_jEr56)?XW-Ej3gTYC>)\;8>E'WV&NIfqW+;%r]/nCls#r&bsE6,U*e'&"?GZgSZKBL<X1SaBnFu&@W#55=D %rp\=+d6eePIMa"OAm!F>ob4''+XpAS.>gt&&cm'DFN'BP$]n)"3.mIM!0UlGI6CB!E53R5n74=/7&:ogdDsQL%X;Wj."peFN3hCM %O;9-@`CsM:VCD)`.89_Q1:b_g#HSSKkjUD\h.lN]'mEM6bf_U?0^-n9IaS7=^G/GlW\siG7IgG'D&!.=^WsEp#-9!6fsN++kd9!Y %OU\M(R^ub1:9"G.\s1X^(95J-65chb-*]is3_:TZJ`NSm:CYDMLfNi,.WSF/P&ZtFl-t=LK.4pRqNSr[N&ULq=*[pa*'djGQsD=# %#@I$,A:lbnNQD\,ZtIPq]no;h!,FYL6MhNlP:O&1'+_<<lms4f(0_?[k]t!kkUuj7qN<-i3/rk)7rAWfYXMqbOS-70V;ZWD9q8+i %mJ0;pa?B9#H4ER0.NO$QNqjV02+XTU0gUQ]1'$r,bH!=2;iR$plNAV:i!%dOQFa/a0Z%E;hiYckYt7c*66l+2,e"A(f47@10FdqQ %#=qLMYDjBanl!8faiRulk0_>pC=ST;AfE[u`%pZ;^i=!U=loBN13'g\8!mG@CKBuHQ8W_R!RKA!m7V_!66B`PED%&.(-C@\*gNHj %LMd[k]-J-RJ:A:S?r9K(Y<"@%9+JtlcmeTb^g&IE^a\LZ.P!H956.bS)=eI)\2=LON+>t:60@,T.G@^7(Bspu/BV&E)N!C8@lH+H %EfRK(SCX@qDR")9]j76`ClME&aM>gLkHO0OZ8W!Ap80#Ke8mFP4V`NWG/F>-"cB(Qa=c]W%E0^-[-siA6_8?4`u%:[ZaPYu9T*e6 %5\@.9`bCI6X[*2IM?\tTJk49+7>7_OfDlTnc&4!U"f>m_DT]`t#?$M>bG:Z.H,fd##m`;:\W1&bP>7$]MT9L1<TG;`?3c!$PpK6] %(LoD:MK;oa!SnMWf:0Dk492sgGRZ@JT?iM;(g86Yd5.1UTO7=k?I+V'3V\:UL9ZaE>WQ2b+uP+`"JofHm`GWFW[MAO33T!YW,^Ld %5qh3P%%L=HpBr>toB0QeO8shqaf)F5!X,g11[sC1,d<>e#9o4TDaH>RK`r.J;FAfr2?+W:I74Yf/\M.tSrb3!*faFsKOFI0)^$\' %##H,:%iqo%]nM#3jIr)eFYg(;JU0&S2_^!%LC"9>!I\8g\EF:<NaW^!h_,.,VC7k`X<Zf!8k<NVLp3]$;rn$$2OV]iAFa!0L).@f %UN<Gm5hX(%!7+)f!5\mD``csI']UOU7?;FH\qtJ`)JbPWm&d&cLaWbK-)r4r:l3`UcUFgfCAg+We?9B,gs?%UCaL'GXDOZ#@Q9`# %88fU]alN';d]F!U(+%%d5Pe9oSdu'04':_<=l!u,$4NHc`0;U*,#k)nEfLtR4Zf?1Erk<H:jNODBXRqn$+N:G<s[rO8-I3h89ih; %E>rpgV$dnF*LG>[:;*_<,r>@7G6F:cI;LTRJ4a-3XCQhapB<RoQdChXK-^Mr-Vc@P#:QG_+`^BD#[]nu)C_*j!/$h%Eied2[F6;" %(fUK;EXDRt?LTYRb0jt!HI>+Dd2@2#/\:=DS<GaaYZW]CEl@>?W[oGf\-Mj(p#$Pk;$\#eW#/Hj&p+7(20+64)5Su4`&?>o5d"/( %N(OUe5RTkXY#sB/Ma7!t'8^7i7A/8('uM#6!2#4P11/((!j<Bg7=;D.ho=V!asHiYjUuLod][4EKE3pl-M&!-:jj;XVV.Q5lYI?9 %7H50#U;2reHseX\R+cLU[0Qs.5T=_eQ$Fh:'!$&6W\FugP_HipZRHVpk[sad7ohng`"3bG0cn2B)j3Z.(e*,3$"-V)*ZtGO$Yc+r %`'@s$mR7Oa(u7@@Tl#`$_::`YAfW"`%$O(^"<c:&<?tI#'p)CAS_))5/l9!hHnEo?[2Goj>%W[+_&:IOoPB?!;5^MDL+)!dS9:u: %(>f>;PN&Y^4T_L2)aP1LK:e6*C5ke2/dr.A.U5h?!!DCu;QblXiXAdZ"t&C+`<Jks[pp4s!)=<lj!!SY1hArTYA8YDY]*U>'e]_1 %7.)UBeR5$SX!!Z?oZE^a9rq:6%Amf,@BLbh0Ek%H/BJ(V7[*:[NX%fjA+K8dIYs5H?$.NuFI'Tg8k$N?TOL_Q*Ili<V1K/Gae$^A %?^6#=PrheB]+0A&SW;GM:LsqoLSRO2(/l$`apa<KP');olf(miOX<$ij&]5[1R`k8aO$NVJl8G3>Q\_L.VGgGMl@Q5EJl7g!FqDE %TTBNhl3R$u=I\Z&7FS(?51-l7m<$5qH8bgk%,+cf6(%?r;/QIk!cLc/5Gp8O<HE*o5lcH_*=r7Z!TpAa0GFa?`W<)6CJeQsluE*' %/64blMb[:UEnEB,aoF+k-MsK;UX(;t+uL1-5Varc]M[PH<?O6J4#D"a^,1<M6;>ZK3b.*fF)A5%jSWm%S(W>=:gZ[j*!dtTNuK/f %eW,2q)(]UhT`O-u'lOC0H@)/C@mEa./;)&EF\7PH.[)&92>"'2<0,:afJ!n9Z#H7Y@XL9<``7IiiDd]-JX*n]b36(pABU2e^p$R' %'>5g>Au$iA`\&t8Ga\3AR+,U==&d1)`0!,6MeO+W%RuD?<k?3B-NL-VY,SjsBY:8Z9u=5#?Hk`Dlfu__0*ZM&ek&Y'PCsJunk%f7 %8-3&gI*W0jU;^LqI:<."%fdO"Co^jp3#EkJm0!i,Zj!+K_2sVV6li*<-uHCD2=sRW$m@!P!4,f5U5$*GX913q$fe`j"=DZ-K/gLD %\BJ^0Yeu/kZf'MC\#tFKI2P"%r?\Ku)UY'W"Q*Xmq-11^dfZhRb=uT+R<<.F=:Q=0>0`!0OF7ki([nF#^p'm0asma.7!tG_EE!r8 %=#7f4M2ie9gUgc![)3=5p'`8O`FK'oV@l_5jrgQ%KtXR_-9L%n*njU#-RN:u7SROXePSY-)jeqQ."@)o'qQ>%Ocj1Vj&ipI--%\M %:q7R;EQXUL%H>\#%K]OG4nD;XjJZ[s=:M=:2bFab<+)0&2]=.=pb\D`=6).U!,I?h'sCU,:Q,&,$6,`XfR7U71FduFX!sRBa5JQj %D/Hjo@V<Ps=ecR+K"hs[#A5&9X)ALR8?,p@0g6m_'nR'o]I7am8L6d4#%2mgZ6Lh#/_6,A5nRB"8cYZ#f_,J0J;U=[%<O@U=EOtO %K+'$):'cpGbQntU]3E6^r]6DIlRGk@6U/BapB`X\F4'Z`qDdm5p]84TX^Vmk!SYXAL@nH[lCMgI'L1/b77ebQSEm8Rs(8g^f2Zt5 %;BU^S9+g`K4\e:%=1td%9ub5;qHAF<VDd2rj"OQ<@T["[!Hjo+\IECV>bd`fq5B?EUM$;h!jG^j25mei59Gl_(:C_$XEC>;C$:<) %r[(iqhr\:jW0e8TU.+*!_d9&O4OnY8.FJ@).CW"M'4$iqVb=Cs'K]J09SC6^#YF,^5M6$oK'Ff%Ie0X2djmpJp,LoU,-MUi4-id3 %ZtHiMR,=Z,>(pjq,V(rY/A<JX:5C/<R8/$XA5:H[NXHi7(a0In*Y-OKiS4X)F&f@khD.dbcBAhQI3+%VS\V<m:=s\d.rl9c%0G;K %(2YHG/tLJ:Q4B#$lsY/Jfj$jWL/UoGA6VaV9P!KhMU;J?06L$9"R+X_R],Z`JA*fP<Z=qH/;cog+g;;S7r\hZ-n&Ml224V\4^re0 %`Ct'dEitQZWO?U=i`]@M8=kNlm_rr-9"c4kCbioghWpY]+NdHX73tN?#Hr%"$0:,=l!%t=l(iFoIO+2$?_rWB!ps:<.74DL)P!26 %Y(aZabG(f1Qr>&?\cr?ae:L[r.?.P`ck(<fN$]A'e$AR](PA;YDG@WPM)K6G8bk\Q\I!R\TRj2=Y`$YT#(t]`iu5CrbuC;h=\93# %R+R(VWYE^UmnG^Fk]Iu)#q,f!'$;S5'H!5"`pf_<e36\iDZpVd$:#$ULGd=ED=[<O^QS.A2_QN\<m>3D3\a?=%KP^NDS!?dZ6]D? %a7dh48\Zd68KNDu.r/#,$3rF%DbplIo+MSte2`;:<YZ6)Rg0T`N@6UdcVb]_c4/MUo@/WC&lMm]&^bQ-8Sn[&cAnum<Yk/g9;^L= %AG8uK>DSi-DE'Cf[I?;Ln&uAIKe8/(?Ee?K9DKc$+TQhHcm.hp^u-g(^ec#k/S]U1C!ct(XQ#JUgAsiV?u6kYq8I/:h2X(XLdT`o %#-(sG5ac460._i5ORe<_G]5no!7_qk'3J4Na1eunA<W7E76Tb>Gmpd<C9>`S63A($P0fDOp%icWoo/'f4Tr_<$QXajoWda]oOY") %GpO"5V\RGF?liV?S&3<AJ:2(<1TUHo?Y*8d!qH?*1T"nP9D2Y9FCnR)YZ]4[[:')d-^3EbXQrS@S(q(%DgYJ_c$>__4We9_^9[>c %pQ:F"*lDf(DfUJU/$cYR+"?S#^n=@p_G1B6A@D=)Z=SM0SO91M9*%ruKoh_T^`"+qfYSq%L_#oO+3_2@&bGpt?t$U"CB(s]kV=Rh %;8!<,XK%&]Lk8&AP"L16:XVOO9pC9/b%C%:(3t+$p.%#6S'n%ZTSD[jN5Y3c3#5?qXet<Hg:h8U@tKh[Hs&?P%K#$;f/p#]2Hd[Q %JCU;k/3]>6fdf:m'+ha]dR$lQj:<?BEfOb'(N.R7P]]ie=jIXA2pT=4WJn81>Jm1f9#<!MH>!u5F'6uefJu`Z=L@R%j]LFe@2^^f %IF[DL`:O.[6-_CkC'0oWTfGM[A`@51L(\@6eGgb&2Sr(ONZAiAS.`qOM(d$!7,f!3#!h:uOuK(ATRpPZrPAS=#_SNE&/[6WTqar: %=,t+Gdf!p#@N)?M)q-&\$;04W@)&F]mu*:/`1`X:%O^)#)GMll&1K0-_Z^`H[_UcOOcgq5B.hZX/BYJ*mas@15Rd!qp/uW3m^Q#u %JEC[>aMPc+$s[CSEFm]%RRo'!8IPhPMMLJ[_S-YXeauiE<\rh[8^[X.2`F@U9$To\3`;P2.l\,XRmC$.eXZ8W[5PIT!!LU4jsO4` %5;-@0dMk>i[]n-pN1.km'KVls5ZMS'jb3.]c+u^XF1(c_nJ1WdPX2A0O*EYR?@ZL678<$dJf5OVdHo5E7'DPF4%?EO?uAd'T^aXu %Z;N6=@&XiTE5:Y#*^eJoWMkCi(N6U)kp8kE:n5<YG;9nhGF[_V,OS_tZDD95C;+AhggSg)2,)cQ2Tfi>(4Lpsg-V.V6&i[UhaM\m %*OZ,H9gYU02`b^#CDDs?HNoK//lcI)bdFnsh]r\hJfY]P]qM*@#-,jL_T-qP`H%M[[[PCn,0tYp:d[p-?hA`(o*f]WK8IrE%2%qa %O0%n0R1*tX8;7c[>=c&3!9#4R_.)V4*J2E_kk#UIZipO3Fih9"eR:=qW0p4S/=W#$Cme[o=,tb#2//gfJf,&6Yu;R$M\jC#;,'Do %kq4C/-DBX7*C)&rid+_e1:CErS>nt',VAa:@#9qq0+a"s1D$`$"uriAJhr4OA4Kh.m]Qh"-8j?3"G?e%2D,@kc.9/Np:Ot#ORkfC %,A*@ZK!B&!<53eFlpk/%,&;9^M6);fZ\FR*og:H5o+YCe*eL/=]9fpq0hk0S__C=uG;I#S.".N'<Ku2-b9YV4BSr*+=k_>(Lq98q %"(;FG:.^'7O[dQ`MpW_LZ*36p(9,o;^ng.ZU,[itM-hiSAJV%tMq@>3%ZGK^=;jFT6kZ9W%5)6I,Pi@FDJNSdG`cCje7`;%<:%VV %)A3OAHC:`N'2D$]YY7L40C+/,+rT$$*Y^O*.$CV/;L+qRZGrbjB"g!"2Rf\+1)o0pf:31'h)^5.6rt!#UQrp:H@f/KQD,3r)N7\F %V)5sm[?&uFW(kn+CEJK0C/([e9)khFb=bc6oebC4$Y'Q_O7.0r9uuf>[[I#VVnP#>raMoY>R2nh_M'4I_Pk:;c/d"%E+fFf?VTTr %p'@0^k(kRtR>FEXJKgHM:f@cK-PKU68C7"J77aY`2j9hd#0Ija7;];rBj_5#"=Ho>,PTCi2C_1mP:^X&9VYq7PrMu!]$>G/&1D0: %OaU*Ab6"<_j==9'BVm::?V;FY.QCSu`=trgURKXeRc"c\c[<QX)6&.>Mce6_-g'm=JZ\&S'\P@LUs<#[`?J&$]22k=LK)-F"G'pA %hmJ=D+^S=\>f&6q=f+I(%JB:l.N0nY&fnh8BGDo2%eT=h=belh)>]SmXs:J`?]b#m+cT*?kbk$EL]hdXi/J;Bhd]MZB#LrV.R6s7 %,^SQNP4`R#SUq+_!W+A*2;.''a9qJG#u"I^>:BbBitXDS-F2P"V1@gZja4t%O2)t"Wa65_3LbT^F2F:N&aCQ55qaX"URdl"#<,+F %;N&f9&L4@7r4H^+0pih;ZnM]c\"3a4]K$*+S;Za$qRIj-'!Dt9`BYKXPc.%/PUCAOb``O0/j]oXWF!tF!e_=f$mGpBn,SC2-E%\9 %"n)MB`W;rEfVN\M@Z2#eae*p%</al/?)4DX*al:LoO-/iYIZL/U=_b/EI.$g$T6,i\rA$Y";-2q%6;uln6LMPZdA3-,SE*qj/%9Y %A6oKK!!qHJ`KA=g0T[oQiV-OjUGl12=or/HV%"V_;@K>Vi:i^]LdBNVO2iN6*Z2ec'oU.cnUeWcA+54?<dYCm<=d-O!Q8#2&:kb# %4L7+C:9CX6MaNiXW#$0(XqofIRi$6#@1A>6;'#]fZKR]"cQ<6T4qXI!KYu<1UM/V)3,[5co.8Q6eT.$$a*BEoH"Had"5tu"XVc0. %>(&+^1mS9;C9CdO/V"'SQ>daHXpV&Vks<_t)pG?sZSGkK6[.mLV$1QW1)@o@:4oN<8WbE)&Hg0`Z=87!=:r%oq?8)+Ft$7m1K*uj %2pUuL0epT:Rp!pP9S,_6CjXNL>CA2<6u:OJ_'4A=9@q!>'ICEQl/i#Z7<M%ADc2!rjhMf%NO>l9?.Y<E'%eJ$";)G0X/7ld,(&-P %:tD1P5ga+jX;.:*['3KDOGBqdd9r(AF+2(_*a!Z662Apn!=W6\(+,VG*Ya.D'/4'W+UmMLRp.@`i$8gO?j?R3C'$drWC5[?CUbo] %X"%e'Dr_=B*FP:o`3EX#Y_IlFa@[J:;J;8aEEFq6#E;*i@LlI992u#r8jlhG&hdk11lM.!ph&^2U-jNdlqc0;W'V:K5#mecK-_?W %:lN+_Lr'1M&Q@^q=<g45q7t"+QO45(0F%6#.!V/%+1+KB!2ldebnBY.<V%8b:8"2Agc%l;<(2b6j<>>q*(be"dPqlO'tQ5[Belko %A6"n1l_n5AW$rMJn;r]/elJ.Ff)/AY6.EsbX:>ARPUoS\l9MIbP0aIU^miBo2"[?=6iTjALp0Y%dMWQ2/YNn]<8mgS?O+h=5r6lE %r^]hgKcjQl%"cs0C4<H\8TZUO@5Wp<oQCFD.1+PHROg34M<K9i8';a3#^*HQ>&^c@%=q@YA#AC!Q-gGMB'EpBD1Pqp6F+,!KkTP5 %Y?oEaPpm\AUW0?Laf@)A:J7QS'Y^U*]n3T%@r)dWMiUsc^`<:QMoHb3aZT9dEF6ir6amb?R=$[GCuN#eW_4[/%3;/OVAJ5?>*8rP %F!0,0;`+f<HogQ,dQ"`'"KlTRWg$([MU"nl(lNu64+N%VqJ<=Z@)7.@(QTS8l=Nj?B!<1,KsKQYhld^2$OAS^2tJ&B!hOODH.!O^ %-)el6S9qS20p9RV2?)a[[$Zf?;`tK.p&kh%=M8&'22&#$M)g5@=e3?lC&E*/TErdZ6k`cmZH<_l*O&q:W"DX%WrQ'4:XR7RC=uXe %W9JXd.mZ8>*E3D&dCAoPNn%#V:uK\W_,a`j/-IX##EdF(C5Sst+@q65046*n/WUS2&6K@0"E,K#hFWEl=Gi8?0-Xu"[&WQ,m0$s\ %Y["3ieWF8=?GY0,7prL:9*H->gl]S=jo-B-o^@ngrSh0tF\+^#'&QNFdVBPt)R^Pp\r:DA3Ql#WapKW[L<jO>ll_7rXh+#5cDnAs %qDsnt*05X90'#;%/MV]>@_A`2"\g;pnJe8UKYam/\OM#n`EOp;fe#VZI')3kX@p(G6M.*/]/^o5f3QIC2)I#fU?";:!0t5;<^7i, %$8gB\^'/V^Eud*>Y;r[L12V>>J[%8;X[&r,.3kp&Rc-=#29,<!-<$$3T^mj:X'b9[IZfS\nT"1%YJQId);2S*8Wjh>>uIqYPa9YE %`o6K[1m-ZU`&B[/'=(E@Io7$I#^g<[GQ_E!J+$uiM#O@u9C+$59h<+hgfFu<-#q9kTtLG565L6nkS$E$r-b'o`)k$_##d2dL>Kas %2kEI!en?$`bVX/YajonTcj:"L2p'-Mja*'kVK%H'gcP4Z\=(A`j*$M.j)TK&K;DlsL'iXVE`BP8$c]nK9s<L4WK+o4H59FNLfn;q %\mZ?Xa4b!iP6bc2D,52S#<CK5q8g$3;B^NA#EP8^*%$P..3=%3$tYQ*3Jd.i!#"9^@*9^$Xc(&A=9-6@Ih!/Y+PL%+bB],)e0b(n %9o),#nKKL3a31A35gm2gJ?6^pDubl;Vt=Zu>.T]bJKX*"!FhK&%oBh`>h"nA83-KZ\"unPHB`ls:@rO_(F&]P<E>;#+P]k5Oj,(P %ctt4)Q6Pu8LM/Ad[Q%CrHUON?alpnt\qa7BQ3X'^:^)b!Rt=&9`]V@C%$X;@!=@*rQYZifaZOL3ItjT-,k[\lr>Lfn]6OB3CrdYo %GV'"bT&bn;P5Z>d=;oCmYL*B.X9%1\Si%WH`j@./fVj,d7qA=<#,o*@PRPlS?S\qN?U^_+iUk=q`0Gaf,(^Unp>R?m*^pQ*Vbj@G %'0'Z,#8$VU*JE)iqUiB4EL<c]7eN3[d%odp./l#)9(S3<=ERS]ltVhj-pi,X!.Hro;[A]495pN#)"bG/B:!-&&ErAI11>,A:k@P0 %29JZk3EYZ/Ue.E*G?)=!LI*"A$bndIUdi]$1.o&fT\(K/NUcq\(6O0N"-eX2':K[_&Jk1SmKOh^(8]&0&Y,OsH?8L,/(#1="I;q# %is^u:[V)gHgJPYVo]/qo'E_"2<ADe.0*(\WFTsbW>4pgn`9(Eah,D0Z>,':bA1r?_7Le1$<=mQ<GW)E5oTK"dCaQDEbggM_S?/X, %Q[u\:R/k?!3WZKFoNsl6"(VCiA>`=BV$"Gt#tW\_dA*]RH'1BXN2?k3:J(;"Z3cW_6RfUbYFn'UoNdc4;=&Bmf(=(b.DLNA3JmR2 %g@\=jEXP`7@67$Jr*+Ed$7Cbj_J%FThF4/<Q7>$'Yc:q^gfr4hV+)C<K"43\QE&@7N-^+W9@B[&O-8LBjetcSElK?LTS;JuD1aC2 %n^fN]_]k)"7H&F;%4>^fJ3b%V'aN(dk^Gg`<Jl6VDQI);a-..AQe4g-.j.u(GYkHBQ+3jaN(DTkhOm2#8cmD\<@UNT)aIKB<#L4h %jOJ+HdZXaGFatnT)40>r(b\-t'4?t"Kb0"H=c9R"qGeN0eR\.p1!`;5Ak8+Bm_!Y65_2QhJ6iN1,)F=CaZ&3ibLr\4bh,7MK6dli %Tj]Y4@ZT\D<`T)ppir0:"fQTj42sjh'p_8tZVmM'h`k`o!3ee-e03CTUemjP,Y:H`iE&=',_B$n'(tfF3Z;b#(&rJQ/__[fOA>41 %_6$*;!\Nh'WI^0uQPU+DVh8=N\htL,YH5op@C_Q\^nH9>'B'n9h3g!&JF];AFHg%91pW>\PF`b^Wtu4":jGWA8"m6;3pRRHE?ic. %hd=<u6"Hk6#>c&F0m'S^:7GtQ=BB7bR!YAdq%r\N.F7Q'_uIM\T`h0e('a%=7oB[l`>Kt1X_]7;'JD_:[E2s[4m<Sd'<#G=>-W$U %p58o&JidB%J?i=-Y<eWlUom9A;Onh0>&ruo)WIDT^84jU77/OV:P_=dQVX:9Z>?2LjU&7m<n@@;m$5:g/e>:A(;1;0B?Q'n9%.l" %SBYI+c>XER+Ni6b0%KNY<2OGu\D!NGp)LW.>J5+[(8[dpI^<]q3B8KSV]$ChdMf9a)Pj$*UoIt/G_rf@9gEHTP:sgh_Ot#[kV,Sg %';cO?=UAuq-(&K^KK-^(LpgiB79ITd[TPhQJ?3'+BqJ*Wb<[fHne,W'`$!o#;cPWbePauUZA6C%7\X(oChho;R@1/AQ;U$OZ"7B& %S8rg]kaPq8(95EDZ8Zn+OCYAS+O)4!de!go"SZ^N-eE*7jg\/!.6E3^nEaDqStW+&/_.bFPX.4hI+%W?PmALTNe)4^AeN3hk_3mr %(0'31M?mOg<b[X65Ik&;JA@ft]<P37cV[h4e0$uP6](,I]\#$#]RCLjH?oVpRb2rDNt=(5/K4fGEnl1W2WMW(p+YN+b%>TY;cNGG %ZrGs.0NtFM?u"b424p:'"s_fR%!a;VNI*JEdI(-.&?O>O<nb#j)G;k31R)e%M[qN@iAsA$D6s=*B]9;PGCkRWC@o$&^^%6Y9iWf[ %-!fu#e9=sa8GN9;j8i*<*a5m:[lSHoN<$uoru[&02e!i@DcP%CR%m]Q7<8gIqql>-m@MP@5ZOY2bi.O_CDqWjl^f9i"cNgZb)0FI %.['l*GsB>dhaL3m9CqR1T]].h-GgU%_C]i(5_1G5s4ONj)SgP2aFTH\e<^?4.mm[ch*?<b1"UL>/=[)EAX4ft^sEmXP5ric2#rug %"=&I<./n>^*WtO.<0TUbqJ*"@!D$a#J6\CCJbHAuY58EH!u#V[QJJU-1]a&$`W^*YI:k36"m+A]YUnT1#1da$r0jG$Nl_]D%CX4K %GR)dSmUO$DHD&sHb-LCRZ5SeYqk]=/_";WpQW?8_)*2GV2o&0Vm[u-8[oij.8t?'ge0ZA`ecWH>j=&BhM1@L7I9+sdOooR'"X\P& %^]%9bYNtF7,C,VohgiEY*.'AN'C`&1,,u+X$g[#,`O(jNm'C8dlhlt&.=o92Hf4`.]"W>P$;(pTF5Se7XBGem!7:r)Y-5e<;MK-o %[_OZc%6uhUQWnFW_@IY\Bqb"^/-N=g(R;8;^62/cZEKOW=JjRMbp5NQrM&W4J5VtgJ5s3>[KC0fLh#@"-^FTTUCssSNZV5n.6j>< %48*M(Gu=%rU1N*pVuuh%pe>*[=#FC,($"Ko&Q;3fc.S"ET(IGDNgsX:[Wu)Q8u_r"MkHl?f$LnJe/Ea"!%A<-#$>sI;Rg(O_4!:= %&((Df)1XcN6s5Lt-*n=N=*)20Ug/JNQ;nFSl1u_60In]5WG)S.KEC1Hm@73V=fMapFJJq>-EC!(!6KVu)?>s,]@p'c>U6G:S8hQ' %4G_+HC;h)!jqcOJ/j;ucS2l<"7IH(]GuhFS\OmL=l'i_1/IB4.Bl[1?.L2J!9Q_j_R"q9%=lA\a&lc!/fXLo]1Qn6CqnC.m3Fos1 %]#+NDd_n1sJcjWDj-R/E>cf<37H#L_9Rs\S3V'b'I4;R/6>lIBm?F`MP.th)cYTuuIB2Us3MD"S8pAX)/*Y3jUJV:LC"`./pbHb5 %*J*QMe5tl7>!k5f*DsfmX\mo&<`N5=YQU?7-aRZ<OW'%W+"Zq%$'4.gH4FF`)O$*=L3[sTh-oSqg.UD0X#3-c@L9(m5[`#o;;<"= %L5#f;L.RA(RUHjJ.Hl>R^SqGcD_dhp>]f:@imP>k-49KqUDiWA%Ft:/J9YM$D`WK%s*sb!F?,BB8f)jV^-hm^R<5P3q7^tL,!]&' %)+lAW8_"^u)l')lYR7kDn:DcUeC0JNc,1dT!u]2aa98j(,Z9C0OhU]q^@NAoC,&U\a,&m]qF[slQ:V;aP<M)8Co35b'Ft;ANLFV7 %.B-4+f8g]Pp_6H1pWVRY2&)5oK_:pF$B3B=,1LHrlla5;r:1)7X_Im')C*t0Zr%6)c!k*]U`%;14Bo]LE:@&Qbn^_AUJmM24d?F[ %'Ij_f'[5-I16O\scj8_8n6\i7)KLq&J\tHANNgq9)t?23Lr9p(Mch%pORZ%*!@!bQ'smduT,"1U'E-'UR&E]2HsdL5joGK+AS48q %Lp^[,fMV&hKRT*.@]H7n+99QudUp9>;.)$bOcD[j0Sm][4s\$u*bO[ob"o9=]"fbYmB]/&DdWQ4HBMmEj`Mo-J.>[5@FJ][o<V;u %+])/snmGrY[>)>MTEK@j?u)F+INMJ_Kk#$4)T%,"a@X=YU:H[MT$A]ho)gbSb-S=l>rflIGS]EqlD<M\gS/P+dFNHa#r8AirZVf- %1fd9opil;FLlae#X;]bC4_lJq!/4kqNeC8fb1MMej]Y7Y2&[92VAAs,^S($e\fgo>Q@KbsPV]m#.uhb1HM^5a%$GRef(#%^*eqJ` %p@=FhE8\'N(3mX[SLR9R&/qPa6m!8aMP;Q[+]-]&%7@oi#7KWId7,gaoiWjn[-43r$ohg^r/F)9RO:B3F9oFC2)M`--GgCsDhJi, %_$MfjB+5lE;aSE/aTi#i26A%#/`RQLe($?,%XTp3L-%*-PW\9>i`.Y*LQN,Wp)8OdilHa3CjZdd#=Mc_OYgG/53m9p19!0hc6-q) %5U4jF[2\hP1V>9'-q-u3b4A2(FSN(f&0Sb2b+[usjP)r(4UH2'q#a1^-+cG1\P*-#]WsE6=t:%s,A[5baRNaDY`k"WiUFD]SOMb; %@"i=/3jiY0aNJ&fSlK$X&If`f]GO6@=r-+k.j#VH%C&RR'gWZrrK[s&3jhC)S&iur\'GsYP>)?^[IA,u_saX`+fuq_gn,[[N.pUa %*.GKdB0@)#-j/k#=rn>),X*n/MJ'L8+pisn2M8Lh%^lT&'r=\X$S_mqT%I&%5W'<hl+Uc-1&P"4J\l5qHJT7#42=;hQ31e`</?W% %fYeLJ<lC+2LcEql:,3.s$)RL\crgrQ(H>7I5$K8fn70%M9JILJ\-6H+7e@saG]Z0#:mN6pYGOck(CO)XN1]3@UL>8n*slG[qHkbm %10J*qUg&h3fcUJ(6E(^f!]N&(Y!T(KiSc7Q\pEC<K[*2kI3]T2c"7aH5g\SF6:-@R!j:,04pulE>kS_e%<Wg``Nm;q*KCs"JZHhD %V5#jU"g/'\,Zl`qYNX=EN9@u/BY/r$L7)I>dm9r9iS[E6/k[ifM5nZ^>`Bfk*3J"rcrRmqb_Y66m$&:dBd3bVaG6$n-+#f2/fs1, %A65R@c?StW;t+f!X?\d8/PpO*MGO^__1aen%Y6Sq!#8_s5aoD*o"0/;k)!8(j#`3fLVPbQB#`s-C)&H0'qb32g*tr!,h`>[fg6T0 %f0I8mc%1ZL8Xl"m.12c&#iu/Y+M%,\'fKE9KW\2D71Amm=K;jGJ>Eprasmd-J2VH8n'R?#j.i@sY0*cL4VHrS400:_b#AhM,=?KR %.'GE7_>%09.0`,:`UHc+jofbeQW4])PC,0gPjt9Hbl9,i_H*3@4>K1#H+>,b'$?A,LF]ICh(!-##\@2L#%[T^<Wj,H4<(LZ8-)2% %5;aBPFsNFb(#*@=6fSAAG,TU3$fqJrHUlDN,e3q6`K%/`Kc;bY[?_VVbmhb2XWp0#*DV*&SkYKcX4cY\i=I_^`:d#t@Ca72gq^n# %>N"oL*KE!e+An]#K@iZ#En+fa9&9;4=C(fgB.OO>&dHX$ad#*kf^F[J2s*RQ!\m[W'JTud'd9oPJ<8f@/<gZa=ci0[>S!-DH<_'Y %k_CcIi`rJR9cX<MIZPZ3JkCDfEPn0(*TA/)/dVu<*GTe`3,8]Df?1<spAqje3H7H?'$/GDn_QAICL/qL6"rbI"E?q@lo0>mQt?Tt %+_Wb:W>)&5T]g3+j]T<e&i)hVa9HEq,^.:&"2p+8.btuBU?#Zi+aj?N0<\HK*J>b#[j%n;O%'K(3N3HrR?[o6(+\Y?R\5`$S?)h. %=foIeBr//@k/7UHhaiRue)_+=Tu'DPFA7`*/]*tK+^,RPL"KL->l!=*KUN/TZYM^BaB1-:aH=h*E$Z+bj8h9A3=1\!iW'`iC%EmO %BF4C<7M1"O.TVoWX"m8."?#NfKUWj#2FONPelJ*eX+L`^NLgh%f(NC3ToHPZH35FC5`fQ!!a7H'T8^`t+<qs\R6YBDZ>_M,7cI5d %Q%Z(_g^Zm/fF$a=Ua6@TT,mK4)BmPhLSb=,3T;:tV#nipgUkH5<c34[!As+t"&QoI>N"VCfN4$?!-ME"Ag,'A7QS%p49s-;K$#g5 %d4eU-GnJ1("@Y1oQG!]9IFG20FJp@I\h$=%CiRclaR"\T2qa(I'&N_IjE7V#0n,9KR#TtR5iGle&&C*FXZXcq9#b3YKW(3[#6qH^ %ohdUJ=rEg(/<^8").bNbajj;1*?_lbWn]mfFGNF5.2j-0JFB_,+D`!L,[bVd'SLlXZUB12ll:cf?WOf?S7<.cm)5"tM;tU3L;e?* %rD\h[?im6Yeu9l\q#FW2j(I&Qh?jL3Jg5HOlGoej7'PFZ-sVla0hIA2nHcA'%Uh5kRqH;;#K"oO&<Gu83>f9GR]h%["WIgiPpWUT %E$G!Cr_fsn*eodg0,Jn@`'AZMoApTR1'/,FO+3"?eX!*m_Y@7td6JP#I'nq2asn70N%g?;5no9Vg7__GndtUbB:6E8.07/.1'kKl %ZNT3&:%WbDL5)YtpfWWa9!Q?H@2RFJ#'#h1(aQ>ETF)pQ#MVcnXO/T1.beU2.+1A<.lS1W[6P*'YU7a,.9p])#@Db0?j%o$(^=k\ %(i(A@C/3b:Yik`5)Gk4=2%iA;UiM>PZtpU"R0En"76'k+ca"IUVH[R&A8k.))/J%@\r!(VTPED9$laae%Hp"<6A*r(>IbrX6n!q( %bi:&QO9jB.nI.&gKWL,j=uV6`G9KPT"_cr/LW;`s(f\sl&@5.8:0LBn":[*mCe&Ml=@aM6g+>)MRV/0*["7Z@'p5IMJ<<sHZEWgI %*BU'_*J18P6qADuGc(1;06t`XY?GA;$a:3RDI#:#a:6E&E$Y)K+<HH/rFnMr2/Ykp;IZ:)jTDS<O.X[]a4]7F85MTF3&Mga>.Lps %@caNWEc9*3)JU$5!3:hgRL2W=055]rCH>i4c<s\+82_g`%q<(+#!c413"LhPd6S8CJ7nu;B.^r/g?YStGsY9SqlNsq/?D(*\[/\K %0U/RmTb5jU9G[3ofh?K3n5Uq3gBn1A;Bod;:L9MsmYABcLERM*"('EC`m6DX<P7O*+d6?W#6o1m+)-FkRIm!9'a\q5K?1GD5ueRj %'ak31GgcrLHmDD9/(9:t;oZp%3l8X?\\G]a!`^T`Tr_a1ZgG(r%c\a4Tpku#C\Hb_Rnc^77Y3Pg+Rl';e?.7YQ&s,k:-0+b$i:_D %3I&n3Mi^"a0+.lmnWk.fYf!7^@J(!/TMol/Q/jNS;!nFg*n*55\3Ii,"_t:579CQ6KJX`7>I8fO64'oUKS+1!Lr5#cL7@;HrA_O> %=@cpuES9`c<XNq+GA8Y/+eFf1na%Mp<g7!#(*!nLdS^rLb[dQ!7:$-`b,KrEKB\@7Tr495XM[=D3BmMHIH-$a+=d1PffuT8p0t,a %4S@BRqI<2FLD:t-9YFB)\/+?6o27OmXEa*E<6gLtU*CcL?8JdD,dtU)^_@`jVTUnbgXq9+Yse>AZO>bq[N6fD0oN7W-UAq[p"=XZ %2#dB7&GODsERH!/+9b\4#40H<`!Ye0(!6bjjjm9r@<@'n>H'/5*/H/0,M`l5=nTm-V'75;@OrMtHn32B`4/aFZCHl,"'JADDSY]5 %<WbRXX#H:XnSBpHG`rDG>Z63ES(0cj7`&9<DFWVhQD9HJ`b9.a%&P(;>VEN<!i=T;.:2G9?O:FCQNh'gphduV;Mg/`@$!"K5V]FU %7ICX%rqP/4=E4"dck&"Sncp;<]loaUTnr0;9+,T-E`*.3<sI&Kaa4dA!TXT[<<JT>je'H;KiAYl[:jX33jBB^X88NR=W!>"i>cG* %@0Phq,\[L@@'l=5TGBRpE`i$Vq-kCAP9JH*W^^*anKJYVO\tU"lr)BIguRo4_LQ06Eifi"`3:L<XXpOthWM*eCcn^BYnZH%0pFQs %Ba>rCP*LbmeEGRnjk0tf:dbgX#iu-jM+dI,+KW[nX`,tZ7Ui@&!!C,\/&#1J,@TWLDT,Z!#XWS+5V6%b62EI]AQ8=f*Bbph4C@pS %6't@sPTYR`DY[F0Ph75qaC$N7dLf]g'?V0uSk/,p-EhlGZ7HKZNif\>eZ(JLoVrWY\$gQ_\&<o*Z8&lQ(<bc]CXU@hHpiKp3nb;d %2SZt4`F1/^/Q%l^eD1HDFM/[!EKu3kBe$/dr)5)Q_V,'p<hCE1rK>W_AZ9]#PRe%\aQQc8^2g#l/djCa/g"cF_Jk/s(HGha92X8@ %3.V"K@\M"]KlJL[/o>HjO<N#KIF^pq.7lBDTjT$5q8Y?ABDejl%1]oS,@QCC85^GG2<!:hL6.jDhhhW]Ft>QEQZSM7;)C+OPT=Zl %NS`l%nHCce"s[\R6n%?5?qd#%>@AhBCk\7I<'R$+WmWt7doRKnp]uXN(imZFP\9qcI*e<2it#fJLoidE+4[.<5UL;YCU:ElB9O#k %9"KdE:"cX2S$]7K(KNpk-K7QI"QKsN@R-$8KT2=@,Sh5aQ));UhIWO&dKkG^lVs^GBA$2#\IUQYgPCiNLG\3<A\);\E)PU-B/<.l %=ZP//,HNUa%L%la*TD]o$sFh6MN@YNa;2n;d8+eV!FsO=MV&FSNDmeHMPHsR-,_OWR8C.FcZ0bWOb#P+%[LKI:6Ykc_?!$"W.*^( %XWjit5!As9cUt!/%GA:o&5dQ_lSHHlhI(h'6:=n(=F)l&I$''pO@V_m\H3G\L#%i98>)ciZc?".CN8pAq-rF<i-#h,dNr\5_Oe\T %&isX49;M<Fcs"m*70Stsp<g4`@lYfF28W%_?LiY:/3`<L,':WiO+\a]`#t?d1cY71eMSTS.kqW1P70"!^Vc73N`QMEF7`m480pI< %&/4;icTPAmXUklG[_cUR9(Ql!@J!+0(eJDKCPCc7@_C+`=dL\;NlgQ-#nb0[5;7mn>('G/;r]nR(-8Po/g$16El\<_(`]5:@?/*6 %TcU(M&2t`SH:,kRVSc$C;K[E:Z=etYq^d9h1aD.8THOMJ$Xt3rBMKDT1uri.e]eMHP*WO7fu/sfir$s*P*X^-HUkr-d%c`G75fOV %B)lJQNg(Cu,NO$MR2?D#`o&Zp#og=+.L(B7F[AQ)1EJpn0Z5e3#cg!XV-_nh#E,5mdQts2,k?LP>YFYsME6hG<,uh6Qq8X.$N\07 %A?EZ"p)e93Xfs:-%/Lf(/)1ntaRr-GWDt.,%ku>FpfV-7,b`haic53C&]t?3Eb"`Xd3uN2MRgr$6B(Eb%ofgo;R;@CCkfO6KBd?Q %5(siYHm;9>dK-n;N>PleDDr>Wb%%O@jXSOqYm)@?jr0\UOYBg2K0^D)X6-)Jg,JN4L;n.RP7/%c>Y2s@U4W)j>Ib1$QMb+iquWC2 %ER.cHPI#-I;;@LHXBWSC\"5R?a+0TB[Z%8)F.Tt>>aEPJEKg.FacMq3VO>N<l/q2'jR[J7J%AcL9,U1hJSt2/;Pqm_Pom%u0YRC^ %M-R$Z]W,iR<]=6`S(Z?:!Lq.H)lJuniaX>@D'E>(,.F\H"h-*oY%H:.oC+)Ip*TA-m`Yg(bSk:Q%(j'+'7#M,*62qTjCIC`2p8Lj %O#`?73K`LXbm7U=4Z^_BmH13fo2iQ7Y#AK.lS<-h[V[rVG=E'\c1gU;##AbAG;G8+M92OjAU1bKkId#krUJ"8\B1?1jB5:>A5D9) %G;HqaAq`/]jP=)4?<VY6K>!c?5+NM)P!\'N[@bO`n)a%_Zi-eh!P0f`?+tltg]S(I6&4p%bDXa+:RL'C=Neh5n2GHW*[Xu43XcX, %Y)+%/'FfgdQgLNjN6u4akj`L`E-(Ys4M$In'C6iI-BTqDaBF%UL<HC9H8<<udUcAAnuf(UBPH^93kR*Z*&1__R0i#D2(UU07[jn^ %blgg;QW'g*^,*UTdpr(8o)DC'"a,*EH3?WO\V_;3UFlYs"C"cb=fKT\1r\%qj`TiB5Y\IO9e]4_3N1O"<AiQ4*>Y^_`iKJiXZd9I %h4.aqI]k@;=I1nHb:qN/,$W5peo7.%g!D(6e%.)G>s>\<G?^-jXj752_&YJN1Y636>K^@)@ChrGT@`2Yla$)()>q'^Im$uN5(R+& %C9YlQ\<an6iB$>2,#0mAG1[SB]SnX+*%ToVQPjg,M.Fdg\]RT+_.))/]^0ZK:@Mq?3B)<OS.eSfIFc^s5NjAZBU<qMb>:79B%gf[ %m;f#rku9agX'Lb:#sQrnpM6*AFtKKULjc_L;`hg042HF$,KfCPlE6<=G$0,=(k'$_^KmGh#u9Fcro#r,MC2McHORu*Y2fmqj])fQ %/mIo]Zh";-FI+Y,Jm5h06euCV*j]&mYC$>&IMXNoQ8cFrYW]hBh-oa>EdU[RJTnZB].DtUN9":<nh/76QP7'UT0C)u^4qod:Z/sY %'u%j6hrU<!ihc*af\]DH&$F8hH%4&4J$CJ@)#&C4r"D3l?-`IFFb#<@!Y\Q=](HB\ehX1H&%WJgAlM]B.kdugB]p7Rka-_]eq]Wm %,r*.O`O]e":$%:NNJt<9`h3KX.rY&PFA*D?k`l&0ed%VA-*ffkOu:3PL>VIN7p0%hV6.AXXjGM"k0g7,d]F*;>u.>%Hfj`G2%?Ro %>Q&01;U3<1/)m8&::L3t[oQ;6Y0TK>TS[DL)jD9[f.3!pFDDgIeNs&9o^&Mg;Ra6c6m\^JeYZYuVg]ef?HK-PAZ7C-S\2WMnp<Cd %OKA#C?*^u`M:Q66Rp]FcZEeW*gXbr.23`&#lF7>G>`Xn_M7,#haX.km-J7h=F6n&Fq"i3_4dNi8,@Hj"Yer9;,LGJH>9U39n_=FH %h%K\2V)Zh'WH,SG3g0\/?*^%CX3XrN+?NCRFD-A/.#;DS\o^A6e4(N\SlK[i;?#IiWAJ]oR$T:"bUPd),aD;`p8L[r2*iS>-(^Qu %W9Vf6or,'?**JJA>$^-i2&'=0FC$!QYD+<=Jl$98I&t@dFuQ&H"SLG/6FAHAg([993_Hl4rN/^+2aJnETqCW`e]f5EWs!ZQWk:Nt %?C-7^%9MEiXl"p9YY,bA6nB`.k`QK0&Jfh#H+"kTm*["O:aYo#'tZkmIF?+f_./6-Ee63T9/5*GURWI0m#bQHfJ(njB/\\;*ZaDX %F_@''ZV(S8Q997W1tncOSY@e);4Vl%;'uWK4(PBt>1Nuef.PnF'J\r0[G8'tV4m2eeub%g%2g6<=X'1_i_DtbS33'S:.mPCV4/p_ %c)R2Q^R<0nl0%_]1P"%f$T4>@h&N5uq+<NNWLEoGOY,,.XQlWi9kA,51:t+X?q^<)b>,;3#KD%&5<]s7Jg1[?/)kH$gUb&.M&a-F %2Vpja?8p'2QO^M`F0OdDG&n8Ijt4#%NkK8MM9O(:Q=VusF#%sGTBCKD7d*86BTm/abt231^Y7b[G-bX*12+;Q[b\UOM&bAi^2H4l %G[2))PB#C&9jX=0gn[&V;PX+\e@fti:1!W^%eiB*G;h=*.>qFLd)e7Sa\Ml?nnaf;^7+XWOWQfM9Ae"*T?,CJB(Pcgrmu,m1jf@1 %k(0ok"^OTMofNOd:5(=t_A#p9O4BrIs0.e>U>_C$1/Qb#<\[!8\dTESC`-MjN<p)T$,2EP[mubgUrsV'AJaV%OA'\\FSSYB9ILRU %.:%[n4r;Du]IdELQhAQW?'^lb5+4@a2'\]^%O97%Hd2cC:7%/W/UpR6p![IUl7rWffnLhuM:QV_21.o"Au)gc8gD?P*]6lg`+bM) %WQPZ,aW]3rS*Db-X_"bP(p?!U=;*f#?-]PYG-3\r?6e%)/jItkQWTSuXNOGKQHcL>53m0`:%5,VE3FCeg=@sh2=,6ET")T^)0*g< %$3%If;r'K4]7Ksa_ir^8eEc\oopP[-ZMKOu!..t%'>/o;%`08ki<6LG'FSB:06%H1ieWApbLkHWGO.(Np,O?Fpa*OWP[2k_$&6VU %)ePEqF"PGpLl\m[gc<4Afjt:lb8o<u)'*^[G1fM9Qqf`EW*TDP[9TaW?Ig`]CR=Frb7$JK+hNJI(8ts/>4$:]:@R(_\T'!!FOr;9 %2XJ(>)W*1-DjMKS:F"Y+*:C*G:[f2sE$"cLOh4<0lWBJmL?:+To,?KK&P$qu9mVD:H@i!)b@eMSqms(DGM'8MR('[Yh-E553S`Ko %:O%psHk#gp_c+:lB0O.Z*kNuf>s@pQme%VqH]QIc8,V5=M!oB+YN;;s;<N/UlmJ4i].Eb`55bfUr@UlqLXCU'rP)PcTNb?&D>f#_ %Xb(FjK5LjGDRG.(=bWgV%)#OJSXL$%ocGMq7<GS&9N7\K<ibH8[9-?0@oP+V/Zc3^Qt*Z28%2ep\$F&c.NiTIOBuddDB4mHc'"p_ %-?n$,l./OrW3.mQM5=FaV-Dhg9eDa0DG6tDbX=%OWOatc$9.ou31\2Pit=GZ[G#(P"/`1PgETM&jaC0@':"*:W^5J;65-b_\oiqB %'ool5OLeGU](M?"[@"OJRjKUI9iQc1<fZIrR$t$FeZ3!+X`Cg;6<?B*%RrA?[2#^KbGE+g@9&fT?X)N)X0L_c?FLXZ\;sFO`@YG% %O'/X/6J#eMlZ1a^jhY_koe*l5,SOO?[BIdBfAW$"&N;goBpGo?RG(E7l'CO\0#]SQV>f_B"Kg\t)H./h8W)p_1`FGr\hluWPY,6X %V$Wln[A6PL!E>+0C4]Kd90q)SX-t0>lB5Otl*;Y7[5p-L/ROk._?7!nOB=F1J&tVpR]nZ6@O(`S%T1m^WEGPfXiH[7N`<.JH&nqA %biq$]7<I5?3[A_2f]3t1\K42q"J&hRqQ<JS[uO:'9YT,Pl'n@<ld>`TM#u:m$B>At]2XIt["`u9`4O,(-\rLA'#ktuirlc"LBb%W %(cal7fd3BZ;HBr1[qpjSH]4@kgmY8pS6`_O):Y5e%;;(^F:GeELkrE2=ZSieg8..'OJ[1\j[e1gTBe8_Xg$N-),e$u-f)+'Gj,cg %/ECFgVE"uL1&!MuPhZ5SoQ0JTJF7>OkSNpOfARTI+_K)F\qV4b'OEDKfh?(.GXVZW=R^Se]fIH_jS*rQ2?m,S<MfqSk:i8&E+@kP %ad*lT_6GQ9Q7*55SR4"+1[,$:ZWAC`Sckm2l.%4;"C?_>:MgjiSq3<o-(c2aqU9:DG-gfQ(;[36GiAf]'.iU8`L[*>/1.'$8S1S# %jp%!b#eLqjlc3k/;)7FBeRk0]IW[3MblL^&K5-%e^tU\&?A);Z$JmF!$W6UCJ981C)_N7r?p98mDu@09==fFNCtsM(ac#'V@I^Q$ %\RYYc&AJ#,p!rdqk?#.U=$IcHO;PHLq[ZL%qA0'!/,H.cIf.ZQo8E1--\&4I?2XG\5Q9t%0E6@sq@*B"m/6MLr;,^>k2TbInD3*u %s1Z.U.fXTeRWW]Ne,.n+GCN`mf98E_]t$.+HK+R`o8D3ZB34TkB(<o+?el4l#6/iCna.4lg[DOJ^\bq.O8ljR5:tk:b'1%<*^BM[ %jPi<cqod[gcbJ8lrA5L-n8N*"4T8^Bgo'&T?f1i<]1`(o^%Z2hIm20GbK$aQa1l9]j51BoO/IJVp%7820.3sqh#<hY/l/Y7#s<:t %?+Kt!J"N:g*aQOqH<o6JFM2;ELE=.FUT?S(qel+4NSaK7)*Q]>A+K?lbtmd]cE9pgjphp83ceQeG93DYF8L$"p?qmur52k_^\9ot %?2nkjIXAZg9HX-(%\Na@q8M%bANY;%rX[Cc]?fm#:FGVV?JM(LTD)p]cG(9`hR`G&R^q7dH@Pb"e(^&s)pDUbb+',YUAaqKp@f*o %k2\Z%7sgc]h;C@!Iu@*\o;a`ifNrpom(KU-+0OMYS=]]Dk2bn_kGRp`[6^u;TMt112tZ2-mFfb+mIe`jrX:GBfWI6K^3k;+meh7R %VYM,>5ilSEDu]@\fpfs)HY[O=qm<j+[^.&;@dU_>[J*BtHZ*dsMMcZKfB`$PH[B[Lmle1o2quN_S*&So@s)_XD<YK62u!%.hVR&B %5',%56?@'t54+*8G@2JM_7*!3[bg(,3r<l>n\["-YHNHQ)I^A9Z%hK-6jrdp>b"#a]O,^pm[bRY>DmrSqtf"!L[u0mcitgnqpL,] %"FiIXs6e_=ajgtti3):lZfgKDr+#9i6_')+4#6i5HMnCVeKuZZ[\%0`Dr/,g]03`d1[Tb%rSOi741*s"5W]17i9BpRp!&!dp'[9C %1XG6F(\:phr:GF?I7@T#]feIUg\Wl*@J;S[X_'5s1'$br:2Z['qsF(,g"$#7XhK&[^"fuYa4FD]DGNHiPJ`=QhT=H$T6KaBhOL+- %rG[(gaVcj[BpWY""0K`G4VI)6DpXd:2P1N(-I_OXfmW\B"6q#d?_:]]^18VE6hhnPIc,;2,qBcnU^qm:%q44&$6,uSHS+GI[%Mi/ %AD7THfc&VKo1smD+6!9fh[qrb,PD.!1Ae*NFc?L%m>0N^Ni\Y\[Ng+q&**&l/0AF'ro3kLqigVoVW@1$R3srV\%c1>h9MXlDt`VS %*F!f12t=oBmsuhV05!4.T>=(dO:nqbdIA(:ip/I0%iP4CQ1cq!L@h6n$uI[kg[=^(h3%)JGs;2uX5iO3MkccJZiA5Zp$M?=TQN>c %-__,aB.Df/]KUg0In8Yj#;XaL("d;N7paO1a?sddfcA`\1\:;8`Q<L4`%ILGJ%<:=qoeZOp!4_(a>A0qa4d:KbiYhaD#%N5kRnL% %LY5]LAd=A%ZMJ7[Yg(TF[eUK(h31"]G+Z,@[5Z:;Du83kjjnAIq>0WA-njHZMo+gPgJ&H;fb!+*Mo%X&ar926Z_KEGC^X3hCJV\3 %8#/8ARs"ESg\RC^G#*;CApl^%:3ZWZajnqp`=HStB;_5D#$,*DpJ1^9Fq!h<41Y4IKAAo@cJQ=K3&s.64M/3'bK8KZ\r87;b,8j, %nohi1;@E=#`QDQ\kc]&SNIRG$)9LoCHr=k\mBmh6i\o\#Z[8unm\"&\A,_B++1lRMD6U=SI?2U\m^@S*bjNTUBR'+^ORIsLAQs?8 %RuO(;DpC!g2F.aWD"C?8\[fGEh\gh:r`,jR8l"CWK0!')rF#9ipA2OAYNK]/f+65jPDe<n50faiEpVVRgh_(+de!2t6*pI\H<lCp %)iB(D&-hV$UO;9*rV=3;lY#p0l)b1]EOn1mR@Q'QH?+$%Qg<8p]/RCl!&9P8fsfGPl08)gpZhi$mDLlcgj@prcHo!7]6g_gTAQ5i %fV!<YKa0A):9Mkq:EGH5G#rtQ%alC,ZXoHYl(\9sbjWZVGsD"1Qn<=PDQm9PIG6t)0[0Hdm#"0n>6)Q'p(EP[\I\FRR!Y?hg%slL %^gT,\`O?luo8)hc7g"O7hih?V>PE*(4WJ'</u*=b%\pcR36VS>rjL]jNs6(M^F-YU&DBi<bQ]S5g\8daJ]#_#af]<%gBNGdlM/]n %TQrHJEgn*k%lB'Ra;VPh%WFW??YpRm*h14\9Z#Cs^]XQ1mZTOmrU[(&a?K001XFZ(KkP\5W;4`E*FUOGPapERSt,b9[_[e9^?$#F %G3ATIgAXLpT4hGXU-67?K"[&M5L?k;5WaUP\j+O7kLlBsCp0N!ca3Rq[Qi)]s#b(L3j1H"_EY>9D0G*WTbuX8gW\>/nQXj.ZTGqZ %2Z%@_rV=4S0##([q=n^2%)?^JZ$<\GZQY#ZI=L,S<S4s(mp4[L6CO6ZIX/UZI=/N6?61%Kb%"utdIS`#qe8Lk6@WXt6Mp?2C/P!% %?28jCo=OQ(MoQ%T5/2Dlp?);<I"(;?k3VKgamHDDVQkF,hYT8'T%eC>R!3J",%b^7pB33tJs\,7LtNOal4K=gr+V@(j'.PnhkVp; %K%8a?/@PL:fJjMMm:k]%*=5r!]U`A9^:ets'\L16?aJF0mq>f^p:D>!4-l;hT`\`3S+,&*B>C\]E<OMSa;VQbgCa;_*LZ<cr,k_! %XmLr!lAhs6]=&s\!BTdC3qTjfR@eNEm*aG[om$Z.gXgamIf%=Mg$O1#m@1dVG:1?!8LntV!4YT&p>P'c&Ph2A=`PHe/c0MX<&aR1 %jSmNm_o_dpniiT!4\$ZgCt*YJSZ2Jtnih_SO58UC(g62maSQP>5(q_UdQW>sh7g%?#^LcXK?"[AI=;+Wc27=e9XamJfW[HLEZ3/F %N,nrZYHNh[G;[-J/+;;@(I+Ks>[7:e\"=K"5Q>b.rr(ah-t?n6F8<62SOcq!5AX<%@J%kD>K*peXS4YlMLrHCho7>:SSiePgYV2' %p98g9V.&V;q!R=7Za6_$M?\7th>,Ueo:N5$qf%"4EH_68c.VFOY&@(<I\+7'p>3=HnA]<cQg\4#H^EOdpMKA^gH$9YVqFq6PQ..[ %^;!rPG-IMHH2c[P=d\$CZ]"B=2KJUMD`jE%kLhk!QS7=5Ijd_/1U;+0ntiZ[9E$ZVS_h%C4"[B+bp,XO(IduDHSO[;qE3*Ms8BCi %#9,Xu<aU4Sbeg6jgt;#&qVjEZjkap^pY5>OZhN5@rAJkF0>L4JIN*IiT_i?i\(UXqp3rLEhe)>dg&#W0gi%8M%ZNsZU"DH#^:k9G %#IaMQcjTLp;h70L*OYXGm5[#;b1X"W*#eF*%^qlp@t$rA*#`%9R+lcoND5PD>CU?Nb*jXnkI9?@S?I"mn(sVGkK_`2]5u:_[D+dF %]H^X0GCG^'[dEhPVH;$F>b-5uWGhP!gn!s6`iF7.3OME\*pCWd"m=AG^RVsNrp:<I0A<`fmF_XaN>=4;s)"BjJ+$TTG%&YICQ>&' %0(nZ<=Ch"bno9+K5&U0&YjJ@Aop[o/c>I&`gml(7ka_Y5ZgE=Ps51&YhhD1$l*L4'/V.c,Q2:k;m(e;@9s^rXc*UKcS%Bqq3EqON %CR1eZIfE/i2nr/'S\O"]NlOrQH]JZDTA?:<9%65l:n.)f^0^[JC@0s/fR4P&]i/G0e6(Il?#aV4]i/EV<T3RPS/Uu\Z?L'MJGHg$ %C2E@H]6A"+j%6t/C@%K0gZm8ge*Qd=")Q0;0\^<Zm*3esl0ZU3?a%f=A'sQ&R3NrkFO0nHrH^`#qsMR<5*@Km-(WqW?*Ta"Y(*rE %^HGl_"`;LrGkrNF(E3odN8D*pbjaS-6D0rGhOV?i3Vu&0c`U%+>Ad)Ph7q!W2CeRgrT2qZ=nuKY\SGR*V-DmjOr_eSa)>ju0B[Na %++Ab.bcV4lHThD3^4(U84BC158&j9TW4@gE\@VC`7<`on:L3UX0'#0<d9#tpSGhLHbtmd]b3n.M5N3pJ?J3-Lh/^D]cV*gd\*WOp %>.&[0pot;)ZlAeFq>Juao[s(jCcurX\?'&>Tao_1.BXa_R,YR)cQ5fB!d_7uM=7$/>Wm,"phYW74h/H)k2)jkpGP#5pBKO3i7f2u %H\66@%&LYRGQ.m)Cs?a6nEmU!pK2ELH]rA,9to:S*4oqTc0jHFik*66firiNMf3P(mBX^o+/-Z_6(`><i]GMJ`TGpN-X1N^rQk00 %l^r)jk+Ao*PAd?n^.2<k@\Xq5/^N="N/SRZ%A,fD`P!?!HQ(5B3jND2prlB6GT\'Hft?M:f\0j%bsbK?W@IUks)`7$qWi>5&m`78 %3Bb.Uptm$8(Z4%t]U80Jk,7Yi_nAVFn87&c)g,cE2U`%9Lc_u15)7KsgE!&Ym@#WA?/Hg?j7-V?#Tho]h7L!8aIU!rkM9WG\2UO7 %]&guKL>COJ1LN+Z%ep"uqWco(ah"d#Xl6khhS".'[pM$aAA<XK9DS=7):rrYbN7?aG91IprG[(gJRL9ZkMEg/)[#g%rQUgqe$I<q %2L]A,*9c,%*gr5lS6s"f+>d/l^\>jiNV$m4Yek4bTsK[J5;mO?2fCgGNqM`Y&+u8/b'jWG5\U=,0JE5)hJ7HK@fUCQUN]d=Ui/VM %R!hlS9L&ROgZtoH%5boO(UmI=P.#80m]O:6f9`r,\:)$ddU$55X%RNgn,jb/4/aeq8pp7Y-r,+pE:5R>]?DR&BC:HN3r^K#ocXfs %q&NVUK%"n]DKSJ#i#pa6\8AYiIU2PUgCaAa*SE7`Zh9[IUVmXLSDSdFEk]iMgq>f@jQ?C6Qcl]EMN$ojc>>Z$[f#Q`hi[ln\SWA? %o"4LWm'CQD5<$8jp/gGVlJ1s2F*IQ/q^RT[W!e%H,B3tNip/I0LDIa:V':5=2;/#70hq/?>l9YTA*MCIl>BUu\Z^%Zmj-$'j[o9t %Cds.b38!mjnc/@_<[Dh!N.7>3''8X(3;g8a3r;j$p"apJcL.PO@Xcs:A-;8BM=CidVoP=X[\roQhQ:nhBK/0cAo"U):@`BXNi7<m %e)0lk(u'?>I/;?/Iop8l"`E)h&U<GHWrDMoBrq&*^25qM5%V.hdLM_:f!m5780?.'2;'M7qqL<Bm%o3F3P0QVI^9J9P&6WMgQS8l %cg`VI1sKL<lQ#g$j(9@Ud5qk/`V'5qo^=k`RQS/]Fr2$1nSPA65OI(U"0OHYXW1tD%g=[R@g>oSs)E+#p$U(`.MCLBhEN`[@G>'2 %T;&CRK)S?jFY=ZshB2<Jqa1oTp[mHSDsMf5(>NCW2eg&0rV/kDT76P,cW\#.IeC:<JHCr=afE0_?[Z9FJTNpX,X+9dq>@8kLF7S" %bMU*bqVgJr:Y-CYIW&RH^AiG!Ed@Y1nb87=X.QPEqnj)TGZt+<YMYqa0E83kIsWrDC]="3r/^lYr8iDEd;KE%prh[srVtC,2*Cp5 %-O2A;F/X^#Mr^*aFN1/r-&@aHbW2D"+'NU\i['K\Ti0S\Z*oG(g-jrNO1]j\oMZXohuE9T#3PU<kF7[ek=,>PB_r$NR.I.?\j6B< %rVRo]lK!BhHMoWiXmG&?rh]OW3t+_spo/5"K!C5`>s9]sai9a&r7Q?MX)qITi>0P$en1ELiop#+l&JQ9\anpr?TboIU(12S3SHq# %9CLDq&&#;'>.QOaAU)ZDVXj1n+b*8"kIc]AU,c3,7!N]@-W:A-hHPB49V>Dj3r,XHp<c_t[FCmgf#<88^7s;AC3B5C[p02QU"*Rl %eh,%3WG(n_^`=n/VMF>$Qf4h!$99&mrGZG/8TCG6R>Ya)04q$j*AlTL#dYCV>frR)>COY[<pMa:pL#1W]Oq_6:'lYI*GSMRcdAh; %VQ:8eo.ZQcQaO.^J+6sFcfFJ^5#_;\VSO`\:5dfsV[e>\nA8U-d8!JF0SUoN.=TSJRnC`E`+0VZn*.`_FeUGus-$b_b#fJ'Si=fW %"(C1`j^P+OYr:_tY[i4Wl@&Jh>5TE?]6$ChWu$!Xjo<>uRkk+Po0ETlQ\SoFV$O$!-7@!3lCort%f[\<"%)-kbE[grD#V914I"rn %b0fp'l;R0_n&g.Z=oOU$^]242?iL3EgtVOg_`Ma*It$5;->]0GP0^e1nmRr.9?4gA)TTKA6Pl[c\K&s>/B5BTLG"jurV25*'/,3J %6aAi?'ap39XpSmjnaP'>G\TN*N8?K85[c[.6;"Whff$`1Zlnr'gQ5*Wf!DU9[W/Q7:XPH9cj-5U[#Jm)&*<5FJPhHIbGGgej$E>! %#c-(1:m]Es6<u2lIaXM/UXqBII!6&qT8\9BQ@3K-@b`A15,I(5#@Jok4cDY%+Y7*'l4Cg]VU9EF%)U@"iMh4?k0Ou`j]<hLd4rh. %=?fX$g=G3mMIkZ8(#JAP!9_ic"kYQ>;4oAu[9:eokYc=+:3d1O1-F:P,a$3s7VSG[m9P2KNluG5cR6"7J,f06ohT4Yj-,CZo:O,P %ZoGXBs6c5m5H_2J+UItI2#:S:5P^j"_l$*CP^OV/Z$d[`4n:8m1]>h9nB^I+)Z?9IrNGecdf1=JBB8OC<\'dp$hS^):d[2P3]_NK %<O%!j7n2A(?4H`l[epjup?_IQmn\`LmrtsmZMk37=-q[ZUAXQX8`4LP`Npq2O>_kf:9ONg@W['Zc^VhRE[mQ7cH`V=A&"56^271u %AXP+ln)`PbE!Q?]#B6S0FC]UL,\QpFX!U"fmjrssI%IOMI'\I<D25Mfq3$@m7`U:O<IACK34]N8GEXQuNG[:,0:VpM:5<7l:pE2& %A<^?_#[upllRXDI6HWoCO7GHnjTI)^DMRuYabna4qQ/8&KZ0<LMrja`4+0(RD##_F5_>&/+_)-)*?[Pb]N?5iEo@0c6Ad`a4r@Nu %?Clj/dTD9FhKC8sXoWZYZ_r]q%lS)d3Xd@`$(<'qNQ'*keem5&g)#C"7NdroM;o-@W!SB*9$1:>Pk%<+Gbe;^9="k9XU<6=<R+)L %m#nS0=S]Hh!G/42Tq9^)H1%Z@^'^(el&Tik&(5JOPZ:Qk>:XojoDRW4QJjLj#)g[8,1!,7^L%2M5Q%FOH\+K4cU,0D?Q9sT>WoPL %N/t]O[*RLuq<:8=i!KnJ1jO]QZiBR:*ha[)r6q\gIQ;\#p()<OeZ\8[:]Bbs>RU:INa?SXr')es])9=$=^m<?oZ+_=SQm^ps6RB8 %HadWHJ%p;(YCkdPlT[VIqYB-Pq7!(QepmQYe.KDUHhX]BqfdtU]7(u^Yu5mra,d6p*)6C1.N7WD5FVI6\o,L=ou2o^rHtc_9Io_\ %8?$u_p?L>QmE)Cn5C<'iPIF2G4T0>Mp&*][Vsg=1itn.aVkN\^.4_HXllBCe?F3g>8pIV[GZ\"7*N^-,g7]]LdN2FR1262=ZM"eU %c$d)TaPJTE*nmK1"efdj-[EpDq*m)5d8sCu^)VL]U]Wh^.YiB>`Nj4#6a-_f-F[88C5\Br1FUB(0U?Kmk"h/HY%Tr#g^`P,.9B1: %c#Tlj]#r0$jGKXd^7M'6Q[cGTYJfcT?dr6F1S)ot2liFq+(f$8KLuQ"nh,.BIF!E6gU.%&nQ,W04`BFkS@\d`]i^"$Y4[q'DXK>. %+'L&@*DX4nT>W>9`T.FX^P'n:M&k.&`8H%G_\N,gHKrI89.m!)#Cdi^@eBH+M+LD&GR8ic\LS'.K%>0s:<&.LM</aJ^K"@ok:R]n %gcbNQm^iVuUM7D`XK%L.-jGiAElQ3?hQ=BX<^67bm^o>Fm!U+ZYA!g/FZ5>lZ6DX-A!c&NoBc3R(;!DparjBRof'1mo7aq)ee,O8 %YXN!RRF[C;j*1[2F\>Ij&8Ju@c7?#,94[,[6h->o$=mkmCBZKC;TE)o'Phk]PtoofV_`$R3;PnF<L/'"@+VLT/jZG\MW8P!(+1+@ %TM+.S@0B)l^L=Jg04CE;_4A(ss/.XP>-;P@N6HFcSkXK9<`*c9S3@fD[D>43f4=3iCNi\:p+,IK30"-q.$"QfqV\0t_siYPs(<:! %Y[G<2HO=DRZ7fOsaQi!bf]_'1\",-](-(N:o3718[Jmb@G$,@T3bss\%_Q-$Q)Vdc\Hp+%p"/k?7#,ua:%aM-<_[sV1On4$/`5pU %DVKa12EA<80RChu=7!t@h:RQCl8h!h=<(fdZ'.\QpYnUb2pgde_;U*_Ac11@L94?cac4j]ET;'i@YuH_\`YA1ZfK1HKHmB:#C0MI %+:hN570K;=btJVNMn#9$H85E]KQ-hi^+.:aQa.\oRqPogEGdl?V55VSgO(.7WJ$&l=BNj*XbO#Kp=ae2Nu^Gf()seKb%M"&T"pTc %!jWOs!=*"o(6m!-WB^pA.QLNCUK=Ms6q]*[X!"G]c[mk_"i**(6qJgfCfNB@!B&9:@2\+Le00X>-c&qmHYYBd^k<D&5/;(!cTK(: %5<mG)3P@B^mc[f\c^fCIT"Pt2?G:9kh,cg:^P^o$Q*k[g$`tD2;_GF4PBXXc-N/,,30&4\W/]o7R;s&I(VV?5h81Krp>+h8mRt%t %C^09'k9fbd&_U(K'*qIM>R^t)e#\E(amJ0i;"h3pm7D63*U(+UT,DU2e3?5.%cr/?Iu1_CVC5=:99Ch[5i:\oJh#ZA5<CM:ck8[U %bUqK#)@Z5d-NS>DU9i"7o6q9'HEGB(<6bpJ9BXiG?'3!b\cP?Vb,]*sR\EdN*tth\';?<F"N6_U7gS7-p-TX+e1.X&hegDkcmDJ> %]&9/IA<eTEgd7oJ`'WB3'_=hM`:H?.(]9GR`U#'),3%h+"jFO[Lg9Df9_!hB,)U8HbCH@G=+T,BQhS1_G]2[K&QH=/4W"f%-C]U$ %_UiD,1R2P71kgA$3eb,Z'9]gVP8^oF;Sd8Ei3b!-k3PYkqK2q*?LeTQHMoj8UK<!RU%pQ"Y!MH577HOVQHEbS)<6?!)1hEr)%Zlm %]l_;ajeS'GJK0lG]842$YHKdmBVIVnf[\.P]ZV18k]/WurH&@Gk@mV2b'*Cf3(INhQ_AU\?FfVG%u9*_RSpNca?IBZMHpQq/@\'i %oF^l?0q?%F<Kn.WL,*-="TO3WLnL[,A-\Hl(9EtM0%%#IOUe!,J>jdjk+!#N%`%7^+TW1dFb#8VASEk6j!a[,^rF:\MJ:F&prL'I %[Y8l,<%P=/.D:Z@jS9`Y!#>fuJ]SW.LfU.mV-A4q!2:65Vn%'pT2i!>7h#GAg?#)P;M=6g4_FI`ni@?]*aod?#o[VnS1j8T'&*#3 %>/N)@XbD<lWN2'a($P=L&\cO/TICk0ac_6<DGutIAAVf$SQd$O'IFe-,^*mHQA<Ua;kB)&Fo3-XTjAaTS&3=D=?;ssreC1/W[Q&f %5-"hRkf\!N>!\TBVPd50X3D']r3.d_S;DQ+%2YKp\5YD<XEWDc#\@Y!=46uB>u^GIT1kdW#4Rk3BuObP@;dJrU"pH&at"U-irI$F %f4PO4[jVpqmE-@BCeOWW#%sO]j5YCV[+o+Di_pfgOaXL(cHpmYL7A;n".N[8modWo5T<@s+mcECg=U-'!6JAYC'Ue,N?'-%9?j%& %NDIJTY'+NcMm$uQ/k6f:I#\g#Gj7Rjl-tX=B0,^c")f"ia<t_.R(/DQSAtUg*5<YKeHf[X!&EaM)PD^':igY!)]qrmL3Dp=pBN6\ %(`KHU:T\>r9O?CbY/1B[b^?6G\@^0)%cA2#N>u.\n6&eXP-2h@qYfX1iaXW>^[]f/K/Pd7_#PGX1#*5F7)5*7T`Mcjk0&r-GBFOZ %=aeDJP_U@0M1M!IZW;Ic4q>Xu=f0d"*gh8HQa^MBUL6UN50t9<$oKK,k_EQCb8?\Lq+=5Y7]Zf]@l`f@MGWIs$%oaTm)]_ZaJ=@N %B[^'a\f09[OSS29Sq#U<.\Cq8KoMdU:ciL(;jLg\W40j]=f)n,5-S(13J7,0>,=nZgrf2=j=RQNDfs=2bE+bM2nu@p@YYjg`c+kZ %pEld/i-%JL%m(Y2RfRZI9IuiH=[7kQ93FLc8)dN[GYEu(TDK#[Z\*eraCcIYM]?*:GbOKq@W"=dBmfAtgE,F2]4Sd3CH6->n*ol` %D(\MnQHQ@YRVNf$Lj/bF+L@tNbA]IhA$0CV$4BkF?"XkI#60O'UG[*XE=H\oNTo(oe)3K<g&L]?bK8N?1BW]%FTgAQ&0F)$-V;_O %a[qX%<<KH2`;P=P`!"9o/[+FBM2i-4`)$$^KS0ELR0!q41uriNjfh._B_IP'4nD/]0^?Jr6bmB>P:Zu012Y3nkR<-'3JXkK5^k0' %Fdm[jF:!=.iep;_],D;M;ad$E@6J)liKm"O_X1PI$BoVJ@r1,tS\6rD]r<:3&&$4WD_f'[]?kjjf76H%@=IYH$9uW0U,Q/+<XeD$ %8=\IGp\Rq^7gSOuQ\1oT<th6dc%WuHm32UG6#B:ogV5/W;*4;5S%pOIl%i_GQVl"s=B^^oU=)k]Q%/MUqV$HukK3^R0VC01i)D-s %ab/A2<d19M95NZdQ7mO2],Mjal;'Mf&9VZDKC"#;1Z`$8P..pU(=DBO?T<X%>-O[.=@*aZaIm5=2[;W#EWTAu,CC1b<1.AN:2I2R %UM#6,3kRJ&03WN!P&$R)"e+Bdn(I9-(q9F=VhjWDE:D`dgmQE^_:P1!"maP!C:qF$/<;s8+LYIdc.-`07b``+3`Ir:bAkLV%H:oa %I'=`P<d_,ppjba?EB.#Y/;o8t6tejPLj\Z.TD[t-q<V2;'N?#dW?2D'/^sn6YRj,>m$H"+Z+NlZq@kopN4,m$GV_#2),I]Q"AX4K %3&\]\"^XVh/][,<kfW0/TFVISD=I8MKh6`%j-LN9plN1kS"M*%L84ut.iY8I>Tq.a9k5\o?Jo4siP=DHJbs%p2QlRY)f#M3=$1MH %id-3e-)!3WN%#,m=h"#(4pO:/$2l'`:qXlk*?TS(g`2ZunT\-+d(6;/%B"$$2JDf4``0=aH,/3^<.#UoDHZ98)kF)S0X5]Mg1dq^ %E\ls7lSPuccBapQ9-[HeB@(G^7O[-8%W)X6j^taspeifQ`eC\$3VqkX(9d@D7+c_&i_\H9>0E[[e?VHck*>ZGmq^>?b!0ln8R!bo %NXA@<G:t(H'-\MXZ(-XC^sOnX.Fh)CLEP(mR@L_u@u556\_ue),L;ZS7^E3P(8]N:mkr+92.5o\]*:K'@sg.b@?b6h@o'&AHR^t7 %Dj0%s,MtIVNE^DZ&)o@DU#?eaIT!]8rQkCGg(3NW*/N03%5RJE)phtoSc?N/aki.Q\.#/'H=c_SVuZ;u]qjOr-/)5)27qSKap$Q% %P+3To,toC/^CS%+d^;+'?g]U@l`;W>:%!D5"TSX&K]PiMVRh"T%tXV@&a5*)/mbHg+Sf+/5o74V!78j[^+&=jFg^kVHmFfnP8cc, %4U#q@nCpD6eCqP"U/*muBo2DR$3#>7<MbbK+),4l4A.?MojXQ4UL^"2fJ<_jOiIuQ2gc(DYm4=842A\*?qr'A%q+N/&]q8<VgfC< %jG=td&2j=(gr<se2D,5=3V+d?%KUL$0boh)_l$aH4f'Ppf>R!]gr,'_SlWTgm5_`[NbjT4=&f.pB1DI)`BjG1EdD>Jc/?-dft79q %Ht"'4]m_,Sp0P+,/?)H>#4U%^SN_TM+#p(Xc[!8rE9(J;78TQM0AT\e0sojZJ]BN,DQEpCPPdH2U/>Iq#)])rc0?SXNfstTO&Y@] %H@bHc&4YO\>W'LWd/[G]4thj"*f+if5q(7AjTtIAOGgr@#!sTI/;V`gEf+$;WX'q[mlas:<goNYVm"5',VI=j?2'HX;"U8\5DY?4 %)=N,d/gaJT%1MRM]Ttki56f%%PE'jm%;a(Tl8rZHmse)4"Fh"H+(ihJ+EV!DJTXqY!LoJ*@f0q`Y688C/c469Kb)6H]q>)=!#-`\ %.'(9>VIJUs?ja>>);BWQr1f*31(ghf^;)N#Ra,;SEA4?V!ij2'.1emfDQodQ4h%r]a@8^"Bd?2^''T-P)#f<900GIP\8=k6)][\# %:MB7Fs%[sMh@`+3"tUXV&r6rI,6jCj.f`^e0L`uB8*_J?/EdTdD%m4*V5=;laXZiKKbb0!%"C3M;\@:%14Vg+aXJsX/@lIZ*oNjU %m^-dc(e3tY1EhThLd3/U-cX:/VJ"g4%9hVlkTA-D-IPsi76,]'Q'NdtDK95U*6Ci[KncJ]2^i5QH;L9(pBg#!#Q.Lh7"^aRR&14] %L4oj"_'MK,3$:#PJ&/OQ=Ihk*/0*7sM%QHD8J*_Dk(*7l/FW[NF997*,Psh?!\&qKMrb*_'BdAefX&fQ#PlE`?OWCHSL#[d=u(`h %f0R/4+OXbXTJZ/0RUJtV2H,]C1M0TTE>SstO\ljH51\Lu#!'jj*Aa^](Q(LqIJkm(5]@MKPNp(INN/Cra,4!kop8Y=*G#(uL5p'O %)o0#lUF_g2GZ62.5&:R#IOT?*!C96YKaWH,fZ8;RQmfkL\H`Y+j$V@+`]5lUHt7L(GkOmXp(Asl5lAEFRX6>22=$)*r+tEK4>Zh: %0ui8$$Y,Gb$:jpVMeJaMVB6\9X%9dO7;^B37kT;AlbUg>WuhdWjA[c!@X\<g,\b<oCK'SifQ/;3=ueM=Rs&r`Iqn3J,TF5#rsP;V %OmhM[B(tE6$t&-H$B,k]Djh0:A4&^_Wp-mJN2mtY8-$6L&c!eG)sYsM#>b)IWHCTU3ktp9=ace/Q^2tt[H"t(6H+;r%6dREd:lr@ %T[o/O<#,HseT`g#)a-8SSjAG6.&@*;Oqn^J+XJHhMA6HiP8mXYfAf=^oV3f'/87sMS!<t<FilN#l,Q%_9LSYl+ETU(jES<#cJ^MD %4GaT]-qNofr&^;\%RicZ@.'?&A>c>;">P!`WPm1oj0[e";?]VtEE3B(44qVh&5qAB`abe&r1hJe4$<EiJOpZ++UbhBdf0o>2sY#` %1HA$$XRd`uF)G#?M1MnAbGtV"Nb6*>85p2#`9=,WEfJ?q\"G9I**HSd(,Z:m6ho5bL2.2?"!^t`SL<#^)rdM)N6%5Z'WG6_@l1$g %$BA\I7a\D!$OiAV`]XP?Y%)qnHo;W5kh5R%k1Jk;p6c@[pA$N9m!2Ff9C&)@-pQ3=nMU6dgA/>l_*nmZ;m'EQBKj\5m&[s[<^Qs3 %Hch0S!/,:7T5:E5aKitXmLE8q]BbX=(e7+:f/9:0eTEq$Y?!kMl"[dKLKNst79#3H_)(-g1$f^M5\:"R:b1Kr9r[RsY^m:Udh]5G %].\aR69mk2a$F'20U,KBECp49c20q!+@kJr!hZcQOuN?+%4<O>OC<AO+ik]IV[&71PpY?<7m5a6&QIbbRGEO4,;q7gQ892(r,?Eq %jt0dOg)-Ou9i`#-D#U/rq5P`"%==E*eX9@:A*,ilh4Cs7`t(,8p?nH'qjpr4fV1#/4goh)c2N.s0/6ASL>_+AY'&Z!AQOOXeM$;% %UC:DUPPqkM-l:N:8=&ecjU=\aS>%cRl@]2p2(+bWG%uNhEk3@"Z+,^HYW@OAd(_."@Mi';G`('X/0FG/Z0Yk)rIp$I)P\,!q#PW7 %"7N=]N.A&Deke\oY>H%s$-GC`$Y2%]4!=Sg?=KNC6BPs;#,BgS6r2N]n>^PEGt]rXG$4%9?56Mu-F=maEdBJ;)KgUg[=B3hjrKe& %c034O2o#D6.bauU-7CL50KfdT/Gq6,Q,I<O.FXQ\WDjjr/IJ(Q7&g&0?njW#)8AeJilF?\m,0[=NkCKn*b\iO%>i(4#pD_#e$,F` %?t093<m)'%`iHB[s(Fh?\$"5<2K#(g'l?'VcrRMnlccJEj4<VPDNqt+%)gdanJ$d@3AUBCofK?0U/P2_PTpQF7`g3Xj0ZUJiQUW< %77847<bup![VHg%[fi7;p&W+Ue,Yo'4Tc1&>9W;u3($Y$!h/;KnM1JS(r_b%P-DgM-qQR/h8c/Tisk,MFKdEYT@kI^gcg4:I&tJ8 %mjM3r5nFjBAcY674:*@"75:"EpYJl7_8dK>GbGgLYS:"S">N=@$XQ5F",;T>dOhl\g'ST7[s,sT?aB$FD;N4[]=(e5L`.%QD<4j- %aAC9oFqGK[fai]K\/CUtB-OV(ig80UlU+g:4,MB*`hP$/:=QT_h*1A5*:9%&Nhduo;X-5.,+#;(A2k%Zi#mVS"MPebW3!KI[BiNo %lERsF@,5L$_de9-f+BnNkJaH.R\Q%rIpH?H@omk)Q5#7nFZCaQns/5U'D"J8?_-;InhOt7WM)M`?Im2kEN6R"^P(Lbj"XX`pGTn$ %.:*MW'83br[%).Hd)lZ"q$i@(a(]X]M<QaHSh&e:NuG_Q.UF,gdP4m[2g"*cnFn9$@]154.jn5S1W8F]LGlO09;15k.h<6UkTU3Y %]W>>0l?^t@cn=2Y@O3!A_dpa*r!4":"SDrXP6+i%?if323L(pa:_iU9dl=LAkM_S+64AK+R`a6FGaa>uCh;XUp4\e0o-:$t$`GWM %ii.@oo*_2^*\lG;%,^C4n2:-U!J9cai.]]H-*]cm;)[X9q0+u$9pkq-%(Q1k+4X1\jr<p\\hRMnUP0POeYlp$^oaS@?<3K`Bf*:F %JD_\R":+nKrjO8G52d!mYbNnWr+Y(bYe01-atN9Jc\GqsEI\H")C-oqO3VOd"'c$?<X4sp6t4UJe>0k]`IH214TZ$.b:4`ER/YN\ %<>@=E.CKr5.4GG",,>@_T+`lD>Cc)^r5@!Q4p!qa-O<(s9:=6jiPJg)*jiYF^UWpT+Gd\c"En3*go<V*!0gS<o*f>kq6+2o=i-M? %8D,OAVEoVTFC-k$4:%k97C)!q]j$^pZN.Ii0>fL4(Wj5"rl&p0>D>hJ89D=^=pfC]CmN^8A2N+r);^[9oij>XR+MdI"p@2'cYFD( %;m\bW%OXf#Ssn;"kR*]W`"gUMM.$!CEga6I]`\Il@Mg>U*[0`d[L`j&OPuKP(57<DQsES7RkM(9^++5,K?)%=/-<3=b8Q\T`\:d> %C\'0B)8gJ^YC$-WkXGp#`$PNQeXq(?lu:F<!+&146=m+F7m2Ij92CWe.%VDmof2O:_O+l)ab*b/LXE>'bgkk7bU4#:=?a`:]9%[Z %-cjdE5CmcBZ=66XkoD+5)Fe-i4!GND:,1bWWLCqtBLE0@_PAGRloC2p0sp%>fR/D\RGJ@LW=?/Jd*3poRD_3*3-:"Y37]A-.Y6<$ %"5&hH)co(_#I#mB/NN;TTS5+F:b;T$J4ik`!Us58$pr0!Lf?dGJK(ptkr:e`E1.>/Wu)4Q(ubnZ3=LRjY]Gp4'8/r)b^^^Vo[.jO %WG!.H^&XERQ3m^sU,7H(`(?AQ^5(.9ME"*+)*+iE0^<>&H3K:c#%Yjpic6,X+V35#@p[G(35Gf/&Pa$P9:fVn&YZnm=npJJW1cUs %C8chVUKq%B$p*jn+s+%XATIra=#YZsLu)5F90oOlS;/8SHmH)-TjW%#/rI)5_s1L\KVu!Zj[R0UB?]:miXdWKR63X:-_qG_HYT7` %7#3*_'Kb/3,ro;u6n'TOp0KX7#O1&0V4+ZDPLJM/Ee5nJZ6M+F]b1UD*$)95"S#_-)+[dT^iMYt_!=>V\^(,Fo)(:!*pVirj8mj8 %E1)n+JLUtLVZ68XcH>ArD4a2ko(:^$Io/r@[Ca.lUV-iR?moc+]@Z9ceFS*(GRa/q,]J8WJHM\n:$;XOpubt1QQ-c.MgLOE2^AWN %>!;Bp)a^4Lp2%(i^MQa=N8ks[kR<,30P<BK]gl$CYQLo!b$#f(N4'3eBV.`KGk7.^S(!6'LN^o*!'c_fjpJg@3+le?83MR/<cJRu %&t:]Q*62U8,`;bkY2YX"f?0eKifl2'>%,#rkdJj(]Yiign9WH4FPr6id47=$GDa2d&3X!\9k^"BrgZ]G>Hn$?EZB]c/nigk,o%ao %O^c(-T"jPt7<&qGDk[4a$;KSS+Bm4N<YkaAU[=+F:)[kOKnP]64c"(9f<c1m2a_5K2*=tiBQhA8=OW9TJ`_l*Qms7<n:W)<5=SKU %n:6;4RNX#TOVUL<#;NB!)FA%Z`e0"_lo5[Z$DVZ8aQT@TV.<N:!-nfK&%.bZC:Mu'<<KTe/0(l#@'gL(([+PD@+Z@fXtTh`lBtGB %gG4Uc=mS\O;H&&bDE!CN=@TD;b@i/$8?%^IMr7\QJIQb<>BuHH6.!g#)6>?(i3Q;1:GW\F#I"!1kL%ou76OID)0#%U(DQP[>rH'- %d;GU;dlq\o#GsK`W9'3_mFI!'I^Im1PGJ<ii&n_.8%YAp;Th*gmE>f#r7KDc=c%Ze)Rd:*_b(9jY_K&pZZh!OD+50Qgd7*tIXmG& %\4t=I7$Lk=JT$EEFO<s=S?C^nHIH:J\+_5bPEV)uilR35\>V.R$%YfrmVakL3eKX,dF:@1p"OoJF85o3s+O*td*s,:c5_@CX?f"; %GZE)oMOiodqs#bt1ZI0((j.V8eIT5LK&45\TlU4Q"8q??W0k=\B"f/`Ejut^hWN0;!0n>d'b5;)eIOaXC>1'PIG,#bDKKUqXCQt^ %?hA.&&L7hBpo1S%q4fHLg$$8%YE02S(K5*as&Z3YoYW'&/'B5uADpZWiSDV@V*0TV`;0Gd9C&0'f')*#WBh^N;KKejmido.QQ>D_ %.<JUM4Rnu7fE.9p%!/?q[01A*7M?RoJ?V@6*YBWJDnt+"mSn/0)e&FBdmH24@h$!OKUij17D]n#G6PK?@9D1l#e51*3LgNGp6j1Z %+Xk]tGkIg`Mp(EuYrk*/Vc@/JjC0Ti,o;4Z3fF/1RSYat<!X]J3&pc?B)cm0;GeegaVkAm1M/d<7TQiG]R!H\+]*pI'cuP"CE^6> %`u/-e6TR2:W+?Pm6)tU:X9ZW"fTZ-fqh2(@[r31V7Dff[`&55pZ.1'pEeRQ':?MtdDV`dZmV#nZJ:sh2k/Qd/TM![Bj;qZ6"/id9 %FB"4iE_PEu6>q-GcmddV"8%.<$0UN+aI8(W!!sF'iVA3V3<FI(faHiHTZgf;B>\s?N,$_*^eplWYLW4;EPub>4OT/=j5"UlgleHC %-V+Hkck7`G`26QW@oP?SS92nH+5hSIfq)l"ABK=$bjKjX<fha'Th+VAf_jSH:NY:=&2cf@0-hl]mY\`&I7IPid)KnEBo>OQJ>!dP %U^!ig]7JX&46^5?Zud1M2_tBEXhDWg0\6JV=-#NWPV&Ke90RFXe/c3GE0'*lJ+RDFfPST:7WfsOSX!ii`4D&0H2.OE3#-PIR$jSf %1+HL*rB31O!\lTu;[:unl-t7KD1\q0<&m'a!XF,3/..Y`7uj-:$cFpZA"`)2.b+YI/S@lQ7a<'PT3q.rkEZ09_L8EVSdXb&\-s9a %$8hn!?n],(_Bm'AUGk@GY\ZF,a,^$tCi^ZS(FO]6\Es%S#]e(IT:T5_&'`IC$M8mu?q,hi3W<(gGrg*lrgR\`&S'N0;*^m7K:I+: %WQ0%hW*[TB!Q</Y][<$<n<WcnT/k8$WsAnVe=uho094tHV2LXmV=coR5/[7o3e5RY"SejJ)Ihj@,hfi*R3Ve[=\J^PEbCh/4BTCI %QK<Qp%-QQ+Dq$11IKKu[A0fS'BVI=6@T=oi;aH(1Zf4GnJ!n-C"qUoi].q,Ff'-Wc\bpn0FS)!qhQs.T2YMFD9`\W$4DOaE4Pc>9 %m")e;qh"W)DJ+H#)*oYt3op?rUruPdG=*cjqDXD'Xs06`YQ#R53et<_2*NPfrHD';XOXB7=0I,KGkoh]"on%dZ_,RI=Ru>*B4WTa %h>EsH9\tiiis+!GMmrrigI=dAi#E@,ibX,f!ScO9Y5_rN&qrLToc]L_3t!?Wau0/C5O.e2F*>VHdh(Y,L4?7>;'aE*e5;$<>'PQb %rA'!ss!H4_+X+hlS4R+PklnZgZm"28Lk4Zm[,us)Og-$[)%'_a6Rcb=BW+,!1`&_K;/@97Ch^&4:kY8e:OM*H`dh(A%<1?(U8c/F %AgiQA8KQrPd,dHLTEIN^1cuYOB+_30BRmB-)$KS#iM-mm]r5F+["\J/^^QI<?X,ar8DPFLabm<iL&o?'1^+m=rsq:4RBXiM+E;EA %J:8X/N$#k)/3W<tA2?DRPT80`8g?.Mg6,B;K(,`JW)RI8>>Qqh^p1K;88MDoY`:^eTi_G1!a9!?U-eQn.!T:=K)lmce!0NP!(i2^ %N:<#8Ei>t@<iCLV);suA^fo(6h6:G.d'b!\f-4]K[#b-`_h</F*'kc?M"s%Z<.J]#[:/#t`p!\-K5)=B>$'JZ*Hbs3(;rRKPdG*3 %85G`l"3$r>1h^;(@1afdW"9fRWi/7AIYu<&dBe\P*Pp0WH)F[D\LDsY'D?sJ`Mutg0&E6:Nd:W'-jWD.Ut>n<:IiR4JPs^P2_A(- %TI7:A[C)5?M1Z8PC2gF[W&a(Pb`;eW+/jGZ>tld2L/h1KKVd'SQM(FgdG72"/$D8/&/6?m(5.QbF3ZNQ%W.9FKg7oiL_1.uI.5gN %&@_38hD@D$Ib%V)LYC<S!8/pfF/t)R1%.O7E"b@3"HZi:N2V;IE<KT<@)YqcPHsY`cZR0(jLqW4GltYoD&cYu`_[$%C'28tgq>^s %Io+FhZE(ZVY-XmuVl-H]0E6KLHNMO%g(A.?6qboL##^<:DP2]@3E`k;LIuk9!sJ\g4[.%tPJI>nNb8Tu2e<,#N3fum,I*%,+aEOi %_PBa?&*r2t7Wuu'c[GRlSYSK-&g[E,L4JBl$Ng%M:ZhT\,8\bQcqUB5E16,.l"8=o'6Ou[:8OF7UR/N51G[_%lE>WHDAIj23p%PP %4BoJc,PD`@'HB0d8lMrL#GKg6h)lepe;SCcNehjRf`m,-.P'.$%aBS[;;k3"?058iciDG_8ML`;E^B^"UuL:Nr/V8W#6RY@^9PsU %Ga,JU4oSR.c39^QnkZ#dQ47!n:e[#17#l"f&b1>'B85?u:]WH[SnDaK^A-'%1CS^-qlf'4"We(H5AR!9Fa]sa^PHC]+pif;A+3X8 %S;WMe[CoG'CNUj4W%[G1TctBklt&afR3%=A9_mS>-qEV/2fq4APl\#fX8#hfZNJEQ%b<C7Sr1$eSq&#\2#t"XnAIT%Js)m[p.@+[ %#@r+TX.a?raP8L#@rUT;#$?'l\=5AJ4k5j_(Se)W4U#=XQ`U4c5W&rNK1MIElEu4>Ja/2Fa,7$U>jKjjk!m)ME_TEQ9<8Zh8HFB: %@l+u[eBh.*],YU09%WWFj^'W%f92CE/#ilp)5sWFWqV,jeJ'`VXD-5N&.0Y6b7AMTUIZ8s$=#2S[g8CZjVC-DQCBO>DQ=p9=r]+1 %\-8hrLpe-7hJn'9j<LabJ0hC/fmWWHFk'"+gji"8PsknUW>rLETE\RF(CfRHfl@6WScT;p'$og'+\:-Y:^ep14LiP>lX6u/-:h#S %.rh0$($i5;;'-bd?0%#[aM>@En$3i?1[_?CL/\BdlOh%aIZQHY*A^[N\uY-iSL*o\aRP2UJ5?r_>R(Xtl<@e.MZR;e(S7O2B8?Us %PC6/+!%u[;Na]HoW9eNg.#\^$lS=6J*8!cLQ<AJkW?d3fVFBX_`^8Kc-TW.u=KGmR(,>TBl,Ocu)''$s9O+BfBD>J+^1iTM,mC\` %Z#?RR(u)q=M!jT-KE.E4+gV3';ibN=/8`h'S0Okj9H)PQ+8JdVK7P[HrAj%S$IOA+7?#4iX<5qs%BNG_31Zm$\#>p-%0tZ9cHtuE %SQni]0NF4L#].:s/1).,SHBl4C]t\+aGQ5GF^1a7;rh=QjknMN@@;ZK(&AIE=)NSbK$76Y+:b&ufHBKY@d'qqX=pJBU?[OGr!5#+ %a2`-:E$PM$"c>g7/7qU-du"V@3X+UN-t<Xu'Z3C4=I-MI4G[8A+tGuBcli[[3tg"WME;O]OJ%:V"KV_'C,q#+So!oPaMf%E9_9;- %opIB,U>7W#@hE2<Q.U*0&q.6aWMC3GX2t+0R!Zl;_fZ9Y"j'j31`FL-X-RS4bGiX)GuidWUGq^5Z,H)c)i"]a-7ApKAICtE&6&d2 %PeftbO(+QAifF3]UD=N&,):s<2"3Pa9AK,Q@-KX=e]WN9VXgQC;A;-[!h(!\B]*`fcp1&4-3$!2h8pi/M,&cs5t(eT3/^='J<GhQ %i9@:8kY&$]d^YCs%VGh<<A+(I9dXmJ1fNhP=R3[(=u/D6!U;*R%u"FO1"%"u]i!lg99s,aWoG+Vof,O*;j:%3?C#V)3?E0`QYF`S %qoDVCWe[UBNeq>t]#<rg&+XCS;JD=^'-O(kJsA)_LB\JR3A*dS+UXZD_e0=4;0Accf1LmpL>i"qF!;JY$SsL@W^;7VoFqI$\jZNl %]PW1,+XL!4'tGb96c;X='!Nd8.P'5A[0aC40!PJ2C]+6C:,L\Wek/;c:lroO<[GGe.)W-n6Ag@+gT<#Z06f7H=pgQ]Y`46ljGo+W %8VH/$NffLQ4AM*V6eNSCA#'M#\tZWri<`*oc!4D(HoRit7ZfUt"eUFe'.#(n5Q`cTO2WLTLp6q)KNsk*O2Ao.GI6,H;F?LX&R#HO %%[@JI!WL6qk%d.Rh=]2IHcU>c<dT2V!!=oBS'SNi@?KQo%fJb%-<7FOJ<dD`Jth'1PZ+qk!##bm`-hc)*4WOfoBOEJO<Np&B7hoi %&3"1S!dO-84<5$S(Co1j0g@'O8@c[3UhI@,99Tu7GWP<q8'..H@`ZECYb2uC!+uO3YI.mqYB9C(_1g'B1\5@,ojT@>@efT^kTZ&h %\AE3+_&uX0!j1P_npH.@@!eJ$S=mp^4@l:Gj"PKW-[:gH:@PGpTo*?O>j'I90$f\,L#ab;jt&S<Uu;'D7b4L>7C-Ti.G?.=8m"A` %[A/ieoe/k2QMPpjn<ULp(I*E:@XVn0^C%%*ZE=I9]:oi;_,SKlaX9HR.[HrPS;N=G;V%Y]^]7jBf^Xe\Y)t;]AZ\2u6700m7WhER %hN3Wt)dnqo'$>r2.6L^q_He]1hhndE\e`(,,l^-.elr87d.?B5?I,?!n-\]Ccj-K(!A7C8a>2dNnaR75h0XZ0C+*:!oG>lh.>?&7 %5!l!@-LdYVW$W7(<%[A"SJeqa>Er^Ck0Mmb`DVeo#1_Mo[\>m(%o.(MX)dUE!_0?s3nduR,s'*=Tr2]r,A3Ae4:TERkd%/XnVIEE %1A9Ru$KC,LEc8a]USM#G8lP0q*<gb%RF%@:)?(gkgA4K/2]@GY>t!L)d.u[T^'-W-T_@FA!\q.I=_oiVCG[^Uo*;'=7ECB'*+b8^ %QX$UE-DCg3E=s<=]aWVk&dcAmc?R,J*m.'_BcnrZ3?`71MPZ>]]FQCNWh8pHO&4-WN%Cj,-ucHqQZT!\&AY)rPptds\Tf;[a%9,@ %(pJoG1+AZO$W\H4Xn[KSP>r\N!U$DO,oo=DMAhe?:Q[Y*@Y!4u")Hme8PFYIf#6O-VW./c7^3?FBf]f3A`]FA1:"^S@LZH98.JG< %=,"6qIg]9adn)fh>72Th$C$uoC*G5PMj,o6T`$-L3),V]&T\Uphq%YV+.A+kD>.Zq4&5!\E:jda5pe@)Cpc\&Z6E3KYuq\,0j/JH %$^Cn\\Kp7A>JNUq&h.@jE[$2mKkVt5jiHl78hMFNXj5-J%HBq\'W"qmeo3k#muSt,%_'66"1WcbAJ<2h)L!n%\Oa*2/>:$6a+).% %_J%=Ohk*)0:g?j4fE:cW,69Bb3^QnS7K\:<kcI^4,Sg*b=A+AW^&pctO]%#gA.C`A+;R.CcG&l0!c8=W<1'I\PCJrd/f_VqaumlF %1/S[g4#?c1()-]pkq'Va"2T-6`2\FXZ7sgNCpkG]=[f`@Th)[kS/B,:Hu_62e%9E#J3qYN97d=DUuP7EIAoc$!(peo!MM$8=]eb[ %H66Qu&&&t$^+W8=>R/?pJ7SoRMU$c^H0*^qnVf_#`TOkmQ!da*<f#^$,j3A9ceVCD9LAtNk+G&kLOs-@nl;+C1b'khd[oV&lO(^I %*mm`G.W4<>U(md+"q5OV:d7tl`-@OfMn>P"%]U6h3^(8+XIYS0#jd0s)S+EcY70k>Zi?E;PGH<#9F^KVOO@^gZb\4gM)L4&IEW]s %iW]673GF?TLZ'9O5[Ycca@**)+:q()jp7Z$r)N9AHG^!pU*q@d,<Vp$(+r'AjS_\g,Zu.Z4cfda-:H5G>^\p<S-Ll);+`o*,03!8 %)NJdT[?G01abTta/Bf@\#f$dAlN?P]c52)GD\ACIZtqJ5#;h.H\7U#o=K$=5W!@K+Hl2C(eXEmF69pVAV*DgR*V6:"->k"LO'\Es %X[aB>7d=u4:`*A9IAKK+Y.-<+oM3KZ".?/cD_O`M-HF3$j8l'&*4%/VM6\6L+1-QjWS/qoLgX+g,U7iK4%Xu,L1EXoQPA43e<5?I %W"jNl&r64>0/i3XY<KJDU"g99%C/rqJc9XK&OK2hC-l;<_2fR]aAUAh'#MHYUbrt81;pqZ-nAeph]/\<P(2<8#2pn*QkSL5Q6QNq %r8nP[:9jlTo#D^`U2ZTeoVM`_cSHmNken,<4s1Kr1Ii;/rE4b6j1)o+\r_=_\%.f,fBQalFlt&!%&B@Y[[E+Bkl=F_3ma$`:1l74 %U<rF#St2UE(rs$Sq.tpc1(R!,O]&pj6XTP+6,k%Eit6,1h+=\WAo=+p`6j>RL[4q0IM?%P,RtHtb<i02)X)/20)a@fS"rV'&nZL= %0aE^^3%)Zn_N66.$r,(]#>fMPJjUUqe;rsM%pln6NZIOQZP*HF-5Z4;O+$ONp2gHXq:MY<Q`R*+^/JW&#hT5+#Disp:%0`2rXB'. %n1N[Z$@jJ/8\j6&]gd]20rYe'\PkDi1>/&9N(G`[-m_eJL'4]MWbGbi2;4%Q;Tg\taJp*a&ab3XPt24Q3g"JRo>!$D)<Ci-@sUZ/ %(SPbE0<$7^&/7O;7'23L%@hJ!$(aTg8?lVl=m2=&4!*]@*C/1b87LH2!MN3n>-&U&K[X_ZIY@R?'Hgmih(X^+JHVA$6ZHO)Q6Lkt %/>H<0Q0-$r5b[3[V]U'*&-bsG1s8*U#WZ?F*oV,*&-4LqR5J?Q#7V.IJpaMJiR3?J(drP!?\n6L-AiQ?&8`^)++W__6M"a!R4``3 %U_Q.u6?fabcQ_FM1Gnbp*]#RM&^P=X8i29f:M;B3&LStYD!T<,E"!T2YA(T,:lJ&<&Er*sLLKeE#8#Rh"p9h]K=\./?fJSJHhh6& %RU:M05ReCX@aG^tMD+d[a#$,O.?6<Q>F0rHSfFF,!Qm7+e2k&<ChBFV!#gm@Wn>NQ5X:\;-q;@0P.2q@6qD7)RF.3X5SSmWKG;J! %+*dYohE`[/d5qShjWMSVX9Y_\ZeEm?2lMMcd@WX^S1=WXaH5RMO`5+k(2`l_*Pn7alsI#ZWW?];HOgk1)5Iar=U<CVOIMW<:8BbE %3Z(k"=<UH?D-rYN8^4SHqMmg0=[Kt@>T"5X#Q:&egTV6:ilF74d,&jiXb2eoT0&4%UOBA5.qZgV>YbhO!N"3B"Q1K:FUna,i\CrQ %7W)&!\%qTM35NO39T?D`cO6<.%U^-4k%0;C*eJKRi9%jc,7>p=Z<mUJ%#u]PZSD%ua#lEng%R9tB-nd4$F:=`mi5_5NMX!)$VoM# %\NU"ZUPoI[C\>LHn?\ud2^7f%B,Th\#s?c_.*O0`c!V\BW^PP1&7!V-KU\jA4,?Ir!q]M^A/_0k`Y66oRPeWY$\C0e<m_-\ZV<ba %9P!lBOND.W<cVG/:Kn$b@&ai0;DBmtd1/ob1`c4OPp@_*n=uC$N:O;(o4KpjosA:&&.n^'?dj/VR>PoJ32Jt:WG+,I!/XJH1R=O2 %V`\,cE<6E;d!!=`8;a`\KM<FeZ->D6fgo9XL:Ad/6>"ICB8]6`..<H'+`RCS[gAteqH-6lF7ot-XB;A^ABnN/9HO@4,&&stY(2S3 %-@@+cedZ,&,_l]S<#A("oeJaVbg8\2O(58][Z79ND'6g]cN-@e)'K;H;#o;JOfs1%le)cdT/m@q)=Y$"Tit1C3G*Dc+fV\?3W1%^ %Q'Cg6.HU8rQX4bb3Z'nOi)p(p)YUI5-BTKQ!]UfaF"&1r5i4#k,FT+_dP/p8-S0,ah6C+?/ee;B,No\C!'rl=9F)XeSp816d!/tO %+[53$Dof`*2\)RKEd&'D1GW:"(Cl:L6(4&as);Pd^8f)=nmaGjO9fKTc:^e;GkOF2<94-Vk!;I`b7Ol/IEbURQ!ln^$nAfVd:;22 %P6C7;r6CZ#1f%BuWU]ZAZ#e$u-teJ>mlm]Q?l2k%T+WP8*9.1"Mo9U&WZKU#UMD*ZQG&/a,dgHMg_u"7Khn-F<l&:u)dqe;`N9bU %$E)ZYet&H=N_^+_Q)GS.T,GPWg=P@<GEb(eLeSpgn?lQ-Q6SA;>G6@^PYus-:?8MUOe;:PX<qb['.oB@-8<.\$F5$V>PI,f!66PI %hZ,m>7:UsaA)*$H22uYmT64PlR$*U4\YFg+HpJAH6P>`*N"sp!fd=X&Ockq4?lq'j"5%aaU'-DU\sW^tT!BJgYfa)2=poGm,*H,e %*M`mnMs'7PpXXRBYm[irOQTkg4@!dDU]dl$4DNkK<Y>q&L@SJ=.(ic@RD(c#H66HJ#kD.JdXe7D"^8kdFblnM#cd5W?A%0t!N-O4 %=#^DOl-POZbI$F<WBln.=nA]/o`b*G'W`OC_]%,AZ`sP^'4F)3J?l=lH!$''`Hq^>PEIktc'8+Xq5H#);ZjGL5A-..Cs7rZEIDp- %HL^%Kl0\/giqnqg?Pi?1,K>E:"dB>);C7'U.G57<nqR,FILmd[K)DMUH(@nGSH=Cbd834e_J*mah824S0[p[i&cugXR?3=LZ^e1' %<&.G#:S3`5DQ9usKs_AC'NkJ\LSeMr(^g[,;n7Gr.2Ga=ol<Tj>i98BL*.Xkkrbj61RfLDh]XS5LWu%)aA>b3A[oFSm6aHP%dL8b %4B?Q4QSJ.b4+^ML#@Jt&:jH#mS7Gl512/K*paSC;F+PO]hWF+@JV7c[DhAVWKHrs%3XR<t5Z/k`UA'ieoo1.^pffXXoaPtB6&6kH %HiUc\`'XY-KYW@@KW&q\%tXH<%E$&C`JmH'pL2u8bQpLBdjn@rT$2b$\24jX*pOrh&@EM,#V^m9@kVLT!afR?b>HUl_Pr*KTV^1- %d7/X3Qss$)4sR(9O\A70;uCXnIR<HKP:4l^IiP6o$ri<D49pS]%Ufo2RRB]h57.kO;?.P,Br6GH1)2"SOX&-U5[+H#To;MjQo9RL %o0?-Q%)[dli\E(%=IHuMkJ.+-5Sjs\H;#Eu?[%B(1ka.AWun-@efE=h$k@t\gf&0j;i7+H.%$)Uk"I$3jWL@WJ<U'TU8Ko[aCr.o %]c5&[1(_#iP-L90,E<1A1+B78Jdtm(_Kbdn*aj*+,)`4ICjB,6ij-$#Y'q&"-V!pL5hUi-^Hj+[`rS"n"bI:jqH7dA&0M""X<J/) %lMqMj9[#7'?o9h.&L7&u%%^.4W(!C)IQ+0.5"]fpLEc?nWF[2(oEp`]X;g`@0uF78[="+2];5cbA`0eSQ2h1ZH-VdWQaj/RKEZlQ %E^bQk68Xcd:8glTq3S?YP_h^4:PkndbR%,J#5-gl&_^'8JG1:^%^cI;_jtIod>?GD$J=0B..*Hr%NtM)J_6F5Z3Z$+":Af[J;?ZH %E-3omiE<<`N^`XSN[r'C[2'<8Y`2h&XVG/'beSFk<X/G"Z%<g)A`IecP5bPbY09d:jZHW^8/NPGI=Y]-<u)u-e<']]WMhX-TeZUE %C)d^B,B'9W*P)Df%Qk7FW5-P&(->9"!P:S=#9nMUTsNE6(0dZ-:lmGIH"sjl*Rt8.7:9dN;.E64ZV.Ye#S2aOWc5NmHE"FWi&8Y) %bX=-1SY_9=3X:jZF-K,6-_@_;Z<[OCWSs0t%?#CgiAdH\U?5?:Lhnr$\9Nc""'J9?ZiZ>RONrdfR6?tV7OKoK/1j.f.u5Xg^5V6r %!&`Y7ETN`;ZN:pSTEqof_I?X;((VdodRU>Q+=jsX0kUrD,oI[NL^c9qF%mh1K]N$+#FR:mA'-:VlYmOnDf,b$&(X"!1QO>s1O,7k %>a^0<[,nnX>H*hhi^aqu)16,QXi/oR+L=hg9Q]4>qgihJ@(24B)e?tJq&BJ54u;t=$uLnrg^<[7,in!'"XL7Jh$OW5O*:d2eHtAl %6M0K)O@]^D9EB/F,6\D^BkP;_UoOWOO]hq,T0N^&are\UjAJQW@p<]3B=<MQIQ-cDJkQGr:^Sk<PT7j0FGY8"8#C,'Tk405cO.`0 %3+d#[]Y"HqP^I%o0VE:`C+Z:7_,kV(Q9>h:b5IPf8UTNq$KqY%6H.$A8t?+a+`]2d:s)=\'Z4`8jZj"U.<,]KNn[?$4<VKR/C],6 %mRI1%9],tpM:p$jpJMcFL3*d_j_Cp_&nY8`:L[qB66VuEO`GD3=:Q8k5br(f%tKEinZ`f'@/#aGMN\CcR,lPI-d/BAT7T1"3Ia.4 %#,&s:*gg`!_??N<CpfHX-pT6?c"qqo$k>-t^Z@i`'+V=oH2!QX`1kK`1?)prg,8XQ_6&71'<<,+!"'KMA@e@4+J^tXr&tdm64r)d %&LO>+9b2XP.X^0L!0*jJ=XK$,!">(0Bc7jK7)9LkS6![l/3#.Nf7j<fln37D3E0l>q+K6Ylj9Vi3G^;m:ptm%ER]+=1!UE#`UaGq %6NSZMB"j??KF<Z)+b8MSaf'2p,M*:tc7.W`6g[d+d39lNAoT0b"<u-EahVP'>&=tf;G=g`pa:m"<@h0ugm0N','jh9EnIZI*"WEY %F:HOf-RhLZ5\6-?U)9-6@m/kZ8I#[gfAM;jMUcT,Xb#uk5j#aXJWG.uXb.0tMs^b#^OdboR!Uu+S-F+o%%oONY:DXUXoLia)A4g_ %ER>HI0m(Y-MN$Sn,,]mPAqPOA:^,M+O!YR<0`bBCK"iG)PTGoABG6'/!DuAkjA:Zt%LT8E$6EJK44'0QNeG>_"`-YuLk/+6Ch`\7 %=r!Tt$D#!>a;.OfR^S5P!;<iDiY*u!`"_h<4t)Hm031=l1$VaN_'"_d+:B+Dm[7)K+lse$hN0!(c]s_@)hpoCXAY9GH@Y8U'L7@Y %fh.qHPe.78OD9UH$mm@_'6=18BRrJ'";"$enF10Z5f$E7JX7Q`)p0G**)m_8652)V;guIi4+Gg9Iln!(js@g?":0nla%]!G6>6EK %>b`?NY'C(8cWD;$&hHs9P_5HZ3XdWAp7_b""b@90L6JA5c&5QE-oP=1!J&(D2MZFum>#H]bNLF_r#)l"AM"Ou.k^N$)=98,[M!HZ %P8#L9f_`6\5olif^+.3HLWT!A;m@Ns+HM-J:El=?/@C.3!$%8K_Fs@n=;JXWeR$[E.g]@%\ZBVE:-$0^;A^Z/lFj1='qiD\F=cIL %Ng2[T.?"pJaV?RB_,!?CU3*Q*>f10%3TU=I30IbUc8lpq,VLEA(8??CQmkX+3D#un!*rqWbX!Wh'a5dX*,/VbbSp3_G_VrZ<jB7N %h*jq^TIIPg`PVWV">>"KK+j+(cX:oBb7#)O&_@TGd'T<k6:,Ie;iu*g5Oc!I+D$[NcjIWa#NSV]VFecmTOS+sKZc>J>tB!b_2gm` %SVYoPK0a"bN3B)f0FcBKCITij:5X5r"p4AIBt5qd(]Z0$;.TeIhP8]%ZiraA[,0G97BmGRH#Ob]eCoIs4k<kL+C5aC`fR^u2U%j+ %;h/_<@7FJS*$L6dB[.[EZJ+6+">^7F&$B8k$%&7taLsu.%$+>Y^RU2^;mr,:[@Af]%20shJI.OEfZA\n*uuWZr+L`h+2q!HAY'k! %/X#O+FS-f(^_"Q+.\4Kh@DoOg"L=D_QI.1:mXbd3_,j'>ORrSGN8P>#e'pnqR)La9#Xb[e#6FX</Ks'IC-r8^-`Q4W(rW9!?u*p? %4i!^*j7OE\bf(5':)lU*]>,_md9n:45GV=l[Wg+V!'0"oh@i*ZCV3)PU[SOM':BjC3Anms8+&cQ*C.eA*&6O4U&!0FQ8T<Z_RYqr %PR@(\KSTXU<tKV)R-BdIE>`8pW*"?lY$n\=.$`OAC/eHK#aiIpi;tc'd:>TI-<6R=cp?Y9K)*l%X>@B<&rUg=4"A].:P>!fS0O%/ %IJdhc5oDaZMp9@\"jJ6GB'^>E.5UI)"['!i.Bb_5&B*[4:,K?%9ED#$n4`D7SIm#H=Eg8FHHPrL9rJ7]7XDB<BX.55L70J/Ee4!. %o&8L8B4qqa1BHK#<X]am*J5sqUg-/e6Ai*s8=Ym"4k8FZUP[DY4>87IG&1Wiq.sa[OiD/m0ns]\-1Q%k:Z[VD\1'.#*&:%JnGB#' %Ouj7k(jQdMSX##qZ/S/[@sZWaYZtDW!TdEi^tcDmifg3$Os5&`W[&b<0WM+p+<t>[cmb0EdLW"V;>,JR)]>5AFD1h'!2ER;C`7sh %^t,7!0shV[le*&Q[ZP&ESV4iYs6RGp65rGG55a4:pRoI@`XC/j@Z1a%Yd(Hm!AA[(&OM#,O;(8Gj7eVl[=@k>V7KkME^D*r7['6s %I8jKX?-B4R5)3>h$qR>@dC_PPZHHQ(ii\t*gJ*5K_1r+V`sFi!Ps%Wg,@gjPA"pN3@bmN:.-dhb8]faR`a5K>"MW*(oI;P"6'*?+ %h$'aV/DsrG!&_mM';X#T+;B4>5mG>F&4kP@+AF'^Mj9\V061(\2p!fX3T1tl,q?G:1"&_Dkg9G3'Nj-$Pl(#_Y`cP08.NrGbSX5W %"Ek3)96&UY_s\+Wa=KMZk)i$nF5AS^n,cZk#A(.MLCC+H8B)V(&"WoK?o8#3?6q/4';m!reiY$#.SbPs0qpoUd`sto%]?Q^r5BDX %;0ELs\r/BQ%T4.q(^mXlB-;5s)>K=2.@*$QBHQRLRjEV6E;#V!Vp+6iLYGT!DTYNf9GHh!&0j=D8-t2Al$s1qo8N:];F2e(bG#fB %MQek#nBN$WWbDM5<M7?NNs'ho".KoFpf[oWCA`koQS@=<15iIY9E#f`jTGX6,4W?t/LM=V]rY-T]JFT88=g>#8lp"=U]N]u]a;8% %GmO1b`'uNGD.J2-IFKcW5afEBch^lsP/#N'df]lrWNr4]JKhZVZLYj>9K@D.7%0bm8c66!8!`RW?XoK1X,eLO*/d=XE;@.3o'Nsi %S9.YE0^VGF6aRjt"p*\l1<hNJ=D8]Q9(A+-(#LQYTG2mnI46]1gPS4;?Y8ioCn(+JSB40M#/ql8\e;tR3moH[OE:d?1!aB1$S_aJ %9g^m?6)[2<bfBqI`VJom%+E9$fR_$kMu[Q(S6$-m-Ad5NW5+-BEXq=gJe!uB^L0W.W+dYG)JW![^ig9dOVGK$eF*YJ3[9aH_@-8M %@m,smAik_+_;cXYS!f9#QD?ZJkn-BMeeJg:"Nf#HoK&`-G@-IKc%_9>o@:7H&-b4NhFMM-%:plj8-GXrYO[6LjU542omo(EOD5&[ %Mc=^A@OZLd3/"Ft7pt,/Zun6a+d!HWl9GbDI\J\6nL@U[H,6o`SqNq5E\<HLife3_TBihp#"IMahaUG//aYe]a&#Zc!uC6ZCH8B$ %Fb5RCZbhnuTI>#G/21$1:mqND&-+76$28/4R3Vbp+s9qsEDomVZMdQQ(BltVAP4=<8]7m/LkQF^dPT6(&l^)cPE@#h,nH,45#lSj %e5d850hD(>1#r;"B=)M$&YZA'h]SoQ%g8D!PE(c*:6lUPF\nsJ?E!!!'8/nN+/2a+5ha5@o+.S=R#*$RQ)+S_9?Qa[NgPtR9l#Bn %:FlO^9_>0TX8Y@\l,mSC?sKH">!Ps1kVTZ6MeS>(OE@.Xb>eEqP]V2im03EBa)dV[Eh*ROPshg=q5l2G'o-C/C.$Z-L_^;FmSm$o %JBYg<1r@W31.0W%PUKOP?kTa''/9t#^YIoj)UPFmV@(lt9DiKVUb\/;#OF_[/jbCBC1h]aU8CWFpi@HRb(\oXHL,8&%?ZWu!_tXT %ItQ;+joM9?emCegX6Z_M)"(,OYO(:Wm%oLC)JMo)S2#TW81F"_`tSe][:AOGEdF_Ob/@;eU+imWaW;6_SS*UeL[2i;<iRL;Q1Lcf %D#+5HeciIF^5@b:Ap'N?Oe2Y#*X\$mKt%4dr2G@3WaH[b7uZL:,_h'cRKJRk9f[ib4!7b-+S;UE!s=Q.lVB\eVO?6Yb>&LFbCZ77 %imdHInYZVl(srbld4:>OF4AW)iBTFLj>"Z4L_N/,F&EGg='/]#0nVqXN7OU(7TW(@0\..uIc/uUBZ>aVCs&,_fG(T[I=R_Mfg)". %8cX*mi%euB3uGb866W]BAH?c"15IZ.[]?pc@WXlZTWhH]f'3]YaC7Y>DF-6%VcgMADHGF%clj-EJX.j#'/@+:b9Dn@OXgIh$:b/, %i[Rlg*&_0/Bo%Zpg*t[=*Yg=@,+$_$.+lnS;GX5&[qa&UI3(&gOEpq,LX>(96M0rZ!'l$u$<O("cZr!<VJdY8?:QVVgnD!Na`9;e %KeUa4XD)2]P%%[Vo5h"\&@%.FYUajcfU<fdr[M1tN_Ll/'pV>-j!hkrP*6NYb_>[7_<_]=HoO[WY4+;Ul4]QZq[TB%5u)JFS*&_P %#'/C74O9uj&lS.;=`Gbqq>oLq'XSGiaY$_:JJKGt%^;=R/Fiq32;OC($oCqCh-b7ON0P#EQmf2"2upTkai#8o+TNu5T[+j:;RRmL %C61;;Q)kBcHUh3f57g52$Bllr0qT\eR-^e2+:'e?6)#_T79YI7>ZHJan`Qe9!1N(=-]7*/M*(4'HB+N:baAJb]8/@!,-e6O]95=< %jDGZM80jl^"E>&ih.7j(KoQ.o,W\rdJeLrg9tMWgXt,bqWRc`K1H7"Iar1V-)g7kr#nA"l!`#g,4ppXUbuGcoN%gQ\Or:/)!^\"n %.0h?CpARc%1sQM/b%#(`^iML_3oNIeY.DGO2)1m].+*-c./?<h:UrHLR]=sh%PoPD3.RuYVBL,A$PC3XXUN.1>6RE++9XsQjUB@* %#,r&\:*NE,%5ccOG%X=L!jkiT<N1h_.3C!oR21ua^$61[)>K@2Sk<Sq73HOrI;Eau8?[[Nb68BWdcMkrS&EF9U>gJshitH=GtTGg %b+>oAmG\^VN2.qg=FkH<BYcD+/%MZH:qi^FdGh/YZ./p_Qf?mL6NB]'?>M-BOln-TPhFDie"/'E"3A`ofqg-uRFGr88;MF5@<_AC %8EDsEmNoe!]ti3g,1+V7WW?j81Pf9AcP$;%mD')UVdJ$nZp[hneJq"GcVpRA$,VNG07"Ze">S;[=0^i!8hN4-^7AA0;RBG(\?D\1 %Jh.Z"60'jUWZ!%K['<Yp!tglgZ>V`f=R%TI0B;4mp`j`pbnm[-ntqLj7$M<Q;s>#_fPdQ78,kBF6)l/kMC[cR9GIuQ#uc,a(MXO, %$8`0:_6lN<A^Y>Y@i36EnX3:L%(fk3OF$=q,`$_:18;`2%Z0L+_AXViCV&)1!5NPpZj%IemYF8-#c",N,:A4EPUX#&Y;Kk80e*E% %,ao\``Y>p.n%qc:MDQV`E&of.[XHHdnAOu>&9:gGSBYIMJ0C[mXJZpYP-U.I:6pfIMPD>Ra@M7Hgd*&"XoWW'blJF<_[mK(?,`%2 %k;"X:R&$+V&/'3ocV[S*@S&in#X^gsKud]-JKd>D'G.i%P8PC"(cKVShToVEEGElC@%tZkb0Qu3&gO3eo8[lsAN<:f&-i@B!0b>) %Y6P2Rk)L%k?lH>?SPLu;nnbk<?6_^n%kXcf2@7;<=Krulf\";6L[1%r@^I,Y_(;2*fj#*g%>/gN933XGcZ%MOC&J_i8>X*SPg"^% %*hQE*;<f3V@re;%&RC:UMT$31f&qHGeILf5&.qY]-;*P>L_Ls7)A]A9Hs!/k=ha.,q8u5K?bM;ie>=I2W.=_QAtbB>kO?25U+mgk %Mpq`O-IQ.:XdIJ7^5sQC.B0>!-`oau,H9QkgqQhYC?WI9Brr]#MDFfj.M!`m\4fYNS>;I?nEqPGb772S@Ni>BAg0!%T1"G+Z)qOD %D]j'?%J1bT"%1(ND;S%^U'^!J"C./R_NGR*%^a@Z+fYlHEYta2I3cb`eX/VWosS31l>.u=>XR9MLIDi<6I;JmQ.$lY]=s>\!LJC< %OM4-&!r?T9SP]/],_@g@C_AM57rB<ah@HQ]".X"aA.S=nU?3<3k=;]/3)U+BM'TU%=?[h_N9kSTX2]]g,^,PiSK1*-q\5QXkk`*h %2/#0]ljQL/&t]V\h3:Ds`0bg.0Y^b\p;e*fC"bhn5a+U$KGoA7O@>:g*&\6MQ!Y_EWbDP`#Yio*aQ1k13"@V2@SSY>\9ENlVVkAI %N+2,Q2Q)n>&Fi$FYXg(FK!M#eHqOd]`8)jg.M1Ee@R^VGL,5Yc#_>SlF54=LQO3tQE+)s((3fu]!akGr&L?gaOp8]j3;!J8duj\9 %9RWqOK2>BBW;1^THk%*L=,T!<@^'?DUARS]AGCYn4[MQK83_bgcdBPTrZpp!ibiI=:k?a[ZJ9:UFsJ`a,2\)PFb1:Mb`4ar'.CnA %;*:jX3J&j.k8Z+8ZfC/jaPfArrJmY",@U@5)OLM?;+_/X\KLo8gKY_.*6"GU`QnXVa-Ul.kU]V2M4Ojjojkro7Lk5pF7Zoo,=r2@ %^*Ge:;W8N]5KcAL@\YHq,E\Y[nrcGiY9RZl08j<`;B7en[RS$=2N_VsP+[,!XqI8h;L&>R09H`p(/[kjfiY3^Q;MNRKiCg41PhR: %:*K(:aEk!9d#\usZ\>3*Se<n:Mho;r;"L+U,<S<-Q98-sYUJ6m:d6@qRUuaqUW@d5bLZrg`.K%#p.A4>N$EZop4XqC*+;P:IAED& %YlfA8,QNm!7P)B<\&O[=k!TQH!Umh!gB*D9<$MkQ[-@ChVNt=d`K9M;*&1#oU0L5=@XnOrA<fV($&Rq?V_ea*_E1ViSJ1NF&OWCk %j0Rfe2*g0cRUZYj*D:HQBLpAHYbX6Ho[oSU/qQp8er_^6q/m"/l/LLMeE09=Z/Pr(An)9C,DVEA1S5/R?3PA`pqEL7[RBl&iI=r4 %MEOKnHb$HF"W^!F^;*[k"2MMYKM.H`)9K4j>Y"u($24Qj;L7ISN@Q-k"dKC,[Oh/HP&a03BTmXgnko2YHHltM=-\ZNGX5@^StaYH %(PbnD6>2UQ#2jI':HRW,^:r@YMhUaFPhAK;re6G>8^N8.&e\-\Ao9:18JCc9R77g]:%2LH24-h@]ceE9L8Md!:A,=c,37N0O&ED3 %77+>N4C%*T$k(XsZ4+pXK4N7uqDc3>dEk2.r7QYI\jf7N<MbdtqP;=I<5"*gP+j_"\8e$(l>HnUNsnJGbm`>-)-dDWWP/[Mdh/E1 %i0"W+2UoUIOfL)JB\$Ec-m2rMbq"f"/!FQe85qL9EnTQ)6A#C[5teNg'Od>Snh*`/jo`b"<%@rM":Gbf`HN8sDR,^b@S*TB8GVYP %-7-XjOta76lfJ9-LMSpa)WY%T=O>D;B1ffVU0.f-KZkWT_2k_#,gKd@Ls1#nW'1j#kh73d"H_t\7OU"mJ`p<s[7':-#+>lpaqmlC %"7d;hj@\*2=G4bZNjckX%`DcDYU,K"ZGjA98=_/&!Td3/&6T_C6<4A!TH+Xt4bt#*%9"6Pf2u$V^Tn9,C\:N=P*k0!V)n#E]^J+5 %.I>1_O?&S.b6"(sI)hsR&pORa,>j_#_pE@ZHYU)"gscBpnAHH#h%^(CLctNl$OC%14,B\'-HKr.!msjR_,u*<6t?kR-s'LN:_Z"s %8A5bP!Jh?BDA,3rgjrGeKl,BVgiZQ7[DQ%.N$0H':s9mFG-jdF@f:FS10oO!3tf!b1RJHq"E;_C5g=?eEND-(O(/K=+Y:'dV\TbV %0,4aVm/U#?JUE!md3gSi9)QZ;:e$sp-fC"!^rR?lG`LS/^.U674=<Uo6;kEUCA8"9i'!6gQi6/X(M&.XgY?c$PGsQ%.3P)+XJDF> %2=5H[1)&1[luT,1f"l>h:HX4I>K+S3"K4;E<3S'^TUlJ-`ULZJM3EJ[?fPT,(<>?f0L*U*RUJVo6S['<q./YiWYRcJ5L/+9=HAk7 %d]""K7`rPGjM,XX%J0W\(,0/%_<o/MOMf#k#lY;'+Ma0^aW-CfMXLfW[t[Zp%BIA?"d9t\S9Srl3V4$?`RWcWnt^;W%?FX`=l(eL %2F'T[*LVZtE+r9l<Q1,X6Fff)cj3/BQC6C)'++$6bnDJc9<N1SkHLp+Xk!\a$42+`JgH&6"'@Y3-q+hKkBo%`J[$=?8pW(aasXG\ %;[Z,UOLo#qlbh,e=V=:Y9aTtS7"FN"JL?"=`+R+EA9T]M^@F6V7PP;5a^8SgZc6gXQH6S$>[LX?f8,q(keCS@&M]NS2%0-ajd<`S %*h.)j1'.fUP0l&^-b)6EYs`PROCcB49>Z]hlS'KI!c+a.!KL9A\B]q7F@.##+:oB9Koun"*;3.o.#&u`O5d2'!=QVuL"epuFj<kd %X!b.qY/QiP,ZL%eabL5GlLC^*MqcjN#B\/%#;1MON!<.mlNmsFg97#o]M2,YXoe>1Z<8*uqoe3\)E&ljN'JR![rl0YgJCU-NLfYl %pNJGT)Y/^EWRjTpI/lg#7LHXUW96o>&faqsM+;V=E]#Jr5RSoSD&tZ@R3;d!VQ\i9SSfQf\9;ctN4ESZcm)LiC<68\>%4\"1`#<L %7#\enCVg)+32Qpi.lM;]\7utcS-Z\JL`3[R.k>Xnmnpg%I8^sh>e9!QTEEM;%!=F:;gsuZ,9VmFG9E#ZgfC/#I*iKC-5qn5^:k_A %E63IjBD/4q!g<E8bVt,e(mdkL;^/q`YqT"]02V52\n'JN8r1cU6AQWN6p_#T`=N6=@OI!N-o:N.f:,<i+=4A=F2k+0/M3>A'Y__h %m8R[f]L02FNO5OeEtW[.&H&g:MJAFI^pcbf"Cm`Z5Z"IK^;P#aJZ:78J1*?>FCD=(M$T)CKCgRm8P<Z2E4g,L6m:B^[L,^,&L*HW %WP3H8GuAdPpOuJn6_7?$gGmRI&eTZ',=3Rf"c;-Y_9=-V_3L,/%%8#[dtqTII$s>S"5W2QjY@fbZMark*3=VO5iEOd*F5BU6df[X %hLgYm>U%E]#*@n\ZN@rn$73oJDPh\7^]qO7D_Xb8&SRO^d=\-]3YCToE^KmLfbQZ0&W9!TWea:oTtG$2@7h\59>c?UhH#B%e6qH= %?,e;9=CU;P7F>!n7!"2T@Ogk-h`(s!ToL8H_F.fC))-ZJ3@XY>&8Qk8"?hNb"gT8f;!j/T@n='eU6F9$NXi^T98c-pi]?WZV(oND %>7njVmfA%[`FP1/54QTB!(R2=1drRk5?meJg-3S"POr[C_NB_6!CI=%[>!DA*k)k['6tl*!AgQFOUZkL9o_X6:^B(N,*Ri#N2!C] %/e$jH"HZQ59XZ*5RYdZUbGQ=OWY%rsU0p`4i:PK'g'cHDQC<_<#)EW!U-qB`_/2^lU*gNbK`Z_5"#.C';f\T\:SAQS8pgg3%-20p %GcS.g%l]NgWJLk?.[mu`KN)-QK$.k?UsWrX$_ar)'%8/KV6Hn>2A89rjWoS6+OajlR4OU70!lr+Lj,$#>;oERULng"%D?#M49,aq %m+GQT#R]_:ig;nK-lf'5MT)$qQK2[C(6!*fSYe1H9K!Ia:gGCjo+drfC@"qeYr'<M?/[7E_0hM",kO0l7%TWgV5o1<i"QT(6h5t6 %@8T7S8Xb&=V[Dhn&OsV4@s*3@4=u>E`2Lc=.K>aU8JITR13aWJZLOjq,j@`i<`p=`B^@EJ;a0.2*)Ou33tQ7@'@S1b:]fVi2Y9j7 %^-j3c*(n&<)FcA'Na\aKH5(F_Gn+j/4EOPV%:+g2'ZUH7\l'\-MlM.*-h[To</`gc9#UPrfTX#Y^"8Y^(s7N0&4Pbed1IS)%LPcc %P[5fu:9/;Z@3RG&&uQ[12UL$]0\N]2o^YkcEMc9^9nb(<i-<#tk$Y6JmKHuMY-16bKHRMF]91VMV2/\V2-3<t9K=B_NQd;M.XP;n %AuJ/E;oqMh[XucLAFV`LP'"f6ad&MCKQ73Cc&RPg1=5f1%CIKP'[+^o'mZc2FWt8tnGqtWW^eHV`Y4%7(=Q+O<>9irl(*hLG\ja9 %LfdXtR"UC5AE(UcE99RH_ZNlR8OW.oGGiS\":L=?]dW-/^a&pD`I:Akf_e"g;6Ch\6'Uo,ar4sU*e?5j_GKW2Q&g2oS@iZjK+^hF %4u&F'>>jYdb8:<bFQ;Y%'#Hup?,0J>YV</O+Pk=O4ZVF5M7.LKZ.:0.%7F)R8!tX:h1S<ongH3pm+A_21X0/P,q2^XC0H068\tU] %`(S+;n[L2%Qh(mT&.T*tDWt?[$D_9gZ%V4:!BP[0,S>ec/&Y?-NI:"2fB_q?p`cH>,`I9LHE%<KN\T3E*0&NnKor)$(tjsM`0Un? %=Mg2'^aJ29cGkM0p5PGu!m]&IZ_EjeXauC^q_ecsRN$rkp]U<SCWJXo+WX,qF;Ru7C]t5G!m/]NLi$Kp/6p)3F'$>09O:@(a@%7@ %//[ck0OS.(*Yoah,mKF7i;Bg^&i;>sP(e3gMK:'F#=(_5&&dBMXr'b7&#H792^.isZE$,6B05Z:_H,63;.q#IeZuBDC/+9jOjl4m %ja9%e1/`3joZH]tO@Vr?jee`)U;r[+K+JdmBbHmGA7l&+r'SZCQ`SaDi!q4[`h>3u?oFoW!;$P/HJg#QQ4E+2J2$#l8@D;>J!8kq %q/CV,9nP$5e0u$W@hrb:E=`O,.7HR'$<'*B*7dUd^n,-N+oNdOe8@^:K':JD?'P=5Dhj+m;4n]C>*WZp*.!dgDkRp:,`g`C&j2kT %G\@)791B"kW"5[8Maa.<:;et=Tr-%fc7*<)9/m:gM`E6a3+=1(.T2LE93:/QWN^(fpaM&a])n4Sa6EC#VeEi-eIo$CFm%*d.RM@b %>N"0?gH_M0M+E/+<LF\\gCLC]*9`pp/*!Q=$Z"kCPU?e_EoLi*V(HZu":?&=&4!M]CJ4.-AM\?^&'WR[@&]%Q_sRUjKN?B\PYrd9 %.qBQPXSPOgCK3cRq]V/GB#,m#9i%*l)K:po;srZsFHRn4K"5L!>k0<GW"P6"&/IENW"EYHWUqI:)!5@'87J`p0rW2J-I?Mm!8(cO %Ged16PR&o`Hn)nQ,shSe!Cc$6g+pT5k]7RDdo,).SN?Upbb0kr9>r94r5Z;RF;bl\LdSf]2BoNY57Lh`3K5T$*L,tG<(rF9SS/Vc %\W3'pES_4GF@?e7a<R;A7#Qpl)28i8<"KR[D)=2-Hp^fF@Kf'7"d4u6'T$uXlPc_1mkP(WM9h#/[3u;[>:2\!BB$k,F?s5B4p'1t %n;o[($,D(e6f@*<%kUHi*1DF/;X;f*I':^]q3b_STHe4WKYkk4)aQa$"gBLNUG.&S=g@`03#W(E%*[Qq2B[&HS+uVc6JF*^Mr[$5 %ZhSi#;?FFMGuPuL5ujhmF#;F78Ja)`6t7m.g-o9#Q&$o#h)e;1'S4erFdb,oFST2C2l"DBKSiUI>Xf8+c/B9>L1nI:688X!.[]u8 %!<+$[4tduO33j?;.G]ot_J%7L=Xu$'Y`,*Fg0.+ZPM).n4@s^.]J6C,#,8<H'WT+t5_?dPP3\Mc&#>*&RPMC>X+_I#<Un]CaEOgW %<@/+T!/GX^BUFMS"sR6+nL7BZ,7'`0a<<_eap#i#-b#!X,Jdm7;C2C],c]753+Ig6-8@!GSeah+CpD?R!LPBC5VG7m6sp;%P+\f4 %Uq8>tQ(tN,coZ+`C1Z?h&4G\!HC,:tTJ8^Mj+*h&l7<$o9q[+Ne`bE+!!l5rTgbZlmK&>u]aNKmNZ1Qn!k1s6PodhaM-Y]X-p;o= %"cCaF&Ug>q=U=(k8ms@["QtK$[6S_0(urh2;t)kU:k^/p(pQqMhoOoFQ&1$WmJ>87!]Hm8WXjY?puf1W0Z*p#Z>?O6'!'CmLrf]0 %QY6d>/n4?1-\T>bQo_T.AU.TY(9).OUmTIi10pt@L`BiXjiK3i*NF5ubA);P@_u"d<P)]EW8N^_^FAU\aihtK<j@C9Wc]!bkK=D^ %N]'HDJ=Y#KUBWXeFJKe)%a?$(=p0K9L0T]D%%.WiL1h'pQ?j<C(-f+dZ4]qFN"M?uOUlFWNbl'J,u1R6N+7B)UhQK'Ujs3W=[iFs %>$<QBX[/u(5bc66.)^Z73J^VpgfeaG#)X9@A[_[X'1pC`@0Qj0+3l&Zmj(VP;Z?KOlo@@enrg(6<@I8<6A:YK$FnV(<"N&a;pC>S %U<V=4W,O7JEsu4+&\(R3n2Fgd(DLFkQ&8.n![n@D#RHRp*L=LA8:habg(kQlaIsodU];T_)DI,3cpHHWn<;VDP/--SREl+Q4sqP. %\kiWH3e_0:$P$X=5%>9,:`*'@AU1t;`gVH:a0#X[IhFNcH3or1d_-5i66A6ZHjbeN3=@Yn7pX+H&ip]:X#+gU:hWEV5VYV1=,j%e %WUDo/9q7lq86?*pG09\!RRs4iSK"O8,Mk3`/Q;]ggtl;GcLWXY!\e%\:Ms/^'fF<oRM8nYnRm)[K_c_S[t^K#nl*PsnJqW1AAHVm %?p,rh<Pnn?/nflN,;HGG*_J>FCY`ap?[.Ms)f['hg*/kL9&,epqE-:[<1j9]Yh@T\/L"USn&3f=ng.2$1"$5PN;uC]?;OWa<WbHJ %LR:<f2R4Ck-/sDp"]=]IZqNe!^C\fS.D-AlAV"B-bM^A)7#).N_#h_]agL=Q_DW#a:ddW0s$_Kh0VA,l:S&[WLipU;64O=rge60A %(<2@7S<Hp!+?F9X0c7LF=_%&6d@sVbjEA].304R_`r*B-7;qcpre+_B7GLqGT27\M?Ob"BBHsQTDO)ao_>4lQ+?ehAWkFig6EuK` %fL95<Nd4_0k;CSB*K8&$,e;Pp_C+FV<d;(U[361b$0'5f;\dtLKV&5uEamh(Z8s8`HPAj4.3(4C02S/rS$N*7SI07XL@>AY&B3k2 %Je'"V6WY=Q/SK8D;j@MSZJ2`D.Tf!)23\En?O@Z/e5A@B2ZH8#\eI$c;1<ne^tZT@dJ+;B>tLq+dm=P2iHHG-_3$CI`L^^uDbcXM %^B/lN2e$HZ3,h+@bSK/4"GVYK;i.=U(jF24qd(m9%^Sc^"=bT@3sbgaY-!q#?n]U^T]eKkbnY%=5>9:T&n:0]!m`0R)qB&gE%tV] %Am<C`U0.-n_,$3BaK[%`+;':.8Q5Ef0leGJ_<:2\`KO2^.@c&'Xg8SC,ZPgY$3jF/2G"W[%9lcr&ORsd)*U-i8:Mna&;N_H!Xg[3 %7o"KeQJo#Ud,Q5h,"C9!U9/S]Q;5SbZ/m%['EM!YaET@0XA1ir;UeL`j@)l>,F-_h@cHqY+pueGUJ2ssS?^%N9C*,H&q6blNPlek %LF4<r<TOY_AU:'nZacpB6%lQp9*<S'9r1g:2:h+#^#hXCh'jZ9Vb@M8W,F0\;KU1,8Hu7/(F;MJaR)j`2J1;G:Q"d"d7ZeL.RFaf %RmANE7M9LIqNQ$sR$n4Wfg%l9l0bBul3"9q8CLD!W%"phEHMa+ll.IuR(?B&XuJd0IcO*=%]qc"calV=#6As,^7>:FQLN_jgS.OZ %Y`6?\M2OPq?ui8uTfBfo:%\+8/[EA>>nC;'iPoV:U-^Q.RU\p:$P`'X'dkKoXn`;mKX",fW2n!P4ooa.M9RkcN$o`L&4jP:MhTgQ %M1$7s:nq)!r%:VIN:T:\4$kCO"VEPR6gq8W_hj8%4nK@!Mme;u6Na*PF8Q?/4j&lZfUDYJ@Y:KZ.N*L;P2_o8.>Nq?R`iOJPS4]) %<dB[9";3soqCJZU8F=;9i)dJU8u5T\BH/>uZ'+8q[N68`&uj4rM?`jUNM-G%b;>=o4/aEsBIso"RcB_pMF$SiC'12.D9P`q0gC6/ %m+?N'pEUK-A(44#@-hZ3(oa!eV5,5Q-BNo!b_1Xj_F8V^)KDA6PB\]-07"%o`9%;b\AsTm>0(R'J*28j?<YVa@X*.QIY<870:B(r %>kGb.M6RW*\O)!g6XU0EQ57Kfa>+)qMKN&N2R0@PpSiZePWH(9H!9>HpFHJpduO/CWQ7I"6inf]LpRm35U9C!PH4JEneg_h/0,"R %U#UstO&C[65BP\>lV[0m%X#cS.2eoeSkk0W+Nr?p\rql@B;d/qd_n'*(m08P:rJ[Qngo0nj)YL7I[<<N,IAuZ]a<6AnTAJ8%702L %Cu(j9(NRbtr?A6?'.ASSH;1pm"%%H0'#S8GHfuJ?*u4<T"kJDtGmIZ8,%O40)dNI[$(Sf^L@deas,7F5;jH]dE`ra7V(=M]c7pLL %RY0Ep\1UdeVkU20Zmcf/E#f[Y.&56'<mIpi.4I9>E+8,T@N9E#gAr+"j[1<TfqF)7Rf#WKE!bQVJZDF2T5iACQ\3b1+Qc.Sj5BF) %6o%806^+%Q!9-TjgAtM:;'%G#e*Qtb-OiM-djD%h<'nF]YY`.'`\4ZcT.gF>SN!2V1!_1OR91hul_e1pZrbefaU$=d'MjmUjU`A! %pL9Q_&DZ<(JKiV',ugk&07GB?_8c`3iis^Z;a][kc!g+?<^Io0B?9Q'!bMRacH3DTL<(RBg"^@JS!==FE],,p9<En0iT+mp'<<QF %G-obf`!W;>2M71d+b_r!>Mq4_ej.424BE!aA2^2V@1"E\4V0('\OWe8hV%\,OF]f)NNc#(/<H5t+h\ng^uR2T5U'1mKp$?V_7G+@ %IKP`_OejP\4=N^bplaQ2T[X4pPV^%Qp-Z\n()2.a`f^oadH<4297Atf$`.*rOO.M_R9EZHW'McW7o4Vh3Ad!MUtestXd3,:)N`sQ %.*L('D$#bjCF?P9"+M%`9#Zr&dgN)1C)rD9\.,7l-'e@;.3mb3c]i181?N6W1FjUm,E\TL06R?V4N4o<dn)S033QP\\IS7;+fCIC %p53Ec20Ij0io&lJGBmhU[U:.j$^=&N._o"U3I7JX7m<D^H)uZ*a>Ff?lQh(K8!+l[=4;)I[MWsQY\&u\cq"Tli^htqpnYsHV9E&9 %ZnW5JajAHD=NW$+fG[PE<%1f\Luf1]BgHuMM%?<<Vt+9G4sr!2^`80*EsI9aTS0VcUa`5=-Pcq!1bO"^,1us1r87j^oVYqCa3YH^ %rlL]MBPJ(<4#dR.kpbg<:.(BU\s;3kOU6kRTp*DETob]cT7n!HD\ERC\HbH?>]Db`iY+"-a4D.NcP8H)+?XI7,4\+C#cCX)nLbqq %4m%DpQ_Es&+A1`d.F4)`S(PB8MVA@RI??p&Ko@*CWOA&#p-rjq!ZN(tC*9")fXul"9<+u.k,!mW5Z;9rigY7f\BY-A6m;_gjb*]n %NPo'n!/Kshj_QiZX'!VIA:"h=iY2J*j+cUD*1UgjmN.2[P);aAA6$c0rs5;RV*KHr2/nG`/KCPpKbZ1mMB+'i1#upU1d@=hi=.$k %4ijZ@E6P_(C[5J.@OJ.E!J7lrM:AE@)TEdB5Qc1`^lZW_Zj?IB0JcK57fgap/!(MZlF=o_5f&Y@U4s929L+k\*DX[C4Xc$kE\j3u %8m*LW/P+E1"Bn3%g/Q;QM\VgWd(KFB)2n/#A7i^[H=B&FU81)k,/DL"R%2cmQjUm&i[!Lc(q\5;co0)\BE]R*9!#;ga9>58EWp'/ %DKsn,5YiPi?pNhu?!T'SejM3E<6_2F91CN)33%s"E#$/!0c2Gh&'8fU\3<lg7*Ke<^^'2pKp"f_D3]cd+st%^[JGjV$_g+VH;mM( %[BihIcuX#>'F:Yc^tZ!u#jh4X>+3'/HM;U&AL+Y!TSEmu;q<jh4\&n('#oWi*!akCd*s;H'K*:4,FYnUW,[&qJAlZIRmGP5%0o?k %f\m+n!.Yb'Z'Q^oVE,%eNK?J>V-[4kl)5X:/L28=<cND@eDa/#jcrY_+it76+K!nTX!#7Y)2O\?k.8t(eRP`n-<f;[m"D'9UgXfE %,jE`X=!Xjp_/?(h)"q`jJj3#(h?*_:cXLl6N_8i!+=u@W-!,a,k@t85Mg%9:OiCNs5o5o;"_i@'@]sLnm^sUtMc3g7CA(8@X';`* %WjXP6XiojHWI%Z[f1Hj]iu3.3XkS<gWrg\,>_MI<Nf$?WqTL$jK&7&1Nqm=-[oR3*YF([Sa#l]ko62[t?EM[MpDW^>D6I,WQiT>; %e;p6P^@H'qlmoI5DXFgfm<*)Yqd8+K+f>:I<i])2\^@Ju2/81*lc6F$aR1tcdr';S=\&+XHFd`DH\WQbj1VW48$.ODIEd_D.?qB` %SQ`-u>4$E8J)$W88uq*(n,A]b2#dP$d4)acs)VlUbR\(*?_3]NHo@cb8jV]el,+mHFGsjUB@r*ceI(9oi1lX7P]J.H7Y)7b,Y##7 %-rhQJ\8AsB:pQ\NpXa-pI6AaS;Fnc(%4/+s),<0c]%O/ie;d2"S]YrcAgTS4DUX@[RDG.ki;[.GSY8ShF-,b';+V>AYPePBm3Gt@ %o(V$Ibb/&KdK&ps_]FJo(3AE9=AmbNG[lOZ+SO\+]l@n`2^0dsE>^XLAY[Kg::U,L27&jt>UJ,Npq^%cOY9j!)nP6&=uE>jOU^D3 %*P.uhUm\'7JnELY3=b0eK7-8a".TSB<Un[d==7@12mENV.Cdm_QY&Zs@V63)l0Rlus,Bq=5_gHQLM,*tG9$.?(Rh\oQCaS\']p4` %Yi0=56;P*T#7$g[;W$pB!T$R"L@PFW%M$SJqnZ#iKO%\AKFS9.B37sFljK=l4kUqR#M&hhTQeZ\^quAK)/e!MZRfQd'?oJ3\$37; %8-jBppGrHoe%gB#>GEDW8uTGQI%rYVcB36POg6T!2Wi%_5p0>:&d%$TQYbN;#d]Dj(Ru^;#3.])*&4nKh&-f$n;1,Rc]]SK%keKV %&*CiZ*U)MUFTA_E<$kee2jaMFfO.jEKEV9lY&TQ2-(me(5"fbH&N6Ae/ON;i,q5$8ZuotiNP;7;;d9l%ZJX(=#Jt&F0E$PhJ6l[c %LEI/?<-"]R6(l?gG;"-G4Aen;\ml5dB?'&D>e0uj,6G"5RQ(^-OafNj!-uPG`oR"fMr02/-/"pdmtX>#MF:urKgcKGY\s^9k:a:G %0%]&"Cob[LG$PJDVpL!,[>HOl8#1B$nYKkdZ]0ABCs'h=XS?+I@USfoE^VjAS<>*YN)7J]#*e3H)W(T&E\VGO,TDJmUbU/!,$U?9 %CAR3HUWb1/p?cJqARuC:/PjM_/1a"ji-;Fb&>]?m@74r9=fO*J^!OqIW<3T'`)KloegrI.9%P7n,SY9oj@%-<_9K'O?E9\4Lr=#p %r!=5ZGjH7$-A#r0,YBZT^(-f<"PFh/U<adm8;oM2]"`mIQ?YnFUSMKL2QWfq^#Uq4@`9H>[LG4@%9o;f",\,[Ne,(qQ-QJj5QE-s %%sM^YV/pGqcI`-(87jgfRq[P8H-2So7UNf(Ze#kkFo-ncn3D!N7hn)+-30m4,nE"O$`4kW\LK\C)6pCK)*,02))8V)Q<;oF)*,07 %/2=oI11FZ2k/hei-CRT!hqWK3-?g#1RhqJS1gC$UGe/VO`#r^UOG5a4:=OKl#C4*VcBpArHJCQ]Q-,@]UMe#lp0#(4>3fF:cV"(( %\%>@$LCk*SmEEeC^1/F2)W$[rT"hhH]!8uSk-#r+dmsn::>nE'iG[lC^Ak8<JZ""k6dKip#Mo[-N(2pM8G.4>R-'kebr"uY)Jng9 %d--d.3H`c&Yaac$-M+G$RE3NZ]/)uP_p6))TqFos>HYO0d_JDU7<pDI=FXjMU8u_SfoW^u;3Qq_:[nYp!4bA%LFqt_aO>QEb(=Ng %[haftT%NeN9ItX4JX5c0s/V&u]R9I8;2uns-Au4g1Z'I7B7iIFV<ep>q$Qk/lF]CW`BfXKLc8FM.YDc8P?^aS5,\=UE@01G7,S\h %,-4[*>Fm_t,'6NK5;H]hSrLGo+="H`?O'i@d45iDWV`8VJt8qE-"f6)0DDdrnUBK$/?99?KT[r-#+?JCKpnD\26sN9kN3fq\Z?0; %V3ViG6o#>a:n9W&U%qbO=pZ`E8/q,^qjKW!""4abIX3bYDB^[;39_;@[m67H?cn=p?hK?rZaWBbDEfW;,RfC%r:51E@_4m)AM)lG %$i4Q1aQ@(E#"^ar#9#X\fV7o+g!_rt(MFUV,2.mH=Mfhcc?t5%8dj5jTpU+nTYhmC`%FG)8q$55P*hqpN]j>OG9[OEF/@6V9r/H+ %?m<0%'K0pUXg7+fd27P)>60;!0S*C2`M!qNB!tnGrl!=GQQeFhO?XA#D2b!+b<)Pb>Fm*:R/I]DNs`asV<T8CEIh_)FqKO#dWYNA %7EXBh2m>is4j5`NJieBV@kE<W$!FM?oUdK9[P2TZ#W4M6MF=I*XkrCa3R/$QNYKnaJ-&GKE]I0dX<*Lh-p<D++><u@Udp-OJ5^5h %$Ms%OkOMiBK/o;KZ5^G2Ub3=LRZJf1)XK'_1Xh*BgJOE-6,5i>(l%=/"_+3od2=rfM";Br!LGhs&n?[=l$K!YdAUs`\BDC,6_7Di %(,D?IAT)VcG+Fm]o&is_>-9"M^0/_)d=r_55a0HM%>C,(`dL@iqH(Z"20Wod0Dh6D]36hjq&@0HVXJ@9`TYj%>)[Y$bijIaoEap8 %*5Y%5(e3bH.U0G.?h!NJ6CYljD"3Ct$d^SQoLa2jou]_*=6o32O2Vn?^O;b>Y;T/q[G5[a*2`;]/tA*L>.89s?Rj;(r27AtVEpH, %H"i/;Yn8X3&EPV6V<RK9??MM!Nfl\(gci,ajt4?um.MpRC@,uRd]4@*XWKa1[/6;nDP`+-s/B!O0u2cNo($_Ql)s9[;`2Us6nZ]' %8*HDTYho&"@Eic8d_;\\H`^%WVc#Z2X]:h7>3C(D:?@d:-de>ed?ttG9G#*2S4^I"LXVsMOHDq7g`VP=M<d^OH\L)u`b>T[LZ`<S %qW,e./2.C/5]S;`1rAf-aJ6O\i':`kFN6`C)"tef.Kl)O!R;NY">n4g6r[ZhT\YG.rQ:6iL7dZW$4:s-7\FdMc_m@o1<L38Ci)fj %n5`7802P"bgfYaHNZ\!-iuCV%rE(6OI#OU2&/FHLc="G$#n!&b#g,5Si>?8Fq(l8M(KG)fp&MoB_>%K=<"PnhiJRsD&]c!/%!+D; %KFNSI]AdA?Ua%A4>F$iTENTgo,9A;Ndl>N0btNSH(%A0=[&+O!ZC2(#H88<YP@ug`8/r%Db/L^i_&*SWY_/S"CeSY'$*9su;heb6 %"kM4-U6:lc7m*"3rJ]*RW'L;X_Wtj6="6'9StPZDK8%Z'%X])^;cG,a'<+P:ESNPtN_('@ZF[_O0PnkOcU7r;FY[2J#1Y"U#:5^W %r>M\VPY)/f'rrIh$mZ&,2sLCY3te.HYS.D_<3Z[*M,VP+5n)q\-oag1#g46aN;\OIGub3tB2%D`80Mqs:_?s%dSRV&'Hk^^E"Esd %Nbnud%HC@P'[@A@%+jUYZ6V>^$uJp_@S.7SFdffA#:ORaoUW7^kdS9mI=CH0oV/"_j-0B`<nMif+D&1q0nsHd3+B1g:_ECa)$(-n %emBo2aFLMSA:)t&'!3WR89L_-!7=WY@Xu_^]<YcI<]7Dji.T1W/F7P2EhmPp?P1:cWi6f?"$oltJ0LB_8,J.3l'*F(N7-8.5oeO_ %VRc)cE5HLTLd\+"m-arOeT[cd5>fQ+$m).Zk<[q$3"!7]0U8Uu$OBa79=_VBSeaDfFWp`iTq!*l%>a'^#2k-RWF3G#EYN<NO$$94 %M<AS*L%s'UfrG\!c\\C,6,=rbEN&`Lpu,Dd@kN0PK**D+Z\.1LeBCWMMG/j/(D(<D1W<Y[1)/&'OW4T5%[1N\M,m1>ngN1%Sa0oN %aN3GL47$O6F`u@`V.P[Ab51CtaUBnqQ0.##*46X<$7dRUSRQstJSaGG*No3*#@F,B$0<XI+OnbuM2kji@?2*HR2n@Yp[gFQ]Qic_ %XlV`W!m<Bh)BZ"kId$D:!/@e%08p(3<8cVRB@=8-b]W>pNB*Qcm//6tABGG9\%q"6ccaj"0<un@JNtQ8UM3m3n_l6H.E.ptHja-e %\s/@U33H72aDe%TjFb7J6fj5Xi!#$:jFii*F'^8[7$.VGaHP=XQs[OoY^[M,(eIo)X1;0#PYe8NQ`k5tML7tO+p$jiJD2CP/._&X %Ft^gn2&/d0)h/X^J[)%"n25&/A@,i_7HC3,'R33L#G4r^ZAT<g3%PCQDcVb>[6%%lK4A],(%,k"mW+d>'YkDoCV4".6NW75D(H6p %ibGn.JR,%=-TQ5.0YVBg;5t2hM(YRDollMJN6R0S[J)hV\9oq+T#ZQ8f?e/Dl_.sis(NX/Xl"CunY]3-=OrHl-TDPAS!:8s,i>JZ %+?E/$?,A!*39EbHLd2$.&hF+A?_&X/+VV*+3$Z;h/2\\o`/o&$VuqG_g^(X5pIuCa?GQ[I#6/P14YORFhKUS+m:>hN:a%5s%$g'f %Vpt8I,cV!1?/W#)_BLNbNnFpUCCNf+as_6@TN)-?F?g\f[8'^f#G`7`73+(j5f,N%0]__M<IognHCF]#-`.mI;cJ;l!]05mJ7?bN %c>,]=DAY-])/H-*J"a&M#+Ug6K;U9Jd5),OQDmA/QRaV1SoD53SK/_AbS<YV,>N))\:T$njpJ)!l<tm%>QW#'@\TOD!I9_kZY17R %'hB(hN%CA^H"(<:]*^r1M_lYg+f$`0SnP=V*&6D[RD.jh4g]N_Sk+"=MF=)3A[DPHDNTGm@f(!FNhYe#D%*l<7Xd"b.(0iCbBC"k %#u:::*cUX*<V"X5ibQXmClI"hj;JY5(FkHb<QnoDe18]h,"*`k`rpo&qQq&2A-p(gYVo,$STMk"/PEK^b3!8SEaPiL`<_kUW?YkD %BV+KWED^#Ai"bMpO1>Ar1F*!I7X6@Yds^P2Ff_ABFT!K1VEhA__)k#`>G!["+q^[6oT4,n*e(bT]jFqIYJr%&FZY;L+nY=lLg^iD %flr\(OEm\<qn/.>(aeMV7Zh6G@2k+X#cKFT;T@_9ilYm2RTS>q<rNQY77?X-o9?I3fY]F05mY_F8IDh,("XGYe`)QW,.ePIZk/2& %s7q?B7=b_+(BZ2MLo<cUp-5-\5S=6pf)Eo+IJ+Lm#P+inKoY\"Z:P(Z:N8:BTEVcuZ-G0m/Yqs3?'<!e9]H!8"fNd2Bi_9?Bd,X! %Z;KHl+R6p!]8&q.nrOhG&DY#?8[&CS;T-)?`CCs2ml;"Q)+m1V]4^`4V&[m&USq/IgTa^ZmGI?n@:s!F)e9*]PUT9P?1A_ZA,o(, %SA-?O.7>f9ge!*rDG-bcNtPm"'oioIdClo3P[(p*odC,(;5Ms/&54\097@s[)=bFhA.&G$pCZ<e3Rr6@j0Q?=5`-8W:F/)>qBdP[ %MC()=FhPL`Q<4N5Y4mTV=e$@olu]Y<]abo/K8S,c5L*p>PjFKO*4=,H&/-AQ%lJj4_KTAg=?oh;Y!CP&eiBJ&_"C-jJpHLW'Ii#6 %22uI4_E:]`UV74G1N]Dk[Z6&c/eH-2Uba,896M5Q`au%O>*qSKfGUKb>E[1"gP(.]Fja0-]-aUu(:SJ&75;u6[nL0;He<1$6ijX' %>DSO0^m;1FaS)2V&p7;:@`66!M]GXYg*A5XKts'j("-n38%G*M7ul+<>9rLE)*A*$*@+drZ+6i@%gIDRB&J?N.B7A!kb=iZ_hBXf %*%)YgY1jGS[XkC;M1B@"EcU9QeB6!7Xe&sUkS@gMfd@>)g+rb2IUR(snAC4A)qn"V-9EuS^eF!l),K6;+tej*H99a2JV("[jM6D* %\R:4@d3sP"O@k@lf_C2MI<kU`YQo_/R5eC%M[[986;AA2-k4^+K.Z@D8ona0B*^%GEo\"0b`oE5bDoW#Oq9*ND(u0CP&_`L$f6Os %`,Tk69sZH*Nj4<u*EnMh6uXI)pO]+(8MPG1itSZ@",Jg`SKhrQAbICUT9N9nVB)%Uo'i(#VSJ>Q=hR"B6;TF]&mXa?.51uJ>.dKC %M>VjE;X\M(H=#q1jn%1/3Q0en<WXZ>[ft]aqBq2l;AbM3%m3R;+if8>[0=*14IM7<>kgX&;9M-8p+>3f3+"+e9SP/E21;=0M:C^a %!*-R[*-``<WME'e)II#gls<=&b\Wm:HS[?.J^?+J7nPl[7uMEl&dYQqM6)2`JZB#?pT)taOMr2@dXfM('1*ldL_N0rNodoOR$_jW %fPqY;,nU;EjWZ\i_^Ca"EP`to3'TSCj\(8c$?/lcK<0UX1IJp9a:YWg<@Ne*9M"5@i3=`$;QrXs!J`q9=Q\.CCaf8"flO=>7?lpP %rgN3MW*RPl/S[BOKHPnnc+]F+UmbFcZC3%V!K@7<#M6-_kce(f)OSV:8;r+F#I/fNlV831"oAiT(27oBj5U^)%FTQBanUVdo3/`l %T&oiI?n_j]fd-V8'N#E`<d7t#\eh+N"DBh)-%@T;KSc"+%N'F$nmTb]6YHr2/cVumJqqUeaS?`8ZQiLZaEe;"f>0Vc]K[/39aV2e %["u'O'$^iGE4"=r`0K0B4_4*@k@IFe<Em)m;?eqT,N9$Fm_B0g`gQV14TO^lJZ.S\P<1a+>&M--93pE,g/i6kObF#JP6fkQ$r7q0 %eHHYN0:l),Qc_,f,^IIG8O4@a%+XZ'Ek`%=>=3Vni,jsIg#6^#AA,-Y^9`&Z4GIYpO-5+=LS"sldLq$aRp%Iu(V7=aXN5;5Qsm^I %:2A!]!hnj5),<aTN#MgkLi[\YWE)[RYlW+Dfg$6O6LjLVJ=IOq8(+oE3LH_/$GmKcT*Z,l3QK7L8KNKI_BXa5(Ks\f1skkBQV5:! %O=eiJ_&XHkP,RW<.'Je2j$ZRlZ$tin8?V87>pTFY3FB!NKcK/"eV5]0CkN#'_,<b#k=R@`U'g__nY.MqNn@pBGWT\f"6=;B)kg0@ %O@o,S6[dCkOD)dV03"qr&Pm>4AEC<(GUJcn5heU@bY$$\?o'^O.Xd/EdY\MO$^X^^@kMl>r=4puL!7'mS5u:GL`%>`O=34CM4c9, %UbrbhB6H*ee2L^!SB/\LS5[Y;mhMK[J/K.X)l)DO(NMef"S<.-N$+EaF]HakemK6m,5]if)]i?+@T,]U2F$1Hq1O/8?Y.\5SA^8) %c\SH4Lfe.n.6SUr;8!p&JUP);.7%KbIL73pOa@l''BQ`>iaV9%Kl$NWJl+7P8\)VA45"%8<$p^J*>qg:JA]&D95AW?QR+PAASV^( %jY\eB1?O8,!Qd/hhntP@XrJ-(Cs#4WO[/m##a$M#8eNi>7l*#W<[U"eSBHoNDnN7!amP]ma\4Q!4ll(P79sQ+cp4;hRTZ*E0Rp89 %e%Mno3n7!>6g`sg<d1R'$sfLkRG[@3q!M.CCYM\C\*@rrT1Q''<7UasWuBTrG)iZ[&#<$,hq@ok1l,rET'o%!\?<FF)P7h+9V`[8 %=e#B]4ZJbA3DWN!-sq#;Bu*M#J3,bXIDQMY.o>#I;AG'n:T?hI&HB*U`>qXP8Bi3IkQL&H6e'43m>?@[<50>+h$VXl7*":/#.6#\ %Vu]&>a"p-4i\-ZufAbA26/1B/rfY"79C^X0!+S)rm5O#J&*db#s%D(6cGj5<ca\nJUnR%.r+R123qu?O)Y``&oX*r=(&aG9*nq7n %NIU^rqO?mLcYIKGJH*7la+O.[>28eqINEV?-Zm/5Ub$CK`D\BMT]GX^1.9CI+,21igsls9:U)PWPe@[(C0]fCN)9<aBmDu.iua#S %I1$!/T_S%'0gt]`*sRtE&Ylq_cR'BG`2O`R(?uE[5r%GK0gmnK+9&?^W%]Y&lCn4H(DK:*@Yfo?5Q"Y1EPtOh?fsl%CRk3skg'FY %'Jl]h<Dp$8acoBQa-3Kd]"&%[8en3M;(8\iOpZXf*o.Aj;ig['VTB3+7+YC]2kY$QdLYQ2,@5iDlu&3AaZg3]4-_Z6BV)g8qfP[< %[3*aZ8%e^[5Al.3\bPUgp?SjRdf#?Ip`93d[nBA!-KWU]2a=="pgYeKJG!WbRO,:ds(Yhd0ShO'?OpMNRQG,.oZVRCkF##;SbX@> %?F95q_S>Fo0$XF24Si<`p(TTJ0q4b9R[)?*Vt@99$n.gS^Qle_5:r26;S0D7HMOCHr]Jj*G%ofTO`)>%D*OgFFg9VuoWE$!;gX,4 %.^l0+L--$.H=3s/Iu#$R5%40Cb9deV$=0"E.\1<)qaf1n\erk;^XB9-C<%WAr*/?lZ/+t!2B/bnV,>r^kF0TN)UeSel'fci0U95Z %qPhN;Ss]WN_?JdnAd]CJdl$U;;8?WsF879*?a0h1YN,-Pk\kM$a,Tdg]fb')oP+p:6mZnik\K"hjgBQp-i<$JrSZHqfD]*JC7I/- %D-5ec:$KEBmn<$fj/"BAE'=V%5#8K]2nV*;S)i6"o8Sr]SL7gtGrOb]5!k`YZ(sgF\;b3/$5Q;2%q]R]7+5^h$!WVYcVE;P&`pRL %aAKM)n6t!9\^rpA+qO&[QKML-R/bkaO5dW\^s$af:1tISV8iI5@diqf`#ft^Befn4Mh=@X!;1CKL`eM49KEi:m_eniT2AtZ&,j:0 %,(8Fs?[AQ"klB,k8T5ZFTS8a;l6>tHa+4<S#2_B^hn1aCrl+6_^#%@1XZNlaXP*HF8UiJC.g`^T%sVMH^ds3<X%'Dn;U\thb>R\G %ZedBWNV8)ee=.b%^f2pZ[jXu=%=;cl#8kRf&$8jCokNnPXlf.b]f2\YdS+@pVpaf=J(k)nm!IIi+MZUIF52coi:hpt]kqAC=3@nM %a^!+#p1Ki]f6[u)l;<V%QQ9Z[(fXhD0ItT:mFJ9h,8)*Ya2_d&m++q)D<7qEdZkrSq$dJg9ZD'j-?TXqY9;LZQ\>-;1G:G/@D=*Q %jVkn5FQun&FS]ufqgYG+/Q1q]X^,]`G@),X[6G1MQsNs@0^O;RnD<`,BZi_,M`gsDiCb/dBoB?p7MRk[[8?O6BTa:>-=`j";D"#Y %Y+!Q%g;S3@G"\["dTl3o(dMLe(LK,ee^e_7[IX!:\)"!1jhIP_;MfQg.=V?op@;D)I,4SR5B`gLo@\N`_aKPZb0.LQlX@_na,F>" %_mnZTlcH\HKnCM*-<fBX8HDc_bptnmc*!+A]f\=>ep8Wsp[2Njgg[>3\0P!>X0YW:%qemr?7_-U40NC1ptY3J](3L5FdF?*3pH?' %[b0+HNV^VI>Bn;NIl)?8rE%YAQs-:1c>4?.0YRJ/\FO#:XR##kf>4(uT)SX(>>s_NDJeE,XnhOT!9WO1B%phdMU6$L<da;Um+&p5 %]<7Lkk[J2/\h]PkbpLl!i1F3LGe3It\FRB*j/dVffb\"V./%/QiooCchmeLB4jj+E=Nm1%>Le=STP'%Zr$=RIVJ?-1cMYN>beI0F %pH?Q>&AaX/!RUTa?j8>8/ksmqItubH7S+TA'g]WI:,:AoVu$CW%o;lsn!P1lp&44-(Qs:R2ub+9I8bRo3`eNCJQ@6"muLSiCHT?2 %1]"gIeb>t^jpreOrcd/q;4>GFeBS$^e+`GaN.M[@2uckET<dLVgAbZ%jf-s`rGMW0a)UfJec'>iq;fS!q5N(4@MPeIrbpBa]rBRI %'f1=n1%Xl,ncoK*##H#epXg-q1jW-iRO\:9$DlWS;""c"*;c\+7LB8J&!'lPWR="2qPW+nWq?>_>^<@A?bbn#,Ir3">5tu_IImUn %rD`/+Z&IPhg],NE^H^9GVip0Q->EI]H@HQ(h.>NN->js?@*_2KjJh/=Y>G.JobmoSgN=1ZaJK\qWG_H0nXh<1;g(9'r4caE4B;<_ %?2J]@8cA[a/+:#5cH8r5r_]^Up%Em9efRSnri):\K8H"GX4AB5W"T:J;C>$\EXKiab^VnRKW4D>0@B_3WdfWi%O[BD%PN[_,#<@] %WU;u^b#@-rHfiILh>c1RKs/m:37[tWUm7"i+)'c6])RRd]Z-&(ru'o_S1=P;3V*K>1]LdJ^R(TIV6^_%T&]\),%jZYruXl1pY6>' %)jrPk^1j.92Lqb9@*4t:2Lp:K2c"8jfBtj3IiKj*e-'`]$h$iSrI92.5W!W`J#`_qRT]]g;W\K:Ac@Z)!!ndf(O@?,H;PS,'HNbJ %IQH$WruIPXlFD?VE]Aj%$`9s(<:uk=jf.PF@km/Gl@834KC]1*JZ$*ZFfrCS"0MK#pE(-g0m3MGU[i?+`U?+g^CGGYhbkI]a)Sf@ %j,(83T2?$rDOo&\s(*0\;XVrA']7'U-alYGGM.cG:U#mToumj.EMliQILdu?C-S5gWo&U1d"phXj$>>Xi\X7U_Ba:ecQhb<)[2uO %<Pt1'AP27&eUhI8Q9[gM+EF!.&r0^>Fjk,4h#A+iTtB5W9nr\+I/&%G)?0Lmn^Lh==3M,6ZsPm6SiDrYmU3j?6J"YpYj[?]!jUNb %Lcm,BoR.*5P5)3S4^+0"s7T1c]e8tSbE=dn/"'Ks/@QP":?b?HERJV[CYth+pg9*ps.hs?gMK=X>t+KX3jUH__$b\p`N(g;L'ql= %_WN$;hY1jFGMU$oi;RY2K.ChR"F/5P%Lub?GD_sMRXGcrh`Kh9@HIM.4(9TlZpWRjKXPbXK:aclBq1WO&;Oul?#KlEqPf!'YbpEq %rEDF74+"$KQ+$M3@@OXo_fDODj=aV1"pCcZN$jO!Fo>`kYIq9.K^1L/Rc^O$T?Me6?J>7'G5d!QqQ`>@^SfJ=m0@e2pR`,srH%], %-N9UEs7n#@hT2:<nc'Z!H($gtoI?4`=4d,0$joQKC,pb#X8h'AjO<t'ADM)Id$Aij-OlGShG%S;mmPb*pUD?L[!(k].a@BQX)meI %(f@Gsa`ro<P+FkJ;sB_%2T\k[3nAo7X]?@J2hsK&:=ZT5JoS!Cl;`/<_tD_tVcN*jCFMBR=fIie&*rc-\/ok=SPX#1l1%?Z8,\#L %+5V4No:I>I!t]lhE:%smVcC40P_PIcEU,sDSfPm@lO,nff.FA+0l5I2[I-<?-ed4<QSgELb,oiXS,Vl\;_n-6b,nFFf',NjD>13$ %V[bjWL"H<XF4AgfA7s$/p93/ZQQoRZH5fOrK7?)jfK6,R\,Ma%;W#UDq2oIqr6P2JC6X3S\`\lZ^!g__FPHLp*VbVD)X1N[4?h_` %+[X%CUIfM=kll+W\7>j06>Qa/>4"q)b_3NVA\u%/7OKjs<4e^$LeRa;ZW?8h$IVte;XY<'I&V6ZU'g9>G[0L'?d8TLrLEA0TiNcb %]h^Y#\6$FY2_6cOhtF[*9h4udLPD_tRdQPAh9-7>G',;ugh7b4G'`el/gqkkLG)iUSW7DiDk>8#1O6*7G4gk-DiGApK@i2YT(1.^ %LL'L%M,*2[5@H/#F_CQM1HX.B\'2NKX7p?h,.=J==i7V#aCZJ\/3c@DAi0!egGhtnW&5LU>i@'>mjF-#e6ea$0BKAPrP:)`Yh$=c %g"5D:G[<Bf\k%O)>B%,H'NL-e-Hh/7Hl4uh_/eh*Ss_h.BW2_E&\4TFg8/Ip8C*U.<X:QT$`t',XOo#0+%T*m1r3DfD>\A2Kn`QS %iIXGe_&+-#_XQsN[?6fFct1Oc-AD1GK_[Obn2>9[;&g'_7+n#6G?a2diAn:tF\ZX?I@2b[#ATdWGM4M;$h'C2'ji'GkCXCtiOu_f %&kCh#j;S.Wg^WZ-=H9?uk',`nEinP(BXP-HY'tq3hhgfLNXn*O%Wh#B$0]D/jkB6Jo?bnnZd3c8K?JFLEQrN@6>'sNT=;<PB'\Dg %^%l)c4a;XjYH[E2imspOoa41ihs(q7?)V*LfWBoFHY=;X>6_B>$SmRg2F+H3W:(5&D+ahdEjHV:,8<063=N<(`1u81(dg]Nna/VN %\:HK^%6(Lcm>T1!ir#%p+iK'PolUO3DS3\(6;eZ(^7ES=ING4[O0kNt*6WY>%HHf>Kt3CA]02j;B/:=X&]EIh%JDK&<'#cuZFt_" %Z$r?gf$@si\5qn&8phA4n"nZ;qC&o\a]-cWFBJLDLN^5[3pH/b95j*n:#(P+F?AiGm#0J2>pCPYp+Dijg/S5+[N.EAEi\"S1(\rX %(#9VZU,sSDGL&ljlapGIQN-cBlf_9Hh=gn*X>r(f?cgNtF.0l#q91@i1&EOU'J(N/q+i]s/hJu>9rfNWCmGd)7Hc<EC_dhVKkNAT %E)BuK_%pIaKg0&=6*Zh:@e>,SR6+mM?EonS@e=PFZXEQ$6X?n':AsgdQ`X@:HS&mS]O0$AqkT?6*7@Ar\U8%<E_Yue++EbCm`XtR %P.S%"hMQssp;_a41XV:SG1NbMX5[tCnE)%UR29_+RHYNQR^\90S!W3<I:KddF24D)i$7S]]GV:0l%N22l9bdD3rII`f8HD)"5Wm) %(h<4YN+?h4<p?.m4j&k$VhPAhWPOU4cF)V6CR&LqIbHV'XWJ@.j5/!urc)Z8CSu2]Ic!#O`XtoGI7%_Ve%spd$te#b&WH]%RHX<E %p%#uhiq5pI1,F9eW.-b[&cS(poC2KucaR8s;`a9cV:+.K/fIIUo=X$_Sbg`FO0.lJW>T1,^XL.ZoUfo!4f^N%41-EEdAVEj(&un_ %g90tLF#TTE__79MGKK'<)RZ)RqP=8dLYIF;*RP@gH#=rRkna9lK?d5U4nMfM9EQ[)G`nKBQM:C3mlII-O3KrG$,4Z#NkJWb"b">> %hj880:!<PQB>PZN',,eD]lMW$9sX;m>h'q\T\oc)nPMg*Is=KDo;\/5?L-UCj^`ku5.odT^^Q#\cQ'2]\)Z@p0(ts1HoFFg2k8=a %aWKF1D>XndK5RGjrR#nq(B?,5Z-Je8hg/=U"uaR9CWh3n$&=AL@!'_q53n:+0dVfcq,Pl4TD^/sn.nn\]'?'):@^\Xs7)0?(SWmG %YPOXd9Z1!2nW-QAii(0_CA!NJY['?T^$O7.g,R2U%6jA(h#51`p0*fRC2FCaKPTOr5IP1tFD'Y(AufuM)9!]ho64)NeAaC!Ck7!" %Is-T/6[m:0=0L%4Xn@Y*!t.\ECOMAL)gpeg=4;)(dXNUr#oBg;PBC`*\]VD\c?W]rh5_bEFWr>(Y44`j_8h%+Zh=6c<ijsQ49)g6 %Vfg^mFh@<"'A6Cnc2[<0)_XK"->E.igf5#-gjJF;r56OX=mb4IG.^g-mrVaC-RSZ#JOf]J<oRA,Xo*WNC".JC8[PqjG9A2;.2)R1 %$kgN@p7ECcE-hr&qHh1k4o+-1*l:@J=5ie[^G_,E095)4Z$<H!3H)IJTL<5PLC1AoQ'NnjhGL?%3A+=RJ`rD[m!C9r>MX>UP'0bb %Dml\/Xik&8[*uU&O)8(h[MkE;c1G-`mt!#W(;kt@4KinR9"U@+YL\gf=5'dE#;6f,B_F.P!\YESBWlO#n:D=]mALTV4,%[e]^3&N %=,e;YQg:&[RbAL_XOXLd"SLeQ<t]m-(e$@-=0>*^j0!365L(j^aA)sP+(&cZrRuaIV2aM]YB!UgfW`>#6<iao2(/F0?.uG<:G45r %[F.gNXiim%iHah#IX.'FSkju87`0NSkY\P7XEAbY]i+"fl+bYoCI)Z9NfX)2fgV`ahY3`"G,s6Hb1ni0gfeduBtM)%CS]A!X[^>P %Qdr4dl=I/1\&%!*85&=W_HjbGMp"R9gDY5kXYjk$A(Un?A7sI6\S1P\j<qZYUQ\`]1r!#$HZg)*$<5p?F/.OFHs:p&s*VGSr4DU4 %>:]10oab]>h>[7T=OE`$%#"&YI^bcr`oXH;TJ&"[mdQA4ND,om]mIILoF9n_qeKoJ;EY8GBc[fRdgHLiYm6Ht!kE*RWCiD<d)=Mi %2nZQjd;_K5_r(<\0@(s%pmfrc\gDYqVBc&Z=1NhOdfSJYP<IJKAUAF]lINlHgA5C8[)]#)4gA$LX*go4;4+Ck(j;+02e:6b>hZeP %3b^I3c2#OB8)NG`)nj#V7%;Vb^="Mpk@BC"^@Q1M]DKnSGN`u;[ba,arR(#%ZWrE7Se2KLn\2\HVTDNQa9C+"n4aF=_mdo+:IW/: %pSs"=5P;$qkT7Fs+kbN)\'7?>'[X"/."<<7O6dU"o)I3=`;O=eo[*G<;A3c9M=cG4V2r+G(d5(0[p.DB9fMX"]lp5UlZ>'<g:a]O %>,0K9i"=*NakKUDX'b@lAM3.HZ\RJg#p4FklgtVOBad/2`?u_9&7DC@Zr+I3,BTgVXW5)4[,LLq53+oQDSHh)p?a#;IIu/JY.*+* %\2sM4C&].I6&&u_E?pQScOI'!f!');[4-R5D3gLqF2.HB!KDE;[,3@8MSM(@j#?tdDKU8=Au1uk,dp2AR@Gg/r-?'-*r4PC7%i>= %f)PTVd5n9aG&-Kg7b8]>!U6[n_:YeGSlC$u_p+.k3a:oUqK81-_m[L_CZ&=XgZBIA,DH5;*L-AjdYS^HNO%-62f#6B-%L.DVK$;0 %T$\7lGM?/pU@kA6Bd;n`E#B#o<3`%F(1L2@@l0HL1KWE3e!m@pJDL'ZD+1;gg6\6JgGmrOKt]VoYKq^WTMi*UQ"F%hAN*_1(7^m[ %EPB#lH.clp/i8LfX(Zt4.:16[q=Q=UIi;_RF44$nPtacJhPAJ7FmF?o7qbXXQ,tNo'kE8lPb22q9;eR:ZauWuebiZL;c[WK-1Z42 %5=l$TS6Ke.6E+E(12H-&g2K?1k(f%]JHJOUOg`sCd+)(QQ8Wp[-Ck6V4F.VEgV/mm^6_%oq75Ks'2KB&s45l_VllVo.lL`S>%m!9 %b_3R[DKcjeNa?,fF<>_M2m&hA+"]hB^8fjh?Se.UI&kSqUP7`3[sm&4$lVk:)q#li')2%.*iWSn'L&s2V0c21>u]P<RrXunhdd75 %?#=[!Wi[T\OC;T81K:`gL]</dO%-SF*%r-@#3hd^]\YJ-0tUXgUbfVOIk0M7KB@u@\!dme.d_qr$/9kG4gt(K`VDj&M-EM'kIEl7 %d(f`'FIB8n,gVi(lQP@q`e&$8@CmRTO)$+&hRQIUO[F&V"&a'/['")na^lT%d?I<c8!QhnbiD[>,KL\`1bCP!-f^4mZ#QttT"&Vb %ZenI'3mT.IOj,O/Sb$`=e.X[IURn,qDU]?,cB$["[3kSd0=s)_jca46jqOFEHOIlRG3>[O*-^&ih$)U$jB`k=/\2=E@mX!hJGQo9 %1>hXem=e;"6_^&^=Nf/b=I3_LS?!dWNG6EWiohFFa.7,<`4NofM41D_f'SKHF7j!.`Q7>`f5^^DCY5?q,EX9mi!3b:LcLdBPVSG& %&0_>8dd8p-5L:W0EVl?th;^5(TD;e?H)?";@=E)N-QZ661-UUdR*F>41'q`(Tt'4:7D^b?c*%rW(.rL\7n28h$L)Qpj4rMGQTH:- %QbI]G/-;+kGDctF$VVL5A%all`df1PeWA0Jk"M/!4&Shrh%XiiZ;j(rG0]G8F2],cNkUh147t8Z-=a55o6e!dA#-?GSMa"DWtcKK %i"Vmtq5,Lm.M.=A@iHoKAEuH`?Kdnc/Q8#p,#@9mqYFD.!1rn,A\0\f#rcTXWaEe_DJE*eG/m=VC"'+AX9Wh-p"rb/QSE@@3k@qB %kie9lCrguk'p`BDS*oC#I[*.qAnkk6p!?Xe20(H/O0R;@ZZ\s+A$3<lRg`UbVG4t1P/V9'?0]1#cRQuC:+a(YL:/R<\a_AQg"^oX %9>RR=Yu)U<9pc-eG'/`P8I`7@5+NT3?]J-Ia.-Q/q"Os8\++%93Y=`Pes0iG]r>m)?GX"s?'kiV>NTJ.X#eMdb9cJkL.,ZR)j`=d %f=-(0h0aQ)#`Q#qO\oVe`P<AAC>[0;=6T(iY@LOAc&`A>597'`1OZ_ejohGZpUo?@g1YPdFG4<I_[AN])MZk3m'Z-"T)>>1-Z\*& %C,cdXXMMNY$(eSc[Z&d<.TekBL9CLjF[d:#-=3da%ln1Hd[q=;LWfZ6f?X6TiU^*V<B]ZT/rZ[u8!EQ=qCP$$=kVlucs`u4H,Jr. %"pPk.Al"!h1%Ll9UTSh):p!EHcSaQ;c1k@%]g#\ko5/i7F#LAaP7p@bN>j_M+j-Uq5S_HQp=l"7IS".*B'Ws8JAG'I/AH_gdZImJ %or.Opr7k([,`fsX<p%3_UX/5MaY\_2aoh-qCe.dNAd?g]lBW0DrFc2=N8Cbq[UXKe9>^9im.BY.^Nli7cIT%D9^;D^(-hIr?E,_^ %X%'T\Wq<_M?Yc4S39M$S;mtdU>\3+7q6gI\+"*NB:h=kckL4o/-TD5r4]^GubdArp6hpm+[1u/eTG'g'NdL4K:7j,[q"*(GotTUr %\dNSG)8ZF!Sh!mr*#)MYNA9(QIKK/:L:""j_Kr>"\u,kWmt)--bG/%_libLerF4i@rNj\*ULp@*!=*]CBBDQSPtnI240+Xb(/X:r %^]';#>-l`?G_esJO4mmV`[t3%+>\&=H&mr!>p)XaO#eq;p9f$GC7BRYA2Zc6Vj(N4h44TV[pF=,]omZ/IC*_&(arplMe]@n-g+p7 %e>Ra`W,8BU;,c+Xh95($L:>]<-V$h\%DT#Z-M>fGY'#o@^>:GI2U;CC\hG#&0jRjBp%EY%U,Fnc6A!m>:.655Al^r3gNEK6hTpo0 %?MtEUO#:^+pVLo/-dKIEG\o)UlZpIpbXj[%V7AaaJ/b@r<8Uu_h:4;q^9cY(n]>9*E?KF@gd(Qpoo%ueRU:JJpNi+eYmn./n7E;l %eupaHlCh9K)I,GsH*0>[?"jr\/F44f8EO,M;AR,*iRd6Pgj&F2Ie@[;XEMT#jbHJKIoW_B?m^h'Z^!Pi7_%1KGLkMX\F?:q=8"Z7 %L1I_oDYII[RYT$Fj2T#M\t2i^YLnQ@j"7L$Go>T!D=-O]^%R4]@h"tDMR(bAqc2:Uhh][_1t>2WY,G:gkiL&"G9=J'^9ppcGOMM\ %oB#o(9'>``g&9C^:JWp!\i4i6>d#]#Iu.JrfnaP$?[;VFiUc!TrU#ZTT!*5gX7>>,pH4jdKA_LEFOra\TAFX<=]tTDiQfSuHgU5n %pR/KM1V9s"rDQ3*4mfAB5'aQLnfXmuQ0ZU(X6U-$[n[07[=*F1hA<A6cJFW>5OPY'rj3HRT>.j]dG"#kDXI,BmQQSI>]-\L^V!kL %gpm$#Ap4-kH$V<SZX;_a,_#@M_oL=+o"pmD0?pu<s(UT2q<"T?qqZsa]Bf3'0/r&8+.pd$dU[4oB$SKoaeuW<>%=E!mf(>^=g*2g %^NU(7n_;=]Wk86,b(E3nhJthmaPHEjVn][aT5OYB^3.*]e(T3?q3TXFq&<$L_n4(]jihQ;H1#QmUDgk8/"[!#9+P'9rL8#_?JPGF %mRm<+lcjJ;o$5-3:N)aT<NDC+r2G-hj(/%Ghs<C^Q+0cmjgY-[?_8CC2.drdRd]&1Ge(E!GOp$;s7XU`dkcJc2HkFuBk=\T]le== %q>&HJI.;3e*lj2p'7[Dgh/_tUhfipueb,ir2eLe'>IF7.mi:5gQPV/aIGO)0F7]-@CQ3T%K"p5OHZl6up#*jENI,Bl2=%R@+hI1t %0"6;Cqr#`hL\orUNDJ'k_re&rTSLpc)d&76dG*kb'D(j8mJM,a03e%mn[@J,]((/rZ1?i8k"g3YGOUn(5Q"-e:m7;MkNM*2JGsrj %iT:7<dt>+Kca\8rhSsKhR<RS+RB?A3\bkmT`]\8=dHRt/o60rGddcK:^X>a.!Ls'pY(cE^dqJ-J*PeRh!:JY5/fN7AU4kh6XWPtj %)b0iULu(XoX/l-`TC8qT/3`rZUJeYqb?B#[qUL3Gl\?!PpWokQeX^'IcWBj(hlQflr9<-oH04o#`k1+L?.pae?!GsY^Rf)/-&mW( %'4%hpf)!MF`\G`9l*bX0m_]u:Dg@&`o??R@TmQOY>4CtEk";Omp,]_`r9Y_4Td6^`,-uN<mbM/aV8)_"Ab!\0o<.]'$]D0"As_p< %?d<Mk2r$:RBmAP5hd`S0rB-%!=t<8C]q8C#TCslBVm:4eF7ZOBs/tr,B`!OFrOu*8m@U<"h6aUNGI)_0Hku+`h`,Wtgf^h'3qo/u %cLR,=#Z$5HN:"ZdLJM40D%GcYgVc[3[]mL=3Nhl)k64TRI_U-9qXW7GkF:RsVhsFt4$)4L+($!!o,P%?O4P;to%U87W40J<IdP8V %NTIl/bflMQe6]:B5+esF=1rn[%c]VupYWC`8))q(CAr=YpUL1n;4??I$=<ALaO4+uF],AdlOgYgr.c<]p5Q1%fiKcUmbbZ2-[GGE %[b(,_b>7"[eX)kV1jmM+^Wp`SH/(JD^0'4gmHOIVI<f^o4#jeD,[0#RhE"qfZbKMngdkbbS!e\Df@fq4Vk^qFYP#ce]G]OTB@cu9 %h5HqFIT'T=#Gb4*`dIBqX_krsQZ'"o2VNBGm9Wea)"r/(Lj.25/?D#sfPAdVk#f.mI^l[*hgAS`rdEZU>T%a'Y+MfPqR(8Ilu$\^ %hYubu5/ZmFB$D<pn>PeW=ag3s?FX]i:Z!mnki:76^&@6%RDi6Gc,"l'bM@rsO\``pmbM)]QL"3Fa8!$6ct%Y)fs<'tRh%Eog[m#1 %jn)<3S*rRKR9aSjFV_2^+0tJU-]dP:JsA8bMt,)VkI^00YHM%+Rm6kWiSFLpf<Y:`]Y/n]4Z$Bu?$9sQpE-s?k/r`9mGZ9*nJQ49 %2#MJ*9X.8%dU/c_D=83g?)FOe$d,-EEEB1Oju;=>IXTg0I,EdGP6ZgiUH&VGp/PmAoHNUVhh(S;]3)=jIqYHVU*^`%%Ln97@(sVP %ZcYYOBCZ:;:mdf%d$CW:ln-^UrtJn__d5rbPo2rMHc=+&B9r$;IE&$u._.8<a0XD\?$^([@#sI!^?%ZK>I)4p3-K!`?AQ=,R$m>G %#^uuAQ1[kD61\'GNb/'em'"p(IIlK8$o>6/[<srMbDfd?*]!]9IMKUSq^_-?Tc7KnD1T^]p8bL$d_BGj>=MB=14LaD*1`,Om$lDt %jfh>D4/k$BFpaT551@g!rF-S(MPDV5cdK"F09p\%c<Y>.'NXm8[VMisAn#o(;-C1Lgp,(U2^s7"-I!cX46]`-`\;SNd$1$Ma#r(i %*tDe2oP+#4IbQcV"lU>G?sc0/gl2s@p.P5q:VZkV3-qoM@MnlQ?gbUL[CNkqEr+"9Q-\04(WPb>RqL!j("YU@R=.3pps@5V3#C[e %PKR%6%lOrFqfc),S=Q;?DS18h7'Eol?ZP-o:+GJZP4J"a:535niet@!n)dS*2`1rcZaK"_&cHTs(o^6K9CK>K=8h_tSrt-kr1LZt %+O&%VXf"q,0n8X;=F^&.pE9L%[DU_`DKG:>l<\Dp@cQnMi`u$*`o]lSgK(.[pNEE]nI)chm/OfrZFmUJ)+LF&Mo*CL%2;]BnOmr? %7_D]K]t524I(HrhZubE>@3)G(:HiWt5(!1LaN63Cf<aY$].[q?&cK/5203Va>d1fW_KamF]]K4Y6?NNT(<<UCeXin8]^"o:eos:p %Z$GC(1<\Fdp[a11b0W[ZBP'0+$tVL7T>hfC]@E7;l_!&UQKt0<`MJcVfi'-QhJpf14T$dkGE5rFgjCFjM&<kVploo4G-Z5`Dpg22 %44YJBE;anXp*5%&/-"RH7SnGWX*f*bTY+BV\9qZ7W]3cX?0'dWqh<9g&N5"f^BQbqB_otHr>RF3D"F6bc']Nl.&Gqc6f."Z!SD\G %0UbEWrthO3gd'?[g9\*\T]<YR^E#L3f,l*Q-Uo-6n/Un:n@ZNj=$PO?fVbP7*o#&nrq:+*jRq?LL/2`jHaf%pp]QbWME;ql`qAYM %S*-Ql<P8.nV`Qgq2k$)JH*ca(,-1b%hCjd/P.8+%FR@W(MYWQjM\i,G?QRFo^3['YAomqEZ2Ti%p=;qc5/056EOMJ[[5/i6hr`k1 %5<%n+55Y-(rOWR^+!0^mqQsX2E8fL(q=D3f[,3mccKos]>(0a=pQg<OI^"P,kPk!?_ndYi!jhhhZZ[1FDofPoqopZ@]uV;Op;3lB %O5<ibf,*eo.ne1uIQ$KOfh]T$?`rf[55oBLA\$j']`'@V24t[dT"FW0fQ&A3KAg=$cFT@LaQY4m<6\WrXdCa7],QNBpLn.&orWq< %Oj"1P5;/R4mX/?sIpG&g0=]nY2F"A>Ai*<G/U-VA@*HilNQp%rW#apPQMYuSo:8U#HMtKFEW#WT]P.!#qGC)D]CPUV#(k<NC3K11 %m@D8Fk'HgZ]DM*Ue"+;r-d_F*h/;CNn(RKo)9o'^Q\Wu;bOpSFj8"u;00Z#_.r%<FH*^Whe"GBAoBkF>p%?:J9.N&q[q^h6[9nF$ %I!0(?O4T_PK>(V$EQriG(G?l!>HArl]Em(p?Ma-8<:=uhmbWdqE]7%-n$&(O?Z,e5XPA=&H[Y/>ajK@qrHFb,Y*`_*m[bKEbgMLL %i8-clK_j!Mh9s`>1O=ANC=_kPdX&%oEgt"(kf.db"#Orpg&CT8Ze*69)Vb/OU3lOU`hClZ[!o<qIPN^kENf'5E]%*)rNK/TC#&+i %Qc(Y)3dY`]CAN#,?$u0SFan`Aa"X&+*;kH"Q-Oc'\[o,Zq!!8+fAslOptIlB?#np6?Ur:tB#e`F0`oM<f:.OgB8c^AocF*]@2A\2 %Vj6-]<GU7u=KBWqjJ[L<i')F-:M=?sNBFZLbO>%lF05(XhbW[fp6M%f@II8+q8N88j2*f2qrRa(o^Mk'K9`9Vl4/93[)9JBQ>uJq %F_>50C3'@LpuqIg-L^-LSb2l_c#PBs?eo(m\8.)b7cJ[eI]os1J,-*1$^Tg,"1sBe'?epM+3^E]J%iM+^[h9[hRLrbf9`+R=71"P %<h`+3]>s"LjYr7%F;W-u&jN<r5HJd'GB_Vi[pEu\iIAQ2PIWfG=.=8,+)RoO5&U'^#aRna0H9C^[.N^OeW][T)kV`WIX@c)`1d$u %X=KJ1d+M!mKh_=#_<kTA&$`_gC`G%@D\j^<*a,duo9[/8_](Q/bkKrl\FJnJ?Bo>gKCeoK[rJcuB5V>Trq!c$LXlA%Rm.WGbG-ZD %mC$,rA6Wk+'@spI*3hf$gt40]IPN,,b18Yla4B_HLXp(YUJ9'92tg>5FS@U$ITsE<+1^NmCk@S<!`eLYI.Q4/(!hgS[f>L;q9">F %mC25\Cc%]P6b94uS_r]q>mh-kIf3gQ@rQ4X0,64Fd*(4]8%dr2l\/2#2Hoot(Tk&`)a8tXdsQ&sh_6Osq_[Wu^75&m@e9<0:2fgY %JU<o6l12.sa6Ub^l+OaU_Mi<VE;>j`V]#MG-J\Ib/BjYalb-\\HhTtpoD2&T['>(%V`pSfs42J"\_:`r9]j^9rF/eLY.XWbb)7@n %T07P*aJ,-tC2\QB_`aFB]YD&TZS(Ir3Q([e(Sg*:eV@qfCcbnZW\e;mpePD_[[EU\]ATLnld*"g/fS\24?sGF?1&\KXuO*^Zf]N- %c(FFZF,^P()UG4N3B@(Wjqp9SEo$S9k&.MG)=PV\Wpa\6[ci.'8Qa]:gU^K]cT](QZ+7U?HuF)7*>mr0[W]7AYItIPZRB:Eq,8VJ %OUl@fhRcWk2?/$/nmHq*p<^:AdET]c(4S0#2Z1BIG2ms-Qs4pN1"SSb"@hDE:R9JCpRYF$*8L@BO`/q-?Lr',ljrL#^%M"7.eC!s %f%J5.H-L'Y8Yp:-)W02,DiO5cIr3NFQV*J.'CZL++rM^4bXbVd@udK-ob^N@]6F:cc[Mp@;U7$[!BBuTetYAa*NCVk=4]<d!oRAk %[I-WXVO;2UC4Iu+^XUH%G2j?]Iq+V>+s]X7HEsi]="><(Y#&64VA/ld>dg;U)C2/pPh>aR_8bT.rcDb,i09d2HDRtV@U3Xu(Zl_? %ILO81Z2OY!VifYLlLZD:>WoZ$^]tsN-]d/7$u8^:k$P-\o@dPD;qbo5s&`7ba;6VS\[^'fQ]DUd2c"luKlMYf%r0jkDaP(?ePDRk %LXLG"9Bg7%i1RAr$kV0?DD1d'\#!#:HGBAWJ*aY%+n'Q>c>W%)L[Fp&B7>[Mck_X=g;j'h"mkk#'t<pZ7a^&E8l;8Z\VEmqjaKJV %hVP^e11?f)#O./dddMC`.fEDadK*"1ZH:3=T,A(tBW:u.rVQ>.UUL,K1ofqR1(=YEDB!Sjc&_9?;2sk9V<t'9o$/n%j5\9tgJ<GZ %e_%^T1ZD\Ko-een'(Y:NVqLUcmtf`4DQ\6J_-@?r-r6DVrnZUQj5Ec.6lZm-@/:Ut8uoWT`Vu"F%61/npM1<M(Ra!LV=+S!Zo_H. %gjbR2Y#4'D$88V&_jjo@bF`0)..>t.1&E8K66LD0V0';PoB3aI9s$DqiNWD[kdJ)>)oM$]Hu4)jp8?JG\XRe$N9L0M&r>a9hnVEn %b"Cdc?n(BmpoP%G<NFZ[+5I\O)sL\L*K3o&Tbnch1(4XY1iF(82&NODCgLhHS,-W-o=Xc@0>2Y@Qd*#kSn1Q/K27n>;C?gR8<FJE %f'E"O:Lj!8j1DTUr9_+%K8T6;lc6E2XmUNfpJu`@=2]EgIe@?cDS%:<.jmUP-Ol;7h+b"RRR^^UPHZV?Z,8*"o?\sGC;65`/9q@: %8%Mf<Hu8;&r9Rspn&m4M;aKsGp]:lljL=aI*8E6XU"S\XHr\HMb.u&h/%$1N>FNl"$RV*4fUZn$pY-5$g/%F52OP/seauJG?F[+h %]rq^6NcUKd$Y8_N)aJ6,-b!$$]]^@<[B6j*QhTAJKLabW_goD53MrEf'c;2#Z(MMc>3hjXX94C;rMbr/=l*$7-o42;>#A$*T?BL! %VhITtc[ai!FBkd3,l_iU$B1=dH0+DUcR'51NDs,aGl"jU"rqD0?+kX9rq(.#`-(/,^G]5C<C?4oVtjQn^>%GVb%f5iit6f`rTSP* %:-3-G*F15_/2uu)B,/`rm!_"g^.3"Oqg$h?H#9?3lE.UoCj5BN1cP:r__RhO32kZI>qXLOC52ghG.M=5cMCgYoF^<%H]<,'eS'Bb %Ae>kNkDQ1j:4>L+8,a>Wet3ukcZk?*>Z`ph5NeAPj6oiP>B+r"Dq0j/]Ai9kB1ooCX7I2[luKACg#)-RSB2Y^LmcNLNTJpDWqs-Z %iG5nU[fY4Z-Qa:=X#&ZMLX/58D_&&"QRZ0W/2c2>c>fXXE_/JoPb#9"V,P%>''dSJ[J]mogg/E:c3H&T(1*k<jgX*0f4gnEI.$6s %`[qt@Lj58M><*a@K$S^=pJ2m#kW)B-ir?.6=^M6mHd*RmZcL%p)S(?cUd:t@Q20Tlb;o0^EK4uWkO.ghOhU@SpYmL1#M2OJqnB?' %s7H#65=TSK+2(BmnlnZYR,9X7\$,OeiMcD0ggY2u\SZi0cXC6\.`6+K][(0$WiNbC.<]-!4iQJ?lWJfZ9;Gd>%h[sUj9HE9n]*Cd %cL9j[/<!!p9orD9.\cn"aSq/]=;KLMUFMWcc1ff+nS/l%o5`*).caZlQ.KPICoo%BjYSAZ_!9cXP1fda4^!#XK1?H%9$.!LjWn!] %];R$6gn)<H="c@?GX.DXOYdc,HSE"a4.sj9RTS*.%644I'fjo6U0#W=Y'&V(1M/=C>CG9XI.-N?m-;JGXgN1UC@n^*ZhiVBMQ:#? %/j#'Cc.+1*\#FhEUPOguq5n,o(rg>AXQ:?..Z&"j&QMNn9C:\GYWV9f+GF[8/=dX$E+V#X)P]+IY5c5S4YQ>9j9)=7_(@TNJ\JPL %r)tne6l&PkV=n4F&%/:1r@Iu&5FWbaojuB2kfr%/n)h]@d&)+:=17Qi^4Y8omXp\]):f[)H/!25r!-M!Ad1Ud2=M^[OM?q?KhBW. %1m)g5*Ms3k7E2"kCSmT8XSWMXAT.,i_MeFdk8SVC,.2CdrR(=C/(^`fDD28p()FXhfi?%bQZl]pci/bW-olBb&)0d\/Fbgr*T'/P %/YU&bYAgo#Gp%_@/j@kBH[60hI.Ou$`aQ46]:-8EY<Ve5$nCqj:oV]>bs;lhC!WHXr-A>0%-h6+1$nksp@YK((j)ORW/X7&GL3tp %LL\o./Pn1@bjpbn>$$lr_hH_!Z2^Ie>M6EV`Qu!MT_[]1b*k+7m#)gJEpHdG#QB?JQ^:rEkOs</SSu0>MoVI,J`!,W'\Bk.D(sP@ %/>V.;p9n(UG.D5DiQQeu-F]E2A^j@.BHlOAn7\N"D@Utqb]j-#^+ZUWi2tnL2dCuAX`/-baQ&pRc_--EE5'lg/'$J?!5kho?MnYI %?Zd6=.LYP=F5r9<BT:cih<JNI@Z\4R])>R\pcI+mp)Wd93@uukh<gbhSDU!\q5*C$GB0=HpKQs&I^dk^^V7j&Hj;f-J%[N@4aB2: %GU.ng;WDQ+DK9C%h^e\Y[`-a1@q0*#J'dYTH+uXr-f_FDpW`LG"2NLnh"geac%"*R[JKjXdI"()TXP0pgLO-F0B6jHHRV0<(k^[Y %h!OU+kWe;1hs\kn>n]AR_C/sIqsEAZ'>T7M8Nt65o^\6I^O>PF%]\n4kE?jo7GqZ0Cur]11r&eM]fG;OR.V"bp8ZrnO[4]n>,LCf %Bq'Ij<AnjDJhng6K#9paIt'#H^H1io3p\N%RY-XOo:D3oDn=P'A'jKe^[5WdKu*8#/IA2fYbc?BZs=qmKgE1;A#umlY8Dnpo=IF% %,:n48qhCmY(Fr_%A5F8b*-Q<UkWXISTU]ZA_-jV$\+"Shko"Rks/hZOB"`4anpkquhg=Q49`:[:]iX!QC7R!5ode7aQUgu:)=-N; %f6U!d3`!dU5Hs"u''!c[K;JL326XbXealbfq"p*IFSN"u;5NjV3e-,_ggH"pgQ``?;bb=R5HpcoG43j;`5\Ef$;4Grbbsk+f=JbH %qKVLBfm2k6R'LZbs7FrQI''fB=t?L<j6<3.O7)i;2#h/:VgnL;ar&&l+*UJor14j4Y*OPZ0V=r7*m7.Ke!jNPeUj17o7thd]#]9q %GBEW9@Qo3)'<4RJdkQZ,^,OX2=C8t1Ng=8=diC_X]3muWp%7p%dUmp@P[)qVaYBF=2tnA?bbmP>qE3)YfOe#`bZ5QVjVCp)bunhb %A<oASo:;Z8](pHK[,Rq)<p-0EgN9#[6`G%k[_T>]kOeG5aaY@0+8GK_1e/MZZGCjerSbK\Ru<=6UIDOD\!"]Nr=U[*^E*5L_R;q> %:cmON+6URkZ`Q0=8!r=ZO/j&Z)pA]Se\e-'cb[nHl!nK:@N%Gcq'<=uQ4?=qjZVu]%<h*W0<j%',oH*sMETf_q/,dZ$f#I1559OS %'j^0L0V:lr_\,Ut0rVC.G0[MqT[Mp:F&3DlIsI)=7^&(Z3m9lej?9aPIAR77:;B>rL=Q!u-e+g891oZ<TLA[d#8KD[7IAu=C%K5" %B_ITkYOo%O!3ZaR6&G<](_l=&d/NL(6")@J[GEYD"TT&Zp7SA_1C$XM;#c%<?gC=i'JsJbboDu3'[E@BqlX@)Vs(X6[AR6HPMaTD %aDP9HIn"_Pme?=2VL?IRb/2J1rSesl4o*XH4-NlJ@Ega#-FXs>h1s3%6Ka_Vd&]*R#:=Lp3na"!I/.WQ;K.)dI:o-5VQl.DaftNk %^9]?IG)mNh`L>Xer(CY,VDk\o^ppsu**IAcP<&PE4_=U@m.JU(L^Ir-@-a+4+'@=`\+,X%qZL`=>(5kh;YH/]>%9I=AdA%Q2&rGa %0DAmfh=N/4PYVg`@0m\&hjaij6Z4p:0suVN,rYg@NuLc[gQ>D`ncKKpgheA5:$Q$Ap.U@8df")&:j9)cUt7WLO61Ee&s*4)]`"u# %L&i<ER$0IfH(Xc+PK`\G;U,Wk&*=@*qfae;^4-OaqJmpCq5k3nf@'_-7GkjD_,%tSL^:)4cM1Z;DhH_C+ptnc^fiA1_CPqq>S>`* %XQIc'I)u3%*L*$D'9f>K]MQ;iGCneF?j"TsHEuS4kH=5b4X-*_,f3BeI^;21!GG9^"i)F:p%ZGm%[5?m!&Nb9W#(C7-LCL\J(S$B %P>&F0U.XF+o3L)3I/Khg;N*/%>X.Q@Kn6hG]4=AEHm_h8HWER.0ks_%_pX^YqdXHL%\oQe@kGc__Z9+T3Hmd*eg<a&cQBGc0Y*)[ %A"*h_I!7=$,',I9r"B-d@nZ(<IX]ha*"%md;ocX/5&+_Z>nOSF;4cQ&h/sZ6kq8@g5ZW'k07F#tEe,m6ncer2SYq&R@qYn50iR!& %gJ389]qP3'2Ul_7O5gGGcfTi>\8cIu:PkMV=j*c.40u?Wj,g[i%B_WN/WXUSj'1MFI!b\Z/U;5gBjjkAcau)/UmQ`_K$NSm%,/qu %LaeW&WAse07$t@@CJTDds4h_fBcgaMoc:jf0W!1n%T?CL*1QPVU=-lBfF"1WFbs))*<[lW:pC;Tq-?)WPmUJA@dIInnC-XE^uQq* %48Faf0;-HYS[enrgj*$7?F-u]?m@#D,&+/sC5C[VAdC+M7uKC2DmphN5okn%Y+rD`K\E[]rW;\*q&+f9L"9<j$e:0eA-a9P'Pr9! %*3IQ5N%1kE5E#%?AKr6X[Z`9ORC"!eTHtX$3g]G2;2l)j\+E""D.njh:cF!@@bC6*"^cQ^hkmeiY_hP2Ll'76;[MCaOXB)8/LQ0B %#h`,i0l5o56U\VpcujaW_^7<oP3t\,p=UMGG5,16*89o:2WB*I`W-FF#&&V1!$0(GI4tq;4':l@UuG'_@6t1Vk*APY\"cp,=H:N( %[N,P`e_XrB0-()SM.f.ukmHDK%'M#Hq"ju-@o2WA(._FEnb(XFe):_<ZZ*X5&&T_!gj^'6ihm[!$3F7M&ndXr`(C)=`?]F>Y\Xq" %?\jX:HeD-O41H%bM>LK4iSGlrgA,D'Os",KNn5TCSP>2=f&IqLgi7-!%&5f;,n!A@#g(m#fPZim4I<8ge\,Bq8`$H5r49l<"RZ`7 %K-,XqLn%E^gTB[djcQMN^J?$gjJDb/_;ObC<.5nl9=V1O_[77[)MF+`$'QgPl1-ZY]2\$S?`tpgGeeJLRQNT^16#,eor?G[?t\\5 %A3R!Nq*am/M!LsRg4L!%/J^tjmWp_KaloRAPRUr&31fS"_U"N$'6p:eGJ/$X[@fo;!7Lsmgd5ol#-`QFOqT!c*Xsgt+\qle8(=ec %=b)N&d"TRb>*h+t6A[`3<i,'P)n7A2Mh2@2WhV7n$g(BFkOTa%o>QQYZu\`+,DRD81R>f+ceE2:(+aqcFr#`*r9YdQRRCoU+9gH+ %@$-e3glL3ON&M\3->rH3/Hm'+f[ckIMoCn?oFkU"g%N-UB<DMK4<a!M&#P2,;967)c7O'1FX@]T/TUVCOU<JR#iZ%M'2#N>Hjh;& %cZ8.lJW`nq.mGX8k2g9opZr_e)npY$GS)p(YD6Wr!422O/OqmF31=El`mN_XSV;-l7)T?DFuD?NZ`16Uet2t5K3e*/BX)7nqMEPG %`dARl5LX[1lt-%G/*SE()H<YIlmPUhOn-s*>XIYU+(R[dTgO;M74K:hcWc"G1ZfXs[V5iJQ@/LlraE.,Lmm!4d.tN!O-g@eHos:p %SXh':1"esPa^un_rST$b1La"h/Fc:G'\G:hTdCP1$1B71C<u7#pgKhfl&S)k?5NmS-h8>8O#uPHdCnl[9d$"O_H1Tq6<IS9[0sH# %K\#->qE9P.h>-*ie/$r\GuS\tjh"nm_t.",IBX4t4.BQk^\RD`KlNq+mTP")f!lF3I\tN]WEsCD34T_JrV5UNI_FCb/#/`8dP+c= %&e9!S1UT&]ahiCCS=#6:XYVttK`&mb*0r$(?&,>J@i.mFi-l6A,r@"X&Ya1[(Xr/Z4aqkDCg-,$k2etb_.TkP+;RQ)[<<0Q@9H"& %Q_d5p*Y:Kj!dL<%"$BWsNmi9N`5Dq%[O7<P]Rjju<#cQE>GZ?c]/"tG&ulbobi=!8PA:SR+(cif"(_VpH5t5uZn6C>N8<.CSu;nZ %Teg\.H+,pE%gbKpNMg5>c62+AhNoG^@#`GK`-rSKpt!6:K]Tt01oZ9J0h,EF6oITfO_8J#hNtEW@I=0<Q5dO`MdK!Kahl_:4^$PS %mkA[_m[$4PgtXZ5%NR.?`\Zg@)+,)#cin(/&Y;+;*'35T,_M,F/Jp:!/i\KDc5)osLFtQ=cDC2.O[BqT60HB+S0E_@3.ih+>;0(f %?#TugaVLC4%UJRNAo@:k3HSbalcPm,/W2'!k^kVSLcuTG6g$Ll*0=TPQu;\5g[$`clqAPJ@@%6uo(DY+_@LPIU?,$*4>ucKLLFt) %mFTB=&Co6V?#r[9G[!\WphJXf)\^,'3Ti_1GHRkrj"jPq_0UTXB44OLGDn2RZf#n,dFLg8I:8ObOk8dd>`I3*FJ+u\:Pk50(ui(5 %RZ_%#*3LSgdTe&(;th78ER+9r9;!3B3XT>d+7hW('&RQMEZ1.2_5?p->o"6.Q^3Gpm,gJ<):pT60H'S3>*#qNm)BCe\?2R2A2grF %)B<^h\7Ihm0Smn/%5UB:SnnU4VJrofgdeUDnVGGbn.V,`(l`0N)mP?.6Bs+.pJGHCTo>7G8oih_,%_jMg\(Uu^K@qHO,^cs_An@" %g:,*s!oKUG*h&WB@b#"h?-FiR8lP<CJVC+0On8?s_p6'<aQ%UUbC<Z63N^r5C$[+4?r_ON%"*BoFb)EL%DNTOpATc;JWG29i48+G %@/B:ue3#p3&=*tCKFI:tl.F\51.2@BjF`_c&uW'TN/nH'[tAfqLkV^_7UMt/d3aI4g[Qdn0.r1NK2+#E_0V_IY%YE5R*U!3bd'h= %f\^TbS1j'iK$hF3]NZTWFR^L/nbD,fOLeX.N'5qT$Sh?]>*4e-<X7J;MA((DFu9WnZ[JlDZrFSmG3GM*QS4Xsj%gGXiYLrm8-HN" %0e85l`/UI=:l\d),gA>9aHJ/'pr\f=R!BF>7ok@S8,4sK;$;tZOV&?Us4r^uhXN=c$r&/r6#MYIYVW"C^=%B1I;Ctp`B3_;eAqQ+ %a)g^Re*O^pLaIl*CP\l3i@uY2-kOiPj-l,]*uQCO`,U809Z^#QiDM3,:/]Rj"eSO#:PoOKP5"C)P/mT<Ua44%,I9a"1/jcB"&4"p %Jk*h>nV*e%/65A9ds,COH[f[SNsp,l#rp`Q,7SK&O3C_7i:J'.9LJDrA69_K@JP1H/<>anT784TH;:j.*)+`^Jd]W[BZKkO<!VSe %Q?O?\R=/s8MR"e9TB6q6+@C*CiqMkW:,:bA<0#D5EU(?f.[cAS]i!5)-9T(=b83hp@saPOUlUKU?1?)S%*P]0I;!g%KIY*EMg/P] %0X$L/*=^((%X3Nm#$t1r;(nbM"s2;V*5@CGgEHtc/*EIG0PNH@E&bukcI<$\_o9B?Cm'0*^JiL7T<lguRj-0&7Qt)($.[_j_kG\. %8d^N=&*J!Y-o6]qnpEFKBdi;:oW7ZC]_@F))0*".LC:dA?mb\gY)$)2UR%,*_g-)R<`fS_fr!)s7fbQT1Qg%Lqb/8.[u>>SnuNqt %9Oo"-&)Y??eUT5l5[sS+FOEr.D"f1J'.&]mfo)PbOa^o(aYe7)+lEcV3(LmI3jqClr4FgcbD(#r3W5-\47Sj?$/#Rp&Mh$_(MD3Y %Tp'jlGnm2&6g-)j=rBOg`[&IFn#0b6TT(2/j4T@)Lc1aWJ4VuqaG5n=%/nBq&[GGt-H/=K@:'>b\4qm(b^01Zi6^6*gg4^@D2m5c %\.8t2c[mfn$8ndLN)Y7TdK:]CRTUF7:R%!qS\L5I6lId)[6+C*`FTUDl8Ooce=3)`A>E[!ZcG\VI'Mol;R)QkA>E[!dB8&oR)FI: %q?VYV027FSa=(7LGMc,L(K6Nk-Paq!O3K^#Nh#8C4OGsC<&ic`R<^:;jF0`\`.Dk#(j>!TWGqJM6mNZ<T;9@"GSU3D.\+8'/>@Q9 %)5J+tXFS#L3@OF^Q$HCfb)Pn.I;Gqu@MVBqk_3<aOZ\L5*6?bMqe!I-3m?5&_f:;:<&XSa`"5\jmC^6WrC!558pGB_2m;Y(Go_oH %3*>$7+7\:9034&_pl/qS!@`$!G4=5`3:#GQ(7p$A%=N6VY0gB6XDa=nC#JoKcFS<nb(eNNl@Y)@QI=I>Wg96b[]8Fp/4+=HD2G%; %LO71@a2sm1jd1+E<g&lGFNr)mduGo51jZ]rh3OZCp1WVF25pGA9<BK:X:.2TnffL8mCCF\P\YB@5oFjFK=ANHCX@ie6(:<6)Ut77 %<QPb#0:XuS9tGRdgQ`(..:Db8TO^!qj;HHQO)OiXQ!pRA/Gpp22lpQ!l_(>cceo5DI](('FK+)CI:`rB$a.NoFMT$*^44sLJp6`X %>eXh[HK<AU,J+9cCTa-(B&\(^id8jtmhoF8f:12_4&V,;p<\'1'V0*[7hORdXJE8DmtXu;#5O9(*4^3-Yk]q^/Zor<iDP.`WBK2f %<4uTOFrdWU#ZIJW@KDZ"4.I44cGQkmB3@gOYO%(kSLP5a90nj(@X6q8CQXZKL1EZ74!A+(lO,3e(O3)93^/63O^kQ?YO5UsZ&u!N %$a2E!)<bLO7Qbmo9i4,-3k[@slp=+aj/u5ecincB-cr6TbRY@GS'K=iY\J1'/t4KQr@h/^e+reB^%=(.2P"2-h5$I"lte^I?bHD1 %qe<A#>[T:#f(]0KWNtdd\dGtkA:eX/#pjW9Cc]<jN@cYnQ;-P/91Rb6ZcT*9bGC,A[O4O&SY*+AWk^g1Cc]>e-(`t]B%-Q)2tYeN %fjrS-jjGl$S"CmoDL>'[$Z&OOdVLs/jYW*gFZ,fJrqW(=RPLAXgJqo]iJFl)=M!U1Zg"2OCmo0$:KQD?pl)NC-A#@dCq@D%X-mPJ %q<(f)3h+Eu!uPUhflV\j'$hHj)._4lYm7c23f@gcON>M%ZK]6fb:Ks`r.*a>j0Qn*$d7V"9fAPL/fh8>ht.+\d4kW,ou1BGh8HJU %2.!*,>FQjHimU[/Z+GN>oi\\=-EgK02Ph!TH"L?cNicSTK@;6@NWgd89!4A>R$/Df=@>OX=+UJul^9UZc]k00JdBoggjuG]VM#M5 %8]<0k*&JuAK+puh'*+q\ZHEZBM,MQ7&ZtXd6]XY]0'_=;L!>65F*=smTL*j$QarmZ\Vd>K:K$>8=^>o(;Q`p913]fnY%WZ6OUanb %T20V;h+b@[c-,Q(<Fu<G<0>>YKmFFF0N4=K1Nf)C6?c@p\MJ9`642O;$Qa`bcJY9EEW)+4hSeW'(:u@aU@c.bW8&'Lo"`[SZVg7V %)<J[9FeNFY_se>gkg4PaoY<shUl08f3>%ika?INS3PQ+p#rm)Fit*(pL["YV@rep`>;5V7g7(lkQ_lOilutB&/)J`;r1#IGbB4^1 %O=K<RGi[=McrK<*Z,ii:TX/;Z\q:MO'Ab[3bfAs8+]qSqi&YgupETAFWOAj70@\+HP?C^)l")E0h)A7l4I;U\(+HMS<<L+-=F9Tr %Slg@127m&nZ*Ti41+"sbZ]2iGB\C?-A]G=GU%M`Ec;<]D6b8YA2h$?>ck9u^U$`BIB9JZlhg?DNP8NbgrB%%eL@F,_*?pM;qkp\+ %<O8E<=En[tFi*>gkYu2RIV*OlJC2]MeZ+U8/0a_ui@s+ke^Fe\%'_"hft7h5Sjc1\Lua,Z]#(#'?cf<f2ZXfm*3P[9DKWT!G<qXX %;im],BP)t1R8h<:bpSBL.<!pf,.gb0oOJe8iQe!\'I>tSOpZD!oj4oC?2P%R;/\>4m&0(]CN"YA22>bV7S^%=cGJ,%6ki)1W(f3R %@]_T\;4c?gK_^=K^?O#7m^XP?9Y`U-mYJZ-As1KNa$m>R6Mk3S_KqB4&n0BcOE,Vdo%X,+R-:Is15Nda)-/L9)\KoiA^u3eR)Tgd %M(-,akI!],.2F4hah>b,hl5(i]e@SdVFi15L3fNGDGt*m'87p2,Vc,s^V%_`UitigX<].D#pQIA(a*PQ.>AXN%dt+@np;'<T?@j# %/r^b\ZcI.B.^<n,6i/0I7ClU_*XO7JqUjorY,8cUdC1"T\6^qoVM_Rp4:YkdHOQm<=.V+dQ(h(O(e01[kO9HmQr<"HkF`erdfY7B %d8p4dZW'05G\aF)C@D($[CgQe>NkIE,Z;&Cr(1P/s,^=?\)njUmV?(_1nKEng3h-V4N+X#q2W_W>Y02;lc8XjY'd`IC:J5+Gt>QI %gi_7!>M#4#I(1^h$#f>1:uU4mfoq02j]K'Cb/0m!S@rJ[iS?0mKsf,`^.%0f\`UcZ.<El.p1*?@<JN0l$u0Eq3<27-"_pkXC>(AD %/ie%W78K4Z2R@l2iAYEoK`LhtS9(OcFhP>81jF4G%N0mK$Rof)p>G^R]btha!J<9H(&"<FUP1555tTlkXlW0WoF?0e<(Cp%N'1jf %IbJb3m"/X^nThtMbtQ"Pc)m;f]?b^tgu=^idJ9'_6a!^4TuVPW5H6eS'%VFZH'M,d=CZZ(gqn+_^e\bS\qnBR!N:%)7"\`Ebealc %7ZbmApSp0W.F^`%:.Z?g>/d!E@PW:.>>\:f_@rDnZ`;59*4d;Y=e^5*C;EE@Qs2LMR0<dSM/reO.-o0"oAgTgBd"i\%4ENsiKGYQ %'mG)7f,F8K@TQ]C9PNjXQBto%"$P3aX[FXP;J\R;]I<ljA=q=+k;.9>f#+ZU2etEtn@Cei1M&=?!rCc6E:n@0&,*.iX32G8MofWk %*(J"=$?RpkNUklTVn%Z8a[mJa12`gs2uet^XF%)<l4\K0h7%',(>uQdd/)Q5a35>-ZWbB;M@2+gr;C-n6R+c<enu^5]`U0JC!=dj %mP_]tB%!WeO`8@8@hQ$R043n2RFfb,m]n)1pm>A&l"B>__7MU]YE(AP5G_F7fYPCKM.C,h/>ai=(7`J\/&t8CFjC(G,u=N`F#1m] %*3,"1VF2HT2l"n;e](8dHs_hob":K3'p&b><mis<s.%1-F#,pU-SdH%l5KP#R>K<o=;@C62nLu@1QPM'%Uu-B4OFu0Na,<cZ-[eX %YoqV`DA\q(V$m07LF0qdbQ<`l!uUhT&lsTdU`@1#e*.IM!2JZVNr,%#A-#0E!MjWnN1U7j2$]4fXXDBqFJ2<WL$:`*)_VRQC(;@Q %D"9,B#G/bZ_jt9P2[_<S%\RY`:Qu%(R*o(H+<@XBjtj`Ol&5+$YK/Ur;*J_Hs0*p/Qri7=']f_'a>TN^Hq)CPY_"WY;8,H@7k:*T %;82SsaT%t_+1j`-/;s'fWa@b\;*N^7J<NluP;5E<Q5[uMl8S[t:cl"n)_,<&^IWQ99jQA3>1sDQL18^+Mg%p1d^jnD<W+8U)p5(] %?a*VQh\(uWf?YQ7!q1l4TWVW]-I8Eh?gu/KgN,5`?,*U;Xr06A"0;8E;R%4Qbdr8>9Cqp2-Ec[tR`JT2^BlB?pt#*G?BF%NeOf'& %q5,A@h.duO0Te/&IIDcZTWVYkc!PWfI*0$LJV%ct8?j&^oa>pNa1?gOTWVY+WU"m<H@i_WIVFrTktP6?D[&5jZ0M/hpO[kn=k**P %%]CWspG5P']/LsWd^jlkW[:`rO06dD9i9Ng6\_,CWh8V&Y1VtfS6a`"2",Q6Fo?omqUq5uAR3(/"4pLAl;Vp)SGXs'>kHfm2/up: %?iUfKFp<*f!bcHG0$^C:?S8jTaS#<pb/m)Ta#@"(5J%_=nqij\0ilmZ+R^KGZu%I6?,'cA*cF0.79r-D$pP\l,YjZ?'g\D",)K`= %(fo6A38X!c750!m5<#s_f&ELupu3=B@+XG.!VtAJrMHd=(F=nem.Q2(ZPr@+nTcogVlT.HEbpe:oeS@XVQ];uVb.-C'qMq=?a-!: %^p2O7rIV*H9mpf@=k@Ra?XLa_IM)-WB2I25\>ip&H@-B;iHi#qG[8)+PMrL@IafcEeb'l*-.>lm=LXg>Xm6dN]ZVP=-EcYNI*g!q %;jt5!T?k5J<W.O<Ko99hDfWUh)e/>YSeuY4'Qs?o`oU:PDrT5uT"9B%(dV.%RBE]"Y[V9JYLD+r$VlL8-1]Q.rS3>'<qRE\a!0DO %jf[pi<e:`#-KHMSLirY?kqH&foqQ_O4Fe*,?-Am:s13Zq_BCUkF(P``L>4HZLki#R*UVe7s29]e?E%#d7R`B>KN>Ns2u)=E-Z.7b %9braLd@7PoD`SEcn4f<<AR#kRe9:o1Pn/1u%F9Hh-/'DLm[GnX9nHL#8`m5N(V0+U]5#!3q,GJT]s[5?Qha7>T<>pTEU^Qg=SoVY %O%sbaib(/TrMah>Qi50_TAQZ3]]hV<nCtiM9%K;497$n.a7@RRj`McDasH:DgM:&YG"[I`gho^pe`6DQp#hN%jnuO8gR!E81;,o1 %kF5VRp345l]_c%2=LmYieh^YtpZbOhYjnRV-dVP=du.\4WMKMuDf99<?PflAr_9S*dQYe?>W_>CS0^i(]8`WUnoL+(&^q\(UUj[k %)Ln?%\>HQR4;^3ERDD]]h]=E*.??jlnbUVX[-ZjTbJj(9f[f5f[(!g3_=4=_`THdr,I_uhLUcnJQ`o-;qW?8S2]C1h#tV-Fq>7t* %Egn$8*C!pD@)-eQ9=QY7@Zn9&P0oZ]VL+(+B31Y3`NMS<Yp;jn^C).0a_/gCh6E,1PJ;fiBck[%m<t+e`8kO*dn+P;]k:gC+84M? %qmV?.?tkC#<77;sDl&a(Cs<J#CJ&@-2j(+G20p(7JEGF"oCtZ*hg1mO.$%DP2Tir#jbCM=ITShl&FTU8?YdoIZ\t<tQBHWKIa3DD %DN44T)*\)'@OgF"h8XIs3?YBVr9PXTDsj3hhrj<<(G5Oo(4>mS_PH">@FhX(QNL\WETL%%:F"YU$r1&n953]N5!s_<!"nl3r`!qa %lPCD`p,Do[=s+es+Uq?9H2nCY-0rH<\PX1:2!DBej_KS"D^3`bhW>41f?a<BqiB$ff@2@>-r02rcY`3q>Ar=Q%hD_4e:[2KenQC? %4k_AHO+cfKl+6Oq]BhWk(RJJeXTo*DrSYs(>B;[bZoKA+gi%'FW(/hUfhW9[*[$StQ/:SAbus"Kp_OcTo9^nTMX.03q"&IBl2.'^ %@%aW!^fPPaIJ9b=V\cn:L3u_u?lf=7%M-^L*a+!oIXp`(Ss!u4ihHE4Jj6HXo%qL##iBgrq6bpA"albo!D8thq6KC<jhVhr!PkmD %'l2q!b#7?_.t-,RWCq^i*bca?oAYR,D>c"0Trl3h^U?7q-;mcdCZUbDDR2FYOfgP\)sL\,[f*k-1c[e%n:J.=W?XCt,\0.-(JK4f %lq0/I\hM8t2n/5FTLdGd7,l89ZAJ:9(EEJ-hTiuVf=^50/O/(uC\kI>qtAYWNSfDCqsWfY/c!mek"8\pYO?m@p0X-ClAqL4+-8kg %G@gDPfkG8OF?cll1M\KOah(JFmc]j!=#]ja2A2uYB"+`Y6U<s2)rK>og1LBX+D5HGb.b17WHE[Tg!enq,P-"U1'q/fk8LmITi?Hd %*.LsQ2Ej0+Dh"$mD0u0X[ui4Pd`-<]O-'jXh`7b;C`\(;[i/J#G57,_oh<L/RsK7"h-#$93d][BqfCKDH?gAT:%0W6>5_$AaSJ)C %lN5pHS4bJ8BQL0r<p3tFQ.pq?VLDk-gSndL#'fHadRp=8Ffs43B8,27_J*!!(1ECaEpIPmKI?81F(6l[oAgXZYe)&[I\/9YhrYH9 %#_g)u\4gUMU(T.FEjj_u?WkO7b[mHK%K*Pqk<Trd+`Am`r:L9.39.6F6khL@92d#OcSt;bkW3CB^%l-GS#AbNV/4iASgE^=D?c0. %rpU*ZlbR'"]/bIQHsnPuBX\`#[Ssn.BR^i*54u"bp$f]klsc2rNftQ/E?fXPMD7&j5H#=1*5I2T(uV\qA-FU`B%'SHKVQb)UG=r[ %Xlj%E@/&uJjmEa*U53`*1`jpp=#[l8]+9miHmS"FS+Z)N00K@g;opTk^Sn3&SLs*=.VG#b;gEHDQ%#_R_(ike4?p:>BXlSIkG<l8 %:8!eOg$3c:+NX'Y<P'L-'b9US[M;@S?L??hIHa>XV:8buQ5jIjFr,pD>tDM<8SW*kEmL_gg0h/=cdA0m.@\"KZu.uKfIpe-9@6UC %%6Yt:?*%174=uP8;(_5s*Uo&H-?!\D<DsI1?=q8,HXGmD[F71Qrpj9eZ:=&sC-2<tg+EWl[tCls\@Aj8d(%D.it7j\>o-f*R\_Rl %I%_pYd`tD\NVfMo'8O;0QIYsoh5<sM;@jZ]o_Yj"J(b(72pQJMTVd+SW$@;N*5@[=I=9+p!Fu^/p#+Y*8qgX/d76b[Dq+(8EAj0O %.lssG`%I5OEnsOn#M%"59E12_'<049ipdH`32u/ECMah#1k9O8"$q/lZ9`FuK>:DgS<U_i&:arm\uh?D<>g:jJ0:*t+Q.(m]sX_h %6*O[@rurR.GB`+1AYk<FMJN]9C;OLS9HXIh@!-#=rbmsM!-!n@7iG\e7DXWLb2LE0ltU^q#!qR`2#m="!^WgL_#r:@B1C8(5c"h6 %5c(_<BWhsR(QRNb+r(h3bmP%0RY.U4R?t<UZOGjK@ZV;GHOX?%Br)f!2dB<bcpouJ-c'M]?$Y<;CcDuP$((mR\mj;I\h!YQ#NGC] %YL+A<DfHWS$^sL<./Dl^2GZ@Nc8StX]RA%!mWp#T\0)"H2/BqZprhiK0#TL7]R-9B'$#<JH^X,;X=]^)*B6"ofYuYN2_C&d?Sg0i %)#':)mXX4t?l/3X+V[6+%`XV&:+\Ic2T]k+KpU>1KFU]5Kl7dPp3\j1#0iieR`RWhCnbKk''p-$TC"Ht=(AkiI$$`E5'RRp'ah2P %`8WDE[CB(oKp@C95qf!5CeR8:HqS2FSiN/LMbG(loj].U%YM/EDg0Qk7]"QK=sER!GH'h;^uJ'Oml-"i.X2_N(Z0UNV"2aGjHf_m %U0=(E5+d_5,pk$WDAajZSs6?*,TalUT@UL'koO%6)t]amVjkV,+>,gNHHC)h;5-)bM)Pebp2?LYjA/[eoNsWmD-u0bFX@`&@NtK+ %SVcLss'o\N*o1m.0E9Oi830J@rin8A\.W57J*Te8:3QS?B-M=A>(4YEk"I&'7)7l5iClZ";79^nrHE;AY.TDfc<0MH]e>QW*;"9+ %q_#R.Ou$6:j7`Y>0oLkS*9fdp5Hf9f.g&dcj@$*Yh?Wb2(*oJQCQTMHn0U/&-Idq)H,=rF%T=WM9#?'3(4'CE\E7\[9JulojF84= %hW?@_bq@CVY(1Ra)78FTlnb&e`D%gm)&^/;=';f^2@+HcR>9fE_MN)I?&@]k@(Oj2<r*fp@ihe[ZYmVq=HhjFgs6Xs,/,6D[-CLg %8N#Y2mFG-IoD$YTT_>:.IGf_n&$Yr/);'@Tj_1"@\]aGfU%>0e^[&U@<^5*iX;MIo*WFr"6Ido<:(oL5Y'g0Ed2O&6hHo'QjpHt, %7!WjCk>/jaqi*nFfBN8&W7HIprTnrljskH6c',9sD,%2+T)-dH\UkF*:oX>bN9-F^V!*'/lh&[^VY=)+J+VlMCZ0NG>Pl<DY#/i4 %Ls%"@h>'VX?N5VCOj$%T;TZfSo6%>]1es4%f!'[S?5d]&[tiDnBI*L%[nuB"Wk\6)?MhCD]:D(S34SX::3/:TWh3@>`uF.!b=]=Q %H*pkgC7Li2PXeuN#[e$fFQf;'3Vu4C#6SDAPg$;s9?CX'I>3l!d)qQ126EB"A2cENFXNSARbu0YmGiilA8tOq:)<OU>05RG!m$/b %O%+K[Q@up84En_Fj8Rn5!Y5*\3"e^M((??B7&dL7POkIm*PXM.$^W<-ae)+R)=t>P4hT:FPr/k$rIacI>']_c8u?87T"tNEr\V7^ %F'9Ga55B'@&]uq#N[ss_i27jl^CgED%/(d#INnQD<rOa@5EX?M'MJ(r"(ZL1WUKIlA>hoa0ri%`LjP)tr<%W>&bgNJocFHeO15E7 %q\K=k,OQ4$Nun/:%e5M(Cnlc7Z,;7\&BZPuLOQKq1CIrPd6k\$+^)u^UPF,efV*Bc@TLlD^Xs];nr0?!2PZASDkh;+c[EH]TN?U8 %V#D>FMHeak:>Qkn]WKJSjGN&m%qFQgq;&BgGY!+lpjG:&TnAA,_Tl91EV8nO%Q^2A#9>H.h/Q)uhsbe4DI5J2S/>P!Ve#lUABt^n %f!nK`g!?[UC3BeXmY+#ec]U3Iak`SZg%mn)#Dr+%gSk#9Jiq-Gl+GUnJnrCEm8I]-FMRA*FIs<;bN&a-I["K-(%!LD4jgEWYqG+i %N2T(mJ02>Bh#K`XG[c<`L'GK_og'd5"2RnFTb%V8_[!ShPf]:8kcQ"dhcOFoIL2%^U#/BA5>p?%L5RjMo!l&cX#_R<r2-%+Yo0Tb %<AoZa"hFXn2D.nj@F;X9b^3q6CCW0V\2l>;,uPP&!'*57RJIbVU\F<n]9/e2@iVDkGV[*M(/AN+h4VB9$;.(:M@%K4TlcnlHH(L< %Et5F?5lTge2V4t"4PEd`^,uW:LbmP^W6qTu)h3,pL1AMu'B0kRF!np]&.,0>k@!9$PSBa`i@lF8d?"WC^!$u-4j#\%1XVHT_Rg5F %>T'2&*".A:1qR0=+2YjG(`O)R?23qs^H#+gCoe!K`CJaDXKr_"e:d"?R/GR>"%0e]F[9m.7*BPXP:QbY(3^WI`l4N:,3A29S3E/$ %g<Gc5KeU/\GEDEk:BP''+d$j01Y*NoDOClu6kSQHA*%7V1?[S,HoY_Vb?QU2Uujq*Y^1eGA^`YKf)p&?!qG>WO=tQ2Sj;<O#IZ:) %2P*1n,7j8IcGgO]MY6f?!b^O"[(QeT?f5`_J`OatJ1kk"T"la7$Ia>''<,AHi+tN,5VI]&^tEr6'<,AHi+tN,QFDY2$_32(co=<B %dscq!&Gea6Es;UC8a$]:iX5\`PL,rd[<@.Os!76'89of:O[=Q@_#CcfrkAC)9LngiW>)_0oL?UQpk!m#mCg/\[CcJ+%2/T/nK/#9 %iD3IGirs9pOCe2S`n'in,"(4Xj0NgoY=.Zi]K$hZhO[2TrNGYI^N1-+]%CejDV+##F2kidnF#jP#%kd/_qXZ/M]p&dI]crCpHS/h %8`P3$rkI@h_._-X^=/_/3]RLrn*FodpA!$V]alX.:N1BEnGeFH,^pE;?hj"2_9Ekt]dGd\NUZk\nAc%:ne[bo1FLH7c!B4IF3jXG %EC,d[.OXb-U8XD(>uB`J'9ZBoGti@Kg.mjUQ$?$]>tnd"co?"T)Is`b'kOp$#gakS#b2</bKAU=6;gIFU8mui8Q@`m%N9ReQ_4A. %OT>BD>gaomE#RXZWMG??:;%m<<*bYX08daWfH<bu6q10&6,eo'&uR22,aC2]Jp2m2cLVB"#UNL27AiH"98]J0plX)Pn0Rj2^_L$I %]N4"qA^9_1<t$5(A+Qp675orZVT2=U!6cG,?e-N*1bY/::(hQ+ROC7I'=`"5Uf4GsTK#5[qLHs.9r:D]8;j])B-Po5^e@0_'V#A0 %NQM9hSt,`l?rmM'K*BtUn(.]kJfh-BY,&"j2?s\CXD#WCZEDJ%,"tt"a:]b(j^Bu7-qOaH%0m9,j>hoE8ZDp/j>;*OQfhaH73-PN %j:l:SE498j?kDOhPHYA7&_;dU`F6M8)+aj2$+eRcb6%'2&ug(C[00$rP>4M.'d,hUOslHD!58_(OY9:r$39/:Ot+bnnjT,0a^dD6 %LS1&rH/*BOVZu(@G[njk78QUfJAVFb@#"oc!>(IH&I*Cl@Y)NBd5XjHM;nUV#\I'o:fA&3)&ktDf*V#jOu5/a5OVDYbYQf/A[5@b %F9H$/,?P.8eg8rdZ9j7tmR5\5*P2uY%t#*M:VeoG8kE!$71.D$VBLWp\T:<BU&qZ#":<0Qj=q(EW%]%GP^pHQJeVTM^n,Nl6'ZSj %$0KLMd%hIHP/p*#Jte@#2*iJ>!?Z#d,\)#e&+#pn!#=,r@[*OA!a-\e)]/`\#QH$%/olIW2I=Ng^eiCJ#+27n]5;rVk&0S)T1&)] %fd2^S_/fSh+?2fEmlqI(]VQb==A<Y1#rY?4!Mem+`%\u*BFn-QAdWL]3R-=pfIoN:'FQKJ:Y);*1r,G<%>\8Q1l&>M!-9/Hi\3T1 %K)MA;TnY)<4[VU;K[9^lA-FZkY%YmN1gCaRatg1*"^g4f=X@<Vf76nm#,"df0Y]?331qS5AaDhIO?LHI38g.MT]<Wi(KDXF"Qgnb %L`8UCWlQ%c&/!@kqN;1iL0u4D$L#fU\:qKqoW0"D!D"lgnJl?cY@.g3,7jPVp]b1/fWU)Jb97^AUJtQNd/hRE9^sn=Zm7,SfEd8* %>(@YS=X)a+D9/VGh_P!D#(lg$Yogb]%XAV+.0DGQi$4bL;Z]Fb_@D\gl6s/m=b&i5cKW-+AHa#\!00Q3do#2bmU;0f#4M$]3J=BN %Q=.UQ:=a+0V83KBl4m<S/Md):#H4XPVDs6;F?rEiX0@E^6@qR6K2np6]VFLK+NQNm^<.C9`&7+uLtetN80/t;-].mCU#<PGCreIK %fS/-(TR7Gn,c:q[(.kilBHiSDI%#<<TEmcn$0@UFE(?$^"#(5l:_PO<;\9CF5+8?PaJ:=UP5q-s1'u#,CnV-m'6I6P"XhZ]W/)Ab %NXkr<aoVoFJL:na.Z%\L?7$cYTYK]HPgH4A0Kj*2,ZQ,]'n@`1%=nAVJ[\Yn^kZk@kZF0OKFTO6i.MfJX14JtFK9FmG@AC#j9!E^ %FhgjZ,]Zlb'Ps3FJ,h$oWMjJ"TK+HW7k3jUO5`Dm4G&Sn(dLMj%g2t2bKg1r(qa3DLe,Tl<8^G2dFUX$BbE]5J0'XpEN$CgF+==d %L6)Fr%_S/f2HU`W,=r.li"XPRF1T3bJEBk0!Em(TBuWYTPD%:-R%s5(+c/J[;K3tQ-R&YW"\t2=kn/UVRD"J_+4e@R&d*30oo"Xi %We@AQMB\(^aOE_9,_E"/!iTh%,@^^:,Xp6s3<X])n49BVP7A.g;:IoS)G3sL74j\)Jr"*G(8)*H+be>Jod$>V>r3gjb\<N^O8r"s %MBkVl9cg!bW5df%@;G!F@=jS,9V>QcWR*MdPIX*l-'!N-.[JjX2=D3IJ<pSR86CHNg]Ljf8<sA[/?0-s';oO;VpH^)$l*jV<YMF' %!q(\o`!X9KJnc_!YS?0F10R#K2(6`.HU62E@^&Q/4d`n$"89N7Yj70U#[0XuAE8:t.sMJdW8)ubW6C14_'Z64I#P8V>lH1W>:uK\ %b$68TGB*''1V@Fu]dJ%.2MOSB#]*G&Tp&9P%8g*_:hb.-J:@Z[5rO8#"T8t_3^>f1#0FfYkomnp"o(M&-,TB_4fRodW6?G]J,u35 %+D-1u,F1uD^u]^g<-aHZ9GbKD*ea_R_6>\U.]R$.%8c1a%g;;'W!WerbR"A,7Z5'U%Rs,$!3IdS&IQ<q5b$3K#gd/H=+DYB.L`OJ %9a+At;?l9d$$8C4;ql2qJb7n'\59+c<huMfK*$ZlKX))iVRFZU'MprcRUFZVrjHqT!"sBYTk,6:-k@#C2A(e2A3dsb&OFM=9N<&G %d;#=J7/J"J#(r7B"VB$=dj.=V?DC4_p][GnD%Qj#b(,q(K8=8mb<k8eL<(QU+T_hAiF7#SaT`mSTonnWZMX@f;!\RYlI^p.BlpSE %C`CduS$EXn="G<<m_gjnWIZTNd@Q<)-SSc_Ij/G^K%d?,,&JV-,0HE*de9;?'4;k7$Zm%q+t@O`a%F;/7:7FMPmE;0N=E@u6pM"X %,\W^6PmET[mf<#_<h]T$-`]X&Z`HRQN6h_)CRL$P,=)FuY@T'7%??ii2d'`:p-L;ldn7Q0G_([!b=Vnd#1/+H=EYl`QNqeQgPN-Y %:f)G[:./(q[3")\6NmpA/\?R(@E5FUSVSc!XGF6S#h[2^T]FaK+tQ,KPdBaF$+3=WALC[BA(uj]9iRB5'N$1`6os(W,1m!PhJ68O %1B)kI=dC9&FsKl+;O#S)Q?:/F7(3STa0?>\#0KiNRVYV/>rMgU;;4u:@tc.rTku5^e$Db;i32@eYq8D?&Y1>_[\\em=E>@75e/YR %3t8^c]ZAQfU;PR%/O^7g*KVP2V.__`Ag(uQT_#<%Jn)B/.)NoYKk/noBWoQh2f(Pf)4cS/%@3PuEAuWIF?#q1-ee#kFs93T?mW7T %LqHb8WgmoS,!T+A9+dR/!l/M84dD@I9+fE_pr]iU7@Y_T_Nq#(E7#q+Ub,"HAJuIF[\YCH4GMD?QD035dqpS/p*$2g@@N.Ia+u-7 %*E*R"E^_4GE,7tI89BM>AHg527d@>\:!+C#]50ps<eq!hZ%ra\MA"c$((%<&YgYKGO^Df():#T)O_K=scu!P1P]`?>0b#[L&U=m8 %c'iK$g>'fU(+B`*>)RQ^@4bq)"NN*0&c!5U(r2HFLf7.R=Jo^^K!g+cmMLj9Bom!HD(NQH<+$;uD29Brn9*K3KLm]4J`&B$%VnJ+ %EQl5g-I-.kF;)_-:6cf/O[E=f21<YMK_ag=&Vda!#YiY^mhgtKFL7#r7tTI7UA^*`/><:/7*8Wmcitdk1tu-nE#'F)/>D:H!@)_* %:gXkMg/nLQa@IkjZ&!QQ#W'M'jH1>aQa)>J<C-YHALrG["[Oe&`Zf_;707Ye=@?_+;&%&Q";9Zn&Fd-5#kCA_$)ZIs,"N)Ei>l,7 %KUVu2YY@Ot$ijRe2AJX`PtG26`$c?WW^0-l:T$oUo_p9&!4GQi@+6r8/%2F5:3_ah0\]Qk&[qbSQDk,kJVXuo<0Yf,iFU_D6s50] %\7I3p@`C;A*Dp>dMcQ$Y/>=LdVJJ[<8)Xo(`jQVaJ;7tl_JEdXVG'E\&TMs?VBRW3=Z^0t_W#*4UKU(8.l?'n.QRWCgf-[C-m0IG %.j@@-%&:\J($RX2<j]T;NCCG'Z51ie^nL^9>DiR,)qh)u/b/tC#]=ET+;V@W=c:)`<>85h[0WL]TE&g\>''K.=_C^W"`Qh!,_&Sq %aN#"2Z@3K*@-+c;ZCt9L_M(hm'!RHpo)rb7_uQ#eTE5rWK3fk>11d+f_mt=6!9dZ9<R>G'U7#T*Kut"t`X@MJ+eX5B'rhGO'/W(h %fIr)34?,Os_lK`'_T"++DYV"9Kub26GM.kY!VM$u+smS."qYak">hf3?7+N5TG`H2L[7trCa'?<8g'RQ@b<U^/Emq;)I_h(S_5?_ %*_m,*JOchHokd##/W#Ltg([J%njk[OTff"/i_aHKL.\LsLaCCN/PhR)NJYQ_/=InRV`!!=!R5pjOIVUaZ?]iQan/dm8esd`JR*qh %:bt@L4;eWG(AnY23c@!R2&W/B2JSo9/"r6e[.*jr0qR(\^jnqhWjs6`2qb/(iId.#=X-H!29p.t"(+Q.><q<sEe;ckG1m(nf'/ba %c?*o:(bEOP!\qNdoER/aND[JB(%c@.W!EIG+s&`fqF2_ARd_)#3tGj363eWoDA+%--a^(Y(AJA!$6Z<A^Ejhm8*l*->u9ngi^^`k %9[3o:@2lLG5m?QrG)IbDU1(+lL-7r4-tpU;_jP?cLB\rZj&"YPDaQ*JPDC"CZltB=abUiH2`HbRDILFuCJN&.r_S?$emtjP,CC"6 %(c_]`9`jjJEG16H;AF:%&]."%ZDc\cBUL"'7_,^q.p`4a5t!1PSt(DrL89ee0mj59-ki?gA<J2LUDR)^(m0&$!B(ab5rqf;PMLa. %-kg]DhEcDmQ7V8je9/[r"nOE<'1Bb!e.&_jk<thFJg)._);lZm'Z49COhjPFYnHgAGbH=T$*4]o=XNnR7\NF.!T7T!9O(XKWaWi$ %87mWX$UWY,;WoKnET.l\2F>H%dF$5r#h3V,h#NY1E#-&[PUtr"Ldk?&+Di0q(0N(?F-2hXOs+6:@'&k/Tj/uK0,<Pc]YR=aG,UqI %)Mhae,>L-b?DDRPbc%BETO>hXRW<Y^L@Hf_:Puu`Nm2WE)etKR3jShI,lE<6U*>c9)os!d&L?S8)@?tX,6L;WUeY#N3`_(!"sh74 %VWgQh:/D?F&Xg0Q=`*06Ql0fHoSjUeLGs5.bAiU_nT2)@;D[hm&7H(r%e:gU%HA0-.rq)/Y$o$K)j!UhO>Bj2geLj8_bEI?8L+^D %2oB0ZcYKgpa1r<9HPDS_O@sXLH2oc60[<mQ4t?(?TH=<]4)=rN/K;M9Pr#?AA>r=oKGYlQOMB%B70GRe$WN%h]I/U6>#>"`JW.L_ %3ImV*KV;h(Pepk<3PkfPPu(3JBqj\-G]1l@'(?XqLEo`<&=_mR7A3=U)X=,sS$eqa2Y7f+0F*;mKUt:t0u>hVX^e.Kp-q<;!Wpt! %U@:cgBH%G/*]7^)nn8k.(*/nL_]DtqOiDbTI0#3P:iF0F&2+gm"E]G`:Y@]IJ271[@Q8DU!`9t,*nZY7gdKsffC?on.QN07U5#ce %DHRjn@+%)E_UnpeU1W=+&22QX$AM\mHq2me#*Q2URqblE_eR4-%fHZbMS;\[-aP!j=Fndh5<r!W)XiPofOGQaFe]@G:i_0\MTb*A %P6I.P">1L`.O1Q57L2"L":1Zp:plZNJlgM8boMh*RfKlF:VDJ+&^<GTnmsq]J]E4=hAD;m0D'd0L1,s%>fX>n5n'Ir_F>+HbXN\k %nc9oTG?,[LU9'KUNMrP6MIc&%Au"CA%uOO!7KT-J3(T/tJaJ!sL2+U;,[d^+QEZRW6A;d;Z4U.L6t0Us^sI1oq"m>>eBn^9._)5% %3hjQn`g0HFKIe5>JpIgWP,-//>J^Q*BHkF.&0QX]fIY=A3n2i6j%p3Il=`.$bJMM<dqsgd6Ma^g!ie_'NQaXThP$AJ-0tscChP/' %O/QS6M+"YW0jLn+C+??l&Z@+bAk*sk&FVAfIlJt[0.LB[astBG2]dSk4IMARC\X=.:T/*0)WJ6TU)<<P-_DE&1J1e<KnEEL,or%/ %dDEt@TbLeE`DgpKDiJEPVNr`@TE&OPV<%bC"(WSE0st6misPpF$!OR[;/\c+RKG8^%"&N?q0&6dhBIf?*%b5]GEG:dC2:@8qMW`" %\(+`"OUQBQ<-,#S>KsS1.$`?fPIH6DENL!L_3IGO=WqH:>%%MgWgTX>b+b`8=o,7Z*Zpr+(/4[-`W-5u$69![TOrknD>dL)B#C[< %UYc+hKH8!:EV*HQ;-fjE>FACug:$gEN#ia7&R=*$__VAYb2RT5C7LTo'jTBK_p;(,\.U!d.Q[DX&1fLs&s4pA>7%Z"&n@[.>6u'; %U0"dP/)d0)h9g*d&h$"<b>E1D/qC+FMiN+A/V]!uWOGW\UYa^AP^;Z&=m@T!.&\VlhL_&$.6Y+c.k.@aaB!5!`Ph(MC:=gl54QBa %g8tLB"o>=YBX\WN`mFbD88n-;l[hIHGhbD]i$jus82BKBJuRVL^i*2/kT.*X9<^o6/fdm*"^lu4PS?X&76K)hpl;K6,5UkbpbqeL %M^g:Ff)".KD8#;T&j/_$.Zu'RffEuYAkP"LROo\26C\hGQdO]gWjHTX-BSFC/I@"kKU4YjnfXhB<RE+M!5uOqe"R-#(f7^(kd;$X %Y_ct/la=h4<8u01oNI0.>$A',\#%PW%?<n>%M95H#"7Wbo6@76B?DVE3"h:j&3XGp)M1C6id2RTd[X!?<<acN`;g0@G?._1,Ksj8 %n1ZZGE+O-Z'>La$#50=TKlS7I#R?TFk]Lp=(ql8*`#GTSHCAi8%@s2#52`\*M'*!u@ZIZ0UAPQi9-WmmC_M[*'6%&SaEQ3u3K1#^ %ZI=DK*FPCHIV6%@3kUDk:DGn+GS?niNJ!JWfka`L%#4W11J%d!()*[s@J?VM)0Fb"H@s/ZYkpYu\aJ'NJ(,M3^>[2hbFgd6o`r1@ %iG8HXfE.[IYGY:kK1=l#!>+YSjT~> %AI9_PrivateDataEnd \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/logo/CSV Helper logo.png b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.png
new file mode 100644
index 0000000..2a51875
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/logo/CSV Helper logo.svg b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.svg
new file mode 100644
index 0000000..972caa1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/CSV Helper logo.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ 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"
+ viewBox="0 0 816 347.11066"
+ height="347.11066"
+ width="816"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ id="clipPath18"
+ clipPathUnits="userSpaceOnUse"><path
+ id="path16"
+ d="M 0,260.333 H 612 V 0 H 0 Z" /></clipPath></defs><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,347.11067)"
+ id="g10"><g
+ id="g12"><g
+ clip-path="url(#clipPath18)"
+ id="g14"><g
+ transform="translate(64.7041,203.8296)"
+ id="g20"><path
+ id="path22"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -15.985 v 10.686 c 0,3.098 -0.169,5.042 -0.514,5.817 -0.337,0.761 -1.096,1.146 -2.257,1.146 -1.317,0 -2.154,-0.464 -2.507,-1.403 -0.355,-0.938 -0.529,-2.961 -0.529,-6.073 V -18.38 c 0,-2.991 0.174,-4.934 0.529,-5.848 0.353,-0.916 1.154,-1.364 2.394,-1.364 1.19,0 1.968,0.448 2.333,1.364 0.366,0.914 0.551,3.055 0.551,6.433 v 7.723 H 0 v -2.392 C 0,-18.823 -0.447,-23.337 -1.346,-26 c -0.897,-2.662 -2.883,-4.997 -5.963,-6.998 -3.074,-2.001 -6.865,-3.006 -11.372,-3.006 -4.68,0 -8.54,0.846 -11.58,2.551 -3.036,1.686 -5.053,4.04 -6.036,7.04 -0.989,3 -1.484,7.511 -1.484,13.536 v 17.96 c 0,4.435 0.155,7.753 0.457,9.964 0.305,2.217 1.209,4.351 2.715,6.403 1.507,2.052 3.594,3.662 6.267,4.842 2.674,1.174 5.74,1.759 9.204,1.759 4.71,0 8.594,-0.903 11.66,-2.719 3.06,-1.83 5.078,-4.095 6.037,-6.811 C -0.482,15.804 0,11.576 0,5.834 Z" /></g><g
+ transform="translate(104.3105,211.9858)"
+ id="g24"><path
+ id="path26"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -14.848 v 4.559 c 0,2.128 -0.191,3.483 -0.568,4.065 -0.381,0.583 -1.01,0.869 -1.899,0.869 -0.96,0 -1.694,-0.395 -2.185,-1.178 -0.492,-0.782 -0.735,-1.978 -0.735,-3.565 0,-2.059 0.275,-3.602 0.827,-4.642 0.53,-1.03 2.037,-2.284 4.52,-3.76 7.117,-4.224 11.596,-7.688 13.444,-10.396 1.85,-2.703 2.777,-7.075 2.777,-13.099 0,-4.381 -0.519,-7.606 -1.538,-9.678 -1.027,-2.08 -3.008,-3.817 -5.949,-5.226 -2.931,-1.403 -6.351,-2.109 -10.251,-2.109 -4.279,0 -7.926,0.814 -10.957,2.436 -3.022,1.617 -4.999,3.681 -5.938,6.184 -0.938,2.507 -1.406,6.064 -1.406,10.67 v 4.021 h 14.845 v -7.476 c 0,-2.3 0.21,-3.779 0.63,-4.441 0.417,-0.655 1.154,-0.983 2.218,-0.983 1.066,0 1.853,0.417 2.377,1.25 0.518,0.834 0.773,2.075 0.773,3.716 0,3.627 -0.49,5.991 -1.475,7.101 -1.013,1.119 -3.51,2.977 -7.485,5.586 -3.97,2.634 -6.609,4.542 -7.899,5.738 -1.29,1.19 -2.355,2.832 -3.208,4.931 -0.847,2.103 -1.271,4.788 -1.271,8.055 0,4.708 0.603,8.147 1.803,10.326 1.204,2.179 3.15,3.88 5.832,5.102 2.68,1.228 5.923,1.839 9.723,1.839 4.15,0 7.686,-0.668 10.609,-2.007 2.927,-1.34 4.859,-3.032 5.812,-5.071 C -0.477,10.781 0,7.32 0,2.437 Z" /></g><g
+ transform="translate(148.6602,230.6021)"
+ id="g28"><path
+ id="path30"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -8.131,-61.479 H -32.416 L -41.653,0 h 16.856 c 1.963,-16.943 3.361,-31.268 4.203,-42.99 0.825,11.844 1.7,22.37 2.622,31.551 L -16.856,0 Z" /></g><g
+ transform="translate(161.9082,247.7832)"
+ id="g32"><path
+ id="path34"
+ style="fill:#00a650;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -33.23 c 0,-41.568 -4.923,-75.663 -14.769,-102.286 -9.842,-26.623 -26.894,-49.222 -51.141,-67.825 -24.25,-18.597 -51.687,-30.99 -82.319,-37.193 v 63.45 c 21.879,12.394 34.279,28.993 37.196,49.772 h -37.196 V 0 Z" /></g><g
+ transform="translate(64.7041,192.9053)"
+ id="g36"><path
+ id="path38"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -15.985 v 10.689 c 0,3.098 -0.169,5.039 -0.514,5.815 -0.337,0.764 -1.096,1.148 -2.257,1.148 -1.317,0 -2.154,-0.461 -2.507,-1.402 -0.355,-0.939 -0.529,-2.965 -0.529,-6.073 v -28.554 c 0,-2.987 0.174,-4.934 0.529,-5.844 0.353,-0.923 1.154,-1.368 2.394,-1.368 1.19,0 1.968,0.445 2.333,1.368 0.366,0.91 0.551,3.054 0.551,6.426 v 7.73 H 0 v -2.392 c 0,-6.362 -0.447,-10.876 -1.346,-13.539 -0.897,-2.666 -2.883,-4.997 -5.963,-6.998 -3.074,-2.005 -6.865,-3.006 -11.372,-3.006 -4.68,0 -8.54,0.846 -11.58,2.548 -3.036,1.689 -5.053,4.046 -6.036,7.043 -0.989,2.996 -1.484,7.513 -1.484,13.538 V 5.084 c 0,4.437 0.155,7.755 0.457,9.969 0.305,2.215 1.209,4.352 2.715,6.401 1.507,2.052 3.594,3.661 6.267,4.841 2.674,1.178 5.74,1.763 9.204,1.763 4.71,0 8.594,-0.907 11.66,-2.723 3.06,-1.829 5.078,-4.094 6.037,-6.814 C -0.482,15.811 0,11.58 0,5.841 Z" /></g><g
+ transform="translate(104.3105,201.0684)"
+ id="g40"><path
+ id="path42"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -14.848 v 4.556 c 0,2.128 -0.191,3.48 -0.568,4.065 -0.381,0.582 -1.01,0.868 -1.899,0.868 -0.96,0 -1.694,-0.391 -2.185,-1.174 -0.492,-0.782 -0.735,-1.978 -0.735,-3.569 0,-2.055 0.275,-3.601 0.827,-4.641 0.53,-1.034 2.037,-2.287 4.52,-3.76 7.117,-4.221 11.596,-7.689 13.444,-10.396 1.85,-2.707 2.777,-7.078 2.777,-13.103 0,-4.377 -0.519,-7.603 -1.538,-9.674 -1.027,-2.08 -3.008,-3.82 -5.949,-5.227 -2.931,-1.403 -6.351,-2.109 -10.251,-2.109 -4.279,0 -7.926,0.811 -10.957,2.434 -3.022,1.616 -4.999,3.684 -5.938,6.19 -0.938,2.507 -1.406,6.058 -1.406,10.667 v 4.024 h 14.845 v -7.479 c 0,-2.3 0.21,-3.779 0.63,-4.444 0.417,-0.655 1.154,-0.98 2.218,-0.98 1.066,0 1.853,0.42 2.377,1.253 0.518,0.834 0.773,2.068 0.773,3.716 0,3.623 -0.49,5.987 -1.475,7.1 -1.013,1.117 -3.51,2.975 -7.485,5.58 -3.97,2.634 -6.609,4.543 -7.899,5.739 -1.29,1.19 -2.355,2.838 -3.208,4.937 -0.847,2.099 -1.271,4.784 -1.271,8.052 0,4.704 0.603,8.146 1.803,10.325 1.204,2.179 3.15,3.881 5.832,5.106 2.68,1.221 5.923,1.839 9.723,1.839 4.15,0 7.686,-0.671 10.609,-2.011 2.927,-1.339 4.859,-3.034 5.812,-5.071 C -0.477,10.778 0,7.316 0,2.434 Z" /></g><g
+ transform="translate(148.6602,219.6777)"
+ id="g44"><path
+ id="path46"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -8.131,-61.479 H -32.416 L -41.653,0 h 16.856 c 1.963,-16.936 3.361,-31.264 4.203,-42.983 0.825,11.84 1.7,22.363 2.622,31.55 L -16.856,0 Z" /></g><g
+ transform="translate(203.7622,247.7896)"
+ id="g48"><path
+ id="path50"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -28.379 c 2.699,2.498 5.621,4.378 8.769,5.618 3.14,1.26 6.503,1.877 10.085,1.877 5.509,0 10.198,-1.4 14.063,-4.205 3.871,-2.806 6.231,-6.041 7.092,-9.703 0.857,-3.658 1.285,-10.345 1.285,-20.06 v -71.293 H 9.815 v 72.772 c 0,6.022 -0.295,9.896 -0.894,11.614 -0.597,1.705 -1.932,2.571 -4.011,2.571 -1.923,0 -3.222,-0.885 -3.895,-2.653 C 0.339,-43.604 0,-47.116 0,-52.355 v -73.79 H -31.476 V 0 Z" /></g><g
+ transform="translate(295.6255,188.3408)"
+ id="g52"><path
+ id="path54"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v 7.555 c 0,5.357 -0.283,8.808 -0.857,10.371 -0.57,1.552 -1.741,2.335 -3.511,2.335 -2.174,0 -3.531,-0.662 -4.048,-1.998 C -8.935,16.939 -9.195,13.37 -9.195,7.555 V 0 Z m 31.555,-16.832 h -40.75 v -22.356 c 0,-4.68 0.337,-7.699 1.011,-9.044 0.676,-1.346 1.973,-2.02 3.899,-2.02 2.389,0 3.983,0.897 4.789,2.691 0.807,1.788 1.21,5.255 1.21,10.393 v 13.637 h 29.841 v -7.635 c 0,-6.387 -0.397,-11.299 -1.207,-14.722 -0.811,-3.436 -2.688,-7.094 -5.653,-10.987 -2.955,-3.897 -6.707,-6.824 -11.258,-8.774 -4.546,-1.937 -10.247,-2.92 -17.104,-2.92 -6.646,0 -12.514,0.961 -17.604,2.885 -5.091,1.921 -9.055,4.565 -11.881,7.912 -2.833,3.346 -4.796,7.043 -5.889,11.064 -1.089,4.026 -1.633,9.874 -1.633,17.565 V 1.015 c 0,9.034 1.223,16.16 3.663,21.389 2.442,5.218 6.437,9.213 12.001,11.996 5.559,2.778 11.945,4.164 19.164,4.164 8.831,0 16.115,-1.672 21.856,-5.019 5.74,-3.353 9.763,-7.794 12.08,-13.323 2.312,-5.541 3.465,-13.316 3.465,-23.34 z" /></g><path
+ id="path56"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 369.878,121.645 H 337.467 V 247.79 h 32.411 z" /><g
+ transform="translate(422.1592,194.9668)"
+ id="g58"><path
+ id="path60"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,6.381 -0.233,10.256 -0.701,11.605 -0.466,1.352 -1.766,2.03 -3.899,2.03 -2.074,0 -3.413,-0.783 -4.011,-2.335 C -9.212,9.737 -9.505,5.971 -9.505,0 v -42.862 c 0,-6.229 0.311,-10.123 0.934,-11.685 0.622,-1.555 1.972,-2.331 4.05,-2.331 2.026,0 3.286,0.709 3.779,2.141 0.494,1.422 0.742,4.892 0.742,10.402 z m -8.964,30.075 -0.541,-9.143 c 2.801,3.696 5.893,6.458 9.272,8.284 3.378,1.819 7.063,2.722 11.06,2.722 4.882,0 9.108,-1.31 12.658,-3.931 3.563,-2.628 5.785,-5.65 6.664,-9.076 0.886,-3.432 1.327,-9.247 1.327,-17.455 v -43.553 c 0,-9.4 -0.558,-16.093 -1.676,-20.057 -1.113,-3.982 -3.4,-7.151 -6.855,-9.514 -3.453,-2.364 -7.625,-3.547 -12.506,-3.547 -3.895,0 -7.509,0.919 -10.827,2.736 -3.324,1.813 -6.365,4.523 -9.117,8.118 V -88.047 H -40.983 V 30.075 Z" /></g><g
+ transform="translate(503.7344,188.3408)"
+ id="g62"><path
+ id="path64"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v 7.555 c 0,5.357 -0.283,8.808 -0.857,10.371 -0.575,1.552 -1.737,2.335 -3.504,2.335 -2.182,0 -3.531,-0.662 -4.051,-1.998 C -8.936,16.939 -9.194,13.37 -9.194,7.555 V 0 Z m 31.556,-16.832 h -40.75 v -22.356 c 0,-4.68 0.337,-7.699 1.012,-9.044 0.678,-1.346 1.973,-2.02 3.896,-2.02 2.393,0 3.992,0.897 4.796,2.691 0.804,1.788 1.207,5.255 1.207,10.393 v 13.637 h 29.839 v -7.635 c 0,-6.387 -0.408,-11.299 -1.207,-14.722 -0.805,-3.436 -2.692,-7.094 -5.654,-10.987 -2.96,-3.897 -6.712,-6.824 -11.252,-8.774 -4.551,-1.937 -10.252,-2.92 -17.101,-2.92 -6.649,0 -12.52,0.961 -17.613,2.885 -5.09,1.921 -9.054,4.565 -11.884,7.912 -2.826,3.346 -4.789,7.043 -5.879,11.064 -1.089,4.026 -1.638,9.874 -1.638,17.565 V 1.015 c 0,9.034 1.215,16.16 3.664,21.389 2.443,5.218 6.441,9.213 11.998,11.996 5.558,2.778 11.948,4.164 19.168,4.164 8.829,0 16.114,-1.672 21.853,-5.019 5.745,-3.353 9.769,-7.794 12.076,-13.323 2.313,-5.541 3.469,-13.316 3.469,-23.34 z" /></g><g
+ transform="translate(577.0547,225.0415)"
+ id="g66"><path
+ id="path68"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -1.247,-13.603 C 3.324,-3.862 9.944,1.294 18.623,1.864 v -36.386 c -5.771,0 -10.002,-0.776 -12.703,-2.335 C 3.218,-38.416 1.555,-40.579 0.933,-43.365 0.309,-46.139 0,-52.543 0,-62.567 v -40.829 H -31.483 V 0 Z" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.jpg b/ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.jpg
new file mode 100644
index 0000000..9327394
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.jpg
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.png b/ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.png
new file mode 100644
index 0000000..9f3cf55
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/CSV-Helper-logo-Web.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/logo/Comma-Small.jpg b/ThirdParty/CsvHelper-master/logo/Comma-Small.jpg
new file mode 100644
index 0000000..0b29621
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/Comma-Small.jpg
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/logo/Comma-Small.png b/ThirdParty/CsvHelper-master/logo/Comma-Small.png
new file mode 100644
index 0000000..e8c5d82
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/Comma-Small.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/logo/Comma.ai b/ThirdParty/CsvHelper-master/logo/Comma.ai
new file mode 100644
index 0000000..33bebb3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/Comma.ai
@@ -0,0 +1,4401 @@
+%PDF-1.5 %
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 60205/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">Comma</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2011-09-07T13:14:09-05:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2011-09-07T13:14:09-05:00</xmp:ModifyDate>
+ <xmp:CreateDate>2011-09-07T13:14:09-05:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>160</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACgAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AIswHyh2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVmX5Qf+TF0n/o4/wCoaXLMX1O27D/xuHx/3JYblbqXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWZflB/5MXSf+jj/qGlyzF9Ttuw/8bh8f9yWG&#xA;5W6l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVmX5Qf8AkxdJ/wCjj/qGlyzF9Ttu&#xA;w/8AG4fH/clhuVupdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVZl+UH/kxdJ/6OP+&#xA;oaXLMX1O27D/AMbh8f8AclhuVupdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVZl+U&#xA;H/kxdJ/6OP8AqGlyzF9Ttuw/8bh8f9yWG5W6l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxVm35Nf+TB0//Un/AOTL5Zi+p3HYP+NR+P3MJyt07sVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirOvyWj5+frRq09OKdvn+7K/8bZZi+p3XYEb1Q8gWC5W6V2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV6F+RsQfzxyNf3dpMwp7lV3/4LLcX1O+9nReo/zT+h57lToXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXp35AxE+ar+Xstiynbb4poj1/2OXYeb0Xs&#xA;1H9/I/0f0h5jlLzrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir13/AJx7g5Xmt3H+&#xA;+44I/wDg2c/8aZfgG5eq9mI75D/V/S8iyh5V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;2KuxV7h/zj9aldG1W6ptLcpFXt+7Tl/zMzIwci9l7NQ/dTl3y+4fteH5jvGuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2Kvoj8kLMweRY5aU+t3M0w96EReH/FWZWH6XvPZ/Hw6YH+cSf0&#xA;fofO+YrwbsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir6k/Lux+peSNFgpQm2SYj3n&#xA;/en8XzMgPSH0jszHwaaA/o3893y3mG+buxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVV&#xA;tbeW5uYraIVlmdY4x4s5oPxOLOEDKQiOZfXttBHb28VvEKRwosaA/wAqig/VmeA+pxiAKD49zAfK&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqyn8sdM/SPnrSYiPghm+sufAW4Mo+9lAye&#xA;MXIOz7Iw+JqYDuN/Ld9O5mPoj45zAfKHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9X&#xA;/wCcf9K9TVtT1RhtbQpbxk/zTNyNPcCL8cuwje3p/ZrDc5z7hXz/ALHt+ZL2D5F/Q+rf8sVx/wAi&#xA;n/pmBT5f+WyfzZfIu/Q+rf8ALFcf8in/AKY0v5bJ/Nl8i79D6t/yxXH/ACKf+mNL+WyfzZfIu/Q+&#xA;rf8ALFcf8in/AKY0v5bJ/Nl8i02k6qqlms5woFSTE4AA+jGkHT5B/DL5FCYtLsVdirsVdirsVdir&#xA;sVdirsVdirsVdir6O/JvRjp3ki2ldeM2oO909evFqJH9BRAfpzLxCg9/2Fg8PTA9Zb/q+xnGWO4d&#xA;irsVdirsVY5+Y2pLp/kjWJyaF7doE8eVx+5FPlzrkMhoOB2plENNM/0a+e36Xy5mG+buxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxVGaPpk+qaraadB/fXcqQqaVpzYDkfZepwgWW7BhOSYgOcjT61tLWC0tIbS&#xA;3XhBbxrFEngiAKo+4ZnAPp8ICMREcgq4snYq7FXYq7FXkv5+68sdjYaFG37ydzd3AB3EaVSMH2Zi&#xA;x/2OUZj0eY9pNTUI4hzO593T8eTxPMd492KuxV2KuxV2KuxV2KuxV2KuxV2KvUPyI8u/W9duNalW&#xA;sOnJ6cBPeaYEVH+rHy+8Zdhjvb0ns5peLIch5R5e8/s+97tmS9m7FXYq7FXYqp3NzBa20tzcOIoI&#xA;EaSWRtgqKKsT8hixnMRBJ2AfLHnLzHL5i8x3mqNURyvxtkP7MKfCg+dNz75hSlZt821+qOfMZ9On&#xA;u6JJkXDdirsVdirsVdirsVdirsVdirsVbVWZgqgszGiqNySewxSBb6j8geWh5d8rWmnsoF0w9a8I&#xA;7zSULD34ii/RmZCNB9H7N0ngYRDrzPv/ABsyLJue7FXYq7FXYq8c/Ovz6pVvK+nSVNQ2qSqdtt1g&#xA;B/F/oHiMx8s+jynb/aX+Rgf636v1/wBrxzKHk3Yq7FXYq7FXYq7FXYq7FXYq7FXYq9C/JnykdX8x&#xA;DU7hK2GlESbjZ7g/3a/7H7Z+Q8ctxRsu+7B0Xi5eM/TD7+ny5/J9CZlPcuxV2KuxV2KvOvzQ/M+L&#xA;QIn0nSXEmtSLSSQUK2ysOp8ZCPsr26nsDVkyVsHQ9r9rjAOCH95/uf293zPnwCSSSSRpJGLyOSzu&#xA;xqSTuSSepOYrw5JJsrcUOxV2KuxV2KuxV2KuxV2KuxV2KojT7C71C+gsbOMy3Ny4jijHdmNP9s4Q&#xA;LbMWKWSQjEWS+pfKHlq18uaBbaXBRmjHK4lAp6kzfbf7+ntTMyMaFPpGi0kcGIQHTn5lOck5bsVd&#xA;irTuiIzuwVFBZmY0AA3JJOKk08k/MH854oRJpnliQSzGqzan1RfEQg/aP+X08K9RRPL0Dy/afbwj&#xA;6MJs/wA79X6+TxeSSSWRpJGLyOSzuxJZmJqSSepOY7yJJJs81uKHYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq9y/JbyGbC1HmTUI6Xl0lLCNhvHCw3k/1pB0/yfnmTihW72fYPZ3BHxp/VL6fId/x+73vVMuek&#xA;dirsVdir5n85/mZ5g8zloJG+p6ZWq2MJND4eq+xc/h7ZhzyEvnuv7Xy6jb6Ydw/T3sRyDqnYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXof5Ufl22v3y6rqUX+4W1bZW6XEq/sf6i/tfd40txwvd33YvZfjS&#xA;8SY/dj7T+rv+T6DAAAAFAOgzKe5dirsVdirsVfHOYD5Q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqy/&#xA;8u/IF55r1Hk9YdJtmH1y5p17+lH/AJZH/AjfwBshDidr2X2bLUz7oDmf0Dz+59I2NjaWNpDZ2cSw&#xA;W0ChIok2CqMygKe/x44wiIxFAK2Fm7FXYq7FXYq+OcwHyh2KuxV2KuxV2KuxV2KuxV2KuxV2Ksw/&#xA;L/8ALrUfNV4JH5W2jxH/AEi8puxH+64q7FvfovfsDZCHE7XszsueplZ2xjmf0D8bPovSdJ0/SdPh&#xA;0/T4VgtIF4xxr+JJ6kk7knrmUBT3uHDHFEQgKiEXhbXYq7FXYq7FXYq+OcwHyh2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV6N+Xf5TXuumLU9XDWujbPHHustwP8n+VD/N37eIthivm7/svsWWap5Nsf2y/Z5/Lv&#xA;e9WdlaWVrFaWkSwW0K8YoowFVQPADMkCntoQjACMRQCthZOxV2KuxV2KuxV2KvjnMB8odirsVdir&#xA;sVdirsVdirsVV7KxvL66jtLOF7i5mPGKGMFmY+wGIDPHjlOQjEWS9s8g/kzbaeYtS8xhbm9FGisB&#xA;RoYz1BkPSRh4fZ+eZEMVc3sOzewY46nl3l3dB+v7ve9T6bDL3pHYq7FXYq7FXYq7FXYq7FXxzmA+&#xA;UOxV2KuxV2KuxV2KuxVmPk38rvMXmUpccPqOlsd72ZT8Q/4qTYv89l98sjjJdtoOx8uo3+mHef0D&#xA;r9z3fyp5J0Dyxa+lp0NZ3AE95JRppPm3Yf5I2zJjAB7TR6DFp41Ab9T1KfZJzXYq7FXYq7FXYq7F&#xA;XYq7FXYq+OcwHyh2KuxV2KuxV2Ksh8s+Q/M/mN1OnWbC2Job2ascApsfjI+KngoJyUYEufpOzc2o&#xA;+genvPL8e57L5R/Jvy7opS51D/crfrQgyrSBD/kxb1+bE+wGZEcQHN6zQ9hYsPql65efL5fr+x6A&#xA;AAAAKAdBlrvHYq7FXYq7FXYq7FXYq7FXYq7FXYq+OcwHyh2KuxVfFDLNIsUKNJI5oiICzE+AAxZR&#xA;iZGhuWbeXvyd846sVkngGmWrb+rdfC9PaIfHX/WplkcRLuNL2FqMu5HBHz/Vz+dPUvLX5N+U9I4S&#xA;3cZ1W8Wh9S5A9IH/ACYRVf8AguWXRxAPR6TsLBi3kOOXny+X67Z0iKihEAVFACqBQADoAMtd0A3i&#xA;rsVdirsVdirsVdirsVdirsVdirsVdir5K03y7r+pkfo/Tri6B/biidlHzYDiPpOYIiS+YYtJlyfR&#xA;GR+DMNK/JDzreUa6WDTozufWkDvT2WLnv7EjLBiLtcPs9qJ/VUfef1M30X8hvLttxfVbubUJB1jT&#xA;9xEfYhSz/c4ywYR1dxp/ZzDH6yZ/YP1/azzRvLWgaLHw0uwhtNuLOijmwH8zmrt9Jy0RA5O6waXF&#xA;iFQiI/jvTLC5DsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/2Q==</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>uuid:d0143126-cc66-134a-8417-cc0156f6655f</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:0680117407206811B297A84155AD39AE</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:25309aba-6ddf-a941-9bd2-dd7653570218</stRef:instanceID>
+ <stRef:documentID>xmp.did:F77F117407206811818C85DF6A1A75C3</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:D27F11740720681191099C3B601C4548</stEvt:instanceID>
+ <stEvt:when>2008-04-17T14:19:15+05:30</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T16:23:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T17:10:45-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:EF7F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T22:53:33-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F07F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T23:07:07-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:35:43-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:40:59-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:26:55-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FC7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:20-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:30:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FE7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:31:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B233668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T12:23:46-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B333668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:27:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B433668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:46:13-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:47:57-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:51:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:52:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T13:28:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FF7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T16:23:53-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:07C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
+ <stEvt:when>2008-05-28T16:45:26-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068119098B097FDA39BEF</stEvt:instanceID>
+ <stEvt:when>2008-06-02T13:25:25-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BB1DBF8F242B6F84</stEvt:instanceID>
+ <stEvt:when>2008-06-09T14:58:36-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811ACAFB8DA80854E76</stEvt:instanceID>
+ <stEvt:when>2008-06-11T14:31:27-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0180117407206811834383CD3A8D2303</stEvt:instanceID>
+ <stEvt:when>2008-06-11T22:37:35-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811818C85DF6A1A75C3</stEvt:instanceID>
+ <stEvt:when>2008-06-27T14:40:42-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0680117407206811B297A84155AD39AE</stEvt:instanceID>
+ <stEvt:when>2011-09-07T13:14:07-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:Type>Document</illustrator:Type>
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>3.965807</stDim:w>
+ <stDim:h>6.000000</stDim:h>
+ <stDim:unit>Inches</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Red</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Green</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>14.999998</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>80.000000</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>35.000004</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>5.000001</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>19.999998</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>90.000000</xmpG:cyan>
+ <xmpG:magenta>30.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>30.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>80.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>45.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>70.000000</xmpG:cyan>
+ <xmpG:magenta>14.999998</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>5.000001</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>25.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>35.000004</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>10.000002</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>19.999998</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>25.000000</xmpG:magenta>
+ <xmpG:yellow>39.999996</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>45.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>5.000001</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>60.000004</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>55.000000</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>39.999996</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>39.999996</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>30.000002</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>65.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>35.000004</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>70.000000</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>89.999405</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>79.998795</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>69.999702</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>59.999104</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>39.999401</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>29.998802</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>19.999701</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>9.999103</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>4.998803</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Brights</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>75.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>60.000004</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.003099</xmpG:yellow>
+ <xmpG:black>0.003099</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[17.5176 14.2764 265.613 416.853]/BleedBox[0.0 0.0 285.538 432.0]/Contents 8 0 R/LastModified(D:20110907131409-05'00')/MediaBox[0.0 0.0 285.538 432.0]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ColorSpace<</CS0 10 0 R>>/ExtGState<</GS0 11 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 12 0 R/TrimBox[0.0 0.0 285.538 432.0]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 242>>stream
+HTIN@ Eu
+_5n U XpaэHb?;^VZNJ閄٨\}P5gZgm'%97G=kSƣZ횢\Q4Kjutʃ:a1(m)e+{kPLT
+8;ZDl5n8Df$j7Y<:]15grJnl7TgGZ(nmW%U2Nq\gF;LelJ#B*32-MK+2d.,RSTGOY
+TG*aa[p4U`icQk/"l5!!+rAd&ePJ^)3Z">b2"XIjSfpZEir;ArUi5I4-i%OI+0uVs
+LO94P69A)Jac0k(<,C:YpM_qC>ZQQRM`$j'@&>3$O\716.Bn;!G[HkK!5bF);#~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> endstream endobj 5 0 obj <</Intent 15 0 R/Name(Layer 1)/Type/OCG/Usage 16 0 R>> endobj 15 0 obj [/View/Design] endobj 16 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 14.0)/Subtype/Artwork>>>> endobj 11 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 10 0 obj [/ICCBased 17 0 R] endobj 17 0 obj <</Filter/FlateDecode/Length 389757/N 4>>stream
+HuTKtKKJI,t(݋4K%ҹH4J#Ғ(H
+wqyy~3̙g<3
+
+
+ShHht^ '0߅™kYXY9Yqqpl'WzEE$%D>,^|t*K)%/`\ҫ:&D [7dplDa5|mb4,yy{e5 3⚅,t+whlA   m k
+xYUH&%Ȥ
+qO'Mz3KT@v[NUnn^\o]abTrtlmE]e~U+jאZ:zaqi5};CS[\_ۆwCaQ1;>L$Lz}4:%8M7l̎Χ/}XT^]X>\Ym[n!ycskkƶʷ;v{pIs0Xݯ3s󝋒&$WWW*)!$$%!e$cHNOAKIMEq ƕ;KLw@YX;ؚ8^+DspfKOTCPpJ%D=++O%$*8IZ\Z^UK_wL"dx]}
+W3gLC#u!MMMEvAms˔FVNA̝GLwA̬,llؿsݛnͽ+!B²"<b4$݇kRғedk*JY*/TS'<SV҈ԌЊЎԉЍЋЏ042?M4I~fs-,󡅰"+uMm]}CcSQ\RZsvGiH3GFFaGDƬč&$V''g$FLG˰4͂djikhCf%VNeAqYUڪG^/Ճ[Z{Vڱ:;`=c}nK  Fv(ރ> 'R&k?3?4+:6oT\ұڿ6VʝoF?LT;:>::>:;eqvx^sawݥʕ'_
+*'[j o5[uR1uh`fm$1xJgBdrltlyyEe$feg-g#`dGbwj0TOC9; ܨݿxz6zx8IP=A!.aAxۑ
+\lGNػځNāa5tNzlߴS<H6*<a|kz|CV|Ǎ||Ik|Ru}26'~2F-B*ojQ^@5zI`ٳ
+~2gK>-N}o2ن N%է
+0e6M _1 ? 1ӣǾI^I|B̯dܪwLe1$: rW] 1S{z|diL g0\ U{[G{!{ ޔ`{&yE{xbie{Jr|/c5}~
+~:f#MKx+Ca|uI~.yW ώәߎ%¡唘[w!^T`^H*- 5GȨ瘎=Π4rv_ҍRGf,ދ̋|,ƕ{ Ҙtٕ^1Fő,;'<!_Yl~JJtS#]'FA4+;ۊLPf&ɔޝըs@夏]0E+:ևSS 𧠨jVPp,<XQ)XVl(Js&J!K{@BE. eWqQ䆓~37FHI^\ӡ+j&YbdML{#)FA;qT0_ ^9IݤxֺƢYFh9ՅhX;Jln+jġ(m,ּJ(VaV/aؑ@Q~.8_]7]g|F) -/MH|P8%oFxC<Rl A^QlzrJAUUd*N$i܏ #v b7F*4ނ
+ pvix֖IoJ۱#
+Whԉl"kx wVjGDz*ߜxW:ƩdP$j4WM[,]ʫ$W$I&N}7¨ s1@9TɎ.EzNDf*uwr *#,h؅"8=N %=(pQu9sLӓ(&wھ?ER AHi.R~ Ԅ6:*tД3*۱x#m?r~32+wp6yXaTO#
+U¼<_)I(}W2SX Uw Mf_T)?kYYFK8u;J$þ*1T
+.Jl6mHju,bU6+s hܸd-ʥ}wi
+{;Sm`vؿ`~?ga.
+3Ì{L^WYe4]L<pq޴k!G] l
+%ӂBsWď[~}F.+}Wt=
+Ke&,^-va(0 ttzSw0D6jtl.\lVդ)-g [ѭ'x||DDߵvwi8ư=݋bY
+TC7jKIX7
+_L
+uR_,^VS&aR~PfLL_Dw*`\-9]q  TI6)>u6 D`e͢/xqY%9ʜ;åOd\˾P&eRz;].R<oΡ]P{?: r̨\ʻb Ҥ3|m s؟W9oZt]RnÅ\cW#+nI&gyAjsN06HiD'@J+a5V~cRI̫vwtUc[3+?F|l(iU^+O?Rs
+1BvџnF/ BsGMY9>ܖ3ȗqI ڣ5V_1ȣβiJiX0WVH[8g
+n3 ` 38A.|f|ј0I6bv%& ;Y㿜҄#
+Q<
+;/ԱJB"7t͚,mXdھ^;촞&s`Y"Y{>Ɗ.z^48e!R6}vcMiozo0'=~i,3:?-?oS,9w#ROa; ?pB
+֞IO ݟe#}ԯN$\l?], y,>&Рq]yh0AqK)ĝBFҍcH:-h-ǟcf)K9T127]qEjL<>h;|U
+dpG
+ƫ`&!8al`83>.qɂnA9
+; `HByg KB*k㰗2fF=#OM eT?
+mTm_OBۊV
+wnKܑQVB"Խp *+تED* (o B'{pwH؆ʴ*JѪmA-nWjGEޯy~~?rI^WO@l)ƶWgiX"C#knA ˻r)b!UڲIb=>0ߴy}ĸB)H[Fs V+̯+Y(I(x&9JAI'tXmyG=X[8TK)2<TSRvxlȓGO|g/{>4/gRFȶ&A52 uЯ*B<i
+ar>>Ƶrn[ɭF
+p-1z(=f)
+vě92 w u煼ת#{P6+Dq3HIi%BCb!kc5&U ):X$܎[b2*@PkcӘdoTB_L1Uwi")=2#pI9,RO>T@>;bnDPuCfk^^\G~ oLRcHqܮ=-8^5Ońy*9:-\g8:T<?*C;[yX+I;lRL߭$DvYTQ6DyVmfy%/sIsmXP1Lռȭvow)QBb_
+ِ[Ak]J͆VBM"{NrQih
+ET9ٲFWcm$="G
+}Ke6~֔G_MDԿs` g]vp-9\Nd{::gvH_3fC;}Ɠ 
+-"{⠇TZG R,ɇjࣶZw8j ICF:b [ \+?
+oA n'a
+
+Oj0`%|^/si_XǣLqiw]IέD"J!y!Զn0R zWCcchūK_R [*)! OSouOշ܌WzeWCaϝL/QBo_k/cg&MV?֫5z !g"?wP͚IQ"PAdtE)q4jGsn{" }eUMrkzvi89C}XLB1W".ꕝ^M t?WKLwDP]tU揊1rJոKVGM;phշm v>-wgFN cIP#qWI ;NٶA)H~7i thl~~dzY Cx2>*c&mb{9f1X*L #>
+ V@g蒼]7n249=MK% ;,F\j 1klZi؊ΐ.|Q9а$_.!;̿lE,ɥDi}D3^a`Y5g{J=mɳy3CM'jM-iЦm n5? SJE+U~ ;q.tXd~~p*QeS%.Ћ"ưBsZ6-6[\d;^z4`;64藸ͱw;|+&AfLU3XTm)lF'l VɺgcGObbɜ9;v \CL, >B?KGCe"z -@EH</s=/ᑍY{Pw\L1A |U{_
+\wJuY/|ϕd<wΤc~ώx¡#dg3~g‡ xT2ȵ6s3i75ƻZE\1\ɺWA' ײ M }?;ʂ8|R0S#❣
+5 El[",0 e[Oz0~lUO+&xkPc|u$k.?{Qp""kr6isVa=~@W_
+.<7
+2#h?c~m'rE_xs6aG+K 14L^kUp^^_
+ K*/@hUv$j!@ vyבm,W|-͢ ^ ~D_􆭍"ĉ#c禘*X/Ϝe>|XH;:)d9gƖ4aBQ4
+ۯBU#>SV$L-5gV ϯ*B#} npþtdU$Db&$^\^&Z"/˺+-}%Z:}9AYu rTlP0"~! ͚*@5K?߫Z-P=j>܈[O?)a5
+?WUsy5^(ge${Cm> "Gգ+$踿ϫ& Xw8?g,'ō="/xNM)'EFqrf CįQ9ZY$r!6m<YZС.<V^z{US=P
+kX%3xfjn%^i𴵻s30qh$`kܯD&
+2#sL4j&Dib&,AMSUD9y
+v98jc7MI~(sL#}3(M^
+OajX_84V(N-{D)F0$!oJdv/_(ǀUH8B
+lz&,f^_!?l2x2Xyń3D)\
+EVD<O0Vbj&mLB2Z܈b9U;n6L0 +oˇCrE.~>TSؓ7X?MM!ԼuOtP Cbt;iްa@gW#@4c9.Do z2>M5i~u0 qswQ9ǸLt삟Mz)>kɝI;io"U
+\Y&kVx녣391ٵqQ=beMq\`/nņ|2͌JkzDmͫIR4\~5NlօKɁZ]TC3l̅D3jSS)tWw$IX[wV
+WTUw^PeUhWE^ؓ~Wchs sIg`wgs (5
+x}ЁM0S,rV+ KO&ƈ`;E{irf0
+-c8CjL=L1TDJ7>)BH*cHY}~xI,{7WjWާʇhg_YovMKiN> QRǧ}AQj^G syJG"?txt,L>֍p_>Po$^<%}KDS4
+*S<ܖyd;éIJ~JMn>ȸcI6uɖژ䩊i77_5W2' 9t^}/8%wd
+A hm45
+lك=3_2~OgPs
+Ccd[aے{<ХjA {! ߲ۓ;O'9+wEHE&JV?fiӺ j05瀶bhWZxo=ƺ 0zhK5mov (YOut;e=R*yMVn,$v:QڳE.yVl;svn,Wi.[@34SD_!MF>J柣ND @$Y~-CMu (+lBpБ^#$~2è /@̣6 3nh
+;۪.3Fq3\َvZnZ"/vNFNJ2V{#ΚVse_쑮Ta8C¢!Η>FL\M{5eH~7;F AB?VY=۩Q i9J.sӿc%FVbdեiL`a)kD=W \ne>NX7Ƒ†2IYf-to7/~Uas[`W*v3_`~:k
+*
+e)DDIss,f_n6":hmh+]AqñQqSa9{~8|~bh6GZĠםN\h+(E30~kTMGβ1:zka'LG2>,
+=@Ihs)HUOeX^m7R7~,, \jJԌfͬ8!*]JR:WR]Mɚ PZ;JN.8ɦ,[r*Α]MM"waX)Lbjd`>:?|:?u>^G$fa.
+ʥ_S%ED8 J=ĕK{6r zGG Ui<Kg"^ q
+I6vPWy^,uc/
+pt +;Br\ܕ'> -vCNeʔL-ʌqKHr 7I d<BgNelB^փRγF2AqCR&t7߄{" D9u)Cw1t}?"'[7o̩~1{>Ru* ʖdClutqf2[l~{S4>J$.nQnlP#
+DQdVd24KGMvU35KJ~4
+;^j㛑Q`exH;J\*`l˴Khk
+&tF|(8VǡܷR:ϳoG*UjSKknRgl ޅ-6&Nŗ7O4rGmO[du_TvY{ ̏Iy\aRKy&P7ݪJ)l"W5{K S_j
+W>/wͺh4Ek5˖<1U[tD>Q!.kR涧7u
+l/i^3;iڐ0sĀZnS
+qW7Np:([568ViAFޜ~h9Pldüj2dO
++61--1Ewv =JCHW34܏&x8,&#Rc3Dvz6RSyu_N/nmكvT֥Y˼?RFװKzn9Q4gC^5l`P\ܲG&ޫ` 9PҞٲXr6
+V4,{a؄\tcY`]lǿԾar鴯؏=b!&Yb ^[\aYt$w
+[R)i[{$7f"o Xp
+zBz'hO|Ō4ǐ|-j
+:}̴a
+U6DUe"udPO:]x+GB]q:ʥ':-ML3\F$7K3
+Ü3N|/'O-R_1Vh&׺ NPz8de 勊ZTH;XQ6}+'h_
+[Ym ~u8p`6*I ߕ`S88sn9O3nXOE /7f^lbN[PBFO.9Z_.5>F S̉R'}ΪѬ`_dX|{dHXԾ3QlZe7PRqشO5OkZrx5u`a
+DPQʮdߓJRk=H+
+*#u)h) )B6s9߹瞏HZGzGT"93hDͺ sr|b4y $TK "$I~$v(B#].qi?CN ~ޱ|ܷLcOnT~vxj̦5<.f\K<2p:CpSy,66>|zC
+
+T
+!z@#(T 6 ^!R S#>E/Sq9z_ /G%ӈ0C9[ۼ@(٩P ,}XTOkpQȫUG6 x2e,>
+gS'"b'zL=N)cs*bR)W<#S 癛)K
+&L\9WtW!Y17i*%wJ_ 閥nWJ!p-0T`:K6B+SzlL,~J#ZLHBEe߈Eq1
+ڸTD}bB;*OTCnՍl$OYQ0mz7o9NŻ|hDV[Ve֩b7YZÖHl~I)ܻJ5oOݑ%(,hZGҼmRd!/NEWutV57z;jjs^^lDǾ0-a_aL؁w44簍b^ppi&nX uƻ-݂ -cY4_g ?jGIfH %J҂[%ϩC6Oz
+#Q`K|ͨ%cj/&\: [Ft^Z
+w"~>< 8i}XT8dzQVY<<J=Eۏ7G8v6Z:%hBò94^ԥm!1OD>p%HG/Û`rq;Nm~Ms\/Zh:(MXа^F.꜋.Ys}5`a
+|i-0Ws
+Q_GpRjy0׿tjT̎ԍD1څڍ›N:ka? 7ek_%]a;זF=9-b= &Mm0-vD'^j+/5(er^+EL F1$1KWE|fOFMKm::1`ڥfXЩM*i9
+l?+Lw?-Nx͈wɳ\C0瑃f sM;iđ`$O0z*RٹB9@"k5v~.lB?u
+^DMk,2.#ɲ\!{^I4Ԉ.~çlDcBU\b"c jvJG|H`_2rHѥ tHHBaG :Bf{'9
+[jaЧe
+&hz6Fdy?>gۑx&l$^:^nx-'-]O 5@S Uڏy]Tu _,zWPT|BJ,ɕ}`8ߴy?p7gˢu\JO(_vOUue4+Qbi?A.jCxyRJ駥Pt㸲rTfdd$ֺFR>PaL'v2M*׵T]`W*cD*hAe#"ɆKO9JKL2J( KgK3jԉfZnL5oM(_>FOӹGi}<@w#Ndhoo4Y ̾Fٸ2YAz$W֜5Copli\ 32l;a<;S?
+oe*
+p}%
+K"G* yE%S\#V9 ۦ24=ZHW}dUU$U>*;$;d'=NY ,|ܶ34qT=ka%hs䬺UX7Fl[ o1apuxf9QGk4;e
+˸7荇5xB:yZdͫ,`2?_a[0~9iY Fs3g Ë9u<,yx87 1Ja,O@/gO㔛94 |.]16'^
+.2}"!<4tH~(-r25DH@l"K濣,/S}"+~wF}V dRz,:w&?C~FqJ}JݢJirjzEgU#p]ZF%+[Pj
+DRNXA\0JSH307͛73 CWc+U#r# aQOL4Eљ?s~{sIy?y>ҒLָKd-ޣJ1v
+%sdR۔e[$z,Z2H5[&Ht L UO 췯<uɎrEᾀ{i,8+ןwM2O\7I8il2ewkv"9kr6±U\R*qoGCxxy;:jYE)aΰ!Xidj q(8S=l(P9Iue&k)W1=kZb;8zBC4ڕav?suUuP\Vf>+52j&P6uRɮ!
+a+rk!o4 `ܗP)f%VQTF(Z]s,TR|O)O?ho# ]6yл)OU,F٠E})gsٴGyҘp/kw~˖I'Y;TdgYU'I8@F* 8 $I+A2((+y8OϋWȗE {բbW"@}@C׌teYgvֈHofE`ea<oV F Ck2* ]v%녦Ly|KJ3PnW(<
+2G2ћBjx$Z-aV#s/h"K6WZ,ɳL90~G"~45"[K4hqɕFa1U_KĪ)P ?Q΢9ޒ"zܮi$5I0]xoܬUJ&]:QS{%Kz< ~m댋/7ƣi_y
+ I<Gdk~xkے1e'w7۲Uyʪ\PxVnL" N6tĦ>gbN_4!/e%O;mhtWv6[iyFy4ʔat V] au #QYm3rM/q{~tjD 7fiɷ  . =[n`4qShBrx_5wԐ %nQ~x'G[ `+qb]Q2Ըi=UGn~ڋJ(Aݪd E7Kz +M]!} jnh-Cզ_魺a٭Dfrj6$-4nUZF)Zpux'@]U/ٳۿ3Ug`iU}ڰULWu+SU[;uXJPvOŀ{$KF,qQruH.}imfZh~atMBb0*iWC䶧jZmn[nKfi c+.&oV.
+Z>\oMkCZ8)*b
+~~7<NzQT!wB,C)kE+ +#6-)p*㪝A Aocc~\_xb5ӼzgQu}޵zGeX~ >TSsV6i1=2J眆Jh@ Uu;7!0
+߽\醮%-;=.e/T7D$v{.ʫ|ZѮmcDֲ+-Cu_{>1H1]"D^nR ٺ:E3[h9 7TJOW+3 vœLimc @6'[c`Ǧ8v!bR{1_ӵuoPE2\@;4"mO m{ ߺE1dA}C=WB}[3']\PJG5VmnYG Xyahd'J[U~ vWۅWo]WnGnR9H7ѨAu 1vZm]lUrTVA
+sj6lhm,My4A*0vJR? Ĵ>2C!*#q0MJ!:ŏCR|dFa?2݂ch3dBzSIt?%LmF[AxYGҏ0m;GY1űh%[sጒ@9 q_8G>r Wn)jodEzC.qJviN&If8bg
+ v|sd%:uTf&L0~p.(RU
+; _)w%$/ t#
+~#u`u[w.qsY_-*'̳ɩk/)2* i9$7fUzflc9}]
+</BིY%V(q/ܦ,Ǘ 9(B0jtI4 S:qԙ1Kh^ChhCF( ||y0%o:TA BQyPI\;hVʓ2J
+ĥ[Qr_k`9h "?7<18~Щ t]Z*7֡^%Anj#7L{Lu77]ČY LL;
+i\WkISy!KC:31hZPf:߄0C>C{޶$tR:(ϭuOR4$=jluq1?פ9Si|cqF!_z^SK}`d%DT wV>;
+5'\GB ćd^ux+[^%e ֪pxE
+ 6%!Itި@Ҿ
+n#(aFq&mq3%\g?%ӆM5XD3b$ʁW ƿ5&͔D4®KcᏊ .
+1Zo
+^`~¿`6z q aXǰ)Ӽ܄'84 n"Db.
+ڸh>wMv^ c8Iƻ(~j?
+eoyl/Dl5Żרpy1ܣܵ^004{ .%CA22dWuQ>okL<5.ſȠiffh7S-|^TjX[wCY*sG^1Ve֗+˃L3 /2y{+.;CtJ } ->٫y6q< <bs
+bk*ĉ_VTm }D51oU
+0Cl];Sk)=RZ@[ɷ5JBeǐ$Ni"0 -úR4H~9.☫|Dϸah
+QD~0T.>"x*O>酧.Ey+HVy55RWsEk*PxEGB;(J X(8hiqmh^ 0`}_APWDLZ‹]<4zG֦`oyZR|u^gCF#nr)Va5ƪw9njyIt
+xI1bIy>}-AگOShKFx6xqqQ
+3SU\ka椚̩Di~ ?{>J3mtߐZt]YNju]ɒQYlZZsNѴѷW>Sݥ0Bj+7q҄fU7m :8^;#eտ+*,_CY3MSU*LX.jQȖg_IWJ5a"9R'C\y׳qH)VU-Z.\+Ѥ/aen/|F[?SPk
+^Y>VH9 &yaIxQ<zU1\
+ٽl*7}hu;Twfa^cnYS q;)oZuG!uTUOrlk;HF-x/,u sm>fd}+]
+U.o.=q-y][viRgk*`/pLBu+A@[)&PYQ?im/K,Y
+&wa7WAƫXUr8+}E)oVӃIÌ}qZlh<gw
+A?=$6-ޡ|,)!<*ǘ*z!8߀ϸuPp
+E ֻqd{q׉;
+NYHdfttc #&vPtQjd1o ­R)ʽ@}<7 &8wyybH04͂@>
+EJ7T|4'r41 ns#?Cśhk6/ϻ7n HITc6߱=zz!?z_)c)ueT}nS3&iq4rEUYX\K88IX`}7yIi
+SiGr38Eiօ$f l+n.*d}0Qe:FSS퍆֯SȺ8~%;
+$ m:@l(蕉9 Ea,_܎iǀ/O I4aS8!%UJ8C(&2J:;{Mጫ~JdmrFW jgY?;s8ҀZ6\FqD,H Y'{$a@Qk^жrh"j}+mjysәMD]_CJQw)/ʹ5״2s7v}7 TVS6~GoLF YHKmkv~U.+jpo8Ɖ$5)\R(gHm}w5jN)
++pvO[nHj͌%=h 4^"lq:i%S,P=ƋGT BULR8LW$GxLcLS},?E;8QE$?\.e!&KKJG7|_ Ҟl8!>8(YBIY`[}.Bb T$=U8Oŧ yP-x$]0_
+j(sOH|/=wKR` ptl>f*ӡuU<=Ts(&zpKA?sLo`N0Mq+~*m-~F7^5惬H]${|-Ҷ9Y&=X'Vu+^ϖEm
+Y/0X cAdPc_X VRx6b|C6^FeC]o-F?f7Q3V>͝yFsy]ݯMF͊k^NնI#FZ.7ƆQfeϫCJn;AjB JFw
+mԗ6t(I5beElXQ͌ i,)6QS 1zJezVBf ۹ʹ/ HQ89SnE%o-4NJ``,)~utyQN]vح
+ YM N| _Td'wa}0Z<9|3閗3~o=Y>l0Wb=P1jmE XR[louv:.C=;.a.BřS[nWJ3ǟN1='\Xr8۲:KXj6e g΀ap
+SЧ|NWP !o-t_ nyV|ؤ賐e`HʏE=>\
+@?^fEkoo\fyJ8zΰXmi  -Nw}OYpz&@>gݪHc. ]7Mz#fe"g\a@\qyºJc\3ܔ r'WQVE D|PLs\h_h#9Z-TdL>˼!WS/bniA3.1Fx@Ǡ3UNN^nPOZdt<jGLys=>vWO&-8ךshveSȉ`wPU_cař=շ}m`<<$+UV66do88{ηzkG}ڻ<<7\jvg!5M!w&GmpfSgO3x?
+wZsLRq/~lK]QV:om<Q' R]AMXyu ^ȩ $}! 9LHaH8hʡrTtD-*fY]]wuu[bgg޼ߛ"ȹ I7HR7HBHudt *Ჲ=eJtj| #TI/W?{ΝO^'`v'$^E=7ITF2˵7-^'Z"[x ;[U7,QyWrr9E6cy'I gIRm2
+{0K,^H/>>G@l`T=FZnZH ѳ$m¯鵩KA3D;w7ŏw^J<`i$M_x8wU-,/h!pbP1|*k _U;
+A>ʡ <*g!r)J;ȁ&xK0N\B&Գ$bԍ7fpt(0H23ӲG1d?ź
+bVֆ|\[w+tjj?b7hwJCmm#b.^VBDRb8E]4J 7LGc.Xd/a&ڎ @顢zQuֈ4Tqi˽èb˕ 43~,ymoθ[0
+l} TCuLBt 2ZW>Eh@+[Řy0=
+sU"r];û](̏{e E=ma^2'FKv~.Оm0Oj(esߺ Pk*!3IBЦs4{^|{6k\* }XYǠD=A %$hǹWǂORV UBꯪr+Ca6 Kԣe :Zڿu6&?W&k).]%],lb7MX][H"}WL)RIrfr?AƁY&I~_IB${XlZXE&|w#؆`_vߢfu3fm89?9
+̟NՎ`jz1*.@爎܋`oْJ_+-
+QA%$[H~}{1fKٲ:HmWS
+ëd}2w7 j< O7i2G;SWݒ!@YsZ~*PƐ6xQܡ/9i7cGHVf3R>K2jZxH"Z")vHD} @} YJ64T(P_(*C]miSJqOZgA(ny8}wν37;?߇*x"D6HaeZ
+5K e
+tE=H\ƒW8 72ym]Ly 1N<8͍@:> >6pӹ<AМ*쵮5M
+N5gܿ]7cD!\O6N(bHֲrt1guN'wߢeGrubJ1a#gi|Gc" 'x&YH;4T1}Ϯ;cV*ܲwf|H2;Rl{K*GZPg׸z *ۿ?ʗ
+ד:N9uL7o|jBjEVQR!Ū;~;ZZxٲ
+(񆜦qE蠟V7:bg3h\yg.:O07Ңb4=NHdto{<WZgHNRRZ\sW*Zx ƻQͮl<ITs|X)c?p\B Kue|0|/ahB|樕sEGMsMd?*G,HRg[)|3CQ{0bIט%9*XRMU)+^ P,py*~uRHw,r~L;_vN"ۿ]//S{̑Ͷ^0X 74㊈#ޒ{Y<mg$5`Vs-*lۻgri˕[ LX#DEhgq!N-_c YPa !w|Em"PDOUHSr5a+[ m
+Wh*¥{I/1YwûJy׸jk@p[z3*ReRXwq30u%BAŒ%\NC)W'5꡵
+&F+U,d5gR "JrVDBSDO]V[EסdyVӃ1,+Iev"`WrwKaG|`%+TVRCF{Ys*Z5
+jQA4Ӌ<>$.7$C$pA)hJewT*FmKg-lm*{{v\ܲsJa>3_*ݑہ>V5|WG_>RR_YL!RFjz S5fځO2< `}I\:XiZkRH*4[(xX$u|I9̺TkVzl_׼gC%*wXR nY)
+SU.nk.mcŮ)Rxb
+ΆBL.?\DCqߢ7nO(M&JOiݖw0
+     !"#$%&'()*+,-./0123456789:;~<|=|>|?}@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ac
+ٖɗmZH6%ؤʥwog`ZTOLIFEDEFHJNRW]cjr{ĄŊƐǖȝɥʭ˶̿*7DQ^kyކߔ ,8CNYcjnoldVD/
+R e r xzzzyuph^RE7)4=@?:4 ,!#"#$$%&'()*+,-./|0p1d2Y3M4A566+7!89 :
+ p_L7! }tfUA,
+bʀ}SW?CN<-Y4 BYpzS)j"{%>64;>FVWm
+S^Di*bPkpة?%"1#!ϼK`L<n-e2*+) X䥂C@v2l Q?(=0q MzǃIz7MEY; Y@K (-
+XJ4^Ƭw/I!5
+bn#FO
+)ݥq AßOkV^Bf8KĈza>p-FOJ*Yr(".O'qäfrCRJ'dc~h!€?`}WzBd;hѲGϲmT SAij9<
+ߨ%@`8xLTqė=,Mk $hJdx_r̰gʱhtG,KytomVK0X?R<J%mq<UG]IX't9E
+$Vt
+Fgml0L1, y+Hu2f;[T0BE{:qntoT]okI,
+ LgV_R:Kϋ0dP?= vE̷փ(M4m\Tk׉o,H=Zw/EI-LQ[ 8F/g֖'$?[u~fghXjݚ- VImKՀ,%ibQ*e97WKMYiHtXTBUDw-49#iԗ/r]hGވ/
+
+lD2 h‘%TTT*Fdw">GY?"[f r5ʊ4`TAo4H5rWS8Xy;$Yr'q vUPV&4m/5LJE:S7Hvy..
+,e: E$@BKr.!{A$A,CY[EA;| TJkU>41aƜdcT.Us R&BchR)
+ Pd;ʟHbl?1;_:i^mMh9Ӝ+,x+(‡j3=P6u>a}&b (0=.À<2&m%u9_~zL!S`(6͟>թVlW䨸m5ypg!2< PR%wC>ubvbF.0UK$K;؂P,!rA5%\v"
+[2gwdxJ:_'Eښ_+^Cژ I! v,V72UJLNITUKɎIy/R+=+(֨v6!M @PB%R--3|4-)#ͯ w.ܘ<;b#;*>$eG
+>3"و~AZ$xOUx f𜓜x;٥Q h X(Zx=`dš 8b†id, ϐ!enZ
+b /޲І2P0~ +1baktT
+$Iⷱd`U+z3 8"}Y\E^\Qܵ)<&uZ!FM)V"ڟ}&à/ ď 5 O546PW눤0 fGlEbdc 'ƪrӬ[{K("M/y%0=zFBx}{w6{Y50%,40R}ԓvTp>K@fR$7HU( /10f<,1BS>٨RI3#&&pa5j19#yTH9cI[էjU̟~? +7NzM`k|-kqJ}(Ҙ2SaӼGi ; b:`uǤayU}T 2Ftm̔%OpuDU0m~L-_:qWg0~huw-] NVrP =<]x;Y1iw@8,n\(zqb !$zB&5dn61Q& & CuЎy#c%$7]w'z\0Lk{8<Oz o%4P˗
+9hz͊$LmxEFGO$Dcn:0td#*vT2.q06vgAԡn3l'H:<@I˞8!mRSs^Ugf
+~t-"Xnv&?VAG+7WhKDYZ%4YFg[ C_M6ЅLJ!)9!6-l?@W ?t`k;p}
+P>f{i8DbMp/ŲF_<`w[Uq. Y!'i7L' Rz$v]c-ީ%HY~ٕ 鞀ws{)Wa˹ԑ`{[z ϡZ& z
+- U@uBP.8jz B{GtϤ1ޕq# ^o2N*`DZm錞c@QY@Oy`ŕ^ )H??s %J@f-H%{#}řPK
+'£ +vO@%7_*Z-r*~z Ց4!wBpG-q.a+c"wmqk=WfB +k^0>npu5
+19~(VZQjsfb5~Nl, $LAE \Yv3k"*Ie.gj4uDk"*T~~g^ ~<|1cPx7kF84K(/AI\
+ZJAFqKq$5GT#.a<C]szO9@yQђ-DRPGD{no^7PvUvT_F"Te ^9^9(Zi*J|1"].g:ETIFzN%T|k&JlI3ʌ+r^qfSNMXe $v{ꢫ?IB--Oi0iXo 葚T\.%kR&-?(m=?~3Jncu /mS<Ð,LeH:i_+MSVa k@
+49"(hd}+ɗ7)T bǪԪhm`Yջ s<-,@͋SCgZwN CUcW-JGm\QA]Q]h&D0Zvnw%0zMTXI:l<7a` 5P`ݰDhk?(b ?`Fgűy=4EJ0 GvQO4Wd SAnMC
+ұ|`7ø_vYIoRyYqE,D;&Q\BxWrv t [\"]Uˋ w髐< |Mc+ Z9(WZʳͰft~X)Ui?m<P ;G-_k&ڞI&ML<::͹7KƒKXѪW[5P7WttbE6ռz ~0iWűہi4 [$kil$VRc4ӫGk~ʿYQ:ٮHbFGX ~Nu.kfc`m f4걳qVP~:U#/bE7K*W0]q=$ܭ XQM52ymBS<lU
+ZҸLeD׊= BkLBRY^#zA%ڥ`r^'UIoFg>;1 p't.t-SSUn;QY(sў*M8=
+BHZ# GcDS{d',Utl=,}*vcr+](_1rØ@?A[KDlv'”o>=ԏ[?Q ô
+]7E9!7;au*8Y?Ң#
+"8ۺ?pGZ:Oȿ7ÝTԐI JAx߹rxn?(؁
+>~o\Ƙa3Ƹ2@eU*Tlmcӱ
+Fvz|"ƞҩn2=3["st }N8`1`Xi]x(U2\o[v1d%JOO&rؗ0ܵ9Yxݨ \Dm]=Hjovfd):tbdH9\ϛY?8 <%}dVەhnuӻkV3+(+$-#ՋQҰЖX@h-Nd$a>M3q"y$[Y@SgÓ=ݎP1)L<d"drՕsW DJ
+tb cj*!Aq
+hG|3j zO
+*π%2#ǓH7! ;v
+Ar3v*>>Ʉx\+0lkOԼ`
+kH>*ڲ1 wp5Q݌$;LvvJ1f3n*Tg@oO#9|}?V0M5.ۀz{" NK?C_$ P&B̆e>(qIu`|ob|_0l2WꂝsCܴLTIa?f(/+PIwB WhgšH
+" 
+"(H2̙dfr $xZEP>ţC~EF:}< \{
+% rH6N$(߫Nᷘ_%1]2:$o-8ȥ I-qt;'kTjJW^}kfQUr\ulNkHn᫂H*Wd6M2 *{`V%VRoJJ`+"yO|s86Vy8 :+;9ɨ=.qqѝ=ɥ^ӏwldG;<bSh 
+($p\)9D$ZYr|(4D܁OHʳ ;ܫv۱jxLr_r ;Wi nV|Rudܦ
+M]4ǽAߗnװQԈXtGdƇD\wQyR>l-QnJȲc/14C:'K&̕BOJ{ߴzfsW|F-q2 ?}Y[pXdY<\v+M{ir8~LJޯ vlL: ?@o[g`}>?UrǛI2Lk.}GpI8QRV%܂L0/PUE ?ɹTcۼfHs^QMC!)$ ; ej uIy W6#LMi9ĦͱP*HʘFg]mߝn+|X$Z6K'OQJq m(B~ljSuZ ťbhWP"z@UVJ΂\,<\HA 5
+ES!.?Ӕ#C:[6$ߴR2G[DUcbDx(M<}|y%}ђHmzyEy)9Didh(CpKoY9_\niQsƚӮkX36R7U&"cT4Eʈ0X,t :T/>Uݮx7F>QL~:ʥ#][eTS2%c Æ~EWg9i%3W4ފ:}޼0_X|-ƣµVu8H{YF"qĔ-F95E!L/3zLw@"FRmOQ&[#ZO/xˤr~9T00bܬ 4Pߋb>_nMFY%<ip
+;Rx@|qj#lj?Ape
+sHt-bM#t8f5}sc0f0 CcBKRmcEkץJH[ۢŚ<!)NoOCI}52 09tMب7B0؋0zD KYeRUJѐ:N::,#D~6ž4o1l`q5XU5G"Z4tX  cVu{_<9SN}h%{nԾ"V}V"Cw}t)b3zFjoKj2'Q9
+]\Bȫr1.8C|.x8~pGm<ϰ"iS˨ڠ u[)Ek+WE8x5 qg<k~[0n& ˊڮcAa Júg":"].ff5 RuBTu6u|;4R 'hNp\@I!Bq":*pX'%O$K#(}vW&$nxTeحkU^IkKlY+H;"^\#G_KmR2yfbI-ب:ݐ$;8$N(Ӊxa
+ 1"*.d8>MOaN$ʡ˖~ &($~>tBM%^i3ϐEf8UB
+ӯ_wCՄYK/Ԩ 佨/Y0y̸7.]*ѳa !d[m9#{-;W[ U$mb?ci3ؘsq6ĂT t
+`, g6$cN!Lp<b<Nz;0y% )" DB@ ;.a$G=W+vFv-|d%ݿǁgOŨ;$KFlbu#^$(b ,jdM[skxv͆c?sBflSkMe͈Lyi3TZugv#V'{F,8+5%\Y`kY oC,VQ"Bk5Wjؚ axhk" Aƛ/dX!xJ(}~&| h?.XS
+jkujVJE)swm^ VQe^*7cSu5.:5!{3A/u@v?aDUNCkH2) 1z%9U鱛v򹰗!k0>][#?wsb,4U_ f)Eď* uä6Go76ɵ{'CGa+RUA=@5_rgs1OUG*ʚO&Q͡4%nlc=%Z vY Zeਝ4? eC` _wvĦ10KB/*Brv4όwM 0r `$CܝGa6;g-N_&ɰ.` `0M/s\PMf`p3
+TYRJ3O)*+
+8"ӽ΃ǐL"Hڝk:^֖Tm
+KX_t+ =#ثL
+uuWK̹ u)F@jR_$YuBśGbQl+$,o8qlg!) n2QήU>Ytw(^'Y! %GU9
+qAN?!9NxlbO{eiYQ̶>SZ .&sbj?1_ǡPkٟx`дY!n6fVJ?ffon06l)7BuyMAѢ&m>>Nj#4J%&|E]ۊ:i2g0io*6zXh +҂3;1"2ҍ+O?Kja
+w%5,x+ z!Ί}|%wpȩxeXx|Yy$M}yAz5{+=}5"6~{άq~p^Q~Md~*XŸ~,LU~S@~5 ~+f2T"P{pUIp
+z WW} q(vsfv[wLP̨OxE뢳y
+;Nz11c{v(_| ׊b~mqC|fLo|[y[|P|Eҡt};O}1~/(~!Ep޵f&Bp[Q/PtہgES;P1ƀ(Ā!ހp,RfO6[B5PcE`;U1*)^!Hpy`f [>f P[AE;Z1ٓ0U)Fj"0΂op~7f ![BPY_EE;T\1撠C)k"djpmfr=[M,1P\ǑES;`Ћ1')}"Ρmfni=pkqr^mtolVurX wtDyw'0|Yz>̾jqźjlr`ntpu0rnvgkbtgwWIv~yCtxz0b{x|bh|~j|l|^n|~pp|j\s}AVtu[}Bw}0z~l;fׇ i
+9kDmh5})oviNqꂿUtXBEv=/yVǧeP{qgi卞|l{nohLp(TsuSAv@Z/ryX_dִ2f}}hƖMk/zmtLgdojT3rxAKuI/8xσ[c&5e[}gܞrQj.xylfoDSr d@u/x\ębp vdܫg%iwy3kyenbSq@to.wUad`RfWh-xkkemn)Rq\@?t@.wZtf4uhvjxxm0xyosekz.qR|{itP?|w-~zK'rp{sqԜu#svFtgwwtudxw*Qz%x?E{zb-}|Xpzr'zssj{@(t{vxv|cwy|Qy
+}>z}-R|~H(oYpq݃^s=uPt;bvSPPx <>Ay-|0m{opzr
+o_%{"bHk&9q\W:r&G%2.i6D1%~F+~ZC?8V
+2#⮪ ui^#v
+NL؏SEZLnÖ`=lva;(>̽p ʠ~[@QdF!7H$ #dLt!BOK*G-iCrB.UlmO> ,B2W<+367ߛ@ )۠&KO 0ޏ
+/hw{V\lsTjg?қ۟u 깮D}û.5ʺ(wM ұ=Ljeo(u\ yPXƢ8p2232"uh0
+P7Dg3I33D_)JQNdOm2ta':=J.۱
+s`d+uu- ǵiȵ\L
+kw/i&G1|91:H^gW@-
+}~s<xi'y?^WLySVzOH-{=:{2|)p}!g ~s@|hg]ORr:GA=^2)$!Urhn]RyGƒZ<23 )h!r7h/ۋu]jRRhGv:<ِA2v)҈ƃ*"-=rYg<"]2$R1GDT<2䆡)?"Yׂr+0gȖ]/&R`G; <42^u*څ"|/j cj_eU᪹h K$jA+mX7pM.=tsk%v\z`ij@_׭kU֩imKoxAq7ts.vp&(y(60{i[p_`qUrK5t7A<u7˙wz.yQ&c{V+}di$w_OwU_vxKkxAvy7͗z.ݒ|&̍\}[ 'K~hꭢ}9_}AU-)}TK4}wAd}7Ζ~..~' v6 hc_
+v|@Uvx.z={9)bv"evhwlEjx6wm0ydoyRrz?u|.ye}Si`Yjcf6̈hvRkycngQNqY?KtS.JxL^يaɉYqd%vgfu/jObmfPp>t(o.w]^`cCcHlVf+;t)i0aldOȯ>tsw[-wnw\-_AMb0ke#SsShA!a7kO|o>#r -v0[Dn^aaShdL%rg{`j哟On-=rfv-vm3Zp]­ `܄cr f؝C` jRNnb=q-vBw~o`^q&ccrfBti quk_wInN1yq<{u8,-}pymjynlpptnRrp/qsr_;utMwv2<Tyx,|~{6jtnlufntvTpEwFor+xF^Jt8yZLvkz;x{+{}6 h~4lj~F(l~LFn~Qnp~e]er~L:uM~;sw~+zf i k<~m*Rmo_n\qǃKtU;w&+z@ɮoe~giю}k:lnH[[pʈ~Ks:vw+yQdXfh•}j Շ_S
+
+x+OpOT+gxjZ@c}9`k`cTnw?+^5j䤢T&o
+ lEx9 {XfPg@C_[G=/5g4ʥ^E*z 5#p&XsY>>@?nC)HKс#Eu$%`^>[
+(?`~^x
+52[{F;Onݦ *C{2H<N-S2UruUKm5ųBu
+}3!JH$#h^Qv0qUY:ʫaZ=V.}VZfsy ֧MP8:x-kն(+rީGSIЭO wiι9јy&z8,k.$x=rmRMRuMb;dw0y 2֤T{WƊ6m|+8EC` Gd]Mm"WrS禜D~AS +G6W#jnA>p
+
+sh]T4I DGãTD(2BNlz9eB_ ݫ.#JUbGɰ Pc36߅!3?o
+0\C"dhK>مٸ:IFq\BVhF'$[I&3BtK\ D'`;I ["%#N\I
+|?a8+ş3"-Aש_ZZKO%u6`X{cͯw1 $+OM{'E],jz6+~ Qk a=_/E qbVk&S7<R5|m[NS< T['c֝"16`fi+mԂEh6=2%w \Ww3/VWxGk (+K6\Gk6ygfp86,W C ~8 yq' Sk3vIժ*/kffԛ]_M5Ɵ$Ϲv3\2e*^\?|_cj1xڶ+em[8@Ńr1 346=v׶+f5RjWuM!\7c
+ }s-j5+ڲkEZ5׺ֵޛc[GSJoŤ
+9y<i;MB]
+Y5SA*bPW#X~$u2ξ/1a+` cv&L/0̰;t)H܄|E91ݎjɆ'u/qvC|\lWjaCm^~nc==7Em+O^ |vd,<8LOj%= Y0o}ďvCBW[K&I>fg\"&]KOÑ: %ijeB>%j:l=T1e~/ߪg I0^YV)<^ϑ%
+զՏQS-WGpaθD8ߠ9D֑ՃXM'
+UJ]I"mteuuE)-3`Ҍ SoO
+Լ{!`D}K_4
+!Q\HҽzȔHN>uA-^Ჰbg%+k58W #wi+q0khcuTT[`5Z[`J &-v**cs0
+Rr_T'UtKyγzaL= zs#k)|OĀ܇:axim&&^cŽoIѓ`
+W82K/ױϬ˽^ipuO:JD:WtG<Z2]uyy+0H5W?16א ~u[4')BrjXG><8YJ]
+ ՄyiZP-|xm4rQe`dZH ;4SX1̚`wpu>7<dE,]5J!T%"7%: -+6\wO1=zs[ITNX)bOIUq~JY鮦t ͆/?wU[j+ϖQzUR'd(_XqByg5mVeq}Jsg[\[> H2
+%;8;2/+BMqvs$`ىY4/\ssi iUcdUafh6uaP&>%Cd>zES?+&e{\Q>+) ^T9ZPF
+r3L2$$x *,^-ڷ[]<**RI<E|N
+!f睥# Aɧo(u
+gįVg攷E)?n/ؠbdSu3QQIB`\C!d
+P,2QC[Pһn`RXYU^',|Y5G4-}<kCfގoۆ3
+wo߿D[D$<H׽kU*I#;He6i*80C
+P&h_2nnmMsC?w
+/8*;,a8sk ~!!@)֧&Ñs<-sZ•2EbTb~AA}Dʺ0S{{GaoqB͝$F8z*d:ٟЕLza:Jeaq T*1"}!@k˳߬B/lEy~eK\5$O=hZ͓ނ9 `_ݎ[9Ĥu2B\s u5=@Όp@z t;*+.Za]1lRSo
+КrHYKg<`7/|+4A*K֨81% -1w?Ɩ)r~K0;h+fg:"&6)rpcyB6 b#&l:w>fިÕyL/\Zj@
+$f»~ ^̈́:)]}pA(+RX
+*XcZ3}EٓDsjd9FK䛉J I1{V!xnK-e>7nׅ _Qg1R2Ǽĸ:@n\KX)'WIC0hݤ!XL}4l5 Vh2,?bLb#(sÀytk]:ibP_"2S&F ߆*:/~5l6fݻ Ӡv<NE"AMBI܆=ӰD!5oG]Ml[UZ~$g"HU(>(l1u;8qi7mL[@Wxl<Rs\]1^>g Y<#nMDyYZOEX;/C<_IfGuROM++c7S
+4ƊaZԃu Mߊ]>]o/m^&=Nh̕.g*>d_$
+]koj-]wz`g`@XRSZ^6uV^og~XQ 濮a%{s Tp4{HLydW)YU&R?
+S0᪄g :po)-.XF:e
+t&83B-(;^SedSy7yG^H@Es7<AQ|h[\jeZҎy1|i-<C^ow5pc P_<.&n;ˌpa[yy$۫j! ѫ$E42˚v?ݴ^wnYg?G9cK+%<qWŔz^}NV]QvS{q8ڷu)? WV1l%Wyjp0#>M']|k!3h{&m5&[KiK%}UEk̀u hT[*Fk
+
+?;A34VfO 5*DvUe_Rqr_pMv]{қ[;f4( c5ڑGdxEjO-n
+| g8 KٶŲ]{r3J(?ұqlu;S7qWA}ǰ=o
+nxg|GCTpTaH͗O0U`llڤClt0jh~pڱY_,x',IUjn\[M zDBb<Ô]T7S0Co}2%sF͘MQ ś!7fSѕ&.!mFk(+O Oȏ@ W1fG 0JZ-#=qb>@@gIxFz|޴\E=Yg6atҺ*SY5T9vh  %2{}n}I90v zRf8kOʼjVo:*xH3_ 6WWx4\;5juK::i7rʶYAd~X:J1<;e
+(;MsrlڪU[y5vw(k
+-OlHWeG㐣݆L9sŠFp6i&xИp0C2}TxmCH#ѽZyڇm{+EAaWdVSy%ې8bש"SLL14$B
+
+]@V99'3ի P?#0eDaS#[%LYƉUU_nFη4F/V[&+;k+4e[D7\~YCm[D4Mn/90:/[o`K(
+Tor M8FECwLhTl ;=Lt^r%|TXNdR3O>^G) yۂ2b+PgDWB;T+4Qv{9輵;!f6~/ė|@r~EM$,<`2+oMҿ$ȵk뤆)<$\nnu|LX
+$EVDĶt o \~6-s//E 2<뤪t :mbpVn(Q7:ziZNl*3miИ` snX
+U\Пbi0^Kc=!!{pwpyKH&Ș/UDg#M@1&yf_sIrŔ\ Bc7HexXltbu!hI
+&) ֩ršbps;Cu GFq~~c6RbO'l"<͖z [T0}5y
+AK]מ q\kPU"Jѻ?W{j#'rG^$U)~VHDTup7eÊ⚊R"I^w0^+mOXiMi-T5ȝ'N]~{e
+Cl]Eko%ݼ脦
+C_">h0[[tVۃw,U^|}X?4:a<X s%هU)<@ZQ/[6 . 0A=fxIҗQl3\PBoJ]Դ\>[3?,ЛMOyIOi> '|2kxo6<Jc^|5ܲZz;*,1M;]U DQ$6*ړXz#UfZ,ku)jFR6:*hyYpI~KSpMnQjm-+yɽM4q,t0L$th!f _yb qX𖠕@Fb/rhfZ`;k4<a% KEb}9v_Փ Ukw3H/usk`Ǚ;3$B4\+;jKD Z FFvEu{qcʰSTKk
+rS4,FSQ?D "u%Zi^,[U6Pw ԰S7ž$ !E.H7^üum[E^)@YMSP)'b^Eqc?'Fxmuym.͇$|OKb1cwWln~B XfOyDz2MӅBQWci2 [b},1Ew^kb)k,]wHߦ4UmϪKc`C!Zʎ5ICW fQ9Q|Uά2=-Id 2_M4 /ڨB>oy
+aG-?J1pm"2Vz|Raw~l8 4EZKݸUG|B1&T6;wWٝ]8XyWG-%r9PvX7ix*L(u==ϲ͓m qqZe&߰n=jcio@x/{Y/rpՓ-kb(nJ;7N]Ğ |ט 9^R,qi-j5I~Wfǒ;*~xFMuò~7S.0.rm4PMX
+d6͵N|b*4uvv#3֬ަqV`i2d%507Ӝ jx9x!KhF bLb4EzclX>eҢ(j =~n$ Y9PKC‰/q䢘&lrS
+-bY@X?(e92"կ)fm6@>_|Xȼ L N+VJ2v&ǂga:y*=>C,꽅zqwΣaVbP$Ԇ3H*
+|tc^7CvfCUʆN\A X)MȊQrK{Fۏe"j%hCi24.$ҲɹDӮ?2]HMtaPZ+C9J*_r%QNH4r{W) |em}^e ٻ
+.v_.e'T)V4(FoUgzf0=rƣ[(hGjKҢy}%]ʟ%(y쭬0L1sR1w^NJO7 نyoxõO`i0)¿6T@JJL#״C
+5\1(<U~
+B2iNğ':da9<o=:O8
+cENOri@Du{A6.ѱ>1_:, Jf?/LCNN*E]٭!mq=p)ݍ
+cFMH?b;t% 7r~L&3>ﰞ~6slD'9?6T­ϙ^ 5;
+k[}gX0^hq$WKJm3qV/f̔&|}31sO[9"6ε6 9K+|dj8a&kɐ=9wUͩ?|0,lugz
+CB'LH? 6ǍZWzjxA|+cshi#a43 KZr?'H:m2AĽ eЭdcM^k^Cj#,@DL2
+"pp߄CH I&d2L)xʪ*jXEtJJ]EZ_=@XY#>(UT#tgE UO4E]cDix`Ffw0b(U
+Y]sAvjfhw@A,bx#iu+E_Xx˼U-EW'_@
+`V[@-kbn_Pe:60lu-'\j|Dme;tHGD˪&աD!ߪ@M?B=rΕt<GH8Jd lMilv>Swo2Y!;DLž]򮆁˶Rf;˷-r0ۏ첸R}"?5#mk+3((.RxP{K$ ~?uX m(U$C[KIl9vL"F]C2q.OI61Qx 1iQZxle_)O&uZCj7$6} A~8zXmb|n^i>]fQBchJDj^ k]rou#Ih
+8ЂTc1)üW+-*kxueI~PE:LR] &t-¬^*$M4-bB c鎳A9ZuKDۄT}pp;dzx0w
+ 7 ? rlJU/3BK3hf@jm1RזD*p֓2O(Vv
+ndmMAO;1S`M-a6)N˛,_
+l[c.Hі%Ŗش+#]lcٶ$ s~&b~In^Y6-쪸ʟ/FRa` Ei|o$Գh:)=kZv6g|V'E;R^t\"ZW
+YnN'⢒LiK[!6bjnf$=+ *.ӃKvIchP*%zډ,1-pGsD8DC7x&X8e!j5kL4Y &Xq
+7pL=#.[CjϨ^wUOlTvCe]j20uuFfձʪ:AƆ"E*S'_
+
+BPT;} *~>22
+EOL_~[ g ,v,cy]zFl(}FVύPq㫪J6A$*H$Ρ`v0;f×9zL2ٞQC|QM5xzAR+Ԕ k*xGjsH%Ť^Vaݼr~Lȡ3h5$؋#2'$
+,FP].V!foDc&2`* _'ǹ{# ݰw%{2>aQ*X SV*5r1V/\2dL9x~dE ]0
+^z[AKm<L! |t䳁,&p#Ae* aʁ'pBr }1zwAj$
+,9Kͅ|-7\cL Sy rRꈼ_bl؞ҰUKTU|YB[3@S
+ zOh'7@nOPJ-yV;Lg]fΓ'Rj^[(Ā
+yCB I@l3o? qMzۨ{6Tև*?]FW^V|.G2 T!YHl" Iͦ
+~]tˑն:6^m5 +)U
+&G͒ҥU >ILŤSK``;m\ojc{.]w{]}A][UT5䄚T9"#֑$-QJ֙
+(R;7n^윆a:VVTST@e&
+PkLlvw6ԷU8{`>5#8-Eʦhc5Ij ɱUx(EUu=XU=ux}{tjG
+4a(=Gr(nËqZTivU肝 F7 :&|ؾĮȬ8CLNlG\nt{Bvx~T2?]ъ?:B': nAS+w."nG%PBRBz^MLpz&*T@ mHh؇Dc΢&ZT_
+ һE/`v0;fˡp;ϙ־A}UlK8SQC#kדtYFUVErAF̾!b7E|{e wY쓌E8T@V4U4<7IIiA(R@: j:8vug*tE@EQ*r 럄B; !rIC@V@]_ӇQ5<n.>UW/)aY/-Ry%F2"  InK/i"tY{p8d|Q\Đx
+`'yM>aATm#GђZVZ˪ݐETD_l }mϒdo8zPc)VdjGT *:YϪ z*M
+yOCŻReb &l[Ghmb9M%>]8!p~{gkl’B42?ȩVnI6
+e%2G-8o
+Naa␽Zfk@ 0,"IBLtrAlĐ  N9Vr:#Q1ha x!coDjԀE_dLqi&]8NLSNIS/)WKlƜ5==\[jTv]٨@(WKsm!fwO)iiLڤ?鑓#tɕOL=?ٯ9,o9̳t2UAP@C6-!d!@ BB6BĂQDkop94Mre9*ӍRMd0W:rB5*G1GRBd; ib"P'dh8^`B5yϕJ\ L΄*nW2b߭L)3t*E&' sdr* i@s?/=:Vh,~ߗ;{u15k}6EnA;xobhS$u,N%ɕ8j 'q/qO=`S)г ,Tרs=@o5-z$^˚Fk3(lUA?5(!4v(_uw1ff:w-}hXKvzqAOQ NϜ@:&z$B/ $Gc*8?z0;ߗ]/ZZV#sY]X&qzlKNCd P<dՋc1ƶ
+[oyDs?{how1,8 fL?CVAyE%
+K.?)-amU [5[ڜȺMtM0o
+y0wA6kloz=vVtbd.RC{,DŽ4
+)ۚ+Ou`;\ mqׂZ4++'8bqu2ǬN Gt$ F7 G,)O '6bgSo/+WuQ.mlc`rj($oQM
+0rIF?i#@I_S>8Z7gW-[ܫ J?&[1Ck\B"mф;[
+ 7qD
+$fØt;Sj͖%qzfg,;-^Q`-}"ҘGHv- 35Sl.J7oÉ@ 5pNgmwٱٙmu*ꊸ/#7H NH  @HB\$77!Px
+Źmzw,Fp h9voZͯwxpo=3b
+$ʨ!Gl03DhvYv s)Fh)-
+`Fm5{kï 5!>s^sUXt9UJ厓7YΆ-P7 $*gz0W]yl`\:XA>s97<5'&cE=ffӕDdyix M8ZH<WaT6TچhAgEt L1 ACc#VEvr}fNt 1I#7ܤ Gۆ
+r;at)ChH^0 uΆcp.] ~x ^Lޓ(qUv&ro(JeP <_ׇ{Q
+c7Rg4tFZgaCCQx!)(04e)
+T12Υf8E‘6G V^؃R(E֘Yՙ >6."4Fm Iz9)d1 ź F+)mju@a7gDfFiUcԝRڊXxi>6|XG/@@+$kaQbќ0/nMҋ]%:c!רZTxY jq4Fּ]Xyw?=5a'
+oPEiԑ9qͩ[ q)Q<\Uh.gY}WS(35QEJYj)zS h/Pk<^~'?aS| A :8}F/R+|cha
+ 4Y^HjZU7
+[C1 ?w<}Aw{_Kyē]Pmp\+ؐ- TźˠRVYĐ[t
+ݽ#]w̋Usri07mN wˌ|!WQRQIc fWlerU:Gg&{ q?
+n. |f0rg$u͚B869A$Vˊ:bVoi L,EUJ@!Og)Л@v4>4=A[+g $fy4"nv,9r1gJc:5J-AYL
+:J匞Y*ϗȭy5Zg!W6@@6,GDOMBӆF`+٘^-+*uj/iuUcnC9K)7hsz 5]Nٰ;T
+g9yNnZϮ^sws9qq.54̨&Jld2zY.dؓj0t=#ۀ{:y?ڈ-w~B=wB(z?1GEAR#Rƙ6TPfkG5^C s#?9z %g^t!̛a2Rxc,ip?T ЛVN W#E~j7 sZo_;wf .U/`
+c( N`+GD+:%Z}E2u>TJ4& *ow} u?zXcΑggS+~P2u.3MV&*1Z,_e%I#\iPpYRg/PphmsY}~'kGs4Tj`ޅX~>3en؈24"y 'ʸq~tZh/5kofصOa8s߸F_$@3q˰<R d%'nQq4fM+Ҩ|׆n|qjpCh#/ⳟ_cbQG0l
+%=+>>'n9;7^^^=1.5?jD'_X,D,Qn?t/J\p &w!ב0؋gTStZ*j| D„=bCB3WYx{ot}5[,w$ 4LBA#oaQQ\xąʈ}IHNK ȇߠ Ke's}*_};v$p;$p\,1~ ?$
+
+
+9~|?}SRwp^@YH{VDrqQ"Ş'VpoTU$VdDױJtzt
+*BM"{i1a=~oضR[ Q!q/eUV.yVH[(`IʪYL<SJ0MuV~٫@(C[=着0#?/0S.2sC -3)bg$395t2C!6+ӵkhC5Iu?F;;
+DF$L@ ;/d:!Zu]{wT *
+hc^3~13JEi颸r!:Aj$U^NMr
+Am-[[ꍏm@Ch[kd+>~r`vS!CkBD+Y]d=a&JD;Dlw؛7
+ y툈z6tk4 6֗7Z *-Kآ&%ת#qfB׆cʡ2 GMTC?.X [ZH5:Wt6譥dUEFIҬŋ(ZǗkxZ,z0= >=P~?Y9=1y~4tV$aix%A!jLsLdEԶrV!tZQ<s`
+gSDFd{W5d˸:n8 
+oմĶ^Ƿî:fԌ& 6-LzH| b?ӑu[}U
+^^_b6QYU82Tݘi-434o'iͩZRn
+ZoH
+b#1en ?#s"*aQ{u5k ixtJK}
+LjH
+0}0:[gAM vtv3tљvZuծ]uC;rCDD @ !`BBHHBr;\BZPXnŋu ؇}f~/76ذQ @Bbh\Yuun^R! lQwLs6H-M{#RpRʒKʓ7k׌MrM'?gİkS!" q8@& xw3KsޖG!禼:􊑟 %
+(Dh>F,AC~I)o|J"&
+8- QMxFeU>iHR|
+ N H]iD/X"IYEMo(
+g]Ytd_6]8|pR~ =)L}Uz{@ yf4HsRA:VPRX[CYqDu*ܹr. Y%3XlsZ~=*UN^i\U^,t{gP5y - AEr
+II0k&K;tWp}Qh 켡Ep  0'#@%'U<Ft]]"JQIeVƟ5 L:cmvҘRUo=HB?Mh>
+RMLp'ʸ~<xNPm zc\c]Ofylş]]HG$;zO'DM {BYLy \QFє{V%ܰIe'_eP[OÏs,r1F
++&woF|,earq^Twgt\w@~``S6%#䀣mI눁`(@z;@F
+;("a)^STS 7
+Ә>ɟAdL bc!3쨠bUom`kRS2i@
+1+d)VasYV.o*X0N?'Tg<'TZs{ZI=yw)=?S4О\ p
+Q#eMeXqiJѳRSFz9XFRwOMnUzwOqKqOV<mC!v9~(>gKx}E5qcu(:ʢ2 R^P)R @JHC"BE0 A\ gnև}99? ^!HyYz@-F*#1KcH9}b_Rh2/s/gf 97y7 HPa 
+r|h%x\N/bz|VViè-
+5(n@
+^$k
+$ub
+wk<sS߉MAn#6kHfǸHTAtVUհ b@)ŶeK D b.n\ Pbjun@if?Z_xw))J_zUB];ŔF2]KDHHhR~DVMIDIԋq9@>d߁zf0]1>F)\d7KheRUr:[Dx%2Q5I%euaYI+tJ^%(G-
+qJhMIlm"Y+q &WQ%+ŕm
+Tbs@@ӞEoܭ-~b0䤶2'rą >UepKyBBc^3XVVIqUz1 >7
+?lu?ov9цwD%HS2{31|
+n)c!5*!/Q)Hj&I A |s
+v02`Ry=0^G/z*TN k㷩a#3
+s
+Ve ˴?si1ߓAԇaqIw3SY*v5(Y51讆to40xQ9rl|Wӆus^Y~mKw|NQ^#Bqsғi1s̈9Zn0/GϷ`{|{cn[:6-2vk-oVZm-FC q4Fcqƴ(c j&Rߕ}L{#}9,Wϼ3 , S!VCfi}ؼþMGNK?z8O.{—`bc?[BD/b>bSPo93){J<#}Yw:W@F4 WAZY
+]
+zHMQ xzAԾDkW pN8t8@`s$@fka;PYln "b HQƺ<vR# 9;PN@<G{w>oc.᮳cً9 ܹ11?` v뀍5}w
++5wqY.棇xcy/q14o(v7kHx AAn8x|A
+<A$5yKiFb\ g]nyyʟM Sḗi9Xd^ gAF /SB3QSJ*bBgx7ۖ)
+_ឋ&QKQO”`}vAl !Oہ*2| v$S ؙd}һ"Rb%{Tϛȟk%S1(q7a2`c ,A (= =H'PAI#DB§ 6i^\suYbMׄ^ aT8.}"4!OnQe]f|i`Yi'lm` w= ADx"S޲L7R+jp$yt23mx#>e=1ı.${5pנq
+&+0ȋ9 55l eԄJtJ{UK?Mj>"k>G>EOsE7ڙ+2<b )׃א{A1(rhH<=fDϠH:XNKS2jdК2SBQw)봑6HV+c$i:F-P,SYr g2mGkq#(BC8zB]NEz7ܒIN/3au#kX]y2xV:ȶyΛk?T9>k1`0)쉑KxP{
+]D#؄t
+J2:xՙ&V"_8Cj71RuӲ
+6YPsMҹ>jY,BOz;[Rd:MRhg75V]={__Зsbc kAENBv?k|?0j78H89PE
+-aoPoꤜYB#k 5*a\pP&k,
+E|>O<3KbXC㟡m+y~oߛ`b<&Uȥ\59颦lY€VɋTg*uũ 6cdJ3Ft@6cv`^GKq;}^]
+h;c;H N]/eS  VUfRe $7eMZYWF0W-3|@oΗ l1a ؜um%]V;B=vB\pW-%\gKERSy*ʐU(E_0}&79 @͟
+S߮\tncuO:>hp{+!Z#9RM2Ǫ* KH)T*mN6M2յ4\DgB9_2?B p%MumwuL@#pBA^ ST::8iQimlY"YY9}^Pd9(R6 D)LI3 %8)|'r2$E9)yW ro?(}Sӑ) ֩ COǥ]%c7M5Y,iY!iFy-_RM-ϻR?{9,Rl|RRF$5tYqE7 )ɏ<ޑ)  Y4PSF5;/xWg-^f72.ԊU!AyW2*R/}8Bfzc%9gʥAgjĥ:NwJCrgECzu6Wzsmsw~a5eJmN qȈԪkRbWH:&*_V/+w_rDgfIkU[4Pe1vGO}MO@ٛK_omϕY' YwFHNM?x=G_sb:Uݔɬyɮ|ɭRAb/+զtU|J
+WmR}mNW)6'|cDŽ6%ňw3\Heܩ%w_J{1 GV(d2*uTnVyxիE5.vmyN5ҏ.b< >oDrZc}[-U$rD$j {.TB2/^#.SjПS3gi{ݒ>'Oqb_B]\~gݑ&ft{w t\ ꨎltz9)z68D WoZ?u#ꇗT ,iCzҏNF<,iQL?ЛO`S,W}ueyUL+vS;3$~S' j#*eߩ]o^T,7Y+O;'=#e4@ӑ/rdbO,B&xȏYhuX#wvݗ
+C3깢L<F{FxA\T:۴|O'w7Sx [ׁ>!rL:{NFN&&%ST˴}P<4Mt
+/fVwWkS%*4ҩǡ; Ra:6p`F~ 0cFnuF##G!
+E$Ks@9]0D Te8v,`X` N70I>
+WS $x9[LkpXBA{c7$;C#@!MO/ X/AbAh)c
+E0"Z+l<Wz/kL^u!Xw"u ~R6lE8
+'jp1Ƙ0oEר*F< ~L!f(#QQP/i1sk99= nmqb5_ 4!ۀ?P(}cyJ MKB$gsf2dLeNEFc~cDϲ1 vK}
+Qo\JhKٍU}_6HϵIӹ{
+lLjwxѬw݂{"YMв֞\;Tw}˄ nʦD֤ctB5YN7)S92 C'NEEC,PGI1YR PJ[rY¹}'}K5Uv Y/Ηg1c|I'SCR(NYd*R!Z2_ɞ*!hTAc2px3H]}=@]_Y0^}gwt# cOU EttAVJNSrY&U+UJJE1HaU@5ikwxN|ҹk5zC'KԘ<^-j3$/K5u&-Qp5 J暒Qr4rn,Am@7dK[>Tluٰ}së otxՕ`ߦ*P'B2p5 (\<af(+et}VR Q9#uL {
+OU+ڼGr꽳ݳҚ7y(n)(A=Ǯ52:ZVf$+̂J]#EOP)=@/q֯/qxpoӡrΟ}=K+3FNȺ :VMi ӒLC5vDS7<
+*d/FI
+ Œb#ngT-.uGܷ0n
+B
+eqqu1S
+crY3aaH @FVҖECm<$ 1n&x k&i}V3 #~
+䛙āh'#NwY<L[ȧ򍤏염̒v"k[6A>3a)X<,a&Fc42Q)mkD,Bg_ ܒZTO.P&6+%_e-
+ қR ɗ Ih
+8LAȲ5,2_*\7{|Ž%a?<ˏ=? JI EޢĨȥۅow:f0E4(7*Hw #jc\ [YX-Tylf"n(<=ŷ?|#jd7+'TJ5krZCK&<K:Z%IO78+69(8.?b\̺:M/꼷, Ք]r`\sH3A]iȶ+&vAB,IF"Irj%^N(P)5TLх4=M@[~̦#3+}Xlp\J~Z#ʈ꒸sB<+Ԛ)SMJ)WŤ2f=P
+0"Ĺ1eYaf>?VM63rz\?Y Brs9z!p2;ik#|r[a[!g=,Ʈlׂw1XWef ƫVD)tL^Nn?Γ8rFJF7qxg3Pr|UO3& S5`їƽ}/0~_5t<᳷9h[C䙆xO$_TN r0<AvRZt%OLc4@Pv'fQr9Z-K :: I=mB(j;jykNmxgSzl8h8]Q. ȡbrN<K..$2ʩTAT3Z@4Ra09 +\!ۊznzycY ɪVua yLɭ˖d$+22^$% LY/C'i"=+4 6?^r߳F ݵ[٧>󖻍\g'9YߎAZ-՘MOd%LM59U}v!5J@XĖ1fGyPdв<SV#AӞ!u̓neK8/NWE5JIh$dc⚋QMR|PBF/EbD-BfYk'j0ua3pG4L~źrg`0h:‰{;<CIǫ! 91=K¸nIBRtGaZ 3
+M@ϘhZ i$:d^ici&C)Q'q㘳?ܢ~"ƮC4<
+cK_ࠝ>p.O80v9f< smOvcb8fZp(%-$T,,5K34HDuQP"KٗdZN<9\vupdi}{>Q `>7ZNHM$RCÆGda+2ZB'pĂp2SHr]
+j yhC_K^hyb5b=lО# pQ,[8XG*cE_
+b u: Z34b(@,
+{*D̿D[!އ-L쑾h hśH 1%:K谺8|H!rP6 ca=,(^%~wBx/[bE܋=!9a
+;ڢ0xǡ<T[({*#7UMkO UG:n=uS] -yM5YGqI98R6k'4C
+k %D+t@1rwƺwVt {z?u7iC̯? WmӊK˪ [V곚fnPs8aPݤr LdSo _+XɜzkglA
+RڳVR6^Jwc\~qusBd '#Cݾ^nf {&c𦐑=N_lN{Z!Fxv f)`_)\גYz*eyExŰxh21v& uA3lQfJo`MEo"=ƚ*zU5ŗҩ+,e'sG*e35hS$N>ؐ|Ѹ#i{KcmJqkjobMZ:Oo tgw%;y}w,p>zݭB/M6小\!8D߲^7ZՐUPq̸%5:=iszGRUgcefobEf
+b,g":z_Jמ 獡#NvF:unrsԱLvSQpxWZy}&6K&w*簩2yCgu9Irr{A"rYLtފ#oserɁ`{&^ɛu6LfJSdSy:qMP\Tee`KBE~Cb2isjrqؤϷ&,
+"gf(`*`Tݍ=.ne4.
+3)fhH1E3ZQN|:렻6о@&1FB $T0tE,+`HcHdHA'S*z|,hgK
+|5;Gk :{nq
+,
+(wĬMқ\?'?z u:Lw~v{ S?xJ;oe;5CB"/oSlKlYk3)Nd;9ut3{ܟ1N|ʸI/WIs >@e@>AngkJXO]%i2Bӟ֯eǤ鎣2Մ!n 1!ktkk:K7J?(}\[
+he-/#{(ܺɞq 5~4&A~]ɭ ;˯
+& h'ey^|[-ӃH7P\lқ(ݢJ]wr>ע/Kj{FܕXRgkܴ?ZWLdUE7pQ=’_DőEQoQ3C:~AW= 1%ޙhFIiV V\-[SOxgWVS{zTg*|$1ZpqXqU_-khbOc/scs^r⦅sx!!n꽫QZM}y6Tvnj
+Ҁ' ;#=T>)2U>(I*ي.Q$]qWVS4)u߀`_vP@cMjM給`:IkOk[
+lZ
+ϗΉ#j3I%iCibVvr/]$8)NI</Q%JTIcH4+T%  CJ 2D 6Ҹ{вlepimZuCԡ(U!%49,zfF!+M]MNk$'(Ro""Y2uN$~A t6td)yv hfpyFOcVsTHvUDk
+9d Zj& )07!N.Dg\Dg YaL vG cZcq^f)vBqɉ&ʏuum5"*Np.J/MM)V'1RNl~T~PwF7 #EyByΜ
+UQPȠ(
+n P #Z*KMyONz;պTxl6yoqBi~W5+y;)-4,^h[E|fI)xҜ9?[bؔQ4u,̱,%4xPɄ۵LRτ6p{zS{aam_{swfUn\茝S/Tޓݧұ06Q Aޞ 8H&+hhqh2N8r(jr+lקVPt5smLa0UW&m0=g{6 v1nX ϶ܫ{@4h:AVl{x(&njM]ds}[$^ؘ-װ24h*~6LgsPfuG Q QР?8Pm
+T^e@ PtˍRxˇzō΋%LC7j R˹~ 훂#۷KuU2M{\~x%W]W(/`<*U
+8|Z ֲa Ϟqڙ29בōXΏKQ(vl h Tt Pt
+$3,cܮ
+ aPBzV
+<Q=0i` 4LOt=.a.ʰ"aDCE4TQDU8 cPf([ .Rn(ASxX9xG r09ACڗZ1Jj ֨IGբ8hJ*\'8(>M\'o<GQ`GB't>t b`8dLT;YR6*q~uF.J=QrNި?(KGyR$%zQQţGC1 0Vg်Qf@e;b/CxbQި$D*,,  ]彂w9zЧ[0OE-z c LZ`
+c16\0j
+#ڭaMzo0|?@uDЧj*[>*/x}P~|ݣ|ݥBY0< }c% \*fS1wM\H tdrtqƽ7jCd n]7{G}^kNtiD/5D/4Dj=|f~Rc5uԙqIDQ⊈ȾCHrsH 
+
+#xZʴiZԱuZ>sx9||񐊵n.<o
+il8;2-
+^S3R2Y db`<)2kjcp~#߇7]N֢ ]_B?TUo-8(x.r"''GZ-EY @܉C4h.35]."Kl :|2 \07=F;:m
+ڮȃZu(9O!͗d)2eA:r.RS4>5YMAJ"KA 5 *#pL6#-pͶz7Ӧ
+n
+\+k{'B
+נZV7n7ˁp;8]~QBi8 c>H7'""zBJ*'T"}kC]dR!EBXd/48pܑ~p֑ ͎,xx5quoC('u"4c )d $L.9t?$\0Q ‚̷C|n Pݠ}f>g#Ѕf
+
+W(
+WR`HR~E$bP
+ev0CKq'@7' - r\>&@~ aأ+
+<<rU`E)zLi ,a>c)̓*u96Ϝ e^*3WuZM?YP2r}mob ZfkVPa~RM|%Qz|Ǹ$~(ŵO%n
+%ZnUSOPj8=G`ߡ_ҥhܟ)<fA%z)U#%ܫefeE䶉ò3. ҼMBZ P+ڰ¦9$P%+2-%&Dq
+BV&*)LU*CqP|Ce¬Aȿ!mp
+os+ k cLV-&۞˲?f`;Dx; ejgA'зhv 7|fkg/] z ٿկ{x`)
+AvdqڣcRBQ,r V+]Zƥ֭+&g.gA8;~p+Y',YUGG;}-mhCc3X $r+ϓ~
+l¥zb'&jA'^R
+4TxPQ HG</chm6F&Vjr
+l&e
+#n#D
+eSNCCC@:*"=S,kP%;LQRBlt$js_%nsFΐـ޻9sG^x<RH?1YL)ބ/A}uWW赍ElkUGɷԛΘ]2k/69h72!KXߙB51UHC'OcqJ:2STeoG?}?(s!E oPq7hW4^#^5π Z>WSo<UuxOP@aY%3H}$31pŬfS6pO//XQUU]SN9+U !ÿXoզB~hwS8eoKFuhrQ 0=92~ ZҬvN+ a|j12ua:vYA]+vգ8
+lg齍bvE f?$t5=+~[V?>-Tj}'润 MuyVMg/hF5DӠDdEa0$
+ʩg[at5#}!UgєPp6i 6-)>$VG7yTE_UF?UcP=LxI ds0<Z@{-ΑR.¸j8]ECF.-D
+ǣ_:N N&!Ƚ2~"RVws܏^ZqO%(ߓok"!dc@13E4wкXD]c[lظ ]lq|,úՙ3
+\+ֹM.}7מEIRN+g^3?*I1ބS8Ä́!9&1<&_b7r2Wi1_ì͍dIUTfgT6k^QIɷ<^3{{j϶:-畅w_u+7nJG騘=C<R}ZVry^).jpdI*/Wy`vs-q-[ 5gdBV.YMY2O(g6yK.omZ>a"^.#NzK\ g8@U+beV%y:Ewn_Bu.Ϩ<PD H)#LQA,"tІFpF RD *1XQp]f%'nf=G}s=WR*x-^nAIܐ84wQSQQ;aQP_B61xCTT0^,p̕_-]Qךnܔm^`UfWH+v)OmRIޒ)ܤ޹oEDBLH$ oA26.98]pfnt.*[;hQ]&8+e6lDzBY[Q+HouSEg|2R>H{-H#BK&E20\ߖpQ )qXt)*+4W֕V"ҭ &ۖg:J $\IN^vNWFv -h[i Q^R"<Lny3:dpR 讶gګ<9;ΩWҩ.1P7b,e%6EyRsN-PVP_wH \DM/!BKH,SC!pYW#4{ ԲѻKuL.wvCzMu2X_`,۱٢"Z=>K0T꺭bQ#U+,-}).$)"
+&{d1pq5k7٨&+46r5 j:^q:(X̝),dEK9wkE5/snAph}OQQQF_,Õ2ڃJwfm4Յlț5{V5d7DbRd+>6)uSu墈&ކ.uCq~hН)
+Sxgz7.^܃ZZi>5Pt:2e^iRuI*Knm7rKs=M2 JnHC{p OpCpC:=zW?
+-4 ]@e*{磤ϖ)sg.VY97[pp֮(f):v!;ikw۪n{B.^R=lRMPzA]H-u̕IrbVύ>u4BcuGLBd.XPWvﰢqy7N}7{;s& 9:t}C@
+d.W)6ncmm,m
+<x
+gZZ|hC+?r'J8?3NO3Og,grFlLP͞d={?6u@GS&=`\^Ws8j\`֯?,^ٛPb&2rMއּ#,߯PSb PNP}$}-o 8>ib191 qBG|KV@E1aɂ:3jQ!9N,vP>'Sߨ־
+(
Pϱ+
+8b¯37*535.ClU4-B 8۰::paQpڱX'v1e| 2F9#a[ lA{̷S
+"_ h@ |9 fрW2:pb5 a|'&Gq b{̽D|^'Fa
+oqy- p1qևo3go7jq|\|T©Ig΀S93~V3^i;N0 ~.܍,+w{>u[c}[k k*tΫf=btS|lùdߟ{#׻-~C<fx] Fb0Y &]Sc:O82x!o#%0<ӵ{=tf_aon=nֿ4.]: \7ٵר%O`vagz9 CC˅yK}4z~a%3*uo׽Km44èӳ<Nǯ<l1u
+½X.P\GH 41=wNvcY$ϺD_mر_|kO6Xli:suO!N/pm>;P,IF/ Pݓ- ;j13":wjY<㶠UǗ3k]RaXmu8`~Vg xk;`bƮ@jƹ7GhPXCt3bR/IF?mo )M̚C-oڷfopm}P]];Nrk~-*x5x[w@;M4V;A ݓLu%١ I2Z{| * =~stQtU]xΰmwUo ͭ
+im io)CC?€1 fNKh(h?/2*I[tԝF6\DiKulI#eY=FuRimbGtUd5g v*gTD#" G'F"K#k"?JA0M@iBSpUhtdXLҒ>_YؗڝW(5ܞdZnQcU!-[j!.z5{%-dp_jI:Pw1 d_hwWеL*D:臕fJ>Y)hץ(Sc +e&Ir2j}S_l_W- TC|)<i(WD; dnP=wp3+)#NX1:ǣ4؝NߡgVe70(WęfZ'qՉ[y:AvBPpR%Lx$ʔ ;fʾ3e@b gxqR"tg3V@GU;{TriU17eO+SFN_%5.H4+JOT(vZ2#ecZrH9K,y[<eB(ORɾD!DsgW|*7Ukh*[sZvmRho,X6/\8'ƨ0;L[e)m3UvYk|Ez 519(Qqy,F6.LLaRûW2CBW߮8{\MA lm+R7ϧ-"VC*Q~AiN^27:#'V]M]Y>3I]':&ͺ(f^zLd/.<s?=| ƸĽ3bf0FQPI.]))B[(%]ەnvDmvT[UJ:꼴5|{y
+%!9kųx)-vbE8{`u,=
+*̃/ŖŔ fL7=[+"|WhW+BwK' ,:}mDss^R(shRX\)wPCTffU*'EL;mV1$bل-mWC_^!S~\[~ uI}q-v P߻`G)@N9@ΡK
+km N3<:fjm0ormڹ55K֤Uk|YxWWENѨQ?<D:{P__a~~C88,~
+n7Ldcubu} F#5v`o7֜~av "Df/
+=@ fG|rG<a5Spoܮk@}\[u"AC9XD9XE9EC/gPm{1mi%P_9z `w!?
+d@pt`u/r)Qw ey2;e2N4_r`y̿|`
+B_  |ozr3^AkDC+_C(b9&41[Ba
+Bh;ڍJTFѷt ~
+`TRiyFxs.q|r۵yyo띭}w8>9|nrolʖҵ-ˤe=UΧ䋜o)`"&#3<#“QZ2\b$D+ mk ݾKvxr~Kqf(/]p6Q43` (; e
+W})j&-Z)=gGN% <4IK:4t!x&i5XÐ䧡GH\ȑ5)XKX7`\wr>x> ].K< ^9e>gx:,fٌ M`tWDL+p`_+ǐ5|U"wxP w`EĄ+͸EQ"\!dAל8#P ܆Vk=!㼽ay4gTh֩ȑtG] ;z6&
+,}sQD%IV%~pYJFii~Nu?V,'ZBsS` 9}yt{\T_b޼1zDw5Q]_Z|#x~sKn)$U9 48U*婄\C"⁒RX?"ZB =zOᨮFgyfG*˒V{3f{OBlMz 4eεFO >pZ`JUD/y:Ľr y̿_ # C{-4k-C<LƣDYV,me*ƘcA @p/Uޫ8[ Z*LnƍW&*2<jπJL+SzrCpgiC&lDIV4NcS+}U+Ř`*ʿG
+S
+tA*chsY3ͤlPأ1F( ?_ߏɿRR`,?>F(^ԽfjppQ0f|7\^a3d{wUҕiM դ 0ь]}QNbWT.ŪUV^+1\"h:еg=Փp>j
+-b oЫ*CH׵Gh(M<Rifc
+;JͿJ ZS/}tZE3rϠ7.g&) 7x9nz67ME:
+ԅijZ#ʫe!BUc%g{
+cɪ0zO
+m1hfZ<f 4K8jeɖ)Be82WkIN*Zd]\YN^EZzBAjr.x}5A~J(?wj6
+]ʞQK @ ?IoUWp㠻6DC{=7ff:47BsP u~ڪ`v? lo>mnV
+kSRsӚEs@a=2`8Ȩl3q}JCHb >$L$)^>8qZt^wK-uD'3Ÿ2q'vABpaRNH^ɛB~ CXHPCnnDOZu T 52^HF"$W셺=W3uЯGn<PWYgkJH܉gswq2m`/t_glHj؀6km1{`5F
+uu݁\?mp/#8{QciMƘ&3Փ >j6{ΆF.f#W'~#{;֫e=֥?:CןdNvå_…VW.D.rah+i 8Jc=a} Xa2bak7lcwݿfwܳm<vnJ5Cpj(Z<N{r)O.iQICفмyɄGQ9o:kYn,g׌keBKqp޸[Oc謱@l<,:m5čfI߇:W_nsg|DAJPx8ሡ 1#8mAqwعBipƴRdZ+j L|2`DN{$ {EڀRiM1FYjz(3qeώ Ãm)_
+%#mE9= #BdZ"SىBCBQ}ĵaT (.tې]6!Y|yy!EiH$AYrIy0۶(0NPW{I'Ij\脳1h 66M8I+'.G^V'MCmʃ [9WUh.RDk-v{?j7$ <Q>ЗH=_2p5YIr4'jqbjQ<UL*%''9@fȦ0n n2?ۼ/T{cvdjb3c{b1taG,wlx0
+K<׭EhJ3y5YxS}k]|tDP%VHEfuIcQؘo1}c%殺9Us0clƐfӧveٷ͙.J[}FG]z%WPt!A|BT*˗$
+~VA `T;!V.J亻r'?$
+K߱!u="!<J йd&7|#*ʷ1Pn9^oJt,0ɜ*WmYGv+SK/iO ER=K>{KsH_[p"$bP[*( b ݜB~xmuSv%2MYY^aS̃$0(8qKQ[Q&']%3ZZ:WtCY?֠ȺYwrpnvC}V}^8vw֕z&Vk}j15,(-aW¨/U V]uTz>+C4-(lA~*h7#};jdEqmim2Gi9%5\y볿_x,?:_/aa ճ`>GSʹ -]=m]]@^7^/dٿA0Xnb>/!W[cv 幷%ޮB:B:㦉fz~t.tV.=Q7![@$oGx(3͉OF"Ʋ9u5ctmim##?r>o<Y, Q}hPv ec@¤b=%F:ފ] gBgb=3) ΙmU?nqxkzq 7/ޜS'Xc@
+v>ʵ sH:D&u9_[sc>oχ`|mq2oTh3q6٬܍~Ivl?ᮝn9~Wc2 N
+ﮃ^ł_9}PV )x=χ_u1>FH}oM+@ lzx> չle D((`W% 1`A,H@Dņ(< C-O1D!ODQDĂg0;=;{9F 9PY0s C Yҿ#DHNb:D X
+ACFr<(g3J,Z=X=OZ8 `] h%+"6!j&;@:5ͣ1
+}k7jGK(]48Zw }0`W.
+:U3PŸ@7QMVen)wr{q]yMWՌCkp^øZsƝ{=fKm`f9/c
+[u_epKؐ**2,m7֛l1l5)0.7TJ6 W\:dk\^V2Yg`(vF#9. % }#cwJFscS[ŋ6-X f%YZ=_ڽXU9 ֥t'+mZ#PM88>(cEV
+$Y'MN'-P J7Jܠ<>jf<.iSGCp"
+80(ٯ[u^ȉ̘AȈҢ}QXqR9Ӥ'S E ]|j)ǻMk"-&1sT?pjPEq췍Ҽ3NZ,ҿqBj;(v<.@0wlpvL8!f)xy\ԨLȵ" uyGEuqwgfd`.誈i*e60 URUZb2XYK(nQ@M\)GO-hknQ999s{}b<31=uO\u]D1D[~:s[<ס='ˍykP0e P0I(HҜy2s&3.N#56CiuXShvNޠGGp>36o_kE QY|7jdYc?4bIQ4I\tl-4 6)1D")!ΐc/T+b۵ \z/NFŋ~>\3T`'ٔuy%&G,5E^rR!+ea򗤚a6IѶE
+$}LR¤r'Vaܦ 7w 3wY`%Rf5Q|'&`_ԥ<JҀtf9c(23=9Y0eJ2J e(۸xyLZri+ubQӆ| NNl 1ԄDuh;Zle鵚.fI?9YJ,6k=QX%rfْitvMTvm٨7ʵ*U/^x=̣9ߐ{_: ]t~Y]%9@!yF%Hw #v]/I#
+da6KRAKrP5+w/onw/~9;N1\,k
+]c'ŜaU灙uW9uu:ɴɔT\6kkl=k4=j"k)<V
+UxAJ
+GRRНLwL {MV{تVOLL$,h [bO"bIFYVIGZ,&̭mS6nطӻmXk2-\>;I 2ۭ^8cGbt8Nşi kܭz a5_b[7 W`=.Z
+׆]4T[]Mo:`+@.
+L p? f' iA̓0 8 ׃S
+{t{Ȁ>-fn)Eϖ:4@ro9tXr0y TO&`R3`Q19*hZ]nusp2Nm U{0C{2OAy
+vP7A%PJ^uqW}@w&cN7sG80u
+p>-*ka{l(H/xArA$upup}DwPA;6yDt3=S-iw8O.ձ]#Zr_`HD)PY^K:_KFn )kp9}5O= G; pKŦ@ ؋+p By:xy<KId;B$gcM|
+O4~%<JLRj|%cI=r ׂ&|\]8p%'.W.+\E0TI
+8K!N>C<O}'iǠd[[k;ϯEf\ wNrgũ!p/394L`""}*/@%Spk6\KÍ8†NQp:
+jp2`9Nű yy9t>`:G}vm(/cH?5'Ip?P;2z4.c: 'i8ڍVW0.bfzWt[=h/
+ n{h˸_E zyɓTb5 O7?OEOHhq`t Dg)`Cʘ!]Zv{*vkphsѦŭ!CΉׇ7OZ4gI{Y*w}? A/zPg&2S:Qh MP3}:5<@SnT6hZ4uuqUҠ%YVkNq+5WSHOQZ*HyYITꩤމ&8biޡ'H}1
+"'b{d86Gji`6D3-vv]m / %^^%^DR[- & +[v\^'_H {BWG7&3ҿ| )-F{
+[jfKS\q7K]*Ӵ'Ԥ1n},)F??2 J/W<hH]S۳5i禋P13߃'# e1LIF"[nd 3DӒ/ɵIs,sevKOAaMgu-K\'Q n4A۴؁&W)6s`VۘҬPeE1Y f`lÖ-\l[)gΑeZ[(ҬxsUddʔ3)Bu̙KP\K|gv9~(uDc<
+r5pF2y-pvY尉9ybΒS!3,F{`ۏR엉*'^-(_ar<?E>袙h!kS.s(N9]Q;yIq#IlĦ3Ein8U(1<RZ\ܠHt)uΣ|Q\A8/H4Kis>}
+$pGn?cUk(b,% J,v-I.. Eu݊#ʘOʘA'GHotE,9g0@X<ah`D2O
+1IHqK%q\LRi.(+لafaQA׺<T5ڨEA EEqA&.TD0j]S4VmXZc4DM'>3}9ݓT84ɬOOZqIP/y_,*ʷ8o{PzN-gߑn1>c ӧ#% iJ-,KRĦwIp^4;D!:gk{Re܋$$ӻ0
+Lg6)C8cl7FgaTV?x B\,Il|ଥҨղYeY&rM"<'"*WB[+XIYIoR٢M^s=\wD\C5`0D"83ƹBqfL7JHCvKCviH#iȆe!Ԧ.e.I
+^ ̦{~F`8[֘B99c@"u(AxI$ %_2JF_Tf!ش
+PrQ?
+_H
+\ la d5i!݉tOR r+ZJWޕeE9X 0e,sòb 3КB[m(xuQ!b#IY}X
+0^-z~I8m|E&w͜<P]Gc;==>>ɤDtح;DM"P2$ydIOK exJ<Eߢ'xxx7w3Q Q Q;@b C2ӹtqL<z<LtmB.z8Sv'n79FBtqvp(\GBHI{-cG">Vғ;؀DW!-tUU񭸆2Gq?"G@ο\!/"o™89iͦ=zГQ3pkMrpqUFjFgъSm$3‘O"%Cpb.đh8!x ܒNuY"o$[ TY:Sf*/G|6Eр&E :=؝~@JDd j|<\5x]7\uK18 Ψ)<Gzi8^&͇8و#"َ֔F8|\ڱln/`uQ.b>ؐ<޷=||E>86pc<yLaٰ{ P =q@ ا{&ؼ*`n:T{7aET܁ŧPEy"r]Yt.:ଗ+Z|pG{(M^Dޅ=/F2vlTb{@,e ByaP;+~# APD
+@ d!XjY?e=)P ƞ>QgvǡJ?
+`>e TNXI(ћ`Pl67HCNI6ܒCHrCEIίx̲\fimc?p}a2lEa$&4lLY(6COBao/}\)A55J .{]8..]n r[ۊ(%*XԱmSӦi3δv!mӴt2M3Mil/2f9ߞ>f&mJ`OfO-'_Ʌɍˍ "ܱj}6p/{Vp\qz܊5)hF+" ӚjLjIMs"fÙ!v43gNsCܠ"\4wYSe}~@DPC
+xJpsjqYeoğTsTM
+ܧ9:ި@WYL1Q[`KR,eQʃO2^*br%ZuJ͜C
+QE4!ҬB*#Io"IQeyCUQjy9FzK" hQ~^Y |n0je lcek9Y+E<.g( ތ)#ʟʨrʨϨHXt<SO?M@Su<՛˞G69J!3cm\aE`د
+?&#>UVG5U~B$Zʜ5!M^Z{&Mpݵ6W&dw*&]g] ]
++"\F5uWep2CiJi
+zE{RpqbS#uEuSnCw}jwςb_c٘B5Y3xwZ.
+וywy_sjJ`&FOy]7Gif-PO՟
+f"1j=d\?_T䴼n"[n~i~-J#0GLQ;;Z
+d!st#2ƶc8ia=R|+,a_؉pH0ç] M&)|II74eָLZqhcq=dL
+ПfIH^6]p) D"\ށX"vŌu+XEJ
+}@R;Nl_lL:X;:8 u'F7yۀ܋o
+*_6XAEl<sDw' L7;
+<'bg$<c뙈TaW'dy^k Jqq):2wNo 
+ѡIBTh0=4W -mSL
+'-kzaRYA#[]dK3f H0$h\FFhM04ᘮiBdx0%|09<G/>_#M273(Bj+7&
+"
+0=}6Oּ@uRʤJΏԸ(%Xg85ڙQNF:YFsi\oq2u1G;ϙ4<tH|yZƀ2X
+kdAFF(ޕ8Wr뚬Wo q]U(N !8cTp4hw3EM}~Z-謄%P3 2OEQ)aF R\a)b4=L qn'i{K~5F_v~ψ,nDgj 7UOl3CW(% LmxI .骨y=5p^ 7D=IT_OxLSoExYj#ܳN% Fx @!'=o4hk)z/Žs@Q
+&+kSwoے겤Rz_PwB'BJ+tO
+}g4 g怋p"h'23YR)̬gXyKyTh TĪshuL#XRyj_Y
+ܣ7X񱂞i̧i>E,%e
+j[5Vm8պʭVU_Z-mߺC[[7䷦A-Vsy\۾HJ1eRl4^kЯBnfs nԢ:D~aj^)K`eổf+]M"ˁ샓4(-wZ^;ir) 㞓nwF[Zi&sMk.:⽏B8jijpkxju-HN~spRb]05g9#э܆AV
+xE{M\0pvƎ4Gh 1.::6zIù:bQG, r/ֱ>[#>AVG%h8ٜh[mӝihml҉GccPϡ_ONIt=.9_9%tzuR glf13] &;Jw>%}iBPWf2PWIU̫8rf`Db405nt;xZj~yl ҧp>HKo[ȝkrf>7vߐ@a5쇃L  B,$B&'fѿHi5\Buz}M=żtC:~5V)@
+b4o񉖑
+R
+*ߨ9z˓x6*&|ޚXoC1Hw*>M@'_\h(Ac{)ezO<z߬M7tT~ ka
+~(zBEtI2St,RCہ5ΏǤ 9UPQ #J ChB7> }=]8c,Pxub'k&j~GIF(}Ls1.è( Qv 0 .E!qbz]BgNtW2)ZXKM於C~ʚ%X$|@5敏)pS=e勔Ǡd#$Jr#K*C@Z
+ WzPW [
+`5\@mj#5uiBuc:NVefZq1^Tr*L#NKT֬`o+&&uh<͔zS<l-0`͇VZ
+VTYZڠaj~,r%(? (-I)QVNZ/#dDHSfZse58mQmˀƇ: 4u*TPQ_ u*.(C'̾~IOLZeҺ(+#h!sd7$]CA]m4  jH!< rܩҩiU k
+X6# D(ЯvB / ?02xmY/sd?q
+e* {a
+#Z~/c`˹hfɱL52}'2|#ÜLyV-J! wdbR,)r'?WXXb''-&%PKG[̲ZZF%Y6 5'Rvv̒+4ĻxBMJ̐&l.@藢cl+eS0w/qƪxhU4j:qj>灼i06@0{]1K%5edX+aXo/m` ƣP;612@:Xvp {KO"ޣbrϯ.˥*4q~d%dԳճ|$$;G؍=g~Iރs{Ecpnk*>'͓|]%5!qw4V BB%}lN:PBp$aIvg9s~DD$<Ɂ' =Q%_BfjDd{
+4ci3TBl)Ɩ
+ 6oRQ1ѧ kPVb
+UPs Qlz4>D(9IQ&1S9DqpŚjdt/ a44ztc-Mh`yн\g̣:0+*"EPEaeXT7(
+.ǚb&Zq_c5֥1xXҨZMD? \{0t^>|߂3s1TG9y%41W1~PŌV1V$ٍ6es[2͔-WJ3-WAMJ`?fr1 6 k`T78bEqgO9+h`U9Kq&(%a,pFIJHc0'+ ?:cx#%S3=|K!1'tTN쉽/[P%5)J)Iq$[d-`.s\ŧ<+SJM2ZbSI Qg[)#Si)ZdQ5DJH5ʜ4LiK+Rm9-QtzƦoԘТKj0;1Ue
+v~ۘ7m]Č~2g V|F2-cY1YVEg56@cehKoPxve
+G
+r+^eti)̇ ߶L<G3L^魘Eilnr4:/NyEe*ܑ0GF9HGB+FoCN#w4"'V3uJEHg$Oɕإv;SQ}9"
+V0\
+50F4NHaFjxDkX -QP
+,ڬ!E,V`
+,`rȡ0 &2F75C1A
+
+)%
+. ҰP -RPiKS4ԮB .AeUzl~ej@~~75 ,v)̃r4!Rr :W^A<5dӠz<Xad3A~N;,U_g8^|[~]=^ܭԡK8"E; ms=&(UtV9^7TwezUoE>UvyWMP*սj4ʳrUS99~nբ
+.ϕ.|\`
+Q7We+_]5W\ 0P}Anw)a9Ssl)
+}tF?\I]j<ձGk] 5|krRKS?`L5`?u] <τ2G3ND;z4j4t1].<Jɣ3
+G f:GMhI ކ* ]{.CvyH8ZZg8 U|J}'|/Fk~Eo#v{n;tk`3?M—Nñ=]|m--M< W8/t?úB9sIm|y=C魇
+ЏF{ok:KkOB<u:=K[Dp\џDlAOЕp@F=+1ɤI *!q|@#q8մNjB)od
+$&!IsM4I&kf]zd=Uuӎv6դQҺN:mkUv޷dz{>I}R/xW%^սŋ7Zʥc:\G&dQqX<pz}^ݐs:Dv)^VY =HӨ5KH:ҩ .fƨ4&$^KcEi;:p\'zL}L5iTx{Y<򔞯+='$eKDY5ί g850wk8vǢ}'GuW9IXc~ξ[c_,oS)z(]Qx!˷'&sy[Ʃ ՜- p8nCqS7ρEl8yn7<R_ga4~c+Th)_43 17r|S+"-4:8bB ~&;aYLfWN#(ۓ2tיItLǶOJ|kzJA.=yJ-爼J6p 9\vXJb1RYH#-si#̦M2>tS gb"㙏5;e2|+
+O =.V%?{ewV,Y ,de#l33a*pN79nek4y g((FsP;."7)R.JŎ].%Yˏg m K(dXѢV 2X4Lq턶GIPݦ2=Ke6ҿ7Q׾H_Ny5K/Ib$SCrM6MNJ)&X:@w8]eos[<7C_kҝ6GYyҾLh_Fͱ 3k6Tmqeioi⧣"D{(Uh:D,xlO}fۯ_\DVyFWf/k\2,'XL5v IM[aS4,d +48/QxKEDd'{VwQi> f<aQS@M5xK+q4;\49pvX;HC$u;p:S<Emq^?pFLWuJ뗏_ڜF<T49P_C}}Ά6hǮƵL$M5} kwůğĿ"\FŢKyzKq䊧ѕL}SΦBjp4[7Q݁݋=FgJ*ZciO<[~/,*JR:M%Ҩ>ѩ6n5zqmIޚNuk>VֶJTzx#f(-Q[仗G~C(7_eJ"(YRZ X;TvPљN3eՔ1[(80EQ`#.x O~S
+U..HgI*1'k*j;ʃ(`KO>=&z(쭥z MIv Y =DFۤ~&~OF'dDwK렴ĔDPKINA? L!w("d U9@pA҆GI#ydGΈ$ ?KŻ$ }*wJkYEHM%ZcUVQ[cȘ06HD:)y$OyZ'$bcxMćOb_O7xG?#~<Ši1"ѡ5UIJQ٘U!}z I$m8Ms`/68e|/Hu^dD~@cL<0""2
+* 5"(Ȧ(( (8*
++˩₩1n&DQc%i[5ǦMjԨI44>99=Ǚg}T:++Hϖs<r0K5}ŀyoԣMYj%H.rDCf\ 2`]x
+"҄9a 9Hx<:W0\ht6|6҈)m4yx8l0fa[o=oUfdI;}ȚM Q'fRgxmvh?vpM᳇BC,1̬nsZsItJk9r9k_/7K4v' >''- <hiHi?:^m䤍k#m
+yd_AzNyerr^_j`}sà_2|W܀N'r1| G|`
+㱟LV<Hf؅;I+o[m${
+_v' lS#8ia
+3l4?6ᇍl>UG$oV*V[rcգ_Ks4g [{/^g A'
+hEc)hdc)E
+ZV,""[.v._iswr# kG>>wpelwUSVw JhYG%Vu.ZꚢZL-q"|Y܊TVjZ֤y-*s?RwTcx<Q9;đz㽅WMظn
+Vziew/wRZ1HCF$LUUxjg<KT5_^K5ǫAE^Tc
+_,w5}yJ'm|^-,]dtBoxۤy8Z%x'jO|T蓧"PbJ{nUNSMe
+~{''y0
+@Cm S/]TK%~4ׯ*5XNPg(?GPMcUfM%ئJ AsmױĀ6lE泊r)Ɨ92;C(?feTV8M JԔTeRz<+e@lФJ2J4]Qbȗ\Ն.ڍiTCs_/2#r{hZSfp2LQJ7 Si&+4I!8RBjQ杊 ;4. zn]Ff*`nˣ5!.Yfez*=W>J1lD%G(1,V aAي /иrF,؈lCuR#~=;iAo m
+1
+ǽl09C"J (EӸъQ)5UkTtFF[4b0dǼa1|`!vS\7ya&po
+K#.M ̣>0dQvMvD}}GEepcĠ`Ԉ\
+`ҧ)1ݮEXgޭX`>x7e8نV7m\30*ǔ.SR3(<NI(%'*!3U񙙚IePXM,TS+:k+2,=E[l"*3k65C!X!Y7%ey)jP5PqpZ'hBvb5>;[9%ʩVdLE(<wrWhpH!yBsC8hEchTB *'cW|_/WTA" QB
+-
+-,THQ5(YAE
+,zN;uE_
+Q`CEĪB9<\*1U2R
++3(,H"\dP'
+1M]&C3xQ*IV|QwW@2zhKUPy0 "_:FbUB*]4Sվ[=VcC4:Zx1ȣj)Z4ʻvjY~ <kC,d
+(bjP*%;&KQS)N2L!z/ @޶0yqyڒ!S۪46Cn:b땳m\%ܕjGqـ^5Bkvj%{]+amly=4r)gD dj v~dVjĨ6b3|9wZV#5YoXh'QXэ7I]N PJ[)^lX =m|!3] rȣzf`>}t jK4l)w)We 7v2l {Emg6k|m~sn0(z8E BװH~Rr_&,K8p.+*.]tqíAaa= Gw1]_5 ͩPFs([\!k\>ZiJɩm*si-䱎<S Q zt!aGO>jb`;6{[ Vf6SDEVFr{ 6xh$2.c}cc}ǹ}
+
+\eN>aFї2gl MVżuؠu <=w'-]U'mu}r uvxa}k}Ӹ_C<ω <74}tWE/JD3|t*Ш-6KANw}eE|y\Y"qyW(29?9<{=;BDzQDJ^Gt<ΐ))y|<NBi~NCُ<8$ S%^
+^8=t2a$J*"yI_k[Xk z *CoBݺ](Dux8}hșyk!~2f]ʶ$vmĞ=j".f kVj;ًd*[j37ѥ^}':<ZGH|?ÉG|#-t9إĮV棏9ݬYĞK]B'bBY zZ7DfV-7м8=vj=EE⛈ja_BJRz"~1[R:ҩr|.t}lc+78vce+ڼQ蹡MEǠF JB!_I4&QKј<vTC "RiOǛf8͑vu>X5<\i0w|G'X4HG# |4J=ͫ O[;i$Nb''sqbױsqiRM6Z:umU]K+T(L\Mh B6&B Ć m0ډ3??~:w}~{cc/V0]b -|Q_75O op}$1s4WG
+ :kѡ\i5ϫ~j%?L FX0i*\ъvif/hGɋ*ɒ5Q&>d
+eEi׸?-Ye,-5jԪJ-ЬyC =ij׌!ƔiM5a<NjĮ1]ר鞒ה0F,Yڬ^FzЧ}c~,lZsLf1;5mnДEami21˘F-Jn\U c>nzRqU Zju~?>./8l>Xz{f,3qږ)Q)&iU֦-,xwnm~LъksxUa
+WާyEit-<3M2s36{f 5dw*nנݧG=9bVr\Ym(TO5wU:koÇgZI"r=I8ce^FːH_mUPY^g8[R&Au׎*X;EuTo͉[=?kh=Rioޡyd,}<E]E\]VU.W:p^ߧ@}BI5RgZOxQ͍o;|BVW94c@
+Fjg{xr)QcRǦvCO<jmlS7oT!57<'o}']P["ww\
+ZUVnTTeOLCS-isCO,| $[[&[=>Vy54ИVA:R#Շ}…rn1*bQe\HnUCe٢CFS]C;'Ḵ{Mb?9WY73hzϣ3N Aۄ%n໣RU_*KT>`RـUA6 j`#e )>s2/]_SIǴ0
+Em$Pf>ϳ?ݿ}" JH%:bv̠RѰ$H@phĈ`ּ>5&ym xyX{g(b5 s/w)
+On1.̓ي
+U2E|$E/"|,||\q7˺LOgTT2CeO8[S6[.R^/i8:4D# <4(GJ31yJ}P\M曓Tp$:`v [6 jV^?!=8-:qHCh(fSwԫMԡAS4>. Y2a ݩЃj
+=!vA@{ql5[=0fO53\6;ܠICtgUaɚR{Xi Tkh79|uq 5D,P}JEn<jI\hn8z`fB7]<K^:Cn0j!Fx58lP!G1X:cjmUeTiڨ
+I߇4k#[c#;zy\s,k4GFI 8ՙ5j9KfUQUլE3G%1Tl,T{
+Fʳ'+מle'I.;FY)LTc|Pr:#x>3zhL9eHc_#yVR!: qq)ˑLS,yJO-QZZRL#}R\ z@IGeǕ6|W<h5 ћ<XuPu9~
+*KQ2.T ^pQC@KПDڑP P>ȅL|}^d+
+W\QhŔX]tȑ_$4(c,J*t=TO\K%7MEF4 gR]AQg]wEЪ(*
+-,
+BmăD3iFUi;1&ͤNkNc̴L56i֣c,d?Y罾}FL+`WJQdv|dȕQ Jv\*C ~;+ιOcqX^8V±`>( *id_+;IFYIJdT'[y*u)ڋ'/ыp| <<_h&q;(@1τ;~$J ~dʼnJ**@0
+PH9ĜE̓}O?/Q_µEgKO F+k+:w%KF.(\/Qu`;ϰ-DMT\~vPBsy&1O _?f4`9VAZM.?Ppxs{Ez3r [d!m\@̳p}jΫ)$C7XlaX?X6N`LM6s6U|RMySpw+TQ"͡|ի^3uK a·A? XWY<e0":1%7 p;q|'qL~xԹ|Ӊ9c5=mp>
+q/O=r, w}qK
+~O
+y.!MwAQj@|ν:+OQ8|H❧I~E?"sphBp;C->Un3o>$}|QX5=:7j ~{=Hj=k?
+Ux3z]W]Rt+pk>\P\fFi3[GP'^uz|:z:~CE0-{/J'i : A ƸE+Zd$,%ض㷋\DKè!A6]Tyxscu9/pޏ#N[f|a
+Gb]m;V]a;l/nvS<7v#dr EA+|2;17bۊtf.v#ʎ^
+rzSL9q,Ǭ`#vpFHo~:b&'2B".
+8p@wtұkuԣj .3HxU3
+De=G(\jycm+U5qr ?'L84^zJKXk'/SIF-6X3k,!K.l-HWMbHQuOzU&.UUfRqJL/tBEp |'6\p-^~w[62UcJӔjTM3Te|S**7WUV㖫hjͳUk}Eso*!=pm`cmzk
+MI*NS5[ֹ*ZS;IyW)7urR٩O+fL9p{HC
+U |w*_ԖTRST:A575Kslʳ*VDEʞT5#}2.5-cD55,! ¿4`$|e}oJx  b I5AI*;œVYKfnVbUQyUۺuն]ﶹ]n9 d'y^z|*|̍W%Yety-Y*R OGrjU(Ek
+&-V_vl4~PVg~<mYmj8! :h0 LܫJ)JA (ͤB[6pUJkRAsR~Y;|Vf)e;ו%?
+zX]p U[(p9&HQ#]vGlNN(V^OSkr\m2{^,&ezvyF=V2hoh*ցSJ|wIcTnI"re.r+\Yŵ, TҪ)ݻQio'}ܔ RSp @)>”߬8Ki̥*PfYI(/TzT) jhQjE'Uo@ɾA%;Ċs2T\*>W?a;Rԃ|ǤJ pϊ|THپx&')ʨLiԪP*JnRbuDŚXFwlU|^U կ+|DUݬmo W
+<wLFjVJe۔wiL@أ+,X#,~o?c-bf6WBQ9(.ÝW -RZ N)S 24`⢇X$H)ZBhB6 )B
+<|.HF3ńٴF4P(NiO;JN3X3.kᡖ&lAĵ)0(41
+a:tPuVr4%-|4.F
+4G5t̻jL?~ʹy -J<Cs?DP@LÜ: t k#DwQ};1?R1<eد%Sue2~ƏS(X'P84F~6fs0>CxЙOEh47jvP}hũ߄3,ji0)('
+L5{ #u̼M`pEWhT՟W<~`;۹v0Ŵi%mx} %rǘ as9jj=7{L`e R5:%.Z;}Q`O#6Zm/u؞{݌VlEݥ Te е/iVқbX1\G.t욱k.l{]Z쇰V+#]Lb
+Y<H0g?>:1~6ktv 5bׄE g?RX a2)snM?ӳٮ:e05&9(Fd}{\,XH.&=Fڍc~t
+ۧ:\G8N
+6
+CC7]'caVDY]-vJ~%uJأjw)UԱ@ 1E(llVG!~*h<G
+W^k[KBzN<Y޵K3JV% K1çF##Ѥ3zgC
+(ZpV>Uy9-粼u7 ;\MZL3v@gi%r1O5m
+ ջ+rW]'OWT]HU+ީJ.Uq}\Kryr{oj'荓@.pm4$x#FE[תסץjWU DJ[զ~UT㟐ۿA |EFpJ偋rPOtk#Z!kR]'D~vy*婩&.W0#gGڅ2j<4)Gh/òRYcm݆]h44O#"YePP\u9rWɨUy}4t'[d"kdlUidJ%#DN *\d ԿEسA,$!=P <wGr6.G){RhʢaY T%Hű*oRa^d?**vt# ihY#ԣY ~}<`1%%m& $=$USQ2&sET
+R^Ҽ{7;IƔ|fR(
+l3A4lQiM
+ h6xVLk+yt+^oJf%b2
+3oce}~z.hE75L\=5-Ch,I5$so%{sIFMı817v0&;XTVfH3׆A
+kyR{꣯s"!Rt{^sk^nh
+Ƃz8K!Lt?I!q8feep#TxplCN.a0UXR|e>oH])a0K$SgX'0ٟq%=y2ղ1@ۏk#VR+{ @^y3xޔT'Y{.o?$ %KE&<{ŋsgW ml}y`}ò{ސ͚:Lm`VKs%O,~ccl:W {ś4썓dŧpO/yC/s /d"oGG,~~ͤyIKLWW^/}_%Կ,jg'ހ Ufyw?6sZ)
+:2qӺ{Esxq~&̳gcۼ8m~v|;׉8iM鑶뵵)F=Cݠ$@cL ILHCC􏩈C$PP}~{<$%<t~n+k|> ݜ73 0(_fѯ=MgP^ <?QR$gHGHXx< r/0{ >O߰y ކ!$=~7V!Rd cse e:#h$>+xyK+Dgt*sB?Lm* у_u]S25t,v#Wȑq?>2S{R#aCdC/6k*< 3ϋJ\;-[Cw6Н@wY4:0 Gt7)T 2d V9-hm[=c0g!X=GG xl'[p<Sx<:Gϟ#~)|{6o 'hVtaE.UF &1KT0{l9O.:H:7Ŏv9V ]7&Dn,n_Gqɐ9ߏG5,N 2ix11v1vq|Xc3g9򎳥-s]yl.G;QgYlQ
+6`oRc% A=R] _L:M~O9_@Y_X_\i#WQVWZ1c)l^Q|NA#__ Kq{sQrrP後/EuK!ARGdTŒ(n&3;5Kkj (l*ZT0tDfhEfgᦌk2Boz?u
+7K3A)<}Pᾄ/ Z+r**5R8W(Q0ܥ`k֭
+D=$#zZcƮ%Uyߓ;&ܒ'rW{;i`Rʵ |.Zz2cAbQc2eu&o;K~yNʕ g9_;\ğdO1פ5j@*P<dy—6-ĭ
+%2.>|ayjiȓ*ʝʕ3ݔ=$[愬epf(Hicc{SP2(:x$!(*n?/UK/w6$gGL*)r F%O9s* r
+AhߌM-]N9K-uma*$MG+],ljj@iCePPo)CН$PnNS!6J@e4U6]?MS'hu>[w4qu:@zJʱ{-hAz<2Lrr®Y~ΚE~A!ah66@A<0ǀfq&m&А ឦ ]` ta/)q ĮQ<Hr2ā?B;ꐶq3dhM5I<4ɉI w&VB{ƛ!]a6)h8w76b, xesnYݙw]w4Ս*a75I{Su5@Q4L)te?~,abra0sqq8S$'}jNk)eA>aE{HYaNaV6 3]Qg6{9d7l[ Pb F
+*e(P*SS
+J/Pʥj-2 ʴ:ڱj 3Hm-ɞt;oel?V~YpYKbr5 c̉ջc,NY{&Μ&38]p~ᣴX,k:gHL6}?ѯ' v ?mI[-~x;gr!q68wsΕΒmQQ]·˨#rs[ 7c?}&{vdVĻH"8sIKi&xA;.Gd##h^e~WN0?HH3(qe3~VpNEj'[ٜ;nG<$H9X< WU~H<^W^ef\. euqDINۿ^p᳹ϏU6K<`,D$+5>>ɿJKb&>f- |
+Ol.>IQAaM2z 2zQ{u΢k~8 p ޿z]uq-l$.%~u9Gem~<GHOQ0'Hqoqtx=;xyWVw3v/!^D-<8~89:ΰzA4
+)w&>~|?D~bz":'~BiUh
+^VXe]SNڟ&hq48Zj%v؝lj~>^n.NC)u}v!~D_v<mv\pǝ;vd`IЈ"v;;eZu&v;#bl/"Vc(p< 4z"%kЙcp_/;muiG:ў؊
+]9x
+Lf]e\suu2U`Үt<x}FuaVB/|)n5|j
+jE5&(̓N}J|T 7+T,Y˲<e{X|xgqɠxW
+* +*TH**((lW,8EVp<%Lc"ƣ¡3UZE 5xn}d#QΣ_H@pH1#,ˈL##3ܤ(B1T82,Q7P&뾭@ݓj#U#7/74IhE̻e@ҬQ*ˊdpE@ht)d4oW\Zn Yߒ:(uRnpE5 -|9H.
+<7%aLf@ufPa3$Ê(d
+Z b X>y$;B5ur%X| EΊ}ṗs&o/E̻,HK}ܥx#+iժDb񠂉jO˓˝lSMG;lqf܆i I|HbxSGdQh- ϻ|Iy"QX+3SD~
+& y24Xr5 9gϢ)K{caq+X³Yφ$/"\Cedj(fsI>'ݲ=&=
+r73D V:HJW xmǶAlcoC%K"K+>|pN+=`hiy׀)ޅ~F5}faX5 ZZ"
+nUƱ3h:Z+neJ;=HYB6BIH@P !Ѻ/NT;նK2x:ɇ0p=!?}f^LRpφ`@Vr@G Aw"0<A!
+Y;y80_w97=Ecg@Ҁ= бQR$Ή {P1j` <z
+Fس٨ )S"̌tNTf`#H800;Iw>B΃Vݕ Yk`Õ(,7U
+U+'F|`
+ ^EMB@n/+iQ'B/ paT/D;C!XB"0cr>Q88/l0݊M?xy~n07|cǎ0q)SMs^(d^^2l/WYn_zWl۾ܵ{"ވ־o|#G?>3L6ğ=w>1)BY"D-U5ڂ¢CiTSźƦffpvv]|nܼu}ŗ_o~OD%}y1<\'_ gK<b}ˉ_+
+z޻}_>xo=z;xɓOkMuDT__ba~CٖsJ:CR Z G#e&\WfHKi h0a@À 4 w|kfdKeUh_ݯAųs94HASe *g)AxӀ n_ToO*HSoTb.W]ޠZA Р%4(ײ3n膆>nE$YL!`*_mԝ/QsР 4y"ySIfuaƹgc,i0,5pCu~S9Ѡriȇ۝+]xWY"Z:ӸdM3^Dv 97V0N6CC4N۝#>1tdBG*@C'ie$5hͥotРUrS!\ʖrz$N:Ҡ#{脆ƒn#Hi КʷkJ
+A˱)sNy6K"cwgI=q:E+6 Zg
+Uo-/4CTРa;rV(ՕБu9'_4qbf՚ *ʶ̅ڸ|5ǢT۳,8Ȅ#Eƾt^鎗{<6XjwУ-VZzQQYkF}QLVנ<VDɲ ̎#Er&ٝg9]|ak۝%m[ - jtgpZנ԰e*5+ٖd2
+VGp\9iϷ9[2CeXְRUt6 Ne54̖t5Ӓb&I.ps6v.iXmq-NzXS^JYVwQcghY͉VKm x*2G6A?^TRaX*+5j$!Anh9|N'hG]ǰ.چr'=Uti.4'$l'Nb;niP
+˱lpWDL|rV\`ƉмVmӰi4l6 m{Pdžg0|ǐ0aV]ց灡F!ʺ[Kn۹l{`?)`oh@lǧ"sf\޼-RtɌ)Nm-në=
+5e'#1=0htHh#EAg"F Vh•Ibm0;;6 7`2>A :SvIQĢU]1W B% OXoL[n` `Q/c×hޫF'Jcs_+!DtU3(˗vjYy`xN
+ǪhC˵};޼kaOF#}TYإA {\,|41eW؈XÎRϾ*m;BRq }Z鳌ٝ9bIlVȵB%0 2qȌO[uaDӵ7&(-k~iRNPF
+vhT@Ac<
+ʓ6;B?["ۊTa[ddcW(i  i}EUq%ݝ pPsvdcA>Gz(6lj;^i<)7m}Uɰw>&t%4aS&Hsĉe!e;l[԰0ݸ/Wi<kQ %ߤCX <pC#IF̍2c`7bTL8uxp{lh=W- rɓw͉;0@"l?:ǢH./#3>oƮOW}/>{cI_ᜲks,p!m,g9@Ov.Rgu6A$Ⱥ[5X=ښWǖͯslwrl$&";$
+e;5+jK״4Œ^S5x{z~q_=a8 ie/ŴxXj(Q@ӨʨVf =[rSPԤtuEhx{~ {/ͩ0/!=k[8P&ڪY V $7yMRULMogn`##4n%ubD@tPf*haTIȚ^ʸ,oe>OUq x -"8g3h.PԗMЬ] U,*WPW2M~K(d+\+x{ڍ^o_=NioYz!pg'ئb
+Z(e^ik{dEDUۆa}B{_k_ӜB3sޔJ(6y<d#d؞I .h5`UJUPW
+
+]_ft--} l?mhtƛ]k1m(@SV#8SZʂDC" Bj]*QTv?r?mcoG#'=c3# F-DQL u@YBPQ4
+-^uֽ/[|<7Ƒsp%'Zf#,՚Dɳ\S82C:vDos/{롽Kmx8dGR!kLBE )3T}@Zd`&7+ܞ}}}}TUK8=1% vBFcrQpXL"l*"D&[K76ٲm~~y5Lu?=Z 8 0 kcwybd+@"LCӝ]g^)5Ah]@Q284N`Ye)68GQs$#⯜mh\ltrB3lHaO$+aFT&.JRL, N(;1 Q1v iҷ4ްin|b-dY~FN좃a/ai.(I
+JM(-9"IJOE|3٦J/i=#)}ȧl1S#8N
+&dp$&#|$b32A:39>
+%<$iCPMAcqd<k[cݍG ۤYѧۗ 9J6"Y?1ᣱ&=3.tET]J0L )<up} '/% hT'bj&HCg0gdsX]sFaFG2MP`3nc8޿ ?)J._JȱNp/\ڔIAi9_Sb$kdlSݳax3`<_V夗]i5_Jov+À 5R!ڃBҦnu\#.@33lp1%YKִ_[l6$4 _1}Eo}O(E"9_72NƘɞx%+,CT堶 #y{hX`{a4'ĝ7PeK("*$}x-B
+NhJ&.F%9*J`mA G*Z]i;8EU͡kt@ {dKم) 9k~aə(k B~gxl؂kN(?d'ii/i
+ŴxX jxW:epC1u3Dr~ϜK6-(',eS$̻챡lo~lPu՝xXOu`.8YNJdb=5P:)'4c]|kˆE+؋1SK<l}FdХ 5<S 3rrETvp%9T:VL1O;ZI5xǛ;ƭ=iNse<T0nkĴ tPJ%4%V@3\
+Kƾ”w0)Fz.* -ה k0&Ģ]ig|78O섌ШF K@Nq4]iD%DqX-Tc굘wCw Iq#xqA+@[ q5@&}T'jUjM05o} z wҤ[{4p vKXL@ QLBcjM8Y+#UJVak0wVC*yCMhmgpjL줌
+,:5#,QPv?v =J‚KЊ5X5Uܟzx?7cM RځJ[~`A &dH&Y#$c0$U"W;[e7uC+fspO뭍(rW;*q
+юd,A#$9Z6mtoJZmio=aqS5ݾ|OӂSacO0.v8hx'#TQ*LIHLʆt ޜYޖ~0˪a
+аm=ć“!A)# xB1B 3QFg2R!@ R`, }owYr6[iì+auc71'R 9#lD}qNܱqZӝNUzuuk@zWEAAP I\Bx $F$@BȅpAEVԺ9;m-ʶ?*9M8bɢv:jh"(VV@ߠTei4EJtLpavwk}n䅜4~1+=n*(NU
+<L;sYINiBx6
+_sZfFGܰZ)HB':!TUr_JDot$ H\$\VQ"Fa]|VaG ^j2#(Q6"*r*&!i"$]0 k A]0ݺ4!>DZр/rz[IV-9~`qL45z]ECmdULDD](ՀOICVt^DA$"C V[+{$SL:Q 1hG 5M|CF^kʇZx3UAPi/  n҄di=ۊ~i+zd%C6@>k\OX["d>Еq]iB6gx;iذ%
+gd9 $*MM//uxUakfR2ȕ\o`*X( 0,OƤAq.<1*; O[T{j8lQƒ .3&Ba:A8/ W=hS g
+Zr-s.j)kjTAAdGO۸7`pHGܤM$Հ!o
+ju~X G(ZFixX ZEui2`y/7eZ{~dUbk"UWYse]-5 ?H 0 M((#DDYa< c0EPۯez`]Q`%y$4)l Vnb:36z&O3#dd
+dw6Mf_=8=M4<d3 Ypn j\ [ebۯ8
+'?nulֻh?‹Do.̴.V{df]%{j â'^@-Uquj' /
+mBS )`Bmh!1RcӒeYu߷dIֹz%!v]iu pd0!L̐$̯ۚ>? ӷmHozޯ'|%:WS 8#^87Ѐ`SӏT]=r{L&u~C*gN{i%8 dp?3 x \aheeh jOy`~RMOU!KrUh>Du38lj,J0pzT~ޡ{&`jmյk˦t˸("R(HɼX&QoAqq˓2,ah6EeX=7eNަ ;63e0uOɧ4]jnH"QRĀvߌ帶la,/1 G#Œaܔ>ehi3~1k<ʞ1tȧiPQ'5D^LRMl)l8q(˛G| 0#xeX
+%h>鵐ifqfb5\Éߊys&``1k{ڦ4vTᢁ/AɩYL"2B5=+ v:̂*;\q`r!=\= ycʚqOZO:ᢉ/),duPbM97Fz\Wjz{Be7&H΋ ( un̬uyP>8Z?]'[E(fjY1)QUoh"^jN^l^$oGs4o-Ҁ28>u9Ƚyhlu^sKO3;(jzIyD. As\5KT1E
+]QI%d@ [[ߎA;.}߆w[|pRB\G;A-٤}SKUT*K0)!D=
+Ӽgwo2oM{ ireӇŢ#3PS
+ }fj;8wym>3tE`uÅzA
+1*S]SwB?6o?>Oo~~ZJ^]rrj[Eۛb.A\Ԓwͽ xYbN8ww`{-CplInF'LǬ/F>-/,zTB^O>{.V~1vtnYHI׽{Bc{C: >gώP:}$%_z^US~nˢeϪq%kҔIe?R˒6^L|,Oxri' ޥ^y/ >9
+R7
+EUne2^dQDLr9I[M#D%@P؆~?VN8 o @A$o @ (pM@/6,qkًxդfu㍼*d %vk\Cn\ӂ9Xgh ?)lń(9
+R7DkPPqKf9T$Y?. c(w 5A3xی{6gsv` ;llHklԪa *,ђY.I38aOr
+6q[ͷOG$$_py"!hgT6! !E f_+Rl.[buũ@36.}"~'>]W6SL
+ 1f񌒢Su<*qOhfuqi6gAm8%h?w=
+?N٭<T3TTNؔfWZi[y噡rx ((xJ !x$)ef55M>s׏oPʝ~w8 JW14Gu'C0VЮ#ԫ%JFWV]
+& 7Ym((C U5XB~dgr[7h~ }hč87w*A?:Lڞ64^or]҆Xѝ&jL/RiYvCA)Tu6Ae}
+{48=?pkbPVg(3]BGiK{hnzicgXeTCP T!١} փNt[>59w#;vމ)/)+F $ev+Ӥ(󻒔.RPtSj]Τ
+eGrJc(D 5f&P}j-~&swl&n.Yh)YQtвE~Nkbr[iWra;=VCjRic.TڄjP E &P)46_.K{OkVW<>D:Ewa>r:lHd(qm6r[uKT[|ks+AutpP.0Vhaf' ,լR:!]: sep1"@L)FK%tەYݑ@ 29!kZb.zۖ7.nޭY["B>ߝ1cEGC z)?"WWc{5: DUՄ/
+jDA?iW7lZ7ʷ;[%NJd&Dr'IY\hR60r-ʺ6WC`}UI$P,1oDAÖ/V:eņ-`,oY/ݱ)|! 1iTܽشDιt^73h0!-/]6(֣5~c#턉ӗR05nl:CLy! a1Q_sOq!)%5#03g!0̃T2^6:ע4C_XW L: ip=<U_Aޝ[TX+jJrK&x?<pjxrY
+F֠uF51xn]!L03cy8Z,vcApB^GubϜ>'>sCa@Ci4kP z#T=
+|GF1<SJ^R0!Y@*'Ve.a
+f»3aC6b@ F Lrp`EeR+)1h"0Alq<T;K?CLESTZ8q]41( n oo>dl2.b" >c @gaЫ\BXK&=ה%?}*_Ŗ͐iŢIbhX<" JFA0(&~> C e Cfpc/شLVbJ-?k.A7_"NDˊǣ%cƒ1;;AͲ^bYgT2Cb!,OK= yЫ7DvZC&3O&L%Hq1|4JYqZy->i':OJ|C> 1d#LĐ3ѫorٔTÛcM'M$cؚr]0IU=uf# ȮZT!΢<0ZOsjӞqkuQj-"eA` @XB$d%!@VI %$lj@AA VG;ߙuzݼ</W-D 4P Ƒ- aXkSҞdh[djZ "Ox ɤ+3 -:]VlW1UV[TPQ-h%B
+o𘷢ϛNb
+ eRYD^Z?D^).uZB5yh5K/X 6CcuwC-j`]A@=HwKYL#IbdSjOl?9-;r6M֜o ,Bf!::o X {7$pȃpZQOZIwd4Oc
+,մs{.`p4b+6#1K=ĮԠZD =ˠiE~P? OyN9WzJLJ{+m:%:'lJVf\[j32JmF) `j/zhٽ :p(XҔxD;lN/UgRX'72vusUUU&[bXMU6cUb@{ųw@44r +,vRLS}b>٦$DbRfw9WiQ^cUT-U3f5URmJ*0P 5ṗƝK@ޱ C?
+ ;61|3$-!xUF1x&(bJfX,tf(FނOg
+sjlV^h3ksZo 5p wl\ٰ٥\빽{Ǖ;nEGu?&S>|Sv/%V})$;͚F.MeםuEmvC'hQCݢYаsh],^trx77n97Lw@,Ddu,B %k{=eե:uS.uܥʐt*ڿB۷/7&V,tOmx} o*<^DAxbyލ0>P,8OkĸDT6.HO:{9F#OV{xAW~%=3ϭ/?ulmWۂ%/=J=:U|?HdeP2<ELpY?h1} ־Fo/>дpy7g3w{j<Umv?6TXq*6;ϸAJS+$<u #j6r`D 3,opHOm\ekİ~' gg=`O?H'O޽P{\3A+E%,a\^~l\f/Zvllk sip9*XU,_Æ۩#߇EcDǧM'%HNIx+\̣$l/ptl%17~K^} 1dN<<yk g:ӧwG3/?_͂UVVY
+Q:j8@ϙΔZtV[p
+
+J,ʒ,$@DL$ QU"{A(" "Z3ynt;b7i\B+11쥂txNE%!fZs=ycȑvi@~Zj^֬̆M$k ەA>d8⇃ȀX <&(Gdl1?Ƞʨ13?3vjjqBn8J:j`G'`21| ;7`&oPh1G a}C )ȁedD#O/6 P{]䈪F (䠀Kc.#K<xz0C |s
+ B 9t ;{p?*NN& n
+nlw p?8_QC<
+Lq;FVk)+>eRƜ%Y8ωgz4Q0kMa?M47q1콌!} Xu;1pC:b`!7Ey!%x„LiRK33oT-"֋2$+Ill2_
+N*1hb d| Q&O%xΗL(Ɠ+jU) QS4w75}M{Ҁ6D6%h'h ĈADA pm|("F-lTže 'Z88kaVmFwII7
+i~~~}FY;A2 Πq@PB ^WfΔT! sF.JsѯzJrИk8W\+e^_4 1b ,oB! APw}A"NUqSJxBrR9aC۴s%Ime]+nnYfSV)) !cHɽ_oCP% I/ ֔J zP*5aniԚ>Z*|a98fkz.7q{ʹ=O@dA (F0aDY0H R'uJP
+ ;-ִWSXmzNf+2~D]nt1k%~fo2 0~Py]܊?K
+ՉLMeQkj\rU[kתKmVHaыLzqWb1CO@s0
+&߷uasQOԑLe-ZyUqR+
+Ygԕ[j2ZkkU6NQt.bA&b#VgL{BPz7CF7}V3GvHwVeU+mŲ.5[4my6kR-4UN<Weqhwwϝ}򯈀+N
+R9(1BN7׆K/vouQ{87#Ng&eTd֦T7&t6%e6$gեdפf RyC4%ІT!KOJѿ5h:.qƳ#^؉a`o t=\Eˢ IW㊅ 1ŷc &WJU HGІ7XjMv@o\ԙsy(`;0Q\~S\~r]Ji(*J( V!諍.9U0 4\Q,x\6\MPi PSϯF,~î)Ӂ o[#d^ΙKii7Oĵ%Gd ˪m"Vàp*lHU2\](+;_"n.P- ТKWX_izhV_FZ+ǨbV o ,)7&D.~ Ҳ唎{kbF,WZv,Ոɀ6d W6@ݾMЮ)a`cmYms͸;<'z<'InjL Esĥ~$BђfX G8V̩+2HA:hk{dv̍+I?U\4P|eۺ`o.z+'?C'~|*l*c215`#Mef&>#rH|jx>A2 91PRo<݂x.NW@Ʋ5΅ʃvz!0$lŜ KHH"N_Ԥy=Hzg04Ay,Ey٬,G} "}bg}OXeeK'!vD _0Yǩo"ȋąs^kJ86׍z99`t2~@2ȓCByvK߿靐E?)ԯ&X׺5\L^sv:F"ed? ƿK \⇻)t{]ue5yn4nq2ueI 1@&d tGeɍRR؞Z`nvb, S!O"
+Hu rK}*e:.װ~vxcOѥ$Z"oieLMoʲ@[ F{^ ؙΜ.zD{@,D۵rZ ?8rD݁A bfL6lL0V;f`Kdp3%
+,=j] bOrT!H4dT2-pSbj
+LDFr$j@#H$C!ױAU&46Aw'(vGUNkp+o5SB!JbD}ӃP*CD}qIE3 aQ*qGt7Z#`&gV[VpV0wEJz@٦ }}/DІ.ݐr%`U 0j(6
+pUa/S 1f-u%o/&|E@j R|iA
+~9_y" -c>CzϐBT0Bh2@EjpB e(;`uzP/R e@SWI-A+vw>o/e<{g@|˚]b={ǖ lMi2
+݀xr 9{"=qH{\v[laSBzYF
+Hz1|`D>e1̦X 5Q5P7y
+G,`Ow& iנ8 `ڹ} 3 ѻkJ&DD0 GMIT: wc;rjޑnct3:S ])lG en G `2w, oo~g1Ag[$KiPyRT'5kkCWlǷiY<V*ݙ,m
+ ^S uẀ- wR۽CWa#A&RXoH0HeNNZ-D[CWӌxPnrln6ۮ$ti.B S@޽ w',_V)޷aB<V33N"&iB<0]nMfS.kA,|w6-"hW; P{+$w
+h Vo 7m؉=O;~1#+ 4R)i$D},1pTPj:«dZLf"gԋ Q^'r财g}6pPq2 r=Y`<MVggv8< ܁?
+ȸZ+Q'5
+EaNsDfELƪ4eiwjisZڂvJХK4z[pQC 8me.[Zuxˍ2ߏ2Y|A!,֪5H(,_[VEh6)-FnPZ3mZgo+ȿ S{ڻ3gV4wnKW޹p}J زc4ZqmːTJoD|D]ni[Ū;IzIbLJɊ6@PCɐūSk<+nװuaNJƋ[qR(X<c(YuDY2 \3x:ej w-f@ӂv(ݑ֦ug5Y2l+T/.zએ{O;ۗ_߷.lwi .",d>jl|(9Uѱrfr% 503o':M,s&[W8nR)UK]^6a֖ 6X~%dgEl|AWIg)E
+ b K1F|q B̳(V=1mxCY0;̂c&εk\,č `rlLjxcWʴ|Yu6NQaK:|a6.ݮX:ҝbMf*7CIC<\:W{}w/<ص
+á.r=3'CM*${yC
+8HA6 MPnK|
+g#/ HB5]…eE*Lo@C^Ti<N?"1,Va;V>&f|U7h
+cP2A J$7?OCj!L0lSAG~DuAYgV\7?QtR6?I:?K 94d0 \`Qr$TOCl6Vh%<XȪV´a=}NUm3|ۣm׾mY~2h;ٗwX&94,5+bu֦MZI(VQ0qQj塰D>o eLpq__ӫڣI7?k
+ezvA;{ೀMyKPa,`Bхߠ>  b'iݑ/f F}KF-%:v22vfAi:Oǡs=_H`0Z:*J?,m: 20% qqChmݨ6foT?'j݆49u NU<*А^ _b`406YAP24]f2e\w|D x~j&TxXp%=6s@4j rѐǓ
+) [`bc1` i,p<f;/_
+|A;sT!5஘I 7X- eI$->CX?\Ij(cO3 4#76N0 Zd{߽\ml׷m#šC.9 !ƶ˜LV]Q[j6,KeDŽ =<Àd0 x9h@ZjKf{p?pjw˓S?+<ڕߡcSX8Z-PKj~!Bl0{R2Y:=,VGr=/mDP\s`z[k sBfjv,t^<{ j]7wZu@E מVET$xb%Rν)S $"B˸D5ŕhڷxHGz,߾ோ;^5YovYcS%]7+Îj~jrXUPPl,S.)Du2qrgH\&餢aH8, DO7"@@*,XSiy}-z.h umǟѨ1yHJ%e+f% b~jږʑ!K餈tXHFy1_d 9i9%FWa`FN֏oU6>\w1ҧ"6TU"Oe!<32%Q*f<%Ii#b|TȖ 8)GjD́dtm-,_tmkŃ]_t_w]|`eDAmLpfV"tnKR%q)yI㲇%dՈznLHK
+B@
+6X
+T#$Jđ%"\hrLǟ7J#rn<[%
+tYk24cGfMcݬ?Q }#ف!'Gz6⼆pq^o 7}:Y0y!`XNKg j,eUL9or^!p]/?4$BQ.X=㴞0&+Am;2]>0GzbL;Z hk
+.,* l!!!{ I 7kKGwKU#-X+:uA=zL[8
+B|潚|w]=hil*5{.]0wp3GN RqU"֘[>
+@qH*tA<ֆE<"\q+: }ѡ@9FQ_^$W)jmHQ`Reg |2 2$S cA3-qΈ&"Q5 uven .EW\AG%wA}(hi0u^BӸf#B#lX fF@>> a@TNq Gq2͓$ߡ(2)*%`8z dE!; qL.}6D
+Ru t:3ALd> 1y
+J ' JCʀÄF KTaP-!DXK/ldAV'ɺ.g Ivg|[xbd=xM4d'ѡ`1IgB'^
+tNf@x&v.Ywg!>Y
+A1(Iy -|v{8TgP^RWhʟk4Owyw:?.<C>)4½a#*}P23L}*QhAd$?ҵj}jzoW ˦QӅQ9g0"7x&XśU@|e渱jGʰs)wtuV+neEc88ᑾx_~aKyrpf.l=tГ|{]Ċ:&N'ؐ=ա#1+mWU]GF&K_
+n[nZd(0[mmECSC-_zl/yAo"ؔ-Y#zY[|%+p2\+9TcqK?gK:-;,J/Y_8Z4h 8NJ),9yL~#d+ȷ.ͱLlK2ȟ9( vmpo]_JSMk{As_%Q{k7%γfGpYeM>'( dȾWOz4̣a[4;Yp؛=n[m .ѕ++ۗn)ztAGd9׉+eU|Yy+׾ʾݮ~.'0FfQC5&2%?1Ad袻[~mC?h9|{ɉǪ]]mK:j\]Etm_Wly8yƟ8H%CESf_˖889v!5dl!ҴeFiK4L^XYA@3AZ6]MDj+.;fw9&G7%ƞgTF.8M<m^?7Ogg99v:>$,
+%tIIlb樒I^֥N{:+vxof:4 kRe i"anH^lYXVt/#\Ԉ 5=/%z*"9z&,9j649j>$)j%=֓0{"_B4{YS.uEp@
+k%Y5_qOfKf|Pw .F
+&BWLxYN\;.v%
+#<{+UͤHߴzrLNM~jK
+ODdg%222YI„)x䇑 ~d7*a:<:~7ǎ.DDaDrxY~nSћjᮽ&ʷmZ_s2P"wZ~ܙ *d 8ᇧOq#Rgy)~[&<pH, ' +2Ui! {Tanޮ#;ڭ5]T8<.)Je
+sC9ᬼ&3#/8g:"$s&,4c66K]`)KW[
+(ݾ=oZmbܦӖ u151$<,+)W[.ܿx&, ̙ce͇/b3]^6H<}_v.WgA7;=4iq^b7&g2J؞uC=ٞ5sSe!~ LQ !^0ZE&<AtA6J#ʯM7޳ɼ?)[ K ~Zmm=Lko]'./1=^ˁJT*-xVGmTEbTm&W=Փ*6VL~^t{!V~g_[oSoCo}۞~M'.!0 2v MiPR
+*GUIEWSc~Gm3tpPPPPqW'æOO?Z?
+*2~Z'Dw 
+ V渶(.@ B
+Qb؁ʹ'8 3VCX|#⌀.`]OW+N~n5|w<> `A O_B'=q
+QvGlYMtBt"s+]*W5Fh+ !:i__#;?=G+b `>7ҁO=3@$fAb"h%[WWGmtp:f}6
+S g8@> JdHJ[Q+<: D3q,]bk,d;2{!8?Ds3듀UHXAPAK
+},N&-*unH2 _x+lƴEwÆ؃Q7Q9/9}pŀw3Wq>&!?{ԯZ{d>@V#֊ArArUU=,7J$6^Z^%s^[%*7!q+C;Q 8/DN&A-d_Ɠ|Ň-֑{@w. …lٲt[R["WQT;KRgIO{[7c! qe#C1$WLhb-
+#G4g _4egy?YH_κs[+▲%kҞ+o.J{IEeW@ܩj$>đ|)֑6UTN-g7G8/yZ\ИNn}%7,ܫQ=V!Jy27ңv[V-@g_Bidg'=6M%sz_e_- ~6K]nt^7
+r 9戞;O?O9$w&8|[ٮ]ٖ2h[ͩ㲦ԷƴwI dgQ@zlZhRjwZOkCf>VEuv$ٳ!}*$\KlWv#Ir8}`ZjMk귚}#ꆵVE}Ƹ|{[)!yDmH@6o<l&} ԭmݣFyN$,P}U.+*wWdS6g4e6d\Kٙ٫NQdsqYUDH$[G dΥ‘2VrG6O]m5n6;^.{vW6g?h䷙6
+[
++eyU; jks?լ}0RiN0-1VU0.{$mJ l޲T͡ p<߽Vԫ{58xthWflYWf6nIY\#-lTWO0vZn|Z^03 iMqTU?(˷y{)L|28k݃(7x_h {YGՌF6Z
+Ě*yeNfSkʦԒ4Sb:ST41L a&.&{S͠|>rǔmݭ%"J};uʍbBf\.1M),,ոLZ^ُĀ>ӐX:)(UƔLV&Bٜ3(CU沧iFuh:'ʿ۝j[W[Ģx=rzSS
+nW&./fkIiViqUX٬5X9SY׺-CuyTe4\ѪuMBXEA
+REAPAܵEܗ#n=3v
+cNUԞ,gg|~zy}?ѐf͂1=ŧoA4ӵV+ok2?mW{$QRYk+;.b}˶S"{qIyy%w,>{I@m˶\6E~у*!ݮ3FtmuM原Tյh'ly}OqOj# Ǭ;&a)*>K_X?+w᜜}md}=@V^`O2w  Y٧DN6 u1ֳ.3&sՒ"/jT6慮;TnuÛf=,=sӪo2/ UYeCswFRևD"_IUǧ M%S,\RU\,=㰽CQ>wݩy'G,iY5-yc\vSѬc{SkRNo / Æ/?R>*FGRGCo#zTFtb=tG_]ҡkT%^ 1MmDd+/d/>08g6;>'^:1U>>f6#9(TѰ臝Dw]۽j/qTyÈM{\]ۑފ_q3m,k |VS\1s6zڌ1יӣ vyŴ#>3D]!h`?Utr뮈ӖO}[8:>˼&<ت};hVFByCx]DFvAu:yDgD7#jnfʯӖ"kNkzżr =ZkCO]JOxVcz>Fȵ=U͊t2T8w(C@u752ω.4>/N͈V/y/eTFWfɯfOxdחa3/N׷!oc.܂M |{FD7$/!5Z!Dul+Xvv'_=7-)_3{p~jZxY4C
+UClw~d5IJAlbY?hGXaD|K#Q;#JÎ7n:Z(3
+BHc?d`l.ATVK\_0l_Lj*P5˿C)<?gD(5E@SÝ 
+X."[$X
+Ϙ LGb3Prh-Orzż#Q(L(?&|X2$B9A9@A˷A,
+I|Kdckf.0EBc<M|=HU`J'W›'
+Rx,Q[9B6'2qc =/JGp  P'D@~&P,6:KȋYfσe
+
+;A2BY !"8@"nd3DL@IlEv{uDP3\jv KS_! X
+@H +5<B69XC'
++ab2,1m k rỜVКKiN'Խ#מC~ <WCV7>EpVCԿ.4YEjE( "A% #@#r A("HM׫XVG+VWZ]gߝ/g|g]ך$i VcjD0!D
+hzG[Cq n@=_\r}As}F}
+ns[
+ϫAy9*Φ9|f9DY@DB(KD*׌F!.mz<vli'k?~1KwZlDi&xb6S a [nb<$^@`1— x!JsC)W<GnznO1y5euz믬+[oz|} >?2a4;Na1vk
+ZC狰oR # ~H{/px*ٽ_
+LJjٰb׻ͷ=o:~y_#!|\qw| $|ÃQ>P@)wusW`Qn2#5hyR/ף5n3Q-߇/5uM 
+N :!x\$hB6&P(APo8.S3)mOEHd`\iXf6iK'Ed Rtv阽';' :>|$l*@zg!U 4S
+\g [ͨ.Ǭ="w99)xOHKU|%i t D0^y(ewE&:bh F 0$@@)=Į%Ωs?A şS~+[ovlLqɥgr"2.GR<G>IZYEࡄc|;+#vl6Knsc$SA
+j)0@7b-ǮȳCcSSfz3%쥓a㹱.#->J ;,3*o&e=d}06ߐp]PW%n 8r r`d0q-=-@Ѝ}M>*g./.q<JάjkFQQI>L'꒮O+IX") ]E7!=*nFgfONTF*=ERώ\>fP陕}z;D/*'Dˡ9a~5i(akRe
+-D}/
+=˷Duz|o.5-Bg7߿f6x@ wqo]GSI:mu~<YSѪ[xU0'k,Tu!THR}Rlu:@BL tOKA7*,Еy8>nG߶a6޲z1hQoge!̩R^[.*KחkUM/+(L U~P^^Z6j`0pXWwT hu:yMt52-&bEKh}]m[UM6]e_Q*P+K+njQ@ɵgCe"y;B
+Ht@ĖZYpـp{C |i/CC._-+aNn݉[S;mŴݭՌV"0G<E
+osM8"XQ4=Ej9Ba7jO3>)js23^;B|3$toL>,u'{RFj+E^O?dr7 N07]X!@*Bw]Ad Bc _ݤt{+<sA!(sX亄#qΒѤQaN:8?&l
+C DaI)TeZ=zSm:g\jj=.Z7w:V2ֱ. VD ױ ·߹?>k/7ZT_ks76mDna-r[;~cx|D_|J>KˎEћԂEG->v8T)Nв@]n|;)T{s%35q0Ͷm@yW5;dd&GyS-<D6z<m5򩊐ꈲWζ7V%}0֨jfe|CqH߱H'DjdV&ZrR@𢙝~4Ej~"tK\/v.dwf7DǤkr{<sHLISPԺh`S={lV"ZvЗ;x~&u+*.;ˣ]>vc_֍Yco,dYbjmt"\8\ۅHMkD Ds;^ ,4㹼~ocd 8= TxV{ .\;vhH5mL¯.CwC׏ma3>^gsX~G[BQ(e>*  MCraxayFc xGaw$xKp' l`3vog&_$*BM# |Ʉ@CBZ(( *.\,\ xH` X&c ࠇW!fpU3+l?D"
+C =q?/8T 籎簝'c??g5|M˾Erb(xS(b
+DZDhĒT /j!8K"f5SdZm$=m2]
+{
+-HEbfy"z} ];ҏ|!iү 9ꏨbD2wa1xd]
+B,#dX,T<Ii b@oi^;oTo"q P#F¶
+n e@t 1W͈<Y0*Y-CSph( {r!{Y<q6GOgYI-Gdn[/<a˂;g3&YHeϖrȗpp2.VO)RlOshpVWCKrޑGbf蟳b_{=SWdVH<U6@ud eD*%d*=' Uxx^h_IcpM+c/]khoR'/%vR?T١iC{$hBgX8$^LUp60,yߜ멚xmF^,]}*\{ʳ?J<S%鴳Nح98mus:04:a]CxvC_7rX lי@x10S=J>1Ҵʀ﫧4OmbEۄ?+[+M:VHiPv}>dj3q]3r57`g0o/iK9<r]QMgy%D
+*22XPHTAD @(Jޔ
+
+|&t3I l}#fr+Ȧ0k4f,9nD$s& J{j<b1=V7j=`~fYGj>UwQ1k n$o<.x:rVȖQF"vIv$5
+Jst0k울 NeNEOU{JX( Z
+
+
+/
+Es
+!Bh`/ {o.
+c2{WTKEV}9{[I rU:]M/6 %}_7[͖7[|ĒC_dD[ :U7JHu!ܪ5*5L
+Xp;O눠kXMaщԭq-5ǷUWFRW%TVzeRkYE;')O'̝{/!s[Y)(J"j& pk0hkZ1i8f .ZU*+{H˔Ԥj<|/_|b +.1]$[=gp{W#vVvYB{>bc'ٸQ9jU#'!@jYR.:S%񫚙'+|*'88|"*;R%S"h5[KLqf`34&w3T1Lz-#6-.Y(l5+ȼ&WdC#- n
+Va#FpV#ZX+*_ͿE{Wp ``
+fjvg:`Kږ:duȎ1{\E+WwA'@?@ίXΟH m
+!;O}}'~$~0Ofh#v^R+uBW e{; F;m_ x(6Q}اD֍"j)]5GPps`|(|H?-"")bϏ߈5X/v~nH>6J-߳* .C4'DD8?(
+
+ А:H>0ZArCOY
+yJLX R`Ev%,M4/q-T{cDAD 38Ӆ<Ajt"@4э$H%ΊB+gljٛ?-Q
+=9ߧȓkpg.\3D\ $71# g1,e|/Ab|}~
+,*l!$Fbf/oIl ErhWvngGОc73G:([tph‘W!s-FQ^wM'b3͓ x 2ao2_MJv(X#0bWaxbhpl6wh2w# P1F o / ^"uCe#|=s0/ri#LlSʹts_&} w/p3 !*s}t$Kzxg[w1˗!v]ktC:szk[mmkWjkzV]gIV [Mt:\BO$ 5JbL+oJ,ICC)/VvY"ay:g [ܟvai ?zMx}->㡽.Cw&]mqm{w'♯E^d֬QSzɫly]jyh'P=9]}GK4wV{Ju#qg|&xBSFӉПHD1v( Cjxm<oeRkQx)*~/] {n0k'{\NbNSKНI:JsWǪm
+S;B!󳔄^|j,Qm~xpd鏟W^)T?L ^3Gw4s&seJA}"Cv󓛁ݐL^; Бn=*ő•Ie)O4\S3p\Cus[Н7mϮ2oScec/a}a^Y)},QCPӑNtċ.2 gKJO譬z`HpOU_w-oV߄m]aސSiY#bg<-i.A\D.EĢ\/+Tϳƃ1#[cty;- ;K|Gn)4K!k 6_lY9hM-%y;0^̂76o0`D K{~y1ϝw
+tTJѹ t(.S˶yF,_3bBЪaSC_2da䢢 w-87fܬW_!zfl:Ӌ2QPux9//etrL]췖e6լ--]Y~σdeyQs/<kXeoZ\?jˢ EM)Fd{#@p>#TFtfNLPɮ+( }߆}fDTDDYaVePYM*X&FM0.59Ѵ1ihKs޼[ą3r { ʏ2hnڒ۪1Sb_ǯ*Ҫ=RDna_Y9sMF"",MB0R߯iPQt &VX) wj+\ټwIl徼Tʜl~Yv<sQq;Gr/+}_~?#_ IQ(MC0
+`~'4T?PL)<
+2d<gnn(3[=蛚u?%k?9_r>)(NBQj&
+S(Xlaᮔ^;4>#80Pk
+w`1JD}P:}
+Q
+bJs
+kpooȱ>^AwP~1?O
+ro }bL x`B/Hb
+DPAd230 ",BK5ZWcM=hbY-b'su߻}9(zy'V&q_ Nq%]ev^Hihde-r8hQA:'hE
+g'\e
+/p@w$@/#@oZP/^z~>+]}A&ݙ;U'Eb;w>3_q)0JƧ(:@38]z~@Iw}҆<4
+ÍxAe
+AO)tX6ei<q}nYuN"[c])gd48楯erҺ䚴O2Ӿ[F yF2)3 3SQFFa텑
+p:z@QV́tڱJq
+UbM˖&YgZmڜzGMv+,OvK|<wUk%YY蘒m:ȣPR9HG$hi9eJK'-K0_Zn-̝eR87vgrU2\tE-rtd/$Q8P>ʟPj=VٵuZaIBC]U(ReS*,˶I+-K5;w01E]#.BdSc
+PFF 9Pg?\N
+(8g6NZ`jNmzN
+)JYYػہΞ;0}'MZB׋ǽ2-c$)nJjG%W?ō'=vpUB`J56<ցYki3d^S`gꪉ~E+߷bz + |NXc.tsȥձK,i)X,1$f=baoy-~KU^)5cFi(ޔmJצJGxiqoMnx$p̆; .X$lhIix^IUDnIcDܵZ"sVIdގ5^u+7r~v'l3`Jy
+ޝ,}`k~ I_Zȭusf털\;')Yh?P[xJ$  |s×jߢ7 A R7
+`LRʢܺKeM
+ "]`Ȭ3VVs͆v~YQaIH?+)/n(|+)1"4
+(2UXEj/-唞ה^dޗd3MD1AJ^W%fA=X4By#45Zѫ ޥ~E@C]S_kͭif!azSz;\Yu:\YHUITf"P _]Ax<K  sЊ3hA}`oڎ(2k{5ų-'Uk) i.gi,q@0)Li8/Jn-J&JGl!:O%<9<338߈g
+0ЏXF
+ځ <h#it|^w|1Γd d:f}dž,
+`Cz'f,@w
+;kW j0\Ž-nؾ$mˉuY [uMeW/ة)ZxM* u]xpNA{&q38;p;@57h~D@t[
+"* D(Į ŵ`Y#Q QcC ֛"9sp~;̼~߽3Hu1~}|8sȼ{¾gO
+ wN֟5'sv/3kcߦT"-mK@MCn*)\DZD؂I{OY2pmfl_
+Ohk+-^#o#n4¥fK`[7CwPOOg~<}>-,U)Q٬jifM~/-߿-4˩ŸS۟*p-lQ犓|P:
+l0Ԭ7m\keYb׭Vh %? Z+jslgXgzj~:J[EJ,6PnLW . )lڜk\]n^bԼfy\d\h,7W9
+eu-??;w
+WtX1QcJejtȴ*
+OY4KTh;7h.?~vP}^P}n#~zБ]N-:3.mKvʺ
+SvfU6zY_L.4W:~Frǜ !{vziBЏdO%⹷7ubM7gjHwP,,ΏL떢u͌lsdvq);|a\NwYo _G=97Y#Y.{{3~,K`E=^&W{^VocvJ4yRp }ب<Bcfdm.#"]EtɈzëғHP)`e8pv$p(xJO2'>R=9$A_ٍCf =s c;eH~kZLtNr"}zpppc-<wLxhI1kI91:oO˱ ڬd9ϗv#tȈF?4n!=yp
+Anɱ^.c ɱBOu;yfd8X2y?܁nI6`qY5kG/gK4!=i>4CJbe6%%ppj\&#}YI %)֘ꌉ!;_3T#R4b JIOde7 1P,,.V:,UHA@*`-k1Xb]QQD#UѱrԊ:k+ڙs@wŤ,F/(GFWύ8;jSxTQWc(a>_# }xk+$|dm8IZ%BN(If4-yYrR"!1ba\eLBUt|M,9"V6:p kv
+<rX`A'uH^4?Ut[df8#=U1Fc(}Z`h՜눔ŚBmHIFI']p> A>0^舶Kgųf] ޹>-)9;r=$eѹ~Ȝ9aّʰ4<MW32O//M触 TOv=~les۲sr)y@|
+qXP8QE$󊼤& g( X(Srmj&/Y]RYrH{:\v>$Khz: w=}lIV|(fYb.sFx <%!e3˦˂KQ~-'-Vy[M(Yc^IWؒSڎ]*lH!)6=g;ؖm^!I.I}*$BP# `hKWjlҪP3yU UeXxUYRzVnQyTWW+>j
+a^c{s2|s@鎭
+M
+mv0o E2
+N?!k
+n:-ZUC@(4nOyi<s P+p%<!_OEl s"6,qq U/`ŷVo!,!d| EƑiCRɇ5H6I#89C"?aC5{\UoE_f
+G#֌CcŚ(CXxB3 <=i,)A?p]Vk*Wpl'.}VwL.t??h8|kD_X2=/#q_=ݪ eU.T+qVUFtz;:qR݂6NlE#Ь% Z8; ?i;z&
+*U-])[kkݵMp={aj1drrr_w~ko7CfC $r"CkKGmoWkqKp/4 nRZ.GRZpP9E;}VC)g~֬(b}Bq}Lq==WΑHH둄CHW ׇG1
+} T{TDгD
+&tRݱp@Gt>ի/`wg[]6^g@ێ֬@wV?Ӓt3Fݼ^wKZVw#ơ#"$9p7
+ci`@J0C1)Q0󊸞<+ߝ[ВrE 9{NÈaޒWޕ m'2H1D>O1w
+A) iN3X&{m.,5V4
+ZE5=!8)Ae_HSGD瘃[xqz~\__
+rW6tBW;dB]aX0#ImX4ܗj(IqqJaR(w1} io{ 7,dP*=P艁|v*ϓAx,}k!;Z+Ըif<$1-%6QnFw1s?FߋVq#:(0v2۵rnխ2utHyK6qwuU]&ۺ cc;0cۈ`7γqGv#M
+(q]ՠƂADET,NPXh{,G$1qu]{Xۏ{@xgygΑڛ%_>`Q2l]f(2C/)멷4y赌A.| b38~Z9P rxë;<+"Q1ír\\p4éUp,2!9V3yLYǻH?RO VF*gS݀cju#`WDak261ZCcIڲ*K%\@]+!=bԝC݉Eݸr6ԯ_ȠAV
+.2i.'WG ƙ5H?2|B>N"u9RkC:k%2SVo>~CG7A8RWm!
+GzjXjMf|tX@Tjds"@# ~I p'4q7F \hK_hZG9&ۇGx}Lԙ0&He%rM8O_ŠS 8tZ%#R9SThgG8A'5qU˲h%|:bN+qJ'98̃UYê
+4jpHՀ&|W2cjAxQeNW^/'7~}6}pV7lGX3`?`8nsWu2:AC=84aT9F@YBz7ˈn.yJ\C;N;tQwðԹGT{$aL敃*|Tx{JHfKi
+IA3!!Z=k, `;孁Pg} lʎcPR(bdl HVJ
+{Kھ>XX?
+#e&5E\F3+Pydvf>6#hE ()Tm(O|ǧJx bca@OdFwƒ0XiQGdcNR̎LNNγ]mMV71.!Fh*a`+"}ccbuX2qH &̏(͍͎)K#"q4!SR4VhuGEyafav .D&葨((("0 ̌ (qh]\Q0.cMh4rZ=&Ic\kmm&A;8}}yIirjIjI4j{'JxU?3~F[6a>(ѠԦ*CPnH t$=WV^PVOW5MߡYgMYHc֋*^TZRES.qaQؑlZVudD9TfCi*LiPlJN]Y(_Yeƕjq&˸KΘqZqC&#CT ҏ}mf`69x%RuԘTfbK0ʬcQbBA<!?;Ek͔:92)϶-5Jeh^1۵ifNoPjM5g*ԛDeITr,ځVq#SüTpM9:ۆ
+cӱ1W;$9J͎\yaVUz:uUM66vUP-Ee ^zo!c.*ZzR,U#/o4Xs`rI,鐥9 ʄ<j~vu|M\IrY@PT<xʟ1.'`!<NQ@X#$ &]0 id!e$rقry|I"d2xjvYߨfS*1 >>dbJxyhI%){rs
+ ~u@7hYGo ڥŠ$;Fc@G8;#\<өG]
+ <M hw=n];G;65+P`0^ہN``~ jCp(C!EAeaqC1}C"? 6je6րv1.Ao8]@8B{|a#hB>n~psynu󘈿+27ԝXg&Qs459=@{?0# pZM3lF{p3,?gyٟ!a{(pm>/д.d/`=fC70ԧ'J"H5K\~¿ƍ b^?EnD|B]k4RCIX=
+(z%-BR&kOm?rw޸p0>&?<a;QWw}I~%(Ӌ\C 9YMFM^"ċ XdOeD$H$'NJH#I3YOZ+'qpwS! "A$!%$X,"KIYIp mw`7 pwp:=L QC@E8& x:pS8Vg'y},qgp*q3|˙z:t̅o d,J͹"ZQUx.ik9W vn|S8<F8YvEyq^ ] [Q@PNAc9V؅v9vZe9 'xbzV,xhĚX4Sg:i$f:}Emdg}?<=?5T-u'@DOk%k)"d>62j4hGLAIþxq1GxPR*Ǎ+GsMԝPS20l<@?F-5Aո޸5ZxWXwq+0"<⢤MT8UK<yX>Ʊs qW\ %uW7hZpYӉQ\ňv ¸C8? ΍3n&<ĉIdGoN~
+^?`ST!|:lG<vq2k p>0V#ӝ84ߛш3۱j웹 Cv`p>ݳ10v%%U'8V? _LHjȹ{<3&̬)8>'$r&cp{T`: 5cgP'vö~ak?|^ .l
+>/څCք|/@܎FcyG9
+Xn}+Ra%=W.H Ƅ'NQ?RjjWr^\ Ekp4riӊ 2)I~<'yNGWJVRn0͐/BBl4ԉC6 rUe8T.j* w4eߓ(N*;ST<Uڍfրg_&k t3m6:2BСŘ&r4sHpbF66IUN¸Q.3TJ3jJ2qo؍5vߕ U~J*ٟD2j^
+sXnHNs\bZ8Lەb~MO馏[Kդ*,U&5Sl#5/Gi763+w.֧< 9SG%չMEe^P/8bInuKŹmranbݪX-4y3>u˯lU' j^,^h71nFȘyP"\ֹ-B-΂d,NJ`/(
+bAAdHyղ֯dۆ4fi,5L}2dZU%3_S11׫=W̽H;Xx:O#c㳪EpFIB81(rБ-6!Q"ګ{dwY>ey&& MCMZMZr4;ej\A+XEq 挄2r˲S/dSYlN)ݹINuVR55I4)I%)RCm|GiJ%i"ߋ
+U+Wg`/*!mMVXE] k#ݳFz}IEDŽdAyZ8Z1~SIOrYSZU!ϸ\R㻤Ž@H55 IFJd$LEb<[ðu ⽉f`ׂX.omBw{P ޻bh'bh*6FU {'Za'|/^@,%#k& jU8"W-EĪdĢn+ºKuG|qXYĖ,$&niTUk_p
+"$DԒPJ2UcLUjj:Jϕ:Gr#y<꒕Ȭ g*]FhI#tM#44B3`i M7-a *tfpY Sa*gC~mw@^dQbOE*<7Ps#)7Fay
+믐
+
+̟j_v;\y)`jcmAv3yf.fN5`={e!/b򥈥Rpq/R?- T@iڔʿ4A~kS>jmVҾU^#_WOjYQx?Vv&gR\)
+SM4PIYhx>]B IϕR)51JjIb۶21 oc
+ ĚzrjE oTK;$]++>v۽ c~ǏZZ}-ͥbb
+)O</~vVW%qmwڡkڧ:G6|"gֿl"\N:u[זjD+D1x4bj6plVcwvR+4gSX> ίu/`@hȉ+f7r
+N!Mhon6\[b6R\wϑc*=Vc=?jCZyF+n{>@<iGK iO)rN϶
+זѻZ.GZzִrZ3]+}fk}Ϯb?jԿVr(E h!¤ϣxzήA{ցgկ6h*kux/{*0LFkYljZ1IZ+'B[0xԼk }P~+OQ
+B_Hg3s9|/>X$E ҐcU8E5IsT@U-wdґ
+G@2#Xa:Ŏ;BGYn;[ycq9.YK$_mqg.j]L,kc acSUU
+TE<',ݩӣgFsQ3Lw[,q+'+yN+fNj?g8IK+MuJ,Ty]̈Qif3ȝ;KnEFk\mǽvo[Vr_\GF9ƱlMԀxꉧ,'r`fE8;J9SU3GK= qɔϛ\o@^o1Mfg<`9={4cVy+󱕒c}fCV?8+/n-xBRgT7\c_-or}'w*Q?_n0#b&w[I^+Z\xm&}$=o%PF</ot ]̂eR
+d)=WZX)#H
+̈́.sAx>0 7f|>xhA,BeVVQ2#*RzTVj|&)ԥ`-
+V(!x lc 4o2cؒbی-͸"ۈ+c/bO~o&j`<HiX1JEӕP ZJU|([C
+Jņn3ڍ١Y3l1tzJٓЂR}eeWJ>C5o(]k(FӜUʥWj֪"ͬFnԴnM=ɵ(zۚ\16&gJm<h|Pu
+ߋ^TB:^ZVŲNoAȎΉXX. Ӱ
+ lPX&]ݹC;誎3~AWo5nlol$ϵYPFu+kYkf`WѿX5L"5k̮I288
+K2vWC3d//`N' @~:s5PBwK)wDҨipЂvq8'&#aˁeaR#$pKȵ*5o3s@;\'EQ?* E7p ~ۇ)=I=ӈ?5Jzz,0቙ٳK''x5Wh+-"lMgx4#JÞ̧<'9=?Wь 19 e2q8ρ
+U&. רk[mH}+iޯp# ;9<K2Mf]j>s!&E:TKXܗ.S p8.jkaR3нAWe4ހRbc‡/L>e~>g|A`fNmh5@8
+q P
+Fe;{v0-[nrt#Lqjh8Чm>GulꖀiEP0'oeX׈<qL/YY=-s\yLǿoΆ$@Ä!\0` cm 6laCH %9HPҜm%Ҵ94R4G֩iVȦ-4e/ Қ')'tpgSxx ƬZQN0]s?u] W4#={ԌOJ5*:t0#4qVN|H5*}\.I\\΋xN.y^s\٧'y
++9qJxpBq|N^3sqL͛yphyLο ` _ao'L1u4trX>?L0?gpjJU^lbPx;w@x#F7b;&"awQ\r㑗#G~-QXM7gQ;O-SQp2"G#q$*q`i9-2 v/kΘV#cak6X.#/a86`Cj~c>11_Cqy,$Ȱ31;VcJlYi$+6%90HAOPKL=PISA&ze?Z#tI %UoW9R2yWP~XaJy;RU496*pz9֧1ڌv d?}ѓݙCM7!Y'KG=2%|'>KL!rl/碗͙s1  ec [Do=9 V8PxWtS9ڕ{QNUy^ g#?¡3m>K,;&Ygɸl`\*cїyŸ_΂j
+([
+OaZ p6¥jJ4 ꚰ>ªzB$a-@Sf4(cCO# 1.aV-EWQ|řh/΃D*.m^4aS$E0 u3J$a"?JE>Nśi^t!:Q%,r\pVhЬEv6VZk`n&AaԾ& EQH5咸Oͫz4KI='=駛qfܚ%piQ)CSU6UhԕêӣAgF&}
+M05Ƭ\ U'*-XQnEeBZb;PY~%TIL({:ۢ&`aۊ^q5, Q[x2TYQX
+[P&C~[6
+A#c^dza0Vy#{2 6 i-aU-8YOiɞm@o>r:#w#K V5HA 5Їf$&"p|wHdꓰb | .&7P[M`븪oR#$32R$uHYjA\, iD"*cDAtH8MENLm]'{
+S3`VjeSˌ[ۑCh(u:.:.Xn0g<̙+[F_sa
+SyH1g`^.@Us$z 4fp'Eg 
+m=E'{xK4bX94s퉮j#MCd;srÎ]ر;ر;h(|Ful]pwr߇ {)5՜ ݌>4Ap&B4hΏ{Hc_N`G#I#ůKuX4`;1'-cٮqux-tɞ%CR[1Y~ւ}8694.HbU(Mm™&>v ~fتnc8!;ݪu.4@W 9| -Mywt{>Sӆ#I? {YrU
+n
+ۧ*oC{S1ڝ<A <8~ZgնZfV ղZnjMRuj?Sf9/Qb9j&-p-Q;]T-Ԉɏ>eo{g)Q~hAN^Z0UiEUUnE&herU|w+Wrm]w?<5nk0I!vßWÕ_n/*}cJ;U *4X;<1*J,{T\,POfӌov?)E]C)!*mU2a.mTAE5k)7Vy~7L9ɚ?^3kz7P
+ج%E҈ CE#\ 06C9,{rhaVᮚɑJ쭉}5 5D㢒46jR'ktQ@#bjxFOCcNjH, Q-נ\ZZ#mPGjRRc<5>_b5&.R)qo%jd%ŧix|4,ޤ5^JأNh`'P-?<*?we1 $
+boeȜ6RpeE+#=ItsjLJ26(\MG'qA;Nw(4bS:F @QU<Cql6)c22PzfLJ5MT%eU ř4lWy4ɼK`nkBC&0#Oa4Â`0eIFsf{Ȑ㣤@%VBnrc59/YyɛMDK&XZaYpY) _+4ϡ\qh\CR,r()J<zn?e&{)_* ӤIXtEXs4:M
+Yjm5ں]#
+~B:wh^0JVE7Q)ٓ1jZM(TD‹5dJ"Z%),-SHiJTjPFCCڞ
+)iluO
+M y"ujM穀5Zzaqiȥg7`xa naw4'?P_\c
+z  a:̂`&h65z=}oÔx$}L_6op9o@ ` DA
+dca~P:۱߄V_?4z"J"<}t K=|YxC?KWL|Y[0Ϛ2cAدj~|ʴ SټT?QJ z9">uqN ?%wŗ̺75f/NLN>V 1,vb{%Ө;[|;xR><Z7tHCu8
+#>prWJU}s_DщTMNΨ@Ə7𣋼:~ŏZu[8}D|E Bm'|.85go-/(t"шZ:s_lخ|l6bsll29=قldsۮ"G'#$:D b]Pr\l.`w,$
+ϓTVWUD̮r]9 ];A1B9 (hr4*Ѩf,Ry ZDd+G#r"pvrԾѿ+`ܵ^ Gk4:ıT-TiL\Yn0˰/
+ŪIW=f8%K(-޲Z<.z*<tU bee6Z,l:M񔊧#|
+ğbFkգ(ǠYgI[LwU]V tTvniNb[a[ѶA6vר ꬟RmvBCYcbAL7c~اz<(m;pפQgm%muvZZhG}F~'&=US]g<][Q49ܠy ; ߫ZUS=8RhmȢ
+`騥N:)C{B*su 9 enpS?uBX!'Dk;4(>ֺ"tQޓDY3%R=V
+=xz1{GN]a92k=c`~53tRLrH[(m $`H#Ϸ\_!9
+}ue1ӿH4)$(~I$ =5XE_Z#_t ^}Wt,RT$k$S @:;I Th$9")Obp/ yvOL\Mb&&+#rrC|ǥĠp!ҮZjBVCq$Y!6BLaCSl aTdo1'"lgqHLݢէ9(Ji+"J_1uBp:ع DSbsMa}aܰnBywx fkf?T#VJ٭aH=Aa+\89JI_4)ҟMDZYXI׃(ORS_US[Ƕ\[U\=%=@vP5,O8"Y=%]6mzI0H_)K0l>.wR )ZL-vj5!/Cp'V54Xք,(z۩g C|D' z "9&5xZpT% -vz'57` BcㆎS}&Tyi0(:5 : HtRwKc)j<)^xrS긭Mz[95YiGcݲ9S OkI7e.5ӍB 2{2ceey(Kk]XXXv]`9DPEEE-}3Ѫ68ƨǚ&5UcըʹMG϶&iLL9l?qg~e}yG㣍 Y&FaV[O?r&4ݑ Cƹߢԩ~?p
+x6Otk?Sn)qG>H^WBԟqsϨسu8Mhl6uF*ާ<k1N161){:&2lQ|#&x!MgM:c w/wEcj/vwzYΗ:Irq\.+ v*
+aڃI$bNgkbw%[z\h3n6i#7PP]I4ou.w:h?K.vi
+4jИTmnq<Me>_x y-5+8{wn}W0zh%KdhVWfvWc!޽LӺR8MI~Tc&X[Us<1=/gjjb(Gˋla5øph
+B48)J^K<YMv)'9_eT(3VΔiHgf&SJ^@%wM.rdžP2(b 4@nQ.[lL͔3#Gj2R˕Nc [\Y(9yY(1iWS}Jjnts\N-کr>@);҃i Vgd(͑TG9du(9YgdrF wAF2:)SB}ځγ$:P^ ,g3_Yٲ5(ۢt%ggWk̮*\Jp5fuoQeEຬ(]EgS WgђL1P%P
+-ZE'̃>8dY]p9dj FEvǮ"!fRzD1j56$HӚ1ZsL5Gڴ4uSv~LLJ=}}}J,}Zҗe-=/kMي\!iZP[OhgJ(<E{,#K!ʨ4+iS3EL8#+W]EJrdsZW,͊wXfQ\g.s%k=~FG!":P ePidzUF38dw $ٌ4Y!J0FbW1U5劫Ƨؚve<HyEg
+_+TtuPX\~ ZpA xA{ ]36:<RJ 3HYLZe5Pw*ʛHoy $ R^Ɔp`}t
+V@L8GTKC3N1ϊPX1}\~u?Mg3g!0C1Ü`v.tޗTgYb3g`6Ffc!"
+2A]ؕKpS9 (b ljP!ݟ+ap:+5 pH>?ct$`]9sMxB@w~DŽ q`
+a2B5X
+?>Ǐ?Y>c2D|oI9d 88>//w@<)3̤NL ?>ď0՝
+D:\fkmt*t3zs<l`ۉmgbI
+R K9Һ`6o֓ultj 3I{nYа1f;L5bJqaxE:d'ӁⲾu#zoБFBWAth !#ZхG'~,#O&ZDX\@m.6ns;wޯ]{dXN}v&Qhdk&Q,E*xШh!##|B,֣r/!4GZ-
+uT&bV&ֳndt
+)C
+Z2ш%TJ TO e?<q[Ƞ}ǸXƑ` "mּ6͍LC4+5F7:G1SUS112b}r.RulLTi*M0Wn/G$3[kK
+-Ɵ&XdWy͈Q2c$@Ֆ2UYԩ2a*,aJ4Kګʷ~|!{N`8NZu\>7]/Rk3ɰZ嶥jm\Lʤ"iʒUTZM8K[T`T}wj9ME$QnrvJˤ3i ƗR-gE)v8T:Lũ#5-u&0PiєA^MԬI_ ەO_ kx
+G҂Ҋ. `+ܔ9"T0k#Qi*7eyG(AuY`w]`e]]6xM0xD⠉hhԦ:M4=$ΤvI۴;^37{y{wiJ>SMM,)O"t]-)n~]6pDo}=׿%؃
+M|!.oNP9M1#U3&_,UVSSE嶶i] u.XwzHb=xpgيlAS!|(^UEUY\QYM29m^a,-<ٗоY.e|9)-0pvӍ*-M0 &]*pĪ̑,Wi*-5,TRŮ:&5UW27j{/h*u]9rFc3e.KFB|P e;GYli*.RQyVe(S^&OF{f)ӡQ]FV>L+y>FG
+}/P06Fk[yoHCY2uLRz` XmJ<q%(YI{J*6-h
+q]C&9x1~cI27e8c~!|D^ KKX}4Y+]$>#I̯e'{
+n2.SY4yy]C4b9eh'{̻Ja,#tZ\S Z!}5}L>U3 xG;h^ms{V3]8
+Je|INS4hTO[}?#ĞIybZg)W*7eƻjArz}}Fwㄧ ShGV4\ԭ~b&Tb n_}ث ѫmM-v,ϵ'`| />g,ƒ8B-^T*G_L|7{٢mӉ9:w [iɨ Fܤ`< W;k,ExNT2yg?fۈ_FtA7
+Z9#9NZ֓I:Y'
+\9yv2È?#KBh&t0U
+ 
+!:'}<_+Qˌ7ъFQ4$M,c]OxaYEVW^eN{{J;Q>!ctM:^FݏNtf6R;Iha:fmMEQڣ^C")RQXs<
+uM!}*FjT tj"W5=dƲ7k 7,jpV7PE,+s_ܴb%4J{JCvJ.Ym\)Weʘ&+W*ߩd~
+Z4ZHAD˜*@#S4hтk"6P:MAZ]ƴwRIJfa X<1ٔ0974dnҀ9~sb}kIieF˜, WrFAeY*]
+7(hߡ}
+Skj.7-}G\ܓ<:B %CYXc)O/;Qb-SOYrʫYVI6+^UrD~ǤZ[ث&xFNjr;^Ɋphƒ8$:j0.kQmRD5jq*P mZjj9Ffy|Bu|A5WU|
+deTTaԥOѠrcʉVV 0ˀo
+UNڟ` +/hנ]VG%KL*ʐ(SvM`&$&0 F)~0C0^eoC#Y;]#U bƒ g)4O$I-Y@Oqئ)X`]x)k
+Ә$yҫo3h$a
+<߅o79|NFb-COoc\#Wp9/|^u¹|<~KhM^#80lO1|e.c_ރw&2؉_3/^P'=C%i/pZO~|1!}
+"zARBLy,|>Osyx4c$csyy0;G{ W=hϳ<*wnY6e6NY]adZyN8K΋eT/·df }?edNaA{)tg"֣=Sqy9 ܯ3
+OTnawj~ m+'`6@;vahO0y$>f{;{n2ŵSϰހa<_֜B~c7EE]TK2/{]B?J5hgI8Zrs̜y)u&x"<参 ǃ-hQt1"Eo2KnB>@6X=GRff}6C<o'Gq։JekC}7Ƕa111-4+f:Ol# <+xr d8rD.w-
+2k9s9Y޵XENf';VR+ 8WY\Nco5RT
+>Kc@ ZbKI~hyYE6VhF~ , )Y}E SQiT]ILkiS;,>Dj+>V%%9ib"6N&!ˀXf2ez˪cU99Ty:;QޣeJZV2V˼jQAE-\RrU!u9Eqs mohn0*]7t ԵTiU)CjꔴXSҤZnicƄYEyj0*h|JTgX>E:'?'n݅=XK۳|ý49u_;-s)(WaQV+TѦhEJgάkpnr*[yZsrW^Ru pSngN5pwoc-u@[>C )VB.1WljtU(r+RW:긂
+ܫuonkUsJ5_#9ϫ}*s:Ļv|OA?tbqo&FxL
+y,j+P[ZޠMyu7)6U>(g9|'e="|Ruޜp
+9?ހڣس^V>7CPǵIrag+Z
+eʖʚpȒp1xiE%ɔL%I$1ILY( IpB'Po+h{$qh~\r߅uc H^"sʢ!Sʩ%)
+S jV `V4NaRRRl֝Iّ]hϠņd6h3
+ G@e"
+JGC))RZСPflikRATej~Nξ>e`.ɐц?:񣛜M'
+>=w$) t9Ïa|$љY;6f_)b 5خǶ&b{gbx O)5dt;mG/Q'*;)p XUf{&wѺИPn.NVjd ~E=Kx:\?דDtO`X >-`U2K@ +\gQQH/5?z ORz^Nl߰Ǩc~g;h$i= lYnl WP:l7`{'!n-n_%sŃtAzDwm_P|ت]>`tdJa7#u:IDQR-4,MGZYm
+*ϗ'';<wrݵrLRg 9<el2<?Q| lυk1 C@"S |^PP,wMy^C\*7Tof3eUYɾ7;*{Gޘ W!A yA-@A-TPC-J ӆ)1B&aa0LbZN0uȣj~@$_@uϝŃdSdʌ*#Uz$HRÔmTbt("I݉À)a%ى>A׃AA?L pew^g;n ,$$\ T
+D8V^Bq2ZN6#2Ң >q;9oyn'[鐫%g+{ ]Il%
+e VP!d"Z "8<<]LpUq-@ԉh
+c> ) $Uc֥ &Sa
+(Hw#)<as29C>q-JFP .~1͵~L{ MHi 4 -JG ll+@5c`*o >40E70cۭ +W/pdK,1!a7fF3bll m B&xjG؄
+ɷe
+ׁ)Vޒ)Vp˻K4w(_ BS4n;6Yas_"xPz^dt
+u|L/ANAù#$^{Yz<SU) [x30IPJ_e:F=3S?)(G, J.y_
+t0Pq5;@H1q(N{Q@S tOxZV1jTWSUE_m^\[Ɯ$- zlu 5O}8! d W!\TFlU"[yOdn8(GF>Ɵ9D!Mǧ);Lr+jOU,U*.V_ZUbRmP*Q!y7^'q~&>@^gUcS;Y))*wzT0TjĞb{*tT(Ѭ<grq+˹ZxJ~!ȗ| qm2˻[ U2O%${*vTS+Ky<Mu(]wX&ez:WgX>j-JsHOU/Zl( "Tr O%*HV^SSSI++5W0*7BMJ3:eK1VmlxRS4Na\ɑJb1ǐ' A9J@!%7=A9$e(ϗP&#}cr?8ʫ
+o6$,fwI6l~vIHBH&@J$
+$AkJJJRZjŢXZdZQt:0VvږaV;0/۽=s}o
+|ӷCyd}Ke+{y3݌slP⼫`M2|ey*(!Uh+ت`>9ò7RN-F 6`|KZi
+|A|lr :)wr(4KP
+Q~RpBpNˆ/B׏܆hDѲ!|PNc%|a#hpJF0ߕK<GrrG*TPV+*X瓀- c
+-[ 1!ʜޅJ
+qŴyּ# 36\/5Q%,iD e $~l6[)l&`,4o!$>2ꄯMS~w9Xeqrđ&fNjn q/X6,ao=puV?&kyGC&g3dL(9!Qj
+!#6ko,c\ɊA(fC~yCv&ړ{OK߹F*JyW=烀% qe#3pH\΀j<9y{@&/|N:gT "bc|'ku4Jg-_-__߃?[mrrz{ҿrGQ
+-@t%"}v̨N|StLF8$P3\PEM
+3l3ԑ)eX%x?<>j*
+
+-tL4&qXsh^x_xONjqJtR{L(P&˽v+p^Z!3Ne8qY Squ sa(C2M~]
+{mf{Lm5:'`6?)=|w|_APŎL籟.Li$_y=Bz?"kzDZ}p_!B<DKM`2:~b9^_#nrGL_Y^.=4.rى;vo'3xlly`<gu͑v*499T ?n#/[ne tLhl
+Fn$'Dh R-며U`Vf&&L{s(!lǰ]v[a`^LS7
+U;Mܧ,~x? ,<fﲸU`s%vX SjjcX~l?mnQpJU=ŵ[}mtڿ
+6Z0jTqlA!vݠg?#o^vP}TʠNAVQQf^\N\Z]guJËꘑ*F:tJ3Қpc?RlBMfbfsR0$<7Af5e%"H'#ݸ
+ԁ8cҕhC|E\
+;{Tn6ٻ4wX܍*ɝyyrgEo/(3?do%3$$`BH@ Ud(Q"EED
+TPM(Ȗ-Z""Kw;=4s3_sg}ߖ6(M@rAk&Ь%vJ^ ; KgM@ úZ|u9I<9v,}l+팸 O8:C_ mk<b$J.!)A-A&.~OHtOHZsѴѪŭ$NVi%M["VxsRܢx:{u>4 gqYBzt}N}.ѽzDEģgq%+ġ~ŢNy}d8/aKbrg*bNE}
+A3A "M~K[4[<~M [[%VA[rNj?]༆ey
+4JC96g! -dSCI23!rm3A{Z"%
+ESjhrٓ\gRGB %xPEWjI],-VI^T0 GFZќ^IRkA#VN,c.'ZϕW:g/\hL1$iRUkkuRG[bNڱEAΚh˺نTIn}Rɻ@S3$( 4[f\" h /\4DSGwΆ݊+yލCF3gDv6gTT a[>u 4UFhF4B@?hI| baX_MbHДt%0>BS .z$f*|ըj@8:FF0'YPyH`pΪ4M LH9:KFf T{|jHh#O
+6izEqe-Z^Yqխ暶U_WݱSv7٫w8vC 1r17~¤Snco5{gκos~?.x?.|EO<䩥˖xz3ϮZ k^Z~Ɨ7ymn߱s[{o{>Og𑯎~}Ϝ=ϟ.\JJ]IYWQdg+/RKrR+kAݔ7) nƃe-ʅpa2b"NLUV܉w+3~ܘP~< y G+K<Ô+/b:&e+8fMy[sP>| T}<:I?().^J>\ͻ%~__b2lvǣaO G8#1<\|LҚ7?3' t뮶;f[mq&O6}ƽfϝ7 [xe+.j[ȤƟILiLT*Nhj~o'G~83gϞ;w?]pƶehbm֮-;zW_5a3Жj꩛sӲZdOG. 54PCC 54PCC w +u%^]/9 _ԏ-~kwe ܝVOѢ'~HPG VFծ=Ͽ1}C&|ww>/n{y /Mٵzo.Ѳ{_d'װ6Rk]/޳̾{tt
+)Uka"a>W~ՓĢ ?J!&vezzc-̣>$CkSFkCe\ )j3J-)|ʉ鱶d(;nZs>w'C71}fDm<W,QduYկb Oi6 | :n\h[S<Fǯ%wE:!D|%KXu# ?װ
+}~ϴv|ʵM4Yg`&_`3Ȓ;
+TEr-ZFbJ_6P@
+J!Cճ'׏:ڴ^tSM_CƼDz1$$7M0-,6PXPjw摳Z_8l|rE:Nxc~T* v2pFB6Ŵ6 ޲ veF`5mgw8ȀŒ9[yވXDBGG<3))若[زl^ў=ǏSϞ)v{7wo82
+bpO8">X4 >J6 3O;F.^hW}F]υ
+{E"f(/c`4Ѭ7h^!}w>85KhʙHAΡ 5.-F\ |{Gq{im=/ZtUppdK*8+#KD0
+3
+םj^A\ˎ*$,!2.KGv[=ZP
+$A=]+#zw^ XaF*bZ*SRD &^\4h`C͏@v~'x<\վAGi]8^@(WI<}IXA-edYÍDVa( e Zg:8QCHz,I^PQ%xI-02,탡
+8g:
+ElA,DBHHB@¾- @%1, { E"
+ZD|>^‹w>LpP8:H"Ol@H4@D E> Eߧh x 3{ =p~@bIb)y`o%65~)
+}OztGr( yĆ_ x {L|@mT+5s7*Nȁ3GR]xڅ)|9x^d\ \dyb.pPdmkkm_
+b} \hXL35j1|%/h`?b!4У( ^@9 Sa6r%'Pb 5A(=)|FIS|F!'AcIn#V4jBkn    {C.bE aԞ=ag*"tVP*GhHLf)sUQ͚H%PY~5[y6V!zgkhpwK
+Ly}\DM3 3]WdkijJ$#d=U$yA
+7B-P%P_6`ׅ3$}N+5AIL62U<CTE.3Q*{Y37@9b*
+Cű-NV>ߊ=jVy& ޠe=<S%tX+gJyR3!鱿AbhvW<Z,2<_)*46%SK3J2x&a`8?A8ͮbK
+zE\ N^禗p$Fs %AAhSϷ zO}G-rc).&xũœBW>ή0ۯk@G
+*h\̰O^LA m(U42fwO'pxa0|YPa47(t%1 Ο;\0^vwvgԟg oB l;e^cdUd ~Pb07(PfG?^;87rzĸ~_|)8Wх5SSrITdC!b@ As/<qvqXMCARFӯTbkt-#sUV%U}8Y@@yd;fј/ Oy`Q\GgCٝ8 P&*)&bWl M@fv#b\MG6lO?w3.}CU(&:҇+au*mDYD+6ZQ(~ʌ&sPcP|M 3[ǿ3E͋KAIT` 9IK0s ^RE`J2_mM67nՁ/t]wI}YSԽtNxh*w ǼIHNd r0 #oH,BS}ĈA7ar>=s߼tD[gnyQAA$LN'3 c8FBm}.)u#=g4b4~noUc[Q8
+ |H{ȠLdT}ūoݸ\7gMӫ[e`Gp=ϡnO"@EdYs@\4yjlflV/o.=ٴBj:*n%}lNmg[SeJKn/T^P@QQQ@@PA/],YinmyRؽ
+e[
+C>yE@)H;a#ssEfKϖ?,?_V3|~lEfAx8䌃XH?B
+P+6/
+f^ Gp1~)$T1|RB.玦TMI千.YoA777SCkCɦC ?#4wPO?Nfo0qZbNYLn~(VbOKmkZeu8MB ̵Օ??#Ȏ,kNDs:#:'>V\9Oe t̚R2'L掞8Nhmנ镡1!?mb#~GPqEfV 7UO$K.R+ \f9\cLu%uMXyߪoNhkGWF 5Ak(9ԁZ$)93Ε4RfiNb]6*MZInAӉW2v -&Ġڷ6
+ cSΙ# ͺvUD֜Zא )F/
+(F;Lj!
+14!
+rfס^w Y]1|6QHUU5gvŹ=utsԚSͳe׈2xRKFEMP81H|
+$^y9h:жrL~`v@ (
+CA"f?O /8עгV:sMx #L]dƨӯӌy.Zrp_OF6ߙ a^ cP4#@94p`X(^<|ͳº<ضJsmxoƒkBi팄Á}C3ȞP'{$N}s]
+݅Tf V;pd}l Im t?n;$TǠC? E}e {,k |7(^^B|Xλ_+'QTyZs'1]%~"0]_,p / PX 
+T7P1!O I=;scPcƪQm%WY.(IM7ـ Ad|LgGX"nJVx+9J%rS}Zd5LV%THdHm/6%^AfdP] ={}-*[[|SJј*9(#6a"[R)|Υt9Xe*\of{{8 o@eЅ փos{Ȑ選 WtEi2ȕMe*icAfa<&ZOki*QCP:gZd`"<A72`/FL]8|ÖT4dHc`JBFF%%*Rmd`lʨkJFLa4g!MP }ޝnI#\IH(tSM@ ZE< Y_'lkWOn:JTKIIlP ,d.92h0u/}ݾ tZXiڐsMJLGk6WJX}"Pby Ѥw6[ ܺ:y{G=~bxHkQIqFډsB+GC+KUb9#2 SڲuAd; ޺ܗ<ruzDXbbuȳd53MĎJ}X[SLP-i. ^7:gzdCz_-?Zs-wyޘ
+ 0oC츚P%R_;!Ȋ]D YKlCɔh$-q6ଜ@e>/zn߽ʯ'mytSqф̚t^s4{g%wQ5g,lmEڬJgd୛ m?gz݋NP*|3I;! RʼnC䖸 5mkey_goMi#֊NǺ_ъbZԊ"( D K! ـ
+z*)ShSes s
+)[+,vU%8Zyps T z;v6ُ.3 -#0l&. . x D ꞏ|ces`"5^Y{JOD'"E5 2p!8 ;B
+.I-
+vA@Dl 8p}!:.uXb,15(`ռbYȅK2Uw ׇ _ yC7^R@qX;
+BdIR&ԉqMYϢhc.ƓޜG{a87Nso5dX݋`J#o;A ccx⇿LNHV<OxF62GF_#yCaC[yh}!D?١u ( Kd&̒=KU'UQjx#$~Yx/h0_|%|@t)
+cuvu&ѤHom9v(8_-ͼB"ΆyPa)!fZ=p㭡є:
+2E)˖*kXF%Tƨo3M"ZWMM,S(C UKis໦z2*hgʌ0O֗e
+]k[F[ TNMAAg6W鮣//w ER $zGuY.-*\]YD i,Wy:3?i5z[&1T oeмg]l^um;8h=Co?P"ՖgWK$BQq#Pn f[~MxAb3Ԉnm#Ǯ F4i
+_(J'uq<,2ZVP\QJUd}=5@ !a ;DHDȎ VX Et>󞞹's1{.bXܛ|mz^y3-9D^鮒d L4T ~m8d{嘳@_h[;V'(PJIki)%F'\WTonuwWIeU'z+fjol/c}I6K m+ΨU\f\VnFeoÅwE*I> fh:֥ݰ˧֚.n&(袔[1Z(>D$h $k+{*%KGuS[o{d<5mq|셽qj??gpzB9(RF/oeV[׃ZE-M]5rI@.i' 7crk]:_Szp؜q봋sd 2hD Ӌ>n_ҧʫW\[1(\Ax*P& e~Qaўw5rr,` )||dh2e"1!>LpW1CBzmM><\( WyPzѿdf--hxomP1^R#g¦iIIVD6)/D~R:.rЬ,N/TV ֭],[y
+)u߃'/RBHoƒHgyQ0
+L=ED]
+DI(>݂]+Q[W_M[f1-cC\ÿDa)5:6`5\,+E$Eq$rV7z߂jZ'W ۄpN%4X`E3@D߅P Y &( Nv /Wm FI,ˣF9"/*J~ ?*\8 'C| X d}51RL܁i k|s'Z8B$1"۳ uod8:;r8 8DC+D8CN@;)/S~l ZCDݑA5"*{&#Ud8p@>3Nl ]80 {`ma CVsX@s`5Qd3c&?.n)TC*בֿ$\)/]N`,w[V6/SW1F@g JUTC4$"1 Bg $*AHP ' `jAj9H7Z $d;A, Q^jC>Ak6*8$l(|g<59jCo_j@nEDioK 0W, `{kX3_*yBJZJEZ n $/F.D>y;5?5HoCIH>,1Sd{jC<, 5ujS h5<:y)!j@Ky4@ݿ4$ig>3MM$" q:y;*CaӇ,.1ҽ?'qL.\|Q&$NzEseP ONM%O_P@<Ґ
+ FI%>aOЀ~9x,&i<4А͛lG68<d2K^QMk
+dV¾[6 ʺL:֐a)V+fęL{jGJ6;o TX
+ڣƹo.yMG`bF)B+DoS9&j+3%*MF̹gE [W>`H7K
+ANmtaLs)JM
+
+
+.QY2%Y")u"bb]
+q@$8@50Eڿp0̿bv9YCu7DrV,8dI6Rr<ĵH i(ߴ
+齒B  dW'`#g! ƽßo=UǹC;|{Z#"[o]MIjRE6') oTWV(VX5֝U[++h(\Aj|l>m/^7K>fs,ؐ'NYJdXʮK2_f dzh F<ߪ!zA=P4;A%r@Esw]kЙM? _p8#,-:Ym+jQYņ<YK G*hez}I$jp^ixo\GJ9t[ivO=W{y{7QUmqYd
+݄/4s
+b)R$Ī8V}pKsةU
+v|yl@jGr j`bCo+ o=]ޜ3a93WgC3"㧉1ԸkxI!/)uJTm sE7Cj?EXzf?l^s_);xًٳa'fKf`cfKʂCgy!$a~W}g{e(]P;# Q7la
+8
+` xd( yBr&gp>;~`}juBR*G!lu))6<קix A;/CԞPH i =H1= bPz\
+!: .񑈾7შQluXk@q
+,.`f@
+|W(mj$2_+ϒj= 7ewbʯt[bs{3ilE q`B3@{Cag0Iy&K<^RKe<"ywqEΤ*y{bVeumus]E.Iv 9Tҋt[@@\m5@; g5,zy C^p..蕒\Jy%`ܡ+8э|U|%ۤ;ԞޓU&?zY'qϙ@ZelyeHNι`^:V|`~yIϴn)0o$t9ͤh$j )Wr+qe)]bBȚړ]˲P2AzS
+<@%e׽+r*볢CR*Uq+RHs*riN9$XDe:5}km4dO[iAKFJyHu6(̌WˑJXUä+N/2XL<3fڡϡݕhZ-9А"Zy
+=VCM]j|bCڬ؄#ب3kel^P$-*U֬\9j40sf-EhU1
+g HG+@_7 Y@Y{Uz֧u>w[1,b]YHLelQuҬ`ZdY-IVQ¾guDY@< ␋
+_x:[9pˣ!5Q-e'&
+㤞-Pq$FDk
+(ܚ|9ǻenkxn1P` #|"Ȝ̍j]w{MEP[[L('1F:רgKjJPER+.4ŧ3M7XN-Kt_>kDP"ga^c'qqK>˞^=SgsוGŜ*OJ)*JS9ZSXW
+tr]:ǐ,ȣ+*,4EC>UuӜХKe"[
+IgMk@76޺|tŦڳ1ѥ|~y
+M_La˭LQM-àͥXL$}9UBȹn&;t$=)Y-0epD`anj{9vZkgoaGQudC g Kv1[F?!RS
+zdH4%Y0aN8u)H d9s8g[lIJŴ\u]I㚚G1hhjsP+]ռ\}xn~sDr^G{TAPI =uz:ڬ5>tk7ͤ﾿Mw/uk zDs7u#)y)6YAO9e;푷T֦P{@!AsSwZCRs?U O>Rj&;ߨ}M[Z
+W}^w76MUK,Ց=8RAbyڰsԁ ֫ uTqZV"D '(`A^Iyݿ20duQ琯UPi5w["I^OjfƵ<ɕawY9*y;zZ]k^wiT4لݔxwg 10dBVI۰ՙ!NG|=xa~iw\p7?W^)m,m*m+w4XƋk/ TA!GRpn .q.qst [q3c>VFn=RRL{ e"Ibw:C/8hΎCBh$3b\PpJx֮CyK2c~q_vdrT]ptInp<!IȍN0Y{،\1~dsRd }0b(|(ltT%44_+gY)FirM2!s:ω}
+ai&ܖImUlDZ1XKuZO;rpl@}v;nS0q)
+8NaZVha Ep6b)f1D̊pV qURV@f+_}냊5^Y z4[{།.N!nQ=A)Z64X=&cຄ
+/"˼6pͶBhrwr,"mگ78T:M Qm_aΆ& :Tqe_!l 8tC`d G-
+mPjbjRJTF\G
+/im>MKH{
+D6XkBA2]d (["O@~bN{@i 9Z F?x9 ϙac<M cy*K"ِ^r۬"/ccWȬ>iǩF9ݬۜ{1HH@?!i&Ri#g.Qi@sTnBz!<y1v> eJ ?Vެ#Cbhw/e=(}z,~L:%|HŞcdA@6}GnRŨj=˱j*n_J2}rcf32gҎ$MIٔqQ~7לG᜻ vfOJsE]Y*HPkPNaZnZweCI~T~%c"7*kHNT$Kc͢ܧEw/ sGxvt'g@B6$7ϰ&5oT#G:
+k0x QbF-&*E jQQDkbaĠ8?R9Q_3kỵ@` ܦO_,Z_t86]aɿe?'#a <RN`V0epIt&+٤FI7)DFP^2)$9enUH4 q!uL(n_َ+;WcT]vgGjx@c5FȢLGŦ 1RI
+.IN迈< Ed ^mdF1Pa]{f펎_.h"&% JL8YVE1F*dޑ YbS,A u-3АGrkuAK[~0zd{dڅ
+U{}.ο2HP%Gs%F( 1/SUJp `) FV"Ѐ̥ɑ+O湖vNYzrG}úMdGҩX\ʇ@.KX
+C, c L3EGDs#9hh>dëcV[L:<W޺^^r M&31\_.s)"$WBI) 2_F 0U8M_ "X =SvXkΛnky^ٖF+ukQEov1J̥
+)
+118)<^JH'HF'阵(|x'ȑ,Р+=t'nL}eYK^mwZ%.DR/XJVltKI*q$X- b3'a\tZ
+5@; A_m@%kPkj~CfeK0Jjn@A((g4:I?|kXyI*x $%Rtfffjj3Q*jS$bZ\uab'q(\} Tp0zSs( 2A hBmT‰c4탱!]~^qD:M"!#M)Xag
+'d&n,D#fa$ȋO0K!G>(B'j m6s+.\I9MD*9N` (7Fx!$fツ^
+'c-uh&W؁/1("B`p7Yke9⬐˶ETxATGLroc?KO~K RSS?{i_c#:u6ᐼJUOjoSp
+'r"Rqΐ1QcM#)'XkF/%mG{~B?d%KD.vX5u3Qi`slBE|q볢0H+z/}+K~?Hcd`v1n O ?dh=L-6kq=NƙLR
+=d,GJfb *`[%ƶh>U^ذl`=>ԧٝG0odg>$nޤ__I\2s)
+$Z-2dAC.q {'i:&C D,{ږ^;2(+r9gJ'
+*GUYs[eu-FvAdOse}N6V i(&A;}_;c䰛p­s}Vt*YIVe˯W6嵨~[TsdJiujejekq@H[2YD,%!iAGF>s:jh[i~W#J:Q#gW *J-eٍŻuMj*UgirYB?uz@Q5B];sk:
+*HDP]@?8*~Yѳ}ssv: {:,{~'ŠBzjZƲԨ3Y i%9ՙp0W(D/D)췉y@4!M?a{g6-—KR.~4qj4h^\:Y]_^+(.*N/gd)ŒԌ 񟱒@:mCySn~c+ǯx`q_8ΩZAd
+ёTaiEfFajŜ¾#E%/KiG $I;8-88 w>\/~e*=3rpAO^?۶[cK8!)LjFU^Y\Q/?//[>_LRZbٛ$8I rԫ⾶oý؁{q{nvh䘽a^k]gOhV0qјĴdL^M0TWõO5Ki1oxU+q@6\ET)I}QFˣ{*޴!ݖ17ݶa LjiO$3#>$Mr,ȅ#q)MU2Cu6d7m\N ;~8I j<z<!>TDfl\o,jo: {FeDzS{“zbb#; WקjHjNgv̦_ -8$t%diF4;$ݑFSh䑎T^Ŗ86_p& ׄ!q쁊D$߁!c`V761=/{5JqP)^^ >;JBf6gdtmB᱃F՜ACƾ,ǴPOhޝ6wBš(whñԉ9mb%~cPI _}8-ۤН <F=Q+߬O8)4miuy(<4' +d1*9s\\gh'ع_l{$2ZhBhFI+D>/οQKrk{5.T@%uR=w1щXE_R^K>KC  />/iE%FoZgaAլ HkU-ɫV"WCW9FHՔ}B[Z~Z/9})gOrveNfB82GuRbE| |#5lYwT [`wi} ӣ}x={ɏPcMeC0cy^a[I2ކP_B-7:=P&\hΆ80dWPh' bpN't<Pmu༮-t0y'I7V:VyD8t p|PG."IL0a<7y+Д_*bTmҷZAV (fMQ4L_nHt  #Dd\(YNm" In`! 2Q䬁"od `n2M&` Pԇͻ!+iC4+kBDud- _F(
+ TnR7X57Fp.0d!PF8;!\vj@ndʩXNNȫIC
+*Ȱw;9]笇ظm@X  o#D
+4/qN6KLM()|1L҃"_ǽ'=zC|KxEN
+i~ h/ykJ=@+H p }F@-afG^ANE;VG43%<9jS]CkwS΀ȟ
+4p1:?,y7s_pyP]yW~1GyFԦЎ'XGE6&Z,L( %;Hi{I 2+F,,jB&)
+nE>rSiT՟՟y z ߾C7u27ۉZ5/[|ٲ[WjʙN[QM*jmU-M-4cR<7U>42_%di>
+35LA,ty ]lrxOgwۂ_;CO=aCAֶ2fS<֨ThX%B}0/D=$קUR:U)?RHӎ1thk
+1P= f<^g̍Kv;φڻp;iSe #ݓ &ZJMr`:/2O_^*yNi7.*a^\W<ƴH=;af~.al̽s0W0}Wu8/l_t.ҳWl:j
+,0Et
+/usYq[[ 7sbMFuaӶ9Y k
+U E┆u9&NMit tIn3 .3^9w^SǰVՑ|פЭ37\X%XQ"L{~:ܮԶʬymdmC9TeZl7$chI-if+ qA3$MScCV{n Э _}#/zq|εIJŕJ*-A#HOr{kJxBrA7좑ܭt~NZn2I##rߒwYQ۞7<{<L Yȴ{x)}"I_DW%5&u}zR"Xp"]~$ҤGHsaF%z_ _r|2U^~AɃB%h`U,숋};&.v`o?O]GHO#'oLR9<|5bOrܬ W 7/򬳵b;6ItSh <eڵމ-N?#?Gk 9:"ݻv.: B!B^=)TLmMz0'r'LӧSHRmEӹbGtozK^șܹ35M᳝찹 v .5BAEB"DŽl Po B+Mg&<JhK=@±aI۬
+.BY
+^3C \?bY>.Ԉd#hݐky˰qooLlqd)jMlp-:2{-O)zIH8!J"HX>--t?x9g#0 ee:@i5 !e96̰p\C8hՇ" `Bʂ,R)!*Bk ;[s@\#/x7){4<ǃ.fqq!cBE1"ST,B%W"=U^jo3v+w)n࿡)
+>HmW] f{!և‡ T\cMPCj1de6C!>Q DHhu«)5QʤL 
+.HpAFڕLw8(XahS-^dltf',rw6&`FQ4%oL::!Az;׈Qɛo%Cҹ7I{-GK+ D4ȝP*yLa5%B )mP1oL6Ɍ=~iޫԆ&7rGQo1IyCWW/dclLg)BCBt!ő,:飔c}!"LPƷ:̚ bϱMr6s_`kcN8MEqkKXܪ {H @ b B-@"D@D
+A^VPֶ^u9ߞ3)1 ŌyD>$ < {>p}n0 1[ n32+$lw} b:XۯQ)GrU`0kq&LxO1 Q f#@O[ a#O}kTm=0}ډ}Bs"oףX}i$6hWѰV0+
+s~1e<c^{w;‡޶@2|)ҷld9\:زsW? mUwNxLyZe)~W#31ϫpݜvf'eaOγf_f<U-",@*2̏Azoh ;|g%ϋNo5z%EOHs ]:E\j1[&~77n6~kG@|m$D
+㐾^t hXݫ=)p~\i)m讱 H^eWB
+]Il. cd5Nĩ[x _/WJ~ eT!r 2=H@F:+C
+7gUTu|L)fxJ.ǽ']yAoV)D K1 ѕJi=,?',
+uҧXKStrGÐHS"2(Zl#76u{]v2ξַre~j>9XET2K^Q9A~E6fLH@S@V@((C^
+d!o5n3aNKǪ]/wt9Q~uqXN-Q1J8yj^NB03S?*?g$z$ {
+:G.5yionm>KWg(Kɔ4m#%']ƍϬfeiƴ$:7<-3.#%. lb$ zob0[=\&:7;/j;E W_v_U*є(ɧB-K^P•Djω^H;)ʋ*|˔|J d!"5.
+0idҌ,M6ɍOhoht#$1a-0 pF;0r]m3`fouw)^lw+{/J#E] J ˒B'Q:*(v#-3>xJ÷!a m
+
+|:a9z
+'\y0.+\2lZb憘gMOsN=ɪHӞK{*+y&O\0TAtLi/vNuĂ 7ucżsJ>?.\0s}Իym9,?-wnog\?]}oD|$u0R.`ḁS.͇=/4[/[$ɿ(*n)1wƎKNw=Rv<[
+b}_`߻FܽR|~vLU k,WTy|zߜ_);qc2i@Vs%dM}Q ỐOsڷYVp3? c> tF}i1\Ci`mrkU{*7iw<狹_(o3~n9h2m:oHXնf>L0
+NZ 4D#/C
++2TVkrRtLgve뢰%1Gz ;ryr)R~1)ܿ>YƪLa&KEļus->TC"{٘p#W7 ưnA:hO6zIw VzE':J <ZY$K_ɗ0!Nvq`Xan~na?C3/F4\U(|ɺrpz*у_Zo2}NfFxDkhS! Uu]"Lv/⓫ rA*fIvSHAy%<?\fg=0_#B'-͙:xwj6XԅG]; ÚcZ;z-/I"l[+cʼnnyd0VZTWTX7p^Mnz<';_"Q1* P E&|Iс˦nkaa_ Syk^icMCc 4o8D[*,cةEaIĢ9nb2'Efz)bJ?RDUp|M$TW<mՀ0ק&0wPjAbhqÙ%)^5>9U*%IeQ'Nt=h/L@
+TP![
+M1e?0Y~rD#CdUV&z 0_@]=hxVr⸁pD0`ƿޟ:esZdjJh*dAC1b)VO(P T{kn~x{oeFgC5='ݼios~)wC,D쏹k5t$9ǐ27zO17ml36E|blՋ6<ȕ~WNP0- 7HP5 #(^C}lgIqLO΅sd?8{ &`V`ǘ9f32g̠촋#:JR%n+Wq gC5(~/r!Z Ɯ% Ygf~,"/|&x6dtmGUnߣCnO6p`sY9P@ -HUY.B )RyLR7*71[hP),SOeNwen6sew,~^p\O;Cde.|-{
+5C^pZ>}w <H[_
+ְD{P9Jڍrw2Iu|u &9+m8)@ g)k
+ZH2E1ʴ J
+RV$4ePͦ24/-!E: >&ϵ|3So"j9O=w60G=/xߑI;vM +3 " D[1`@*&D3>+ߤL_$~YT|?V.z}nFs#b{=bwUywTyߥ7 Q> v&c a$7d;3,!7#ўL {g c NrPչ_Khȹ&v߅s1D <}Ip"Xˀ|ăs8Ép'4!ιtl2K %dsobɬ&?$3K/w)|*Ι=G :Pui㟈&LUw( dx CIb̀B R2
+{ƛ*WI5GneЌeJѢDNgN˽^w05@rp_Rhhɠj_Ȁ꘴?lww}Kop[b RH~6[EFVQlƯuNV+.Y*Ns:v(@Vo?,r=K%};;RC ˷W$VCؓ/M7&wУ(#Qo̩G06NX'3<Yc}"۾|sk}ٍE6d~ޯZz s)e/B;EÝ_g.`H"{dd:}e!uŌΑm3uQb0ReUqhE/ry 5u6rڥY=̾V>ZȖgaks&%C>_GT䷫I+&gRVRZfQ6Qmv>-"{9צU[^RZ*^Q$ސA.o9wGxS#VD5\j}\?!m,DPSO;!oQzR[3~:7SohUڻR]\Qo+/]%n.Y'k*ڤXUMYW0Y?U)aDm{gՕAP_&(TLf ֦CnAlMU``|wBmMIs2<;?n-_[])XSY/^],+oWԖ~*鏬(9]VrUQ.rՕT iiQohjl5M]_M:4:-p|澮
+f?pfތ=!)B3&w7- :íT~!3߷1 ײ~\btqjZVWdx,ҬdX]~at,^}w:}.();x{Br%FeTA:']Hx uE:L8˄M|j2$Z%&EŹ;itK+L)(I:Z㟘75Qp|o~ ^BD&}8jh]π4\nAG byэWYoP|&lmM95qU;U.pu<c{iG~[b.n..zS7dAWm(WI
+
+kmb>E !T*<M:P Pq` RGذst9$QF1_iF}  ٴ,hd~j*_վ5^\#UZ7WU\g&L匩_ߘ:Yl,y
+p@U/ɿ.?y !6>ք!>8^LI dlT,q*+N׶>~LW4Ӡg3s'|:Dx ꩻDa5`
+Ә+{XY2kY|uS}.?@O
+5ZJTP+Л^4#h=up,08XKt0Ļ75LU$;x #0%uj}4d/K P@領F)AWJ) (
+qz:O|I~`V=.h` t "7N qQTM ֆAH$2Ī3l5c ~[>`-c5Sfe~ #Ɯ}Ƃٽ
+
+ nOY xb - ;jp:DUʎ0\2ckY,ͦ&k\wUEbʊ:NFQ _r*(VP~[|(B0l5g>BU t]*щvutc%߱0Nkc,l 3R5n^Ԑb]P+uH<D5ZoaU0y,h*(Kt#+~U}ͫ
+_@&B/ncV}4I@Оn+@fwm!mѦ-IVҦ *ES\^R_ڋ/SPyҾ
+Nًo.3G\5RuZ;6'XTmڲ%ܦ*
+އӠ;dqf3Y7(lЃrfnEv8wu 9zkWHw{bJS:;s ݳ UWj7IKKPcʫX Z/%x& = p6&zaG5PjW:jL8r
+V.`j->d|&3e#30x=KvHU=ki;m_<e*դ-OزEme8i0,)<ۀC @-?+mZI`u'6@pqu|'QU޾Y'W. ȭX޳.$ܠN+ O)?/o Km
+M-2Tn
+>H[4@oƤ`GLspf=1Ze
+
+尢O\\DE
+u6~3p:7?M$!q6OFƒ5(n?`L<h;$g/坳'9}r羜)XLxs*}H3-)䩠Qa# {d_O4{`{95(g}/go
+[#|Yx
+CJdCJ,K!).R.>H_RT
+DQ!5({AW ie$J/wwT_ZIq<xuاB/Wk(%R"WKY{O#o T?1e(Q0dkP6 ;`͈"v&'3{@x1Z}&ej*BtB/SPTZ}.+m hDzW?䫿)*E2D
+Pcԃ
+:ȟ@=eOR
+G<zY([
+ҵПƃL##Z3p'S2'2h,ď,Q ;mu\ݾU{w+igaˣlnsۧ.eqhWD>F
+iՅg$Y(2my
+qAn$/I.ovɒkҳ{=Rd)=uMaNDJTĆj@ك`g>:kQ;kiZ2E]\PUnZV=CU`QJV$YNM.)g')v'(ds8]ٚ&3&I*`Fga4g˨}=@W:Eh[+WV(DVerی"ԒJiRqì5Mh'*o{DZŜb'z
+㬖u1D mRUjNaug}Pw5n|5s U3b7%zCt}v=7[*J5PjfqoEz S:BL6ψiO3ڐk6V*Y%]ֺ)s`7΁-Zòf&^l'~L !߽PvK'^e.=ӑ#Af'OЏl=R-4+Y֕mYdbkuf
+ǛCp+WC|;wTY,,33nNA _z |J>e|5r B<x GhfL{'0yZLA8 c<
+0~2$o򏁜a?O@ ([@z0F=7 30z ׋z9cQ- 7ö́1j5򄌑+)?W $ïK(ۍ(0`
+2=1 |f L<B_!3z3:B$ՔD(+;`.e 3eэ)߀z]" &DD,=q!^d1 !5.BCNMĴ[:8e1 OM[1
+,IK`btV`Y.u˻w52U&߽6]n|ѳMF<My~ozIfC޿Ʀ76# uAmaG-Ƽ\%9Zy%FjM0=favo}OOՀ)c>׬>~?l\Ȃ ah<N;: -4 ˘'כ [ 0X4[>a߿~}'l_o0'([wb+`50@hlFcYqeF9 3Й
+nn
++ogY^G-=w[k [?0^c_t-ě:aqFbe=-V؝՜vkNo o ;(61'ǖg;͑ض9
+|/=7SЅt>LCO!l/5ѓc;)մ31bGں=[n[cm\L_&X'\=* 1X
+ Fsr-PZvs-9!Ek)rkCFg\ktqC-sL_',IwK]uҿIoqɰ@p'؋iqꞀٳ
+*08LzпdcE0`
+;ej׻ȵe=nRq4ew8],X\iP%28Z2 XNvQSK髂X& Z:\Q-Qg9(J+FuiWIcn(YS
+X+
+8"8KlUk+.D:Zu}_Z?y}r?h<Ozwpf&p{|ΠeISaNJ >L1+'Ǫ$;LZ_3~Pec^:A?iÖ8g~&h;+Wƒ&^I>7AR9{u{d*`}¬4=f15x/j\jѫ;|v G X{EwϔLmn5l%$ ݓWoy?8lJeҁ529ega:__qڋQq=C89NwnXۚ]2xuj8QgCls4و<+al܃?/ b, q=0DGcr504/"~}Ts{re.r,EvܜGD7H}zQI;q-ri9Ѩ }>mmV ⭱5^tWtSYNq̟Xbߢm_6*m管;k莿+gs'
+d ;H΢l@@ѺEA0[TV%=вdKƠE4++JDuIU>%Kſ+
+T Oﳿ&3{_3[_ wE .R.uCKɗ"ۡrAWY E ] ombj/e?fSXhf? rh^U?mwfpػ>
+j'hjXU5@¨#񥤆5kxk ^]zB/Hf,d~Љٖ@ˀO&|P:t^;5o
+@] a\:$dwX<scϺW
+RJ<QI hB~l!u?B3LH{B̤) !mYp>:RpUu~ߜ%Hx]/dϦ{̽
+@!nӀ\!Cu~a/ZlEY`<7"{n\$n q͸Ah?J ŀ2EyuŹf)4S6b*B:Ul| 2ۚ0#Zŭ i4UT$wT9Si̴MuڴWUb*PԅJc~ 2W :b\Qq}nE%󖱢2YQjPYl:e^Ɯ>iNs8ar8.hvO820|aj|tmGF8BF"xY;ը&(n1PO|3Bq"zQt8/ǃKGhE2 jĪ}Eb'{c\jl!B!$K@$6Ibر@ 8X$vl'Y&vL=i&I:Mm433{y9^+b?uUL$L(8/~?b.JϤTJ> FI l
+|,Ki #ޖ_LAYB e"dDG_ŞvQe sIZOKB/yȝK3kFJ0}n3уL̽{T
+rr\9fW 9eAEEr5 z!֜l=+;ŝ\2S cr0GY)kXP!JEBl
+ӏJ!@xU&K>zpu6͘79o=Flc 61]ASF4[˩
+ʪnX;恸Jqʟp|&]ՇȗIz"CG/_p3u8mx 8لǚyRHG"^mQlFY]gTֵL}qq:46ZGHX#*qe_k%xa>}
+-Zeijg[nAYè>_b9Qe5^Rs|^b;Gxa}x&ּ+?1s [ܮhhw~{I6W*֕IvFVvǘ:˩
+zy{-ns[
+[gD<G(AxsB<!@x!=0
+A;=g% pd)^g/=vE' } /}J z:` ?78^`f
+T,||(I*r/+PNi#*&b3&[iRoCyة5A[Sxl8:80wp7zwa
+IV䔕J;eߊ+bop$rOT२]Q;v.z2,c)!+}s
+ wu콚/$'!
+aGJj#m yH[CC/lA޲ y_!"[{e_D}d{ 
+ͦIٴ66*TL';<wxPß-l ٦-/!9MJ%rhSa޷ q%Rճdo6z'D+7l9/6BBIhZ,=eB32X'(ar9!^H3DGzpts<l9a4 3F=@:^\'WmB
+鈛݄p#?(Iёe=>1E;w<;A&W E8>UQ1=H?y,NxdJ<2uQ-R.iOeEBvWjz/+/ x=K{+~rK NX2Z*L-!Kel%]ϒ%#/X
+|*
+})v\UlSl}Mbc#?4esZ 4tU\q/Q]}IEcdOΔﰦ)[+ZW(7[sUͪ #s5oPtU]*60>kt&T
+]dLk$d>=H(aAha^S}ZO#=vn4ݛjfWpj/s'Ϡ?FJ׀7GbCdr#H91Pf蛤^'Ygi3lz2 h8;8R}J_#6{܎
+|`BV `)-,5!Z>ʔULM7]?1nݗbWq\>r{c ;ғm|/#Y.h=?goÌX<5/e GAkТ!#@ Az@TBt]OZa]-3umn~L _|?~i扫t$))2k89ǹ0ՒJT2k7gk[=LڃYSL^&3iH$%QS{ Krٻ>5`:d1UKkR$iAzc~97⚣[XVu'4i^ԛ4#uNpK J?sYIjeC?14LӱظP\!?kԜsr2\ VAZwmꔌ5I^Z Iz-Y/(bkی8(bq1;¬Ay</,Ź9$9 RSv,3_nvI_^,י*) nZc:Ѹ#M&x`D1̧LڿbIcHQbQ` ,--),QLR}~,=?15/99UWH]k=OyƘT/6 *5 apݝ' 恥.8VrVbk}9%`* BfIH_PfZIWɖ09%[\KEuʘ-nE{# ;E<]UGQ(" ed\gSVkzer9*aGF4*CD)⤊EĊxLūr*q*/,ۤ_[^v-,-*TP[
+m t3
+sk]C[WQTYR3YsWZא眧'J#onX
+PBEE(z<(O=޷z]ɸ-w "N
+z%qx:)$D-"d% d+APg?u1q
+xk%w~AE?4tN"|G҉Xy8&>y;uvQ ?
+~ZC j]FҊ6\lU~\_qQBYOU"1J F* !zR}/&4
+O?$[FM|@380J]b^q!ވ,fM\2]WʶUqKiB}YHҤ_%o5OW̸񢔐O%RkL!jy{Io$('ClH&$%IfQmNpM<Cc6̔6$4f&,'OK!O83\P($>$2BZ
+P )Ҟs=n#ڌ2tŪh1hNMaf3sRNaC1,36
+K5e0j*`
+G11E٫`
+rٲWZPėX}5 + .ka][׫m]NVM_jUTXE gܤ:![G-^]4:u&rDiי; ^Q%k}j_ooUwj,\ub3^wY Gr`C3}Qye1LȸfnowKlE~F/zGn)\)\*ܮ6,x2Js KtNRS*4~$'j+텒x|Q䋃7q2 t7畖Kr!Yw]Q{;TiޣTďQV"_ <3:S P4vNO~%npUFQ9FXҘlRir* J$?IRF*ErVe*IXPT!*E9!{:;)`Tҝui />aB0H1șldBLf(5\ZO N$I2Cp0]<^PU T$
+QSo&7h"i4L#UOs: {\?a0G!=p:c 066)a ~nL>\yTƟ3,
+ʦ0 '-Dk$F5O465"eE 8Hpj%&*.TӨ(1>
+&y{E
+9^٬IθI&9]hBm^]u KY+ǢVwdX'!-'Y00g#YT:Gaf)r
+/lV&TƜҘXe\*T%R=PC_7f1&yeVr dia=H>}BR8Ο,$}oɽX{c?&ؾc~RĬvywR@Դ`5GQk׋WI%0PCi4K+MA/@t Cc4b嘆HG;rX/usRغv)XHk}/q ;z8x@Mi3_pz"©G3*ViDhe
+B*"r8*Ǣk$T͆U[U}V<B@_.S}YԞqp
+5Qod%00o6 r'Է%\:+2Avk<]SʄeUe]#9K@U{!my`<5X:xk7
+fRg>u p6Q)\s;SU[whWp}+\D ZBӅ9 H^!M?Ө3m&SǎXC56sjnݸX|8%:Uj- @oX ^zXHo2L77Z3X Ȧ
+󸮥F5*phf,Nc<Gia& UnOG;<#pW
+ .+mWs)hQ窏pJ'T98QuKpHnu5uد9:P#"uO
+v"©A;*<h?p{
+p-/ XbEw(Ke*\y>'Y@*o1zuAS;hvcGbl ^;CQ T6`sQl
+n?Jp!! "',Y<8}hHBmcj"G:r<QQʣ>Ħ lZDB4zT픊51n(T{GUHOic{WT^o}kd4hg7Pih2X8 PbxņiuBT#'Ib9/a2a"axFq-ENcEv:Y=k=ן@|U߶^pĦXcBIXcզQ74QZek!0}$-3-rPe*S,1mU,65*N*$Pf)盅"JCơqs5>}{`%v,iȵ2j/e[&IK-Ŗ兖 y%[a)-%yjťeyޙ{D K] qDpFf`fD
+5.Kq-5zXTkĜ4mz5m<96ij4Iۓd
+qJ4u4]R՟+ ozWryjH"> |zemA6G#ulI1kLslJFɄU&3-X,VUZMI[a(wcm<+1Vl y+6"SH"?7wg:xuH?6#<MXmE%4X2EZ
+S,7{2
+ۼZ[b~^*6o]BeKa?LK^Ze}%s4kahEI٦*t۲mPj+KlbͫqֵRul:lsm/ԬkCzu]˸9Dq-빮l-#QW
+eʔ$#JLHY"8Xr]+~)W$/U~Q)ʅpEy'<[!܃Yż1t7|ۊQBRu&T@j:\L5IRԀXݭRYVxO^YՐLܢߗuJ@o/K} J#Pdc:9pHG#KPX&.q5َ,Gjo2;uq.,q3l>P/^0GO4l^\NGV G3
+w><\$丌X]9bCJLWcqҦ6H&gltҥ^եOuo4gH꣰+y|'{X[rzTB^i$1qO➉ŞdyRaX,|!S$.TFO&ͽNkpoRrFIII>KB^ޠgS@-H zdW BVHX+' ; <)XTeʆUVU(ebNL,n{OKqޫ)ڸʐ6'.S8\>84ʕ] \n
+Dh9YВSG|kwqlCyeÆo$O^17x Ұ,\p9bu,ǙU85|z6S 9G#qGF^Qߠ1] sh!ȓx吻|!+ȍpy~.)DpM1lt-C[ :jtmD6toO$xm}qoc<6WL7OfRߛ
+]&s6L*gsf2ϴaR4{bW*UY[Q?kP7S+}]s_\uS^})ZO.;v{{bs%}4h1' >VlDoj|P[*BoηUX3P>G\=X6rޏb|Y,yP<\{-]~tS\ `<Wl?Mza?Tӡψ*? *ұ/~jR̯B(oJwE}bA]iYb~<@}6/Gd&8o;蛦
+1YV%nPGQo(D1 rq)jwgeg#߫v,vFqXLl
+G5]SD2X{sI,βoWLj9.]Þ7$L%a#!1p%`4kNl<!\*jbYҘKj EsE>y!E_H^X<j#5Y% `Jc/bS`H D[ZӅ(RAc-"UbuBǤ+RpR9_Pp| l6
+ iG}dc͝>
+1cx@k[Hb[fB+:q#1&.헥{Rh2q<3I+s#kvxa>Y=DlvBP&-~,"d%ĞXVjI 5bԴc1ZiCvZ3\o1\r{y{lb>Kz 4&Vq.]#4"!RhX0&>'dӀ~M}̽5G%]3G%>4G%VhdeT>`
+ 38E<gTJ&;iHbR48%LSh@jT6Q}Ҧ+:mҲ+3m),)tUShShdArCc#˰
+ώS
+˙МSPE9kS+c͹,2L/RXݲ|އB}0 f8*]A
+, V@a Zƨe|,3mIU7"ue<-\Ga<X|"i z˗ЗQbjP"M1+X aFJԵC]J}U"ϲ(y {Hkr)Osy)/Sf9Cy9~#ǒr*az.nc[5(Xhda V>cFgWA+%r:!-;klql}Q3dcMW2UP
+#[yL@^RE7_W?7Hq؃R)`+5okTg/S |!adg,@PՑXuw\ xº2s/)kS
+܍>iޖloaHa1~R=Ci}_CP o,^Ç<OXI-A GhFoz<^ÒsdwT2GvNI8Eag0?:Ǚg
+hrM@-H| -/:'֣?<!9׉sE %o*q|` N3 sѼ&'gSy\1)OIԾUCl'F h§pĨ}j0,]o9-4^W B-I |rvw뇮;y:\XJgp _۪p{f遭=5b0 )T@638=/0qLY0rC9+ln׿(O=ҏwvWrnǥ= #`<L7 2a!/c'Dc=Pڦ[uPts3?vVFk "`<g::Ih;eEEh*֯`MbFݤur[׈><ŕldllj֟%hMFg&9GEq\#dG(+t|+e`؛=vEHrsh@:st4CjQNFi-9c<uj5Y#
+ Էcbz;#w!`sqQDʪo1G'8N!#ZkuX9zZ{KBASy[x݈:5ud]hA>֋]DNg:ЙCGaoA:N:K(gJm5b>i-mP՝ U|ǴUl';cWC(<DlvvڽZndm ѡPVbU;U&wܭuZ;rrG*u6PS<B+
+Z皠nZ6_+T[JU^bZ-8UקtykşVۓVɵ׈`z-wV6zkuFXvQ%ݧh -NT-Β'_>NzM=~WO2|u{7W
+h- ZE%Hy!@$
+6g-=Xaڌ
+pŸQ ?|mX
+o^:"YDX\f!U<ຒX`d?|lΞH)EkӰ:;9:rLh)GCN9u]Q-\ʰQjIY̡TP/*IT80Tf?گ>8b팣E5yhV-O j Q`e<y [v&*w _4#2]Y&H4cO79rZM;렂Ʊ _39j&c6.N:tpQæ_/'EYQZ' ̆wd%["G+ ?Xu ;i& }60(Ӱ9lT4
+a+,ƕ(5`1h(.z^ɊLC2iTVh#HEc[LyB~'Z$[s8ܦIpf
+bLa5eXX0QRBq*[`4(0zOd:yc/"ɴfIJG=L+s3Y&Pa0JR si:K0PTf̊ʽЗ?]yX}"z\loTBe(me-rA/{"z`-]c,Mb{,KQhO|+UA[YJ*WC][:l1pYUD+~g9 ۀ}M.G}\fN*KqC0TGB_]"hj!&y5*P9P:+ZlW3 tu WH=*gDjUO!wIBFs/QwZǀ'Ɇ5y0(Ȑ_{8CAGL V;V߈
+bc'..v7u7Rj<xdL{}h?o?pl  3`!3npHB\}C~F
+daC88M/#<hFXHL0oM /s+<^f 9ZF!00g~?lJ2Ǜфm(/QpaAF{|gn8N_Ifs g&EMN8/%6Ifs _eKY`9ϓɗ[3M?j8bNS,돚Ԝq-.#²bGw2) &8oM-^|x~wͺI3sGԍM}c_3IB>#%L-[Jpmcr60%&^JI$"|HL8x˥^ȩI @@
+WțO!S\Qs2s fNKƟ/~lQ@RfV_ǻe}ǛN؃>%qαRgrragaoj^ԓ24jZ}\ q>)tvpgp//^_ğYopjG708=]O͙xԓ3I<87+]Jjbf@FRcn)C\vV{k4Wy? C~9wyD)B8%3/ DQU^jM]c:ut='ye&I-`S<m^i:?_ |px\LމR윤B=Vt8ǃN2tT9%h]g}w6vc>Gch"x^Qy1H}^Y:9?"
+5f4`Up>V.X6!QҌ%!X50<_EugxG|Lw
+d*g> Iǚl)X>#"BTGP\,SEsajTϭCFTmCyTG@Y̋ Qo
+O}؂ձ!|u iKd煕Q~X=u1cQl2jPkDe qN̏,Q⟠Hn (D
+•>.SL >{Hh%kS'F$ $Ơ\*C4 z$d(OB܉(L\|2dp:F87`O9Ia0x'29gIigk譞>'B>e`H![BIFlp&9H*F^r%K))w"KyUȢ(S`n:ظv``볎>VG-}+Ǣ$t(#R#O
+J٪\Rݰ#+F¤QsDyUd _Ad
+:X5)hĄLm6KaLAn6tۑ? HcNAF?V'.w/Zd=F.
+}Bk\q=LH5|Q4@A4 " F'Aj?xK1#MQ2gLdL3a Yt
+ZL ԙyH!RU2d"9k^>d{|~y0Bc{?wp$(^ J5ři h!Pۢf"Ֆ UlRHqCSyRHoԾsGBl$va3#{/u+9Tq/𹼜<\z1:EPyCYH΋D#
+rGd $:m:!qAEk-b]g|A#% 9i?wQ{">9*VK!G%=B$A ;y @TQ `NQ#"7#xŠO!m9B!H@+9Κ~/;9_
+4s]QQXWeu
+dά<Ȇ3D$ͭlJabWS2mzAWڄf_0'xni]' )vba'luPC!d|R[Yp156v)40wIwv
+eJ]*TNuA2_T=z6k\FXᷔaw͆SUnZ=̣U9R%3EiI *4,\JhX|~C9>5fSvVfspN_FъpuQ7N :s<y]Fin*KUtei_f,e
+Xm2WzJ:w4#^ocZן཭R$x(0@s]}5'df Ӭ MVFTCӕ6[3
+5=|WFjJQF~Q596>h@ h;3bʹvK| ]9ʎ UVd21fF ֌=Vi)=MSf)kRb5)\c7+9Zh|qݚy};`sآ#;EXojz\kj|MV*%~&unS5Qr5.at_7W=hTbF&6jdѳm/uT@T@S2 0 ]`H䲨1 `y ^K$Zf*hY)=Zֶɶv:k%ִܓ?>y}}˚ƎL}%q4bb\9\0 -_EUG$+7ª\eGڔYQ5ʌ5EJTjl,5?NܛEra #NJ + q-z
+)?zrX͎1*#&U,*-ήԸjYR)JNإ2%Șx~)S
+nWfZVh<))}#`/ߎ2z32G))NVb5Y]`Ru͘(Eg$(*3EYe9FY5#kBQp
+><o)8O(^`yR̳1μgyĘJ #oELQxNr437N3r4=Ϫ|SP~55UK+8)s>yS~NC@SKoޖt/*zXlȤ,bI&XP,cR4QE
+*(M+NTV)
+M-Ճ%4CJɧ䔼K>yC6&35‹JzYQ΅Zz-X҉oya+>J+)5I0=hD{&3SV$_VqOjlyʳ<˳:8e ,\~Zʹ4\SHl2y1!P&JOոJ? HyU%ʳ*UcQe{"n[FVKիUF.wZVmhȠF΅ǩzr@LI1Z(7T:B(GFe遺 : ;лX_mQg?ߎI~%g#=Rb|J cʥUÛйM\\<lF
+H-49xp!̖bhpj+ވVJxmH25?F5 m [m m%E%fnWS,b5:._B冴O;o-We976q&mOI0|3.O ov 0na` .6t#|NAs45{|w9>k1>$mIgiໝSQ;vMG'$]0P`C@uQN w+
+}|7[ًO
+FwJ]#y‘PRa#> eԥ8 t4v71qzjiW|?<g>-/҃
+܏WO1xNA^SIAN$'gR,Yhmy׵u/`ͅ35b%Ұ>Z ҅\Opn!p8>c"5ec,ýKKf+ų`ߐoO!|z-Kp\uCѫ 7RnWosܦHv;; PeP hfh(MEyEևb7:󺮢gKp>5HCax$q`\,<u}[rlwq8%̾F^F)^Bg~I AgX>?Yu !yaMZ`{!`{9)E h̏Qh;:.iofp^'Ѻ7/}J3G~1`9U~ YKm@k6Ӣ?ڵzGOѺѩlS$8AQn<r_ w_pYX;|r"𓈏4-"el
+ֱc X:V;؎t^*ׅ5h 9$ V,a߆};plՐZ| -]ɳ|kyF;lݘ؀m@an_L b 
+ۻ3>wiJ>EOOUE79𓣛}!\+q~F6e;K 0"WҽMyޑ`HRsxx/Yڱ8]c~9Xze TtOҢQB|c29wxz8-RLSγhqyi'Ooi=lff1s c`4!F?јop4Vc:Wy,=|`oŔ>1 D`1*u`6ƎjLza"ΏnhF0pC LÒ{_CI"%M{MlbdK II%LTc,QcI%:0,APڀ!i H;0 EldcdsI^EwUtmDG{+3wLYfV 37C;1"##) /ՆCГք6tw`z?:GϘ2іyYwz ^ω?9B x6`uKlfiq'L) (R‚@v9NgѦUGޜ!4LE4?-xo s@Ïy<m66(dᜡgmGJ**%V@n rјۊ.> uQD\, Nݿ{xmtMc[:oCxhdj2q@FV Z'
+ܨ-ZKg1TΡRav+(7~@N<_&-7p%~X R
+c;E즣(3@y6uX-/>K%"Y=r`wps:T:&9&*Mp a7Qn.CŅRKlm$iXga]GQ"}opKcm*q-$ RG7u2V<U5 Yfj-B͆b[,nK}0ul ۯ@gǏuW9D($^#/cH0uG'}c1fI(خٞ݀"G  W42
+&ZBw|j',r<G^qqij诲H908wQA2Umu5򫛐WGnMԵǡ= P}uW>P֊&E&.wm  li&IX9㡭BS5uv۠T!ӆ^(Fp
+Ho"!R䳈=%.p$[;xuwIE덂99r(ݬ«CׂL:|Hu!7 yI$lBr ҖHlI-_Y̷۴?77s, ijڥZ Qn Y8H!ůܟd2pAф
+ B
+
+D !L`0!J{e7#bɽ6ɼ0Xa,L|qzJ] PSSm$;8D'!b8
+-,FI> d0 1y7ȹf{5"Iq[\9 N98<j%"j:Ùn}HWdBLl!p!Cm8݉]^|vcwGxKzb%\D ~" '$D߱ ,[L"8[. [d_d]d]- tBFd {,J&Dla,.sIJZeNHڶΜAl\D
+!{\ T/ " ; &
+
+AWF&%IAbq\ZkԘU$KxHjcbXNԦ9{,޷|{ +#
+0rC}eHn NsB:@<@A_Ơ}G{||>|_%~ / .) ._\Z!,8 ]u'0B
+]x: k %^i optDoq>!;p(cv;i w|-88,~>^rlWaد@Z=ZAXf8Z_m&:-D`kwp~ >szK?"'f)X~vcN^F[4Eт&tl2!'*,42"^q6Q{rר_\1a#bP Gcᨆc2pӜ.E(>;Fvf|¤n 3a#<H#8
+-F"t<C},\=;:':4:SpWhϾ8ֲm;Vʛjg?&xlx\G\t<QTSY ^MӈT5M!m*Sպ|.GH;=_:)DZH>)rkKwմZ)eZTmjKU}*{lVEσF]W=x2undy>уnOun5W&h{j3T힫qCU1Bc=U9^= y.RJxh~Km**qt<O3~6+W<Xma`Z̕7/LZ/o*ozjwʽw|ԧP%>S>TgYB*ݨ|V {Sy+0w^s6|;:rT
+?Oj_J#5ߤb*ꛪa}sTw+?\Co50hv++2*3䞲B#u jv}L$7TA* 2 (F588CB)7P9!_) t21RJq%ڕP
+xwۜC^_
+DNRRl٣Zw}L֘Kp(щCp`<9k6d>FBr<̨~J2(-*F)QJ+):C ׀r%j"ǭٴ]&gzWq2}61dZʧyo":*1CБTCd3F*'k\T%b.TLje<XKb*:ᨢ::P+֣yéԠE rf.S_%Xel)!Aq Ɋfh-Plb)j@۶`?P-^;m&-¸z8Z2>΁kJJ%<d( -T1(E͊<'PXXR*4eBRW(8uR)0ং׉ˣ苌XCK:J78eS#vbbJwSt"Sv
+ˢsho]!l0=r-,Re"wE9͊t&d]p(2dp➮`w"?AIp]~/ON)78OZ5,E`l"$\Fy^3$2Od5T'FDzz(=, gB5=:to9tq9so\Y{\Wm!TWje( U@!Crx9l^E^^ǛMC75"kCOMw%U-axԀg#+ޝH&r Qex2DR*
+WQ%+@3T.¤Vބ;@_Kڕ|VKH F7D`aLr_hvȣ<ȣ<iFF6wh es-**12eXI3b3
+x Nw 8 ^o7h:9ϚQL3xm\
+
+%8b&qO, 7G;[s}F7}#8
+y 7{//x8xB/?xxd!]ʥ?8
+Jqq`2ϓ9cʚv鷈uXi<^^G~_['228}@-1/i z]@"b#v91::f)d̲%8 )=`A}`7x#vL*%x[fEA>Nlb=Ӊe2į~xVav];aA-63ڧamFnf:iyZG1cW6!~>gbE,C %F3QVXn8ױwl=>t 3mIB6wh=X)p1b8{V e5YЕ(އq#%Y/>`ݍ.F($ p<
+G
+ 68jȣZӴ<G UJ\ #J7á{6h^b{?v[!{8v
+!J$D @2-Dʂ xPW`k,@9GY?[ԟ0G^m8rК.5~a_\0A O:YT W*N.gd m$VM{Mn+rޓ+}GXo|/DA]U9fy;kfTW5-hr,lSNCݚ;d\%X mh#aǕ~Iww[~8:ZڲE7*HFyb=41\ T3f(8NYɲGNWfd2"+Y&YMj:.,/>R+цhkknтҖQ|k9T(ƛm,S/My2̣d3[n\F)%fĬШW#^wh 8ӂ%mhY y>̠NSikTF.+_l# 0 3
+(0.D4Dwq;hc9&٬i&VLlkXSi&=iZcܲUt=}kPqQE! 0ԩ,+7lFSNx1WUJ3nUK)rF7r+%.^nrn-d<Ffx<BjB'e1Ri
+A7)M٦$eҔiQJ,SjK)~Tr%7+))%Dvi%X_J"uww&|m #2,EfJ JQ`U9@a0f(՜1YrX
+4R؉Jڨ26f#k+;+˳[6~v#RGy84R^s+6T)`9aJF+jS-Yv[_dK5^%o9IE'ȤeE%}$7èl
+l`|nK-<&FehekVhxIqX&(6)G"$WȜT$N;_T;peNrn{
+*հI2dPp<(0C9?(8/<39AM֪lTi&Sy?;pMgq$*rkPHnȐP`~˿̖qHA>+#C *B ܼg9G0s%\*(EYX'btTP%b_qq-OI,WWҍ1 %gحNՠ:iV4x i|U<}/!㤀A+ Р2|ˌ)h`yr\rYX
+0嘵rCƠSW.jB豉4/Ɩd%ӛ BM
+0wE=\.BD."c'1!Mdb61;-s8KpG`O+yɇK*a@ȡ3$x \ \5\t5\@5
+XX
+nm 5ʡ]ֱ@!H]/Y@ &
+VxҏVx£%RZq.|j&UL+q4+ZOX9HfF$|6K[
+^?ni 53|5ezqA#_L
+^.{8 3w𗿂8#=C=:n$2y?t,Y?8VrEr?أ8G:rXD^]M2m~A馲.= ݠ&救GZq+YȑLLV8DDRKX%_"6cvv'iP6Դ
+8K)gYBDim` $]v>NK<n'2LY%u )tY='e*\v/<e'O7sKZꄧK{lYs[Ȩv2oVRZ ˥_^mOah4 rx܎\jKmqj֦iE㏪9ႚ!Ր
+b:m:r"8+GS IږVQQU6`(VBZ7֫޸Qu6Mݪ5Ri3)yNU
+VUX>T3S
+)1<GCF%-Ÿ*.E8O#wr'EXw3ny~ijlq0:RިF()RH#k/
+:;_ U:G
+2X&8ҫ>_{Ŵna"r܄*_a |n]M>gVcB~PW
+Iʊt9c/ggTW6\ۏ_ݛ¸
+{mf5*c?,ks51#ꋚ b԰>
+91%cيP9`- ђoc-^,p9=R BN<Q?[92tdn=L<Aȑ]Xe\hEx8z'mH2G>ek=:Bt5JR=pt±nѽ(\Sݰt*O.r?b̘C"f'Q~mmIG<4vPAo ɠy#ynsmEo
+ 8,
+)c:h_P
+~/k$?fOyF>OqmrѺ!.sSc>;\䱧"p᪇pMdptvZf^w@d
+-a4uAL&cjHָA9ʂ͞*P}LHuª4Z59_'`K0\RE-U$Fp+mw_ղqlI&&cqjHNQ8:CjU`b+4$JUI
+$5ȗ4VH%oUqOxBwU`BSDE
+*HW5r[)\ʱ\zD $#F#ϯw泥8!7#kȍߚ
+YJ-*RBK
+UX):Jn[rm3/T}RcxGi3-»[1nŌsJnFS'R*U`cO۞<{r%r9|I );AY㕙>MNgҝ+*{^2^5MlkH=Sl-~@ Fy24+iSө̌\P
+93*=+4L={l]< K7#L_O̔
+ke,K)EmJ.+x U\Qy|;rȻ
+n-qSM8z{Sx8Nk{M)(3H4z~=1pp;T_+}Xኁ' ,?u
+q@>zS'u/ >z:=E;N*ңn<7U#` :._ORܠԍp/h=k!G!^7YJgz\hDt*bn 6^ 489x,؋h2
+n1 BxS(fYjC(i>'{ogG;k}+l$n9C5rxxK<sGΉx*j]r~"}nwUL%o NqO*c}e;W&YC%/P8ffc_1) k.\p
+idgqedY1@3zMaL$?r2C&X5>ȡ1A.%jTPFgiD a!w+'tCV:7)5C)O( 1|!OwDt.Xm)1PANO!ǁ紆*dT^Ur .eGxGRZySbdS<J07*/)|Q1{Z|zx-k~k撧f2KmF•i1)Ts8%dɐ2\ (Z(L%rF5(.춗e]_[}vƭIm3l4Lb R ͢(b%e*֖[m%TvGlFòD(S/tN𳛱A486S42dSwF8r:v,3木Hf\RW~M>d{< =ZQ1]!2YQ,jLN\r,rNi 9~LSeLȄ*W*,qB=9 
+NUHO]pwL,Xߕ|VLl)f9#'CNPEyLxl2{2yeLJUD0(<eBSf+ĻPA^ 2z6$;݊%k
+ͥB+tr)D]᥊y
+ݸ~0)\*ָɽû{Xfmհ2V|ߵ=růĔTMT۩jEZWj^vqq*B˄ΆKZ[µo5c[_U`8,G bK^2ٓ:hh5i|1/jZV<jiV
+ሕKk4U@{.J1P╢4 ŗqE`
+1T<ȸѹm a-߉MKvǀz(j-|BL9~3p.Q3 xԭGn߶dN;|ܛ}6'Ѷ$3'qR<%&4S|qJ~DzR>ދx/9f |ʸ'yj= kâٱ ]0!,ڣp~ӳq0rN<Qٗc;ޥ`|<\^\e>PF<?WOcq|xiorM_a{ u| =&RK忚6W$dv}*1?X߶i{#_\Y3Nmc} 6>|d)];__/9Գ
+3%OlOI' <!=19Gc&}/>3d,mB=E;bW8{;
+,g_^U*IltBtl x( $/g :{'iv6l`gv;8hûCQO)͠s'I=. \x)9)#+yJ9ۉxs'5ۆ Tx>)3tSI/ WB)t~-vk~ƻFvNZMsEp]z>Dk;ddI8,ybi|ENbWVf{crVրco5(Xe1/sSG j+GYvꎣ7b%8pTȊ*J3L<s,rXy<3/.:jMo& 8c$|(KUVu#%n4xzȂ8(eYOLfd'gt*jmLc*Ro ];
+7i]ƖqQ,.n/WO<} S2c;:q&yb" 'D5}Vd%Վ=c(BUrբΞ F5T2g{̞@% W9*\p5'"-e]wHeϡ5NkZ>JY–ٲ_h9
+uk<q쨔+cv0 jk*z/jWPY2@8~R53~ަn0^i5Ə%F9F|2fƥeƙW~5UbS
+ 7gaV^ha,ӽ)C"G`CAN yb*c4Z̲IhWGV LgMbgXޅ8|DIQNh<)OzDDF(73@tiiNi63OLf1;CuIمQ|{b _?Zj`&ޱ.v?._Ə ς(38яWҗ>Tz.?.7i<%oD,!`R8\)`. .jȥHB@H1%폎@TXb/&f:.cK4#1wsb=8|LfҖxxCCxt $2N(mt 5&j0T?CpmG2aEh9K(U/0q&{@Ak
+D&x#8j$,byb!p,dLY]ّ!1CHlp\q .U%NLH-Rdch
+^@D3Hvgxq|Dp*жhcH
+?R#3I3< PS,> ؞Eq\=-R'6;9IAzɆٜI6|XdA,@W־+Y?[ړC iBF-(ӊ -A[(oq@
+
+$Y&y(ꕫ$uҽyܽ{!y?zߟUQEUTQEUTQEUTQ!`y bQEUonb}SV\+e:<=co*oWgֈ WG&;D›&N8:<͂[ߝ9qtO *Ʈ*Gr~\13Ǧ̏.K?ja`[ᖰ=7%¶
+stP"M8<[^R6+;k kkeU lYj9eKsb"<.RE?<wxcce0e;Q_/jn+;P|VlLu`]:kfp]V"C]Cb wÊQr[+ ,|jw:eUn3c+:|a톣<5aUE"WvMqФ>l)%dtUY#Wq€rFtGz](9dj_8`]భKJ7HKwsؗ1TT..(rۮѵ}4f>z{ϟࣵLAϻsƌzfzkfL(քC ~h?j}CJ3E%/c_TVJ*pT_xEy\_^Hڨ;Wi YA"ҭ[l!Iv^يR9$Vd2nqy>=/<y;s+Nw $ ӟmWy0\*c<0gלuN@B! +G[Yu?R|^rrH/坑,~$K]Kn`l=Z5[7q|gUnr"~F8ߛ-cY đ\ೖ-K1Es
++
+s=t##URuMT?|zq+[:sMnִ䂹33o\P7.B <L 0
+
+Ȇ DGr <6
+83|6 ~!]{=i5$>*OEtO1o,N4GO\ٞ~pc݌)GR0XQAl(f4 M<Aoc0
+ ݆/U)|JnPW
+x kFEQ`0|=t[ 1x}
+RWvH
+p`+gQ(^1ױ>9ږ騬*^x#qb ,Y2aHwcVMOb/f=-ȁ/} - `=瀾}k)
+4`" C
+^Sp|v:Q h Z1
+VKȘ
+=Vy!pLYzY*K;x2}{"w7er"Iw:GSy\V[<6'Rչn%:溬'5mDtbZL\&$
+ܾ~vן{}߻<%E&gINDHJ"NƄdD] Q!c@
+d *>7 8PW% \ h`3^l:93c<xWo67!ʺ[ЈZI4z{z?cvTgC |ޮX.qDh\1yXC>M|;
+ݡP
+`(dBG $8&{j?Sp䴥W5zNK6Vi|QAh 4ݪ(d*isZdD(k}P`
+Ȯ|BpW$ %IHO޿y:~0?_(gD,rE}KcШ+)J_*=I,?!4l=Å[Pծ=Ğ [ }g OZO$o!xL=5dbBC) Oմ>RIr\r"#;@V2[kclzi5a#*Xm?;62.#:ĉ֙Li_
+%!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 14.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Jon Ruprecht) () %%Title: (Untitled-6) %%CreationDate: 9/7/11 1:14 PM %%Canvassize: 16383 %%BoundingBox: 17 14 266 417 %%HiResBoundingBox: 17.5176 14.2764 265.6133 416.8525 %%DocumentProcessColors: Cyan Yellow %AI5_FileFormat 10.0 %AI12_BuildNumber: 367 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %AI3_Cropmarks: 0 0 285.5381 432 %AI3_TemplateBox: 216.5 215.5 216.5 215.5 %AI3_TileBox: -145.231 -140 430.7695 594 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 0 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI9_OpenToView: -198.3701 443.8506 1.74 1221 786 18 0 0 335 299 0 0 0 1 1 0 1 1 0 %AI5_OpenViewLayers: 7 %%PageOrigin:0 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 20 0 obj <</Length 18887>>stream
+%%BoundingBox: 17 14 266 417 %%HiResBoundingBox: 17.5176 14.2764 265.6133 416.8525 %AI7_Thumbnail: 80 128 8 %%BeginData: 18740 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121811181218111812181118121811181218FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %1118FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211FF18111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118FF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211FF181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212111812121118121211181218FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %1218FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211FF12111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118FF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211FF181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %11181218111812181118121811181218111812181118FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1218FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211FF18121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218FF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211FF121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %11181212111812121118121211181212111812121118FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %113AFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111212FF18121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %11181212111812121118123AFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1212FF181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %1218111812181118121811181218111812181118123AFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111212FF1211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %113BFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111234FF18111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121811181218115FFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1234FF181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1212111812121118121211181212111812121118125FFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111258FF1812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %1283FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112111211121112111211125FFF12111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212118AFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1283FF181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811AEFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112A8FF1812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12FFFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112AEFF18121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %1118121811181218111812FFFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %3AFFFF121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121234FFFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112115FFFFF1811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %83FFFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121184FFFF18121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %11181212111812121118A8FFFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %FFFFFF181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218113AFFFFFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111234FFFFFF1211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212111812121118121211181212111812121118125F %FFFFFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112111211121112111283FFFFFF18111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812AEFFFFFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112111211121112111211121112111211121112A8 %FFFFFF181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212111812121118121212FD04FF1112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112115FFD04FF18121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121811181218111812181118121811181218111812185FFD04FF %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121112111211A8FD04FF1211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118AEFD04FF11121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211121112111212FD05FF18111812 %181118121811181218111812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %1811181218111812181183FD05FF11121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211121112111211121112111283FD %05FF18121211181212111812121118121211181212111812121118121211 %181212111812121118121211181212111812121118121211181212111812 %12111812121118121211181212111812FD06FF1112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12113AFD06FF181218111812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %181118121811181218111812181118121811185FFD06FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211AEFD06FF1211181212111812121118121211181212111812 %121118121211181212111812121118121211181212111812121118121211 %1812121118121211181212111812121118121211181218AEFD06FF343A34 %3B343A343B343A343B343A343B343A343A11121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111234FD1AFF8318111812181118121811181218111812 %181118121811181218111812181118121811181218111812181118121811 %181218111812AEFD1AFF8311121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121118AEFD1AFF3418121211181212111812121118121211181212111812 %121118121211181212111812121118121211181212111812121118121234 %FD1AFFA81211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121184FD1AFF %AE1118121811181218111812181118121811181218111812181118121811 %1812181118121811181218111812181118121811181218FD1BFF58121112 %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211125FFD1BFF1812121118121211 %181212111812121118121211181212111812121118121211181212111812 %1211181212111812121118121211AFFD1AFF841112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112113AFD1BFF34181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121883FD1AFF8412111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111212FD1BFF3B1212111812121118121211181212111812121118121211 %1812121118121211181212111812121118121211181212111812121184FD %1AFF84111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211121112A8FD1AFF12 %181218111812181118121811181218111812181118121811181218111812 %18111812181118121811181218111812181118121883FD1AFF5F12111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111212FD1AFF831812121118121211 %181212111812121118121211181212111812121118121211181212111812 %1211181212111812121118121211AEFD19FFA81211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121134FD1AFF3A1118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %1118121811181218A8FD19FF3A1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111258FD19FF3B1118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211FD18FFA83A11121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %1183FD17FFAE3B1218111812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %5FFD17FFA812111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121118 %A8FD16FF8318121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %83FD16FF3412111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %58FD15FFAE12181118121811181218111812181118121811181218111812 %181118121811181218111812181118121811181218111812181118121811 %1812FD14FFA83A1112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211FD15FF1812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1212111812AEFD15FF111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121184FD16FF1812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %18111812181183FD17FF1112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %11121112115FFD18FF121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1212115FFD19FF1112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %3AFD1AFF1811181218111812181118121811181218111812181118121811 %18121811181218111812181118121811181218111812181118123BFD1BFF %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211121112115FFD1CFF1812121118 %121211181212111812121118121211181212111812121118121211181212 %1118121211181212111812121118125FFD1DFF1112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112115FFD1EFF181218111812181118121811181218111812 %181118121811181218111812181118121811181218111812181118121811 %84FD1FFF1112111211121112111211121112111211121112111211121112 %11121112111211121112111211121112111211121184FD20FF1211181212 %111812121118121211181212111812121118121211181212111812121118 %1212111812121118121212AEFD21FF111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111234 %FD23FF181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811185FFD24FF11121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111283FD25FF181212111812121118121211181212111812121118121211 %181212111812121118121211181212113BAEFD26FF111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %83FD28FF1812181118121811181218111812181118121811181218111812 %181118121811181218111834FD2AFF111211121112111211121112111211 %1211121112111211121112111211121112111211125FFD2BFF1211181212 %11181212111812121118121211181212111812121118121211181212115F %AEFD2CFF1112111211121112111211121112111211121112111211121112 %11121112111212A8FD2EFF18111812181118121811181218111812181118 %12181118121811181218111883FD30FF1112111211121112111211121112 %1112111211121112111211121112115FA8FD31FF18121211181212111812 %121118121211181212111812121118121258FD34FF111211121112111211 %121112111211121112111211121112115FA8FD35FF181218111812181118 %12181118121811181218111812185FFD38FF111211121112111211121112 %11121112111211121284AFFD39FF12111812121118121211181212111812 %12115FA8FD3CFF1112111211121112111211121112113A83FD3FFF181118 %1218111812181118123B5FFD42FF1112111211121112113A83AFFD44FF18 %12121118348383FD48FF113A5984A8FD4AFFFF %%EndData endstream endobj 21 0 obj <</Length 32994>>stream
+Ƭ~ެos/CkqS=B:ɿ׺Z6ڻ/,rZj)o};ξx^@qwև|qRZZaRN ~8*Wk3O߹q{vho![BjJ9a5sݴ/@-q=DS1>>20i^]/^V)@˵]h~cgq␧/8mo9~١I
+g3J2oҘMCC.taKsPݏƃZ*Oʾe W0J6N@&Q Ȼk[M;9]ls.LXͅ$2[:>K}q!S!ԈRn&t<S*a 'wxɠ8dhgܣ䍘+v3**pLnʱl!|,(.#:}F<[B(ks|Ⱦ3Z|ѵLzEsmåV]l!R\|͵"TtR6zkǭk G̱0uσ{n,AkQNYLs#_D2HVIߒu>}oe0*z8fؒ7 Wb[Os,3ӫ ax=;[og崥o0+c-̢Þdr&3r53sNSKw䋗OdY~#ES]m."M̃9FmOtSuDP6OP "?Fp|ۘA>$_=?1쐽Qz8̪j\%
+#y/('H^ZaQY9pYcn!7ۛE!D'r8B[tq~|lNtNt"7.(xӊL5}g⹴KaLd-;.楡F ݬl /9 E6"B
+E7FtN} ݢ(ǩ~&^2t2> s
+}0\
+qs7#Bc
+ absd*k &}93%XExK@; EIbz~D̓Pv屟6aM~-yD߼Rh%x-<VCjDpn_ D@ٌ2 BG Plv`AB_E=Wt
+V'?'opwx}
+ Q0zXz%8s՚`9X)͏j}v`ll(|繛XBgAk*H[ k8GQO3! !M09^7>9[ |-
+һs15V{!hK{
+dblVHr-gߕ~U > RpӾB\Z6ڜ=퉳@ǁA<]vCfWf#p;o_{sr}")ě2>=zHݥPg8foU4i{nY*;ZDh}ɰOЯxC2t,|8yԧ'u?3A۟<5
+᫻ T`pyΆr<Nb1=7Q@ᡒ t-?t۸_?{vܿNW{v.uV^~ӉZOf=^eu?%jx(Pp rr9\b-VwۙاE4/RX Ϯ_H4~orJyA+rF"yCqklz}I_tNV[#b6ݵWMV-nw"q׎lW -hԬ A+@T ~ZWկuBYV
+yUz*CaB7ͳ+rB+zj3t)v
+ uza/TֆvUa:)Utٛ.=YWVTg53+tx㒁wi/a]=0<p+o4ETׯI殗
+uѫUONf%SQU$9{1hmj3,L|[@&2<׹С~W?S^B:{G{uUt%CP_ MJ1
+74a1<Ux/8L*B sӈʈm;3b6HLT?h5]Wտ&
+F-;HC+4'2ѳ5`7DX f$J*M**[QQݴdCa }"K6xԐ`-ڰtaCGb>)cYdMC{5 zu߸:|Zg4B5tR*aTEiغ|9P_K6RI'3%c1 R]~>[_t+j+ H
++jezL)Ǯ+%cX̀*T$:Fφ=Tާ”LXW%TqX\s$zC~>vyj̹~<d&<{@/G "779g)S煹dr+fչ΅ gҼIiX68I"L]p曟Z0Z}[F v 6pjXMxA7cڕ<er22J>ޤʵ1&V)
+ %LEk"ŭj+F6T%|]W6D ՖEDF0Xb Q 4u*~4ӈ!J3;*SRfUiFT!Ma*H7CrYK<7M@^ڒz^'k=X<&?6Z:\k̚s [5pSE0DUf1G0 MC0;F02ɶ*d]aq!aE0t0':dē<G
+` ӝfA4LhNˢBa‹`# X)
+Y:Xz^'hKRdtګxûE YZ]CLjSduD ?V.V5h, #CD}{zeDt3@.` PۃBE 4}/.Yu94GQ!DmzD bVf+Ek̦U7='?e+L3[kb hil9F4hz&ìA!J{ Ȏhbh K4SXë qDCe E4iHR&s1'#+ D ,<9"b'met,V;1Wm``R8Vv"vhK&ShjD^-rM!ڈzbE6&hU
+f[,5HVsv%űhD
+"d6R.=oVSƉ@O}>A7G@djDo*Fw_byFtg97@\hI
+se"!g
+BŻ ;Glw{tA m]N_k'@B JZ;\/GRmP]YWޣ26yo/n_pKxg-q[$ @w#}4tzw=G)8B8p '=3"1㩚y2/
+ǴC݌`%3o_n~+˶l;P>[w+ %G\zq3yE8". CIe#TSVt*de|BX̸g={$8N4%`g@g'@t..݈S?F59cm%}bsZdv=VEMi/P{D՝V=S`EΩi&^[3 :5Üdؚ]af\b1V º>Ub{r׍ȽQ`oSMIOSMIOSMIwߡ{~j
+]n{AQ0Z㪕]Wv_EAiӫT] qkEhIe'5Wg#rTtc O6nxVܯ[Q@ʙ=3-+0 #~_ç ˎrڃdݦu.]=5L̃eP( MEUI@EUjn}='u[97dܜh3!Ӷ~ivf8+C/ u%5)㭉]2ј vp9;;ש.<Z"Hr˖»>v(K)O)Ѐ%dsOdc n35"WZgR[:PږQ՘y:-9OtH8N{p&JOe36[5r]XN,JʜX,Azp8l ZGvD#K[4x
+_luYhiXFr@:kFOi`Y9Tր^B:*1~!) 8gCfvH(0@QY뛖4hhΠS)ݝCICì
+- ?)
+>4`YutnbUS
++_K,`,kBow^Rcoe?_bo^˞łP+3 -64/qOVɣ4OQt
+Z:38;2 Ib$M+d&$]С5"G[AuphrI[Ѥ& -cmW+0jD2\҄ ^*o#k,x(qPNj
+YOGɦpsC>I3U->Y,0稜(K{}Nĕ@GL) BPy(yi4eՋv)2'QZ#K5#aeإ!rq*4-_ W!*׫\?&{g:"7JjVhuode"Z{ϗLz*.?XXQz..L&2=5ołrnk['qf~NFd_u n2E%>m PTM=*1EO(h+rm>Ugpl%8cmm2AfevDJu]Zdā.$כGl0BHr-pL`Jds}}!QC}4gn<4M*m{4s.G_kzq"eJ,]0'TmhLO|U Ljgk
+T]{@̽aU
+TY-)0L^^ŞYDj :T%*ܠ&A
+䔂*Fnkj}Y}=+|2I2r3[|^m(}6ZTkK\sJ3QA<UtCLq|'9TR0rFn K<l_ =G,xsC?q@3w:#ɗi%r\B c-G22H|n}vs9]8mu !3[,
+AXK^B%84||UFU?#w]3Rͼ]:F\
+;(ѡ&vQ{1osF*9YRLidW]+Ug
+_]({"j%<|[.%#ډ'HT#𴘆y5œ K vE4ũ6:HΆqz0p T^s $V&.a ,uF[,E1z>ũPx-bD
+'L]98g1,HO~I?!U.c9db7g}"#Uk3}9a#us9YfI0${>I q;Vk }f>OH`ntsH`Y]<Hp(a?xJzG)x ̄h@$f|~\퓤yI#V1=QjмmFYJq @zj< -5"`GqXT>Qf8D* /&$3Nj;40 n(]<$t#WeUpJuŊr͋S~ɼ\
+<j ᩦIET_pNA~.ڙ} Ԉn/ۋIƂAC0*Xϭq2A<i9J=O D3YX=3DBm HG9> ",
+~K>h}~.NŞKyjqӶh۠\7Sn|s\jE%jFJkn
+bxm,/Bu oe=iؔl %[ɋLTѨV`NïT'L$+
+JUc9H
+^C ǀ8Lw)#Ghi(8rr{D8m*ǯv*
+U I6 k4 bR5ETW\2?xAZ9 ]aj YVx+QN !LxeA|St~?)KkPb6c6 #)bζ|~*}'״w 7\ƙR{ %Iu)2;+WO9!ABr:7'Q'ӹPYג6nN6ųD/b +`Puc <&+uag# jOqKV9aƓPץ҇,[<G?/ܫ^vVwuܸ䢺FgI'<MgmٵL*Q8eu3uYKpR]K*
+,Tń7+՞k70޻Ko+]?X9+l&~cBi\*Uui.rL9S[
+} 4d1 Ei)#8NU4zuqGq~,@)٢D"vLp6<. l!F1WjsۚILisƟ$)jg$Xv:İUiMWX|YB5hW2LtHM@'4(G!G!)qS
+EJ`$1_bZӈxZ2mלW6C0EʩMTja-2$cMth)9Nve RnVp]CSKg"m͵gRyl'H䯏;&x W}Lq'frBܚN0{:3R.ŪQrG|toӕk"8cdAܳf(zTӞu=% N.HJ =x'Y5զAF OKB5F&8tl[Wmˢ,0މy\YYM^2eH8Ǻh)O(t+.mbGW*fm/s,^OK5*$l
+sI?SJ3U2K=Eת,,x9xI馄]LϻEN&Fb Ϭc7rƚ)e#uPmƕ* M2=}>we@v7q9 ]CA~$YW,?XM5eukp+l6w$ښ^56n{#o"jiɨ}秤raSY#BV.d oQdۺtEViXL$NXWdKc>_>\NK=Gk:ЬJ6኉Ze.tWNa9kXteZƖQQ.Q#+ idó?X~¢'e?cr O$J"G, ]n&2C<ЋLqFɂM#DkĻ
+&Q^@<?0a6P#§LZ<-F>N<cfN4;$ur Ö웣'nP pIhGj8{&*~uwC,?X!X8>)::gNI]h͞-{Oִ*K:0%z WW\*VX EE5&ߧ3KP
+;YJDx,\j[tQj~=QS4} !E%TSڶHm8:׳jNlp $29H9
+NEZͦ3s4Q^Ͽº`Kc9* "=j Zv&'->aq7]jx>ptY 9 t./>ZϋvxχÜ۝Kxw0\/qx?(f:]݇]w|>.yx.gdknx4vcO08kv7w{{nkĜv Ap9X>k ehGp;`~/ #/֋׉sNO̙' 3=h7=Y4(#^|D?s~5n;Fw1xqv,.x_,u&4GJpd p~Kn3+7^/|> t,Z=,$Bz$r+8Y@*%'s|X=Y?=)-fsel6NOۤV2\/yTr|܍?_aDɳ[ZEE@k䇗܎B׋-nŜ~e|,pAX:[_Z$MA{‡,E~;L~q% 6Ța&_Ŝ
+
+g\4F,)4q˂$FrV"&`%~]U;N.:'JS[BwG12q7h(i\s .6i2ߋd4Xӣ lXxdMw9hE4 `T|1
+_9W<ϑPė<iA@mill:4x %d!jHg)Ɇ,Ry&AnUC:.6`un]F o+V@CN1ۚ P YZP4כtU`*hP>mz55%5=D}2gt" v`bxe
+&7a8(H
+caAI,'O1LL|N#t'%v+HPfy}/,,$6; NuA=eP^. 7d۬8r<&o윹*B"K
+ryZkΐn#,ܔǤ\h,wI0’> vPJSؐ]bv%mٿ8f"j)PK;y-YLYtj])88ămr)b~>K1ju+3̉@%= |[5zÒ`ڲޔФ}J~ ܻ3SX"},mU|NnbYtM=TtwClWd>)@6O(žg`l|jtuR%*u
+y 2OSz?Xft̀}.Wi3#ތ-wPy`$ςAjfԅ8E{p
+;@=A! 0xxg·9 w($@=+&A?M1wd`#pR8]Դj=MS6$I =)_+Q: lgWߏmkIE0KsK#rt;2*X2# c
+KtA`߿rVVД`wHK/[ l [h$pi̜{ݽhՆ++K7}#ϰd9>Yu m*a׀]bc M@ Ȟ"P
+C\+}KaIV&@][NF0޴0<kz7g*ޔ^cDZlF> J p2+}4l fW/
+V`pQ 8&JJ}s-x؀E!Ch~f&j8Xb`UT#ytGQ&ip9cdLZDЛo}{U<5\..dtwi) "+YQņaofAÈ=m 4T,U1o"=46$BD#EkuH˿T8궳h{(6K֦BOCy#_D`4K)5Cwoshb>l ӵ:և폍̭͍]QtU Xoy1H1=(*0o`oybP6GxpJώ $P:JvN63FY
+f Xd`]%qWn**`\o-j Ld9"tfʛyOPIJJ=0c`N;
+\ku#9Z,t:y@H&d,ȴ@Wn0w>HSnIM=55/0Ofpzdá~򼹨C~3gيe#N,) Z_1 Fl裸5&?Ц[D(Ж/&`ͷ#VV;
+
+aAla x]FN͜@{UgviNOKcBGyBx͞. A5W~akM[xR_4$FBb)Vh*.${,YH[2 ϊ."8
+|L66=6Rm?<yU.3 e4hލ
+=;ᯛ]Q;- բ:@V=X쪢!jԗ
+ ZH:,@Uۣ. ٳ\M#~5կH"'lYZʀE
+xq{^:%huU6U:v"VX"<҂F#@tn;;'sh|[A.ZeD JrHĴk} 3%iŨ.xPm2RH 7xG
+噕V8/lZh%'TI\ƖB,tK̕@6C:AMiBj"U`BQ<#mr
+HI`vDih3P)V'd]uȟ<xc$e"j~Gh)uJktZI5v&</F,R&k;n~i;V4}J)d֏+2n-PF b+_%YputNh{ZM ,,~Ҹ%+ͪ%ؤ$sF%h\>td F ,R&M<4c$Dߑ,-
+O&P*A\Oޟ;NE-M;O;JN9'=f;E)Ox
+lL7R6uyo K;*m@s<cAԮ/6l@OA"YVVoP"0/I
+쎖td(sH͖,R,{q#nyc9G2кs҉Zޑ ]@^hf_?!5Y6Y/ݑ<͵+G
+Y
+ s+,R֦#Ue<W_B袭~f(2= Ћ5_syE̹CR$R җ#\@ ԋߛ^;:ID- "I(xkwģ0;k_lK00$>1
+5Go)%8A*ǔ:ΫE-)' d$5') `,nӄ,q4A8%9ЖK$as%Ad3d_Yy!4^/X<7UYҲX>8WO;2Y;0nZ<'6m'
+yb=XbϪ.z_n<>6'9#M,NXf<x v֭4FDVmI%ZS=bZ%i5 9 .0+`R/R1ք4 5h{G>`p Jfu$1pq_$E~ +<p2ԑf}(<z wԁrl\^%jūV6m!-fR ( zDyż/ކ0.v.ȂIna sEVxI_ ^I++]ճrx Yv[R`Y8I֓OzZX}}1s(%WKx1 )Vx/ lb/ o_87o H[7zkvb3G)?A=kok"<utƓr Z ȋ/؃--IeqP}QcE+G&;m'}4wm)Ntۖ #H R)xz sx(_h"-&_@8 E0tOJ>'r{l%!Ǿ@&,A #>d$P`
+Y[B랱
+ yW
+%d oܼ$PRm6vBlh_+*Q`t<mVX@k u8Ao>EOt"4y1 ߡg^=Tui}k#L ,_oQzj_y_F}OnB
+y~ESŚGAz`euWУ-aU 8+; +u1}/-s,=} [g!o!|ۇ쪽oyv$7LAyw(W8nmֺgMS#' Q6T}-ol73>#r"=<bBvZDཡ$#$Q@w5ZѮw,x!5$5M*h`դ4ڷeF.88 ?{e8 #)YIYOPmʃ~<:Qx9<8w`TsWCoZfQ 0sY
+
+j v \IRSHRW]5N+ xV1K9lZ0ЌViSXrۆgNj *8 LK,:pH9Ý "e "
+bPT(/ HLC4vQlOas= MP8<53#zP8vKgwJP8<(pdS?|ƪd7Ǫű7 qY9 P==Va tᰲ󂩜X͸j:ZG ˃>~!k\T e0ԂY:yw:fzGᵧi3߹Vj$?r2VY8X$<%)g:xƻv~sBsa`NCe=m*;.|jH+Qhcjb'V v>[3 e$Tv{fξyC-t5
+n{BϮTf[#}U0`V+s;٪`e%1k˿SVVOI˼l!lb&#jνXG&tG0RVVqK&9!
+u$g
+\@C6Hq}ɂD>on3bʥ?4&t""j+/McMG:\ޡ8øDӑlMG9E>t$[<9 ΠeBӑDYdqs"Dӑ4ZޠHX:h:]e`MG)cGAӑtl.tU wJNtͩ/5P.tfQŽth:~AәD}i6 MGV{#
+MgMGQ
+3R*NrFǔ*AJ٢]fUHAazb.SLODt"ʄJ?l˜Ɩ"sMsܒ;]ra8ihH.> W;>Y'sҢNð\7 ;>ϥy2]q(\[nXдozy AeU0:xxfZเt<>k!=_Ja"ڡ=a D0i*ͤP4Oe";
+㎆"فh)ە$b")[Hv"Rˎqkif`lX{?.+  1c<vQU!ҒCvB$v5$N SwۢZ 6E=i7Hz;!KaEuڐA
+>۸ö_}Sp1:oyۗs 'iؿ|0T^2ԶSZh|$|xbzKWp;
+5BV®#1c/R0Ts
+D;Xxcm5xgK㳠sI!h-^?2vb׏۞Dg-IV~l19QӢS>>{At>>瞏da;V`bCy4W5{Ccyج~6)~.m}~Wxج~pM6s0<ꇕo۔ѲcwV1Ǽ~@'M1`~p~F<QΕ.x8z;^?P>cb5fVw&+#}$a,2Yqqa\_rہ@R'׏80Qbu?EXX{.9ÜWSΨhZ+Sixo-ztM˶)ab$pm - e"x޴  FgO6~nw,RYTip/q\sŃ.}BNȾ=RXrFr7򏟝un=Ʋ;ao>9"<ǑP&ȇ?6e},w;!zH,ȉX\V ߽[.Jx
+G蹭!-;ޣivTr2dsޞC ҃֠t~$ܼII낤, ..PVh#vS͖n: ~c$PM'{ ծf8w:a14~{nܲhZt{+40P·_TfW㮗wNRËj|P/Ǔ+P۬z轜6PQ)1-@(cXV~aO>||$zMx h7)˹:
+ky&N儈z%Eh08B % Uy TY6D-ԣs)>{.Jb\Ugb*]y/SLT}q#i/^53d7I,[
+zp I͸\4k{ 0hDnUzdָ)@0ksQ핰}(L!3>jFT:{?T $w 4눹%/|ùhxiHJu}7i+RU'= 2Œ]姌-b_0S"J_mm\JVg+ó2a<W"`YpOx!ꩫ xVȻݧ!@x"nEl "M|d
+^q?naOV+D޽./LJRZWAK*$0IXmS,'*d,+g]JN:&+!]=j*1L ȹ;^h])'xѿ:
+ǍGat2N*UϠ_L5d~*q5U͗1|ZZUseJk//J {Ѩ,`3nt:Ȏ dU&DDz{uhCqG [YO{|\>ZS-<;IP;.Ll2,[6b{YxXĖUiwvy1Z1JQIǚCXP/%uФqz 9{E>I7m^O4U5YᲘj<ft
+O)?٣_1x%]Y*"I8xG]I9Ov;F)MCpsr[d@}|a[.f._ؖˡ b̥yEO+
+91+dygO|sIr2Lw]o'ߟ:s|<'eKxAJ4!R]jLa/c4y,ϿM_8x`Hhs}yD2}ǃɲ9K\MJoƑ/|XܝVepZsն]SG0f%;I&bЖP
+$c''}8qs wM6kVhٺNs6өlQ'ɮ@)QF-(?_ˎ1*-EQ-1e
+H(/R,}QiΖHK4ʗ/D#(-ٽEhy/Ҭ.3z"y?('JED)/}Q$OfuED)16H(_k_ZH(=W(R?xra " PBH(m_m[#_fKO}Qv}Q$O‡/a"y\-_>ED.}Q$URc_e{NE<Q;_ _idǾ(R}g(166|Q:[_Ү/ɶ8չ!9k۽ڹc%s 3 X$f),庀МE 37cO ;-71( bJ7" $VFf.rӮ&% dM|O=wndsLinD'wfR
+ 1?G_2L7*%S)fg~S*NY9~ߥty.1=گvwު˟Q(ҕc=C&ZĪ&[Gw2cpA֞t)ӄp>JJl.Ӯ
+R&J f3w_:Rh&| X9 %1/\:%IY wtƟ/
+b
+1.QK{i苠/u}Hc_{VE*zQ{1,@X gfp=oj=_N'AIL endstream endobj 22 0 obj <</Length 65536>>stream
+%AI12_CompressedDataxks$u( ?p?8Bئ3V"y۶B}pP{ZR_cG^U"9cY"4H$pp_7+=_MW/|gWŇ ~^-zN7(w?xO|t'??W7O0훯j~7%o r)]%_n:.9 ]N7^{x ]"<u}/߾||w>| :w|Zso~᛿㿽O)#NFp/>~+p/ӿ,'w{O;
+~ .2*wܽ|i`& ?Z=?B83V[hw>0Q|!r(N&>܆p>c9XM}w>.y<ϰYaX1<hVVlO+vG+6Zmd쾬'4Ni0VzMmU09޲^ ͸wmҸY]aei{468:<>ڍl#o$ll&n'o(o)n*okMw#E^4bL3
+mFԁqbJ)Kt>-|>Û`)\\ ]|a#qW,W(FJʾܖ;hu]sQⷦkTn]lX`aMz?=`˂{vlh8~4L~:O\~0q6I&MSޥ]ޕ]vvw_P,%Z5nTn6ަ<ݖz{sY
+;mby%Cew^`bdlq?0}BI0N !T{!M{M
+s[9mtN-ߟssv|WƯ_-"@2H($E4
+ZD6%EUDy
+2&x!@Gn" 8 FpWNlMPd:AvWmu̍7x9$hTmNEWmW۰{۰[ڞqUo Ė
+ DWo"-HDL4(iK2x`0mI,h]dF!L*LB=F"wB f! dޠ[3d"XdfTk/|G Ͽlӻ_BoA ^̵-*lON*׾puuǃ]Y]QTY<]=:'6ǯqC: O||to
+W`0 柗ǵo/j$Lmwl6:jyb$*c|.6`>=>XdE5Ѹɮ$eIR%GEBTp':DSaO<TSΉҬq1Zb9m"AMM*3Κlehk d ,"[YTQ%[HsdBI
+; ~Z{Qm3ӦI;#zd )?ݭtZnOƂnXlFR$OZ6
+}A+])v@L&eҖJ\}hEsInyw; g?>+HRO9c`texxlnב\rs&xyO3em׉[Fk~NmFMCaB51e`.+=zH 'iIը
+{q#Q謷UNcs0i:"NWd3}4.cF3`$LЋc`3wN9.'yFY% 3B
+Wٰ! -50ɟ-OS6re$u+{"r*5OOo,Q#-8|0YK/I%*K*m5:;֛A&Ƭ1kV%dmݔ]6m:%`@+wD=2PR H/"QD0 Q!bH
+ڝ#@y8S tR0P"!enӮ
+l2"]Q//Q0X.&fcnWFݪvZimuTV:5R4<?/PǷIQ.hT$imˣ[Mϵ1iAVE ]Z:kuRRZ
+jEVZZakc.tF նz[ed
+YD:
+yP-YduNT(OR/pX2gQ\]~в3YccccR:qˀ/ <YK|_R>2MGdJ@9bjұx1s1$-2v4ǐ Kw]pv!T'Ղ7>>X邥
+"ыyżb^z1/<B^H -] ua{e?`rX\U-Bthӌ~vJ>B}=v=tnڃ .yh!KpϬQò}ϬߑζDti,'H$oY68@`].p<nHٍO>}&qᜟ5% I>
+T8v[ݩ{μQ6L'oS8IaDAr;7(OVW' ΄SYoW%d&Lߕ]U`o?X ,vYa_1;k0v[0\[BY:UNFە z3rO]ѥ6
+՞hVmZJ m}[@k!h]lbFZ.%U~@c}d~ėi]uw7 pJ`E.EY_6錻ǫŇ>Y;5w)}R8]^B%”N+2ˀ/Y B'^|eK2C3mye>ش]*P$Yo5j#>%O{yVs5xΎAyGLF<jSq3a74-9t"VG+ueToMGt6uw^j)MtAM/ѦŃƈ("vx%#]2͌MUGdھHi:z=ұ;U9ZJf> |#h2.uf[`hTJukduaj)\VOVz(\=KVg}1j!CH4W*P>r&?zr9}~}fd DJ(Ew8J_7t3q_xsTAzN5׭:[I{)wa:Urp36¿a!Bh2 ݙDHrOh"m}ю.6-F֨Gn=hvtn]8V?ݾKO]Cx:k5 A`'ۉjjL[])aj*%moJVZ֨R6r(wiGPv 1emoTiL#ʽڏB2ڕ7!@ł&,t_b6^v̳}xuDѽjiEЃ;agj^
+փVIm+vI ӭ3/A8]6CcC*3zFr*3&?*3u^l-9Eֽ\ܬ>9qoZXkC i#gtZYXuY򑹳XVbKÓWaz|!&2]|re/eQ%Q֪ XJ*:azħzizQTdiF0K!
+8gN/bx8HTF. W"񠪎?Fԣ"DN%uVľғ:IפM/4E{ݶͣG #ڥ}uH$r$+eWhvZnZ1ifUb35+PוuO7Nصʡ[{lo5?w۱zCaSXrcUZ&~WY9Z`f7 /N'馓N|t,K:t{iftv_u
+V[!CV;:鈐$e^^?M[*,uK2xjٔ HAC:g3Pm<
+rU?Ȩ?ZQ84r;-[Qej*<E~2/|,K3zyoO7rC<*c6x.sO;7/׉Lh`b0.ګ0zd&sN=QԌ7#-tpb||NArCt],.<Ϩ0]@ɨ%$<oZk<Wa5$<oqsT .Y\ȥlrz?l^BŎ.bd`;D%ȠF/$}ID2Ozڡ耤=jg{c9V!¤<v{ do%Lf4C$%EY$(ٛ%0 Y&{YڔŲt#f$6{A"t;*V"FVlCc.wZ-˺j]^dFՆpެ{6gv1=ƫywjݟWs!QZ1@ ӷщEq<7zfgЯ=Uֲ>`;ka#=1XL.q"Xظ݉:ևZ] \PkdOtG;pa]u9ޟF nG':~:~:~:~-(O8drM?f0T)%#zEOeyiRɲ),ݕY?.M0y(d4 8RM6P'<m:p=NL<ЦM<<МLn .ޚ;fo٬/RMsܨl\[3g2'No rؙ].v%cL$I<<8,ܑ'gώAO"HCD~;RZ OIP{^} 씫2ŎG=N+ONgl~9?[g3m32ੇLv=vN ~#x\AsߦAvJ<,mXVЦt‹f=s4_Tv69v
+y~&O:q\9.ߜNdgy?y0Ӈmwئ-*T['HV[[k Xbt [m]lBB ǻUMOm76MBG]uDTV)Ȋ6MJz$1XŽ親fH顋j',[l·ucE"dAE i4!ԩ( sfդd1b`8$rCyRBts3]"#L:9%9rtܞ< mK9#xIW'/67,xz8hcL&.czyՃ`έia$E^0 !t~'fOgLw$8SV?Y󔩯 d2S7:Es|g{J3hy`j[F#,cLBu[CTUFkه|ct9qN2J0)w,O1͓Ȟ!8L /z}KKKƐ
+(h#lt{=s]O^7uZʣb'Qz#\ř" bZk+,GVH(b-͝Kw飞}o9|h(ie(5
+Qz' nyRk<4ZA%o@:x풇RlOvmz7:ghdۓ o!J-(̢(,,"ggt{qUU^l87غ_VQtzFQ4"ŤhQ$c =3t'R!yw$ZPKPH5r05Un&-5X#fK<2zn6?lTvզ Sڄsy3P@
+ |!@*4R4,0I`rZYۧ|&/,nHi0QT"VI>c"[2;.uZUVQOr''N*I%XO43u)}s7NirgYoZU:m:Ǔ-mleL̯~T;ډr=Q6S?=W>\%F.]ڻ7_s^jڴ|Э'e=VdMܐճggװ/'~I+; L;)ײhM]- ~p5gL^`MWn+e:-aWܝ6'oL^&-sޜ 3,I{.Káپ{No7/T闒NӛpW'=]~O:]qtt ukCI.NB"gP׮kTܐu:$!vbA00ԸNbb
+gdZ|Mc@I>9HF[-C6xG-~Vcb5Uk4jP%
+S^Z  Mlnv%rY8m}dԛ-I>Ȣ׾L]r1]Tr14|y1gLő[Km{j=53LnpM O@#S Z[U)g+s.eCBTEK8.jUpz8;az(.P9c;3  Lvo?li,zpYGۡo}aAh,02[O=FDh\Syڇ}k1JJQ\Ƙ,sq>~ߗ?+9: Κ̜詧af=4oD4cCAE~v
+W7$e
+gBd72W.AH'Fp܊&irBgT^<jt: `M3{|TpSaM+7W rm]'R ՃߛPJw:h]n6Nt2h %Hd3=,=C}7)KzL5k/d<nta\a"JV;{=DF̜Ik
+CtC֧TΏ'>$i!8{t^<y{\qX3VnwŴ876u#d[uMG6:M+6=PҦ}[.cZ Vp&gv{Ƿ
+.j6ߨHE2*EE7(DnFH|P2jj37AL\:{]30 r(=?o8 GџIj6ڴ oS~pRƺVF_-O$]J2i+  LW-$>n:s7oneUK仩Ͽ3r yx~8QÍV$YfidYlfe5-tmk=5rL
+;5"yݬ{/kQ[htD]KAٴ' 26V,| tw榓}@ъWoo *|
+tOdO)0$LYUI1mHikz!Jљ!w/ǁ}./Ū[jNQ3]'K_RtMHnNi`;)\}wM吹wsR
+DXbZtwz|ZD-*hdL +
+h
+#|X{<'Ob:7/^7Tat_i&.
+LiΉ>ŀ{\׊2`kV85\eGJ mSu WXA_s|~Yfk #Ҕ
+ LFfyUIzNՏhS |9,=?Ӻ.3N
+~\ed+QpӺv%֥]t
+09SxV])!2L.œ@[f$5HIA'b9tW_hpRjFd ]@?t}JxyT&.`@Q*,xK*yBZ!݊)JRp|CP ]p
+n*x
+2(y,", :`W-eX@]|Vb)ȻUCi3 "i7Z9+Yژ_XTԄX@^
+NF- LgCkh2$^"Fٔ Vra@d
+CEjd *X&ȟNjP8`W".׫zFVz4:Uxg_P1!6R/|@19O/(B9BtI1ѳ**vټ>\^AQb^Q`.=13ԱmAHT{Zz չc.{췐$~8”8 ;`c B2lq'!FAyzAAڱtCd8:/R39;rs`@ SoUnkb\yLNJ#7q`$}3EeЦv\<'^pbwI[T &FloD<uշ`[{m0a sipsLG֝Q8;qn
+8%@ע SJH_vX\T%*
+1XA%"qIPp/C4t@_EG(|bW=
+PyAY ϶>sRC0,yK%@<gT:=;2#S!Ə!ȾVA
+Ή6'] qo!.8d_h&yoȕS s
+ |R}8BxYBLY`Q1ub #gC"<
+6}}Qt.C|A? R g8X5tW8XRJDk;hZFpfim:5zu]@E Q-Tn CczPf":0@< \@
+]@ Ww= ݻ Ou\@
+4<ry}r)4ςAE(W?K
+,P u+B
+'el~︄I7BB" &]Ju Xq{G &4]PoygйXҵs)SP r5LA Ԑ/^mGPw[@i”ȼ.:^`և= M1'QF^4ݘ87=}8Ny{hCv)Ŝ
+m"'Wu]G0(XI 6=i˜SdG xa@ 24JxN@u; iWCG_AO]#\NZ{9Xh~hEi $~zWWF?N@8S
+Ccn̞>i?+t yn+ydo\(_|s:Iʿ@ԋ9 $Ek{Aڋ0 գG[.<BkL Bub{$z#~-ٚk$rhb{2
+LxA
+Xf!(}sv2"QXfnI:QA+tXr3 )I-$hE-ڗ:6ǰ#HI(Ӑ.FRK%9[xPKU,P_ɒZ0<NA)Yވ1 duhquP` 8'x6
+^LDE zsQ$c3x6P@ PPyg@#1
+E&Ԏ!V eu ^"[LfԝNF>66N行U?3n P<[
+@"`8wg,6
+!
+6HNb[/a,#{IPhB# $olF0KHFJy-(S<ZyDZllˢ]eߣCaU<MRUR^Y [(xcZ/t.0
+ҨSt'5rϘ9!nr
+fTz<Zrʾ^/I$,dl:x:z'Koүe<8ɱ" ~b/u1ӸX fS=І\He^ ĪܣjelJE1H#'ClC((0,1q(:9Andž*3JWܚul2LeXVHٔGRu^ 9OX;fiY,Ngҳ!GJ#pѹb} ϊjHߍ
+O*Ƥ(#<+W
+WeZZAV j
+R)A܉:u`FSʒG#;nS?ƮW:^ΫL?ZdOfJ>ʍ8WBt&y*c9$U*Ufp$8S=G _UQhv C{
+J G-Ll}LJ_AWXyEӥ
+>ѸMt*z7
+Cqbڴf0eq:YለQy6}>qa&޾ rbyDg xM-a3h X2CY*X0wƀ8X&`ŜU&Epj]ua"::x`"gRV~RWBVl*NF(,fH.Yz֨#wtδ FI+a\T[
+"³>^@aD؀:)hE>I\IN8-y
+fD m y8.Iu/E-vj<5q/禿dFV*&3tgYX ZΊ}}5v5^YEa }:(B$:d]ar{TPL6T9)
+q)B)UxR_Kϱ8tG@gSnCרfU>(azjh<5=bfl}5bR̈ {RT5%c |Q.ѪbhA0K$ol(
+-MxJ<1);:ic-m HHLQ1
+%֫>:ok
+@ ݇5Dm."ɀUsYNLӘ
+aq5#-P-jz
+-j
+G4mQ2V(.j2YH<ְ%9YY9OX[XwG娯~Gf@m@s04HD[.RcG$%_--EҒ7_` Z4BW~jqb7aEA <
+ζ5)ϝ jIZ
+v\湗 @qT qkȖr]s0mKȋiY:j ]V5~t85 ƤAUD24T}0b|8(2zX4.g :l5E| sƒF 55 nxH[Hd
+a7k(8IvjePS N@P`
+^r4ì
+5ͨ*6UUO[x{|jBԟ<p!,L5X< \63H$jdK 2hғ@YC9{Mp4rϼbbT:4u\ ב! wY|tkCýj/X
+՜z+H$\j?1{l5Ȯ%u*:8B}R ZŁ-ųqCzDp ZIiav>HW}nHg="#Xz@#PL^]OI֫u
+"pUkyJ|+ hx[0}|Xd\ xh>'NWM曃#HB+?/$3ka X. xs9<xV ,b ^J"pγYP!T%BA<3-Lq9v)#zu)-)`c,YY6׭7K!aޒDnkɼv
+9Zp8K=J +uLJMr\ġb*%u^E|N|xצ1c͢r-P*:M0 }MS]T#DTyƈ
+0:(ͺRsfzDz\$
+7KeTY)U.R4(*#[YpTU)XC>JY[a*%X(YՁZ$<7iUa"
+,p9Q@'#=h2N*%ѽ(>ч3JINdHD?*8ZƈDׂej37'kffm\LL8[Fj QQ4jdjD
+>*8;&'psgZ^ Gg Q]29je0GK
+TΑurȧ+s;fJĥT(HX8JtIX.;͠N`5^em_'h@ovZQN,czL͹X#yLUoLX8գplOe^CCMn@1&d!:`*Q#UN&ĖRj^JЎrL4cT
+84MV Adt7[a/ᣀ<NC`1he#vf)JN}Ҫ' {R-
+V;s^+,>O,DK.vã0Al
+~RkU|x۪
+Sis<n!4\WH W6uTօȝ5eKcDGy541
+4,tS49@2mzX:@Ʃ#`jc(*
+b>=i"'{FOb
+- Q+w#T0XnEڞZroBZ3(LR<W@:
+nD:`MDriQ}m
+DU: HH
+Jao*:\θ(%KK}Uѵmrswb2Mj:M GhdLp%6]= Hսa*<~TgNϛb?g wʄAH8ԒJ5F {E:zX\;KBfCfwPhu%أz=RIHNQ0ՇIиBCXVT DeXKMD$(-$aWڬ%IA sN$$#8Jo{YH:A}2<0c~U&H!70|EFi<iҵ>cCPU֧f,yu]yg@{zS&B,s)U)"*}5b ZA'rA M"PJh9"%F5@a GBXUϵjD _ }O H ByB }$ ;k3_(p9S y@cb4']I73FV&t0>WU7btBח5l%
+QHEŮ*o܄.#x9r *'9<ɿ
+a?Y+JQ|V&( }eVN5v` Nn\!;3![(ha#[Zc#q,FAM6QHRyt-s˝'olE-`d+ C5ƪ:> mWh:(TWoV?R \:+BjMH+Γ0"b'Gk3cUf5Bk@\3
+3jtb6GaS@؅>WHVnx&O|1H>Z6⩅j~VD0u[e F=Rt||We=w{D1ߓHNۅ`Z)FUjL/&6`)1]
+zBͫq. a{$fakY0R*YW/LgFlޒ0? ѵ:
+Z72r"lp 8SZfpעR^Q*0ʄ$.q3KFV*Yt(-_e+2x˷@&h|<@F>2Ve`nĮ4'Dv0=R*GkB)؂9bs&J,/O>^rCPI?"^:INfTN30? F&/Ceeth#(<3d+L~HȨ;(.)f PGƮ\+EJ: bKɲ)*<ZAYW; {.¶8|"rVJ
+ddߑ8aHȑ9aN IdX #!}dH8~|IDfk >o$컰7ks#!1Ɗ &`Y0<\Y@/Ή.DD~$my_v4O=2 +#]JMf<i'Y]I|qe*8.9GMV|Sӧ B7 " Х28HYG,YF "tJH(R>G=(0pˢub' <6F5z;rf-2Rd$rjtɏ}9@?j@ G+=* bQUkB?(m V ✻ri  N>
+/hkibYdѵJֹ,d
+X)JaZ*!}ZJH"LXqqNY6 #͐8o3hlbݿI :ʎ=R`t*k :0&嵥',NzTekUZpxD#v$>,͔Έn8>z^0=[kwI{/ʵAe݊hD3x#ae3 ,~Q+ypҵRG,mnHR F
+|]̲BR(ptW|RFHVBcՊ*%E(Se* D#u$,B$ Co ߚ}O69RHT]ia /#!ѕu_aH!c9PһCɗ+!#~|极R,B_"]
+
+sGf!!z!('=Ppy > M6u ŕdηnI(%>!C>wo񌄨JS6aV1([
+_*F`RX#!aqVũʕYX=? ~#cp2J*{,TDٟy*fRi!ŵ.!a b/A2GSf&\"mWMiy%w$,=
+i>ȆGp8\|svF4 Asu+xmՀ4>{u^GA٥0% 4OU]O"˷'\q~C)]-O#Rza~@ѵd_a+{a~@_5&q6-tf;ԧFl:s2ҡu6n7c˽Kk%2WČ4d^^WN>"t'*p+!N/Yu39}:?[zoW<uK,W+"勒!3M3ySљT2GKJW^'&rB-UM䋍Src%m"_m".cϮMMݛ 85XdVs'+9lje%s"ws"ϳ&{tiZIVs]beٶռ9}o53x"q\KL/{+yKEt%z"'{"6+ ҫ\jD^~-? Pe &T Ca Q嚘KQpXT.U7Gǣ1Rer'qTYO&Rl*Uޕ-%Ke#'3<fhSᾙɩrTw&zj>U)*Ph Wшרʀ4TcVr0M5Uy* PlQRU|UUk1k]u?g׈+ԘaU*Z޲ʆ6ɜVeYոj4ou> *#ZyyU*+_W֨k *+$bm8ñ{2C',&W)'X,Un *fsɳYVJ'ĻU:jy:Z~ĮeVxj'8m'okDuJU*Ko<)<?|/Sqyĕ<\ekbv`EOpKWycv듕0w".yk l*$x;2>H^e/W9ѫLkXY U)^*dp,q?_T$0QuZ`m-ABŒj
+e兕 bS$XW͢|QQjZb D6(Fj}Tʺ+
+-j./1dgRSjoV*|<XUuwzu}&*
+J
+u\dFGD[Dz )6{U>:s_X̥qҭx2OUvRTIu& xd=5V@f`
+P-Q}X+3 KPgr>U &ȤSUU:U#kMJkΫBUMMX3>[GV%_i[G6Ui&(*sUv=^*NW[W[
+^*dCʀ1ŖQe֘r{TY@!Uv*$gIߤʄ2ReXsRxYSeࣹfˆ33SYSpTY BU ^5FQi-҈qFT'qZ{BMrHUTkY
+7Vskk ׈6%V2e3+*i|jkUJO\n@WɫsUL}kY 5 ^
+appʗ[qXel;V 뜑U.*ke ʛcsYa`28ILV*Z/kZe]7 j|V8l'nܸ,kw vo\2Wى'x'8U&uCsy #&=<=R]^}ݳdWش',U>9OxP| xSg>|^gIOrhkt5E|K~-:f?|_eɯOpWy+J՚kjTT+ T%*L`jt0Q+ZUbEZEŚzea58:=U)+jTj,7JfDuJ,ժ-.kjuc*f&jLխWWéTK,3`ʲ=ʲϪlPQ5Z_hQnQQRjRRSnDjPQSSjUHzm*ji.X&זX*
+ǃeqWcUvky
+cʮ7WaUV]X%[tKt>W2_SUI'4ȏ4ISJU N%T*jVJAU% `U&*4\%_Wօ^!lWUiP*DefUSZR51ېQeĭc+jutv*IZB^oүFW%
+\K*8& RN)'K V,IktԎ*adJYݲ ¬1fNqkpV:gP{4U5#"*ei
+BZqTjeH骜t/7k}A~6bKQ~S%Ͻt97/ q3,>t·Kb'f⊤[bbm1P1{8:>?;GqLo^t#W%A
+wV>3۷t8]9;<nx
+̶ٍbxe3gyn~_/}~ӏo6
+m b f[tgXzMo9R
+V`H̶o%lvvsͻž{[úIf [ 1OА._ʆحnȚ+!Co).ؾۋm_;!OM>`N͘%ղ'O5sNw>'}e|ў!Cȏ}>!Cȕ&Cڇw;xNַ?~~5m
+6lή'7һ߲//o5?|~x\m{RwkVQݬmNmt[<Ұr>|7Q;O7|<77?^j{ovx69.K۶wm \\[Sv|37M\>OyyA[lOy)١)N~=?3DGE{1i_רlZ 0 rc<{oSko罀F6ɉCo6{o294bzx'wA/ԳLwöxa94l994 1"m|5M./zz΅{g;c[=|lIٶ5rty޳sw=&D/S|_Ϡ~ўi.loG_B k]p?$ߐqwmn~ۍO۞h-: Oh l˨<NPadomiLSbZio_o7㥫EݢJSPd^j}ScXۖ]qjSckU\wjwjlﱻwjlNwjԀivweoao.c=:{8 cd3oɮ7]ܝf3{3|4wo]񞍊~W~`[vTxdG7WË9+?o)ϕ陱6=k =uѽS=Ё.z@2#>3 -7$dwժg۠MߞFocdž}y)J)ЪK|\3Fh=K|o=kso-po 7P|oּN|7vı-Gŷ.[|36hnX||d뭾y=vo, Hl#;ϑbgx aOy_Cy(gg7;v2*R?<=囅n~==x}NW?>{
+۾6j̮-ט;>f-?]ߑ9mOpOޖ9)ܛV<`07'麲u|ߣ7_?o~0Khm;2Ӿ;;M{ӳ6izAh P`lC񗍜Ocm
+e?j ~o
+7u!0f_A.xL.b0tqs?
+q H#[wWl‹_5o G|;>qr[ qbPYǩQh (ں{m󝺋oW.>yig0ԇVShr]@Q<,b>܊fEe6d21?5?ŝ+2m(iEtAt~'(;؇+4=a!U.Zo9㭦}ԍMqWi0&r TXtl1lwMU֨E1‘cKz~A7xh]]דqWo_|qrzyy`ǷM4,Ͽ=/n+oO+gqڼT/9iFK9V1g٫9w┷M6FFo 1 ?훿
+oD O8A5y{R6b/;~|bN?<M&oEl=aC|<cC~J/կ`C-mLrz%.{xq9@YBŨ}jI5"tq=Cb
+ % :져3Ґra踳%:Qw>-xZM|6Vō댝ٴm>{a+XSPrΣ]rC d<l婣Z橸EEѿq<ztA8`׋ZǨf׸(j-qwifqOnƙY~ltΧ#t ;–%ܝ6LC>w}^xh>Uʼ֭c^㋧@XxarG>9@o'GT5߼;K깉Jv~zˋhܝ~qyhj^{om#|Kh/mwKKM~R}}׿YI|v?|_.yͫo(BSKLL4)tu'j.'
+.TzIc׊{x . ' 3`l-SE-To(^zPE.n|<fRRQ˰V8jwxڭ.6)oH4!O䍪3rWS颺-"C+=S2ݶQS;]L{-sjzʤwqFn֫|h|bT+Ll4~5uc+
+rT}T'F.čĵcU-NC&e{ΕzŽT.5X>2 nu•ѦA5=$^䌊VѭUe뒏Yت CEK^%\|$<Tq;(5$;.i II說?5!o֐ףW+? ~#'D:kxzT)k6V c*^bnZa*$?0Y+⮊os&ŴǸ^϶a1јׯ_wŴ;.'0ek:_ӗ=
+OSS*v|]gMԨ8=R4U>"ZO!.HL|~tac4Fɫkx*l(Һ
+
+;f0]<^C {#QQCЊfC,nE`#n韉یv^&Xb}ҁx7}N'mb:"^-$DKM%.<!I-Z?>6ѣ~xt,G*n}lߏ[;q m[{_
+Jg`;콊)NNVEKQvvn c؛L4F5D!F:HgŲF GBf\ba]Bʭy̩uO!ՔnE,# wv<dpr}?Pbi Ιф`ue?;c'9_n̫^0>GfwnXǨŸI7'BdX鞗Brsvss%(wuP.WDu`^)Y{ܤ_D ؁[$LUJ|'Ȓ`%W5b4|DNd+@H*wۨ[W^@vm'\<~#)|c-4\w*z;88g6 p7G֠j>^[*):oB̻SrSMpGw
+ڥPmC;1,4q&gϧ55:UzIP?O
+T87]<QīԊŇUCEj f!pT\+~Gɮal$''M뗱%QV6Y!-<ٜ ,CS+enK)wyw \  1qq)8L[oԁ4rTbdv]4ś4Z
+ |k
+jMP`c&@_eu+yg
+w]JͲU$+W9DwA)G
+W-;wV;Q!n[^޶릛V2-!
+ho6PFdjk${-U808@uXR @*o83djVVgoձ:n?}n| !-xr?Fa:vkn0ҨN&D2g.T$I]2I3Ny9ɼKry^{_vpZ?HEF
+4qBHxceXg2;v|T=@"yD/z7{
+<l
+mg>N8_Y
+̓sfE+)a(VZ%+OoTg7:9-1.I0'+!AÑoE?N3E#vNyoLIx\!Ifl|qM"-kaC!$}5VP g6 J1DTM><Mh Fm0VT﷔[g;֣%y4:@c&;Ⴄ6z+|U$2_d;$d\|ԉvHg1)
+(ɿZKx 3;B4O tf8&%6 "3r,a|x;K ~=2ˉwDSiOҀq@8[p-A"?DpSOI
+<m` 96M(F@Ƙ>9#Ksܼ2^4Uc/`u!y?eaO7q;B.#  f KXt| 4cv!b_nE/JD"5ܵIZtSrI MxG>#Exa8qI;ݦ%c(x {83>%Pcg%ܗٟ9xHf
+'gUR8K)$X68KQw] /a3WBL]6*`tv
+5,S AQƱ⎛hIW 7b'*+d; x$Jf IEg{UX1<$YYCYއI Ь
+ĉ G-b8:g 7о:ʼF/̫{`Y\,>@gt{`2Wl$` HKN6;9
+7ՇM:
+ܽh2uQIa'!Q-ylڎh{r[%?8;wpp,Vo2RsK^xPwƨ:8^x,!C*>~tf1 H^. Ճ8 "6Y!~,ڍ
+t(I
+x:8Eb{;>8N9_ =@ŧv놑( a@
+ Zxֆh%J,,K- ,ɠ?8̈́ :Oۉ \n8e/
+c`WL67a`
+n 쩴Yq,-W㩕H/sJvi8Z wĂ\I Xh}>LXW(^W MTOHIcg^?q+W-cyڌ_C%~&'ր;&D fM+4z,`oyxvS%%νkzQ#BYIWAXߵaq_:Nd$Ċ/[ԙt+nHf07C)#6-XT!-:d1L<xA$q=D NF*ҦWwR~<2@ 9<6:84h|w0󥈢n>
+۞|'񃅇j5`Q_17%,kׂDƂ\ӉSԤdZ4ӗq 6uu J] LXC8RI`:Ӵ;>u_wj;_#")ĺ:X+Sj<8cS5x+ '%(Ȓ2E+<* dbTmǦ+t
+3;KVL<mK՛[VOvO"
+1[\otf[-/G|̙6Nh[fgksac #;,0g}I%X2-gڎJk2WԾ)نi]@bdFxGh<APv<=RI9Fd9N{Za]~ܓ)eZWiM`@-#$NL6
+] 'Qҙ#F۶5H5kc+.spavJ<:)D85B_RV@/=gwPU&"Nӑ50VW%"ER[QTf@ui5
+廰Q6|<nCTdY
+t'SGIto%dHZPKSs~gm^9+ҽתYZ>f0*5O9bi0Kӧߩt>ʼ k͋?ͫ}撿7?]\'o_es~xHEVOh;fՁOgm~ qzmx=b<ظwB{-"'Q
+אC->dfp-ƿ]ah?lqjCǂAف8C񪎎G- Cfxx;4I{߇Ś\^Jか=Y41{( Vk3FYK1+w{:& ?m%'I:!%m%<-R4 BmKC™AjOVpE;Äk&=2PRT%1QҒQڀG:%QЀ>$vHy c -90ϣU<XLM*$w|(V00m4DލIߢ<$ZƜ{E~]+)'
+aA ݑP
+V[s@ѧx؇8فC^':\:NKْɲ)a^xq\ʆp9ށk9`v{G/-FFqJ˺P
+L>(D}c'<͠ J
+]2kHrvbIٸ ُE6es ؠ0mmQСaLS1>ބO+ /Ѥ0,8!EPcRpBhseŒ/74
+b?|8Z(z GAgHwiMcr%=]D
+d 汳,Xb<i* ZNPa1mw ر*FLhX"j:Y#(\h qDq2*yU‘>Z)` @g0R|t
+G oᤱɔ~&#Əd(‡nRgeH9݅
+7䩰؟wuyhqNsbCbI؎ۆ,UkSO$j`Z .}+jqNQ.u,]jc1=T0u] @cFUgzjzқU.&&Bѹ]9b-6 6-0 5xs=O'=&#Cg1ǒ
+NI
+JrrlZP
+:\(<F_pà
+M<-ٸ,}"Ձ"Z AC {L
+2ShI~n 0ULR\^0HE9" 3V٥+-Qs-0+3Jw%D>> QSڀx;fj4c P
+tJ^Z2&x)2RuLF(tXtZ; gf+|=x%cpFWL@qۤ+ Pa3D S [S=Gk@PZ. d=7''Ƿ(Wu,v?wn#b8[[㬴N
+SX
+MLRXssL:յy>CJ=bt{怲)`<1EQ!)m4ZH
+h:U 8S4uޓcDRTZō i$^tWhzɔd[f^H"KRf芻E[:eV7XVT;F6CjlJ*ZΠ?
+~C>'<<6MLQ^LyR'M#;l=K%q(fRugv%Ug`p0RJȮ%$nebE_\$H&%휚 ݥKޥD+X.שA8Z<q05HԌy\DCYVgƻ=D0KLLvkm-iN*mPډ [<]ɲREh: 0SUB!1u\!Q8JU2gXhi]::Ǐ~wa*{BHIǽTp!
+D'!'nvLLT-hCqhY~qܖEQ )և`A!tgv@%<ԩL9p:2_PmIǕZ> .T_ewAo`ӚBߤ>"1`yIyL!yf{
+`<*L7N\Σh00?`^^jIowKX90
+߮Ƿ_* na3
+gSӌT/s|@F1~X̼t({X/ Kmp;*x ]gtBVD brKi85\[pL눁NWpYZ "* 5&$<h-NhTлt!ʢ%;-6:'0Q(ݨgey~Z(aНkaA T$
+DD
+k/[|
+2Cy2A@` d[<hX '`$&&!ݫl2śOQ&Q8|<ژH@NMuBh 6&0qj1
+ IA+'PIj5gO,1qR״2<Nа$!Ȁ-GKTx#%.
+!7tF
+g6 A`jq4F-dmkFb6ŝYqL+G|<<Yr`Bܭ {'>lf uE>fb F%,l+
+_AaUsubRb
+=q])x|[Xa
+WY[QcHPE.<աiJv8EЩ>K./98~;!KǃaJg`<ZTLoeuMO](+lrP'Qbx"=)$LӉtw[`^b%e}ȕ(N"zBHvጲ*Լeqdw3,?Y_n :A31Nr$v_CĀQc Z2A[QGA+Dh&l'@:-XfE@j+DZ
+
+J0*qe>},I
+YC:/V0Z 3Bòv u˽ Vx7O<` !wzd.pdi|h 4-pt7-+;
+6^qJlզj 
+ģH05:a0K_K}IL A#0] ]ǃX3#6DK3Cʢ۸u%j?XXPM\yJrcyP+'kk& n,@+H+DW
+wftCsĬ..shP*q,G}SMNw@I+$٤&ݎ]
+31Qt 7^pZֳT5NQ[f#O8Niŗt8Zv?8{C@YB,n XbQ+1@>du\0pw]0(ߐ͙`gRRLL5Db%Jzk2#,ybѐv)F+*iLQCT=t'k8xbIŒމg 5G48Dw NP``')-A6 80JP8reH!|o[oaaJ*3]
+b
+۪Iԛgl骃D`u4$<6ŏΉx1IMP0Z)#!Ĉy`D{_Cf! m$[w܃
+Yuuz'"
+i:KC\r;]PSIP2w-8
+tKJ]Hm"/@a0%}&&pezR/ +b[|+C`NhOmc5I.G3$\Ј!ݕ;hմ`xRFzпQG᠄P5bB-Rdd0y:(O¢9(  n%Ah"q5;eCkpYRM1=`6u$*hxl@)tq
+:'liOyͱyȄ19\6"~^D]XlA1bFN0
+Ǭ
+ͅ'*AI^:cb!
+I€{h5йG2m@ÿ cN19Q%к-;#6Mm2N/D48|[Syb*D88T- b*iY94Myiܰft@W2⯡-Nq B7D`2&'Hi#bEk uC
+y؛iw`KnR.e -Ik8d\m̕a6O͎ C2irEʠjN4q6Y
+
+$X0=B,t [bҧ vHAc#Σoq@`Ls$0`n c1GDa!p#C$ _C]BDG,֦>W`:d'lt@ (.i 7.7|_yQJ
+d@CLI@?,1L Oq֎f-j&iW44Bc9#\ٔ%]GMc#^|8Dxx7b<j_M<y:Y/xr(If.Hyr:CX eÓ
+UgC?
+
+G.h,; 8zv Hgoh<z0Mr+Ƌ\l$ʆ,9%^+z.a{E΢ O"(qBVZiM
+mc0*%3|4U(n9
+ S</Uh`M^#`ru|qٔ*,To
+ %MS+E)3u ˥ހo#M%H>+,ñ2ݲL Bˍ:APʀVkGHb,\&ܓ%m* g.eiH"CjiG}F
+zO40G
+,Hj a8COxqr[لD2߰iKfY
+BoR
+ZѽV#y8Ca1]t ~nA$*-؅Ț"-Ҡ`/,! Į l-Ievl2BFWˑ}F_Jg"1ӯo  ;=[vF&Ԍ¾@C-d!S` Y%c@ɤ>^('!yee lP"Ĵ"G=wX[8 řh2&<Gf%:0"CH $~bC@7ł="m#9sŸ)9"W.6}J;houkTX)A,HmxGeఇ4,^OcY%#:qhIX` z48*Β* ) u F zBh%#@_\xTꨝgiE%#DT7% 
+ A$2B 
+r
+
+tm*@'C(@hiZ xa N$`ͮ&= ۳k 2E|` !VBF27`bAI~K&zQ=/e*QC?nӍ x
+®8)$\EEa`] L! ?as|
+VH?a!+O愶57)oۆ)Sh~څ뜟
+T #mI`2ْPa8b
+}礌ʄf[KPiX<C.hó@ `#>}YjˌH{9<{|"<ֈ@]Aٺ ,1@0f$ڜi)
+da4<4
+B\Z(0]N@i
+.M%!M4Jfut5 Ieo=`,SI$V^UY$pb"'
+ T\9ist PSsC \3!PjKdO@!X(."&a $ UHwKTiW=vHGPJ,P^2J.m|"b&a{4!x)@ğE1X@-nHxDP$AFQOC$ \B":]LlP
+S
+v(99I*AH3@aHW8 ~}KbʄG5(O,w3@.xd e5$&0&V(&
+`| P r1 3&3s!‘:mVD :LI fHjO,0`Hn0!
+謯6&SIc.x Xr-H?,hL@*Z~#W 3Q
+fpR [xQ
+j/i얨=b|q.@GGے9ゼJ$͖eVSpP.K.BG}K>y`BA*
+P>8$Qr_WmO'~^bwkEl:V fE"i=vI)Clf&Hɝ4M禘d (`2hFfP6zpK3XIC(@H0vϑk4% t!FXi†p.i.]=q`E£v;ѠԂUQbڔ`s
+0
+sDUDL{hЖ=ڌn1dY χ nWhz 4~$ylU)XO<APm>+-/e |CAm
+ i&rb>ѝH;E^$%QS8CN aWJFnhޒ׉hNA|lO7.LpRc I4JZ QK/<D7
+#
+')SITAmiDm ?኶)NH<̏@Qc
+ҰиP|ę1c
+=ii)A!*-u,a$<[g;1̘8'`C}= УE^Pv'.LZ !w0bBH{b6ђh$P4G*g.<W3uHl+qR2+p:v Dp0D_
+JHwB`6I2(ʉJ`F22{ӳgQH^8 UC}) GL/Tla&pa4 ug4,s0
+>}:Q3  ?Z 3~ ~0[vp(@N.Uas%Dah
+%$4 !᜵>w ^ BBzDVÕMc9֖d{7L V70^Tl!?V
+<ǛyͩUdc?rb%2'2h>[@2tx>pZs-X "ZL!9@4@fx ª2ὄ= fP
+JCڂ"!_,<[ LzC
+{0{;S窥pjR5]^k6"UmrRs.䖞7ڋ[O\7ٖ\)1[9؞HjlL"jpFى- 9נW$ޤ?'_[9'*_]=hTs7j&S=[#4ĝ;w'א`×%ukA*.=P}ƟYGY4%ZI|FyzW)P!a`씘hsz#ؕ`0-bmo,5
+P6S(b(}&ɊϔJF;p3yOϼ?ce(11_f>Sl}"ʡ !1bķBpjHg8%RL3Vԙ0t,nsŊI](ҁ:+nM88rEul q)-i##Xs䉪@6@}M0O[8<ɬhJ3ɘ[?h~b
+uKhDPay2bPþ)Z$2:FAPEYiCA[TIJt •KھYxJ[32_oyUO~|132ch 3314]+I_S٤k`#`ԥ+Ҕ2}4h@/w-viqPFҚ#o1tPDbu"  HaAsn=(hBJfOiltӊwFQGD;J(:QFvt o2r6'
+p 0۞]C4£<M>G#?Á(WTIEv
+0
+`1Y!w#;-d
+
+#~(jtn6j`Mr֖Ȯ8>>+(Jd]
+@Hx
+ln=Xb"P5 (S,OU4 ؼd0At MFu#[_F8neiVmۧO(=b
+'C`!ؼ/s6&QYWn-̜!MFgZPsZIw~ ͍x"巈"(zZD`|x j&C=u
+A )
+6IĪ>9
+~4'LӏLT:GǗ7|jps~1JoCo-˿L\S__k2Ϻ 4"
+cKC׏_zڕVPZϒI?!_'~jH2^U;fK4Z,1H(|[W!r4%qu;dۨCVjիEg 9b*vQ]CX|j^GDv}]Jkm*#>E|uM@WwQFݸө
+؊;tU}>@֮7)ס90
+>S`GG2FM8bWK]>9FIخP,xC+Nhw*\i
+ߡpgiWX8*3ء{^ڪ]|G6-exc`e>1Kr$1)12~N}ԥr)/u\\^nKjzU{I)&4)CfvIw{.[()$P~#S媉 _-jxJToΪ#zDjgL6{. K7t֕1;*(L5[n~G<Su?SUs7 W+X,Bb3U&oߵTP/LɌRSe>}|͡g8!^9j "OZ퓕ؿ^j5MHφߟF&_+l :Y?[]>8xpѿKIM?u/(*zYFۨ=YFcA~iU ugKRnɓviM!6!9N={{}X~`g!_ꉎ@%
+'%hsu?.^u|Xsڹ^Ui~n /OKkꍱw{؇FT?<ύ柴mr3IBr5<<i{N!+zٖoku7X
+|Ӿ篤yai/wR{VE&{P-+mݐ~9ޟs ĘVS3iTx.S75;цS/"N}1O<¯e4?a{<>gH؁ѵytm6Oyؖa(ǎ4
+~[=;Ʀcjvq]Gw?Z=~mk 5ZKѝ"o=̟vtm.4y8]GoT۾6A{%p^#v>~GLNnO 5|twWֻޮ"~N=#Z>=rze]/bL!;̀k
+j''F_ҿg̖
+O?ldnRBdjDVV%NC#^, U/D5U6ݬd[R+ZkdUxx*j}a mZh~Q%+֡Ӗ/[*m
+O*ҧQGm_/;]f[z? Q/0;Ha1cb)f-3N|>dڍ3u'BMm~k\sVYk<[ǖ)nOxH c_ѨNM~ղVˤsuS/PӉtxt':nn9M/֋nc yFݨ'hvkӨQ?ޥ&-=jGMbMZ]E<7ZvǫYo2791_fLUmxQM.Q/'0x9SZ4ߴ>t|[&w%o>{=))Tndkg.W*J4y󁭵@%Hڎ9r-DټU7NC]m;jTzak5_
+jAk5O;\T{q^[nk ;լZoV3_hZxf[5xUw5.tm>S):kqbbB@lal?<'cy-s 8uo\*٬_" z]IqaSyrypu|R3 7 iuhc[b.SW
+*ݩ0Zjߚ˔JiQ4<Mf$f]u\ jWx ^SQzgr<Vb*77`~9vj.UU51<nԉ:_:<X]&!U@(P[RkI{$:s󞞉j~{:_Q 5mjr/^ ՞x3ׅ{&3-޽QoS^.;ٟ7'jq%=(
+vo^B>Ŏa\ SoA{G5Mr}[%YU|y~rM{c}og\J Xַy7:OlnWg݄bT֎lG>gv*s]ۍBWDZ.g7, @fnbv4c%Qꉻjj|\s9jzy`#WOfj\5_zl9uS0pZh+q'G[ahiSX'o[ɨaZI4hv#76>l*l 7z:_o ~0m)Xϔ2wv MNz"zJꉦ޾ۍ3igLCkrVZ.*fR Jb^nLε&*+jS!Ӝ4Wn6׬⠵@ZVsAulMIahc[_Mv
+Ron1-ϮrM$ûL)IJfU,v =̮,>
+9U1֍TUTvtoW˷Bn-6RyZm e%Xi=| M{k'ޫm¶Z1LaNKr `vvk%4lIٲ-9!k\|[tyҍ>NҖWnc>1[xRvT~:n镻_j,%w]oL>mƛ:xRMOfҶkǫfQʤz}[5Xu&Wߕ2W{E.kDV}GL:_/f*W:ն~vPMe%R!Tl,kXz*W1a2o^UU;6eZg:E2;r*wŇRU骅N17G=!TsUorX1+ЋM/ݖߨV!QߨJq:Sҹx ITA \/W]4v|^^Tj~GFQ7wԎ|iLT)Q+TO*r^" Ԏ ,"k2Oj޽gR"RODߗXZW(Z$tj/9[LEqkeb-K@!jY%:ExK^'ro6]iy=Pzw*gql;V@IW o>HGk%neJ
+9;>If1)XWd "o5ut|QN~bdX:u$OW_}S7)zI˵l]Jkk@ji۳bMs_woo*a{-vGz+T2Y'[֥N]iR[bD5:2kP-ClҮWϟLUTSr24WR.ӴtxV:3KC]j?O37jy<[չbyl,_&Tr%
+W>n^U_YO6ΔJ% ^W0ҝ:׌vo=)_N6߰FMsޏZx}^Ѩx~CzCwH"vWeS-Q(mtjUTk94FF4o{92٬uW֖hGxW)Je7=^\íùށL}/owjwtwxgSc]ANΊ60_חfrKȣug/u\^^ -u&sT|+4.սx30'YO4[FNN؃csfChzl'2M|3.oϧz}oqjah.unlntG5e+3+Ws{C #NTcp>߾pjK}?UMM~RZꛚ?RTåB?a Wg﻽7#[b264w9;v9ygnON9T:_kG=2y;j}9Z7Kv6Y kصVz΢,KY>P .ndnNnMݷ)/HէϏFSV/gǓ_?_/Gg=6;^ftpkkB*upg O'Kɝ)<|2;~靼^\ߜ=X;tw'& }oc{4|e<}<Ýﷳ+wɽͽ˛ڴpdpx(<z
+WGNk'g`0wmexl0;;;Yy>?b(y90|qy,_G&2uSp y
+a@.}x3wS r[vz W/./t~8>=eyzΦrۅ/gEq~uX-Y垁{)l=VR_z*rfߣ]?^l,VT=.P Uxvr׭6럶'_ʕИv4t\LY 
+k#O8Zzژ9<~}se55t:[͞FT7]|Nmع!87Kix˛oѓm7٠wַ2J)t;>}cO/߿^|]L?ΌۃO_FԞry:g9[0
+Bd?Y--gsSkɕth{gqX[h}p羼~rgn|M@o{77,Y:m񹃓C?m>_-Xʮ_ ̌M<oWVvY9tn_ZݥeO^M_2ɭL&uq9$)7+KR\(ޮޯnݍ{CQΛ|~M!^?v +_RZvx9c{ٸJ-OO cuqؒ2j28f;=U+t^\<gy}'C/OvW΍+g#\}lia80>فυ׵V0uqҷq<^Mr'|Ҽ|:w_Gǿ;yc]NXe٫ՠoDp<Ñ<y>8}Vϓ3g`tv`¦u6ͥclRj1<_n_IO[|[pa8>X̍/-ݡQqej}g`18ss2fݎ ~?q0P nExpkbh3l_OlO-<v.J{dr`Gpyp{W{yv(WvK'7zk^,_˝ޫL\VQ:; ܜ杛\̺ noփYw_蟟oM_O7'6S1opUbכg{l\<ՇB <*biȪN˩fmduN_w{QfO큣kVRe(Pޞ91GrCѴU9uolL~w>_}zJNz`jcl45>zv69~C3׾}ֈ?Yg}~]d;+_ݱ{q8MoN^ xkw2}/G^8w><2ћ=ٛ8M O;SKЬ%8Rލow>[؜7V=Vtl>*_Z^X?.~ں*)_^{
+K7Y/Y^l+;c{Yr-xYgz/lnnj3[g`󢜼ؚ(nl=<_O;7]k~{+͚rߧs0Z;^=?zç~e#}ԮƎ/哵B}{3pz~{<\./ӽЈyyqur훸[~nW盕k<D33g s[JWƵ?%E햷+fl_f~) +Lt4,o|;MG73熪Y쬯~.O-]\ l~IWwԷXLӛ~m`uV[9:X+}z>]O\{'މ0)/wVSְ98-X W^ǗwFfWX|6vWR9R٩k,~5lX[+tvr2\-8O}.?,o'˹uV ǗV)X:Zuo
+c33١Uj25'NWCyP g./&'ѱ=/m<,&6Žzfmw%8uoFF(]bt0}q>'šs<z]-ӮgOhkN
+C+c}j*;_v]||9 Nom_ύWm黃rj /&Rd}n&\~O,M\n͝|;WS+Gpdtcxs9F6{K}xvܷ}ppƂ<|ެMlP T
+Ǖo'CW{#wݦ>w4<ܝLSlZX+m=,.n+_.|u'iu;7Y.V7>끱}^:\Jϭ]xC^ѽ[[9xXKmO~J]nmM/o*bx4[W3[7eu\];ȍ\m~p?yS#; Wj:lL,'<܌W.>_/U3S;PicɍOXaa0Uz77O'F&VVWkG /{BgmݺٿKW v6o桽0vF^=8n𗜵ϏOg.nG=[xlU7TmNmvnlrstx-ݛn hg`xepbM?WF{?߬'cV+dW|=|?XO߾>m^$s+չ`f՚o&ӥVj:x8bo#Xt5~q1ed/j7ޘqrri5u%]w>NnګyOiJ$rcˏclrk_l v7nՑu22m]]J;6WJskky6)Wm->Z<\
+?m־^:N扻5ylgVwwûțO卛͓V>Im6ܩdexoW;;}mwkT͇͡Ta}7Nn_ͭgۡq+ήfTn!
+Lu[A<s?Xh@%)2ϒs ߝ+Jnw~5CYuEnRe9mלּ$Ȩ5 <6]sRjaI-\B?ѻP3Ҽ֞
+jWi^& d{BeqJbס{K֨;zkvѕ{"׺gMCdV>Fg2JWWeIcԮNŝiZ6äskV9%qVߝ%Kj9q8! ָ(Y.g7oqnC""Ok'A`λmik/#o5e$AW"aJ?j0]2q5}RQcXwm>@kIּM;Zy^&ݝNj FAUHIP.~ 42~ 77>M p2:|ת6HK&FBxu>ĥrˣdvn,`h5׿GiawzomC="ɟosn) +| pUlx6rROյ`ӭYU>b@tgn UZrF ^fĂ.uu 6dk!2XqWmO9=佐/SWNgY.T?1Sz:6 zk]¬OvW0f1ߙjvqLd5ڸv.4Ў.Xrb"_!2ǦKD_*+Vp! Ӄ[ݣ ş[ZJw+ 
+ԓܗ=idAG#gg8CzM2B"{vbfENr5"
+7vv$nyKŚ^ >('=%QQ9uX>\Y>Gu<6"_Ě?
+[Jɲ=eRK;zL[S'`ey;t_Tx3-ytu>|s
+[GG6\NWЍP҈`RM~GHI{6L> >'e|EL#3cvS`=_f}n ȏǰ
+lP;`OYtʐTcޚ>JT?YնQ9T|FJHg_hzy'͖q d%&x=83xˉմ\м!2Fz_sdوvﭪ qY~$ٓ'
+7.4`+0i{/*GV>
+WQ'y#ڬJiWLY b:E6N^caQێ9
+/Sw'Az]څe(ِ,
+/X»#㳗nDjSӄN] y7*`.!.SP)v
+ bH#E4 zSbq3}t
+hW$Ȼ>
+@JFERzo]!Zx& rEo=67*oLzF\ʕzzf^+l5[/xcQ$w?jzǷ]
+
+*anLp
+R[i]ɾ4%qpS ?x!@}3OXS-6AsS :L4e~>Tia&n$\ԈW6gs˼ۋmVFULgje1VZ_iArˠ
+S(U7S)k[w'`)<tX!LwFcˢ"^>yj~?l<:| ^٧hDí.
+ G
+˯ߛ7ݚ9H-
+Γ$#
+Zh3QF ^k3{Ol07;(}& s _b*~|jGRTX:Yԯ wۑLvGyݱ<؟~x
+VNDWjL|؞fog`NWúqַAxZM.BU+xUaaH!0hj]~uY[XAFb'I*ϯ^>-![lf}`S>ɯm ù~+b
+E\!vHsVZ0NK ճ並jK.c; !֧lj̷ >2MCOɎ_DˆՔo&"~߱fzε6? /2к
+9sFޒ{$mvF"Gt/҃>j 9I]nMIG `[Ii)6I^jxGGI%HY9=($U{I򁹀:؁?ȍ7~eE3;z*FՌ,xMrmꮺR @Hډ*c{ x[A=_|1v\{Ld GBjHQci7]ShZKD(D}툅ٳ/GD0u)xgaOø](ѨbeïZ%0́+䥆 @۳~E'{`(g 拳ݔO baYA[s~w/a${XYsN )%\|+βPbN~q]̐
+˛,wnvW#4
+/v j:wv.\㴘֌*ץX[dt <Be= E!}}le_qX&m Bu AO<N<QxN߀P>[iu3|D/<;fmJȾ&d[qˈsc>8~ ^Z؏9~-
+[Su&{Oq]ֺsL[I\F{^okre
+[19fژyw6GBfY+ўG-i؂6a]vfOge'/:1YTTc[[IR62K+]y.^̽m [i3}W[f0]/k~ hXX:황4- e71ef2ME˟g%F|λI&eRU;0= 4g7.M:<~#QS ӭ7񦌆CW
+}ۙ.8gI8? wN|ZUOC8mI\nDa3: GfL
+[5pouZ!`.q-7., ׷AɏFY)Q+%)05#+u7V0X)Ԗ6xPe1Wf2 a7EJ6s?`C@y=*kk/SVv:]:tTz\kX@顱 [Y^4x.?Ȓyצ(̍!5GC16_kOƐ N/[_;[ ̝o_s\c};ttu*o`ѨllUQ֨
+&ޭCFjw8ZڠhlAq 9"[֮ss(@΁s{TޅM΢4
+SF]@!'ͺݬW@)sἪs'gJ뻰%vKYm{̰{E\.%-E8X(g (z+}'Tr!R;ꋪ@Puj!zA!L` L8XE^tSރ@kRLM\Uᷨ1t`=kZ]B սK~{Ya VaMLd b R휝Ƣ2+}gjzIAJJ!^HQFH2${0y{Z{BZr}aiPl ZqdQ\{
+QzVɈgU%Ĉ$IfWD Ժ ˻,ӆ`ug۞aUccu7llf]-:<P_^]656$d_ؑ?3C%T?AJl-vϯֻ0cW\>0Uɩ׃^UѺFM_{Z̧Henzڒsɜ&Fkܩ57\qZ98ͳ#nۊF|HoP+|zMT)
+VWFQcn3Uw+پk2ꡖqȚ喆hj=N|7S3]\.;$xq`%〫 ipXt|/c )..5$횲p`1>L]ϚeMMkN;k*b1wI0˞8bzC_1M-νlQA^|xе St/
+ .2.8'j2{Xѣ(,ͯ[, =%~t-n*QB ͮ윒I=-ܠ6#pt-ˮvW8{'G0uPKVl٭]n^%URf2ڽ<Q5Ԝ2
+<V!&2d{<-aWRe5 pv*d'Jo|}(
+dzQ՟%Ɠ; _)Gܸ\_ u䊮o>p+KEFν{[3b $api!^c) rKª ?\W>͘t}fM
+ 8<,ⓧ}M7ydsIY-;i[C%DX{]hm8C=ѓ_@xLBiI[ovTmM 'UάDvZ`UX'ޥI!ӼhN̈́߂94%
+:IiPnfD8BK%u;2g2'Gr\]\P~ҌN58& w!^̧t=+J!qMuE
+>GW,}c;y)9`(VFõH204=kܧ>-iڃT sB_Kˊ<;߲N(?Wxn>+ӬMjcijdMGEL'_ 'dEiϙē|dΫ
+i]"gSµ߻eK;N՜28
+gܵaIù` +A
+}"je ky [y N|jr=8B=Iw
+%wҮso_)RRr9nI3t#9ȳ)[Z"|Go8RlIZtUi)cyA$/L
+m<ۏ @<'uBpX[綗s^^'wQzCgGpieylTT *.A
+Asl ۻ2
+W"g%4)• TU_ u%L'O
+xR
+TY jg56*t<kU`jUEZ%h@|>5SiS ȤaeWҋh[o⼼[=9n?bJp/mV+ybE|٥rl\ΡF1 q{
+f:^HgsoaV"Î!D)>{u\j?grsQk9v7_ٰtčlvvHW%Eb:L? rIii7x
+)E*Jכ)3/b L|.E|ɍVU;8KE|–3n5Sf+VczK[.ZiU꾽) hX0R8ۇS$—שz}.md&Ah;}fT,^<|bɪ9;AABG#ƈгmYwn7-W)T^ cAE<';Ywyu .jE'.N ߾bv\kgumBV73o|rB@5p(nls 1Qgw)u>}H(Fexr΋?1BJPΏ)q(NRa{Ä-sP+ntO)=헣:GK,.#~FEjjd
+Zc Zf+7Oxjy4-btIHf7\)4a94h쫻L'_D^I<Hg{d/M@ ]9J #w@s2qiUb2츣#ɈS4jזĔS, Hywtް=,Z( n9S8&s|dF#I:čC%2uZ50#3SK޽1WJtN}!} Ns[8YAꞾݿ˸4)8J2ջꍴo;Bmmz~/:E{(NzВa:Xs,1JDc'S5lsS]&r{m!6n} [DWާ%w)0TgI q
+J5[E%ZˋdzH׹(qܐ&mbf |2i46bhKqZK9徤}{FU=ڑ ľzPSL\4a'[WDd+U]q>0. >#8/z3hOH&;G޴|bt{#p5L(|ԖN$ XFS,&E%Mp\{F@Ne}eQOk4u@7,[qJi&
+kܚ!Y2 Zܵsu:|]лm8oNEh^ MՒH-?uQD }<o3!1H*6s@|NggCyo+bY/A%1݁&~m[; fyCQn]wj%I{D_oؗZZvh^Iz
+t[D!j4XE<@9Ptp*},Rq4S6uF sT՞ear/st[e'l.)+1O΋v-sd@, 돶'nZ ۋ<IR52Ir^ 8]vSUh6R)y<BjkXmʐaSm}JV4CNw 0)WV&.!U
+3yfC?'C` 0R'k:& W=C==K>VWtRpxVV_a1]c7Mm]sMӛ|rҠM׸N_wDyOҳZq܍!ֲ/l7i'w>BG<x
+VoNU!v^_<b hy9.@5%38߱slҿ~cuup^`v]v,f.Gj2k;pճ%)l8,|T<kӔYOL֪X:}9- 4'Q@5ut@#^/0
+>?lP:NZ祍h{KA6;Qe<E1Xsr8Hm?>Aklד(<g Μq1u&+~sЯ+^IA~@~N9^~a"U}d!*TC TF3+}@eDz@? |^{>D4^er9$v{) .䷵ˆ+{W/9=Q:E>~o{yFW羫?b)g}bPzNa`|/Fl6I¡ދHm♪N/ ;n_ 3Bz@OeM< y2[knhⱛiܻ'Tƶ33rOiѓ}}_i95\56t237غ|jNy{ep_z/ x=ZuCtu-sT(gIkMK P/
+Ʈֱw='u>Qzgc|EF\. yNt$ۇzJПTdwzj312(v緟S\zܹ1ڳ|:\"vVm\ n8޹ z},{9,29[vߍȡP0ͣ<
+j=4TU3cb/wg2U1OC^cnVȹz iP.B s
+y
+hHB 6
+\3.P_yeKƺ9={hޭG1CZaikBd*#?ū/?: O"kz%08Q7h=/<ӪQdo?r?]0;vK..urz?p&*{Af-~qSnw62a 55[s7V.W>=R}jk^XNzc.-:qnw۸\R&s
+Zf:j Y3;Una;OyQy U^;jÉ.0Ma3x3H>2 S#;*W׊%uI{N'oh ^eqKZ%lxzzܰ5]x裋J(ӧwwG:Ċ{'Vcʗ@uF!"5!"Uo̘Txa|a$LI(N ǵ85BЄ+Ji_1&w)Jȶav-nw\p2h"Qο OߋmR))\-qԜü8kM.%NF:хHu,Rvu4B'UkUÈ*j _@6Yc K^ŶI4L_f;aӥYHjXP/-<2i3?sMW*y-޼}~Ś&MTLo3caKxB._kc7/'רpH[w vO t8L*K)[Ǹ˹.av;ץzsIሃsL283*s<Ę-UͬR</J·7ubs׹NSU\
+f)',ig2[U\[F6zdB{۟=.4`Τ9ari?%o]2Ӯ ³f<zw
+V/U0fC]+ȓtf%wu7ҙmFڹ] ;wWUkܣp
+"XP@D S*w6Pܚ5S]=+[Q^
+\ I-Bڟ'=4Yrc_Ywܚ(2S gf@#V]M3Fut}VmM
+T2\qCE6L ?],037i+POK8Z\kRe%sc.6^,ΐ6Ӯ;tٙݪ0ԯʟ[@7KXZ(J \m/WY6sHOƣ\2 T}bIA5gY1Ε]Ŋ;^}xRV# F{}Sϣ}S76\qŧ˜B<22,=yö *0YE! */B51.MEq
+ūxWy$w>Lb&*f0|ovx#{ا!&[kk6F~6f LS;ǚ"v,ֆ@ob֨թ|াsvufUg`ZcxušM 5x}ƺbE~~qDu<Lp ^Uꍿ)D)2e*v}@c<B
+J/#cK<X}W{l5T#1`NGI(:Jy+vT_q%s,Lk\f% 1z2Ŕ٬rړ,` 4/T8F\*EIdX!-pswh01:R38zσU'2^׆ q}Ugvøu$yҲʩU.UZI tjRgW`>Om$"L L)xڈ9ظXR_Ja]u^Lma=-y(L
+iQae{Vq#8Ѯ8*zS-79#>Uu44[鍯^a\ jt<}=mX@TÕ_')R= Fe /
+}{9ZA6oQgMi$fs.\Mu?#ېf^S=k9`L', )NN31ߝ&xA*uLXG# ˦n&ɌvtOYC$>FlC&=`My1hoeΓ痋;jOUzWssQ|^DڦI$wROwXC;f|wms<kbcpu\
+^O!AD7
+W5֞"3;ϺjR'y,f}]?M~WͰnj"/c5ky4t}1UAN|JHM%[]u &hw/0VXӸA)'TWm?BX uϺ'͎
+PNq>n{]n/~xs <$gW
+,sh~tmsBl[ z0uni]w6\=Z@/eMk` R̓'d'!'!4kd[g?.MdMS;vQiTѳ7t
+R=u\`@< ƘRSg%Y?d oAr.{ U |˸;9?\o3bl&rk{inϓQ?kH_ PmxBD1֨\<:cC[+z-H3*R%2ZJZ~:AsrN@y^9Qpu{Zh JEzp8_3|A[
+0d~ϒ_H?3(
+i*4XIuV
+f x"m+\Pݻ{=V"cE ̛D^JSN9o
+3~ |n)
+7&́陉Ǵ@ʠguKZE8]`3?;
+)ɍb?aKn:Wo5*bUhτR,I)oO2v׿;u3U$NVˢ(_~lk]mT+ fYQZZ6pZL,haqXáH Ŵim"z_6=rL_YҒRA 7Ҥ`m|O^X*HR/˕RB$ݵk%+2
+P( φ+ ՚=ܱ(D8f,+zPG42^FWfqsE7SD&!=1XmT{$_ؚx. -tok= 픎v@f+8<(*9UDVKfOr =|xi%{gB~Z- wwڔyhJh#ג.
+O9Wyf |m}U?7 l:q*׈J>,HI‡W.lK;uUҵ
+n^G&c%G݂UWԧ.<Fe)ܿ3.|
+, ;% [6dZYssՖπ-xT/-=IW'le'EUyjn58eYױ
+uQ"!Τ5 *9,Igt,*0؛0ܭW)W+b#1OZ@͒U yo($LBdkɇ? IA dxBhR`ɭu;4΍/T*$<b(8bwTEaFwJIwwE8^*hdw_wMtJzc -Q^mA)HĊhf>
+ ,MROBZTF8h5Ls/Ҕ*lE7V6wӚ2Gwm,>"A9眥ڟ:7Fճ欮.sy_9szYPQ}ȋWxKg*mx*M+bglm$Ծn+X h ]0hZ:1='w͌[`./_ҏU>l+^7ea[bqVTK
+_TE$]ߝ[3ǐz0H5s
+)?_sg<2E ).|?(t)z7;KH۶ŝM6NL[/@n7C07֒4|@>6>LѤ֌^85nR
+죥 v9u#,v8DQVh{oU~Zf89~Cp{h'%֡]VyBawD &aZg[>,&H jnZF/fPYwY..Ehg՟uwR|ɞ6r*Bk- f;mD{R:hړ4!6~^19S1n=%Ȱ]lvWK8'zz0QYhg)ZefCi9_!Z2]@C}@uMh?Ϣ|/ڥ_/TBh2"ԫz-"tpGhnޫ"
+"8+!\=YRn
+T2X&E}G΋^?NUh;:弔rFzSʍ%Q<I6𴨶_6+;6e_3]+wGi`(m[ŪnQ?r %Mh벚5dHytgf&^c8/2{r@+@.M
+>K6֙ m대'h(bG`}Uyr#
+|,Qnz׺&6~"ֱl^m'LzȤQuȩ\A-='T5l.Js̾z-JxYK[G3y-.>Pn{Z
+EY-}ê7b,|=77rv& OCVm5A6H0,JygB5 ='؟W< :}QM`GmL%-6?EtʇO \zE? T)(~[PΐCkb`dȯܤavHwWVF[%RHs>zA/Xا剗G[{1]qM;b`[l賷C*Mr=5GlXa ݫlއqWgFbgp0inS<L&՞dbVx?{nE]Cy*^W|Z6Pi!ɽCZ~?]]W~5w=oabqS:;Ƕ*X&> $p7o&iڒcȁFPr0MU
+WȌ[j@I re IQ~3d^<銃kJa&UyaTRY V8困U}bJtvʺJjɦSo:Un.`Pmqܗ`h=u[D6(ڈ/o2
+m{Hj6AsO?pk2G`ae C l^;C$Hriǻ;)Yz/'}3gq]M[6xqϤY]P><,ʡ!* d&qG!dvW*p`6o V=j߅Q{2:I}v(uYz9&aT!(_0BWynݱvλoo &̂Odm'/
+e}n|VCl6vNjO$\4ω?_*]so?
+rKy>Bm1FU74A-ir\2:)&9C ctO @ZR l}CyvukVYN'͘G)s5`-HHz0opۈ^bUAPוZ4X=T1jmYӪkVnv}>I #_f|<
+7d7Yy$*82XͣAV_,$*DE/G;zR~Lܭ TXHkog()MO\0Ӑ`ݨ|Ushp^o_/AS `i2\ pTRo͵19vY?hr!*^ܱhY_' u0^*3utV׵Yyu[mG^xm1hb!}69ZjGFojͭu|y6X=dBeB`ǜGUܛ\%Li_\Uh-{6pΐrGntXp blywQD"K F8#6KG皯`t#ͨp.61; :v'9fC% 
+ό-FV vD*} "O?$Է|Olr4)u<H5KUC}}ח;dVֿ3P|O@/Qv;ь(c˹}9{(+4V4+?DH>=rq(5;Kar޳=~o {6E}CIݯƩGhD`r?6
+|O@M=Kv= egC 'Zfi6
+Z;K޶8.dhџ"K;_C"K=Uc^N:[yMЮëbW$} ƥ?s]ٸb%ī=o`<7{
+XlFMZ%\,ıjkR`< .Z:XZ}t;]E}OsSe6-gUنF鼈ko"uA5Wwx90\ }7Wi:bZ,+apȺ I[e왅JZ%0j 6b4ɕy6[GXtܖ"btOrᑗqJ7JW
+  #?ْ1mvIbv.hҀިn=J,3+pv)0r\I+np '([#
+#9Yl׋'l/jFd>\8^G}]9/lqJ~S #c$]vu wռ;/s,N% @}Va1EX+mL=|*GcwE;׺vC5f(:|ίzV΄PT:!0'~K q~o͛ /b"݀W& B6;3vSRaDZd![RK5z3Փej95is^d|lg4ۿEtmFWmFx0e jq즙mZʸl|Ƞg95.䃴:j%:U抉׃}݃^鎪)GBu-ZAFGQSDcg 3EAa0%ZaɘX
+G;bZ.X͗OqHZ³`|]vi&BLh@-=`bЦ͟`&S|A_E"Zބm C;dmCx\gtDx LxahHyXP
+H|[m뗡œgΔ򆅟9H͒bէ _@=8j4a_a-ßXdVvKoMN=7hV;,6uwP1] TI9Sym#&ey8Y,k4QdEKf\Y{#_7CBtW=5u_jW#=sceaJ4N|o/=lEQǴ)נkmSGΰaeQuuUxC=W'yUbjŽqz:] diB!0}K}wPF}'j|^C3 P_\IhMn)cS (Q7 *3MqOu}m}#rօBTmn%qݜr>p%ɥiǀ""5DM:Z'$ “/VWe]_~09X6)ˇE,*`1\pxIH|]4P_nҕ{
+߷g(tK'x44]A|r`!ħKhpP$pz.k,kォa+Qu>G-jD$D{GЖZNkI)?n s^VxOmlNMoQvB,9qR [/1JLI`I=)|nK!_7<NTRB((S;mBt[~ (RuZ ZG~|%o g2WhtgdO:]At\yޒªsĽ_Bl.L{׀bI>3ifr|@{}*ۥ51WP(#,tճAd[zHS
+.z*n Ix}<>jzxRD ٯ-o!pE1Ңy]
+'oON=u+< .D ӕo2:e?j^W|/(
+IMv[1%MƠwvcgr1
+Y'.U(\s ڹv~l,i߆/C5#S"yM>aX].#5~+̮ _ಣ27"W$2Ex}c^tUnqv{@tF_<\=ꗫ7d>`ZY8"<cH"ñ۲w[-/eҔt^0J,~FS_i?D@p1Փйoڋz.$
+U2RNYX_2
+oߏS~@D,e@J""oK&ȥH/w>?Fkf?A[م^U]6Q7cu㆜ŵd>Gּ<2_0'cr-qTMbp(4;fA~{
+_p:#_ƿ_~B&FbXƔn1= ~Xޘs }K
+UuD b;yImխl' čƵhzO1*@8)f9ĔS)ϴ u0w?&%Bn6_0
+udm5^vOG i?3G羿k Zv/+KˌnT| .#p HnY?cBXݪ,&DLSJ1', tj͌?Vc_9Qnef
+nKC(ă,U:uc_#||s)ϩ_0$fsVP"@#;ITJm5qT+[0ΠwVZl//`{@K= PNj#VXx3Gg2<n'
+oeK9
+Ȋ#t땣m.= |:'0Xjk$Dw $tyeZ
+5< Ukuz#Zuyrm}q߬мF:5L^qLAE.Pm>]# 7VLU~IWqrθ)LOfIT[׭Z}|'-eNSM,彶)>(؊`ٷJqei-
+;w sM
+E/8:nil wxRP?GJtz%nZ.OѶ;RwfrzFAq379<Ksd8*nse ~j6 鬏e ="}':ӲYvaztR%W63XصS`M39āK>ynp( t"[cz_a0]=yf
+ ǽ}Y>^~٧fī
+kٳmyl3[*FT^ fΰUkM2ej'ojHll
+MeoDiN?Š%9 -zۨDeݎ-~>Ϥl12!ډ+\np|y#ߝ
+Lyd·V$,ˈɲlȒjT\E9ir{ծtחa=d,oԔM2i Qdl*ժcb^m;GJۭ7 u
+ .Z*k,* .E!9}`
+c2A˥
+LݮcT+,2;D( 7(> XFYLtI~Lo))ytj>pKJD5FcwXз ] ٢)j]x ~F?S 1B"EbȚǶqg&-F%zzTά[=LJMnHe2faPLFez=qu<vqT/NK`/
+,*%KG?WVOI%ȫq}[j;:1ٟ!;({>6!q< >9~|F[yS;&HnUd-I~n"2KPr)H>g8`!Ap}̩񔜇pO}ߑ{AɖK=hŐ:Htd%6{> q 
+D|a/{h\)LenUxYh55Zp-m`tnN̴pvU2U%jiI[X bL3w^ rVpÂTNgxql;GBjφoUpI)@X
+׭z4f vOKnF87*[s9ZAՊl4i1u
+
+F6Χ5V =G9/ZzZbyd?8>Z 6;l1ޒyo{(Q|3i_UM7w&3h.3<Q{>/pƪ(F6pZ֓ݲ.X.4*mƻMs%:]շ[0LB+وY<N#~ֆWͿ1+1Ymz#7Ɉ'V3wU
+bj1Ԏ
+څXZ:NhQ=v[Ȩꙃj]w s5;^#ciViҍ>FuVfmmr?ě1L)Kg=fi'[jǷ׷<}6
+S(cʺY0 ugjh-I3Ǫ|6D(D.W2D[rFoujmZt ::؎ӽoJ8V D6Jֳ;lWPuj qzTo Vg #RB q{t@=fޡvmiCzZ&gti9[9۪T>͖(iuZiwvm݁RQ<ƻm>倓|霚k/h& ۅn'з =v~ (聯Ϥw1K]
+db. 7oGi=[cAv_KܤVW60Y 겲.ӳ*
+4wk3";]=ۑ>0/;'n V.LGH7w¹yNQ}z[թNqNvrh0?׽fO3f=+ףGzqzz'\У$s9݈+wr0y^RY>0eٹ'lzsGuzqW5}tI_̜JϝV^1`I-KҵO팰y@S9co)YϺomVY}VԝӢ8Vz>eYBU~rϙ ;vX>Ud.6>i|oy Ӿũ\U$3ܴ/n&d3Q?W3; X*sTDOҹ L{}TgZ͙`>2)ԺBY
+ Ws7 3o[@c+y]QX<=<bj
+?uJbr/s:eex.RVHfk$o;Ff顁 g/Of01v<ۙ^ceUٯ.`ާ.Q뾱Ch^" -.Esb
+HJ1$pJVQ)@J.z,TGQDڧr+% d"_+hע{f;V(or^rQC~9n
+8v][|bVqw21/bloР~5.|ʼ#{ 匣yµh.W?S)>X^TW$hnR9)#븨777K<50RY4
+4fv7ӋZ 4Wf%5ymv9f8><dd%}FNzjo9`$}U^8 ,R*#p~fٚFhհ 4AwAśI䷕k.T@I7~bfA-ZFuV;["L9~~qnWd>Gq]z̐jUC7F5I:]3,`~2檩Ar_QD &w#e.t*Qv{rc?MDo7+u_0ʂwex,ڝq>%Kh^e#sHfQ("0(rnZ<46ZN]ѳ2@
+AC輟i}{Z 뾒XӢ @.{v7# gQ޷y(@j*Om<o-0\ +G Z%S~f0:'`Ov1OfES׫dtPVi,uG}tV)Ux6~_ ji 7h:N;EtD6zN'_¯}fs|ZsL/qeO7U],>{|Y娟>8lmJoYX08>q^#/u4])
+Mum۹Ѽ=KKȍزXQɭ7> PQ+K!hdn=& ޮ\v
+X1%e&rj7#'uv?f`%D塂F<,#'t>-+< < 7Dy@
+BC\{ܲd_R[|5餾=pщ/ㅹT7,+T̒Xa9XRqQF/jD:V(3QS
+^)piGP&g1~,RLC
+ G)U^o8 qM^qA"2\zpExdyK4>hpw0-!e~:7>;%H`ATv֑yݤ[M͊/\d;]:չ=UjR։>^T N=ZiҴ R.ang.Ve]'f<7ԫ^e~W޽'%?q5c._iM,˗+ +x
+n%,"^(#6pDb};[yW4雷?;B14biqI&L9f;NUbdYoA)u)Rja0҂Y?:wR sWs_yxm٥/.RJfGCK48ҧ\]K}qirCU1$׹A_):oӐ
+B\˝UuyS<uԦinB%\y:y,)u\uFݯ6V*mz[QmbyJRWJ*ݧS1خy׻࿋:-~f{<QqwJ}vThw3[Û?hեк0N%]s&>aJʷAz9шT찕؇SSٌR2vYJt[Rǖq>4`&\qA
+ U(Kǭ/+ɢHsu%xSSɨW\ls]OV'N~"jf'Wx 癘iu]G=Rlfт2Sv*JE=.ӥzYw YNccFdwޛ{6 RԤ!?˽&#9,Lȝ)Bcv.y j涩W}ɹQ$hSx}ui%z*В.
+n~79 Z7Ω
+ߜ5&kiwuE\LC@PkE7|0\t[fn`~6F@"||c%.Z򃵧SMWeg:Z V3&*RWc5+K2TȽJu:s&PZH[Ϳ&܌ i#\Yw~.dp[|TP{_+ԌQtW4]{%g;ndNJ:4ȁgxz<: }k_P1pq]2^1y%E4~4ׇaa ߵ h]o4*5E>h5rW7b5MBII_
+ufi,?S2\/t.9[Ąѹ^g܈^s .ZGlvL^TַA<1CD
+^R吠11
+.jw_.bciط([8&o}E
+ΑGwsRڽy9?8ƿ-EHn$-v3f^~?'yxNWFھ s&%<eWҾN>>AKl4qhdGak]9Yڞxm# ,xL9db$v@4/G͒F {TT2(
+əLE_ѧgc3Flcz]D!S%J{J=B?8$mj.])}
+;t|?n7.oWJFvR1$6}3k!'gEskM8:e&v欱KlrY/Ăҥ}vyK:'2:ԕ$5s"T&&̡G$ݽj4jIh8=/A{U(]J%Ur-0joD/ ׵_9!pړW'CJ؉69}=l>\j46C=v՘$iV_ʼnEpw,L*D9kW6jȓUU MLBcna=?Ь!(KRK[95cq\_&ϯ~Aq@p#"6y $
+CrA|ݕy>& ߂M}/~]y7A
+^;' 1syR)rqi5evF|2m[xz}^8Ʌ`]D=hq/`n]gK[сQA=qLҫW/fJ@]{BF{q~ՆL_n%j ~՛v7];4}0&kSusGQs3 }|@ľx~ZH\,Am9p? xEȭ]fAm()0v.w-%'j?O2/ӫ;(+~Uj:6wW>=FH
+mHG,]ΫoV;$ak0oLIrp~շa`Rhde5gjCԵ5>|}y~1N3Y endstream endobj 24 0 obj <</Length 65536>>stream
+b:uDHB!|59| M%ս5IH&N)L%vN;|58&aM>2r4 -3ǟxrwr{
+wDa7rpI-x+~u@󠶲j]O FFݟ\+UwR&UA7X7tYڠ"m.xOxTFGZkw(#zd @Xq[Z,sRGscFbj5: m`%RAUEMEIr6Lr A8n֝Y[s?.vf9qq=/Vٜtz ra#kd@GB"v(yc2L8Qsm:Է]MIgpjWj{7G!rM> ;ϰˌמ6ԡՑ!{GRrщ>6YZJ1GTxBIq|~0r}qgC#kw~a'lSI4w59gnCYvنQ+B~b"f# #4GUā,k-;>YFWUg򹯚,xI.QNrRCTGR\ gPŊ:Fs,b@\g_᧪; 4vsFOK*VUa²Ӣw6U~'i*kCw tЃZx_zBs6Ի+qBE1jૄ
+!b ]s4\i?MFUfkThfO&X7cM~a\6-+ o\}P,պp\EKh&W{-ApKnL*nZzmEuN?FFL
+~VcxvB"2G/y/kGL?C-3מLuhA zD/_m/B8bU,`  Cd?#WSKqI>L24R\ѕ(mgqAts#VCE疑Kcx
+A,u9q^ USYc Y'𔲧_X#Uz8h(O=mE};ecDIq*'i АZy6eB5RVq)O=vS7Q}66CyISxl[iruj[[}f[-5>ů-6ڵi&Ι7(=LS 7xE'" xV,ga=.qF<w?0F=ZƸ/~/o 5KaaU\+ &`>JQ<+8u{=܇&2_4;d/rϏ' ٖSRsVwqL6$ˇU~8kۇc:Z>G<_| YO?('|sH__sgRZҦ03YGW[oQ5Ar.`SYz_[ӗb 7J6/θ?e9+Pg2HAOT_4fll<FRًl@P8KX u[nzY{T\N6pTq{J-UOcCOj8Q{N"WEos pTL!Uu`2k8ٽmCŚ}ZTgK
+#':)`CGݘz]
+zk .
+*_VtTUZ2
+r9At~u>$ ʋXfgbZ\pj9U:RkR~p 
+'RhAP
+:>ଡz+vͱePWGgxEs0g@*++~QP\Q{Wg5 Svvٜe:jʚ@" i]䌸rq*:=9D`ZawawCYuc͋_iLCL nN"'\89!sH]pm'<:ǔcpk0~Z ȰW YM2GA=&̼~c-[8_8Qz'!y!M5ӑ%Tˮ 3 4af/K]eF
+C7zFagYzWөdF0C &-VhO<}r 2jeX0(k~ Jz4{CIW26h>eZ:?n-VLnPfR[_tan mdĊ[ߢDpejmۧ AWs|牐12r9pf qlٝ/^,Q4A!{|&)EIrvc(Sf`h~>!sQåjNׄWXlC2Yڠ9܊iVTa 2 TY px`|ȪtlA=akx!ֶt3noJ+boYMS{36VN*hP2V.%:DXx`/6\ii@g*Td~\[GQ[b<B`kG<%+9>G.r]Lm;tM0ӭ
+u*_q;ŎpdXT'.\qM*R5QyW>om>Zyj_;MkJ%v>g+MC ) <!iiҢ+1a^Cu̖ƴO=S.IU57;A<:`E?)\tb<^ԭ˶*Ӆ-ݖ0\_?̻j.}PϤj 㷫ZxmbPkathg@5"{@i,CVesT_WƅP?H;qHgѸx֦E
+Lin̐뛎'"V/V0sk;\4.ky FTTUtI~@rFsz>6v%TBz{--AÛkmJ#= ;Eml
+6"exVUbFU՚ާv¨kojLFd5BsR탆RUӑA)q1S:} %-SD+HF,Ƈ;Jt]- cﵖ(TZG(NeQ7sar^Yg6-n.<C
+[ C)jH܍C.% m6#AXf]+ŵ}6u }kMrmc3cVdJ^貵F=Gء
+k~ٌ[5QMi Iǚ\
+Rg앁Aumjih=kH}
+XNc
+Je4n#eggyOyHJTRK|dV
+>T~+zz03# ~WK^ GuWQN19MA# ]/KriG }YcǏ߾5RᒶTШ=ރ7ۻ/Z fp0%Cӧԗ%|gM_YA GFwP(= `0}*k(Ke<M KgI2D]GxaD>'*A%B8FyV.YvQ )8':^x)ltւ_*k+.KB
+< '"m;@Lsjĝ.cuUYVѪۻĢ@;bhWF0uް{%^@Kuˋ6o'V*yS!0Amx\aFHֹ
+8"Pajm7AP)M%\%b3p5/m;ްღݧ5W6xP!zcOr=wOm'Μ·KWm663
+.R3܊i􈇷fcՅגԽ&3
+kzZa[MmYۚBtikMy`rμږV )7c~s}AL[ѻ$mljbyONfuGdI3ǢBk䮍X.v 3Ӫ<C5r UypA쫑cd
+4W
+Zrh6c$gwcy6^BMǟ'#sx{^K}
+py#syݩW9Eո.0j#{6Ӭ?\^3~4q>#=uY| i{?.{z1nX9}|}oF 81'{+$/\ZW^P DTP,3QѯZ|6-+*r덪$b*p6+!
+!@g;ptB} c[lvx7Oezːn5SBX2j=eA=}U^}5h<d)֛t}/.E«W)9=~6 56_kIXO V\cbeIPE,(H7LOܴ\w=Ze5vm~E9 -B8nW6mo:-\C*퓑9ajcrzv.V#ۺ˗%'AS|(]ORp-v0 Og)zb]8ZjGhI/v4&/=j+g>Pw&+J~|b2)s_ f`8EƤu&dP%IW2xD]f~ɯT6Wx}A*Kb,o⣤,js-idnK~n )aפOXW]zȖ;K Y[ki3/>?K"~;F ( D/bsEpx#oLm*yNf$gj_K*)[C[$2],ZJ֯@vY Ffys\Ho0"+^J  9z e롸x+{F&=AWdQmbx~C
+Z~ħ.\g EhwBmxq8+Ns-ZR`MhR4xc, y\,N?!ʦ<^<Al_:?\;IgH̼ؖ#SGgT<lg@#KUi9bהmtj \ӑDA7ɀt<?CuA?(Ӷ\ {iO_+Qxvg}Ӝ/oTOm ur*8pe9Fuh9Е4(<slP$' k*Hsj*>r~H-KI3;p(&i9=Cٛ1Jki{sT a$o JyOۖIh^(1ϾY|{JUχ;vbIy|:ۚRC]ʺi/;z#Z`|P=
+GET)ԃ:|FWZ9((O|.,U/c"]JzLe%Y3
+Cԉ*/A[0rWFeN:X|]Sk34m( q5H݃  x9rw+yuyY Ѿʬ&Nsu۩AO4U/ 4Om9զZj rt_ =92gi(%K6 :PNߣj<QzEJy W 1Ӈz]Y1wjl֢|&dp]@ &ԠվWDU7-*; |VC&]w\m* j1ہ<eF=uV#6LSy!;D{Z'`LUyX$ϤU@$'Nb5b1%1]Ej
+o Q{4Nna`'h‘6z OYg@ULYw,TjC(z,#9g_5TQtukVP#5R}Ckr2ŘlaNT @F< <By'hCZ΄Vo_)BJCa0d4Ȫ>*t@ƐB]-߹B Č∶9/o >E
+ae?teUSgiN[^A
+*mϚYk&b}ߜ6\JT1Lf0*k]mp碑 TRVrJsӲە5Tħl4N/w9-t?dxfcrF1g~)IHc>{0xaσ[^9@{wgJQs; {os) FZ䪷iV<;sL)~I9`r)v fCƿTI_0A^EWy)0
+|iO#5vCQisL(s0uåbo ؋oCu-+ǜ5_3mx TOjԲk`&oRT¬ޏ`6kZ3ow|#&7e8hmy=oʱ*BWv,G+zj먜
+'a&vpƧʈmTĐ=2mk5 -p奢e^>jJd?׌^eV*W}aP &S);͆PdjKl$_cZr-!>m2NYgfeļdCm9R(ughw]ږPj<H7{?HddSmkBʵiԥyJ+$ )h|-o<yF8[ךJlR}=熍5}fʱ^rkuPcK2dg*\I>SOgU[ȑI~1/X?*gR&?(9d?A7y0 x+FeVﭿ*en`YzҎÖ6ڃl<̙)F&nȟO o]՚w[rxHKgU"mRhr\94Ini] Ev
+/pv5m,X$5@{[Y?>kd{R?{ۛseMzF"nȘ-M Z޹Zm2Z^. L+mw oBla&Kö$Cl@`Euu:[ԙX4+lvy^Ά?RN*NM;NeMmPSS[䋑߳ښ DȂh' =ˁ/
+e<5y)m-,ER߻ ^Y4&Nx23yެ&=efMBl 5;tk;-32CՌqk? wjQ,ޭFpwY
+`)@giG=.667'[1i>A7>dBXuЬOگtkzkuCpꀚ}xɥv⪿L(^ EPQ4#̟ëxml}mxP O39Q\LXṈ֞gک~h ?u] 67`R]㨗teAӎ"\R6о[5` ًd퀽;M 1
+wdqؗ#?6)dS`F5I1C#bhu-[!xApP#/x3WsG&_}0K)Dnm:BeIx~q8dgl=5*4d3G Jme'BXn綠b`#r`/DK87.g0سZH썌W۹J:,[ʾŹ@Pr܌M'j_n!5>8mUHvTrrBN.qW^2B[9wڏdi}oN[RPol+7a8]]H0KU-%薽.1TEPfztLZ}M㮮J(ׇeЇŰ5f{).ԉ{9Wq"(6Wm6_{yfB\]ѯ}aֹ'k,st,]~-E7*PE}6Sl $(WLZv^ u0
+C0i_L!ݏ8,vZs;4Ԫ[Z9D-m7)``lasw{q+ttƭ˟;81[TuUp>@J[r+}-gzw߬=Ƨp(1_\SyƪNz֋D$M<R@e;XG.`߮E;~G[.^1rtؗMN8,)#]哤R+7TJYZhQVQ͝iɭ)S-`Ej: ?Nj]u 7wlA~ݿ?D:=Kגk~wrlR.{
+5Df`Sʁlx*9j99;Ẓ14IT-2d۱fT9q 5Otn
+fWw4Y Uc~ۦ]f!_B ~o1{ZZIfɲ|<xqy0
+m 6 cs!<X]x; t@]hVpGRgy+p}N x
+묄qxUPuj z}A T0[Y\}۾ߦ$fޕӥpJ) .## 3ٕrnH3[dLMS"Le>9nq3@H6c{ix#h6҇N
+'K/7q'>^e,-M/=IpZ;t)&ac* jk~Vx[÷gǐ34|ktz*<wSPYȣwxMOU:;8xV~޽%!Ka/O?RǏOi'E8rww|?
+Eȅt%j~#:ԏ_B:LPD%שcT´e}wTq }x#G2 L9O
+˭P.h3=y9!'4I=ݬ@vF?X4_M ڷ=NRRsa˲+2pv丒?\pxEyVh4awZ'5l6og^Xc
+v5pYV.Id:;q`gn47(030ucɼʁSk+3ű+vVZ1}cIW܀b<"4=R*iudh<e \N^pM҈rMYۚ\HF8^eaw
+۶ޱz<FQͨO߂D' ZaϹQ֋mI惺sa} )Yطck`N7GW0ʊR_آ(|Fv-[unՔZ+*@g"+! jJ bgF1S[5|ָ SN[RT^K>8FU1o=VA%] @<!֗#f |dN*q%dCu !ZZkBu@z৬k7-|̱2; ,\'^<B_sM<ɚ3P1<63cۓ_V=W0XL盍}
+%+'?>kWFUGm_^>ږq/No.!XUL?o} v
+h[Gk_˼ZUͱ Y-hșj:֤ə>l>7JX1@ܢcd
+L=J '{;6&i'(+5}؎>~Uk, zLШ<J,ѧ0nuS8"U蝆&U;Z $[6;wCb";=|3%V\TJFB|O:++jC{ evHGѤ֋<* ri
+W>P*<2㎬ZWk%;WY>g[KjَmL\2P7>5< nL|PҤe74 g";?җtu6L9DʼT,xsi6wتWf 7;(V9 ̄kVkMS:*XO`/>Tk|n
+}U+&9ßա%R) Cߥ.W7y;]͊y]uʌFEhnFa4 8yW p
+&/4&p?Y*ţZ5'[cg9ş *sg[ʑ7,MLytu2<wm z:N&z jV^4cEF/ֵup!
+>[Jy\ x=pKN|ǦRow8/Mz+@CsFÙbTw6Yu|Ȼ=wU{/-Tl/y*U[4qo[(Y[7c?lmp/ķjΊYU ev-ME'뼇^'кt֢L6 xRw!6;@8a'K27ûalD,zfֺrzʢlִ
+NK K^5U3:<Pӭ py['&=Ҟv/ k#+HTqTAfUՃϊ)״N+̦=cAOV֩wβ; p`{CT sN pl|IħL
+s;HS_[PnN -;il$ْىu ' 9HzݜVA<Ζ9fKm۰Jwd^`Ӳ݅)a:UǙ}
+;}v`Of9t^!]Ew $>}+J+Bwپ +s=t)|"v#&d}'r={+8rgW!Zd]|0v=pf͛].@)/wpXrHxnր^\ѮFػS;E[mXpcD# /b j? bDb]p`}ZlI/{}\H\)b
+˧u[ \n].
+a@uAN=(_<*@6qfQ
+9CKO1 g@
+q ꜻU7Swa״̳\TUsNFvd\d4d9ck/ɡ-bV
+LrC(>0
+(PZK|?2g6p
+0|*ӮBUlpb=ԍxyu~:;]i-@t6ys6H7Hw5MzG"5>vGwȩuJ@2Y |RnU{=<ZׇWx >\gek}3h;mo+R(u{Iugx8ޭ`QDЈ?6*gI<(8.띴}Q=K5i-._uw.,8IJVxKwl>almgky8<{Ũ;BDA^(c?)" ,ceZ9ݪ^"GQM~iފ^)Gݍ)is
+%"v˩궓-Qtɪ͔kDⷾP뾚tɺ</NO/X=賃rOd|ѿ365
+hygޫ^\Zt{}L-0Qf8P7uһC=SjW
+"zJuYoDY/\tE`vKHC{{:bnf)B5 R97J_HOK
+jV nD
+So3\ä:W՞cqRsXրlxy/ FXUxr{EԓP%{8NWu}Qi h*~/1:| & R5El9K VEDݿu;
+kud8}OCi}#N]{*z&o*}bfTE,7䈏hcE4d/1jl}y!.lz|CMY"o>V{R1Fe63ߋ ?s*yE\2N/Jqz̚Jp"cTXc@[E{Yɐ.O8*.vYHl<7!Dg*L?M|I:T
+@ozp׸kL}V7M--*.a<jR,f#gC ]Y-<G4
+3y4S֞i\tcr'Aåzh
+[cRc|5{xmU "--,
+nR3@$ QWNUFcD?wsډ|<ls!fU$
+>2ΝE.@wԉU5gdk?Mn]} 5tMZԗxaz5*
+ô /
+yFHJ=Z[8h8A$J9ɳ"FB-Lwr5fۺeȺY癏Ku)Ħe,}/=1>j~kG8r;WM8q EMl;<v^pM(4(Btkܫ0:6xkJm Εia_Ȟ^}6p4)vU΁s!#3s0eŰh RϣoEwChyza_( -.j.*_[B
+3ž٤EMGy[f[:m8ݦwkvڸC<8di-+ߵ;H@^YNqs]u9_=H\'g.֭ ;ٝ`̛P࠳ίكS7Mnj}"~T: Q ({7o`&]`!'<ys&b,UD7V[</ӾǸ,{8 T)6+Nڻp_J˧
+a,yc.\#,cFict`=hMVPUU{?@zzv/E=H!NewE*ZTtr sW=؛ZjVsb'LGE(~:ڨ=C߇WH]^֜n}: \m[L]z)C[sNpGp^czL, >|0~G\{ӔXS g`l#M`wux$ctw5kRy߫=۽e=FK-SH/%Uձ
+uW uG#D!uHiS9:mh!on$ n欏 K$9OjP@;ƇZss6*雛Sw'%D6_T}bwJ.\U|#HMj,֑
+dK[49&dwD~X`G/[imԕtd<ݛ+Ż5
+7eV
+`9΢4%h 6(ϙs*H]a;{ًOSYs}tvMp
+Pk½+X3<2UH 0Gp}*=;-P9^%lXae+@2Ht\
+g@vDxSeg wK8CVƭp\sÆ},Gm/:;[Me?@xVg1}>qwJRYWYb6#{u\%eᵇzW'`pux=`{q-8_:u㔏2y3t1c)W;xKѦA,Xfl#^^0{{k5N{nWSv>fJ\s.J? Ơ 5+}\z@Y-iMn r疗k0/MSl=g!qd].31oOȵҔ.1
+j/|yw%
+ ŲDɷ,
+WzY6$U,7Zx^.Vqn@8&VvߪaB&GVG턯z- h  tn.kv{ԉg?h$m*FdM0uI=2_xRh4a>ͮ:% l2'wdI nƴ-)ī$TzV3B6hzU5P^c{jc ulSYq1]PU;t_O!MѨ)B f{94Kj&\l~DtZEMytVʷh͋^,ahnp` #J0ɇUr#؎-}7X6vkZu.N_7{!
+̄>M>S@>֗a 3,tY]G=MI:bU\N h)*l%.@KrS w}#ٻl"KU$N6njmd~< 'WV7k֡65 [R&\i.*q^cC/&{MgGTjm
+
+g*ܙr!ѳgf$z͘G'(5;Z!TΌȕZB74CxYXތ r*IPXMWlp{L
+}qXރ֎vܱcDzJvJh%Y]KEi
+]jo\[>`{BW/TFH̀9)#*ڕeUC1Fz%ȡIzDx=bhJg:oP`*`g9\"K wmudl u{[mͳ-KlMpq-UA¦& FV4ߤ(tfl(B6t4nsHp[ P1D<>K*5>T~䆅}^hZ⒗3> =-^Z/qe4g"$ǀ< Y[yi49&v:ގ+n*Ƞgba-Uг4j1GNUW7qgV^cu4˶T7۞OuE[ 6I4(T_ҵB}%%a|>s FiɹdF`uh?Z$3ryqm+AVG8@W{,j!0T¼;m8N\|׽=m !.rf}A,XWΆi5 iHΆ/򘖸;ʴ1,M=QV5 i1umg
+7k_{k@Q7VwX ]]c~9rc4FGez wf4k],"c֫WУh+}bh[d (62w;~:Hj՘Ө.Y3v]pʵk1H'@%PլSYVX+BpnIYem*axVvku.Z}<0`۲]Rn}_WkAmWPX|21Y}hD+ŕg
+7u#<1>§Ѥ"/ \8|[+i
+)gћNKB`DrM PEBNq'K_܋EuBвxK@ӬP-
+ru$vw"W'u)No_D]yik'Dzڒ;nZ|scQ9{hބ4┍옇$t66?SoE/=pYGn^$ȍd&|Z/g3!WkX zZ3Z!%Y4
+Jm;D/|lW/lasXd=3\j_^Mh'6D!􎋎C&p5mmԹCe%ZBzeq_Hc4}k3d@`ޘ iUzǹ$_X-WmK{ƮvPg-u| hj6x9b0C-G5%vU
+D45oF^sPH\ c
+6vgpRWSk`+*풅 D pFZL広Bҍ;Xbʻ5A$XoLS*KsV7y6ؽ-AK
+:8}&=ٸED&>D\io4%.8f&C}~kZxNnh{-WTS${q{e+
+Y)/=7S*S(*h?5u:*vEUf'h{3r7j`^_1s$׼jW=ZD=\!t6`T}%`TؼvgAFE߹3t6L㑭?Jw,9S
+:Z\bKRIy_wkkZAh*OBmK*:n, $slnӪ\;'u+tߣþ k.ΧwYGsڋdMcep`5U{3֞Ku6T:ShHMceAk^te뽲5g
+9fpdk.~q#Z]MT"ْk&ZP/yUaȮ2՝}˥7U{T]E: k+az@^cۨ2"^qhm8O?A8h'S
+M[x7:jXhju>4+qm\ZXr8.E}sy/i-~x1:fyw'`nKLv˂+7Fsj#n/|lv#Obg1<q_uec,'$^lZn=WPD'LJ̹#ۡ Qo8P8-%~۶|Pi0jYnӼ&A߱k؉Uqo:8Nٛgf65Co}ytWt#*:&\y5rUhMUK+2Kw# 5 k;vjn [H~L(rt±(LЋ@t EX6/Z=B}/V0?j|c 202x&ttlnz8PU}z}TWj&tI{i
+y7NjСGvljS22.t82U27i@>OkUb.,ZM%{Ld蘟"#jkPRWV> =
+ǖ6[hZ%NI
+[~;-nE%n!t6;f
+L絆'On~X[j%d+wlhc<.D1p
+Lݽ ,םD^M[/`yk&kjܮs{yK%)w⤦A-vm5b[cgW-gPMB&mBQ-ۿqC3/Y;'|mH*Vlk5 d>4ԶfjV-JVz²F}·u-*C <1ۧJѱ
+n$sa+J;`VÃkj |0 O#1S#:7hz2 }~pX/
+!j iލj?x?ll9`c񺧍Ug^o`mE}k,^Va@s<gK7cR %
+^ngPo*R2N >u[oj+ko19&#4d_iṀHiVa;syTw
+
+ݜEol1&Ms{6<[5}E<cjsW !y>0wI|}i=uX؛ V[Ĥzw\mFDG= ޫ1*uX(ӱ1ʃ1
+bXT(CAg"#v'tBhQA'WG \c4Ao%%zC> rdz6O]qqHr4]
+h;ΆR4~ c7zVw:OlY_2d_T陕|$8wŰ`.iK~[Z~KJLn|틈<Gަ ??BkX֪!6EJe41a 3QnBHI;6{;V  \ֺ_~|,7M>/5y>d?/峥 zŞFbR\ӖYwmI(Jնn ?txE
+3{QR!n,\9_usNkW¼nj7tZ/餎Y5H &SܼWHuwltN8Y^O"2MXKɦ ~>7n" :P=!w+@jt9L'FsԂOVl;Md%x(|tK %.f@}
+% < >jz]i(] Xh*Vu0 :-8@u6 $#"V_j|r&WܦiՙpyQB$*ovf%>IYGMF%ذw^Po<Q~߁׼Bǵk9ЉT5|nqi=|F\V?BLv9s0.pyPeNWND?r'{ȁFy<+pT0}05xSB|g63So~O~u_Jnmqiz6{<>~q!_|^gpvd/Vz@4ˢ# }U~NM7Zwl="p?`˾_٤Kߺc=#["X_@}]Wqf$-K!QF#&qV^
+<^f)Vێ(s(KTSp>eVe,*aQ[ǵ[ =7͹>sߥ@\3fKZaWJs"ZlEg)a`XxBhم| ^zϢ)5B%=6Wğ_:z8orce4{GVhq9YmfZ~ytrYߍOQ{;@YԹ
+~^ E~Y~^ n׹+L@r4пgs ʿ/Mpwr}&9??Ղ<W[y ^!z^=nDΪPX P:uaOַk`ׅ aôz`w@s9+hnt0
+ExYs%VO}}_^MSW&燲y_ Wt }51rC jAk4/H$4^(j=<-k6Wm@M>|!ƻ_ϯ_ho*WruKg_ [W$×&,N0к'=<<10|՟iJ+/mI=~J@_/Ѹ܍n@s[uz'T`W0GF<gI`q]EοWmU}f豵[Z k?v=_Wyߢ۪`yYS#UOt̹zEZi?Tt" "o:ڝ-[ƺگ
+ǏGOJBgv_t=y+#nn-Ir{V8wS;̠;hpT@rZBRg
+I J\;sLĺ2&EV
+
+Y=j54WCS7q2zʷ%cp;Y5}jcUJ)+#,Zc+Ԛ ȥˤ3'Y$!Ep?:5
+)xsXLRsi9#eғ+IYh4ۢ]n>|?ggųYz1J
+D/s4bnS$*Jʹ _xuʕeT%\2yR_^mctЇbz󧸅<2
+]@+֬Wٿ{d0sE /Zǹ1g^;b0ԯYg͋ިem̺7{|5}_?!D ȿ* 9~C374?WWc7L@r\ KL@r\jdGTJjA&Eţec97bX5 zy9qљKh: H䧧 ԸSR*z{MqM}-qy:DU]ҏ޵]`sf9ROemuxv! bt4 vZ L> Q+{1*׻E뼔cP{ص3ro9WUT) OFx<mk{=18v&i/TNhٞSwUAjO"#m{aS)^}~r2M2Oh"ud+%Go򬣵"l5ucXrdG͍w 'hhnrPǪ67gg%X+ _3u65z=!o?v{dg>o.&Yߥߋu3ztlOr Qg}3ڑ,8@Ke0MDEFO˻MzW<@ }Ӡ'?pf8۾Õyͷ
+&mm-{l5¥L@蟯yJ*ol_Mĵ{~*ަQ yk4șcx?ceysW}{M!QPH2GJ,NGsM!-U(d*ʟ!WG hamqO#R^sKWSE*ʂwhcԍ=JN[$j}Ej|wD'Qk4}6}hVBMKMԕUN RS`϶ee˖<6©b>79Y}V!~924F^9VmPGevxޗ<[j;wDɊMfeuj3i ,gWNLwLw%z ht<D/ʩTtG ٴۨ oKih+9̓BZ /6Ia)4'Vȵߒ>{R\OinR+U{x+DڙKvuje`Dyy)*7˳|8fQSYHO-yK|@ӜıЍbYQʺ#2'++杻I=N-LÉ!JRBghmyD^JdDr- rPy-ʰq[l}_(-aAJb?0)6UEPFEn˫{MU
+bu^_KqbRdU,Va |]v-4-#B.є*pbm
+ g6$6wveG$C1M[DP@#``o`p+VdJhvSݩਥ!,!ʖ} -$ɦηgaZ}-#p 5yD'?l,b<|k7'F/G|91H@Vg+0!ŕ8;L'_BEFWw^[8/2Dז+cAݯG3tBO}=.аh=㧐6" ˢW_oh&9?_'j4пoEwh_ћ_J>Ddh@k͍4Eyl4OZ?yt/G(?OʷǗ'HW38B\ ^Q@ͅȃE:nw:^FRk};'^iyNsO0s
+ F9ٗ?%0 HWvCtj>z0 Օ
+:=ÜnŦ/#%œlA:yq<-n'S /cT#_CkهwH@y(k hqu\:mjUdz.af˖sSqdv`^y*Agw\}itlƇ0o+ykOEt~Cj>foR :m}[+i@ _r;/5_;A0Tm(W$;Uyĕn%
+&~Bt]Dn%R fSkUk{AZYU;̠ 4N1 }%3]{{$?+i J>i@hkq-e\߻RhVi(V 4aəN&iq5[YT\ zqݲ}';ʵ-?0[ÇNVie=a~1Dֺ|Ke?-l -t_,7)C[){6?b@icɷTt<
+wPr(sWV0Qv9xi)mW5;ipMFAyA$hcDq8]'Y']4 ]87Yk"k0)zn0^]l)7
+_0?Dghy\/npO#lhtX(mVs$M8LߎGtz:35E-h!Ds(n~
+ kW`P F ~6U=ϯڽZ$ژv6oѽMo 3xϻt?y~5M@sn gSZϹ.,DyWj6?h\?Ee2T*l޲%cVjmEjɻ^yܚ-mWj8
+?ү>ī(uePH@VKNŵ_݇CsݞRVNItmSSP. ΢XI@,8R]B*Qs_]f7=+C:61$
+2 NݢRI(_v{%Jdẓ!/z&{T$}>Pftw1_XeR>]<
+-x1b:qK+|%] |K(2A/e**\D]
+<0=ʣLWYOdRʛ G [pRw$m̅޽̆'}:y2q4ŻxItgZ4y*C>=%{9ݯOtSYzW*lϦ5.jYf*my}a`Nu]4"vEKC.L+@f_f_"塸^pvVشx(RnHI蜩>s8]$"vAK,g,)a:_jG0DoqREjv]f\{2 u">٭SY=>1
+lz3S˾`!S47_c饁(Vυ+S#h".xijw|]R7?Z(eX0-0~Bm#zG,Yj!ncJX%];ޟ/^-.j}Cz[g+=1ņm#b~ kCT]ȢŸZ[
+wRb *ޡWX&a.lğc_B:yݜAf1<]uL̊+4 (܀n 6=tsثw<˻n1geKZ
+pzEW/cOEKkm< &aPY9U'me:nn/zC6@oCK ǥ<I =5ڹ?Ĥw%(m׭lF51++JNqU{hMB|j~ˍ,Kد7낼R@ZM؟ė'_Q\;kSaU6uˤE4FPg|D[~(bݰ/si|SMV5k"ŕWHW9dA->k0'{\{cdU0ݾ.A9dnm1/x~ft3qZ¬Byo<h
+FGV` zo]?FB yME{@sMs|O `|탘ɸryz|6}]se&/5=85v̸.j}pSZR7>W+c&8,`gj<#fOO!@[qz킘D\o(2+ă﹍i+G*Y2i-kC\e_$
+5|mYS:ˈni!tj
+M8z.X2gm=Zu!+f\0K^~~)Ԁ*FZqulE:|_8\4!2&NeF,<K*Ce!t
+α<-Mʯ2a:rcAt.tYp
+u
+8)c{[;g<WKc*j.Z}= &7
+{mɰQg\?T|宏^
+G5˪~:5&bg0 .
+
+CtszegL4l#.ϩQ,XBXmD)iw ہ` 7K&qd-c6-TpZ
+<s/Ǚmu(m:hwÁƃyРp}k1djcꧠ"l{p.owJ `¤K|ۯ,f ];XG4Fo`ҧu``}Pp_}&P앒-{JW{(+.7R@J1.d\*/q9'2SSL{ky18ZP1TfН7sD4 1ҽ^/X]Rq}s@t"m
+rZ-~4[U‰}kPzh:j]Z[fha9GpIG}Qm-na']*9:M=E\bJ\H4ͦ#g
+붢)=ߌ+(?Zi S%܉v
+[@;-j1o ge}]e=RK/n%d/G utjp+􇂸$]>h\y=EC>ooc}uZ'lܥ/DpyWR[+GsI9dcG0RwʼKEɥK|V_+$;$^|\/Ql^yU9\mdҰzoV[x[cdulIFrQw DyD8'ן9F=&ڣ%p\^M3<, 5Ď⦲8 RgZ=ϫ=Te>B}I
+>p#ZISȟ*}RLJ}9<}LyUw'[?#R~N*ۆ? W+%fk)zSk}3瑏+-t9ʷׄgk!-x<_nGEqSҹ|
+7=)7>WITre~̞*vt|X!
+c*k8WSZa.'xr~:\X>_ʓ&̩H%S {6׏]rJEBD-+hr)%-
+]`
+D]o Do*m 1ɔe6gRWM=Ju7ڄo繞/1֓|X(07U_ϩ>sIQeE
+ikgY[TsxA 18qʤ~?][>ZEPFg65v6cʽFPIJb}Ge (*egm4
+lɇ*̷GNXn4өB<-wtŇ}R$oh>/P-y!@?
+ )2nnMҖhl3:Ӝ]˧xKyҺ hrּ2wWR
+"̋w8kJktןfj:'9KcҋͷsǠ^uZ•ܑ߽I_Gc9"w^ ABᴎ0}XȮo1x*Mo@A3j.m'U|CtY>`NNomaǗQڜ7Xi?בqH, ~2&ztLjƘO@Y}Ǘ;XloE
+0'P
+PB\\aH!ex\nи_7"([Bו7.7R筶:yH@Hm&)! f<ZB,˺*<?w!V/ZgѦW<n<|FGVvym D
+c~X__} e^=;W96
+&G~wsCax:K ,=a;W#h1=$E-)[Z[A3/j-5\8M6YkB=V |d5eT_ ;Ox۽XmđX1$ңrZe,hu {zaĔ9(dAPX5
+g<h\'ߨU_댔I @@vP`,BQp}ZqW;7seK݂7à%*Vqkf(f*90 0ѣvrtVGk̸Tw3`U[#%
+&W (Sqԛ,G^ U{pYp5|1#.NY+3LHm `S3mqVGJer7E/
+T_x=O4,7"v))+f=H˶ۋk%w=I8zd{6{;DW.r/J~=
+&Z~D8LRf?t9^N
+3 EA#x@ ^m9]+2 yQ6|\HaBXVEn=mi\NƨzYm?NEj){$3)maޭAy݇΀:_9<$"-,o]Ì.^ z:7CPtOO[ݩ>}
+~\.sBh$e*Gu0ݸެ;{oA ;O%B/
+Ẓ2ύ^h}IW\81S!tR6̼RR )%
+jAWutKE֢ܥH N<Rw[m
+P0,9^Zfz4,ּ*n)iqޓ^7 fq z
+Ot@oA'=UZg$i@K6c6HNbe2_
+>U{'~?ʚ(M!eTKktjMz#V+{0ZJ4?~&[=rpjOby*@t$("(me<gZͮz0P{gW|}wVĢySW'۝ܐۖN34îVyo=8t"zB7zgRoA
+wns7xb#0v_.J;.nޓyQcSd{ei(IT5,˦lcxk<NBrǽM--χi%<#݉b#8*^*pݓk-wDqwGhܼW
+]fz쌫u}m,^촶jZ)_iGy6:=s%| S,
+haL^wl u"t2T.S*4(>ewǻFZpCF5yc^,U3AQ)c8~5÷c+۞j:WzGU-\%ֱ|{?vJ-:}&MsJhEUvr?{r)t\ RDm)Ju)U)1XF C.X[uI|KNcKWוd٨+ښOIW{h+%_/0G.Q:G?\bB'R
+$^
+r_{rV.eKvxʼF&S앭TAha:,k?F}3-61:%o!7; *E{3ĀA n0IrG$ ]kO5˯lFƘ}#>E J*ak=sxNg(
+EekHz@( 7z%* 1Cq}jw7oJ};+~{$:Ip?*>:7ɖǗUiٙFc; b~ky1_xyf|EKRGF8S)syU`4]_$[ BzZED7|O< IZ#]8;PtA^n@j&8V2f:Qp(8;sжkOέ!kٵ"bpdOzw<[50a:]{&=/?
+$DNO0i٫љԊBRwaiwmjws҃4rr/5}7uw-a45e
+?
+JlCxv%^g:p|}?zWo_էsxd5-گ_ڈUQoCEڳej *Iҁ̯$
+G4BK_ (jW؆(t e~.1ʴ{ J.>[om˗67JUZ}K2˃JIUu4[i͔b5=Oi /叮sR
+ i+}P~f| <)=
+m3Z~]5KzUOgXmZ&מ\T_qr2U:1nBh]`I=- p23%X5P6
+k[u ͋{rˡkDWXlLjIjV*-ԴH鐚Й5:XdMEgKBE_t7)!BHܛ$~c z!Ɨ2QuѮF,G{nX=^4Es^-je[:8HBq.4[NlҎѾ1m/y/% }ĉ };(=m}f2(sqL@kM{#m74r:nњ/K}RDsa- ,MR[]BNK898S%yN>p-F5b| ym@v(PMKI+i4",}=L{{NfVVP ѯw>blWӤx
+u=
+Y7əE/tEK0=o'(Z.su:A|t2?UJ_ 6 'W⮓~C{gJBFdiq#3=& SGKNNxL\>
+= -Ҧ{fIvk,{t WjUker"T3Z-t_입7팤Nk)I_ĆyN rguz_|vHo!ݼ,]7~a
+pkPFYU՚v5 J.?{u.O-JIb*?cS)zf-+
+K}-דыɿj+nZ.< ~\1rܜӠ+Ήhm͋5[VT;2O5KwV,gRw]ީPCw+B^ ;9>%5>ʡ#zoŖTa#\u|bU{fCy(x_KR;w/^6XNfK>K)V%qEnK{M
+De fw@B
+>
+lJ:7?#0ņɔ`}f#XSgЮ`ƛZgs
+d>? ?=#]m.HhL FU'B4Kv~\boy #igwTCr7QdV guHO
+
+)wBܟǣ?GKv棍ZDm"sin7^/:M>g&evPg&&.NF2 Z[R2:;bKFKzO4aL ~_@,8 ivveG2ay˷VgСc0d6x )oz{ҥ⡿n75Sag6/ dCJԡ9y@VqD\;cO}f߯lX6JU~j(J1DT,(.Cf7ݞ<I
+L#mkWWl~j}? wߨ̉?|ܘ|0u%3uSWaw+Ҋr}j4'
+K6.\6T̆)P.DC󒵅U"s;5?Jcnf]@ŭP3Zٝۏ9ZXmh3pꬤÃV1{q'[Zo=m)Iޘ*ukUm//
+.XLU;4 gJr{OwZZTRtuhEV_lojJC6DF?g lhۻ$$iRmf25},U6HƣO#h>J?H#(yMv鰣Wi( hMC6DU;FNi9~I.fm)-Cy=P7)S4oG޶^֞@حu:-iQ?E(|xZaY%2BYn=qv\G.Grɩ<Kѧ5z' ݖT#洙S2ʍ VxIO?HQ՚6L +;Ъ 訒u-,^ɫNՈ Nw
+R,GchOyn. |n\"}Р2HETm?q%x/|-W$u˖, ˯Jq/yƞ wl$rqU.{a)=um1PU@T^1<U{^ͼj)㱕-I=Yl.Ղo_څZ3?y~)<Eo}Ǐw4Jπ͞\k}jлMӨEڜn,nr3\ţnj"Ke<JRKRSQ mjH/Gm(r߅losߢxq($Մ@ B$
+r… Z)VId}{hLYYav
+?
+-(W
+A<='g<%d?8E 
+K{=׻fnE!6!TZ?ӂxg6blo*_)maatl)~B&R>X#F<Bьp$ /9 3 ML^mIkg+L0,dWnP -.QnQ$*
+@4= ˱|*CKꍣl(a|pe'ANcwKa(5\^ G3tLN48@`髾ShlgVeJF>"Phb~/ ̒o9x€2tp*#NdDw sNjj37vsjgBa5N 0<G u /<e5SYgyVNPpbdJ+(S@Q/ށF#=-wk*ltAO,K;7JZF5kмe&> tI91XG)m,ZO>~D
+GR.1ٹkqMO ]}^` m$Q\ThY&uw>:sЈe:;6OE^Ige]j~dNgIM@{B a_
+h#WmV -2!.eǀKg}c=*KE4˼i>ٜ؜WpNHѸ]WD :VtqSyK
+g_#ӹ"ѸK !vjíʪj-s<oʤbEAnJ87G-_zľOq,1/.&rUAjh4ǣp.o'jLA6_An9Bu-ћё/5ӛG/kgܴ,-`MtQTqA_m1ml&8w$8q<DvH2֛B匌!{A)Nc2Paјu~ /ko_Vt n6Α#ե2c֢X򐕫TSM}cIblq0<1PPɓN)8ܣܩqm㹶83b"Q]
+
+S.M=|U=>+vuD9]=>Hyd[&Rqg#N[3t*&n|uMg(-#gwwv< l*M + 7v EϹg?ؿݜ\eaw~<"CEkĵōurVWa=ݝLu05P3(
+\cGh +
+3.`S3ca׳t?굗#dG`{#̒+RfJ޽% 7+zg9 jQbY3lbF2ANx޵ X6Lj+~LVVB_ܽW_i$l-6
+U:g#W{zovAK=Zhʏ t32ɲ/΂MO6UDzDz$IYFWaW?웟r9 #4O䲍@C7*ռ8Q|61s׋l&+QԟriAGu|ӽ3λd;+:TIW'uiG G|'7Hg=OBwOV-WiSP1 '`Hf E2&sIiI6_+f_ϭ]MZ‰Lpr}?7m9S_j8Ӱl[4e~?[64 :$%OKzu!'t_]ǣs^Zʶr<f+GɧDbM?ؿs7ѡp\^ʳh!yY;|]Yz7e"V7Qv’^B<{͔Q;ؔ>N<1r[bgrhl,D#<ٜ@$~c&݅fkĒK˫YU}|%){;b9V἟eˎʙGϐN.X7&3Es*yYxU~Jj Q[շ^ +4,AZIh%W¦#A1̎Lf0\ߠ>ed<:ۗioIg*TzvDF}Vܩ"gO3ykfT΀dO>- ՏVjUSSZb )vj8 x4U֬N Vv6Cksl<?{-I
+H)^-w:(gJ$RI[Elet] _a֤)_2h'u'cnKܦ<am\UG\#^uk MjKU*4oV(,g$?Fr:jxa=JΚxt6,Yv9c3H0C,fvwA7fd(@fh"FזX2f• nRKy0c~>ި\IN9k<dh\'f.陛ē[L {b!iW|,Շ
+@9}N)q.dmLwoZMPBh=Nɤ
+Y%tT
+s
+^@ף3XnF)yoK
+u k vhC7\bt? O%CS 52pY)ωr?8ZbnͶOE ٧q.*\;Mr79WЈszl@.! 
+
+i6r\{&s/+
+<Di_ ۘo_ψo!~įcɝ5W;J'cfWM.U_:0ܬ:>9.\/g>uUϟXӘJ|O䞺}ƞzsh.8~4H^.)'ȯG~M]=vu7 cuWw; T
+72H IsVBYciMy==u5n?+p7l\
+q, gy(Q\$*>oָ]E!87{$;X}=<Njӭ:Ϩа0jg𔯧?PÞDi8Jm{NJ$kOjx4UfC+ሆ]O}rUm؛.ay )%lKmRvUm{d[7~76t0trac, )߻MCVGHFnXϥܘG΁ .|br
+sKRsƾB- _`{K^E-1~\!ö>3:q!KplKFFYNNe8)E3iQk#&c2Njr{`>%N>M+}'[UuW~,
+E`qEv:͙i\0r լ/,Q$t|
+w*ͫ{ȫQwv~0^)~PoƎ ^d듣-^G@}ϼV_x~u67ŴNu m?^ٹ֦gԒ띞8ɉQ2%ki
+l7J#ZOv!]ȋ%:|b߼%(t\4J?=3{6D<?z¶qMZAj7 X S^Ƅo;}“5PޱY:E1^@2 '!A~Ȕcz%,n[G2[?SyldÜ |I+z0DXe<)S,܋#f;s# *øZnnCiмthCbZPPv}gr>71
+Ue%0IZx/-dsﷲfonKҕv.FtCFGWK@Wj@6~P6vZjybŮ`^PC⺳z<HMVdž*[nK!IcKl?hNP(?X7^^(rE`'`$(ړxMd!V7J\u+S˗gzo6G=葏G{2k떼 ϣ ?{)cMnrRvo:1:VfS*.T@ڮ4dW䶙0w4!<F&e#y,]ieL,3k*fe+b`B9k^9zB~0f|/1~wSZlBgxj)<6^Om<Kh fNme/?cYwg';̺)g&ahb4ނXはzm3yS+cnnZR):|1kkũ9fRh8`ݐQ_gH[4j2x!9R3=#2:23`#%ax,f9Sb^<ݮNS}k鰪Rj k
+5<ei4y %l]G|;Ӻv|ώ~`sXy'2 ngMM+:H ˋUѦL~ekM鯛NwCi3}`CojfYJC֨lݭ{fC|ڟkc ; .&пh6P#r3aGgLn>B9\'ԚqՎ@v1r[E07InzZ6.Vٮ _[+ ہ[ZHi|KyS!oXVswkHB8z9~=EqVL)%7bf;q^3Mś.
+.ac]MO#kQq}P#VJ>N^Nf7 i~`2s vQ S/M#
+D[,Ь:j&hT?өx-T)g4W'L/]
+[S05LY".5w@>4;SOD2 bxHBza=
++|6gn?M*r\~ʻ(][u(Kr!:wѪMJ. SZg(=<,$<p"'`-B&D1
+pи'J}vTe 7uقBay@ciѬCzQ>Yin/ŽeQlx[LH^|Rz<yR65zӂ}m>G}@/v}a H{0jٕJ8gOu|0u?Tgg+ f˦^GJuCt>
+s@^U2J,@C"^ɵu:4/gw.ߏ±i4&0N48-}d\
+v|ecU3^=Pe9wۺwef7
+2j~mdy_W6f!/-
+r^vQrsx#Αv=Br^j
+iWEXHS1Q2A`К ,EkϪ.'j~<c8:w$hŷNt]e1l~2阮m`߭7֭d[G[ǺzjhY?w2.Xt&b%1@n
+MVj֚ VNxq Z8pGB_eCk p)!ד6*nљ
+iܻ$tϨti% Ӵṷ̈́41lNW!IE]w/x2OCUR|Bz\ '(x χ60ިsnXMį6JŭG-Qnjplv2Gj-|~B{۴+%:l*G!bGڝp,ZlRo|UjDozXZ̷V>\7d~k#qD_o|
+uW;vb2#6vkU a<:`ؔy~yZpAJ?X8r&+AaN1lkw |4imQF9[CWVO ?خ\):eLgiERY y</,٦9U_wn]
+6W^.P6_[jo\aiI5}uk@j搪چܳ\}oXK;mˢMTtAB ͵
+=2Sg0Ҋݥl(0<alv<keєʡQcVzR5sU̷)hTCRtEmgGD+aoHM;Pphlo˒jU*ԻI
+#r{g[ɲkV&%6J^Z{1yWj/uc|`S0[Ǚf) ţw7.])7{/<A4ҏiA $t2)MSϏ̗^AN\#vN=M˙{hI(tB7K>!>d,ɧX)G;T,] U14Ɉ) |j̓7oשׂ*M}AW&O9
+3Psӂ/Bj(<YJ/\.Sb43+Obgg_İ7Z=+0?loi"h`/<Kmf֨Ksn9<wKbsejp*0$QdquAb/EO!ղSd~Ƭ ѧ=4+
+@Zo:śȲ.@*@W  95 s leGx@l!'@$ttp|܀tvJ08Epzo
+@.6@\8?8
+Ne[5]}I(v=@`%YZ] [6wУ.\O[nd|8bN"}࿱]'=c(HwَFjˍ
+Amd/f+r$zOGW^8KFL2ܱA>C)[V~mk9Ȏmn Kzef;½kۇY
+
+8{8Òt
+|2*#>'09u7`%a'kѩ#A^h{"EqM[Q[{vP0bU1{dZT7}RW FpSAQ4
+`}.jȂ f?ɲ8Pyyfx_}ՋyoiӰC为I^"%~Y@f1^ cUh
+6lvhZ˼KLM ?BID,5Ub00(00+&3# n(/?6־-n(*/ed'OdX J̊,YG69Z{NҼڏ'y txcμGھ ɹ/m‡ڒMI"?4i
+1< ?Ci͚OBK/f_lԓ9NW֗MU{rayUl(R}|8Ӕ/TiW.7tR8QG׽ʅC!ǔ %JP|>]k.Qq{6ۉQ\Ep*J~M$! ^Drc x/n;t#|a=ᨎ[?}ͤXz6 #ftH)JqAc'[6i9aw:#,hwțH2{~+|b|ҿ*̶Σ\hO6{iNnd.[+~TX"
+zll\qI}r;$܈XRqI![OԲ7VkbhB7RBBS˷e\e0fNꩦ#^x5{ '%p .̡^Pi'}QZ7&8[sɾc=-.uC;|gܔiMCR­QY|ɉx9&O ) \3ۅ&Se>wϓiNHFaZ>#p/@Q 4 J'sfnUWH!D'H!}oD³Ke _f%Y=` 1Zr1_ͻLB#fG}ٺ&=u:3;tn3J`XY4*uΩOVƩ^?Ukɉ+y-&Rm_X:O؎9iO6;A"@m}"V"qA-ydenX@`rPiTn.Ev\Um*Fu;/',o
+/,i+m}Rstu28T drƕk֚&MCT!NkcNCz7}Z#z۰zYsMsNl86_؛ơ0Wb)^ig 4fyX/
+d(`9);RpSЮVSp6SPz)+MS>RR)S`lf<%昐"7Ԍ*>3RnO
+zFMIk8uqUګUO
+
+Yzѳ|heʜHs!Ks8Js9*Ns9mmm%P/e/_xo?=GYIԥG4-<;^)WU}![%Nz/)H4Oji~S|3i?4ô4i^Y'݇ ݅Gc
+(@m!) YF
+NZh"BZhzJ"U^EA:> ]~g֥|v~smN3<s޾Xo)0wpi h{ ?mmg'iS}>0贐mwZxO,v٥WpMtѨgcŋ̩i dvm^)Uvbg󽼙kyY,k|{i _. t^*ˡXZݴȭ5ω3t'fB<Pl؅{XAa{4Vm=\RѩMīMk
+d {@f/ &4[zo "Kh,W@oa|O|Db#YZ]vJGwv/Gy^ g h4Ƅڞ
+\X̖,%GvBw)-ZZ$%oͪQrHkyj>NF[Qc?o_kO՞7ڬ/Wr5P0;@:hÉQ?=ڤ)Wa$:1LP`1`ߛ^.h fٸT.̵/϶C/axXu7"Տs*W-M,~y<k[ "9+/ԗ4I ɺ!oa&}N mPn=rkʍ)4f0tX&Yίx:
+yĔk
+$nId)rĿEvw@6M0=7B[hwFϱK+v*TJqYd̼SD͹w\,{6*vJ
+{cʭPҺv6Γz{iFjH=SeeUY2YclfnaZ8HXZa=ZaJh"g*eG%zsˋ{FކqJgbrnrxniݣb՟uET2:o˛&z5Y 2&!Qc>"\U
+F嚻 TF /shRt#>M2.9(fo+6 T,/qIw)ȕʋ|2?M>΃5*$E_uX=ޅ,_ioJOa? V~ _l@br(Xۃ_vu/F.$w՝ҫώW Oҷ+/]Dz8? Svbm}G56^{kc"^re7EZk0zmxuϺ
+S>z&3=yooxkh2XၹpAx^8{0OWz)=@W*).ov&얭eRk\nrK2E1FX۷.o󱧹8wG/E٠䳨fc\F vo(
+1˓p+RT7TaMƕH;X͋Ӭq6F=Ui1$RlիÃv^ǂmSr՛W*<nwQ:XF<Vyۉ7rGJ@C]ACP`dk?_d潴$0l=㊆w6tTnQNbWrwTbNQa,%,Hz?-m?]|S?m{0D8
+'N2 ^o2S}CS&H'b$M>cqHϤR42DƙI>O><}2ˌ|t1%bINQ1>E}
+)>aOR>)S2pL>*)ĉ*|
+Lr
+ХU
+=/|-@|8c8O20!c(g|FI._ESQkU\,/>#,(靂#HArz
+jj;K /B
++x};sk NY'R [3ĩ w%Kmx}~p~1z'.~.Wϸ9Ѳ&Y= 3|߀46iV(ꦹrSLDKAߤug\'Pak0Y`Oe0xLƇѣ^+㩂u#b9|׊vsu2w
+[(nɦ|=͉kz{w_.V
+[V7q
+fXMv$i*/]ڣBWrό%ƍgY+7l%J:S?Є:-#eQ z0p NBLJQGis?ZI(4o_]Ez[y \Bs<pj]
+$-vG(5g$h);HvZi7\uqNCy2~~yܳz38nZ+% Le^+
+)!{mG ϔqw?ZʯOq.~2;dxIfd*ڏALѪKIJ:0/ ;ĮoQq$gF"M
+vDgItF\.Q1C˜Rw2̴Gtc;T
+0ɥVL\"!&PDp/Lpw|쿶.-Xj-%ʧu`mOs&;+w'ώfؕŋQfR\pGWFuI}Y
+  (# +*:;uFHc=Z=wpsqI>REaNuPw5/Gcڽe['g`zNIی@AEu%Y,Q\?dQ1`3a1\7Goo6YJ4dHl<ڽ>t(S}$MfIgӧ7 
+<O)&K\MTpZR,Bhk 8nVp6;j)[g$ G̥wE`)1E.oMSrt<!Tڮb$FVɸWxU֬:c7qcAƭR!4]|6
+GuQ8NuO޴<{Ӷ.Dɹ/Y6L؝n=?*祼 bDaSniVaZC4E?&&tzCcF.{z#zOTIT@2?MV~atF 95J-Qt[\ߴ ʝP>+hT5Zԉ*j:MLVE
+FeyM 'k:(ٗҡĭ6@)tZ?Pq[ikžn{>B*ۉ1LXIO1CV+wK`~ϗf/wۚb']j:*9R6\]ljA!(ׂxBec! rB_5 T(vŲ+:h/笲|hB?.)zTqVhR;AQfv\JD+"<1B^wj\F~Fom9}:FO! dܖ߫V
+4w(kzq~r.{\~&$s;2Z-sD6qme
+trx
+^t)뱏uѓϸ3L\bכp*՗ /~_"K珪]v|Fr= m&b6_` 3ąG
+|
+r(yJ5HKIJ8{EY{Z[)|U5]qm"M!NQ[B <yRJ%Ky?EEY,4 ̰-SP{ ]"?ER Žχv?XэoR0ah_{h?pp:gvgpsx`^3" } 4YEine{ 4q7E
++&<ŗS6G; :lB\r\쓓T8 MP=Pc!ubam&h)H~Wʾ|!>}/iinaH$-/g]zs m L"mS~3]M8<|DWzmqןMt ?"6tAz/NeTv%,FέE|\Ͽ|"py]Z4_W~rüef|Ql o0h%^yeގ{=Bk n!J6T6Y9ZOl׺?h&bϿd14Ͻ,IBL{x8rxGDlqWNH_;2 CNRXfeX
+ˮ&}"'@g+6Y@JMihV͗^Elh'aiKjM펴H_.)unq҇ӕ6z`WnK\wF\/Cu6틠zwUpcPu+X鶶*[jwUpHU罃E@5gW} Q9"ِ&q`VjAe{br*Xܼx]{sߧf,
+juU(eS-_&+[Q^Jm <6#y^L=eޏ
+#[ʉ55V›iycՎ3x[0JdIZDl{őlli{EP*YA kً֫>W*+ۦ8EaͶTT9I/?hOfJ[LC|Hc*2]G#m`|Y=/LJCExss_ftr}\jz6ZRk_Q=5wo+ tp"ozB"u$|ڬx*[Cgީx(k%+xv`:nVml*3l7m I _\'Y-ox{ȽzL%A25+ Vev
+0F{VO*3#6O*?dcdQ/0i^z F]KRx%n"<c#DF7x2i%w&[/h؆a ϕ@J<^LԿ^
+m
+48'{R6#'w[=|F6a x*`txrxXZ兟ʊݢ=2u%W,\sS潱^5>F%Gԣcc#+χY%6^h?qKVM0i=~!v;3oi՞W]//}MϞ[i,Ո<X3')=@8{[>"k֓[m
+??Rк^(ƗrzA&k]x._HT pٱػ/~OkOYO7Ũ:ڇTIm)yܜ0],/dJ!uk/>M#sKY`[Eb(Q$g%J0gQн=8Ljք' &A+p~xBB\ՈAFgýManlCUGjWaB錫?,dQc9|׳<^2\oWL_g
+Fxx|3dǥOr_w3e'кS ݅RAa4 zfgQgom\ZOzZ2x7_5]ulmT6ϔk!^FWmۜ9g'=^NO)IW3.hTL1?wv[L7Zz~偅5kjThO5Va'Va"o]ou7ԎP/ޥ]s 0u{>hа~s\^XZj./j3g}Q|m.[2@oݚx0IИ3+њj]L =U -rWA3?%9^
+R<]!SCuʭkglu6TCr]fulwJ͢9=eN!qM
+c7?fWjVDOEvk, [?~| UĬ.l"FЈ2?&~"gzqcT֎#A,
+l}o!<]6-;h vSdOݭqV rfu!]2|L3C,#]4n+ЭF򠉓dS(5hNA֜csB]ANPs<pu
+ݻ7=_dF&0Y}prV}1+t){>`/8ˡ@ M j }8X=>@=-3]..Z֝4y>qNs φ˞öQm{DǒœVHT(V8`iJTatؽΰU_h;wƽa*hFܼ.,Ļ*zۥ:\n;nU:
+q??_|v>wFzj(Ѧbl^?`k}PdJ|3&zS܂Ʈ Q?6ZVkY58:5ػ6jď{q&B#cfoӌ!X˳۝ 'Ptmܳh6S6y{3yW33\z@-kH5㪋>*YA7?`eĕ`VOpX׾Rfy2,WjB52[2[֭19E =+LOHG-ld]&ziCYe&`(9#
+(
+Gr|ŗx&^S!<vwnz.v,x/A{~Y"<>>=4ܨ?[r`<}uack|C_>8-lt^/qr
+K*OGK0h/Ǯ|d;V 4ڄ+utD;r@[4~ m0WC6yddޮc 4xѪ.q槒-zZoKv;&W۬Y>>Pi_<j%?Ϛo0rEr1 s3+K+[{Cbg(XB:m.&<,n[:( lgQmM5u=ak?q &>&լ._qtH/[6y zpr:|-} U'6l5'^b|ŕS`񖟿谋D@K N}[W-[UW%[fUwE
+<z )fmgĞM`_ۭ=tG[V8r{5!vφ۱c"SlcUxoG ;
+y1'j[ߚu^ό16sIn-쁝L31|Rۣ=II
+v PӁC=nTĪsORoy {c+:n6
+:5 Wwa޻<VyY<MJwZ&4R *k?D2_,T3oaaN==uGl|u(2*W9 _]5cqqP=/f ߧ^ҦvWeT O\%]]dUkicO+o Z#4VmYzg7isS usṻ Wf浯h*|]:P?1!,9P w!)s?:fgNCu 34z~7,t| s]Y^/?;37S' ʴn216xkuUYW$qGvp(\[@TV&.ׁcJ1њ^ F\FH8h*Ɇ9Rwaz|pd>ppnɚU+b9[ 6XI
+Z}%AK ^J}nR|YQ̬s*4/(Hlw#n~^:A7fZDD =5e.9}-z(W<V޻Kgh< Ǥ
+Q^X;/w{-tVH`|vLDS˘xbHb}#ZK m4ɻIR!bXލ%ʡ?e H-SCۻU x(K%&}AJ1^U꿘ǜ4i㲈Q!Qg*)}G&s~GϘ{5'PH6"$C*e$g@(WH
+Y_F~1ْWѧ5!S#^iMm< ~J
+xtk{Bz# Zڕs6>/<wx#(UXEcVj? 9 ~aӪߍnBڟT]nQްGg]gL SbqĥB*O8
+3!qq,6( /ʐ1.#
+u)f7kNMG.]6\{tg>1w0uA'SO2\m+]gɤ(, :g$JVueepWZηݻ
+7xՐ~藎ud*δ_g?u6xS)3xVޱ9+R*-JJ<r3aZbڌHFxu(DI|?â^f=gu՗2,B5@R#i9뗜r.I8Ie5.%/>+IG1:Eu^ywmCib䣥f]t95[SBKQ&||^LkUY5(v0+
+[?i
+:'d*?J
+{ڿ o{dq||ܵzt.M<?)x"c<̓2w /?s?ϕhb3y#
+*a^~N):Q\Px{g h~K|`kD|u[ww'ĮݙzqǏE#D5|<k?ps_E ksBbs鼐iԡG&bH[;} i];pSx\y1N}[ύɺMs@ Na}U?d_V/bO:$kTi67Nvmk-ϛ>? r??c}'.jD] T|3\o\]CB%eba]u*S,-ѭz2maeK9"zxщ^ZTz_B F~\ل'\G+YC1=دZ@E&ZkWciyAϋ#%;&^ps*ԙZxQ|̷{G'C;u|jYY亶* A&lWycۛb4y`p<yW b>/LAם-D.
+@;_] KsIPN"δsl=Ix5%~"Kƶ!Xϩp!d\L#efb\/fkݥN kM3H-O\ /CJ hZ(4u
+ϰ]fk/5]&{ǥa¼=`ߘYߚp6ePnhI1e|DAMS}h{hZih'!DxMN>nAfwV9ݖY4~{: kƧ=Atb@0ta6 oZ?D..K/)NݠjZ4p>V1?/nfR5H'_+_ K c/.{v \gFXOo_>#M+kԖ+ET,aiuT@j?RԳ$䕋}<Iyv!)I,f% ^d2^pqRjNVoyjd^+ %s1*Lbۡ&?_)DHD(ޅ_%Ez㶷]Sf/?~yuIbW7Q ye`e`.!*6z$jg\&PMT+~~dHJIF׾(͎&zy|2`#GN9oek"l7L%©kƄ/c.O8U|SLF7
+xf5GlvY9f~ &>Վ6<<bl\\ [obSÌ=FO+;T'3(ez64
+(.s>9i,;qn(!1X,~"hٗyݝ_oskAjסŢ>;N'tİ).1捞Dq+N ^ޥ͓hPE|RT24&-?κ^r[{cNRlhS3W4dH8j-Ԋ"߬ש}Z~2Z76`]I5uqCyrG`BYޘf#'hn^[<{NDWM:[l\ݨDԅ|e<!]![9ۦXe~6Y}7 4xY|&
+3:5 HMDS(_&9/~i#d:J0GͲ5Vb:@&b%DVl-9ƬA"'U2y? CRujk &0EwM|&Qe?Iָ,澰;%:m/dxgo }7sUA$L䨖+ӻ^dܡcH=;x+S 7hI@ȺF%8X:[`F0XQ{ǗQD WGWWwz@_̙6PkX?"P>}7=Exũxj;XK n[r}+kJ,r\v&g#-Tݾ&hOD.  quzRXCHCm!Ux\.XkmVq!Գ_[ZL;iYtտ4I"8{I=UĬ> CѬH#n, vR/)=8`n!R:J GTAmi'q16W3Q
+nB:EמL'J#4wnigF]Ԧ%ۆ kE]aէyB[Muߗo
+ |La)W<@AF0 cHoK45+l%~ˤ]d{؇ǵ߱#!`;4.[+,tI]}%KJ@Up6Wnd|gvP7mk7N>%wnHonީ[&~{h|L =m8DZjQKhQ+eѢE~E!?tӳ.-;v_XY{ Y
+MPk' w1۠΢0 Rl_ogU]~~׍xپRb V?uuo%eT8O[˘n_Nz)nףbgY-~.VPډ-PMܵ0kV-o$c%mH%ܨ/*뭫1ø}UThdc h9Ъ{}"I=-rUXcQ(njEW)Ou/+7 XIY;vVEk@UeVU.+sF^!aP!Gf(֑|QY`q+
+8'Bg
+20
+B\ SwaaRs&0Bt,~>Wsh4@F 7;bhhzhCT6q*¹d~P9w$g
+,zS
+o.6Sc}EQ?ml
+\_vW{3m‰3qaǢ/ Iyʶ$\tZio{}p#afU=HC@7ֳ౺hsFi6|W{,Nn}4ڻoNi/^3UJC}1zn.##ѩlVP9)!HG:oTQ8za<$ٚt6a}`qۥ!l(NO;d=\?}AY# ο1#;Ym?8߭U9}#EIvd4> TJ7}b.rAw[Ѥҳ MSZ)+,ƍWz5~ Em(Ʒ垯Q|uL,&>~
+DB9[#V/o="_e^͹O;p^l>v8j_`ؚt(I1PQv]{.<^ޏaWXݥxWt+/6/[@sްLgY{O<#U)`2?4[NJ
+RFDMz#ؾfW]_D]| AM S$z-{ӫa[5]v60es".ӷzJo}_:磥bqgBB
+*Dv;s{x0?<} ,ެQb 5*)%w֭v.?өWdfך_ t ޤ&4#O>zTU)%'!=
+M%| Myu- $? ';{@>ۉWs̄9˭1h8IHƥ'1Zl gk$V޼ڶz^{~bH<H9
+cA]EXdžP^/CnqN! ,{
+a9o5C񑶕җF3~fMn|76Ey| *T??Eݹa}l$>vect>Ϫv"
+snbPGv"r7:3^Enb*\k>_.sJCx:}7"5.SnFiTas"*?HՂ\PZ\OyL#1GVU*D)lf׿zl>Q`GYFPoHmlL4Zj*7(08w܈ vIdƝ۬D*'Ť6R8ijLX "^VO\{lcbL#hLn4s/B򞶩"zwy<*z2$" qR*57'=  /8<-Jcq2ʫ?_OP #A"<((΢($k={=?nIn_U"ޮRLsQkٍٳطk((2BYTU7}c{LjsECV>܈UJU|<qL2q&R[DwԖÓԦ[?X9Ko{rmħɡaoT߹xP<֫doI+ߛJZRɼjY%#WI%vM ;w!Hx,{SD^?;{-1bcU *`^>4jRa]bT}k%
+o]6 tʮuNJ򱟇dU@R!$&ϻF }ǙW7_^ͫ6CdYIu!s};}{M)Ta1I_kM+;[ASwԙZ{gs \}u ]0A &MQCdr+e_`곋n.ҝ?z;;.\xikYޙfunj9
+~2uפ>Hfa)Fj"(zy?ֺ;CrOuˢj5Am._>'LL>Cvh^Nz-}mZ9{`jNT>HIŊ!S*Zrl^~Ws).n.EOv
+mb3?\XEDhc|\賾uzCihG['8\LCU wҦ,av/[:|^7n~P'|Ezڑ;!?_3|Dh<j/xIN1dׂw+chU:w(oqC>pC>͡PЕ \f˻Gu IHVT̷ޯ &e CԳ |ٗf2RknCP$b2m(/Qzf<Pz 07HUopqwp2eaJ'LfD\UxTD,W0u}-~\})Z( #.@3hzh@ɷdC~G4@=˟#6EW[ "(=1UÀ[MnYLeR;tR%8/vћ%(>~C 1Wˣ"AvCAMrΥ,rrNe$+]mTF;3m80tw*ݨY.#LLB/gZ7A}LI6Cz3$o00 0+̺
+ࡂxes.ox_Y79~W~0 p ]5B}d8@[Vv-; v^m0欑ue{0^%oCkR:^A p>DV໒ O5 o} ؏෕²1i6"QѬ߁8C@|4) UJZ$
+Uн~}Oh?_:CصE}*̤f{]@|=J E:EG&%) Q͒كlb~9<{u;8
+8;G(umkįF?@\񮼻LӼifIS
+#-+=Rf@j \B7Nzoh:
+F 9uUXe16ihV!Yu&7KϛF7|+AYU Ns{
+qPս>~}L@V$l%D[3&Bn8,'Qcм>+Npow8je/fz{5ZEmPw1YQWz#vڮ}Q-GZn]]ar(Ǿ G2sj
+m"R;kE '9Yn'V׷psv3#Ry ozrg蚣kY8SooZǓu`X`5nlUZl1ϖ0_84V;jU()>GZoUcm>js5Ԡn z5G(Txנ>q"oq/bo{f<A[(Yܲd4Q:5xZƫߚW<3pÎ{iD(?7Ix\gi[#q^C|~N->ZFC鵽p۟u̧EZ׼zq+CHoګJnsSYͣMiqʼ$10vtk7."O!Vn{r-Z<{gve fy>5/dhڏg9#0Er)]+$W3ύ>jkZLè<93ć،co7ue蓶.Ju|lyҵ
+! 8Y-%&+] HFAל[&7XϫE5wTj;n*I4,]_.#~2ڇU2)OgEI8v?#b*OAn ol<O5CX.=6=f4kp%_9NzE?xqQ)oz&G.Xj)QHNGxCD=7e[[^ЙM(8- TkTk_e6X٨d$}3L=)g}9*
+'pY)^p]#\ Zᐔh& 鉜
+
+WAL e'%Nݭ];,a /tsb4ٔeF_>Hq6bĸ3t+ϫ {$K Bv,
+#_#I{11ri}܎[ofוR2'ZՐ6Y2B@eC^I̥!˗ڝbGbXv(&w{&bm-<IW'.r||v?0g ]v~o/Y+D^4k5-jsvotp##q }U'.(=nPy941AR,rM4ߍ\Y7t8*5`QO̱~مs*v0]ejŔҜ޵̃üLӻfJaJ=m0T#)޲{~%oCk[T*k::?'SJMngZmnF?0g,n٢#\x1e㉤RͤPTUh_ɫ(+k4!⊢??"1o%Sæ@ E|n9xWX88g}+b z5t7[RHy9;Vt~`b}Bwc<E>ھhA+_?D5nem; nǝÐ5{2n2Aٱc\)ctP(s$6kiVgk$ゆDz<Ϯx4x}pUKx+U=b=,y,{`2w0JYCx-3:-/oYT Ɗzr.GSd%,x>V.4*JeZ'WJvVt}(ޣ\3pLpL% 㾿A fS5ЦcK_GGYw;܎8xiB^P3r*z$e|\eF9xв'raK }(b#V4eEg.v'UUPxxa$IA %2߈bNEdJkYv4s_s0v
+rX>51 }<Zpy mk|ɽVw9d$-D,){:N^p^Zyk4g2XH w
+Өx2ݥJy]hL
+%>ք6jG}s
+<Oo407ji Au&p
+GLk^HJ6 ksn&B (
+g
+DbXg(@<@<9ߺ
+)f@|{@Tz|VO 퀒@fғwJQ1mļ7aۛkJ^"Ϳo+;o9G<kT^4t@V*<Ggȫ6Sga
+]tPlEi"!]]j/H7osUȎ|=2aw-R}_K0#qM'~'EI5_U>>=fhmz°]iXa)L~4G ML"%l{{v6D+`|ֺپ<I,
+zyg(No-QcVۨ˼Fb0za]òO7Wr\^w-u蝗Jy*5۟z8jk5S.h.nϳf
+3]k"7MorOҙFk~:jz()jՍ,ka`Yk$ia?WU1>w1Dؾ1 T*j\Պ++5e؍2<ce5dBP.f% ΍ ,PoVZMcڋ#Zxqbcɵl+efd|Z}nU@O?v_WZ3ӪV?0Z>+x+G WEQJ67+=Q+#E;+D4?,< 8j/ܝ߸KKVelZA&c;wX=zdhCΖ5-o^u~B)kVX(\}/~"ב+
+(+^B)Tu؉;Μ%v\v vTc%OEv=߰U3+dgv>ƭY~URԦ5{UPTe6-ts<.8\76X:Mf⍋x5bgzEEd9ᎌmAp=AD[I9\ /GPgǿ~qFt_&d`G$wqvtۂM29
+j~OVDcJt63OxyDRdN`Q "YDd>W¶}ŅG7H<nιֆ5+>_lz[e_4il
+_{7Bڻ8zKI}~-\tъϛD*4r&bgiv.򙣼8v>VU-: cD;摮:<-<َٞK ٞ||WBP5|u`N>P<\yd|^ z1mXfJ5EL uR++FݠE5Ր3#{IqBȡ, \|hv;*>lCa
+L0Qx=/}3
+7\/Xa\<2S~)vͽVOiC?qrhEwEdl dx+7yZ Ᏹ^jZEr7t=o ?bhսty槣cI5g,꛵0@W7:'u#/ 75cpx+pvl]a}}7fx
+ͣ呦B+jBhmy*S9ك|{ƷF
+L@ :Ua~U5K}uH|3F>e|sS-evD#*y{JGNAaE
+] : hjZk.ntڣ֯H62'&e$WeCm0N_LbwᰵY%k~F³Qg?L9$:"8s2` }>̽gB!
+<-g
+a5J0vnTh5 HU' c'1^8`Ng0~5; pT;V =7JpOpapoSPm~*
+ vj}zWwRX.Nlڅ`9X֧1NXo׬wj r;ҦS2-Vdur̅S(SSɄ7!<_1=xŅO9/?i|p-ؠliѹUOڀj%T_{]=pN[~wufɄ%AҡпFI#9/69ݱ(+i}"pMr<q1{6"ᷕs3R="98Uc}]?Og>nmn)mS!뒊f30?yЯOs+?}Kہ;WnF/⊜5#ҽr{E r?Wlw.Us+%X(Khd~aLxSs~3?I<xA8w.e(GK".SѼ(.
+קv]詳ԯN6/󕤌g~N\ND?g׻O?Z4EUObgF- z[ZOV ¹9
+ރ<=Rq)ZR.ٹijW.u
+]-^1zi,dg1:dm\!?y]}+>s}S̋iڸeaemdp:V^M Yks{/ θӑt1kMvWpiyW1it,~˛l8^U>|g6vڤ\j\HUԙ5VTxe׏e*16p?,QEG)s|JkU슍έx)Tj,ժ7/ρ%=U1qD]A8S%3rnOcKe*]K`ep^̾#
+t gqRR# ΂91?_Gnn4ꦃ1]#*8#n˓({$1Qh/4#YrTe?z
+MyK롌X:T;)sw8yxnjȀ@Hf^H>.$ CɸwVg؉${]vX\9TwGhzb>sV,U|,o
+)TU]}׶$ytĶF"C9k!ήB/ He>5.myi`9Wy+£q8 mY[f%~J=>f^WZ^YmOBR#0= y
+­@Bb5vC];s`JnLq8~bN;5Evj4vjA ?
+5FGU1K@{b}7ki1&R{mS{]R<Qz]ިF.xTۍcYMUE4Jh,D=/>Ngi4ag:ebNe"VMp٤K~D5"$!O;Vhֈk%%OҴ4ȖzQ\J޿xk/
+yU>^/ޡg1k! N9M6/NS>ћqIKc=FC)J&[W$ɰN$O-gasxH\AfJ:qpq0_ɬ%>xmr;:0s{Yš v-Oq'aB-!%#z5HH9-E[y:J>N**
+ {{(F.t^ENbmAfNhCA
+a~e{O׫5r&YJ^D]y[鹐Ѓ$],pU`G-DZp}MO|e5vj˫|{Ltv#I }wu6-x=~+ja).a+*"M{%6ެb;ȓ f^c"g8'z0| ѡDnvjJOv-L'wQʘAʰTi -".SeK|S}SOc)eRjYp|1z(6͕\PUYE
+JPQTL0 s}<-ee!' 7sJ*)W䭞ʝa
+@(mbQk`ۃU*:IgRWbTׅGt}ą2q]RP}qcyd
+skݍׂ?N\gQ 8!0LqR
+)zJ13Dx+,L̠/Ii_o92<Z%#+(sy ʒa_#57 z\#Wno
+
+jZ2W˿
+H f+3)e 1;Lq Z1O]<KRU9*YT[J!%|DЪDGO / 4(+~u% F_-'A@%= N9?3^HE^R
+!b_k|3rzzޮ
+r,G/~~zo4Źk69G*;}%ЂzGEs[SC1VZg6
+=6m?nhpҏ@ํ[:~ԧ:] YEZ w QRUr:?
+?E+Q. 0^/6lg f
+{{=9i96˧չn^}9eǚ]X6ocvU=`U m'+WWywY{{ݹnPg,|1JZPXBc9pOj<q?3^|]-wr|RՌ1'\X//nR+{eV }-Q>MUX",cz+j(S\;b8٢n"R
+?мQhKÐ{ۥFIUz猪P[8ya_v0boz?[yyLGURrR߬5?ҙZiQ;}
+^
+z~9e:|Z~:bfw4T'v3lԽj.*q/~)WޢC<k}{
+iv
+iwWBډŤGC9_i5|>B˘-t25O %,u]qn :bp4rӑ_7W#L+OD)W|3yK&EKfXH ΒQ)#E?}2F:#8ι
+vf\3vҵR5(>ösN[|5*6À&.2#h[ʐ{:ZJKlK^+ފrQ{ U-hi,hGEOQ2ga?ĭ'[{#RYo֑MA%F?P1stjg}⠼Pz;A"[k uk^[(Wd0LMk~B~l|6|v4lxd.*)HN\1M,D1seQofRbY,Yz?ԖzO-ɮBաPT|
++IHS/?,!,2v#I RN*}ٚ.\!FfXdt[yE!"`&N.D#)g7\V{Ԯ8qݹ_| v-)P}ލgmqK̇"Fg:c>=,j4w_:1 1l^RxQ3Ҿ'ם
+Yq׋n7H%`/k'=r^B-b Ҩ2昿8fW:EGpcBォM7ɧ`Lj׺K*^ivY+-gzM䉲{S\.)l5LDr{yFΛy<gW=<d1Xm zf74#=f)HMgdZRo%&Ck& 5")!T lKSZ%t0dLrP46x]MّI@f&1u#+?1yM$V sccrFE}8>=+<s<٬Ib01ˎ^lء,6wRYŋ+g 6΄zf\k^ שs[.r5$pFh>#7ܘ
+Z]Zy(2^ :JGtv8lOL_I~ޭQ*g&Rz[_I%;tu3!>R {mys@IZl|YU+N5:(v| Cܾ#u,k?qN)v<Wd}e<W\Vh4R5`[Xo6!wEy,64IEtѕ|j"un)컫^)]FRmN<×>w{Ò?tiCh0:!ը Tr˽a <1 X;R+ӜK]_7xdl ٝsH|ѭ#Ov:
+Y!3p=݅`=&4t_H#c
+{FPn_Ȝr.siUt Xe
+{W+SL?Ph
+=d;k|cXGZ*bXE|/0!Kv@dM+tJm|ޛyl֡gMf/5Af̲S{q6ܶg$
+9H,e.Ft9~yM]݌00f3@~ " *c}@Q<h +dNrB
+JId@½  b㤍عO;J+͉^柴 ubQ\ޝruK|sHmqWzZn>{>K_
+m*'@ig (GRLT@UZ
+;vu_}6eHŧL5/fn=?hY/2_3Vi8䴁np,?=~wkM_vp]mF~ːr AMFm0ãUG)c]*
+ϓH0n8ų;op_֐YW?7h ^;o1a/ZIs悸;m@X&9|=|({>7x0;tCs8R侓WަZs؋]x6{v%Kw׵Ѿװ}}x|+ O1B~*QzagÉ U~AHݾaoSf=| Bv}tp[Wh˯1zbKf b35oQuh±xk,5fRm8l@ηQlmLO29 H>
+١q?NօznA eJV}iRo=Q}&l??)'~vGͨ|[7m$o,칁쑇i9?x!L:unK}}d2Sk"ԵgIX,S M*\I|*?)!?'ƲH dKV^.f=vےZ2NjZUo*P<fё[lAR"tjdJ. )f~ t64gۼ2q|NMaXl=W\zQ=s9FkjbYTNp^_vWu=nVJYPUϣ}+yYFeՅnKϣ?>fPVXZ|g474Vt<3=猙{Z`AC>;p2'[}<_F\Jk^]]>-Uy@֟".qkC!^šJSwC8j+#eJg_'CvN+31+/HweYwocڕ6!P9@RG: ڕc4Z<wx.ƃZg qNmdNCETAFmM!_LDRjMnk{MfvNN`2 ulj[v`nIz\X*uFq˂ܫlqx2 Em&Il*k24۪iMTd9(~ϿbJdž)~$7+Ŕ҇=+;7ҧZp,A!kmYo820[yĪW^LZũYWm7Ѣ]F]9::D(-)n]UBrc8dA ml/6n~!v*b] HQEk)WMkޤRd5I鲾bzu@5R5ٓ@]S-_ʖHy/JqddzSzHzNjPYܪ' |tb*ۺo)"ͬ?i0~4h3F::3Ru+ccp"{^U'RgPfL:EDZxY~?-}TozӻfۈJ™m%]Y] gkV_&LPYxLQvtէVU-7׈'w_R@p(<xj&=vſʁ/.ǯϴn072A.P()[x^!E' 'wGu)C&k5yC4kto'W%1<X⵷
+0 }~lF=>Bb㈃ۚ]t[1;@ GYaEJ{ʖRNj./R*6(ATm{XѢU.XRPW:,V4Ƕy^qPkNLɹc6/t<Mmb:jI^b :Cb!n{vK'KE|?(Y'$9vZВ\GPw[JF]g2?I9]VP^5_ :]zs!u"U G'2F&K I|T;BU%._腇Op_Qw_Zuo>UCiʾX\C89 ,asIX !,:m=k_dpIw[Y'Uڗ >P/f]Qla2l%w: ,W)b3 #M;z/)IYHܺ-qh1[bM|Sm]"vxDG *3aLO9cx羀G(NYg Sk<.졅v`E'TG}hߴD0wC_"OOzޯ&+u\1Ì8Y@ SmG YRc_ivj+@?,[nޯfGys)inCy/H݄oډ)bnޗ)3^NIWO2վmM.qʨbs("ܵ\SW@P'a޿gyvIybJЭ+:P_ZtkܳS@>>@kpe u_~Uy?Pa dV/G3 2=\VFG\b[Q-,`ѫН~@JG]r/ʅwu.;yJDlgsxC+c/>LLo3[ydsBA[;LkoЉċ!CyiZw6'r^){\Z2ea'kzaf~<26x)@;`8y
+ih*h|-:Ws-C >%qnL3ƣnCk4b)5&=E\~= >6jvn[gI=X,
+6)`1GlSmE0Sm|l?tr1C;x,*֓G`^unw/޳YOYܶh웿nی>Iq;>
+ӊ~W
+:ML7oBŨȀ$d:lBpfyC%WmҟJWwW7~O+u UߥӼ} rׁ@~T@e(yz
+uKo\WORsC. vctTO+[N廔mioO"嗲uM ڥƲ:(7ݠmisUzۇur-]ɝj^zVon7\UurBgrtV>X)dqg{xi
+huބUAֱs=nv{ `epZ֒ք7.TocV pl9mU=5*j'yU٦^WFnf @rjX2_MDuʧFca F-Q_Kzΰ&<ik9 M.Ie򨔐-(G* )i/k;,!Y Ke3(o&(R22b q4)Pb8_KJѽVM?7E(̷oiw4rt*;l^-:ZDu1Bi6R֤#PjX;YҞʆ{UZ )9뙬զ-'kfWL h_ecއERg[W)#X ҵ14BdxrXjqk~ Cr>j}7Ő͜muAΛj!̍J >
+6)ycUK4(>{CXBƧ{R}
+|m,:˙]Jo}ǐ[^K^zfXh3|T.tS+V { Rj*{ U*M3X&v6Lꭒ(sQ)}|{Z99{rJcka[ghrA臏Z14+)sL7j&e oj:*"=GF
+{ߍ_ۻbEa­:gTо'4 '!ҽp ;x߸U:o庭m:- PP^pd|o hYYU峑:(jTmѮIVВKn4L}6B:nSiɑ-rVrElαщcfǐ3kXtj?]wRs|}Q[IqO*7f@N0nbn Cn/Vz<(54n|sr~YbO@@̪Q*)m(麾j[Iu83vr̴G*LOkO6񼫛wCrE!MI"^U:@TGă™٩ϖ.?̪C/_m|I$0T[u(|)}lɳV'Ƒaȳ
+RiA7{͢J6ޙ(kOߩox!vwIPKM/%3kc^c 4_bm`Y=hiһ̨ߤ~Q& Bvp'&< zxM?{MLȸ"z˽ ^—GmٓzU%̜[Q.g&.X«L{CETJ[Xj;&t";p z=ArƟTµj>Beo6iV]llly`ymձ>KÀkQ(Ja}$cK1k9$*P 9TQǟNbcMb3.#
+r:YAH«YY[z668CFl$;:V70ّ}.^Ǘ.U3C!E&E7?}ĒTӱϼfb渆uZWbFAa%ss?KsBwYR vP;/͡  )ݤJN?$BosҙQcx`ɠQ8 kVY qn
+b_ٛ]N:ǪD^G5L 7nR-\a;Jw7Gx5fN>g3C;oo)vy{.p)FKA{H.<)-P$5. \Z9+-RP]/+|Gf6NI&5Y I[39 pG(
+k?E[d|t j,Rߨa'βAC}/Bҕsڡe?~he'즖5l?cCZ=p [b!>3=Dy(}i`2
+*@&@Ӫ
+6dgQOCW8{+\Gj
+) -ZRh/ yHa{S§'看VS`$̆̽N)k4Pq(e@Ⱦ/=nDDČחmqlbRS2
+9L vh?#y-p7WR[7F\V\ENSpE,I+zD3n=-u?m)+ ]_0ޢ붅W&l(anS|r@Xd FJ N
+44~?K
+cLnb1X~@ƞI*\lK4P+1x2m2vJrk㽓\vOȞ%jFąe`^k,I_u6Ec[\,mSdXrr^ ]i}ޥໞҁ I̵x#˸>;#aYvsܴJܵ06y?Z~5J+1ihf N0tpژh..fkJjJ=,jJ#HS<D&R喔ΞT=BՁz@ӳlhZsYuvczC<fۯ~y.єiTo哢'Sz]h$gX~G4%GNN<#r(Pr
+1? ǫi8TrQ&%.()8cg75یN}]<lڥvjTomv=yAApPlqrߗ,g<aaJ#J~>Q\1&gŌ?cyiLCq8{zi-
++^e_9Ӕ.y4ިRXA֔3Q_T`d#auB%_7YUv^`XzW.2>\ԛ90yp\`8Ђ7SIkVvj2T D9s*i93K
+Γ-/.}"x%l@\`*Jc+qg jRf^`ۏζ{5-'WڧņIzwMNןlY&~຦mʢj!FƄ<- J) eI6G5;%RqNU^(C]̉ܒk<NcZaVf9ѹf43/תЯЯMͤ;αrg{w@軣XV;oԊUGϚjY1=hGH%IxE}DŽY^"ׄc^kvLޭXL?DeO1}ӣncEը5?llnRvIC~(7=S+tU.p'7'
+|֥P„Z qKD{f;WObX{~3X*]
+v5#=
+mHrGXSbOĺuX'q1"s>Ա5G<k^pq4@b*gׄ
+%51qz䡌uvHҽs*5'cB\46WJ$ݖXG(`DHwf qMzQ2wkOlᾫ/*_[}Y[5UC7^|*=+ ebUMG8Dô@Pҽ
+I:Il@#JM`I$1vrUkkk0"&_#L:LmKƅLV4EnW9{)/o~ʺJG_]y <Ӝj1f z"??dD(|?(^^".e Oe;3ڞ10] yt.v13 1$!rq|xn1;7ŌR+|ْcWvɂ祲A'S
+!)6<°bA:={.`L.4&kyo{lhj7;cᕶ[FBV[KܨGW*8Oda҉b d~GDBRHGGD
+ejg>Zx#*&]8vmZaKK3Krd\E@zWrG\o o6 <}v\&\fXle4ҵ? e_O:ӐθL@T ]ՓK!,B{NQ
+<[P>ej:L)>@3N'ł
+XKX
+MY:Tt3-~mg $
+clz=JywG͒cxnPYOG6=3G DKWMɝ+YKB=˜N9Nxk[l4e꺚^W-S\|fyyd͹8hx㈜Y6iܾNNHGK otT{Āc /uozmÏN_9'mc6Y ؎K8#-o3 a+4h7mQF+f :CiۯIŢCɣݴs!/Ϻ̩}L}ϏXWrn"<aןzxi6s* 2㏃?kQOMwC|2ǫSeP?x!l+n+JK}dfm =gp?K̯O
+~5}rm.}|#Ws6# HS\+nÖzך==n~$ݬ}4O2O/}- KuI6ʦ*L ;}T)4< hx2i$ k'G2Ʊrذ_s}vux6x
+aU /W4:t)lJVmgi'~bϛ (8?BY0"L1X|'
+PM8a S _
+Qxjf?hP>R܃_K~{M(
+C# V`eUO
+m5oF.*O2e=N&C}q:u1+@\:HC!+ 8a5|kll-/̫ΡPٵ_%4'9n3\)`Y=삂8PU^O#G#YEi^ʙxV43m5${8RvuG'g/j/]uuGza.peW[>sCfUBװ'3L<i3Ҋ|r{5I֗3,_2= ĒlEkZGyd.YkYp,8-},C\eHjmX
+`můL>s)kOT_.+X-4YI!9y#iʊ_3DZm5j=JڐJ:#gL#wZGm Jec_rޗF^WKm;hxsR&{&m8Ppiڹٚ|{gkNuqn~s:Q,弒Gry$))Bt UEq`C17Ŵ %DS"QE: Ǫ橍qdƑiWl9F?KZ GE)IЪ^) JTQ2<ngPRf!e\_B L];W0^6e~WDr|Eycq-rAs]a>?.VܡXT5Lf{tc47TiC~)6~ fڝGyvI"fJ6]7+yb7gtg/ϾǶrU 5s sg*YV rDo~{q@͚鑯85Ei%Y0y?2<Y$$b
+gBiu2?/afbӢ=5+]QHMvK9e~<r"֭Ev|oT?ј~oNaI](HJ7:U88xOЧ=N}(MqD<@pLԮb4!~lyfgMI&0nW WGdNi7w供&prq$aG~ig(i!I
+0.&oz z OIOx :[ZZu\p@Hŕ
+_J(_O:3\hjWqb[\VzӚ
+~W (h
+KzfP)`6a0Si<&n%+w3;o AJ.CNO
+ ow&<
+Eq9t:ޑKV_ɿ0߭UOHRMb4@Z! H#R3TZo@9V
+1=DqNg}hUUT'ךǐ/?~-vt_6(9Nq_
+B Y8V "W˩/uQkF!|cZ&.uDOƣ-V[ -5^{Wְg>ɜ3u8:(]xV YT^J(IEbnS7R2Jmb% *Ş7&;Q)o*b_gmJ9U=0԰EeR%7~T Ybp0ݽ=?e6Ԅ̔/oL.܏Z4a,$)88?+;{û0Ulנt靛~h}fpg/'v-2zxja>g^+ Q n3{$ X9a,k;(E8 /52̽g_[;'Z#GiFÓ{_W2+W_}|ڻZݰ B23Q, O퇲U NVY7?Ca9.2ɴ>塛kI6 m]ٞ. \ي:ZsZX2Zku+Gz?l4J *z!5,cf4ܞR\G?:hrΰX(CWRm7F4y}g.$ilb΄ӻW} e x3NkNBC;m.PX|a*l\rZݺ)DqsSp,">Q++o.۴b40ɇ~7BX0wǝ^L;
++;Rgm_'v6F9:MF=h%{pqjT(h¨ :t _۷ϫ\XwI&"OK<*$=kS[XΜbR?(s(ӕF" zE9ej\v}_P0cFX.",GDd~|([b,`bYp'WoJq NA"s*0ގ/9s;Lw!2ж:QMwor4MbV&gMkڋ'4%ۛd~7vC
+IElP|3xXɾq>YXuVcBq^E*;B'E$#W( qt@'F:PSB*Ukppv
+3*>O.V^7-($ݶKb;5V}X #\hS0)n
+*8Κ
+~O_r8b,l.:*Gǰm:uUߨAYnšyWxa#䰡Dmcr7xղz>.6hsp<} 7>Δpx`KI k@sAv4il'7 DWF9c}t?\Sj|OjCK%qs\إNz+V=^6NXߠw6B&mgaI>
+a@:ծR* ᣼=^Yi%4
+8~8ҾS&sr
+/
+=rn{} ڧ*VlKgz|ZMy43bZ'4neBUP}ZW#$<~ӁS6Ek o^:F+oxOA$%Y]vLʦ|Q*S *ғ6*'ʠʋB2 Nz'aN{+x$b CZv|_۵4kt:S4)6뒚ćbω/?{Û 8JaGY
+fd\PkǩwȒ'qP&݁_ՒҾUaz&XVyZW3IP}gNk8ś'Z(cܽ/koIzqN=iȌ ?rwTH>qï-/-Q}& ީ/0fL; ޣbXp{˝d՝aqvԷ?1$35(n~b.C$=olFmj8+U#}lhw}?7IWzs{~u'c{ړ-XX,*)rl3fAkƦ_ ݯW3.v b5^??.=Uc[5W/^Ç^_Pz-o/X,|Pؕ5 ,֜Afa>q%ѫ U^1[V㥯BV5) ʋ yXeGZ>J-yIprhhhh*ǘѠ\oZyd.yh⬴ ɽvk뢶AQ+%b2W
+ 5ѣIa%O-> W51 107>a9:B!S |< a(,+,E3v~,C:)9מ
+N(tav%,0rՂr5찧AF~ceܲ48L|eLalm;Θ$7^yvٍobn5.bY EljpN{1~+v<v|sBn`b:ma^Qf:fë@?fQD[4")n5yՖn#&j͒ly`p7v[+7 Ga] 6 g\-nՖy]\v\d#3+w_vy#כ:kRni iGaFf,$rz |nNٗgoה%u)%6UXzܒԊ󈽴V9#+cF'B#IU-7R}ܑr 7&gP #G,FκOQ_g N =HF6m(V_9}&XMPy\'abq{>x,V9c5nD?m5M 9+S";ytq"厯A/
+]MeǦC#Zon*h~BTbSrTE)[wLc
+R$uL._)SzpAGԇ^)+uIQ;$ze:D^'% )-&*aUڻWxh}1.RCb"mAԈM/0w
+jc4=+$gMO=`#1Gm)7Ƚ3U>Ʒc~" hɟQiz q qg]7s҂MnOа 6=ݻLZZRG@bA
+
+^(vETL]7/ 1m=3D4bg~E7-h<j!=[(
+&D;d|
+X|6:$cݎGW"9i?Sy%<@r}A0oHDn9蔫 !QmH* ^;z 5rk 1\AnDbc[?Ϲ%Nf#Hp}|:T~TŷT1͏J j IRKuqZF 5TW ՜@؎T$IǓq\ko@ͽc"Y#!ODCjS>o$~r`:HHU9ka޶h|׶v
+נh P\<P`P, MP0d@~vo鑥}WM
+C?jN~1ׯ|SϽ]VaSݭ"㖊"囦wuJ<i$wYKKZ`.e:MNjD\DLW4C(}$M:sCt*%ل C/d`mFWe%) 9 5io="6{Z@q'٨MRޖE*%tf7Lr7LgN3Zf^u$[;dWOol)O2]: \gGv7
+@+";{Si̩ :5=7Qd2vL&JŨ<Jg+2urj5#BR,SOVŒ]mTId_Ne nsKw[Ac_lspȩfiA]>{̴ׅ2)$!A)VӋAecM]Kj5R$LG%XCs ǪԠȣK!TVvχ|{煢q,|qBl6b-W38Osm+UCv뙙.iBfSdIL
+p[30Ry.3F])Dpğ=+pbqq{3WP| I6ϸ^Q\ը5 \{ 2ՙu@JL()Å.3{tj &IVHJ<k`{=:Qϴ癸PA'7q0Nʱ9Cbryŵ7GRXs|gM4~E؞l?)}ہdl_4e t$$+:\?78d2/()'$:2x@)\4> }5ŋFt<')46&5,=OsAEsh1CsHv:&Y=30R@JV&RT<ǖA8Amne4n.CIB2LlvXs.CAs%W"T!4 f׮0[)$̫jխU8c?Wt>ojɻےyۙ:+D0.[+"[8;L:6X/P-e4FsRTPWdݮzH)Bᑻj" F-~u#Q7/ܨ9 ("=HPӱ3X9cgJsZd-q!.* S%p.;),3Z7G,Y"1B"Dɑ,@Y3## sf*n xFtsf
+L.Ҩd@$H@$x^-,^xW,/;%%2%#%%vDt2` 찝(;zVSstH-CHi gson)G-
+7 "J- %xV46fP^T s g  B:pk-/;.tވL Jdtd]Za2"K@l2
+eK -5 خP6PW(7@g  
+`#U bj-Y
+3tI6[ʇCޒt!#.zJK<G,y)"R+"0@M a ቂq2@Vejh,"-46
+P&Y111y1>EvbuXg{&t`xshG4囦~2|VmZ$RQ 1 :\5
+ٜ nR
+in{=ء}887 L3PG>{4~_|o%K' =gcR
+Ѡn_w}+ᳯW6h.O:
+>CVxSP4(K<H
+:΁Ҵ7"4~䒯~hm?ʐ_{6 _ 䯍 P [_?S2kPEpk$1P)V|@Y]@y?ht.y98b3,<6;&b*kuMe$Xsz bl&nvں_% #GVy~YϴV:@sfKp9ѴSM4ԙs*MrL?./M'â1NG?qp_V8M9Dt'KWU'v)rkM>vQfЬ22ܵn>odz|
+|#j^owG-~+n#j!{_ZޣWBhRpDh<Aép0nJ8}?vtr3mSV.TvnrJvYZ֭$tu#hs^\܌ٯ ЖҠKWQzXD4=Jxܮ&ZqA|3`ڙa*c\EY6B#!<U\5nsKXČljeR.*QG{qĚuhv='>կ($(^R])+U"P?::X?x6;Ln{0"~ƠEsM3>Gұ~VL|𘎔WxbhKËcr*%(G?bYv8\nQ3--TkO$}[qx!kѴ쏍Nj"i;kumϊ"Uɝan2{6eJSJ x$"4r݉;^ <a1[yÞfl&BWk{U8{g|N]KǖTDwx|r G\`#ײS1v:7p$b9,#Ϋw2qI?b\. 0i}V379y:E$^JDZ9myp*G2$9QQQI3blJDՆGUDA1 CixmWTk-#DhNB z $vVl;[!
+0?:a8 -
+2rcɢq $~rD é~g
+o=ixak_ /xʾuͲp{x{%~/jzj0bZ^(r䵕w*ds4g0/l}YLb4H۸#gzm%8"="^;( U؜
+ߚp 0Jrܕ݋_LPs>}?)hX?hynY)z%U`qs8Rꛜ)#,țewSmW@O^a3֓i,/cBG{㙫wSߏ3vAkͥRՅmg {f"vGjUؤyTyw%r侮,:&%#WI}7+$ ȲD)iw>Gڙi2"sm=29yq:rM ,dBd7ݬӶYWkOgӲ?W
+ގܑػj'K4%MauGخOa/H߁B;C߁
+pgx{_~wL?
+7: [#zB!p_iB4{N- 9L-n^pXz|?$ph=/c.]G𹧐,T#d~P)Ĵz2jU$mu J(I!+[{W6z \n֖
+$~HoKox^1>fx
+1J Km/2$Yq[Hۀ>Ǣ,[ZWBw^e2vrQ`<S9[yYIɰaI#@4] R3DCj+Ep8%Cz^Tc|&i= AV hR^dXV<","nS"_u?Gh`nnv0#1W XC_#rҙ=VjSP f9g@PeIB' u,Llf7
+e7Ka*{Z/8OU`s?S ǎ2^C2|'S-!eFwZ}Fnu/q`%Il*[q_/}#u7&>J.^}%zxĂA32q4.:O-˱)EEԐ(GvǍ
+5ȘagݣGk"I-2cEy=UmUUR<vDY/Mth֑\@Gwmai)fuE{Ÿ05&:~r. ٬
+Ld 7/DZ^yD.jr\__YXG0W\o:L:>I"]}e'՚]V,_If3ްg ⧋Vj1]h6ټfsdϴ6EdX\ ǧK{=&IP,1 =-L)13]jL3亐̏H~|N0 |S(l@G֍.4=BG^iR^֋,Yt~>y1z`F'Nw*{\nq;U>&z[,U%ɇ#u{'j+B;0WAΑ"ˠ߁ g`x9M/D0Z(06/
+
+'PP0P3b h샆%nkv^w,--r[K]HvRJ;aIhop*B)i*! C\4A'Y3]`R>&ߒ<NTs%jjɑMܒzy0i|pϖ+.sR;D$c`<K+[ti.ܡVwI%7 #MKxav}X+2'MAkǜB(#}3U4۶z,IK)8Jw16܅ _ 0M)ҶYChKU}BȭMs}L)Ͽ\[xtϧ4@ģ14}fg<)MMZLc<Яߟ׋LzZz1 (L ,Cӵ]ߵ}KQw- Ӄ *\4w,-ο"\?^^ƓOh3~*ˆmTתӷUۆED
+Bqf|&{D,!O7K.uiv2_H*j!Ƿ\>r7ݺ3.nC)ЃԹOޑGoTB"OY[] fyK?ey[VڷɅM"XQ_KFCh;hwѹH3)x!^y=/q% OG%*(yjIcpuPy 0^g`V~r.Ymt+n~;6b$cu~6Yۺ+OISij8-^X};yY5fԚ ^}m)ڙn{_;f}!|8&iݰC]]>op8]jsWtg GB&vX$:/'|Dب 6#![' 5x.i(I<g\_FٮLj'6Dz-GeOC1ra 6 <}ѭ{o@n<x}AEla0x;2[])[4ai,_;A/hQwJEeI6Գ'C
+Gesʞ zQ9Ē-pw
+-ˠ!ߗL8U 8?_gÉp+6&#906S/<p8*g4^4StiUTPճsV1N;'~JW\d^e<r+qrB$8H8l^6Cyb
+
+i-$2nww}(ͥmtt#*)iI2E=3pD#9bmc /x0JѰu:WIps#8/շWC.w:#[R]č'$h/)[1# #xOP9:`\}i/ۉ 9
+{̟ܰ)vO M^*0i6ܲ<6Ea1}dI3?ד
+ʛtcȦT:Ë]x ǂOPV:4!fLS u, <VZ|TFO#x$]OHUydCٯ <=[.8BP?{?GO|;׍\ݵu0k#<0x%;-̡i6zhw̟HH|j0{ ϛ22iFtYԵjA QI1q}6[#囖U#JE駻qEv#9-@B+냦 F93=UƲJ-8PZ/ۡq)/G5@"g#t['؋Lٔ:;BnWB?,nC<bCitShK!m2{$|;4ۡOK6=N
+B:|#Y^O˒̥?)Uվ{(#A쓾1.
+7Z.wb A0͝iʑ ]GN*DMo:W>_ z=~-_@]M(u [fJ r9>J[ ziƬ~\'tĝՄC E#! N,_ܤ|!/!#=Oeb^F=!cE;^c@EVEl>oh[*V+d|8`"FY 7c/Zfvݫ`ŖdTζǍ֬n(q:IbS%*_SwqF (.7 Z-r
+kX `uI0P"2hrd
+gYn2m 1Ǝ0W=W X '>A3ʸ\۱mbJv ЉAά~º^L~ /EiH,_\]r/a |O۱h! dL|-4LN86{ ~f_xsѳV_l+}(\Uhu
+c#%+;5es|bfpzbw_C}մ{*qQ9kzj{fy|q~9ސNV-%gXxH?$Ea<~<E;>6{ bs^VW{'}VѷǕS;v-﫩LdcKQ^BqGJP ]k;DF-M4^=zAaBTnrOELf}?Miȹ.L
++?._0 M`< c̆RI6EOiDFW߷DBÖ~{^}Q5ܥ*9$@ ce*J ^Y[z'`qQw4'GS~Y<i-.
+ ~Ak7E3ϊB?-=ه..[ԋ#ԙ_W擗 ưͲZi>ș. vjb7zV:#
+afc4+xUKԧ
+&B<q_E..y(x7m+(FO t396rnVXңFqnE=hW-G [dQ#I߽;͟ !l9:`~w̲"V:&LzߒXYP5 >$Dx6!fp<KT?oW4ޓSI{8844DD:sOƪ2bjHbUk޹EY[j]͆#e&tמcǬ1Qkx#V)//o,m|<y˓9yh8> =«9Blj[/ZfFX`Gʹ 4l[c/
+&z*z
+iH7Ob..[Ptgt1
+r_hQ͔y~@Me
+;a
+M L-W+Q mg6V//
+hV`<<d]S}vRn`B(Kvr3$޸g檎'L2黷m˻];,k0q ɛSOQX˺~E $diUVeuɅL3.carv9uLaTo9|m74
+)‘a8kb)|'
+.2p. @' } ϰh<%SG<;Ki"sΪ-'k ƈ7܌|tW_O=(&r}B6?D5/ ِ&kz;BsH^6mz^jI)L)^…vt=i=
+`!} ZķfS⌈6 /YU_CJm΄mp1$9;9ʔ%;+1 b;{_jC)Ps@$ل^ +Oć@&vğ"~팄|46;k7%|[$5Ҋt][Ьn_ߕ b(L?a(+Ǧ8T~hˆ,vE`c]>h8l]xfG[L/oiyW]:ô'_ѫ4agF~>딖gTWpbo=@m ec$1_sJ')S2JVE4[ܞXV
+FwԂ!Oҿ.6H|%p3Z]]JJ+0b:܊x? ИxJMQ$|Z*ƒ <ԙIGưOl ['ZT9i\cn
+,Zu1tVkvnV Ͼ
+vTeׇ5=-h}УI8ܬh?.r`7
+ejG ۝;r0CyX4͍d!b-;\rK|QPOQlf 4^bi#ΏHmlyIn.5W[,7Jk8\ ʼnI9ݏL fխ;F Ҫg֫zYNmBTm(i9m&pyþ}')cġΈu<r4ĭٸfø-a)QYL<+5[l7HW`^v^-l;P:2- :WpgH9]v1Dc9xZgpԚZi5Oٴ=V=Ǩ/z⿂J<Z 4,Cs񻽪{|L03 >#8e}hV
+ڟϞIݓ|xF6wwWk>ڡ;F}\;pwﷹ,k|!)
+KŏYՠw.Yo{&`lMr.b@S[װeYZ[S|
+r;a;M?ЄT_,YT/V
+j h )]J`oT{0(SCRyPEgL$[W;=湚59ﬓظ'sx<̦4 $Y 9
+GfC2!*-'8IQmdP;X{<-а,)N]suAd3ˇQm *(aO&
+akjԀt-&`p̭0˼jtp'͋圐iT,<AQ7u2q6i7t1h~3hnGco_{^o|#@yz5 >M0U"Hxόv So[Xgd/d n=dVS`%`2ШrȨbCOÀ@9?^/ ʗrS(:@QE_;Tpkn+}Z" 6'=X qt~dɅ/j'ljh
+
+Դc7/$&f.L [9~46;
+PJ߻rzpw)^p5M˱a/ 6Z,{{u&V8/9 [νd7]q Ek0ohU=MWT=;b nvż:]k>[Z6qgX?2Q|RFҗzKl,nX6> ?(j2
+TN]k(xPmCZP]׮ÚicIJIqk]ԑ
+uARӳI Cx/=Si8Ws>vF0B$ՠI4M hhL@uxCTu˗|!Mrv?*躿ݾPk2k9
+K[t!^y6=o0qKBR
+Cil-GБJʺ[Q1ևBkT]3bNϮֆ-_x鴴"R!bG"".kʩ!qwGs/tT3dl\-
+UZ_i-1g+dIE+*pfwWͅ7`nBV2@ŏ1 >oQ?[t!rӍm}=Q
+
+ocLDQZC̳Z)Bj=b%Wϛy(snE *Z(R~5?A~A$XOZVl\ͶQGT:b‰@J>_ 7J5fi[e[Vdu,j$97Ot]K5\!)`
+i '-e Ǣ/$L;o:W]~͒톚%zc~ev7볔TL&ӌ峓V
+(Y\~VXy͠l6cɼpU7%em.07OkBvGER[]k`ٖ.+qă&y Lt&>L
++?vZxukb4{OPA]Sߒqlb^%1^2¬ M8y,N"\B\r&.OaO}h4r< ǮԋƕK>bK2CRCYf/@ߗe7#}(oE<4аbkJ7@,O G-A6H c?/o1q9%f8c]л f9ēOgjF@euwT35[|{h ʞDW%R"3)k0xb4fh]gMYc#1E3Wkt*'П 11wOAS^[uǻ(V
+Y`\`>x3?Î^8vQ{oqkӟAϜF=]{ͻ˸ꖨЙءO|!) ׂeTYzݲ
+9lB.b!lx|!:{G*z4Fe3;sQ{om6pgeo
+䠲h Y۳ͻCg{x K4Xp@ -JPdiPg P.(& EP\G~vYU&D㢙IhxXZ{@Yk6iïQmB;2[*_ߕB,5VA1
+ tǝ$$+:ڗ 4,]y@ʤc]u]ē+55Ձu\NBӒ]נȥ ]jS;
+UFtbzɚD֪sY}zc0ƮlG\#?sPBX 6]P>P&(;EpSLݐ%Jؖ^8Jʿ=ɜftoz6Q}aT*yU,q`#
+j+2^B(22yy]O6-E@n1\={߮8K,OBtÃnzg^@&ҳ:E{k~r[((("l'Jhy T x9OVc ܬiB=RL7lR0
+l (P1]s
+|TUJk@deha|[lkzA#q鞹[YS]3z!sLu8N?B<;j~!s0-BzI}^? Auq[⭎T궽7n/mϷsDuصQI2^ZO"$d^C|O7Ne~
++șO3:xrh+`ui,*=oy|5^ODNMO^^ goŘ$Z`:OxC]kJ|XS3 cn+^A}MA*c2jgl䦳~:I!R8֞NE5=/B_i֟]qf\xHOko) Cw,X{ʔ2;֢\/G!jnS\~M
+V2;&Su#&(~3r7v8
+̢SZZrl㽙;Y{6
+qpآ19Xw8vGq3ѡwBR
+Q$.E(oyAn:vt$A3@[Xj4omnӨ]^>K
+mgfу
+*{oMF;h\'ڋ^0ګY4,?QBuZ.j~熧>L8[8Yh!U(P KPȂ糸
+
+$(8[pY
+Sxfowh?Wà<we:袝/$X6'-EH^q}~
+ ,-:ɣQ-ey_FB_Ob @q?/9$@Ƞ8Jr(ܣo7|F<..gBιͅ'LE?B<^.vr[ոhz
+gkעj+yVX졦ꜭLk ~VWNNC3fɵGv+)zs VY_Ru @}R6|?QP\pP6OgS|ZR\iŭVki>DWzaVeJ!0[%/d})`ϥX_w A17~whT! yp'ea/2a5V*&[FPxvTlJ&\n#ڤ)!$IX8GufW|!)
+*gngУ*5:wGы{6 RGG%z[
+t]PpKsrc/.K-}䂇UC4 ):<vBL
+_ܴf(?oڠ
+C⊯98~ږAuI[Ǻ`lcX|!=<)5xL攌8%E ?7_  x B]P~ϾzcymHvFQBa5ȵq&ʍymʅ];5$*{do-$r32զݜz`8@MXHD]x'Wf%/_]}qOѢ#8=OIP[25Orzcw%E`pzd9߾KS{VrnQg|!PemhAQWlnP~ݔF%r㘳xicye!39n][oh{!c
+;R:_9ښ'Z^.V`pFj+xl=xW68X \,/@:n۴OہЎ&0FJ'sXT|6ٞa412xq%Z4IM;1e:{!o, !x85@1:>@B
+"FaMƦ '`ԙ$
+Xʢ7,,N7am \i5ہo}{A
+׮j[-!q3۵"R6[[-hd޼ahs@+(Il}. MشNm4; *1,IIS{&E]9O1~~%'M'k^N}[ZސW Ro-5t))mW8wCv'mFOb%BF`1yU^3렻z'2h5ode'?Wb|-#bBR 9ZC'/}7 p~7 aQ {AzJxSz% Ds;?yG&^i,ڮe:IP[U*WaVGXؾN?άO><DjoM' snwUuplh.>.gY&WM>R84U׳+lPrM"3 ?K](śn{b55@nA.1A$L<ce[k9KWz oJ~2
+@@<ˊK(J2 &
+Y
+5Igc!h<mw?7yۖ,o>V%V b;3Ƕ] e˫W
+uڷhAqA9x[9b]JEDƛKXߟsn
+'utwW
+9޳`439g9=aFe/ETm{m;s(nk::JJT[^^4cIXZsOLc s$\/ n(>jqqYw
+]vzWn0p$$D)sDŽoϷަaj_pg'~lrN%>P2nE5o'x-J=+{;1U+
+a+r%w
+k{/beOʉb|m7`M;`,^UPũ? X, <헎\q͒29%<Cq{Z ޕJɔ\ɖ2|O  ϼ'?t 7T̳YC)6u rSa=,i1Su;jKh}\g6D٘*<3K:+Ge?;9SR(cT~xOiz]
+9+,JFmS qUJrfq%`(p"+Of /eNr7Z>al;ͽF6tlw3h@hL9ñM~3*X[/*Ĭ
+^_
+
+
+<W@N+CB3 nq}8C'LfV^ۍ'7' R[?n6j^P\S$4_u6;n
+0"=@SVrx.낍U y )V.}=}
+PХj{2
+-6nRZaXg׆1v:ϡȠ&zD69Y*䷝NOɶ&3I6Vˬr*P(
+"R;s{sZc@am`ϯp}6cksݟJg64jĵȭi[U<Nrc<L>eQ,uqEH
+bM<]c@^;M)KJ%
+)5ڨ.v[OL)*'$K~oZL)8\<FuW
+C6p| RAÓǭ7
+*yYD_x3;%XAaAW2i.DI6׵TX&1f!IFr%oiU5 (eeP @FWLVu6\[,dlx/phw\7[kvH)]z3_| EK6z}Soo7^F}Z:^o35ﵰ>MWͬ{rzJ0_.e]a}Y-yZVn?p@~KeX+ҽhfnQ[-vחA?1]SPOotJ"qu ?(~|y^ۻm޿ߩzkT,v&,RKZqr_jڲ³3<f&' cђM;xJfJ=A7JFډpN=x_3
+d|O: %!Ά~YCueJ3p4f995VH1X?ob¶ȁRPl􃲧IkZ+b^yz([b jU~|m"k"cHi@҂r B5*yjTs??xVL#)Ltr6:E(vHʳG Z~mF]hKQheuJLݗ3;!,/u\m ^G仃0W&.Q^erI-N%g&v.b*wl93G4O Y5E2sV6 ?o8QzX_,rqѡBP@vb (4+
+@ uHa
+]Pc 8~o~ `)
+=3vuj
++ٽB*lC5b|+L
+
+]
++eFx`D
+7 j$B@.m rz
+$8ㄹ0!ϒ&WWK2+N;=6Ʋ{qޯT+
+ (<M9uF)ӂ>*)n#)SsM<dx\R4,`j6Qh:p)k}|PWj܂ yQBە)m
+ɷj[n=%a|qqR h hfwJ}C{k`g=/!<7^hvwf<+:Qβr=j:W 0d^(TjC>Tut5;Rė׾Ϸ|X*}OTZY2MbVܽSRJsK7ıshgsʟ}Kyl6_D+XӿR2
+N@ QLp 2#C Ԩ ?fuy+cq>=*2Όv2֓"\omtak"Evޅ~&QqtE*6C!Ú9K45~~e~&] l*N.T) +3[tVt%JKw<{'ۦ۴)1Dg)C;lakhXZ]IkAԾo5 ;`@?U1:i_SϤ\& Q8UPwUKe+(sY4:Lݭuxx7F2-ܱVwZv} WoN%??
+H2
+Ť>+mc,KuCWnwo8^]<Vk 3VRkLS@46ٞܶԟ
+hm'WYhɻ;#í#]'9O{_w[_v4*N,;UlRK}˻ 1ƒTEiÆL%Eʽ8a=쌯ӜR~U^<%״%ȳTU#YDHCWԯH<+X[F~(yKɨ0eu R=-xI^sO*m0(O5S%O"U68Ϊy?UArKLUgbzvRzvN) HKa*Tgli-H[*L\d\}I"6]ٍkzV'||Xi/ׅRZsiٿa 8X_n:2loHT1yͰܻGK {.Q.;\.74; 58pZ۪}[L2x|EHPPsx/j' Dj i&?MRGiv'͎d]Cm;bbTnPŤ$Nwj%Vnشl~eB3(00C_"byF%!լK
+GhsR]B[e^ͦki|J/Y[\ n)siEz2
+÷]
+)g-10m 3TuJ~nBS&%v%3UX/ޯ{ dО~c6|jysYbaՏ.;,Za*Z.lU4O'GJotS)q[^evY voEX>>>W=VKg_CSմC.fOmT#7H<~P]b\
+0O* yC??
+
+
+0_PQ
+kBDX,4 !% ҫCQme-[Ѳ?D Vqf)~'TM^]+0`sOUX1
+Lwxj{ɖ0;=վ]49vY\j`3T(v6c~{c̪
+KS a?#(uwH:9 pbrL<lrI
+Y7ݹipU'?VGfw?h}l;g|ӛs+BXcu6hGzԾzQںoo-u_әYs@1noC7>yiyJJaXG]{~s9+v="uPX"ǁӥs\`V5NSMN3N
+<k rjy8
+eV5;Dٸ;?{G'q̨K5'/Z _h#aS>>RHճPdauLΥpS2:ٗu2g<?ەOTlkb93l<KHg>Z{7V~KW="ti†j<PvVťKnA6q= "C
+]+mo}\xAf 1 mպür!`I||U,f;zg(giMgm/]Aȫrޝs
+x*ʇ:҂E;9տ?P
+WWFĥ#R%F=Ӝ2Tw몙,j'baNun|xM},S?w$+TM'\+kxjۘ*Zj}{_ǹsO+;@:O7nחr6lz8Dm׀+u$k9fԫe} CvhieQekIL R;hy6pA%Jnrn5cӡr|F@ғ>+{ۉ FY:Y]]2ٜŘL=fjUM>/=KZj)uGbPcmv/<qayq&k1ǽ&JNM8HJH{^?
+/.ܩ~}WʙMԼk5nR7M^ yZQ=ȉb6D fFzpz?7sSY,٭&-cy;&炙ΎT Wh/-ڜDӟ8R}QA׮TK.ˋAyUn> X})tyOdnFv+)1>S^" bq|MwzLiáPzgvAS-*6OEEKCF?+.Cl7'{kk&jKbޝ+3I?A9!W=Hfn;YOH'u0{xfOcFޣY/:9ω>R%ogyh?N7ȑiLz.*VmTeyR/S~vXRnܮEՂ1;טԺwz7\˺!j|dd҇G.?A^ȓ宙"5q[k Uz4.LRkTH뢲ֆiaW5W:j:3O{p?Tf7 cL\JۤKֽXqXҝuZ`^=`"(* !
+?>3: 55a*.*﹝:Z_bn?/֍r븻]=-)u
+u_XQf
+WI|(snagمÑi*`&߲:E !f1m [ocCh]WwsӭX.(}KQSW&T0? j X6-s ՟X,l:c/^&fL
+&$D2A/#k?"TFͣQNv lKRvi3RzF0iv#E69י(ܤeڤz#զV.'G1
+c e]"D< yx
+9Nm9~_
+ 7?g]
+d~d=ɸk'mHRs]E` raya$@N
+ Xƀ{@_\{
+߼82Hk^<ϫM0sh=emKPՁ5=gk-
+I<8- X} R'AhζMld!%zz#ĞxOOvQεshvFsnֻ[a>6<ck!Vk---wrqe/?u#i%s* ԺUAj6AڎG5vM]IR>%v(.*K bn#5]tnժK9_p bc;N5r1>L[Nߛ_~Xvʀ|!5X7˨}<)Z7g=_Gp ԎGܦ{7jD/3m̋ڵ*ݬϬR 6Ӗ28N\v&n_GsP'[,XW|C8zO~wt{)ed,3DJV)t/,&ͯEK?2M`kk4%FHx-웓mcG~E=81ۍ/kGſ
+!L|ra}&t4'ϨǾ]zIyvBDntki)Sq<nǺn^zlFz5.XzU j
+ _b
+lNgQbOX_{׋c$1CL(ݣXƩittsn;k^wXU}g'b*&0RxJ8-O|Td-8̑ҟQh͘sZjtV
+܋D`.d" ""Tr#Bmxђ(dU
+>/
+mnN-GBk%Guwi{VrmekYF0~6 %$30Bg]β(JYIsK7Y)&./y󔻖~C9>/fWØ1Dtj?7F&+,_X.×m{/aUZ_
+/eepjfQamXm~d
+t</Œ1gRJ鶾яf\*S9%XGQÍ5ZEy)(w~>Ha{
+> 'g׃EO$B8agnz3mYK.Vxf-ƧE.O͡0x)1\ ͌!` bSWv} ɬL5 rk?>~ey$3[FgGNk}ka% !ה|uc ӣiI:,TS;^>>Hgo~{P-J!l EѶ09!$>]r O3ri蕕se<Y{+qt|L
+V=rCh<gՏ+7;Y)fP2SSSSPu ݞW_Zuh
+"9۽~ɅNX$r-n᭏Z,Ht*JWswf-U~b7$bMp޺.z?E]pudWvZ̷?Έ{5d\Qur MM3e`WݛK:*y8L}HQ:<pNQ mIP87&{Ԙ̟dt [B{f Z7簊) |nQXv:/\K#=z=nl]X2e{nbvJNW+óPSlwU(^&N.0|U_Cnf=/_+&N`/E[?̫v׃-uRhrT_=qkFNZpKxk "hA(>êPQ %ڶTZخn5O5wfm_\>}Ye:]|}aG]ej=;
+ZےjW?7u.ezl+})WMb5Yfb~r}m;ؔoh9Ъ7ntOS;^k3H3C!cu*j~,JxtkP@`Zj/U}^N0cϺaȸTS5L鵝KsM\3]Ө^v[("X`7Q`$b^JazFv=Sj;hEodlLDT9j騥W]5V{V ]~6y\R`YL>Ȥ`cߠ͇>,T}WmX{x_?s?`7sZt<5;7o-dPoN5O\z$/*T8tB3UB6_*iqPKʢwh}x-/VpA=vD5%wN\M@{B`՛ڶՖpԫߦo5ƭ2_$ŒH)֞g=?3IwK0T~&SlՕľ̺:dw&V'uXn0s
+q2ս8TYa֍Ъ3lg^Hv[CxĸVstǖ Q*~EI]:\V29>
+~@TGaSA2]TŐ#=-Lz<ů^'eSk [렡3R+Z6"׺z_a__8A5oݜ5zYd"e0NxD'%baZr 5F!oшPͶ
+QEzQFB_hkg{a4RW֜mGAT/gl2mƧɨʑ6M6
+(DDmHY7k{`4XG .m
+b!K%ka Q䝄0$nskyooL_҅&b rPP
+:G{'L8'}t?\atz~z sɒw!6KX+
+GNQgo+,6:]כj]J+T#.~X "&
+mݜ4}6 & Rz*N|KMAM]ª(w/}aTS
+]
+_`BKfzK-PE[
+Vm~]3:-0?qWMw7<lD<Խn_֞:l-u;=(7}Ne<2lSv^;ͪ&vD5;Hxhђ1
+?LrHIa7䴿ͪWKd><6#U:mtuE^"HgSIn1fnʾ%DDDL_fdr&TapWaƳߑh󅦲YRsyl|`<}Xͭ_˜5=ɨ^Ǖ5LXBMZ`Z֔76(WbR=5b$Ч(]ƕn޽Q)u#uczȖ 6b*)iggսJKϹb97٤߇Mp(i@8k_޽t+K$ϓnv(.U(zsT¨]96*usq ϸX\læxI2Pj < 2?ğ_ptSwfݵ'5#g`:ڝ{~)\<v Ԏ<^x^Rl4"X S2ʹ-ߠsM,5va\qQE9
+Np:~
+ErUJ"`׻s]<-SYc6ML,<&3loߒ/Sʪy.$hƭ%!Iq\]uʋUG,[hȢrFm%9դ|>dzg*tOq],s,&29R`s$e_}͋Z NoD}U
+οJGTFLf5=+]UFeXQG|)RT~J$S|=tq>Ȧ~Nq6ؽyuJ<(omtt]ؠ3ɕZMmobj]Zȯ'>k?2x {r- 8,=ʢ7~QR"Yffz$ R􎚐tۑl0/8 [|Ͻ_Sw?Upp)gXsXLr왟pG yUU6/)Xa-hq sETs8u۴#u:;c*1 F?DJs#UEjD`=ҙ[ޏtRމi<EBMX<Sgv^>?#8\JmKeBpmvE72OZQv9#*ZW{gL π)R,!x%HFXFX^!l3ݦ=3[Uʎщ@ҫxai3ՊE(X=^E\o'VNﶙ4<eD<Ho;TWT/uId|#\V!A $'bֆq~klvH^/o̱SKe"zC4%m^RF*2jz7-hS`"m!v_/gQ/
+&$o,̾<3b3")_L&e|=05UZoeaؘ.7B)ɩ9tܾg3B\"d¤2q\&U"ؠM#/Wg
+"Tb![C7DrߩGjwzZr$c#豙굵Qc91[F4Q|^̾&N6MdHlcKy,<sPLhȢ8GaֺLGx 'JjgZ;-"G9\s}>ă{3y$ > p^t&\=$ ='@L "
+13,ل,hLO@;C4K^~_+"
+:|l
+w$P3)BSSTd
+yn bOl壠falm6> {?6B_ @9װ HT$
+*4ÈwNmO 5w7svks]EMW-A;K.U $ًL ؈Xcw(= !PwEDYEWQW]i}3s?Ft@KÖ9dQO·6|mx)djT*ˤcEE3NNoo :3/M~=̧[ {^8xޟ,vn&Eo_b|s[4n-&(~ث-@y{ڢy$G<Ezo7'4Rմ{S g~|_ʉx
+3ޠ CXft|1+,v,A6s1ar|,͛9m3ݑXU  RٺpIdr;Va)_^
+LGw9Vnn2 {Ŷ9܊zž GC6/NP// [\s_n_ug)[d8<^<swr <
+ae^/a1Z"-sZB{r$ʊ)[ܣ@8U:P@{{I0%h|{I H| ~D̒3bۘuU}g)mN-ϥ:c d[hg~7mnJ%uFP9$Rxᔾ z{Kv3+ Q.\v/9I8.xrS G߇&uMtц=8moZui{hetI |X@fE&&jZȥw2;!8+{θwsґ,%cFit"}KVrs/{G+4I,P5&>,=+3;=ˈ#U.BwKOCǞ\5D%`˜3z4_Qnh綦Mw0w0ܘ}t,w-<A8(/} 2G2t)b1(8q1}}XM[&?cV܊}"SnRyf$AI4+ҕ'2 \V$]pt 5[V
+98aNjhcT[iٓnn }l&_ЦkoFܲIn1ƑfiLKT[h5.1'B@,ᔐpaj̽[g!i ~X`>s;Du6,.O<7 nEz1ﬖݚTgT쐔Wntznl뀯 .CE,R\ҧ7q V •OLΙكS y뽪2rEWjY]0']zVUQDd,LhTb~cDޘۘudJ˲Jtg9c.F-;u1>ٙ+*R*' -34GMY2:t eg<ڥsֵ2A߼l'dRWrUῥS Fi}#uhhG$O6{p렟LQ7wκDֲj l6A&&!@jOC5Zo'jZWk76Vx ~lbڟo &$3*y,Ciyh;lQ)0v tf֦\_<
+::oFqƷVfZuV敫lk;l%uƎ[ؖF;& #!^ \CS6©ij-ՑIܩю6˙vNʭe _R|}@J4lq"§\>0B7B6Y(۝A`ADJ>1pӽ?Wg˯J|]]1*_4t/mW˳DPʽ5Od.VdYoצBe4mx1mL6Źyϙ+C9*{a";;,[`Wzt8+'$6oi՗=~h`54RHmr3D${˗q֗f۹fQV -݀ƃG-w~vJ8~iCR)>aKmtm &^ruـro-gދIjGH汛!:
+`JQ!]Iz @QMؑrw]dqXU~_Ti%
+h ^s6p$yd3y>%y#.y:7lɻ&
+7d(lSKA󻶩o^H6s"TZ].@Grk/ſ+q&|}'~ p$|fyY̿Eμr.Q YKߚ]: Mޞyʊ|_1??;A|?M3_ ~L3fwHBNq,arOt?hR/Ot!/$473Jj'ɻS?7XZN/83&̈́(\[?6I+ڀoUsy S42JcL:Ai3=mn|?vli;"Қf,,N2},z_B;W m\5)=D}I2͚>.4^ϸ!v-FV/K v"x7ʛI0?d_?n<t?~*Rb]ы:+4x{vIܻ9j Fbf)<uWi9N֦93C+}aIq#B`*^n*/ p:ch6. O鸛OdFB8\N~2ݓW_
+z/뙏d]d OjrY揎SMNGo_qrz*]<8v4w#{!o2 + ⷳOL
+٤\
+ѫ 17U^1Ǯ=-[9}(>CYyسa; i @inWJ6^Qd|?Z]SnUA|x ~} G5QVΫwIAk:z7z*.Շ.\slx=6b47skWN[8 y'Ck/>SأxZOR^x <}~3ّAyč[qVu=b:냥үYq%/kc5/}Y!qޒc8^PM=* $qav_)
+xLv(cMvwHvo4 K┧+X唩sr<O[N~9/hi{hN֔kW5:7q&5Mu+h SVp7͞)i'JamU:{oxsP"cK{eF7v yS6"y㴀¦ij/X 3צV>A [muZS#1_]pbq zh2/wW-o|g4f(5%bRJ65@?pO7՛J0C/v7W̠ho/9:p5YIQu~\zIq*c9]zS_ѹ#:h"NxDGӰT&tD;ݭa?Yi;oOvz|E,]_~]ň8V zO-'<K=1֨O]'~'rwNnl54h)I9
+3@dj!\!:׾|R5^eO;
+DkDDC_CW0cxU%:f"ÜVhʹZ}%HZ*
+\~[(d(rqz
+ygus(>Uɻg<wO@*ʽ`C]VPÛV6?.ίltʉqzߔnDh/e $9''1A.Sa+_3EnZ^֝徣D giБSez$,:znw@:'+z-fkefQNW b/Rȕ
+=z hNg;ܐ8Y[}f>(4˒LZ8 /m
+ܿyc cG>z ,fKew;<-3o/=*@vOª9ĸX݂rVKڭ-[.ĉTX`3o*Drո7&8P]ǷI,v Η.\nOQpa/I웸{#>+քp:SՏUNnZRyd"KrtEIᆨGuc,'i{=N7}?\~.u grltfgÔϟ2S4F)v4F
+Z̼MhHB\ҡjyoo7ãF'e!׎%=huziKŜ.}ClmQm4O5!GYEόEñbHGH{B[jo'
+R7?xȼp MS^jfRy˯ՈܞQ}N^::y,N5b<f01.17*X_@x;k74R zM. AݴTx 6B:jSʳ X^w%n$ {-ؘ)mJvұJoyU:A#:,zP:Е3&f۳\mψ܁w?Đ 8̫aw}t,{K{Hfn[OZw%*bT.›O$ڷ%11Ct^Yȷዀ&->ZJ)OȒ[l(Rk"yQftP}p) Â4mw*𨐊|-2TKf/HuJ]w9x,IҎHәٙ.}6np?_[qgHk6(KsЫQIWl6-MkE .s1At ?Զ9dvC̜UDgrql (K .2΂k,C,Lphs:Zi2ӠU#'{dz[R=h|=6J3Y]׭ǐMn+u,
+y ы>v#!Nk6GK&(4VR#$)Lݙs-RK\JO*몸HjjMͰثl[:5.hXAf I))Po2wmqZa5Lid!U]WJpUzHji<%*[ѯh¬T7|P3r KIY>.U7狣sWE |w_/H٦ó=;D+]edqyt|5؂V-]h-NPP0],`$1+u,O|߮0Q6!<|o~Ŗa:.! Z$Rw,Ώ̡jqfa*C;E3gf3v!gf1nj9ոC.B@pnoxbyei_a3&FlFo+zj,9@8?a9se'8/у:=: DC"
+D3"LL4{_sGK5/o
+lkoq1P;֨{Sߏh+h1Y;
+1[{(o+IKMV;7I`yKl=6
+E=vzO9]kIxIL!!&a<ؤ@0Ъ+OwXu
+V
+u-ײ 4cGF޽o85./ۉ86_!ZP's~(*ٹg§7Nӂ>9vK;4=((U 1&yr㭱E
+͞z
+9gYnw _㪜6-Z/J.nb4rm{ZiQ;e>Jzg<|SYoS<Eםڙ%z¨tkP"dVi X_gm
+\:92Ɩw|ozEsoYl
+rErAkQwK=
+FoD( NpH{ݝzys޷"},q#H3,7zZhvt;뜱)/5lB!Zc?Dn]OuhC;J3
+-#,~P} L'cOr&&:mEl ׌hg ~J>N??>z'n}dl?aK`Ei|{eꞇ=qxMy3Iع5-Rl?M挃lmݮ%JIWh%9gy\]v6<2b_!'oj1 aF6lAa2-rLr#ZqtLuzAlU(\ٹ5a
+כJ2/M#1^|,9~! %=Bp~ÅyPV<Ai4M:/q#}t4r}̩ En &/Ë6=!9X{[, Zw1]NMvcvqW
+afm.[`4 k0
+c7[sԠ'm$z8E1WP4'Vj=uzsn
+XMϝA\[fU@2r)1m1ݣĔx/;$w(:7y{"Q {vp֓V=OfrgO^~WqG̪|kny&@2=gf vMbtHkSCACFhQ̀ tÙCqxiZ }m9/k WQ3\ɅPl!׷#yRY Yh&;Hrْ&u0(8f*ORۻS&-.W [U
+-\s45+CiUQr3kXyJc蓗O4ȥ>աq6ͱZN쨵4TF.Z]Fu#?LTytߓe҆ƾܬxtާPڰʭ6%{m/aナv^c°܂RSgص6PwZk 5+abWǭ(HwS)/iYt!#VP:2Pt,ʡC|g}95 `Ņ33*U<Ï+ݙUq6Jd<6b2 r}1N}RԼu8{G\&_lFB@O@6܊gw"uml4&Bo_!6F]rqXXrǃAf_+B}S[Y>vr}p118(3X[X @(pnМ\ .fk
+;>>M!|o+`CxҒ
+ֵ(Wӄ SSLJ/.Ϲ>4A Qy
+t}{تFm#ݷ7ԶzIy_^V_TTMUfKJ I7u.[ۯӧc/~
+ӳ+w5~uB!'Xa#%+AN9Q~rYFckKW+Gav]D㹸]:Ђ 9mbcVtAwdnb$9B J:E\Z5G)ӏ;g2Nw
++ \#=夶K>j sny*x[TpEѰd¤ c䨿>d&x-]*)=?Pn`Vƽ/̥VEuMnM;y4V;š~2@T8ȃ:VMJK{؏Tjb]"tU{-_č&4m+'.{mqՖ0 v5V
+⪷Sއ};s,u"%n,x2|$_*]G+.x1gJW܎tLzݱم,<MK`= 15m8Ppf= Wr?y}}Xtd޵i<ftɹowDdsnNdܶl\Z([&Q-t𘩟M8eEnOb1:!+p3D~/\^w3΄ż[:1nV;ݷ4?e":}mU6{mTgS5X}"[s5nQl/Y^RrVwخDZJL.}<`m}}.$+qg]꬟:v߯mgd|5{ykvK[ZKEslZ8z6qEQoZ Z*9=
+`羸+Ť,$ }5U {:gz<rکߐ{[p"%fy Ne,ݸ{=}X:Z_*n& S[Mͯƺz4Z,6GQܟJOi#WMy{'W wٷ{#hۙit]@.ɪol_rT/44ʷ4ϻ˴8&x+9U}YWꢠ2R7F42
+YMNlBXfSd2ĥ7Q'YV~`2[6i16Nېkܤ.Zάɮ9NSQȘx|XiWLTl.|#oK=mT+L 'tQ^6KTCK]=/,%s
+#*2Tc2qG2κn%{XcۓUu:^wrۥiI:H$3RxCl?/E]c@/úd|O^ܩLTX2Bv5O͂WW~2n POF\9G/V)֫j{UUi>Cb*bnЄfN0E\0G˙DMZ wz4rb7G먱CM/uN)¨\U P.W;KC68B1OUKVE 㭑X[XVC>`jY]~bl[U ihChx:ThͼH) !Xu7E
+Z W[|TJ ʬ6qf4c]A%+G@Et+!U5яz$<K%,k]m`t;7֟"Oh*38#.tI,X)e_1Ys(]o?0?(yE\%E#  OgR`8@ i+E8^>r6p
+~k27iTr<:¬anR˅zB!f
+$
+F By~{>F]9/p)P.UJb`:yS747_
++7lVXw0(˫[gaJwU7?;&<dV(aOʸŌ R<0ٲhb}sl+0,
+ux#]LmnScsuWϑ0{l}KeR6Ko Kw,m/ؼRJKSnW!jLٸqM5Tc̷}6{ԏNZyhB1Kn|;?p27g+ =#߆( DV4 e8ldX%Vz5p4vD9
+[n1߸
+S~my> .p4жSvݲ mT]!9bܫ8__ť@ZAJcAm,`Ӟd[{O/TcjtXWtuzs}SQMuXNJnB^_I'XcM,{߻ӂO>Hg. Lkb?W}=}@|h݃a?p)|lG#U6:\Q{n"^]
+ISXcv\{iM9Y6YT!,ctǟƗY5ۿ3?/rv|b=86m::JuvC`j2WЍ iW:G^IFnA5("=Lj*w!f !V|yw88|]Y,uUBƉ륭#۹5_,S9 ;s-,ʦmdAf4L=m*6%Ru#T5hegZrUtmLzkQlޱPJ(9M3Qm*7:O*'tF`|0t0$tt|tv_#FN [#'}#3f)U^'X4}x)cUy?:ZB+%{ggt;M&"KyLIK4=UNa
+ZerVC
+vTljv-c
+d'<(o6KKI
+SGzQ' O,SM(8OTiL݁(QM&~1uRb8Og{m~ͅ1.?2$E(}\G=ϑ6ck
+E>=ݐ݆
+h6TMD,}@fѫޢv'vn)} Nd׶ʮ`|1#{2:'%]>ͺjI
+Wԥ}o_fP(ПujZB
+"9M8ʸ&}`*3}6vн~WGB%;GvsGkqRJ@ {@v
+cmʕ)I{YT
+kC峧YdO*Wd F\v2ZycLY$ZsXThWxj42f|1|,52H*EDȞOz6fgJi7N2\U~!OhUDQ=uxCpjbHXE`n]+\+8-5l͓ U&w:]UliαЂ1fNB'S1_8 ōz 5
+>
+6#@Ddm-TDI]CY,lmPоEu೽L`
+Mp
+v$9Yhp48!Փi*|N
+e th)yy
+li.LG9|{ͨo{M/ ?n.=h`"?n߇}S rw%D~&XwX<sϏVU _:m_J;XX$8ȄT,,Kcy ꠧs#_E+_|EFXv?<u3bFoBt} 'O]}naSuE~a5x| |_E*Ŕ۩[8H/qfO m^^o9g_˞lp1/|^3>~NZ=QQwȮA w,QMwʃAb;ί?Y'3<{ <~6/
+ggr?:DMk8?!(@rf;'nS\[PrsERF:-}[ ~*qlONbh7ukg/[RxPc=vS uy(.\\܌h`wqTp1F>hAg 'sYUoFlkRޑ*J߭F8o3y[\s}-caq<(hLٔYg`OW]'4`UdR^ASoNJ oa~tu}'
+ _g?a\Jξ5Ltc䤦;],uerSin'z:=>h6+ɊoxsPv^Rwz <dc@~:j˝M7ZY/Pkm g؜=7;|o| ๋|ؾQd
+:c"7a<+9
+[k;5[tkwV0>Zs#3㰭+qK6-Ԗfٯm~ցeP-/QԆUWfwQ'k-= :w䮝=;;k)+kBνZ4*}n/UÖ3Z}ތ+wtngֆ~\QrkM&HM:ɕ<0YP۔^˺+ݣY`۬tn3wE٬;U+l3f`7oZsU\0&kW-<ČnKҞ$$̟5sSgǞf)|XܔeC뱋?>WבVpRۼm*:0.g捲5`؜nVr/ظ2`hUϯ6bXKEB3Te LAHUqr\xnJPdjJ*x!ַdeQ;M?8L^x(<
+Xվ͉BǫZ7?Vno
+dҸ/ձ5C*.VkhaԘܥSw3*3RCubf, q;,Qq5PO[=q\*
+*zYK
+;noѓ5V&cj)S Ni5ZT,/h!~[N5f=)<C Bhl/fUXPYLpn_\eII&KsyW'_g\T1/-ݍ2!BTuayDurjaS*uJʚ',v L@ˆ7/S'{zje"wa [Z z/h$%dDۃVZ;*gtMmja56\T2S7-F 4'H#yje!Rc9=+]c3#ŰB5z;O}oMN9&9;&<&w/ΩѬQZ]XXQ;M KNU!9i2MژsX@' _ߊ#țJ2K'焹ũ̚&ډpE}Y:1߯;D _]
+v=_X
+sVsԥrn9Kr<>N ߸؍R(;6mZ9+Քxg34-#YJ)|c8B
+ȯ0/!bn7Q9[+
+5ɺsgI[e..@"߱.ۏ5_%2mH_ݭ¿nB 'CWj)~k}[r:%Ftwh4Cw4[^r{>d|oED9r1G.d6<8,P!0:c#0|NV 
+A;=Sg@ T_.^V2*ؑg`=T7
+p<|%k??a>O^~X:d ;1qS)<5::mXۤ\_Ֆ E#7xN@H@h @ly ~3{36
+W-IЭY]YՅ[ή7.[n៼T}td ^crs:c.u9|+yg-U^RIi;>.Ǣ1kgG 1_Ck.:#z}1/{p:tT~(|;'qnby@cmnk`k̦8)j147]B~?CtNg&X;0:;=nD]*/n m0޾ph/z磥 v8E <a>\ɣrNCrbe"n|"io"e䕗ڈ:d/= ka, Am7ޟ6HW\{[+su|/c jֵT,sɶ7>pt6>);4HTΔ4u4Zi;8_}C=ѽ`ɍ˥ 'V&_$_n'w-YmjӼ"rmuzG^}Gj7rڪ5Zn^<];vh^@\C9r
+W뽊ְ&l^椿~ӵ
+_zյUm@^`?bUOuʷ=*P
+T?Qs
+e6 奷?ݹ
+zӹa9 &S.r>:[#B,fMw{LF4xdRk#|Z14FhCݞn{sDUH%esv/,ɫN[?p>TʹUQ~N%\C%(ԇtf2holf|1wWr*N@ CΨ6e]m_8z hC;7V6\6wfL\qW.Չ+`gFC`ɳY4k7U<K'mg_Z <芊*۾r)e=LD^Xk%i":|BCmөPׇB
+
+(_h*t:G(Zhɹ&{U:'}'k]23dW/C c9Oj:C-g}YY+T}vͅ$˱#aNIf]b.Eis#.}5f0 @r\dI}bj0[!S.';݂Ť*j_L\]pHdMp,N_l! {/tXz↡”6J%2h7Hy3IX:Ea?oXg ^yA~9B]9y4r0:2q Vb,?~^t
+4
+1V f^g-=Yi3Л5o19^EoH?V%KxFҔ^0s]LV4Ȗw Cq~BȂLrNέkEAldYѻϢQQ[#1DQs<cd )x.`ض9؉2<qه?g1hN',p)0m)zm``ߧŢܹ>VaK&23)}&hw$5Y
+#%
+@3LU6dztD}\gS@ bQt1qmm@uzٕ'
+mhĊNZwwA<󌟌V_ȩ?*G597FP}`f0s
+\ΕUyhpf8nI.G)KhEZbi[/üCcRye`#H%x>A udg鉌+Ƹ^Y xֽ
+)ʼnQ(u(js
+
+Hߵ8/_WA[5B.|r|xjVK\wS~e\ǫCV}+~v]-#_܂yޏyG3O3DSt,%>'b= .3!W?o=jp0'_/Kxqoo˶x!Y5&v٧gP{lOKqux[vr1_gFaҩ [?7ޟQoTuxn{{V!Z}4O[Iz,id13>G:Èe1yH}#7Wfnnb.:%[_\Ɏr$j(?Ɠl6d\ 1n䧉r Q[vZ?Fәv{s7z`.gS'68~vHP`Q9V${hxXLm}THZZRq)wti7qPO0 +gLCu.tVTooˤB2#hE7ocTFƢab|TwΣGsἂ
+OŪzR%Ϗ^%TJ
+p@kn gsGS#tVBpbunoY51hIuZ7L%lՅzN+{ꍧU*w8V,7.VV0T˱gv~Zs~)v< yE}Vذ޷OSWd#5޸|n 9ODA:lAbA&M78rМk:+w2)=C͓o]o?NY
+3s -+k- CX0~a,Jz+B靿wskƵ_S)_gCX !u8}}3W+.~8mO6x3[Y][a+=y~e֜s;㙳okhz}QuD4|WT]2rL͖9#ry/&I z/Jx-e7lnc7l<eDѾ0zyd 9< ۄ{ł m?qw/7L 7bqa.NIiZjƶ+稡 ?+&!ŹLiFѾmZ? 5hor9[0cz%Sk%} Ґt¾ƽ?X!W'd[XRᱬ@ޮT+#uP(%ҫ4n[?Ww
+ZHlMG=aImhT%^GzHFz8NcIt'/|LI%v܄.[9\ z*kY-{GLt>-ӶDMSu(NRERPWjI/0U~dK
+Ӭd
+b![5sBQ3>v"W\dh=ѪrpfT=-'jc=X)e}To|iX,B.mAz4P.y 8妘υaZIB
+r
+v~/Uۧ#rt?Dഷd k]fgfkL:ӡz=p>eAԽJsRA01_$h-IkP˃_ 4<Q \e5?{B~0'0c4o4c9AS9Fڻ
+[*)j2tK[}=f.\/?+S,eL"wJqQ(+Oa r<}pܦF\}jl^D,g'L t'0Eۖ^3A^cORRRfޤE-usU4}Qns4Vs11jL~d]ٶrP$ћrr1,f eRbLdɠoQ;|zZ>Շxޛe_ PҘp.F$(aJ`0IqJ kL]=c埭WV[<uz ˓%5b.a"220twFsPL)
+9FiuA$sCdsyn~s9D#pJ xl |5ڧz_mǠ5}{uBLmտEwd;]0_5)stI甌HuSXi+al.wڲ:B5"lmձg1tXVD&6.El5+,4i2'U)wbՕi% b\jO{1rpfıN
+&Ir.!Vx&.{rl ^8zm<W
+=#;D=RTغkDۓtD?hsGrc#yHftى^ov̄QOY3&™,gʢcb\ Ӗ)<R0l?a
+JLY<~Zug`4 dWX'OTBj z%3 *hC\|F󕠶d)윑}V]vV&@ wB @RJ
+vGjo:)u@S@W
+;9}&HfC3]
+xq|Io}6y
+,E~A,ti>QBBtK'+z|@A
+7?kw1- P;h7
+s!rYz_mD% &sWHk~ڇb:}d76
+^ ˇJ&e?'2rMz4x<fg33JDVa)r#:/]ge?y[*bAa:6 Xf#XqﮏK[2_Kt=y9a#FW/lNy󰦵n!MGzh8-wt_nQYљfszӖޅRk#Ɖn[˥g/o<waZΩYڝj9;k*|?Ų9d]L /xv ΒVeV9I1QGТ"6L=n5_{#q@:R,(v ,EB:HfҚ߄a@WԲX[Y-9q6y__ovׯL[X[.\w~|H{-ے:ؚݭ筒LY ;.ҍFF}mDz54*~ufTvX+G(M:(~֖0[J9JI_jvE.H-4/EL%F6ݦ}
+M[kVz9M13^p?L-eU=%@*Wk\]4"ZKnObJzd!K.6]I/_MOt{\ "P+]D?{լ̋`d?Kl^. ?Q𹡾:T4{UkR%*-+bڏk%וzA$qCSΉ6X-FI!/_2lBm9yr-)8vry\ڏ9c7D꓊^Dn([4J+hr6eUsCRod9! n^T_|[e0%"'n0HunXEoKM-=74QїSMZk݉<ɝf!] U26?jZÈ#G$ 6-.5yZUM>qiHPX~aò!zܰ}w05?Tq@䯞l&:+UokL LVg,EgQ8܈u)x ٬K~9bqQ]cAi}0$1wh٨r0<ѸNc!7d+6,s>'k۹Q"ݭʚJ4!|:B%G5hйre'\fk+3Gn3MZ/G暺@6O- <IRe~K(U`@͗oܽLFڲ2BљKw |Cn]83ﱻ-a9Z1=duΈF^чcP}DM܂( w?7A;>P(M&Ii wd(9ᱣ0X,/5=Pԣ-  lmEL.kA heٟQaKdBBXDA%\
+dWn&rA|"M/0Wxm^?hZA*%e*>·+Y7maOT[e&G2uKKrChsmn_sC*i&U
+0[Y~XF,4Bzzf2˻!7 0?j1{žfa =Ε4/KhϢ
+}>e y/
+TJu,˯g첍pABdM<(!w!GGcW &hC!Q ʙ\90v\)0 ^ouFy̾JD2iugwmPz
+%F5kDtnw_ Dy 䱐N;^7ff:3R~ŜbPLiV||'f-=t[ ^HOaνmO*1%e|(GEAwr@$밑u6q`9lY'@f@B) ' #
+ / _q
+=cv|`1 Jdv
+=+KӬ&u Gw ͳ_^'p
+|'U В_zWJ^8!ȸ 
+0zoUZϫS7>3~mkuȜgy>~V}p{wwm7:^W2.[=`/H :~CZW''0
+W*eO#P)V<u%ؕlpp3?*j.'i䲳C-C+-?߯uu B?j1Tt;έW5-SqGu.L-v ۹t9lʯifg/X%?ci+ WC#\C >jÞ]|Ocy?=zk⊟zV3٧ {3
+i.hý 9M!.F;]Fܑ"Ċ:?{W_eD=~cv mv~?՛iύݾ?OԽ]7Iu=M>f_?[}DާۗW^׃x^_N@?H{>>퐛(m<F6cXu"}:oކ鿸&x]})= ʘaD́z~_T{N;Af+6}9﬊u\5퐪CvS:zPKM-rMh꟤٬WRwQKȨy4߬{;_  9?+~Q#xdےIM D &[F?߼c>F7Q]w[ɨaw/*!wp2\ٶJ#8t ha&r/) &kW|Ӏ萹A"~5ciwl>Z.D\uUyUr+!+)6=%*K_BR.u8
+Rt\I!iOtX+.ft^</uƠ α<kVKڭ^8/GՀʶ.CK;#AJALIL&<QN.1ʧ\@x %F6o<)ԜC⟜4ǵChwvh)ã6c*]썃/ͰY:f?ǹa3͊/o Id Y{x]r\7k >8GN+9wܲ/al)`k|E93LK]0Эh yزxFʹ,Wja2
+sȭhE~Voi
+^)gVJ]nƆ7/aZȘd;>ιDvI[:탶+n6op)kp^Ly[ɯy*.e.g|혩; ұ.=AG оe{N1i`\hY #V.^b̙KZݕ%z)Y+|fӏ{t
+?Hg{z43tg_6h}8sV+vzպi؄p^\Wm%WHu[ؤu,rD_HT>U5.iH`p!nF|;\ԑ/ZD#FLYiX=,ԭؗs43\:=-# PRŁFN6jNu+%Qed9R:y6
+B1>pp6f#r%{ُ73 |3s*d1/>V yu7hqelTH"IlL\V>(# m/쟿,֐LtٍUcbMIOap֓sWo`X7Bnk/dCJ%?"vSzwU׬'i$fzf]ɘ9_;{WnS\fl5~/ w:tYђP>!P%̍ u=u]62nvke&KUO6R,Ty&K=?gPgc/Fpe!S3sd!H-pbz2;3|ף+#Y[.H,>Ot剑rs̐F⤈5]'|!5} n}n jՓǗz /L c5[I#dž2]94_a#s:--+u;I
+#XMG@R]e' $O9tn\!#x)LuixŨ-OfwQ3`c 0t Y9l+|SGM9jJ˗D ww*? An:r |Km=5.Zvr''9Pt*A١(|srxS 5}ۀ?QlYU!xD}.ϲۚAKJD?-9Ww,|Y8ئ *hcf"[׻,>ЖaWNES {c=`)
+
+L|yrM
+<m$f`{
+x;7{ pXd $&x } ޺Q`E׫:WIwKg]\푑l;۽ԓT4n"x8$$
+2 PxPJmb9Rl\r
+DHfJONJ9 M_mK/x뗀&'3@{!;.,@7wЭK)=zuгu` {{}dvɿL;)*IN(2w7~ݶ M^3H;0H -pM~!;` LSGZMlMɢ^I2Bb)m1" O@F5 <r?AJ:Ɉv{VVt+?H dݩIwi2?C'-oS
+?ފZK> 1HEp}hAnΚ;RQ0nTzz[M YMaʪD$1uq)$8&Obp'o zވKLXȁV0b*>N;"[:|70^7|mK}.̳'69af)1=4'NuI(rMWjL>݊BD]zzOV:A+K}ۢfM5A.L\#ܘx0bw$7VHqԌèƶI4CuodMzۤ/\کI$^C#2ZW^֝COyZ|.,].g>j}lOϿ+/i8HD@,fl#R޼Nci7}ھ9na̤_<h䰟XWZ?H\͙0J2|6le̪Z 7
+u_U;x۾\n?3llh\րSP?4Nl9W]S²J__꿤f8Ĥ+/y ;pSϨm5[K~ ?H3L jiuEb\SrʮkUjҲ;'>Nr2
+w) bkע\Z?H%bR8X!~V䦍ywZ#Ecʮޏ*y#T5V._2RQ<t)~h8*)^ښ͂ÕZ:\ZE~U1k?>ۍ\"!nҵqm{jw4RjR]>~U)$R`ak!Ң8*"΅ };z vs˯=:)K1 6ZfqHf֍0h:feU|eOLgJa18KZAoG`+aw 1.ǰ/BkPײ^k?C~ޓ01vJ8}+"m8sOȌAlAҖjEshM[snidҎ#6ҘX_iy%O|hxLΥrhlg%3v s{Vu6RW&;_3ؒZldUdzpc1f5&:N?H|=n D4=W4vkƲ.ixt=+&蓭&8 fvDz֋=p.wiÌg~>fQ_hHgmu8NJ9>}fMӳ=Jew;cu#* ::@v0tEڦYSo.򣝡~.erZ*?:[mֳ582=vmR΄Z6geW9يa̽T#=yK'V(NE6k-*Oksgtŏr41EFD K6bEn 891EWb~d^AI/Mm0/bz45WV%Lvz1 ƺF ZIz1#q5ѻHʹJ@49dټ$!)qqt\=;Ӫ0O?s6`_3率(n-w1s6hhzkRbKiL6t>wfi'ǩ]ה۬n*Ɠ!t^Iv^ӳvpPwgopKrp;A87ܰ͏b1bD2=̞cԑ}VO |= i4gvɨv2zi,eU3bR)IYV{NHpPW*b^KX}D&c|WO<jzfKd[c.]h}Ij:#N}QcLʿWqnr=Ȥd.^Yu$yPg9i\ZQ;ĸ(*7WW.W_n?{&_{V7WF g<O:=#SRINJN0ޞt2cD .λB䳰kC Fv/J3$!++.%P2W.m;@N l[|WXBkG1\}lK mlv*,zlL2oI5븟L_-! _c ļi"rĖ员&ZivnV~ӒX*eI#p|06c1;nWmLJtfݡjHeG%ٝ-_ĂHD1jZ}UpjEי}X<`;zsl;Ϣ[QViq[ڃgQjF.˂oCXdnN?MHB8gQti쑎2l`#\m1-p\y`juVA^ m5.*#*a4lE5TK+?(
+wPKb6I%H쮋24f"|{K_r hʞN ^Uoe.:Khr.*#Wm""^p{[@oB# 䖟N8/Y*R{<C9TƘݾߜ4$[<GE C 2<<5!^!W* M GEt\R~ѶuT,Sssz}QdW
+8X}@%  6"* IČG&faffHa[>䊟i(ŬKsl?/JU]īFK#)Qp(_ t6r, u> ^ˮ>7d<ciSX@G@> JoEɷ.\ho4))(߭&G'I} FݵVqK; (he@(
+Ԥb5s@Tٍ|a
+ecb
+-
++f بPNW$v e-p4áYo̤]XV
+Ub @߷hf0rw9Xܗ)?G=?RTI;aqb?ŦCq 70E%>"'6alj67EiɪivT?ok
+5>#ٵvՂ{amQMj.POѣRSH;良E ݲoeərȠP
+O36u~qe|ycaiTj W{\ Wו*Q5Lw'ޫF93eΗnad@ζZ82.ڶZ´
+d: _:榜ESKr||\U mqNգG r?H9Zݲ-Jhxzr-dz-g&ۣ
+SR"m}B;j7MRT}YUiD6 B,cSJDck\=p5jla:(^,I="X)E*,dsVsfִQ
+!m?Fa]{2E6;MʝYAXqmg;ʞAvt\[,u n$Ql7^,N`!U綃qE(@n i?v
+vObx7Xɥcte&~$Z6{VQ ǸWw3>!KԨϦV
+A f=i_\
+Ţ~, Ph J|S@~ /Y5!+|9>+o$Ur01d@2h0*{x(h@JЀ
+M1uqIrtnH!ds'-sm}g|gC5l<g[䱼wj Lx\  W |(D$:[k-r9T`, EO&?$(s/~`z²Ito8 e9DH^0 RQC!?( NN vӳ~ZK3鏨y}l'&r&㒾:8%Zԧ,Q*^Kba dlgc 
+wc1+Ɵ~>H|F!ʿM%J|)_rln^/xr$̾o-x4kNMY#˽(7kr3 ʒ&JgrrlHj&noʭ۶$LG w7iŧVY
+כQn8\v|VNa$9$
+!Ƀs{ 6M d>3t.ˏZllF4eh<g?X4nxAJ-:@ G}]ehSXbdaS9syyfӌ%6)SL5ڽ$~{tzsShN,]kF
+RY<HG'SАlO]'OƻF%66( +)/neUknpLphlV<7Ooۙ<{ΓdJ V.߿n>*ְ@ 8 Uz*Ͼ @,
+ezԺݩqlϾxvt]?
+T$oBb^M]ѱSCe{gs"e?TΕ]z5;5zoVM+з3<\x|<7EV;0W[TV8IߘU8=h|rQzMs<}Vxt=4<M?}#tow4 -1V4u[Ub[rW*UvRRZ-ʾYnc\ zG{ٵHTlUqTl_N]0mU= Y@ m+μ ڢHյG]3b^;≷򣬼Rp7̻kM8rkR&0Ƨ;ąם:O?\*9>źqZxbLO"%ֈU7BʣWpC[+?WqVV,~gQ/4׭1O_ܮj|>l4aۢSm=
+ݲx7?U`~#Dz$$2i& &sRal^|ƆϿJ~8Js}mѶg?D5VVn63s_Xa,{2Gʹ03DEk񈟕2#{9н|v+@?ՍJ6ۋ7Ŗ
+*US,{\ 8+tǢ sTYƟŴK΄MOX%^0jj D_+m7ݵZDfqg+Fo+~R
+STUSTaPnƻ >KLg'Y}C92g5v
+[$* n+V_WYoKeCZUtQeDm9lD
+[KI(~nǾ8#6Wh[-?e\Ot5J;O!*5jnN;;ѷNwƗH=^!DtT')”;irpfe-H/m^ȣ-Y v Im.ڛQiW `KkARd6iT6wiޣv065Vm+J
+E~wίЛn U 8LbҖFf0m3˴&p!L嗔Y_d5IPAX.ϮL$MU^ zڜ_$UeJ""N۷w~]",.n9G ?IKoGK դf2/ai>91un"w
+Qp׊ܚ~6+b ?H6ⶰ$"޼s'+>-[ҁ T'<*lQ24Er4 LJbq_OpR㎘7at 3SP;EOh?x{0,ɄU^̞([):GHvzfs P/>8c|'CL-+2Sp`X1Z^uGM!-5Q- p'>pGlҞih27@]`5383!<3+S14{qiCފg6n?Na79#(Vi 4*Zi>=Q4 ryw k=D
+UVe_xMƲXn>@<^\
+( 'w3ǙK
+:Ry Pkj4u
+׷_[4Me578
+wմDu >nwBAů"d.c͜:9ha6t~+m&䤐B7=&h -#
+&n̜}6;
+-xlZxr: ސT$*ilͻMm6f|qmK*P&P3P;sPٟ-'IʠXNf$uV; W^Bu$$%F$vۂ4.p%`\s`L(0j)v0}m+!ɈmcImbܒxyߧԕ+u-җǕ.dHӭ^x_:;k$8t$S_ch2U֟JDzX_n(&g1'DPVW=DG7<0bb?.]6nA> U[/8ljf:E$Ihmjtv/ފ90Hwge!6 [+]ƨ0K};'.ume(xp4XtQ3Zm mi;'QI]ɪS M Mb ߴ&xӞC3_ȁumJKѱx#oxs?='e݃Ez"w=@tv:tTln`27|ִ0! p/0$4Yk X/ASW:C!, K{3JόFvܹm岫m]o>v34A3:6|ԧ۪>pU+5.x|+$Gegugmj۾0^4C?/֧y#s\Uו6U5l_AZTQ/t5S Rtp-/
+´v 蹐v:LX';n1_Z 꺼nzM.}R)fg^379g6F
+~:B;C=e&ɟ-A^6ARZNoY'Q-MV[:{׵w-ۆrj~ݤͼ'^E/vK}=gUxfCϑ\⛇'goRWM|Χ~O;kFXQX %94`Bk thp"2Ɍ蒷dI,wQ/6VMh5UыNsbhϻ
+'@@O]=_OO֎\KJ{)RkEp6TI.%1imZeAܶ؄!6Jnw]O3ݳ0zWx]Ӽ!t(_V)|feP`"EsFSUZQ{R(M]@NO
+m_eXKQD%FP.&¡W("Y{3;0Qr1Msfepd.2Į2ʭtߪM+iП!ԓ&V_Ǒ,Y^lW̪# !Pwպ;H,;ͪt5:[5c62<px3`O}Ȧ&%3 l.W:Bz{l%|H"8ªFҶldO4ՃWr2:#/+wҾz[Ef#'ХKmyGǻ w
+g\%p%JPp.U_w((W5mkdB<D-ŮJnb5f^+:6맢<ĆojC$DԝZG;oqIly4­EDq⺔
+?pp鸷bYt`(bk6%w5%&Ֆ&w1
+ݚIS4y3n.0e>l/Lx
+Bzd^)%׌+KQåơ ݹ1=y`a\1&,hx(FġY'gk vvl8xluC'(hC\AY: *vp
+Q;lpNuClm5ey_qbB4'÷n9 N-w+lZ]&#M"͹tπxퟀx"a$# dck@"'[B[k*˙CM&&\(|wM ɾ3 ?T'[RjKtk
+X`%  1"!쥏|RzU@t%t@W@yؖh5˩mwբ\ʬ?EpJ<{o~{\;?޷u]lyK@=V.PPP;AHE!9@yd Pn{
+
+`cZSZ>SfT
+`[
+0) 5M, .)W $޼³vQܳg*hIg":dR|G;onB^ A7<`
+X^Ma!\ Cn[LM\&
+`
+06۪OY\ 8ڻLQvf0%4koYNPCD!dC[ fK[iM2J xI^B0/2k ]zEN(T@N)EKjY<I92)̏I0!?I*`g!#ۗj<YG>)w
+Q*.
+m Aoq<(Ǟ 1H^HH$KCw~z
+_r4TkÇân&eSyNatgzl8{'Vb7ۙXzK^F4@-x_.eݷ}vm؍k%$*5o+U}'OĪq^(N;TG : "*&X-ͣB.+h׵GMl5$0iqgnyq @cH2Y3nR/6/-R_K Ĉצ!_Zm(dQ;!|uTAȖWyՁVAwFl7b8zRUoP%3d}-HZկcz!4045k5|[rb
+vY+8!/naRJ+^aYlDNB;9O=gA:AdKT6̴3q}O[kO;|j?e;T)U~{dvBH/[-GSɡ3L rjB)(e=ۮgLk~遼ՂZiR%Eq.JJ8S_K4jGq3;/ޮx%&~
+ˆvUVY$m5vF+Ug(#".6E\q)Z&X$T1
+ո;kc'{lnS)htbzLi-TrQ[S^rB4j 3F >|6Id1k'~K4sܝvq . #@JlBz;.54\Z^vU5;5k/:dʥL!&֖֋NZ/)ieώRfye^c;BgK-c/4jc~.]hkUwm!5#@z7F˶ r)Se"(%jhU?-"-믬 OIj-n[?Rw|:da8U+,g9JLuUlζ\o2md@xj\$@qUڕ2/H0ʟCכLWt+.w%}<TYXXc %{NˍdKڥ)2+:~֯*\lf6RmѴfcws!--;R6WԉW򝻺gK>y{ kjy&@&3]SP,y'M /Q$|KƣX(GL&O}rEzg;a+QsAdMw&|o)^G^ _ps>Z-; +)1u"g4ع٤݄"ܴ́Y$8J>+*T|(4> IGpnl2Yܽñ̮>jƦ3y VgkQ{z~xBC_):Q-̒lKn{q<!y9wL۾q+< %\
+ޘ7s#Oۘ]TMLAl-q ~2fh̊LCӰSsSKh|k*?+䶲u&M$ZBN&,w{o) w;(#}QvF&.xiֲiyHrBF:Rݜlx-Y>EYL.QŌاѧ*1OQDn YO3bo6j(w;+i.\c}kQF=飉Jy  Xo"
+C[8J. 6kv*^- j͈a '0 qkp=猱mOAi鍑5zMj$KLC
+1dv
+uBO-@KG QhR\C6L=V q:*KQ䡻Fi#ԓ ?*
+.
+KU;qr,7hqBJ<PF點]*Wm!N
+0&BH?~o(^j |U5+ݮ%AcS{8UtUߟ'?{QUe.:P伝VpX b*&s *Z.Ɩ^GÇCM44 uk5B^kubC92
+C*ꭂy=]VeV[Qm3vf-ឯ!t^.)}jGc^xvdC'4 kw;Ӱ6.$)r^ &kkx_GL{'i ?yL&*)bjlLҏQgqRWvqgLLL)zڠrJG2k0c*mӡRB}pFK';]!\x;sYfKHE9v]Wڠ~~ˮ[Y=.=u}MԌ_+yS@).>Rė܆
+QLzTxU]qs(r1 ޣ'+`xT9[˘DJ2ZSojlGLƖTl\ّ.}g=]Z \!M9ڼ^G6Q{gnNyI7'$k.Ԅ{*35n#&j["hs`WeU 0XS5,RwڲOTk(&?ۗ!w3[:7u.6R tNܐ5t`8e6g+;]hk|H=RoR$1"8$z(ddjK>+{>JrsDXzپ{|k>;tEƜ:=\?
+ Nyw@ϱAcegὠ4JvFNn) %#vB4v˜ #': c%ܽ,.{|̋DsBmk/%ɧLnGljQ15ѡoEyM-<LT9G/cHnf1Y3E%?K"vKJ4˭7!P.w
+. ;#֫h,`yL-8SEp+.Gפ~M{ɡN!XWtpu[*6mRT$rMֶ63e􈦝B:0]Gu΅r?.ڔzT_!̧&f2 fB#:b})VG=/Vg%ׄ}zQ%ԪnrA֩jד-J-B`0mmKJ}\ ҫZ }~dG.!/y
+h&"$Q|l-7L^-8Yw etp˷6Q5nS܄!xnZ
+U܆db!; X;|"7u> ORo!<J
+Qi لDB/QmCwKP'l&9WS>.2z #3жIhVWj$ZoΡƗ CѓC6t"00mmCP^h}G,ؚ%H%7;zHg6ا() u W O YAiC@n ݆8m[_(鲴m\lfq z&%\v
+ɾZjvTؓ&}eM&46lit,O/ь_>E%kzi_ZB:<*uOר/r2|8wyy4(0=9kR9s[.abm7ux-zLlj+ˋޕo{z ĔG3{~u"WG-]~6jGZѫgjPDw<α]<@'%Zg50ݐל-'(Zg*v4?4ud0S3W057OY tGŸ]pJO,)T9ժݭ^_FOP4CG91ٹHS}o6Ε(;WI1ELk2ř8Q'ʽE왂{ά5c6ZRv2uޗ.`7{xNSB_'ҽ
+#~1}T@P6gj8]#E98]#((28:W014z
+W)C0]i״w֣Vcmy.:.ߣO,HG2SO/'3;w+ΝWfp}.gk?Muג~54<g
+>L\;gU67e6').q"5WBO+3L1>2yoU/: QoWgըL\q|gjlЦ> &ݨ;4{|[h~#:@&!gn4*ڵ؊?b9,&Kr:7A;mT^G=1f<W JYSǢ]t ky"9[Φ{hӸ3^ t: oXj} C?
+|c p8ߖiniPZxi)6j-Vu-?B/@g"7j`r2a^J[u],g?i>.);ю_KmTѹ֜uR>6)i ~/$>m
+lřrFƢ's[>)m+Luvj4 WIaj] /M~%<_ǃv͆%W'ΛNtV偫X}T[PgP?C/ m9RaZeMiL^
+=rz۵72
+
+b<7b0}ɕw[%齵dj|Iutj5Lo!B$?t8c|J0VvqfWacno5t}ب}Yl¶XwD͟h W`bcRz8sI"vy#r&VT-^<!p *>S^:~vpDnDb<z#7T-JvViMr+u~PW N /^CPYzVrо6m[Ns֦[Yg&݅q*7WҒ ɱ.WQ<.үLqDE>kDoE~ [~g9bkWL-^ʏbwδ[iYQհQh
+Y>B@Ğ%xՌ@
+/¹J.m]nJڒfm@3ml%;RA*IwvQm#^aGW[4V]m}.8'g|Q@r4ٓw8kUy\PvΫ4TeE
+ A[r6ۭWVi?ȏ|gLN%pk}NLUE}^ (}ء" 4bC# s}>5V7W^Çf&pfJ!_)aR51e92~msO}l0:swUiO~$;).#ʇ%#m'+# ؟}ԜLAVP1-rzٖGǞTkfNI:6w /s [ۚ538Y50 W q?>ohQc~J8\ңCgöP־ a7Y6cMERN8~I y[oP:~U
+W%: !"n~sE$~7lI2;NPS`WC֍HX$GZ(tZS\ OFyPKR2ϝi6M{t4EUKOMFǴ(<2ܑ%9i<&Q;& 5G3G2ZGĐ? |C~3x
+(Ϭ48x0Zʭ#^EsMZԡ*!5fi7;  SړfZO5٬o
+/19( LAJ+Pvk6Xg62Z9z"LF]L;XL/+I-f~y;#K;H@iD-ssMy[6B4kMA"R3V$+g^iNwW8镹xXH'17>I0'~%b`
+}\SShCę$y2װ,v%5޺JL#ޣ&IZhCOPDA󨪆G:.1?kt y8چp{K#s)rK>'-M#ⶁ*6͍#1#F`6zb>ta,~0,DbsЛ(>? 5dӫiN7eO_icTgpӦ@\|<+E+W5֓'f }@}2PE
+(7l pj?&`
+s MC9
+RzUٛԙfa+ٟ穳0Đ'^P(kkad<"xAi'>{e!u|k't6{WK'#=g2Ut>aϓs+&ty'e'HħIzDa|~#
+Jscd^1<uGl끫<"w=)ۅZTrb"
+F.Me4>0@{ g 5Z ME
+x-%W5(?&R`z;x;-l~R4*& G{wXB3'>$r"{LrhgCo
+( PÕW<xiWqb]Q|;MՐ{VUD}뜍k?BVXn-/B8*?|0t^K0 К0wywZ`SnDu乷.bc'Ieu@M?'Z:4NZZC!
+=.s15Osׇ/Yk{7FUN>(f`
+w3e +-8
+CQ5֟{ 76QItGoʹ
+'G4t=m
+d瑇LfKvaMQv|x,Z/
+ r=مT*%W05ogE1VVǩ-ۋz3Ycmv7lAr`ž%%=O%1< ʇhO5
+A
+8C2L`K6-J̲Đ4>S'Gt4@y`A+~t~QvQ Q_`}s7aps10\sDX*4]ʼ,5ΕJ yAȿ@K` e d)\ǬEN}1^27sNOtk.?&??tfwWIb029"\CJk3[ (&О ^0gs1$|(#5%\Sn)Dw{;~ll3oܪLVO["OM6nf BC02*AIxl^"7Yޘ<g,ʻLeN[YMVjpQ9ڽn+Xu8nҙ8w0.r0?RĐ(֧(Wq><(+\i5vA_trv6?%VfĒ00fA嵐*iO6N&B ̒觫G$jrk$`l©`A%sc󶷷1rFWwދrf{n=QƿPfETr VJHdtnk?]b[9Ď$j,ʰqc>wOcþh>g<rh"~ j%Ef<, gL[%+z7"2a+9f~jx#ۿ/&zBNLSG<G{y|7b$D~nKz0o=3ϝL1 c BBO#܄rs`6>²VzXMבʿ/:c};{ym
+3n~FW範zhKH=Z,IOxSqwYT[F&`#} i _eZf:TOQRO2
+]%*۾;mZ%^b-NKF!tVF'Ьe2[{He~Y4}^X1|."u,FM*
+jeolX7L SvN<A@o<Q5;,}H#% ~_/dp7骮hM3ّ@xfSEa= :9@MFENsE8f#-A( Rb ;Da+twQ%Đ?Hw'^42{1`? ΛG~({S]'¯=ܴ̀ir?f{܃(xtRl,nan;JJ/}&6mND^ىܛ,jy~y[!wOwrioS5]ju^֪u5D%ҴŴ
+[q5jxT ],@(rTDFxéwCL;a{yp"ds/9
+C~5[!bo~s-U׎„/:^ sH)]P0[E{IP'\C>g<^l]5m;87afۅqqy<:YX#|+0ðϱiH{;/@1AQ&R~ @lirZm<ckG_X'7IlUë^nlŇnoH y
+k2
+Ry({ά
+O"Q(wx(R%x}nW>7n_XaO!}ddڦ (DZ`^dӸ̘aȿ|yÕo_ o-/Tԕ"1Hé%>7V6|sY]t{[_~.7pY7 (i 6T&7s)Լ\i[x!?&OKry)LFv JmKU}%y?=6~%#M7=P|] p
+#R)mډQq`Ģd8gykP"r `  >Ԣp TŹzۍZc,+rG+#gVeaus NrYӞ2#WNѢ2i+!{fj=M\{HXMyY
+'aL}]ׯ)![dX^+YRjehq,b4`[В[V~\T,YWfwÄ)#j'E=1U+<škվ0,oA77xf]/25է%
+
+z&X(n^};Q/؇)+,bs'ZbJN=;\&u+8_4wZB3% 5)9>o*=n/۴P0yRpq!׌_W)J8/'"0 xb,v%\[sP͝82YvC0
+ˢ=o$͒Gۗ
+TfO.YN ΐ &tz-֎s^02VFjیE̳+0OcT a([1q w[hNh?ҙ*}dϦn7KܬgbR6kj"87d*o #ǃ˰<A0{>'=h9kG y,^&yQ,$K\âdZ*WqZۦ`)yiuds6$k i@ :)m_$hi'O%X uwpΆNq~'/a/#(勏J'TͧC'k_WaTK_cH#{klOLJ䙨ƐJ[]uӷ=iL+$
+~j9%LgZrmjbH1Z-,4zM[F75klet@}puBPo ++) Rj|u @6@D Y rХ<y.
+&&p{e1S%<BGP<'w@L.b'}W!70c?f Ǡ: / T|1O,{aD-(p  λ?1q4 2pO mo {%p=N^ʶ9AbȯF@Rj>LL{!#
+ț;SX#׻;ts'7@i3^R_2Ga uɦ1vm<{k/WP2L8ڥT]Iǧс<$2́<V@{RzVvER`:ZNf}#/SfVrrYvݩv #CYx Ó_;GvbͲRy8[Đ? BnТ{PᓜR@i}j\nlbk&| ;X4^yt:9>h=}QOONnJ93SQl<NDX SBϾ+ ?0?O
+y2ըF*>ZY̘53eJ|B j4>mWQM`=y:vq|:4r%X-4ǽo qY3r6Kz@s ܎yiLsS@,C`%9
+Kwyꪷ1g H՚88J -v G$|8[Dd+6RY-[ٲ ȥH8k]fم7(&:(Ϟ&(/`;v?-R.9Uwu^^'ߌE.`KYk MdoES$IHJq|Đ*h„bnJ03f
+(<WP0Y5ȑG4S4m|j%M J/y[~漈D`tī57VhQrtI (^ Y=YAbȯF%Lr >w2bڰEiOBjN6+m<Y\eR"K
+%*Oe-\&HV /bUwG Y"lgBwnfO&y}W@Ȼ.DuNѕ {E\E 9hczHޑi0ڽQMԼǚ /Fΰ18v[x.{=Rx{ %1WF5s'o2毹%R ,V9ם\9yK8%LIMJo#_?/1JHHX[yQzK)Uw֩pV)^Qq>H.W6ׁ7g"Fq7)?NLWzm4lDԀx(y 6rRU,e7.}yNΛ]+
+.ɳelAoP]Z: ~s.q)R}q4z'P(qKvA'^3TFۨVdѴOsw (Z#DF;s 3C<F[&"ux]MbW*}YnLFje-Y^oazEY}7'fDfjs'٭>Z8wv֨6̀&C(&rTUަ>w>NIMs O'%] 3_讀85+~ި-[au!d5iiղB
+u*:Ȳ'HGxsK? ;y
+
+* ;{
+UC_9/Ms~C
+r iddIlj.p7LP]lݼv-0@D (>\
+'HXC`MI!h
+
+ztd}%&=] 4 ?tޏ}&he>`ou'-95}Nyz8K8nuk9A-ް?~9@U+ P
+,J閲l^ת_D/"ҷz-)Bɀ(z-Ֆ
+?ǫbFN<4vߐ/PM NMs:\~ObCgznvxpݹqPvk1@*Ljw6v)M6uZZ=vNxo J O؀Ӕu@'|?/6=p4]A)f^ z~ ) ˭Ye(@V9LV[GؿTRrzI.gn_W.a{n l܂z7 >oyUkrFڭllK]V.;73L A78eP{Jƙ"&块yۅv!=h)~CG O{
+
+(
+
+8O^+7VA<$UYiRаl'^ w,s@- `?:g?7ƾNO'U%eU[#ˮOS_yxq8FITyU!Q$J(BPN=9U۵ 7C])ty><"H.F0aP;oy2HwҘh<atbr.W]QyQ>rlSN2TR-~An]
+!Pvf
+ oqF;<̬ \g 괵q* UiJכ"~bV+9iu3iU^fkrL @n c@"|?YytOuU"RgɣWA<hKٶjk<7 K4MHGj&msq38,&KVXIEY_
+ "1k`:,o0椈!%ϛX}<WКnJyCO~#z ΓiV&[utflHGiߨh>z^) ^xЄ8Bsc:sjw )o]D4{kt<ŨCIt&۽U.A 䫭~$y+J)6)2 =͉3!]*
+s,vCO{q_7!ZgJf7CUwd۷C {wJbgYIv-91g}%=gEGB щW G5_ '~rI\Ֆٛޱ9m@z|JF3«j44InFOa轢gAD1Z/%i=e^)EVij0JԫG02QknNe/ۖf|;&VlfJVYy#ր1h(-n3抂L20V MˬQkZ=Ne728<ݣ>%h0e B/~V j8:,vᛁg(3W滦:Rpg
+Br_T
+re[<j\Dr8dɄ`f.MQ.|Dž0*&Qo}LU}L:iH6jAq؄'NST%ǂ_VidH<]j9\%EvI)QD2)0@U%z
+ ?{>;(tOBY@8N/pS$ D9Z/+O M8~Ē &O` j$]k%/.0羙+hYPI%9
+PCIjlGqmO+|Y.Ce#: ?ȿ.
+ l 61B圄j,3:[Uth \9MUl ^Z+9x+|05v/
+ii2hJ
+ " 7PX0w
+1OAax|3;,Z@~ćs!\V}voެ;eWx:۠7 Y-~}
+
+(>"F
+P'Ӭ'LnJ8u~
+56)._`cQ@o+?yP)ap;=7a!<qz2Z;^'hp=o:G(!,Vuvi[GD ?Zzc]v{SX[cًp]gNnڊ~yu3'kܢEuv\X̘fQr.ؕ9R
+m _OŞMvu{H {AYV+2Թ̉t)?1s4.o[̢5KcqxS~"gov @0g(B8kнf[hL ֹG]ynT2\};=\n4(N/y^d0;W;.6We)rkYI*- GlQ s/*X
+xݞ
+ {'iV:[]{iuYbc.֏=hEǹ]-8Q&fcLFۦU|jeԱM/
+Lgh7%՛܉"g
+r5- %##W#q!dAW{hV9iqv͂Ն\K]a۴WFq+{wT 
+z@ݑD8{U,|VFdOն{U&ɚZNX? >r,>N,t&4T]Ӭ?xp 2m;ݠLC3.IGGCtQ7ڗFBSe;[1<;"$թohȹچm/q_AU+@[t_ȷ>-Rc=̗Y
+#Q^!, M @^(dޛ:TNZ?ڌXsq2=1I|Ƣz}Ի'?^u[UHKo<' Өƕ(|*RI7ua5On}l7[۝b s~>zܙ_UYP{!㊵ }&ivR/՗3n1WmާM#r1gM߯xhtjx1iح:&*T Ti]y]17FJb
+|3>XG42qoIy)Zf]iZզ &KUheL=|^)Z8"šVݪi3ϧ2\)uU+]RЛEχObKy262/hNA_veyfK[#FmBa4-A'ίB/#~b5isRÒHiws\RBJ0?MKq4x
+k*qdCCA 2Zѽ_=˷`.ٛ'-W2Όtibm'orΧ?JGs[eK}4. /}o>9<ye?ؽgu=uκ"ŧa>9tHi節0%[lU5ֺփ"}PVřk~j`C+0Pe5.
+ݨk @Gl-,i{q_s\:Ғ{[j/$\{`=F7WX\ӟꏜd"/ߵXlaLڟec4PQGw :ez^R(ыDzo]3/y+=>t/vo/[7y`[C59^U9Tup'$w7Kܬ߼ hz rk`нPǗgvۖR2c,6VPmoUOh2xe7;{eSR7vq{zk%߭ƌt{Q\~]MPho -^ *r5gQgJF[_z7חO乂&n9[1<bߑKڮS~Z/z.X3#`^oY$:}zl$9q=u@oa %[zr}JyWӞsEmiGkjw6[wD|,1FWT ؇j o(
+B~WfDmgqfMk#f|NJU;,΅q)3yp:waeyl:j&'좩]ymHTs ??
+S!tw+2ƒmO&#ëQ9eTA ?2 ]8glB⺋ַ$Zb;(By870¨M3?iu7"?Ldwv@SNw><~0aJ !h́`ZS3.W'r~mOvCN /y8Cu&S&o܀ig\rj}XlfzljӐm 'U?ȯ.T@!vhէ@>XÀwn{1'pYߔ6yxۅٸ:N߅fFD[6Lwsw,lwzp<T{^s󇣪eڋ95tQ!t5Z Y|J*As|Gpy'obb;aϤ]6сsqc4=N^e]ҰFW5m)uKlfڱ[RDל#e[Fa@@ ?Y1K3t|f;dKMlnۃ;z:7=WJʸ`8bdo5_cݑv;U|B&ʦ=џ"x[ȟ-}"᱅ay$,?;V{#۔<V/Fs
+}ݱ_ea niUuFSa,~Ott{-a^m Gǖ8&k{rXFi<gm]NCZ,[&W#푟qN[VU6T8/GckG,R2&pWk B2[xB[BBxz );47h;dy+zjq[;On1k$ُ_1w+z0]Nm=$}N5!dyם\wWH1r t'rvr" ??&\p,}G=0y9:T}MJ3DhsRgsY'via;.{1:zr91qLkԔi%)6yܩ)X_3.Cl A޻;h\-0Mu,M7rؚPE=:Ynx<l̖]o<A{]i~iY!DXsp]-9gA]}OT7_;֟oV*GYĸ´7q鲘uud5VaW곀頝judm5jK'O5޼U_inܾĶ4FXe _Jrۊ%2S,_~aúr[pK[*M6;ڰvӾw3K,jk-"۰#Q_Z^UoR")ըUX49q E
+/(H@'rX) bՖbIS]gxlgO⚟l* 1'8,$MW3Yȅt1Gf/:h8^VociH-VbO;\‚R!tH<πar>'LW9nf:mV"[rk[k]b5nG˒HV?m|-(qĄP`0O_VG0TZTâ8r5~]o̴fuDߩ!U:#+HRW԰(P&llKέ)6#̈́B7t|! )/HZSj؉X O"qoܷQ
+E%z8V]<
+P0,_lrxP!5M0~ (@oh]
+@ Z*|P))򈰂~Or}ʿ@;<|kd@Ssqx#|Q.
+`Μ;&؜0B`P PtbWNWbʺѥZʀmѷ[PWm ߕ(n
+ LhLf3zU i;ja?<
+TroU号{GN8OzF`F8m/{9
+}ÌEGX=kr(~J]d6/Sx[BD
+> em-<zdsoɀ'=GHoZu;&7rv|`6sUk,4 ,A˻cv%Giΰq[Y{<W("!:CforF
+N+ȑI+u\Z?z,sujHjD]=>4~[x;@>ƴdH1s[[ce[s>zt\t97\jsNh-{n,+NsT=15醌Ɖ`
+Ԕ^gmc=|:knՐZ"=O#B&+˵g.mOeTbA<T;i;M߇f/i?w/jYZ_b5\CQGN90evRU)R{ aMv
+Xʭׂ A#:K+ ,;<@-njG|F"FqZxi0
+8<uɡQB\ZGSqyqkXOzr5>>l<Aإ&QKeN^c6B;o.`L~]!y Zиjk(] Z9϶ŭٝ}4w +ϣDt\)>{ؚvwTZ; RץΧ_kȨ)-j<6 MUΫ'NH.dZE}|5ZU#UUKjq -Wkl,^RRɩ{n s* zZDL!s@_Z{+* R틍o+j9g*+>hGGq$HUS,w7\GWTvwب!(T+[مz8V񑝟X~yK[#Wڢ<I;un:>ڽvH &L*3 hMyBZS*cpDXUUT[VhZ3.%Yb~R]}Y%B+, ݏ_
+&-| =by^o35U5s0TXycAU_9rXMq0Ţ5g9-s"Z@s.%$tMk ֬D@HsشO29oMou,p+9Ka3=ۦ
+.33n2{K:_:gFRep^/VOgqֈcyUQL+5
+,]
+n
+\`e5
+;މ, B_f>^ v
+lb=o]&-ly22}ү/*9(R=z.G3]^wYcv֎Flw6r*zՒK @yZ. .Q.Y?}~ :%(Q 1¸G9139kl FіCp7//Ʃ7E+K;PFR<Wۦ37N N IuR3Sz/{
+1#y/+sAHU (MEP`Jx{=Iܲ͗$+YYP*[U<3VQז?-4Ls_cN]Cj!?[254zG2\&OeV>ʌ2 e65 vMc\2F]F
+) psC2vqZ5cJ͋ !*m _2.} ΄g fGdn[tfi몓=xl#yg!T Bj8!Zb|0Nw97^p/1Gڱ?ÏOT,;g=_[:~w%J/ezz9F_Iu\Օg}n;Ry){Ɠ2^8P~䄑yqxX wVsX1\
+!
+zR
+v]ۏ|tu*O
+^ipvBm[;b"lzI369[p6ɲ7ɴn?\4SEnRtXvZ9jiQ][VhYJ ;eIJڝL)'1ܲV ~3 !u'.RUk[G}f8`]=?eWbcfٌYuy_j)%Y
+O: V͎Ug<`1϶;ưmgCh
+7Ckhߩ[}U2(LURCk1=*ت\yY*w ^aJcxD5ӳɜ5 =tĽ2>6Ol8+Wk5|P]xTSֻ'** ?%5]r)joIdR 8t:=g<_2qNz Rk7.u+}>լa/Ձ^NIhNL¿(+^qXj(XoS=+yޛҭf:3 Q{@ebHݾ5TiU\Ysʞ:M
+J8.(]ɇk/I#wߵ١^gS?YǗvxKYEP\`1ݔK\7\-vbXU 2qJs/ _vbn:8xR`Ssa%Yu[s*MMn ȿLFSqC;W 3ܚr W^kʣLոRIAa|5>:9Dl:b:lڛpL/J
+mIn%XS•4K鍋2cռ'
+ШQ
+` 0>8CcI[&g}Ÿkٗne^S"*Pq\Bk9@7q3
+qzy@+x|xK |%tKTZsdȟX5tdFQFј rW /
+o-^_8*+@6! 
+H+
+e)P!M?F P݂<m^8ޒDDOڣږo="ݐ%__mty=GzceS?!7
+uJ}5<?_$~.B Ï sy0p[޶k09~\~'\OúNt]ʳtc5GrcggtݻX#%~A$-yӃQB} fÊ#8u4#2뻣t|3=V,vo93Y34'Ǖ̎ e9J*OS3w Qa jaJ;~' pYhCC P7Ƽ;8YK!2R3uFa"b͛f<.MV|RGޓeRz.c2{`\xP+<a\cѐ_lO݃BY4|ê\tۍIXq^I8U`vu&n^?wɊȌzkXbĬ(>P' +>
+#z 0Knac $f};Ko
+{M합ݜWq)/픝5E3=MEt$2"")KN̸' ra셚w A~);MۓJ0h۲[gA89G5\XԪQ^rӢK!dΆh'Ǧ?ע
+Q].)22|h87Nj}2;m-u~uu]>c VHπiQޞV/6!zK3ͻB
+P~WݠY.OfFAUzaf/jmhibe+΍{ef(ҟz-$ޚ}C6᰹:nmuk#^MM+H}@X$z|X65=l
+B{mә\NNg-tzeX^cȬWN#caDnC/ nߪ Fxg0kY[Ki$A~ׅ}"Lsmt _' nriZԽl?I2]Yn4AC 'fV DL^ɦUKҪVyaTS5<Ut2Vx-ט_dl+N;tI{\K>l۝3(tZM
+2uEذtxx)tpjS{v2V}fL\j)ɺj Ÿʑ41yi׋FWpk*AƞR3)lL[g4|w(s]=bH$u&꫿UKԯ8ՂWz?2WgU3+hz6F肾Βy?~*؅<GV.n|'Wm FVf.J it^֚ W;~iL+x)l23isH.(l*/5v^l"0ɿɌ"-v1 Fp3Нz:8#]|=4{ԫ+-{ z}b`J1LRJYtC6NqU*(5թ62O o0+'( 3YecUkH4E;ϳٝeoBKBuDs/&S(~
+|Ë:d[ Mq#A&^/:N+@sBCybNv2_}UˬfӲ<V/ bܓC'\tʶʼnƗ []| ʋ̛{PkQxdKX57KL%Oqy7
+H
+0}!
+9M<߾;|T-=k*v
+*
+(lt!Ȅ@,546py3es4߼ U)H\R >Gt}<R+ B/~W/'  J( pm̾'cxd
+,Hid3uQ,_w'p/*-v! ?ޫܖ>|e6Qm㶀7st]z/'omBOȏDҾgqBxU}Vm&leAW7ei]#ڪuXnvMyYEl Xbm~
+62s\ap<WX4% -_iPcy[c)7W;εL) VD˼YtSynתo.\Mt>QlL#:p*io,#^wJ.͑-7eֳy_^ xmB'|Y'MNxDmC~VCw'nw"+֢kSpufSkq[\u
+yMu3܈H51If?~DV<_]d贝ŹnU-zlή?}_ L#=)xb:ziIHK;Osc 8=hLPn(O6VT@ VYݞ*h^w']2⬅ؼv2e^'QFm.j̄GI;Fk]l͹r;
+G)c
+
+Se->"fjAO TV!1%)E48_kARGiSyu{m8ck1IR,;A厴f[ @ 8(ip?YvwLmn=~#{[ƭ} Q ^la}F|):E9;X(\ތ_-s0]s`4wdoTR+Un*uA.ʟ[鴔(
+4-UU|dI+ڞ{& z9ufu/V:|\) vuw6i1%uGؔp7[zOUisCז1GH"("%s!?vC劾%# Mv$f(v۵
+[SK
+Wx#Y$_ګYʹڭDZ3b_{|w4Dꣴ^R0K̬f}hkAuCkRUG37l3cWZtqp˝`ٱۈ{?&Ike>]Gly=\6d[?U&zq|K&Om</J*6u:?*%)RoX/%b_,.IքWםZЙkv'el.7w݄56VuQh]k}Wt,'),E&R3N=>/Ecbjg~*^G/*By7
+R
+Rlb$C& X?f
+S
+o OMPh8
+
+ƅ ̃0Vb^+T7>h%?\A8|th
+?4wV%Hzlk\E0qvXy6)p7Kj3d]+Wu힇ʔ-M`.[]<O۞{o
+ |y@L C<ɇ>B''hSj_>CZhKs1Լ<VMF͘Jv1{ FS{CE-{X}}_$" %PimǓw7'6v 7RxY[b]-|;sm^-ɿfC:5}ϣ 7k?j=Buqkc[S˾<PͩZcU @Xs(^sPgdpA.:BկIv<#gP|v^k:jk5-u}2󗱉9D*ihE%u&8E~rZ/3Zp?nJg{vNН,œ_vd
+OFz1)ZsCF<+Y~`L\{|{jآʽbg1TF܆"&l$ 1i}7eTXrr/<JuEhs+7<!U{=۫-v)|̨Z֗8K[1_-Ϝ!Də F?еlP6h߹(qQjJAqbf\R){ `B+Ԯ
+ݷ?Ix
++O%~Ư tޓ.>M.I6!<E+Yޗ2Eu{=4 iz٘*f^>Z^NⳘ=' ٽ[kr HnisGz \c omſ @~u[aiªO}uj c~5_;U'Tw+{'ǩє
+爁nÊ·|\(=$EʱkE6V論8KfcXw~pv}tߐA thGWI]Dg Y&"
+z&ʫ<)d21Q^|x=ʎog3G}4~|z[KN1AS4ius lѮ\ӣ㥠'//>lh40\q"XE]9D $MWӶ}t`2yQth_ gY1u17af̩ѮNhp#T ?>䟪쬨pf98%B{鰃Ԉry5P[Zs`[W=iJm9v*M#iRr],^6{<t{vsMZ¥}ݞ^ן.y[>Tt1{r`L};f{9x^cc kqI{;w{k%]|VGD&;.m7Ao#aSo} ^A<p+`S1}>p5ߟq"׶;OGa rt+GtXK*l6 t&m]i7)üNv>^ G;+XctaMjj>L.vvIKL暿km?ެ9OhT|3]2SąV)sO1nd:ʀfR?haiVi9jP%֫kV~zFuF:uMVۦ^#SE~?rv1VQ8#湃^?YDmt[ 3e>m??qUAvOssTkdol^Y֘֒ڤh+mkyzeܬHrZZRGkPpG]l9m緫#!Ky~:zeZ}|(TQZWIqXf%SDCQxů"rue!^A6?F^w./W7g|Dm,yo[=8ꌓ iҵofEVbYAZWTQ1kt>Wg-7c}QI^S{K0qI^+3n'3>hW*:<6^* r~Pm19[͝2qJX=W/Anʛh4,NhÑET$2WF!4~E'<胟&x&Knyo+ cko>W:[p&Z^Jܔͳ@/){[ery%@fB{/$bNl CWDZ5bhrLNuZR>aDTHcSZlqRn?i;̶2~s&g<ߨ D`"Od\
+n:z)V*e]!  AA<ZNCQR&-4A7>
+,f|
+1ADr-;@PʔB eE(sJ
+|R<
+֋hG6نȦTDIH*%T3Zpkfjf~Fz$@L 5g$Kf%^U=׈&->ϒ??fz;
++fdF@q`dDM$8 x* Ln@d0&pX]p]}?@m {M+/7r͓ԧ1D780u*,Oe`] ~McgWpVE\ƠEr>9uSO(2܏"U;Ee!-No02
+Xy#"A"
+bAOH¨ 8 tKV}wٕ,n{(+4j\o Awa,V!}D6}>3W/R{J̟`&̗/ħ)NT, OYI0wG'X( :Mz9Q3 3a"KaZmw' ['!U?_8{."~0/xRSǮ-r.:4î۬{y l߬m-^Y";,_lܓlgu;V9 zK)zqz^+mN $Цphhv;p\ϟx;#cNϞ[`B"A*`G6VRLh^o?{)*n^˳{~fDS>ӿ?pw]Ϋ;;pa~0mrԲ6nu iW߄W ۷anӰ߀4A.WKR%wm?hl^¡?ɰ4-ܷ\v'93KlucەRhB& Lp ̀y ~|'9+뻽x{=c/4\E=a
++YgXuB endstream endobj 29 0 obj <</Length 65536>>stream
+~ii
+_E)LIq.Ϋtw6ۙ"
+~m짵㐆'n;B_5scpóNLl]f_BNs1,(^)̪V5SN.i̝6/@譵$k&U?T`ρ1Zxcj~Vm+iv=ڇэvoR\HT$V^97t]6=;E6@\ۗ|m/ Ck3ZΈW|p<o
+14q u{%B=歏'ų__NE2y 2b[|]hEruR= hA/7|0;]vGJL7g$S)ls!c_6s1vc3vw~ʆ.:Z\\|C_d^Kk..hvFf=7$.Ү7iXh;%1L/_YBz-p[}z  A|omZh7ŁXϑzcZqrf\cIzw+OMjc+5
+]nwob)cvB~gyUa<{-
++Dj-\>^L*7̭^ATQGJ)hVd龾/ZcO6Y-{q3z:ʕPq ~*8\l25K/
+E&qq
+:/?$sawcٹJz ۳ܭY0OڪŖ&-ܢRƱ?,/-x2mee++6Yw@(^/`p3̰qLVF{OS"\—/lq=\.07?^ f:˸0W4{{T09f<I:#q+ n\뎗Sp10LzLwV0Yw&iYYV{
+GM"Ɏ 9vqVDE
+zQՆԮ H{);74tw,c|^
+,4w^=\FwMwߍۀvv3czT 8y[>Pa]ۦ)~4x.0WY8A4?+YL1 &϶@N+LW舯2 6PLu\q6|2.Fgʥi 7zޱ ˢDn]`YN>mI4)m]'Mw7w7e?SHrb *#Q(>x{bvt:RD#Af^sµWJq<sl6Ptj[zvD:\-M ^t׋ _+`Huk|DԷ=rk;ah!=/$#Vݭ(G'ӜQx[$RI= _E1i%K??=_;"|gX_azo {Xf#;-E^ם}6V!MeK,|5{y7ݪWPiﴶرWTϢЖdWG-<9
+/vwow5e^~=,|qKЋ!4ӄƽ9w#v0BEn]I9խg{} B]St[6mvzOO#`SA}'X☽uo%)8e}w$>xou,)!CC-`+^4P*D@{';ii|UlXiӘr@^LVkJvw|yps甕Z>(_ [m:z`7d*=Mo
+.̞?"vGWcHW**Z|"i\Z- L,֫i9(QI)AluS.U=ާUZyUZdafuNeWC[
+Bd~+yI 6WunENG$P_Y[[xQMW0"(^|ӻ2x.WFc杪ni7Yy5'EQa3l[qmo*ݜv}sz5ڎGϰVٶ!T~U\X|VD9w7J'gKґI2LRE\c*Dh</,^XZhBl3X?Jyɞ{n'\[~^/nPzeBnSvK\cDT8?{£D
+Mt#Nf\K?Xt,nwzxv,~Yeq3Ʋ֞E*}6Ol[݈ێ쓡soWLK\&f%-)D)<2/#O3NnqG,xEVɜL1*vqbU>k։0IY(ily9:S12pZYQ.P<Sq,IHf\&RP/7B>$oBf'eh`lhmzε&v&A/k wժ P `=樆;]?X7za~l>(Αj)g,g9<clgDګc˧`gq܆5HAӁdn
+rz(N}pӶi8:`Ԏz
+TSxqZ}AO>}_ߣo8=kCp׸$NC1d[o[mn@}}|3t $?r9FYG\G<8(I
+5McxLx V_MJ'0z o|rz'P2 j%I3I`QclN9=ʳVq;HFuԹ/> ޴V 8Ap ? 2c+zt10WZN Leo \~bFon2)qlIFA?'cgЋ=KKz3h֚V4_r|Žo=h002jjKN-H~%x' pov[ Z 9Aguo/ϩ~<f'
+=5}ճSΆ[zx ~oGj[ƽY՘12.uO"A8 *tB
+oˎiI:}f'-HĿH0aN2('?/'59ޙqaYf U0-_C[X$B92^9E}׬"JR޻2WR$ߤ:HuH7 Y&hU+}.18o=_;f[,~vD+zC/Z꾱HcZ5f}ﲒa,Y0.<'ʯܤ=oĄ $@|OLe,& 7?/3[`DN;w~z;Ynj3nN\zh<_Ҹbvkz+_H=۳ithVnO:,cetNhF\vL1pyE\?u~Q|wΡhs7m(#8l /`g
+L
+JoPn⤳bOw1؁x^]p7$2~]Y~l+w!__$* Bcٻ7V`1|?\ꉽzծNj6[Coe`0,IjZiL镚¶/0f<J8#sU1DjPǃ4?M+>_:QvvpWLkakP:9Һ+b-df(LbZ-a;-j$+_pL ˰kؕʱ԰@36f)9gK}}~acU~3P_O}eKeIvcr3'ܶ&ޢRw)yPq7_K-L 2aILt-ŴWራÞ2l ۆ#htl {Zu9LFf6 ?YNv߯kGkcشVpzfЛ+ʷgճIS?)XF+Tƻ+^w,<2c@zكYR? {FHE_nwoO'ꖅ)ͦ KΧ9fMO{Bļ1_ޣqw%Ĺp`=fx?|v zSUНpw-O3dtg
+8/Of|slMX3bge[E"3}u {|_Q1XDRj\g gFUw(QؕǾ0m?Q)+ꄫK \,` S^61vu<6\V\4iu.ff17Rr?_=D\Chmin# xqcTZDԦT8_x+s4sئsogvlHbWZϕJb0!F^
+彻^ⱽFb?#ipCϮNvDR,r`\[|uiU,<~c_op=|k==UeпVP~ Ajv<oe&<e?؟>Ǩ
+(ּjx\ѵСWBFe"lbIjy8'VM(dWԵ
+uWe YVA'Ry䨒[g:qZ1<pw]PxEkQAQ./6R4sWi1pB mج.-skwp\zM*sT rsx/SQ!JIMƨ/8S[+WN 2O:3ȯ>ΥcnSZ'9:`? :!)fiogWuS:?yewZЩPB4&mp:&dn K9hsp8սnxe˸nHט>^!V=VV_`\gZ'9ߺT{ f6)UX#֓ך'4l1* 3eG.`r֬! ,Zϵ!uffD'D
+?)P3BCއ4ab:յ@sF(˔Wk54J'yT*45; )Vbg?yYP ߣ(u PT?4
+D;€Up`K/
+d
+y%!w>AQ ưM|'Hu&s [ |z1z^Gd%='lRuvoK-Lf,46xt,"@Ӏ~L_]Yɚy|𱣘׈Ɖ[cn5^Hq*@^/}&hB _v# s!=
+_S>w;]n ^T = .#䜪UlUe QL3gބ`&{9ygz_afU^F[rwjo7\xsKBmi;ad}m`Svk?gg
+TsjʺʣZV{swBgrՒ#42/}<Q~0P;wI|v0`*S`M ^pƽt_ra -ZͺU~=0{9nYw,;j[wT50%<f{3mINRvv2B&yH*fz9 0sX}"מ+ӹAT\|JRF,A-Z )]^N kh,tV:Rq0VҜ
+L Oͭ$svԨϭۧ"heﻢM 2ȓQ0Dv[Im"*?>W6JlF$_ƺB{YYͅXRx̝syzfYUx PfFe띫[׸>W#Ԗ'P}ڑO&
+ܬZa~.}K5vKp7$ՈQw!Fu7&vxc,vh5 9l6HP>k}JuU.S<iz][ N`V.g]:
+\I:qXD1>E
+2I..i~nEk7;# p|7_:yqt:4$nÌ^4ͱD sW$ivG3z6Q\gxiz1q#x*8,.MPykYP2{ne ý5 +í
+EfHMb~ϸ1/tv:TƩ
+ ? /eyJo13 Sqg \%R%w!Q3"%JJ} @g.~/෠ng;t~ѭs=&bB̈́!j?ggrOvKGv
+΢x{AF
+ reT›|
+L.چ+@u{! е
+i$ȵKPZr70pbnNuͶg=t L,v}?~k|Vh_-\6 (*t|z3D0GӇU̵l4aVBKֿh->nk{.5!':;XjڪMG?~|u0ǹ\TMQnnW'MzQd*ri4%]GЛEs>%/jJ>O>?y_u.<8AȵFl_kl\ыj= q:Ÿ)юBd/(r^H ٚ~6rd%5}\4>^E~EKG/粆wNFf
+ꬢ%,۳\>fO3zr}݈ BG&ONO]i쌭Ǐ[@;"Qf qR`$*x.eg8Let:;o>y7MJ\-W^_{bWDʠL\Y>MO\57f)[N#I8pX L%^7eUr8i8IVTNZk
+wy9`<ỹ`ڻqS eLlQW|5 )zXUF0+ײ40o
+;b7 cF]~ +ˋ]s.WšklT;E4Cf%Bب~mk.WH]~0NF;*-;%r,*k>˰
+u&7 +f[B~%~s2=@7K*Zf̺Y`L?C$Laʬ%?-|<^yo#FYPJnAʸ ]u+'!Qc7u1½F(h/mGN~<D죙ٖ\)0!3+gTc ;cclӾ /܍?؟B:'0?o$lSvdpY>U_A_*f9IFDf1~wΟnWjY]5T/zL.q-eYTyaMInzτ#oKxxPM{ j,#Ud^VaN>FV)>F:#'_r;dP]45gҐqDJM@{ߡL" 8#2$y[@{<&Pqa)+V+E-dJJMu)}lUT?o$L᪎eCpE~_<U{|ҐrBW&0(%]f|6x&DLntd^wP'~H]!0C|SEA&t(=#6^DЛ'6jUҬOH밇Xdx[ZE<]3*矇{fu'L",zH>(ob >8DBSmĘT&lF&퇊=m_l20khcV]΂]<~Z@~]Ku;xCYDF]zwlCG$RXB_ؔÊX&P/F"jD? R\l DLl!EY\۶'5QV>|=L;#tJ5B\>&.l M+D;,js1
+<&[`\Z#K#nkIhG-#[V[ZuE :lr.YA 2Ԛr\(.tڑ~x#1#F>/qF U mMT4N#d>HX][Hs}nk I/t|U._ļ:9tfQ*M^F5\gle}|x=0hQ:AD!*nmHUVo <4+\4'D SV
+Mo!CԀqQXoNZG)˟|SY:ZZ|zdséwxq^$?S%XvuMt E b3>)CuR( \q hC9EVU\Sbu+jRVk}Xb%"u;/Jo=*0+xKs? ߘa 欬I AOx67B!^1ڲ rU(+]9\f _\˶-Yeݥ.@1)%Ԁ * M:kk)C X9"8iwy(JsKuxݢOcTϞã0nuT_\Q%yṗ>68/\l0[U'h"T 6H/%R~ѹZ<H>f^D\c{aOӈ*}=[*)8{cl6nԪx.ȮReqҼ0Ltf(^9mWrU)n
+j v S .d]d~HUR3
+>)[$BLQ)"2VzVx%>ռ#y?yO4(yH'y$(4z.e
+bNٳ{a^OI:t
+[!CD-j.~y8z8ɻZMuɫkޓv-$ҩ~U;=/ꓷn/*TָXz䜯~˭N$^'^r
+Ə5+[`| {c@kEwKZ>0('jU]ԡJ}nbHt(xbNhJvUo=#pcqG)^oTq}T{7|x='B:7sT>Jm3YMYF[,&7-yv~N=G TKLL5<`b츔ˣ|md+
+h
+hqsnp5/ ythl˝Q^/.=8P~XA?y7!ă˨8hkbA>V[m>V oex+q ~'m 6nx_)F[^ޠ^Յ5@g@4s5 _3ٮ-{r ,
+2VA^}$eG1@rP'5hW~:WXw(uwr 2;;αYց _}]81[΃_iKM;W Rў}A+bھ;m;JT#x!ϿRS`J|}+~"zdp[TJz+uk y!>bj|\NQ;o%҆}`ceƌVɖڍV70d^iH<$278qb;tt8ӻ3oQs_-WV|NE>.|N+{'69P̲+Liq^GQY{&`a1c KW0*0,M엵`]i
+b<bܥ_MVM= XիؒX!׉Z az-kJ˷ҰKQ 2(־Hګ[f2ip2S5+?o^|*򠛭 |ŧy7&p_~ˡiLpHԊ%b
+D,@:{1Ve[Ry6so:i^m\=\yY8d
+22.{y8FY @K-er"R/N/mg-55NufW%&uV;86}A~8.pdWL}h
+
+|{U -
+-4Tv?y aBLc,)c#vk))]sB-[޽>z~ W/^i\rͷ${&íu6H^՗6\J$aݔ)n?-ƞ~+ /|ރp= ;f c<LcM7[uVvi"3X4R]uam3r| ib&=8ITr^&^N=5ӊpmEVu+i{Փr9ubutYS,u'|c^- x`/"
+Ыk/nÆV/Th9PL6#!7Ҹk<#c<6rVG,puUʖOq8i=M޷7spn$(H/N3p t/`F8/[w9韻KC>lhF[$oII4~p8i^_kҮIHENG-ޯܮm(<շ⵵;s# Brr >.:a),b"L\EoC3?<d<Аt7c˚ꑹՌDAL6g7\c d$j1ppqR
+A닎K7k8 u10ދVJ
+N95?4p×Y êWS((t
+e^{
+hY<Si]Rg|ʈu\XNJ1|Y)236Q. 5T0?^`G{tufibDžǃ~9Ki7: -^q% )YVTͬ Q#W8,s)y'*u\w=b=lKr CC˧:NgXnBgy[ Vaix¼,t{˾D:IY};݂54TZR"QQp^hU:i:_sIsԠgͲKXeJuجX/5p -M}oVrR/~93Q
+_u<eya;C%rqt1dgZgf W_&tNHfE˸e"_C?D:8՗r9ѠO1+<]%ةr}W ݩ,KV9;ispp9x4&S 9-O.430U-J웪qCCCCЦд;;{..!͡]ΔS2fūd97TBmJ[ %#AtȦ^&^g}CjM2vUSMm'i'qUbIhʓtU}Vg~ ?>lϋ£-;˴nx4[;<}U|ɹPp2vF{I l/v^C,hP5F\ z]0c{$PdC{u<o[1_Hcg4Lg偍.B {4{;O_v
+gb5K.2S{]I<ow; erSH=m)Ҫ]*S} } xu]NMf疃̇ ܉2Z/KyIiv1 [!Khe9oWzO!6댜9FR~%"MX$.޾J;1%w|z2@ =D^vJ`tpvXۥiR(K6%4!`91\PCEAWw7 Eo+LZAG|B8qղ30v {{(YD_J֖CV-HFm7NFq?8QqB))e$
+ oN1<yww:(UqDW݆P07fa¬/JZ#So5 6K*.!4I$B^ͺS<V|\M <Ґ#7[IFE!vm{Jq1zx~uѩܗޢZ}6]>9Tmƃk 7?Chf9wlzt0G8hItjn</Ǣ4El^,e hb ݜyid{L4XżjiUP!hޝPsr349u75:#oo 14FF%`^{A7W٤Dk}ۜNJpNs]Ҥyg_Sw8O(6(w>>0ZVHZ 1zwx?0wֹlhPAj͎/O?`=Usb*`_y|"o=fE&?%W}3C*X6jmڮ3t#H] N~';qeb]zN5+͇y~蚕~!K_bI/7^b%E ;/,iVY4Qf<{Վ-&ϣkέ$=tz5LǞa <E53UnTz7#vzvʧe#:gcݘ_nXN l,6;:R{x6Rie췃7z
+bʌ݌뗠@2Ts5oO?$PoHԽ
+Z '[J-2+4rx^?pPXK5ħ XVnyof~yyK{Р\k>[qHG:TAYYӈlI(x*]tV?iprF . s(!sN* ΁/|~E\[8?evx;EC8Μ{4fc Qwcݼts;)4b4IYB+OÌ~bI}&NvCے-Sd"3Ɵ4>~?piffԽbfhz1OVY~6÷zFdŪI#Ce@[QCz 5$7T*?إ3`tZ|tv[`lݟ
+>:W]'oKu]@aQ5P r2Y}N/StI'9ӎgNfXȷ/ fOsx- 9Zv5#/ܺIv1{ƱWGWЭFu<jS+D{qlc쩆aAEC3HAla]tX]t'^>|E_BPSߟ"zn ZKQ݈B٥@}A(} ZW#'x;RӀU-AٞCpXAxel/vw]aZQsw;n7!24!=nBӡ
+&T_~a>@Dj"Slx!-M;y^oUa 3dEˀۍ̢3\ kMH>Fpk3^yت ٓ'D㸽J S]r 0ڮ&P|48~PM"(+V_µa#ߝI:lxϓǔOq>ri+D}Whu^vf316t95,ihA^A/ԟל] Ux${CaNZ'k]#?L"=215`2orPolJsqs^Q[l`$k\]100^D$hD!QYԳinUwUE᪒ +w^%}[5v%^Aa._~@dX-.7Xqݩ*j^Ό hĐҎYSMldUtj+_RՠroyeXifKNZ,^a[D'Yr0W
+(i) -o*F]S צ*7E!NW`(\n|ZGƶ(bZxh
+TrYQ
+nei G'Rs!
+0KA: ϱnoEF[M?ؼwmjNBx\qV8:rt.vFcg҇ȭ/c vA6puu[;fSt8p
+.WXm&<\ZV_|q{e9gs[?m8ͩ}@ӮDy3Q?##lEWOK7oW \藍Eiޞtɝ^ʝV#r&FR Yfg_Ǔkt/qk(-M-߭:<C}|pt_{~=Ƕpp9 ۳G^3vAVcǛ+1[L[g߲ѫ̤jiڈXjH$sFb'ӤRN7F/hzr߷wj5#-=hFx9U ZM7햞ӱqmLi ˊF]SXίz94f-+8n+hr&e7=~`D
+6*XgގT:߃lq뵅ĻрW7Wozq\׺Uzܘ/zùjG C)sa"3+kKH
+Wr2~:t N :=^9j)kK8nW9zpȭz2;z{[YWe4uMs`;_yiMu5jt4󒺯X#\Cƽ
+`3^ƠkAQ"VZ >VU[컶6(M.m/rv=|~AQg735ծtK$m)rR^]id~y_%RFKwŹtߵOibLd¢R>U%gR:J)Pd'/guod7>{]%e6 cYr҃u{=c؝5^5ڬ1(2dFҁvn@u^)OT_SKf뤦Y/p A VfWr,/\ٙVW1 4l seeƩ`5LHjaZpu_Qٶm|ZAՓ2ϓ>aΥ+><hܲ4%쁥2爃bw%;zv '#5&a{-{*Y8MЂd N63kXNOY- h{̹-~jzY;P,U5uJԶcJmEjK<tD{CR8gஔ&C#/wY. .!/8/l&†4G[tƳWM.Eej!5(BhEURr!oXSF{%Oj>+;Ֆ)O¹b#uk_sSmώjAհʄ/gU+XXOyzpm!).ߑLRrߋpr1esRbӁ|-oOh;2xs f#g5gi253dc2eYB/ޅd&l*K&C }=QohWZS0N}{k
+RD(*AyUz/>ƹr%Pq`IsaӇᛩP`,]ej3ػTCVD~><T,~L9|KK\).0I;4S}WGj]OQZ#4yܫRq)X},XX̼83idmxM΅.xzL56Ba7'!\ __k~s<+ƽ|
+jk81*|I<gɈ̩ZaLUӫ]뭱DDdPԠpr2 $:3Bq\]K%1yoz/PB8F/)LnȮh>Uwi<tˈLKOu G ֮ IY2Z3rG /2'h
+~
+[_0.V>,cLi
+K 8o.t%4ce=.TWk!o!B3fn Mο ϴ;s UI'we| ,gddh\\`,IIA+{ y|+APva~!|`<$+sdׯe;1d`x\Km<se{,,!:>GV] 1)`Eu5 `RtzW\/d7 )gd:g_bٳȳY/QrVjw;CAFY $Eg$h_c
+~
+<}X}0
+0ڰ:BxB_0<:x6&rvm8*\Xt`6~†rF9 O<[N?^<dKς(K/M'rĩ2%ۀx6xo@+ .> 69hݔ*+?MGTp[˜p!ק򥉗S -!c{ ylTY>Q@UT2@Lp5
+ >]Xֳ[CtJҵ֑'!3X#%XşUt[zm3#`g4`>؈L>]F=wZ$`ϲMi-KM>7!I5*QƨK8yaj0z5(f 5ۄ's86N-j:\Fk;59B+!K@ nI-R@} LE@*Ad$xW?eݼǴGґHмp V**z˫50j*0M@L6@d' 
+$3>p[~ܶvY#ѷ@. 74W
+s-BK 0[9`U]sߪdy5_&/Ohacrm*Tct9z@~wD_cc(se_kx_E8dI|;|MPז,oxmAFyn5GCWoa;g^v'Ӥ|'|?g>b KPEАIڈ |Ϻ)} mo[91$\vtiƩ9RR35I5OgsOǛOت#y߿T*sGn!]nwoа݊"4*f ߙI1Wy@5..ͻ;S#tbC~+
+
+n5ʣ{gkoSX;LcEoykYpBɜG.-c1_(94kmZ̥y-g*Ǜ^+GA8Rg`  N >9L|c+/7_-oj" Wݾ B1.̐BVƬMvp:ױCCcx}0:w~d82W?iXכ}^Oq:km8U̚E_oJYo*3dBoOޝcG~s3 \"
+.>9x>Рh
+DtVc T%͟kj=u ֪<T[˥q1$'q8?6Agk-rB|-h3jPA/Xg*kPS;cq4f{TUImr{U [Bi,ْJh;J
+8Epr֓HßoիZuTۏ Lٱnؼ&k=u6Or;#=x.hm_j"ITT*:ӒVJ&RRF^:\UiU/YT*z͇mY nx;`9
+SF륆2R%f>wak9V>B֬^I8mXVf^Y H/ii6Nm=<%gr-I)%dQl3I$n){ЩS7 l̴0gT`VV'nkS**@ftŦԡåI )[U*KG5ŬK lI }Փ0c>V"Ipt^Bg(WbR7LtH?
+X&-hP8&GzL2FӛUxT3p{z`:,䂼 8%LT}@Mpy3>y ==rʰ^aG=Xqllje6lj걥שAxHu5[qWl OipdRDU^ǯl w0^ҢY亜#B毣dBw^s~2뗥^WVdGcAGbKb6Cʢ͞EnːQ 3t4A i,c( IyInpxN9*./8sk*糐N`ƸW қ:2 j]?i:}\-y-zW%wGjՖv'RCiJN'_\KV'Ezo)Ɏ4 " S.2Iitv<.bɌ}j"2R$[!h7ew@p*G} ooPaP\HAuSymh`%zX%WV<)'g+S;Tt@'Lm A{;@%4Q%&^) ޭwwyS"& fpyc(]8^񹎺x WTdzu?Sg# fsW|w|ʰqw0~!%&:D$bj
+]gK{6h
+'!8FlԿ}`fPynaN:^PS⯥ښe얰|5Ep-6 K敒<v<fn/½_Θܫ]gYT#%?!ePc(jT
+ q./ϯUbV2
+\+9s, /_pt)d2v6i7C+?9~M+
+a+_)DKAk1벮12LZ 2! (LYr*UdhcY
+-H>2%}@
+G@_ |` RYo>rbpΟez~Uf.-HZG|`Akއu;
+|^{y7F {]}EH?*9%2@H˗;tvJ1;Rtp((>'ǡaJꞀbW;aԀx@n@J=h Hp$I`ۆf],Z01OtK'^E;4jtܪZV?G@_ iV}p@
+PlJqO}EǾݶ*DoAE&qɨYW?}^,Vm?=/J&;mۿ32(xdnj{H\?2T`cȡGaGM>V?:qpU܏7]9qYy@a1oߍ=ݽ#m%'mz˹յ~/35Ý?)<؏PQG_VIpVBKPc] ׏qF?ݍ-ȁˎ
+| H6356œ6K'vf[ߎݨ8@z.7<ICO@T:bn ^w
+9ΆlD
+9mz8gí]i8!B[P皘>õiho`}B,]6(~M. 1Kb
+QXc4|.{ g=Y9hG
+4I5 <]Vzm?J+6l5ZX𼵒\G]`\!W c!4Ya"vGTAީ6?ڏ1
+E,Zdf@W ^\.khM ׳~$;aKG`qWx>׉A(N\V8Yi*ZS,S&ٜa|߉YNʍtwh+ݩ.ѽW|Ӻ 9 _tyJI^Y/ XJW פ<iua_Uo|&[ :1YdRfe3F77sUәک]TW[ P?ҫOR^RiT\j%)~܊O+)lb?,F{:`/^_wNY[*X=Wv;v[9=gt&1gV} \z-ZIRjc{ʴ)XKO겄
+˦˔CqGyVXY>X\jķw ܗehvU+{ jwb'w5T %vpez-:Y^##u9g=~v⎛o"'%ԥRS0Ny|+^l} ImXRaqpS۠gFwi(txD˻w-z8~(d%5AZ3yi])EjsˊbƖ7Wp*P?VI5s
+spVD{O{ROmOoYqUӢux,֠d8C?dL֋<ںHV+x  f
+B ޱ\N!tΉ;]UNɂѡLJѓGT㌎?qczP{ᵉ X9U(ީu-1oK/ef7RRbIN{f)wv;ӓdfIiJ-N9d&C拞 lJO-_#.A-/c͇ɵiw뤷\I6:+e{:׊y˫y/ qp^+<N)F10`3</telj1B&f!]wGV_4a>~`M'U nZm{=msn-# 3RUWݿO_0;jk6#fM <;蹙fS+SܲJngwlĀs%q87ZyD]48[c8[8e*;j_0zD򌟔n.L%wȯxϔu7#d_9QP$w!JTRIJizqvO̰[wƄ.c/:(*iQLnb}j1 .CA?q"%qsjvDK|}s L J 克,<Xq~5'jE8W :,9b
+Ru~|rsPтfx}^LZEh/Sn6\9Ca 1Y[JY*3ϰ@""w~
+E^+t`PAΞJ$.ַ:VPoAl>(G
+782;:8#
+
+P# ET=OqJм5Up5P#,}eԐ;'W"w}<]eRyxhMzl ^3>_i
+ۿ(?ձ1Ӭ[TQ/rW(:w["=usp=iHxZD6艺˭U{+TgTDmC/ Oz/(zr<ma|lsu=tn^K g`gֲw;zJvo#6jY(iCzdpʓȎubgNԇ+JmFˋZt́^NOϝ8@q=q϶vhVx#k;'5ѳZmr`^Ҫ_Y麗aݥb̦ӝ4Gՙl"g{y{=R'(Sb N MfM{Z4:l}50~S9Ւϫ kN˄n"uD ?[u'HZg1YKwgh)MV 皍F~ Tfѭ:hصW_r7֓.[S?seNJA+"f[<62HGvȟǫ'̠6]t9涙 ${_k/cU4s:jJ&ZeJ7(sM512eS+7pVV{YW{{/-\
+uVhz _#=kN
+^Ίq6~moؚa8WLU^RFArk/gAwUQKmp[u;*Y)_%*e)`%m,;,)2~qF}R5e;f̴תR'1WcaYTVJcՏV5Q̨w@UqLUJʾ@++کWWң+ϴP썵loRMR!Fi ؈Hc"V>N{3ⅅ>=A{.(j#h ^ɨ6H7wfjKC|-[>%*WjR.KRA$yjIS㞈s}O[rK>,9O< (wx`z(^uy,蘭Vk4w~j )P^ڴTCEWr%DҊ~&gqkpVHwxl4}x]Ezw'0eƩb;?%r[c@,Gy.m !9(Ŝњ̵97Ѳ!
+67a囩m,4h@{ׯ7DSS˼qhZmhxViZjIէӻz<- /irSJ{ƈf !t
+rtHI\,DŽ'24$8⤒ΈkMmǴK^|z/FT/8{kRGz,J=K Փ,Ty(mVO`d8wsI,IYXMcvļ]; ufo 6.ů^-U %bx ˷Q_[N#&$ZLa=MKȩF
+A~y2Gz=Re_~lq˥>RVz]$dbbڤ47+$^ůixƗoۚjxdqLJ^2WZ&WjWjulj]K R
+Lxz36mr b4f>2V0j3~JL br2X\%*r6r#2(:fytdWPr.#RԖ<#{n{ܸZ+@)\A2#3=Qƅ}w{Xd`<Uj jT6;SuQK66ޛ[$,pl3[Ze_jPlod0V_Ý<J-챼M1ca.]ĴMI߇!Lw1E $QA-KG5HDَDJpnrVU[!Q|9SsO|nc~We/>avQ7h~Bn³cŴo=f##mO?5N;ʞB
+逜UtW(r, :uXܒx/ZasO`U^`85uovzyX=::ffHMQ2,Ҝ=krD*!8&LqS/WwۦE
+ゲ>HRJ7T=-NS\Poh ;2
+
+HPe2d4]ShPh_1?&"(=%sk!ﴌW1zv,4=O
+AwKKa^
+`o
+\;z -Q1oΊ$.>ԒcCߤb-D<qp|}$+4˖@Z~( B*
+ĥ0Hp|l٧ŲwJ|a=2*2?_ +~K@c?JnAxzQڭ
+[YKJ(B"W8/tF{<(x9uܡ '~H!Kh)W?~K~-_pʸZj /w@4ж.БhWz:o+ 4C!d6՛2fOhX7]W@sQ'nۯW''oW/7ﶶ
+zU5w6T-m)&3vgʜ5BU1{j;rgbIA4Q{26⧭*-}Mچ‘?4OMڔ3tj<ְRU|ɔ_F隣_:O]|%¹]ӾX bUq:P%3lD{nb(zS>v/=jڤPeuX{Ѭǽ_Jnr S?zJW(EyUӛC絓RI| qyfGS
+x5SD;Yy=ÆZ y~ա΋KwOr*l
+{$X\
+ީsLJ!t{5u_d|s)_\ 'ybJ;k֜u7_e5*FEFk C ӣZgbV={nR{<"?dwTe->4Њ,T% $:81򜫵H^l(YFvFvޫn&q1vYVKF,@t}O^~&NJ>dZP<Jʝ+򹝙Us0kftJ^nVO ڛ /֠.Ж-l+u.ExM*?Db>*ěQpF=GZ \4JQ_pt'O~t0 f>ۗ+Q|@ "`2fi$Yڰ1ttŶ1'SýgqQN/N\3mwi}
+1k^-Tc *er`#=nYommdzZma{O3R&{aF
+Z;ԵjJV|vjc#ª؎UJ /1 /&^1̬Q-F:UD!wVgY%n537?p̴rYja.+aUonJ:ML=cF ˘REQE|YVoyx?F=?QRP 2"*WMi jf_%(b
+3f~!"=.0iږ FMlA**j%:%2Fia9JKlm_=UU:P=.ch ;iRf>~IňNDd).4ٚ r@\yϛR<Ens/EyJ۰<wqgg-boVwfTݶxiZ \QǤQATartfDDNץ0k;͙7G)~[׀$,Y7cۇ3K+,aV86&67"ΰVU e2nyfsdOAk*48=*a;,&\4T-'U7iv_lA-VԽ&Q{jҺ>׻IםL1
+c} ?aAWWFs ]LzY3ktM*;W!x\Z{~ /\"590aBoJQOݡA(k)P,hHwȑ(=HZe d>wfUZ5!שCԭ\Wzi; $ylGݦrn
+%q\uQL>aQaҺ a =oy}Aw&7/mST)
+L
+9 d7[Ĵ\  Ad|15XzH}B(&z_yӟոR_чfqݼ(ӊmڨI&R6_KL+heQ~ROm kO>/[`V"D<r8FX<1f0uVKr3ƌ8Va c Q< 3ʺU$iYF5y7ʣOE7^v9Vh
+C.1`^r˵e5Ľm cFlH[ij)NxyAP9\ GGxEG=|jHuW_ku'^n\sw9h"h}7`^6^/d.nzm*u렧:FCJ>L!aF@t&Ïiz_
+}KǰEo[\ۯoW^n+u^rk^{5(̙>Tc#8xND҇AG:i`\C=Mlec [ ھ ! xPPRhZHz<87$
+_O'cIEhf^h&Ձ5 ؕswnjE{ ksK,$DŽfw +`gOsN0=go rKXq;aԿfobqff8$V澶YX c$]`Qz 򔪠5A<1\^[b<^
+h^9:vK>N$Z'H}5`s녃F]
+bh&[:+*jR4@z@! uO
+WA_a_G9~csޗ!Xu3uOnOA(O!6ûw斜|弃BU:~IYWRrY)fsߨky<e(Nw
+;:NEC׺z}!V‚!jF = uN'2ͧt~rh9ˊ=\O{~f57TzgEJ^\[5^"ZC>J j('s:p5.#(vWz"#rnYk,t뛿DE}Wœ|-*`Huk2R<OԹ|DNi6H|J kgAz̻wBn7ݏUYv&kEŞMPU(n/3{Փ
+Va?Hhf;AiƣMaNԳsM\VCWUP-=_b%n>JU+}g9( s`z
+/rT
+͚h6
+ޘ~dNwyuЁl;vTp [XgTЮIE%S-_O+Jt~pON\/KPYps߫f-LQ{za[LV,VfV~ڵW}ݥRwrCaqO~R9 pfw6Tgf~ް{y\8euw=
+UdcmMQ!YѠXJc2Yp5^uA}LvRn7T;;˽Rde^ZCW]TL֕R~ 'NYCk>nj?lHY-hu{O92V?[w YX)J0%b>2j.^~+&WPf ?9x/B謫C?;\-3d1+}ޟ_I!{$2ð֋-$W~+Өd\34;3
+b`,.B'32;nMxЙ[9[&֒V\xw98>T[[n#swڍ}[ec̽1JoÅݴM3Y'O+b]b
+V(ͱ?Pq`x{^Ea||n]ůhWwy '[Yt wQ3\o8%~ݫjSҽfuO*״r(Vi>=]fƮQ|[֮3dagI|m}_%KrIָfYa-6B,Z%D@F*'p靗%Ď];UOca]mQK@ xJك۷z!H@G6K\!?qBhz${(lSB~CC &wZJ!j)VT,G])+rƾnCYY/zY#J8y;PqbvE>`{(K[ḙ{cR1TJCUqꋁM;1 usW*w
+mM/U3rGYXR2 bExm B!m #<MnƗ'­Uj"1F`o9 z}ib26xyohU*&X/Rm{
+kD}@SndP汮\e[Z0%S8KTI)W*\cV1y='GNKOaҗhRۆܥ5츧:Fu[<m+~_e{NnA3eZm}r\`JDg߯"?cE]iW:c2M+bdP32]З mAAΟey-#rpmoI"{Ą? O^@/rD_Zg8$̺V~7|]+v3%9%}u vvsB#c;ʻr~yH@u|2g vr(<}Vaxb9B|k(S8MoS?ykNi,9n̮n~?$߱r{nR;'B۩alFB_Q//V6
+eAu5:dȏ|"kfA{aatNiWZFɺBn!u|3I}e\>eg U t,&WY42U"D5"d3B6 xUp"6ukz.][4waZ1UT{3֞H+H+ D[T{f~ʜ<xT 7X =\g*xdeY2/^U+%}tm,^Jr$lv"l\iw.U {
+ܥcU;]@܄+`c .F?2xYb|r
+ aM>[\lӏ\"Qnb
+yg>򀲠b䣣,`xJR Fo@<`dJ~,
+&Hpic 6& Zk4Zt'xD..9m& h(i@#a ϝ0?[7zncᬭ (]eGȊ{u-Gt;5
+5dg M!1JPLns;NKpp3qρ
+>y6der7\-u9l5TI JK?o㗗?>=
+Bd@I^ut:5 n
+00)0&A+ au
+UiXmS}biؐc(\DS~nuP]t!c`ՓwP^wf>b׿վv0-y]';Iߊkq~܊nU
+G e\#hO j2Q}EfmRjFjUl鯂Sר/jU' 5ڢu"\DIAOůZ!ݡ
+"O{⛧זbr[)և:Mz-:"U՚eAc_a/{ 3-]ǺYUXE9/a7GOV'%rb΅
+U=(GPrQWwL~{>8i ~DQyxzvGq6 f6i3V(H*?l0Kx{UFN:pSFVVC[͕#݃V2.wX|Ek[|M35_H&Ҿ W-ܯVt(kcȔ/\%ίŨNߦӊ^ڍTmc.,oK*?}֔
+rĽ8܌yqȎej !6Y]\~ >_D& I íG7崧4y=hHoG+V-}/zNm7ʧfhrdeɶW9w%#6+)smpe=(rT90҈i܃ #vE Q! @="aI>\L>ܖ2}-^+ܮ<?W)w*{8n<cXsv[ӓEeFsN[r=If۠5[ʫPGu؜2ґ|6)?3x2r蜍\ggK@
+%-1N='3o5
+gʇHlqg9{c䢯j/ ay#AЭ(b3NQFj/
+uլ%G,M1Fܱg]d 1Oy΢yiW0O̱es񰍶`|aqu8Jg-aޑK8bTRng4,ދ1i$89\7b -A<Pr[gk̫2wDz4k?Z0ZY6_9&3E/9f֥ QʵKښQALmm nLJ\* (EBNV|A38nyj*R:VA$`/}rEn (#- .#$d6ȩ_[=
+ƃGrV Vl|T죂h]\+Ǝ鉘WCT1ޛ4%0pKZE;=6ea 9#m(Q|9 G
+T&dMG]1Xoqx_w'T+*?VXisؼj$ Xߴ*zV2hezl!⨸H1 n2i &"cPFp8P*
+B
+o`e
+YDBh ?~%~+մE#KmgD͌a;ݬTʈI r#A Oar}By@" Gh-%O9&l dJ~ZtW na H9'' fuOTk<Eid՞c^ Y)@(O`{ *S5X%^u$я|):)%@N@7@=PQ=jaJWgeR1srP:iV*lS0Ja VyIArߦtaA5J%L)Ç7`0]֌$`QG k
+E䜣("( s AXk=ϟGdХUm4ڋ2@i 7. IĔ$
+Lf#.V d+Ar6&5!2G^IQ;WdoyXUiS|e ;>d!k[A&L1 YwW5~t7xz*_+Z՛#/,P/uhP0Ez0E%4S>t ]F;UR,
+g?URUN?A_WoN+T'c`
+طVo 10קVڳLD_ĿRS뛌͈-G]ۄz17sWţdx{8)V'eߏySfU DS_1O|8ct\vttbhp4=S3u}< Cgۡ-auC:wVc٤E$4ɯL ʡʥ?66ҊgS>^=^|H/7
+x[KtWQ]6 h{޼'ٻf+N %k⦚G'(P$OaR~ͫR|2'!-6+՚YxlB_wmN1<bB qӓ?
+4]}R ApY}zݡ/(wd
+1rV ;sǛYktfpWՌ3LVۙ/z:5"J3drsڇ~
+jSY ӻ +`F 0e!<
+{Hk,*TLu.bnc#mJ]-(3VfZj e3~%KRRJܼ>fh/6/ŗ4)95B=f
+@싴6G8'4"0= X kHLj}'Dk -SSm?Hlp.~NjM
+<]N9pR3ͰMZ z`R + 49<EnMj$zsȮ,~|I89dShbecL,XYCl8yۇջٰ|P#b,Z 뱆Z뚁flC^(gՅ.^ҷdup G&f!j$['
+ 5aV.W.˾ twh[ho6Q!"ɎA2Q;?R mGZgRY[T|iqahiRWbYO$'siʴ'1]wg'رN _9ʃE3oa
+]=FCF U/nteD׆- :X`_+8~|in?TS-.яl\S `;
+!)8LifN$zq"
+)KPPLm@@X9%瀀G #K
+mg
+3[
+ӏ]
+ǥOú`_B͛ȳ]vvȍ~ j9u[]mg#':?Io;xB&Pz@*Y T#:Y܂y7yAuFEؓ,2 Xыv ⚂#H,<@>6hnN7^h |#x?>KR\R'@"HJ2[]W&T< y}.1izgnC _oW'Wpÿwome˻@M,td?4\8U:ޭ);Di5^"s#SH Uۿ ~Y_
+ohr{VH-nPZ<0lF9
+@Y25̃ьWi6U8g+~wtQM5Hz̧BzX.椖SL4?᪹:Tւl=TzK Q_RǍ|2W ԫOERԂ"6;NW$ZoiA2~zltԼPZ>fԛe6V
+]3&VCH}aڶ`aLҬt AQIQ%Z>'='YnxJ|D8
+άuRs6retEsir[|уknuzT~k=Quq۵ [8f3:-Q~[$+NKb"+Bv}Ex%ָXz<gw7
+f cNk2 ~ª3u`Zz.[8;6/R6̛[ͻoMPS| dtkʫ K~q
+C[.ψw
+ ᣆw~#=/竫F(7!_2Z SʏE&LO?&@{ )̛;W4¬.tv4:Qi!_L^-4 "?xzj-pF_1=1zΡ=AЀ;^@:bn[kUdiEb v}v'V~6*QdsfvtцB暄9p zᖠ yD.8͙*1yہ5F/><HݴĈYH8hVkXk)/QIo\৔S6}z?=*ԵK P<>\(s#qz
+uN{a WCcâQK>u$#DLN`pKxg`56[pn W
+TƕBٵƳᇿ x<..oH),Ϯzi̵sEC|\H9;1
+ dAHAn7rC\ҕlһ ,M]^OG"ՇJ
+ʇB٬Zn 0d=|9}CifvJn{j%T`H
+N'{nEnv>.|eNx y7w}Z VLMCO6'G
+z:]/esn
+%WS":5C*};qA^la<-7 )}
+O Sk J9!A?JO]KOaoSy2 rX
+q&NĶ1*M.G 3Q:-0{6Ӂ
+hUvPq1 y@.t-Ae q)MR9<vP5 TJQ_3pRM1xKS{$vi~Ց>*$!uڝIӆa&
+x.(!;GM%>N?ipAbkgt`x?ܿ q Ni ޓJs a
+\Kui ߴ ܿ"n|<uTDTG8
+(!RJ@i2N[兆\Wǀ)V9\O67+]W,|*ltOo2k>; ӫ&3N ?oO2¸q;.9]^`wq|ުr:g\{)2ǫzڿ\uuVߴ&~_Srے}`-W"8筼6c{>mlTkC6:
+{{[(0׺P9&$9t(.erh];tai
+5M/͐Jm4ڨ~mWu-G ->ՆVREW1,UV5XSTL?`/gՏ?y5r(rhw<<Z[7~5CvJ\G>馷*Y{rl͆
+ՂVEtR䜊ϕJmX(sZjSޝY){1J#Ca endstream endobj 6 0 obj [5 0 R] endobj 30 0 obj <</CreationDate(D:20110907131409-05'00')/Creator(Adobe Illustrator CS4)/ModDate(D:20110907131409-05'00')/Producer(Adobe PDF library 9.00)/Title(Comma)>> endobj xref 0 31 0000000000 65535 f
+0000000016 00000 n
+0000000144 00000 n
+0000060426 00000 n
+0000000000 00000 f
+0000062051 00000 n
+0001030335 00000 n
+0000060477 00000 n
+0000060843 00000 n
+0000452218 00000 n
+0000062350 00000 n
+0000062237 00000 n
+0000061153 00000 n
+0000061490 00000 n
+0000061538 00000 n
+0000062121 00000 n
+0000062152 00000 n
+0000062385 00000 n
+0000452291 00000 n
+0000452643 00000 n
+0000453646 00000 n
+0000472585 00000 n
+0000505631 00000 n
+0000571219 00000 n
+0000636807 00000 n
+0000702395 00000 n
+0000767983 00000 n
+0000833571 00000 n
+0000899159 00000 n
+0000964747 00000 n
+0001030358 00000 n
+trailer <</Size 31/Root 1 0 R/Info 30 0 R/ID[<A5BBA0D3A0384226A2F7F92210F9502A><BECB96B23EF74745A9752E48CA5F40B9>]>> startxref 1030527 %%EOF \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/logo/Comma.eps b/ThirdParty/CsvHelper-master/logo/Comma.eps
new file mode 100644
index 0000000..482a973
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/Comma.eps
@@ -0,0 +1,5836 @@
+%!PS-Adobe-3.1 EPSF-3.0
+%ADO_DSC_Encoding: MacOS Roman
+%%Title: Comma.eps
+%%Creator: Adobe Illustrator(R) 14.0
+%%For: Jon Ruprecht
+%%CreationDate: 9/7/11
+%%BoundingBox: 0 0 249 403
+%%HiResBoundingBox: 0 0 248.0957 402.5762
+%%CropBox: 0 0 248.0957 402.5762
+%%LanguageLevel: 2
+%%DocumentData: Clean7Bit
+%ADOBeginClientInjection: DocumentHeader "AI11EPS"
+%%AI8_CreatorVersion: 14.0.0 %AI9_PrintingDataBegin %ADO_BuildNumber: Adobe Illustrator(R) 14.0.0 x367 R agm 4.4890 ct 5.1541 %ADO_ContainsXMP: MainFirst %AI7_Thumbnail: 80 128 8 %%BeginData: 18740 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121811181218111812181118121811181218FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %1118FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211FF18111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118FF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211FF181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212111812121118121211181218FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %1218FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211FF12111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118FF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211FF181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %11181218111812181118121811181218111812181118FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1218FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211FF18121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218FF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211FF121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %11181212111812121118121211181212111812121118FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211FF1811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %113AFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111212FF18121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %11181212111812121118123AFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1212FF181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %1218111812181118121811181218111812181118123AFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111212FF1211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %113BFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111234FF18111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121811181218115FFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1234FF181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1212111812121118121211181212111812121118125FFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111258FF1812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %1283FF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112111211121112111211125FFF12111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212118AFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1283FF181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811AEFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112A8FF1812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12FFFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112AEFF18121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %1118121811181218111812FFFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %3AFFFF121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121234FFFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112115FFFFF1811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %83FFFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121184FFFF18121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %11181212111812121118A8FFFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %FFFFFF181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811181218113AFFFFFF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111234FFFFFF1211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212111812121118121211181212111812121118125F %FFFFFF111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112111211121112111283FFFFFF18111812181118 %121811181218111812181118121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %121811181218111812AEFFFFFF1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %1211121112111211121112111211121112111211121112111211121112A8 %FFFFFF181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118121211181212111812121118121212FD04FF1112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112115FFD04FF18121811181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121811181218111812181118121811181218111812185FFD04FF %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121112111211A8FD04FF1211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %12121118AEFD04FF11121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211121112111212FD05FF18111812 %181118121811181218111812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %1811181218111812181183FD05FF11121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211121112111211121112111283FD %05FF18121211181212111812121118121211181212111812121118121211 %181212111812121118121211181212111812121118121211181212111812 %12111812121118121211181212111812FD06FF1112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12113AFD06FF181218111812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %181118121811181218111812181118121811185FFD06FF11121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211AEFD06FF1211181212111812121118121211181212111812 %121118121211181212111812121118121211181212111812121118121211 %1812121118121211181212111812121118121211181218AEFD06FF343A34 %3B343A343B343A343B343A343B343A343A11121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112111234FD1AFF8318111812181118121811181218111812 %181118121811181218111812181118121811181218111812181118121811 %181218111812AEFD1AFF8311121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121118AEFD1AFF3418121211181212111812121118121211181212111812 %121118121211181212111812121118121211181212111812121118121234 %FD1AFFA81211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121184FD1AFF %AE1118121811181218111812181118121811181218111812181118121811 %1812181118121811181218111812181118121811181218FD1BFF58121112 %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211125FFD1BFF1812121118121211 %181212111812121118121211181212111812121118121211181212111812 %1211181212111812121118121211AFFD1AFF841112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112113AFD1BFF34181218111812181118121811181218 %111812181118121811181218111812181118121811181218111812181118 %12181118121883FD1AFF8412111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111212FD1BFF3B1212111812121118121211181212111812121118121211 %1812121118121211181212111812121118121211181212111812121184FD %1AFF84111211121112111211121112111211121112111211121112111211 %12111211121112111211121112111211121112111211121112A8FD1AFF12 %181218111812181118121811181218111812181118121811181218111812 %18111812181118121811181218111812181118121883FD1AFF5F12111211 %121112111211121112111211121112111211121112111211121112111211 %121112111211121112111211121112111212FD1AFF831812121118121211 %181212111812121118121211181212111812121118121211181212111812 %1211181212111812121118121211AEFD19FFA81211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111211121112111211121134FD1AFF3A1118121811181218111812181118 %121811181218111812181118121811181218111812181118121811181218 %1118121811181218A8FD19FF3A1112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %121112111258FD19FF3B1118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %121211FD18FFA83A11121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %1183FD17FFAE3B1218111812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %5FFD17FFA812111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121118 %A8FD16FF8318121211181212111812121118121211181212111812121118 %121211181212111812121118121211181212111812121118121211181212 %83FD16FF3412111211121112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %58FD15FFAE12181118121811181218111812181118121811181218111812 %181118121811181218111812181118121811181218111812181118121811 %1812FD14FFA83A1112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211FD15FF1812121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1212111812AEFD15FF111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121184FD16FF1812181118121811181218111812181118121811 %181218111812181118121811181218111812181118121811181218111812 %18111812181183FD17FF1112111211121112111211121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %11121112115FFD18FF121118121211181212111812121118121211181212 %111812121118121211181212111812121118121211181212111812121118 %1212115FFD19FF1112111211121112111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %3AFD1AFF1811181218111812181118121811181218111812181118121811 %18121811181218111812181118121811181218111812181118123BFD1BFF %111211121112111211121112111211121112111211121112111211121112 %1112111211121112111211121112111211121112115FFD1CFF1812121118 %121211181212111812121118121211181212111812121118121211181212 %1118121211181212111812121118125FFD1DFF1112111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %12111211121112115FFD1EFF181218111812181118121811181218111812 %181118121811181218111812181118121811181218111812181118121811 %84FD1FFF1112111211121112111211121112111211121112111211121112 %11121112111211121112111211121112111211121184FD20FF1211181212 %111812121118121211181212111812121118121211181212111812121118 %1212111812121118121212AEFD21FF111211121112111211121112111211 %121112111211121112111211121112111211121112111211121112111234 %FD23FF181118121811181218111812181118121811181218111812181118 %121811181218111812181118121811185FFD24FF11121112111211121112 %111211121112111211121112111211121112111211121112111211121112 %111283FD25FF181212111812121118121211181212111812121118121211 %181212111812121118121211181212113BAEFD26FF111211121112111211 %121112111211121112111211121112111211121112111211121112111211 %83FD28FF1812181118121811181218111812181118121811181218111812 %181118121811181218111834FD2AFF111211121112111211121112111211 %1211121112111211121112111211121112111211125FFD2BFF1211181212 %11181212111812121118121211181212111812121118121211181212115F %AEFD2CFF1112111211121112111211121112111211121112111211121112 %11121112111212A8FD2EFF18111812181118121811181218111812181118 %12181118121811181218111883FD30FF1112111211121112111211121112 %1112111211121112111211121112115FA8FD31FF18121211181212111812 %121118121211181212111812121118121258FD34FF111211121112111211 %121112111211121112111211121112115FA8FD35FF181218111812181118 %12181118121811181218111812185FFD38FF111211121112111211121112 %11121112111211121284AFFD39FF12111812121118121211181212111812 %12115FA8FD3CFF1112111211121112111211121112113A83FD3FFF181118 %1218111812181118123B5FFD42FF1112111211121112113A83AFFD44FF18 %12121118348383FD48FF113A5984A8FD4AFFFF %%EndData
+%ADOEndClientInjection: DocumentHeader "AI11EPS"
+%%Pages: 1
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
+%%+ procset Adobe_CoolType_Utility_T42 1.0 0
+%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
+%%+ procset Adobe_CoolType_Core 2.31 0
+%%+ procset Adobe_AGM_Core 2.0 0
+%%+ procset Adobe_AGM_Utils 1.0 0
+%%DocumentFonts:
+%%DocumentNeededFonts:
+%%DocumentNeededFeatures:
+%%DocumentSuppliedFeatures:
+%%DocumentProcessColors: Cyan Yellow
+%%DocumentCustomColors:
+%%CMYKCustomColor:
+%%RGBCustomColor:
+%%EndComments
+
+
+
+
+
+
+%%BeginDefaults
+%%ViewingOrientation: 1 0 0 1
+%%EndDefaults
+%%BeginProlog
+%%BeginResource: procset Adobe_AGM_Utils 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{currentpacking true setpacking}if
+userdict/Adobe_AGM_Utils 75 dict dup begin put
+/bdf
+{bind def}bind def
+/nd{null def}bdf
+/xdf
+{exch def}bdf
+/ldf
+{load def}bdf
+/ddf
+{put}bdf
+/xddf
+{3 -1 roll put}bdf
+/xpt
+{exch put}bdf
+/ndf
+{
+ exch dup where{
+ pop pop pop
+ }{
+ xdf
+ }ifelse
+}def
+/cdndf
+{
+ exch dup currentdict exch known{
+ pop pop
+ }{
+ exch def
+ }ifelse
+}def
+/gx
+{get exec}bdf
+/ps_level
+ /languagelevel where{
+ pop systemdict/languagelevel gx
+ }{
+ 1
+ }ifelse
+def
+/level2
+ ps_level 2 ge
+def
+/level3
+ ps_level 3 ge
+def
+/ps_version
+ {version cvr}stopped{-1}if
+def
+/set_gvm
+{currentglobal exch setglobal}bdf
+/reset_gvm
+{setglobal}bdf
+/makereadonlyarray
+{
+ /packedarray where{pop packedarray
+ }{
+ array astore readonly}ifelse
+}bdf
+/map_reserved_ink_name
+{
+ dup type/stringtype eq{
+ dup/Red eq{
+ pop(_Red_)
+ }{
+ dup/Green eq{
+ pop(_Green_)
+ }{
+ dup/Blue eq{
+ pop(_Blue_)
+ }{
+ dup()cvn eq{
+ pop(Process)
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+}bdf
+/AGMUTIL_GSTATE 22 dict def
+/get_gstate
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_clr_spc currentcolorspace def
+ /AGMUTIL_GSTATE_clr_indx 0 def
+ /AGMUTIL_GSTATE_clr_comps 12 array def
+ mark currentcolor counttomark
+ {AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
+ /AGMUTIL_GSTATE_fnt rootfont def
+ /AGMUTIL_GSTATE_lw currentlinewidth def
+ /AGMUTIL_GSTATE_lc currentlinecap def
+ /AGMUTIL_GSTATE_lj currentlinejoin def
+ /AGMUTIL_GSTATE_ml currentmiterlimit def
+ currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
+ /AGMUTIL_GSTATE_sa currentstrokeadjust def
+ /AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
+ /AGMUTIL_GSTATE_op currentoverprint def
+ /AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
+ /AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
+ currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
+ cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
+ /AGMUTIL_GSTATE_ht currenthalftone def
+ /AGMUTIL_GSTATE_flt currentflat def
+ end
+}def
+/set_gstate
+{
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_clr_spc setcolorspace
+ AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
+ /AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
+ AGMUTIL_GSTATE_fnt setfont
+ AGMUTIL_GSTATE_lw setlinewidth
+ AGMUTIL_GSTATE_lc setlinecap
+ AGMUTIL_GSTATE_lj setlinejoin
+ AGMUTIL_GSTATE_ml setmiterlimit
+ AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
+ AGMUTIL_GSTATE_sa setstrokeadjust
+ AGMUTIL_GSTATE_clr_rnd setcolorrendering
+ AGMUTIL_GSTATE_op setoverprint
+ AGMUTIL_GSTATE_bg cvx setblackgeneration
+ AGMUTIL_GSTATE_ucr cvx setundercolorremoval
+ AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
+ AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
+ AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
+ {
+ currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
+ {
+ mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
+ }if
+ }{
+ AGMUTIL_GSTATE_ht sethalftone
+ }ifelse
+ AGMUTIL_GSTATE_flt setflat
+ end
+}def
+/get_gstate_and_matrix
+{
+ AGMUTIL_GSTATE begin
+ /AGMUTIL_GSTATE_ctm matrix currentmatrix def
+ end
+ get_gstate
+}def
+/set_gstate_and_matrix
+{
+ set_gstate
+ AGMUTIL_GSTATE begin
+ AGMUTIL_GSTATE_ctm setmatrix
+ end
+}def
+/AGMUTIL_str256 256 string def
+/AGMUTIL_src256 256 string def
+/AGMUTIL_dst64 64 string def
+/AGMUTIL_srcLen nd
+/AGMUTIL_ndx nd
+/AGMUTIL_cpd nd
+/capture_cpd{
+ //Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
+}def
+/thold_halftone
+{
+ level3
+ {sethalftone currenthalftone}
+ {
+ dup/HalftoneType get 3 eq
+ {
+ sethalftone currenthalftone
+ }{
+ begin
+ Width Height mul{
+ Thresholds read{pop}if
+ }repeat
+ end
+ currenthalftone
+ }ifelse
+ }ifelse
+}def
+/rdcmntline
+{
+ currentfile AGMUTIL_str256 readline pop
+ (%)anchorsearch{pop}if
+}bdf
+/filter_cmyk
+{
+ dup type/filetype ne{
+ exch()/SubFileDecode filter
+ }{
+ exch pop
+ }
+ ifelse
+ [
+ exch
+ {
+ AGMUTIL_src256 readstring pop
+ dup length/AGMUTIL_srcLen exch def
+ /AGMUTIL_ndx 0 def
+ AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
+ 1 index exch get
+ AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
+ /AGMUTIL_ndx AGMUTIL_ndx 1 add def
+ }for
+ pop
+ AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
+ }
+ bind
+ /exec cvx
+ ]cvx
+}bdf
+/filter_indexed_devn
+{
+ cvi Names length mul names_index add Lookup exch get
+}bdf
+/filter_devn
+{
+ 4 dict begin
+ /srcStr xdf
+ /dstStr xdf
+ dup type/filetype ne{
+ 0()/SubFileDecode filter
+ }if
+ [
+ exch
+ [
+ /devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
+ currentdict/srcStr get/readstring cvx/pop cvx
+ /dup cvx/length cvx 0/gt cvx[
+ Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
+ names_index Names length currentdict/srcStr get length 1 sub{
+ 1/index cvx/exch cvx/get cvx
+ currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
+ Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
+ }for
+ currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
+ ]cvx/if cvx
+ /end cvx
+ ]cvx
+ bind
+ /exec cvx
+ ]cvx
+ end
+}bdf
+/AGMUTIL_imagefile nd
+/read_image_file
+{
+ AGMUTIL_imagefile 0 setfileposition
+ 10 dict begin
+ /imageDict xdf
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ /imbufIdx 0 def
+ /origDataSource imageDict/DataSource get def
+ /origMultipleDataSources imageDict/MultipleDataSources get def
+ /origDecode imageDict/Decode get def
+ /dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
+ imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ {
+ /imbufCnt imageDict/DataSource get length def
+ /imbufs imbufCnt array def
+ 0 1 imbufCnt 1 sub{
+ /imbufIdx xdf
+ imbufs imbufIdx imbufLen string put
+ imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
+ }for
+ DeviceN_PS2{
+ imageDict begin
+ /DataSource[DataSource/devn_sep_datasource cvx]cvx def
+ /MultipleDataSources false def
+ /Decode[0 1]def
+ end
+ }if
+ }{
+ /imbuf imbufLen string def
+ Indexed_DeviceN level3 not and DeviceN_NoneName or{
+ /srcDataStrs[imageDict begin
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi string
+ }repeat
+ end]def
+ imageDict begin
+ /DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
+ /Decode[0 1]def
+ end
+ }{
+ imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
+ imageDict/Decode[0 1]put
+ }ifelse
+ }ifelse
+ imageDict exch
+ load exec
+ imageDict/DataSource origDataSource put
+ imageDict/MultipleDataSources origMultipleDataSources put
+ imageDict/Decode origDecode put
+ end
+}bdf
+/write_image_file
+{
+ begin
+ {(AGMUTIL_imagefile)(w+)file}stopped{
+ false
+ }{
+ Adobe_AGM_Utils/AGMUTIL_imagefile xddf
+ 2 dict begin
+ /imbufLen Width BitsPerComponent mul 7 add 8 idiv def
+ MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
+ /imbuf imbufLen string def
+ }if
+ 1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
+ pop
+ MultipleDataSources{
+ 0 1 DataSource length 1 sub{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exch gx
+ }{
+ /filetype eq{
+ DataSource exch get imbuf readstring pop
+ }{
+ DataSource exch get
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }for
+ }{
+ DataSource type dup
+ /arraytype eq{
+ pop DataSource exec
+ }{
+ /filetype eq{
+ DataSource imbuf readstring pop
+ }{
+ DataSource
+ }ifelse
+ }ifelse
+ AGMUTIL_imagefile exch writestring
+ }ifelse
+ }for
+ end
+ true
+ }ifelse
+ end
+}bdf
+/close_image_file
+{
+ AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
+}def
+statusdict/product known userdict/AGMP_current_show known not and{
+ /pstr statusdict/product get def
+ pstr(HP LaserJet 2200)eq
+ pstr(HP LaserJet 4000 Series)eq or
+ pstr(HP LaserJet 4050 Series )eq or
+ pstr(HP LaserJet 8000 Series)eq or
+ pstr(HP LaserJet 8100 Series)eq or
+ pstr(HP LaserJet 8150 Series)eq or
+ pstr(HP LaserJet 5000 Series)eq or
+ pstr(HP LaserJet 5100 Series)eq or
+ pstr(HP Color LaserJet 4500)eq or
+ pstr(HP Color LaserJet 4600)eq or
+ pstr(HP LaserJet 5Si)eq or
+ pstr(HP LaserJet 1200 Series)eq or
+ pstr(HP LaserJet 1300 Series)eq or
+ pstr(HP LaserJet 4100 Series)eq or
+ {
+ userdict/AGMP_current_show/show load put
+ userdict/show{
+ currentcolorspace 0 get
+ /Pattern eq
+ {false charpath f}
+ {AGMP_current_show}ifelse
+ }put
+ }if
+ currentdict/pstr undef
+}if
+/consumeimagedata
+{
+ begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known not
+ {/MultipleDataSources false def}if
+ MultipleDataSources
+ {
+ DataSource 0 get type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width cvi string def
+ 1 1 Height cvi
+ {
+ pop
+ 0 1 DataSource length 1 sub
+ {
+ DataSource exch get
+ flushbuffer readstring pop pop
+ }for
+ }for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
+ {
+ Width Height mul cvi
+ {
+ 0 1 DataSource length 1 sub
+ {dup DataSource exch gx length exch 0 ne{pop}if}for
+ dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }
+ {
+ /DataSource load type
+ dup/filetype eq
+ {
+ 1 dict begin
+ /flushbuffer Width Decode length 2 idiv mul cvi string def
+ 1 1 Height{pop DataSource flushbuffer readstring pop pop}for
+ end
+ }if
+ dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
+ {
+ Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
+ {
+ DataSource length dup 0 eq
+ {pop exit}if
+ sub dup 0 le
+ {exit}if
+ }loop
+ pop
+ }if
+ }ifelse
+ end
+}bdf
+/addprocs
+{
+ 2{/exec load}repeat
+ 3 1 roll
+ [5 1 roll]bind cvx
+}def
+/modify_halftone_xfer
+{
+ currenthalftone dup length dict copy begin
+ currentdict 2 index known{
+ 1 index load dup length dict copy begin
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end def
+ currentdict end sethalftone
+ }{
+ currentdict/TransferFunction known{
+ /TransferFunction load
+ }{
+ currenttransfer
+ }ifelse
+ addprocs/TransferFunction xdf
+ currentdict end sethalftone
+ pop
+ }ifelse
+}def
+/clonearray
+{
+ dup xcheck exch
+ dup length array exch
+ Adobe_AGM_Core/AGMCORE_tmp -1 ddf
+ {
+ Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf
+ dup type/dicttype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get
+ exch
+ clonedict
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ dup type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_tmp get exch
+ clonearray
+ Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf
+ }if
+ exch dup
+ Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
+ }forall
+ exch{cvx}if
+}bdf
+/clonedict
+{
+ dup length dict
+ begin
+ {
+ dup type/dicttype eq
+ {clonedict}if
+ dup type/arraytype eq
+ {clonearray}if
+ def
+ }forall
+ currentdict
+ end
+}bdf
+/DeviceN_PS2
+{
+ /currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
+}bdf
+/Indexed_DeviceN
+{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne{
+ dup/CSDBase known{
+ /CSDBase get/CSD get_res/Names known
+ }{
+ pop false
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}bdf
+/DeviceN_NoneName
+{
+ /Names where{
+ pop
+ false Names
+ {
+ (None)eq or
+ }forall
+ }{
+ false
+ }ifelse
+}bdf
+/DeviceN_PS2_inRip_seps
+{
+ /AGMCORE_in_rip_sep where
+ {
+ pop dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
+ {
+ /currentcolorspace exch AGMCORE_gput
+ false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+}bdf
+/base_colorspace_type
+{
+ dup type/arraytype eq{0 get}if
+}bdf
+/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+{
+ /pdfmark_5{cleartomark}bind def
+}{
+ /pdfmark_5{pdfmark}bind def
+}ifelse
+/ReadBypdfmark_5
+{
+ currentfile exch 0 exch/SubFileDecode filter
+ /currentdistillerparams where
+ {pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
+ {flushfile cleartomark}
+ {/PUT pdfmark}ifelse
+}bdf
+/ReadBypdfmark_5_string
+{
+ 2 dict begin
+ /makerString exch def string/tmpString exch def
+ {
+ currentfile tmpString readline not{pop exit}if
+ makerString anchorsearch
+ {
+ pop pop cleartomark exit
+ }{
+ 3 copy/PUT pdfmark_5 pop 2 copy(\n)/PUT pdfmark_5
+ }ifelse
+ }loop
+ end
+}bdf
+/xpdfm
+{
+ {
+ dup 0 get/Label eq
+ {
+ aload length[exch 1 add 1 roll/PAGELABEL
+ }{
+ aload pop
+ [{ThisPage}<<5 -2 roll>>/PUT
+ }ifelse
+ pdfmark_5
+ }forall
+}bdf
+/lmt{
+ dup 2 index le{exch}if pop dup 2 index ge{exch}if pop
+}bdf
+/int{
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul exch pop add exch pop
+}bdf
+/ds{
+ Adobe_AGM_Utils begin
+}bdf
+/dt{
+ currentdict Adobe_AGM_Utils eq{
+ end
+ }if
+}bdf
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_AGM_Core 2.0 0
+%%Version: 2.0 0
+%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Core 209 dict dup begin put
+/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
+/AGMCORE_str256 256 string def
+/AGMCORE_save nd
+/AGMCORE_graphicsave nd
+/AGMCORE_c 0 def
+/AGMCORE_m 0 def
+/AGMCORE_y 0 def
+/AGMCORE_k 0 def
+/AGMCORE_cmykbuf 4 array def
+/AGMCORE_screen[currentscreen]cvx def
+/AGMCORE_tmp 0 def
+/AGMCORE_&setgray nd
+/AGMCORE_&setcolor nd
+/AGMCORE_&setcolorspace nd
+/AGMCORE_&setcmykcolor nd
+/AGMCORE_cyan_plate nd
+/AGMCORE_magenta_plate nd
+/AGMCORE_yellow_plate nd
+/AGMCORE_black_plate nd
+/AGMCORE_plate_ndx nd
+/AGMCORE_get_ink_data nd
+/AGMCORE_is_cmyk_sep nd
+/AGMCORE_host_sep nd
+/AGMCORE_avoid_L2_sep_space nd
+/AGMCORE_distilling nd
+/AGMCORE_composite_job nd
+/AGMCORE_producing_seps nd
+/AGMCORE_ps_level -1 def
+/AGMCORE_ps_version -1 def
+/AGMCORE_environ_ok nd
+/AGMCORE_CSD_cache 0 dict def
+/AGMCORE_currentoverprint false def
+/AGMCORE_deltaX nd
+/AGMCORE_deltaY nd
+/AGMCORE_name nd
+/AGMCORE_sep_special nd
+/AGMCORE_err_strings 4 dict def
+/AGMCORE_cur_err nd
+/AGMCORE_current_spot_alias false def
+/AGMCORE_inverting false def
+/AGMCORE_feature_dictCount nd
+/AGMCORE_feature_opCount nd
+/AGMCORE_feature_ctm nd
+/AGMCORE_ConvertToProcess false def
+/AGMCORE_Default_CTM matrix def
+/AGMCORE_Default_PageSize nd
+/AGMCORE_Default_flatness nd
+/AGMCORE_currentbg nd
+/AGMCORE_currentucr nd
+/AGMCORE_pattern_paint_type 0 def
+/knockout_unitsq nd
+currentglobal true setglobal
+[/CSA/Gradient/Procedure]
+{
+ /Generic/Category findresource dup length dict copy/Category defineresource pop
+}forall
+setglobal
+/AGMCORE_key_known
+{
+ where{
+ /Adobe_AGM_Core_Id known
+ }{
+ false
+ }ifelse
+}ndf
+/flushinput
+{
+ save
+ 2 dict begin
+ /CompareBuffer 3 -1 roll def
+ /readbuffer 256 string def
+ mark
+ {
+ currentfile readbuffer{readline}stopped
+ {cleartomark mark}
+ {
+ not
+ {pop exit}
+ if
+ CompareBuffer eq
+ {exit}
+ if
+ }ifelse
+ }loop
+ cleartomark
+ end
+ restore
+}bdf
+/getspotfunction
+{
+ AGMCORE_screen exch pop exch pop
+ dup type/dicttype eq{
+ dup/HalftoneType get 1 eq{
+ /SpotFunction get
+ }{
+ dup/HalftoneType get 2 eq{
+ /GraySpotFunction get
+ }{
+ pop
+ {
+ abs exch abs 2 copy add 1 gt{
+ 1 sub dup mul exch 1 sub dup mul add 1 sub
+ }{
+ dup mul exch dup mul add 1 exch sub
+ }ifelse
+ }bind
+ }ifelse
+ }ifelse
+ }if
+}def
+/np
+{newpath}bdf
+/clp_npth
+{clip np}def
+/eoclp_npth
+{eoclip np}def
+/npth_clp
+{np clip}def
+/graphic_setup
+{
+ /AGMCORE_graphicsave save store
+ concat
+ 0 setgray
+ 0 setlinecap
+ 0 setlinejoin
+ 1 setlinewidth
+ []0 setdash
+ 10 setmiterlimit
+ np
+ false setoverprint
+ false setstrokeadjust
+ //Adobe_AGM_Core/spot_alias gx
+ /Adobe_AGM_Image where{
+ pop
+ Adobe_AGM_Image/spot_alias 2 copy known{
+ gx
+ }{
+ pop pop
+ }ifelse
+ }if
+ /sep_colorspace_dict null AGMCORE_gput
+ 100 dict begin
+ /dictstackcount countdictstack def
+ /showpage{}def
+ mark
+}def
+/graphic_cleanup
+{
+ cleartomark
+ dictstackcount 1 countdictstack 1 sub{end}for
+ end
+ AGMCORE_graphicsave restore
+}def
+/compose_error_msg
+{
+ grestoreall initgraphics
+ /Helvetica findfont 10 scalefont setfont
+ /AGMCORE_deltaY 100 def
+ /AGMCORE_deltaX 310 def
+ clippath pathbbox np pop pop 36 add exch 36 add exch moveto
+ 0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
+ 0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
+ 0 AGMCORE_&setgray
+ gsave 1 AGMCORE_&setgray fill grestore
+ 1 setlinewidth gsave stroke grestore
+ currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
+ /AGMCORE_deltaY 12 def
+ /AGMCORE_tmp 0 def
+ AGMCORE_err_strings exch get
+ {
+ dup 32 eq
+ {
+ pop
+ AGMCORE_str256 0 AGMCORE_tmp getinterval
+ stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
+ {
+ currentpoint AGMCORE_deltaY sub exch pop
+ clippath pathbbox pop pop pop 44 add exch moveto
+ }if
+ AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
+ 0 1 AGMCORE_str256 length 1 sub
+ {
+ AGMCORE_str256 exch 0 put
+ }for
+ /AGMCORE_tmp 0 def
+ }{
+ AGMCORE_str256 exch AGMCORE_tmp xpt
+ /AGMCORE_tmp AGMCORE_tmp 1 add def
+ }ifelse
+ }forall
+}bdf
+/AGMCORE_CMYKDeviceNColorspaces[
+ [/Separation/None/DeviceCMYK{0 0 0}]
+ [/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
+ [/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
+ [/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
+ [/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
+ [/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
+ [/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
+ [/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
+ [/Separation(Cyan)/DeviceCMYK{0 0 0}]
+ [/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
+ [/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
+ [/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
+ [/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
+ [/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
+ [/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
+ [/DeviceCMYK]
+]def
+/ds{
+ Adobe_AGM_Core begin
+ /currentdistillerparams where
+ {
+ pop currentdistillerparams/CoreDistVersion get 5000 lt
+ {<</DetectBlends false>>setdistillerparams}if
+ }if
+ /AGMCORE_ps_version xdf
+ /AGMCORE_ps_level xdf
+ errordict/AGM_handleerror known not{
+ errordict/AGM_handleerror errordict/handleerror get put
+ errordict/handleerror{
+ Adobe_AGM_Core begin
+ $error/newerror get AGMCORE_cur_err null ne and{
+ $error/newerror false put
+ AGMCORE_cur_err compose_error_msg
+ }if
+ $error/newerror true put
+ end
+ errordict/AGM_handleerror get exec
+ }bind put
+ }if
+ /AGMCORE_environ_ok
+ ps_level AGMCORE_ps_level ge
+ ps_version AGMCORE_ps_version ge and
+ AGMCORE_ps_level -1 eq or
+ def
+ AGMCORE_environ_ok not
+ {/AGMCORE_cur_err/AGMCORE_bad_environ def}if
+ /AGMCORE_&setgray systemdict/setgray get def
+ level2{
+ /AGMCORE_&setcolor systemdict/setcolor get def
+ /AGMCORE_&setcolorspace systemdict/setcolorspace get def
+ }if
+ /AGMCORE_currentbg currentblackgeneration def
+ /AGMCORE_currentucr currentundercolorremoval def
+ /AGMCORE_Default_flatness currentflat def
+ /AGMCORE_distilling
+ /product where{
+ pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
+ }{
+ false
+ }ifelse
+ def
+ /AGMCORE_GSTATE AGMCORE_key_known not{
+ /AGMCORE_GSTATE 21 dict def
+ /AGMCORE_tmpmatrix matrix def
+ /AGMCORE_gstack 32 array def
+ /AGMCORE_gstackptr 0 def
+ /AGMCORE_gstacksaveptr 0 def
+ /AGMCORE_gstackframekeys 14 def
+ /AGMCORE_&gsave/gsave ldf
+ /AGMCORE_&grestore/grestore ldf
+ /AGMCORE_&grestoreall/grestoreall ldf
+ /AGMCORE_&save/save ldf
+ /AGMCORE_&setoverprint/setoverprint ldf
+ /AGMCORE_gdictcopy{
+ begin
+ {def}forall
+ end
+ }def
+ /AGMCORE_gput{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ 3 1 roll
+ put
+ }def
+ /AGMCORE_gget{
+ AGMCORE_gstack AGMCORE_gstackptr get
+ exch
+ get
+ }def
+ /gsave{
+ AGMCORE_&gsave
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /grestore{
+ AGMCORE_&grestore
+ AGMCORE_gstackptr 1 sub
+ dup AGMCORE_gstacksaveptr lt{1 add}if
+ dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
+ {/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
+ /AGMCORE_gstackptr exch store
+ }def
+ /grestoreall{
+ AGMCORE_&grestoreall
+ /AGMCORE_gstackptr AGMCORE_gstacksaveptr store
+ }def
+ /save{
+ AGMCORE_&save
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gstackptr 1 add
+ dup 32 ge{limitcheck}if
+ /AGMCORE_gstackptr exch store
+ /AGMCORE_gstacksaveptr AGMCORE_gstackptr store
+ AGMCORE_gstack AGMCORE_gstackptr get
+ AGMCORE_gdictcopy
+ }def
+ /setoverprint{
+ dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
+ }def
+ 0 1 AGMCORE_gstack length 1 sub{
+ AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
+ }for
+ }if
+ level3/AGMCORE_&sysshfill AGMCORE_key_known not and
+ {
+ /AGMCORE_&sysshfill systemdict/shfill get def
+ /AGMCORE_&sysmakepattern systemdict/makepattern get def
+ /AGMCORE_&usrmakepattern/makepattern load def
+ }if
+ /currentcmykcolor[0 0 0 0]AGMCORE_gput
+ /currentstrokeadjust false AGMCORE_gput
+ /currentcolorspace[/DeviceGray]AGMCORE_gput
+ /sep_tint 0 AGMCORE_gput
+ /devicen_tints[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]AGMCORE_gput
+ /sep_colorspace_dict null AGMCORE_gput
+ /devicen_colorspace_dict null AGMCORE_gput
+ /indexed_colorspace_dict null AGMCORE_gput
+ /currentcolor_intent()AGMCORE_gput
+ /customcolor_tint 1 AGMCORE_gput
+ /absolute_colorimetric_crd null AGMCORE_gput
+ /relative_colorimetric_crd null AGMCORE_gput
+ /saturation_crd null AGMCORE_gput
+ /perceptual_crd null AGMCORE_gput
+ currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
+ cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
+ <<
+ /MaxPatternItem currentsystemparams/MaxPatternCache get
+ >>
+ setuserparams
+ end
+}def
+/ps
+{
+ /setcmykcolor where{
+ pop
+ Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
+ }if
+ Adobe_AGM_Core begin
+ /setcmykcolor
+ {
+ 4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
+ 1 sub 4 1 roll
+ 3{
+ 3 index add neg dup 0 lt{
+ pop 0
+ }if
+ 3 1 roll
+ }repeat
+ setrgbcolor pop
+ }ndf
+ /currentcmykcolor
+ {
+ /currentcmykcolor AGMCORE_gget aload pop
+ }ndf
+ /setoverprint
+ {pop}ndf
+ /currentoverprint
+ {false}ndf
+ /AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
+ /AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
+ /AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
+ /AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
+ /AGMCORE_plate_ndx
+ AGMCORE_cyan_plate{
+ 0
+ }{
+ AGMCORE_magenta_plate{
+ 1
+ }{
+ AGMCORE_yellow_plate{
+ 2
+ }{
+ AGMCORE_black_plate{
+ 3
+ }{
+ 4
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_have_reported_unsupported_color_space false def
+ /AGMCORE_report_unsupported_color_space
+ {
+ AGMCORE_have_reported_unsupported_color_space false eq
+ {
+ (Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
+ Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
+ }if
+ }def
+ /AGMCORE_composite_job
+ AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
+ /AGMCORE_in_rip_sep
+ /AGMCORE_in_rip_sep where{
+ pop AGMCORE_in_rip_sep
+ }{
+ AGMCORE_distilling
+ {
+ false
+ }{
+ userdict/Adobe_AGM_OnHost_Seps known{
+ false
+ }{
+ level2{
+ currentpagedevice/Separations 2 copy known{
+ get
+ }{
+ pop pop false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
+ /AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
+ /AGM_preserve_spots
+ /AGM_preserve_spots where{
+ pop AGM_preserve_spots
+ }{
+ AGMCORE_distilling AGMCORE_producing_seps or
+ }ifelse
+ def
+ /AGM_is_distiller_preserving_spotimages
+ {
+ currentdistillerparams/PreserveOverprintSettings known
+ {
+ currentdistillerparams/PreserveOverprintSettings get
+ {
+ currentdistillerparams/ColorConversionStrategy known
+ {
+ currentdistillerparams/ColorConversionStrategy get
+ /sRGB ne
+ }{
+ true
+ }ifelse
+ }{
+ false
+ }ifelse
+ }{
+ false
+ }ifelse
+ }def
+ /convert_spot_to_process where{pop}{
+ /convert_spot_to_process
+ {
+ //Adobe_AGM_Core begin
+ dup map_alias{
+ /Name get exch pop
+ }if
+ dup dup(None)eq exch(All)eq or
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ gsave
+ 1 0 0 0 setcmykcolor currentgray 1 exch sub
+ 0 1 0 0 setcmykcolor currentgray 1 exch sub
+ 0 0 1 0 setcmykcolor currentgray 1 exch sub
+ 0 0 0 1 setcmykcolor currentgray 1 exch sub
+ add add add 0 eq
+ {
+ pop false
+ }{
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ }ifelse
+ grestore
+ }{
+ AGMCORE_distilling
+ {
+ pop AGM_is_distiller_preserving_spotimages not
+ }{
+ //Adobe_AGM_Core/AGMCORE_name xddf
+ false
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 0 eq
+ AGMUTIL_cpd/OverrideSeparations known and
+ {
+ AGMUTIL_cpd/OverrideSeparations get
+ {
+ /HqnSpots/ProcSet resourcestatus
+ {
+ pop pop pop true
+ }if
+ }if
+ }if
+ {
+ AGMCORE_name/HqnSpots/ProcSet findresource/TestSpot gx not
+ }{
+ gsave
+ [/Separation AGMCORE_name/DeviceGray{}]AGMCORE_&setcolorspace
+ false
+ AGMUTIL_cpd/SeparationColorNames 2 copy known
+ {
+ get
+ {AGMCORE_name eq or}forall
+ not
+ }{
+ pop pop pop true
+ }ifelse
+ grestore
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ }ifelse
+ /convert_to_process where{pop}{
+ /convert_to_process
+ {
+ dup length 0 eq
+ {
+ pop false
+ }{
+ AGMCORE_host_sep
+ {
+ dup true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process and}ifelse
+ }
+ forall
+ {
+ true exch
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ (Black)eq or and
+ }forall
+ not
+ }{pop false}ifelse
+ }{
+ false exch
+ {
+ /PhotoshopDuotoneList where{pop false}{true}ifelse
+ {
+ dup(Cyan)eq exch
+ dup(Magenta)eq 3 -1 roll or exch
+ dup(Yellow)eq 3 -1 roll or exch
+ dup(Black)eq 3 -1 roll or
+ {pop}
+ {convert_spot_to_process or}ifelse
+ }
+ {
+ convert_spot_to_process or
+ }
+ ifelse
+ }
+ forall
+ }ifelse
+ }ifelse
+ }def
+ }ifelse
+ /AGMCORE_avoid_L2_sep_space
+ version cvr 2012 lt
+ level2 and
+ AGMCORE_producing_seps not and
+ def
+ /AGMCORE_is_cmyk_sep
+ AGMCORE_cyan_plate AGMCORE_magenta_plate or AGMCORE_yellow_plate or AGMCORE_black_plate or
+ def
+ /AGM_avoid_0_cmyk where{
+ pop AGM_avoid_0_cmyk
+ }{
+ AGM_preserve_spots
+ userdict/Adobe_AGM_OnHost_Seps known
+ userdict/Adobe_AGM_InRip_Seps known or
+ not and
+ }ifelse
+ {
+ /setcmykcolor[
+ {
+ 4 copy add add add 0 eq currentoverprint and{
+ pop 0.0005
+ }if
+ }/exec cvx
+ /AGMCORE_&setcmykcolor load dup type/operatortype ne{
+ /exec cvx
+ }if
+ ]cvx def
+ }if
+ /AGMCORE_IsSeparationAProcessColor
+ {
+ dup(Cyan)eq exch dup(Magenta)eq exch dup(Yellow)eq exch(Black)eq or or or
+ }def
+ AGMCORE_host_sep{
+ /setcolortransfer
+ {
+ AGMCORE_cyan_plate{
+ pop pop pop
+ }{
+ AGMCORE_magenta_plate{
+ 4 3 roll pop pop pop
+ }{
+ AGMCORE_yellow_plate{
+ 4 2 roll pop pop pop
+ }{
+ 4 1 roll pop pop pop
+ }ifelse
+ }ifelse
+ }ifelse
+ settransfer
+ }
+ def
+ /AGMCORE_get_ink_data
+ AGMCORE_cyan_plate{
+ {pop pop pop}
+ }{
+ AGMCORE_magenta_plate{
+ {4 3 roll pop pop pop}
+ }{
+ AGMCORE_yellow_plate{
+ {4 2 roll pop pop pop}
+ }{
+ {4 1 roll pop pop pop}
+ }ifelse
+ }ifelse
+ }ifelse
+ def
+ /AGMCORE_RemoveProcessColorNames
+ {
+ 1 dict begin
+ /filtername
+ {
+ dup/Cyan eq 1 index(Cyan)eq or
+ {pop(_cyan_)}if
+ dup/Magenta eq 1 index(Magenta)eq or
+ {pop(_magenta_)}if
+ dup/Yellow eq 1 index(Yellow)eq or
+ {pop(_yellow_)}if
+ dup/Black eq 1 index(Black)eq or
+ {pop(_black_)}if
+ }def
+ dup type/arraytype eq
+ {[exch{filtername}forall]}
+ {filtername}ifelse
+ end
+ }def
+ level3{
+ /AGMCORE_IsCurrentColor
+ {
+ dup AGMCORE_IsSeparationAProcessColor
+ {
+ AGMCORE_plate_ndx 0 eq
+ {dup(Cyan)eq exch/Cyan eq or}if
+ AGMCORE_plate_ndx 1 eq
+ {dup(Magenta)eq exch/Magenta eq or}if
+ AGMCORE_plate_ndx 2 eq
+ {dup(Yellow)eq exch/Yellow eq or}if
+ AGMCORE_plate_ndx 3 eq
+ {dup(Black)eq exch/Black eq or}if
+ AGMCORE_plate_ndx 4 eq
+ {pop false}if
+ }{
+ gsave
+ false setoverprint
+ current_spot_alias false set_spot_alias
+ 1 1 1 1 6 -1 roll findcmykcustomcolor 1 setcustomcolor
+ set_spot_alias
+ currentgray 1 ne
+ grestore
+ }ifelse
+ }def
+ /AGMCORE_filter_functiondatasource
+ {
+ 5 dict begin
+ /data_in xdf
+ data_in type/stringtype eq
+ {
+ /ncomp xdf
+ /comp xdf
+ /string_out data_in length ncomp idiv string def
+ 0 ncomp data_in length 1 sub
+ {
+ string_out exch dup ncomp idiv exch data_in exch ncomp getinterval comp get 255 exch sub put
+ }for
+ string_out
+ }{
+ string/string_in xdf
+ /string_out 1 string def
+ /component xdf
+ [
+ data_in string_in/readstring cvx
+ [component/get cvx 255/exch cvx/sub cvx string_out/exch cvx 0/exch cvx/put cvx string_out]cvx
+ [/pop cvx()]cvx/ifelse cvx
+ ]cvx/ReusableStreamDecode filter
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingFunction
+ {
+ 2 dict begin
+ /paint? xdf
+ /channel xdf
+ dup type/dicttype eq
+ {
+ begin
+ FunctionType 0 eq
+ {
+ /DataSource channel Range length 2 idiv DataSource AGMCORE_filter_functiondatasource def
+ currentdict/Decode known
+ {/Decode Decode channel 2 mul 2 getinterval def}if
+ paint? not
+ {/Decode[1 1]def}if
+ }if
+ FunctionType 2 eq
+ {
+ paint?
+ {
+ /C0[C0 channel get 1 exch sub]def
+ /C1[C1 channel get 1 exch sub]def
+ }{
+ /C0[1]def
+ /C1[1]def
+ }ifelse
+ }if
+ FunctionType 3 eq
+ {
+ /Functions[Functions{channel paint? AGMCORE_separateShadingFunction}forall]def
+ }if
+ currentdict/Range known
+ {/Range[0 1]def}if
+ currentdict
+ end}{
+ channel get 0 paint? AGMCORE_separateShadingFunction
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShading
+ {
+ 3 -1 roll begin
+ currentdict/Function known
+ {
+ currentdict/Background known
+ {[1 index{Background 3 index get 1 exch sub}{1}ifelse]/Background xdf}if
+ Function 3 1 roll AGMCORE_separateShadingFunction/Function xdf
+ /ColorSpace[/DeviceGray]def
+ }{
+ ColorSpace dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }{
+ ColorSpace dup 1 get AGMCORE_RemoveProcessColorNames 1 exch put
+ }ifelse
+ ColorSpace 0 get/Separation eq
+ {
+ {
+ [1/exch cvx/sub cvx]cvx
+ }{
+ [/pop cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll put
+ pop
+ }{
+ {
+ [exch ColorSpace 1 get length 1 sub exch sub/index cvx 1/exch cvx/sub cvx ColorSpace 1 get length 1 add 1/roll cvx ColorSpace 1 get length{/pop cvx}repeat]cvx
+ }{
+ pop[ColorSpace 1 get length{/pop cvx}repeat cvx 1]cvx
+ }ifelse
+ ColorSpace 3 3 -1 roll bind put
+ }ifelse
+ ColorSpace 2/DeviceGray put
+ }ifelse
+ end
+ }def
+ /AGMCORE_separateShadingDict
+ {
+ dup/ColorSpace get
+ dup type/arraytype ne
+ {[exch]}if
+ dup 0 get/DeviceCMYK eq
+ {
+ exch begin
+ currentdict
+ AGMCORE_cyan_plate
+ {0 true}if
+ AGMCORE_magenta_plate
+ {1 true}if
+ AGMCORE_yellow_plate
+ {2 true}if
+ AGMCORE_black_plate
+ {3 true}if
+ AGMCORE_plate_ndx 4 eq
+ {0 false}if
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ currentdict
+ end exch
+ }if
+ dup 0 get/Separation eq
+ {
+ exch begin
+ ColorSpace 1 get dup/None ne exch/All ne and
+ {
+ ColorSpace 1 get AGMCORE_IsCurrentColor AGMCORE_plate_ndx 4 lt and ColorSpace 1 get AGMCORE_IsSeparationAProcessColor not and
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /Separation
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }ifelse
+ }{
+ currentdict ColorSpace 1 get AGMCORE_IsCurrentColor
+ 0 exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ }if
+ currentdict
+ end exch
+ }if
+ dup 0 get/DeviceN eq
+ {
+ exch begin
+ ColorSpace 1 get convert_to_process
+ {
+ ColorSpace 2 get dup type/arraytype eq{0 get}if/DeviceCMYK eq
+ {
+ /ColorSpace
+ [
+ /DeviceN
+ ColorSpace 1 get
+ /DeviceGray
+ [
+ ColorSpace 3 get/exec cvx
+ 4 AGMCORE_plate_ndx sub -1/roll cvx
+ 4 1/roll cvx
+ 3[/pop cvx]cvx/repeat cvx
+ 1/exch cvx/sub cvx
+ ]cvx
+ ]def
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ currentdict 0 false AGMCORE_separateShading
+ /ColorSpace[/DeviceGray]def
+ }if
+ }ifelse
+ }{
+ currentdict
+ false -1 ColorSpace 1 get
+ {
+ AGMCORE_IsCurrentColor
+ {
+ 1 add
+ exch pop true exch exit
+ }if
+ 1 add
+ }forall
+ exch
+ dup not currentoverprint and
+ {/AGMCORE_ignoreshade true def}if
+ AGMCORE_separateShading
+ }ifelse
+ currentdict
+ end exch
+ }if
+ dup 0 get dup/DeviceCMYK eq exch dup/Separation eq exch/DeviceN eq or or not
+ {
+ exch begin
+ ColorSpace dup type/arraytype eq
+ {0 get}if
+ /DeviceGray ne
+ {
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate not
+ {
+ ColorSpace 0 get/CIEBasedA eq
+ {
+ /ColorSpace[/Separation/_ciebaseda_/DeviceGray{}]def
+ }if
+ ColorSpace 0 get dup/CIEBasedABC eq exch dup/CIEBasedDEF eq exch/DeviceRGB eq or or
+ {
+ /ColorSpace[/DeviceN[/_red_/_green_/_blue_]/DeviceRGB{}]def
+ }if
+ ColorSpace 0 get/CIEBasedDEFG eq
+ {
+ /ColorSpace[/DeviceN[/_cyan_/_magenta_/_yellow_/_black_]/DeviceCMYK{}]def
+ }if
+ currentdict 0 false AGMCORE_separateShading
+ }if
+ }if
+ currentdict
+ end exch
+ }if
+ pop
+ dup/AGMCORE_ignoreshade known
+ {
+ begin
+ /ColorSpace[/Separation(None)/DeviceGray{}]def
+ currentdict end
+ }if
+ }def
+ /shfill
+ {
+ AGMCORE_separateShadingDict
+ dup/AGMCORE_ignoreshade known
+ {pop}
+ {AGMCORE_&sysshfill}ifelse
+ }def
+ /makepattern
+ {
+ exch
+ dup/PatternType get 2 eq
+ {
+ clonedict
+ begin
+ /Shading Shading AGMCORE_separateShadingDict def
+ Shading/AGMCORE_ignoreshade known
+ currentdict end exch
+ {pop<</PatternType 1/PaintProc{pop}/BBox[0 0 1 1]/XStep 1/YStep 1/PaintType 1/TilingType 3>>}if
+ exch AGMCORE_&sysmakepattern
+ }{
+ exch AGMCORE_&usrmakepattern
+ }ifelse
+ }def
+ }if
+ }if
+ AGMCORE_in_rip_sep{
+ /setcustomcolor
+ {
+ exch aload pop
+ dup 7 1 roll inRip_spot_has_ink not {
+ 4{4 index mul 4 1 roll}
+ repeat
+ /DeviceCMYK setcolorspace
+ 6 -2 roll pop pop
+ }{
+ //Adobe_AGM_Core begin
+ /AGMCORE_k xdf/AGMCORE_y xdf/AGMCORE_m xdf/AGMCORE_c xdf
+ end
+ [/Separation 4 -1 roll/DeviceCMYK
+ {dup AGMCORE_c mul exch dup AGMCORE_m mul exch dup AGMCORE_y mul exch AGMCORE_k mul}
+ ]
+ setcolorspace
+ }ifelse
+ setcolor
+ }ndf
+ /setseparationgray
+ {
+ [/Separation(All)/DeviceGray{}]setcolorspace_opt
+ 1 exch sub setcolor
+ }ndf
+ }{
+ /setseparationgray
+ {
+ AGMCORE_&setgray
+ }ndf
+ }ifelse
+ /findcmykcustomcolor
+ {
+ 5 makereadonlyarray
+ }ndf
+ /setcustomcolor
+ {
+ exch aload pop pop
+ 4{4 index mul 4 1 roll}repeat
+ setcmykcolor pop
+ }ndf
+ /has_color
+ /colorimage where{
+ AGMCORE_producing_seps{
+ pop true
+ }{
+ systemdict eq
+ }ifelse
+ }{
+ false
+ }ifelse
+ def
+ /map_index
+ {
+ 1 index mul exch getinterval{255 div}forall
+ }bdf
+ /map_indexed_devn
+ {
+ Lookup Names length 3 -1 roll cvi map_index
+ }bdf
+ /n_color_components
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop 1
+ }{
+ /DeviceCMYK eq{
+ 4
+ }{
+ 3
+ }ifelse
+ }ifelse
+ }bdf
+ level2{
+ /mo/moveto ldf
+ /li/lineto ldf
+ /cv/curveto ldf
+ /knockout_unitsq
+ {
+ 1 setgray
+ 0 0 1 1 rectfill
+ }def
+ level2/setcolorspace AGMCORE_key_known not and{
+ /AGMCORE_&&&setcolorspace/setcolorspace ldf
+ /AGMCORE_ReplaceMappedColor
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ dup 0 get dup/Separation eq
+ {
+ pop
+ dup length array copy
+ dup dup 1 get
+ current_spot_alias
+ {
+ dup map_alias
+ {
+ false set_spot_alias
+ dup 1 exch setsepcolorspace
+ true set_spot_alias
+ begin
+ /sep_colorspace_dict currentdict AGMCORE_gput
+ pop pop pop
+ [
+ /Separation Name
+ CSA map_csa
+ MappedCSA
+ /sep_colorspace_proc load
+ ]
+ dup Name
+ end
+ }if
+ }if
+ map_reserved_ink_name 1 xpt
+ }{
+ /DeviceN eq
+ {
+ dup length array copy
+ dup dup 1 get[
+ exch{
+ current_spot_alias{
+ dup map_alias{
+ /Name get exch pop
+ }if
+ }if
+ map_reserved_ink_name
+ }forall
+ ]1 xpt
+ }if
+ }ifelse
+ end
+ }if
+ }if
+ }def
+ /setcolorspace
+ {
+ dup type dup/arraytype eq exch/packedarraytype eq or
+ {
+ dup 0 get/Indexed eq
+ {
+ AGMCORE_distilling
+ {
+ /PhotoshopDuotoneList where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }{
+ true
+ }ifelse
+ {
+ aload pop 3 -1 roll
+ AGMCORE_ReplaceMappedColor
+ 3 1 roll 4 array astore
+ }if
+ }{
+ AGMCORE_ReplaceMappedColor
+ }ifelse
+ }if
+ DeviceN_PS2_inRip_seps{AGMCORE_&&&setcolorspace}if
+ }def
+ }if
+ }{
+ /adj
+ {
+ currentstrokeadjust{
+ transform
+ 0.25 sub round 0.25 add exch
+ 0.25 sub round 0.25 add exch
+ itransform
+ }if
+ }def
+ /mo{
+ adj moveto
+ }def
+ /li{
+ adj lineto
+ }def
+ /cv{
+ 6 2 roll adj
+ 6 2 roll adj
+ 6 2 roll adj curveto
+ }def
+ /knockout_unitsq
+ {
+ 1 setgray
+ 8 8 1[8 0 0 8 0 0]{<ffffffffffffffff>}image
+ }def
+ /currentstrokeadjust{
+ /currentstrokeadjust AGMCORE_gget
+ }def
+ /setstrokeadjust{
+ /currentstrokeadjust exch AGMCORE_gput
+ }def
+ /setcolorspace
+ {
+ /currentcolorspace exch AGMCORE_gput
+ }def
+ /currentcolorspace
+ {
+ /currentcolorspace AGMCORE_gget
+ }def
+ /setcolor_devicecolor
+ {
+ base_colorspace_type
+ dup/DeviceGray eq{
+ pop setgray
+ }{
+ /DeviceCMYK eq{
+ setcmykcolor
+ }{
+ setrgbcolor
+ }ifelse
+ }ifelse
+ }def
+ /setcolor
+ {
+ currentcolorspace 0 get
+ dup/DeviceGray ne{
+ dup/DeviceCMYK ne{
+ dup/DeviceRGB ne{
+ dup/Separation eq{
+ pop
+ currentcolorspace 3 gx
+ currentcolorspace 2 get
+ }{
+ dup/Indexed eq{
+ pop
+ currentcolorspace 3 get dup type/stringtype eq{
+ currentcolorspace 1 get n_color_components
+ 3 -1 roll map_index
+ }{
+ exec
+ }ifelse
+ currentcolorspace 1 get
+ }{
+ /AGMCORE_cur_err/AGMCORE_invalid_color_space def
+ AGMCORE_invalid_color_space
+ }ifelse
+ }ifelse
+ }if
+ }if
+ }if
+ setcolor_devicecolor
+ }def
+ }ifelse
+ /sop/setoverprint ldf
+ /lw/setlinewidth ldf
+ /lc/setlinecap ldf
+ /lj/setlinejoin ldf
+ /ml/setmiterlimit ldf
+ /dsh/setdash ldf
+ /sadj/setstrokeadjust ldf
+ /gry/setgray ldf
+ /rgb/setrgbcolor ldf
+ /cmyk[
+ /currentcolorspace[/DeviceCMYK]/AGMCORE_gput cvx
+ /setcmykcolor load dup type/operatortype ne{/exec cvx}if
+ ]cvx bdf
+ level3 AGMCORE_host_sep not and{
+ /nzopmsc{
+ 6 dict begin
+ /kk exch def
+ /yy exch def
+ /mm exch def
+ /cc exch def
+ /sum 0 def
+ cc 0 ne{/sum sum 2#1000 or def cc}if
+ mm 0 ne{/sum sum 2#0100 or def mm}if
+ yy 0 ne{/sum sum 2#0010 or def yy}if
+ kk 0 ne{/sum sum 2#0001 or def kk}if
+ AGMCORE_CMYKDeviceNColorspaces sum get setcolorspace
+ sum 0 eq{0}if
+ end
+ setcolor
+ }bdf
+ }{
+ /nzopmsc/cmyk ldf
+ }ifelse
+ /sep/setsepcolor ldf
+ /devn/setdevicencolor ldf
+ /idx/setindexedcolor ldf
+ /colr/setcolor ldf
+ /csacrd/set_csa_crd ldf
+ /sepcs/setsepcolorspace ldf
+ /devncs/setdevicencolorspace ldf
+ /idxcs/setindexedcolorspace ldf
+ /cp/closepath ldf
+ /clp/clp_npth ldf
+ /eclp/eoclp_npth ldf
+ /f/fill ldf
+ /ef/eofill ldf
+ /@/stroke ldf
+ /nclp/npth_clp ldf
+ /gset/graphic_setup ldf
+ /gcln/graphic_cleanup ldf
+ /ct/concat ldf
+ /cf/currentfile ldf
+ /fl/filter ldf
+ /rs/readstring ldf
+ /AGMCORE_def_ht currenthalftone def
+ /clonedict Adobe_AGM_Utils begin/clonedict load end def
+ /clonearray Adobe_AGM_Utils begin/clonearray load end def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+ /getrampcolor
+ {
+ /indx exch def
+ 0 1 NumComp 1 sub
+ {
+ dup
+ Samples exch get
+ dup type/stringtype eq{indx get}if
+ exch
+ Scaling exch get aload pop
+ 3 1 roll
+ mul add
+ }for
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /sssetbackground{
+ aload pop
+ ColorSpaceFamily/Separation eq
+ {sep}
+ {
+ ColorSpaceFamily/DeviceN eq
+ {devn}{setcolor}ifelse
+ }ifelse
+ }bdf
+ /RadialShade
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /r2 xdf
+ /c2y xdf
+ /c2x xdf
+ /r1 xdf
+ /c1y xdf
+ /c1x xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ c1x c2x eq
+ {
+ c1y c2y lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope c2y c1y sub c2x c1x sub div def
+ /theta slope 1 atan def
+ c2x c1x lt c2y c1y ge and{/theta theta 180 sub def}if
+ c2x c1x lt c2y c1y lt and{/theta theta 180 add def}if
+ }ifelse
+ gsave
+ clippath
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax xdf
+ /xMax xdf
+ /yMin xdf
+ /xMin xdf
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ /max{2 copy gt{pop}{exch pop}ifelse}bdf
+ /min{2 copy lt{pop}{exch pop}ifelse}bdf
+ rampdict begin
+ 40 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ c1x c1y translate
+ theta rotate
+ -90 rotate
+ /c2y c1x c2x sub dup mul c1y c2y sub dup mul add sqrt def
+ /c1y 0 def
+ /c1x 0 def
+ /c2x 0 def
+ ext0
+ {
+ 0 getrampcolor
+ c2y r2 add r1 sub 0.0001 lt
+ {
+ c1x c1y r1 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2y r1 add r2 le
+ {
+ c1x c1y r1 0 360 arc
+ fill
+ }
+ {
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r1 neg def
+ /p1y c1y def
+ /p2x r1 def
+ /p2y c1y def
+ p1x p1y moveto p2x p2y lineto p2x yMin lineto p1x yMin lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r1 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y p1x SS1 div neg def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r1 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y p2x SS2 div neg def
+ r1 r2 gt
+ {
+ /L1maxX p1x yMin p1y sub SS1 div add def
+ /L2maxX p2x yMin p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ c1x c2x sub dup mul
+ c1y c2y sub dup mul
+ add 0.5 exp
+ 0 dtransform
+ dup mul exch dup mul add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ /hires xdf
+ hires mul
+ /numpix xdf
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ /xInc c2x c1x sub numsteps div def
+ /yInc c2y c1y sub numsteps div def
+ /rInc r2 r1 sub numsteps div def
+ /cx c1x def
+ /cy c1y def
+ /radius r1 def
+ np
+ xInc 0 eq yInc 0 eq rInc 0 eq and and
+ {
+ 0 getrampcolor
+ cx cy radius 0 360 arc
+ stroke
+ NumSamples 1 sub getrampcolor
+ cx cy radius 72 hires div add 0 360 arc
+ 0 setlinewidth
+ stroke
+ }{
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ cx cy radius 0 360 arc
+ /cx cx xInc add def
+ /cy cy yInc add def
+ /radius radius rInc add def
+ cx cy radius 360 0 arcn
+ eofill
+ rampIndxInc add
+ }repeat
+ pop
+ }ifelse
+ ext1
+ {
+ c2y r2 add r1 lt
+ {
+ c2x c2y r2 0 360 arc
+ fill
+ }{
+ c2y r1 add r2 sub 0.0001 le
+ {
+ c2x c2y r2 360 0 arcn
+ pathbbox
+ /aymax exch def
+ /axmax exch def
+ /aymin exch def
+ /axmin exch def
+ /bxMin xMin axmin min def
+ /byMin yMin aymin min def
+ /bxMax xMax axmax max def
+ /byMax yMax aymax max def
+ bxMin byMin moveto
+ bxMax byMin lineto
+ bxMax byMax lineto
+ bxMin byMax lineto
+ bxMin byMin lineto
+ eofill
+ }{
+ c2x c2y r2 0 360 arc fill
+ r1 r2 eq
+ {
+ /p1x r2 neg def
+ /p1y c2y def
+ /p2x r2 def
+ /p2y c2y def
+ p1x p1y moveto p2x p2y lineto p2x yMax lineto p1x yMax lineto
+ fill
+ }{
+ /AA r2 r1 sub c2y div def
+ AA -1 eq
+ {/theta 89.99 def}
+ {/theta AA 1 AA dup mul sub sqrt div 1 atan def}
+ ifelse
+ /SS1 90 theta add dup sin exch cos div def
+ /p1x r2 SS1 SS1 mul SS1 SS1 mul 1 add div sqrt mul neg def
+ /p1y c2y p1x SS1 div sub def
+ /SS2 90 theta sub dup sin exch cos div def
+ /p2x r2 SS2 SS2 mul SS2 SS2 mul 1 add div sqrt mul def
+ /p2y c2y p2x SS2 div sub def
+ r1 r2 lt
+ {
+ /L1maxX p1x yMax p1y sub SS1 div add def
+ /L2maxX p2x yMax p2y sub SS2 div add def
+ }{
+ /L1maxX 0 def
+ /L2maxX 0 def
+ }ifelse
+ p1x p1y moveto p2x p2y lineto L2maxX L2maxX p2x sub SS2 mul p2y add lineto
+ L1maxX L1maxX p1x sub SS1 mul p1y add lineto
+ fill
+ }ifelse
+ }ifelse
+ }ifelse
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+ /GenStrips
+ {
+ 40 dict begin
+ /ColorSpaceFamily xdf
+ /background xdf
+ /ext1 xdf
+ /ext0 xdf
+ /BBox xdf
+ /y2 xdf
+ /x2 xdf
+ /y1 xdf
+ /x1 xdf
+ /rampdict xdf
+ /setinkoverprint where{pop/setinkoverprint{pop}def}if
+ gsave
+ BBox length 0 gt
+ {
+ np
+ BBox 0 get BBox 1 get moveto
+ BBox 2 get BBox 0 get sub 0 rlineto
+ 0 BBox 3 get BBox 1 get sub rlineto
+ BBox 2 get BBox 0 get sub neg 0 rlineto
+ closepath
+ clip
+ np
+ }if
+ x1 x2 eq
+ {
+ y1 y2 lt{/theta 90 def}{/theta 270 def}ifelse
+ }{
+ /slope y2 y1 sub x2 x1 sub div def
+ /theta slope 1 atan def
+ x2 x1 lt y2 y1 ge and{/theta theta 180 sub def}if
+ x2 x1 lt y2 y1 lt and{/theta theta 180 add def}if
+ }
+ ifelse
+ gsave
+ clippath
+ x1 y1 translate
+ theta rotate
+ {pathbbox}stopped
+ {0 0 0 0}if
+ /yMax exch def
+ /xMax exch def
+ /yMin exch def
+ /xMin exch def
+ grestore
+ xMax xMin eq yMax yMin eq or
+ {
+ grestore
+ end
+ }{
+ rampdict begin
+ 20 dict begin
+ background length 0 gt{background sssetbackground gsave clippath fill grestore}if
+ gsave
+ x1 y1 translate
+ theta rotate
+ /xStart 0 def
+ /xEnd x2 x1 sub dup mul y2 y1 sub dup mul add 0.5 exp def
+ /ySpan yMax yMin sub def
+ /numsteps NumSamples def
+ /rampIndxInc 1 def
+ /subsampling false def
+ xStart 0 transform
+ xEnd 0 transform
+ 3 -1 roll
+ sub dup mul
+ 3 1 roll
+ sub dup mul
+ add 0.5 exp 72 div
+ 0 72 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt
+ 1 index 1 index lt{exch}if pop
+ mul
+ /numpix xdf
+ numpix 0 ne
+ {
+ NumSamples numpix div 0.5 gt
+ {
+ /numsteps numpix 2 div round cvi dup 1 le{pop 2}if def
+ /rampIndxInc NumSamples 1 sub numsteps div def
+ /subsampling true def
+ }if
+ }if
+ ext0
+ {
+ 0 getrampcolor
+ xMin xStart lt
+ {
+ xMin yMin xMin neg ySpan rectfill
+ }if
+ }if
+ /xInc xEnd xStart sub numsteps div def
+ /x xStart def
+ 0
+ numsteps
+ {
+ dup
+ subsampling{round cvi}if
+ getrampcolor
+ x yMin xInc ySpan rectfill
+ /x x xInc add def
+ rampIndxInc add
+ }repeat
+ pop
+ ext1{
+ xMax xEnd gt
+ {
+ xEnd yMin xMax xEnd sub ySpan rectfill
+ }if
+ }if
+ grestore
+ grestore
+ end
+ end
+ end
+ }ifelse
+ }bdf
+}def
+/pt
+{
+ end
+}def
+/dt{
+}def
+/pgsv{
+ //Adobe_AGM_Core/AGMCORE_save save put
+}def
+/pgrs{
+ //Adobe_AGM_Core/AGMCORE_save get restore
+}def
+systemdict/findcolorrendering known{
+ /findcolorrendering systemdict/findcolorrendering get def
+}if
+systemdict/setcolorrendering known{
+ /setcolorrendering systemdict/setcolorrendering get def
+}if
+/test_cmyk_color_plate
+{
+ gsave
+ setcmykcolor currentgray 1 ne
+ grestore
+}def
+/inRip_spot_has_ink
+{
+ dup//Adobe_AGM_Core/AGMCORE_name xddf
+ convert_spot_to_process not
+}def
+/map255_to_range
+{
+ 1 index sub
+ 3 -1 roll 255 div mul add
+}def
+/set_csa_crd
+{
+ /sep_colorspace_dict null AGMCORE_gput
+ begin
+ CSA get_csa_by_name setcolorspace_opt
+ set_crd
+ end
+}
+def
+/map_csa
+{
+ currentdict/MappedCSA known{MappedCSA null ne}{false}ifelse
+ {pop}{get_csa_by_name/MappedCSA xdf}ifelse
+}def
+/setsepcolor
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ dup/sep_tint exch AGMCORE_gput
+ TintProc
+ end
+}def
+/setdevicencolor
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ Names length copy
+ Names length 1 sub -1 0
+ {
+ /devicen_tints AGMCORE_gget 3 1 roll xpt
+ }for
+ TintProc
+ end
+}def
+/sep_colorspace_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ currentdict/Components known{
+ Components aload pop
+ TintMethod/Lab eq{
+ 2{AGMCORE_tmp mul NComponents 1 roll}repeat
+ LMax sub AGMCORE_tmp mul LMax add NComponents 1 roll
+ }{
+ TintMethod/Subtractive eq{
+ NComponents{
+ AGMCORE_tmp mul NComponents 1 roll
+ }repeat
+ }{
+ NComponents{
+ 1 sub AGMCORE_tmp mul 1 add NComponents 1 roll
+ }repeat
+ }ifelse
+ }ifelse
+ }{
+ ColorLookup AGMCORE_tmp ColorLookup length 1 sub mul round cvi get
+ aload pop
+ }ifelse
+ end
+}def
+/sep_colorspace_gray_proc
+{
+ /AGMCORE_tmp exch store
+ /sep_colorspace_dict AGMCORE_gget begin
+ GrayLookup AGMCORE_tmp GrayLookup length 1 sub mul round cvi get
+ end
+}def
+/sep_proc_name
+{
+ dup 0 get
+ dup/DeviceRGB eq exch/DeviceCMYK eq or level2 not and has_color not and{
+ pop[/DeviceGray]
+ /sep_colorspace_gray_proc
+ }{
+ /sep_colorspace_proc
+ }ifelse
+}def
+/setsepcolorspace
+{
+ current_spot_alias{
+ dup begin
+ Name map_alias{
+ exch pop
+ }if
+ end
+ }if
+ dup/sep_colorspace_dict exch AGMCORE_gput
+ begin
+ CSA map_csa
+ /AGMCORE_sep_special Name dup()eq exch(All)eq or store
+ AGMCORE_avoid_L2_sep_space{
+ [/Indexed MappedCSA sep_proc_name 255 exch
+ {255 div}/exec cvx 3 -1 roll[4 1 roll load/exec cvx]cvx
+ ]setcolorspace_opt
+ /TintProc{
+ 255 mul round cvi setcolor
+ }bdf
+ }{
+ MappedCSA 0 get/DeviceCMYK eq
+ currentdict/Components known and
+ AGMCORE_sep_special not and{
+ /TintProc[
+ Components aload pop Name findcmykcustomcolor
+ /exch cvx/setcustomcolor cvx
+ ]cvx bdf
+ }{
+ AGMCORE_host_sep Name(All)eq and{
+ /TintProc{
+ 1 exch sub setseparationgray
+ }bdf
+ }{
+ AGMCORE_in_rip_sep MappedCSA 0 get/DeviceCMYK eq and
+ AGMCORE_host_sep or
+ Name()eq and{
+ /TintProc[
+ MappedCSA sep_proc_name exch 0 get/DeviceCMYK eq{
+ cvx/setcmykcolor cvx
+ }{
+ cvx/setgray cvx
+ }ifelse
+ ]cvx bdf
+ }{
+ AGMCORE_producing_seps MappedCSA 0 get dup/DeviceCMYK eq exch/DeviceGray eq or and AGMCORE_sep_special not and{
+ /TintProc[
+ /dup cvx
+ MappedCSA sep_proc_name cvx exch
+ 0 get/DeviceGray eq{
+ 1/exch cvx/sub cvx 0 0 0 4 -1/roll cvx
+ }if
+ /Name cvx/findcmykcustomcolor cvx/exch cvx
+ AGMCORE_host_sep{
+ AGMCORE_is_cmyk_sep
+ /Name cvx
+ /AGMCORE_IsSeparationAProcessColor load/exec cvx
+ /not cvx/and cvx
+ }{
+ Name inRip_spot_has_ink not
+ }ifelse
+ [
+ /pop cvx 1
+ ]cvx/if cvx
+ /setcustomcolor cvx
+ ]cvx bdf
+ }{
+ /TintProc{setcolor}bdf
+ [/Separation Name MappedCSA sep_proc_name load]setcolorspace_opt
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ set_crd
+ setsepcolor
+ end
+}def
+/additive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1
+ 0 1 numarrays 1 sub
+ {
+ 1 exch add/index cvx
+ c1/get cvx/mul cvx
+ }for
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/subtractive_blend
+{
+ 3 dict begin
+ /numarrays xdf
+ /numcolors xdf
+ 0 1 numcolors 1 sub
+ {
+ /c1 xdf
+ 1 1
+ 0 1 numarrays 1 sub
+ {
+ 1 3 3 -1 roll add/index cvx
+ c1/get cvx/sub cvx/mul cvx
+ }for
+ /sub cvx
+ numarrays 1 add 1/roll cvx
+ }for
+ numarrays[/pop cvx]cvx/repeat cvx
+ end
+}def
+/exec_tint_transform
+{
+ /TintProc[
+ /TintTransform cvx/setcolor cvx
+ ]cvx bdf
+ MappedCSA setcolorspace_opt
+}bdf
+/devn_makecustomcolor
+{
+ 2 dict begin
+ /names_index xdf
+ /Names xdf
+ 1 1 1 1 Names names_index get findcmykcustomcolor
+ /devicen_tints AGMCORE_gget names_index get setcustomcolor
+ Names length{pop}repeat
+ end
+}bdf
+/setdevicencolorspace
+{
+ dup/AliasedColorants known{false}{true}ifelse
+ current_spot_alias and{
+ 7 dict begin
+ /names_index 0 def
+ dup/names_len exch/Names get length def
+ /new_names names_len array def
+ /new_LookupTables names_len array def
+ /alias_cnt 0 def
+ dup/Names get
+ {
+ dup map_alias{
+ exch pop
+ dup/ColorLookup known{
+ dup begin
+ new_LookupTables names_index ColorLookup put
+ end
+ }{
+ dup/Components known{
+ dup begin
+ new_LookupTables names_index Components put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ new_names names_index 3 -1 roll/Name get put
+ /alias_cnt alias_cnt 1 add def
+ }{
+ /name xdf
+ new_names names_index name put
+ dup/LookupTables known{
+ dup begin
+ new_LookupTables names_index LookupTables names_index get put
+ end
+ }{
+ dup begin
+ new_LookupTables names_index[null null null null]put
+ end
+ }ifelse
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ alias_cnt 0 gt{
+ /AliasedColorants true def
+ /lut_entry_len new_LookupTables 0 get dup length 256 ge{0 get length}{length}ifelse def
+ 0 1 names_len 1 sub{
+ /names_index xdf
+ new_LookupTables names_index get dup length 256 ge{0 get length}{length}ifelse lut_entry_len ne{
+ /AliasedColorants false def
+ exit
+ }{
+ new_LookupTables names_index get 0 get null eq{
+ dup/Names get names_index get/name xdf
+ name(Cyan)eq name(Magenta)eq name(Yellow)eq name(Black)eq
+ or or or not{
+ /AliasedColorants false def
+ exit
+ }if
+ }if
+ }ifelse
+ }for
+ lut_entry_len 1 eq{
+ /AliasedColorants false def
+ }if
+ AliasedColorants{
+ dup begin
+ /Names new_names def
+ /LookupTables new_LookupTables def
+ /AliasedColorants true def
+ /NComponents lut_entry_len def
+ /TintMethod NComponents 4 eq{/Subtractive}{/Additive}ifelse def
+ /MappedCSA TintMethod/Additive eq{/DeviceRGB}{/DeviceCMYK}ifelse def
+ currentdict/TTTablesIdx known not{
+ /TTTablesIdx -1 def
+ }if
+ end
+ }if
+ }if
+ end
+ }if
+ dup/devicen_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/AliasedColorants known{
+ AliasedColorants
+ }{
+ false
+ }ifelse
+ dup not{
+ CSA map_csa
+ }if
+ /TintTransform load type/nulltype eq or{
+ /TintTransform[
+ 0 1 Names length 1 sub
+ {
+ /TTTablesIdx TTTablesIdx 1 add def
+ dup LookupTables exch get dup 0 get null eq
+ {
+ 1 index
+ Names exch get
+ dup(Cyan)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0
+ }
+ {
+ dup(Magenta)eq
+ {
+ pop exch
+ LookupTables length exch sub
+ /index cvx
+ 0/exch cvx 0 0
+ }{
+ (Yellow)eq
+ {
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 3 -1/roll cvx 0
+ }{
+ exch
+ LookupTables length exch sub
+ /index cvx
+ 0 0 0 4 -1/roll cvx
+ }ifelse
+ }ifelse
+ }ifelse
+ 5 -1/roll cvx/astore cvx
+ }{
+ dup length 1 sub
+ LookupTables length 4 -1 roll sub 1 add
+ /index cvx/mul cvx/round cvx/cvi cvx/get cvx
+ }ifelse
+ Names length TTTablesIdx add 1 add 1/roll cvx
+ }for
+ Names length[/pop cvx]cvx/repeat cvx
+ NComponents Names length
+ TintMethod/Subtractive eq
+ {
+ subtractive_blend
+ }{
+ additive_blend
+ }ifelse
+ ]cvx bdf
+ }if
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ exec_tint_transform
+ }
+ {
+ currentdict/AliasedColorants known{
+ AliasedColorants not
+ }{
+ false
+ }ifelse
+ 5 dict begin
+ /AvoidAliasedColorants xdf
+ /painted? false def
+ /names_index 0 def
+ /names_len Names length def
+ AvoidAliasedColorants{
+ /currentspotalias current_spot_alias def
+ false set_spot_alias
+ }if
+ Names{
+ AGMCORE_is_cmyk_sep{
+ dup(Cyan)eq AGMCORE_cyan_plate and exch
+ dup(Magenta)eq AGMCORE_magenta_plate and exch
+ dup(Yellow)eq AGMCORE_yellow_plate and exch
+ (Black)eq AGMCORE_black_plate and or or or{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ }if
+ painted?{exit}if
+ }{
+ 0 0 0 0 5 -1 roll findcmykcustomcolor 1 setcustomcolor currentgray 0 eq{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ Names names_index/devn_makecustomcolor cvx
+ ]cvx ddf
+ /painted? true def
+ exit
+ }if
+ }ifelse
+ /names_index names_index 1 add def
+ }forall
+ AvoidAliasedColorants{
+ currentspotalias set_spot_alias
+ }if
+ painted?{
+ /devicen_colorspace_dict AGMCORE_gget/names_index names_index put
+ }{
+ /devicen_colorspace_dict AGMCORE_gget/TintProc[
+ names_len[/pop cvx]cvx/repeat cvx 1/setseparationgray cvx
+ 0 0 0 0/setcmykcolor cvx
+ ]cvx ddf
+ }ifelse
+ end
+ }ifelse
+ }
+ {
+ AGMCORE_in_rip_sep{
+ Names convert_to_process not
+ }{
+ level3
+ }ifelse
+ {
+ [/DeviceN Names MappedCSA/TintTransform load]setcolorspace_opt
+ /TintProc level3 not AGMCORE_in_rip_sep and{
+ [
+ Names/length cvx[/pop cvx]cvx/repeat cvx
+ ]cvx bdf
+ }{
+ {setcolor}bdf
+ }ifelse
+ }{
+ exec_tint_transform
+ }ifelse
+ }ifelse
+ set_crd
+ /AliasedColorants false def
+ end
+}def
+/setindexedcolorspace
+{
+ dup/indexed_colorspace_dict exch AGMCORE_gput
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ currentdict devncs
+ }{
+ 1 currentdict sepcs
+ }ifelse
+ AGMCORE_host_sep{
+ 4 dict begin
+ /compCnt/Names where{pop Names length}{1}ifelse def
+ /NewLookup HiVal 1 add string def
+ 0 1 HiVal{
+ /tableIndex xdf
+ Lookup dup type/stringtype eq{
+ compCnt tableIndex map_index
+ }{
+ exec
+ }ifelse
+ /Names where{
+ pop setdevicencolor
+ }{
+ setsepcolor
+ }ifelse
+ currentgray
+ tableIndex exch
+ 255 mul cvi
+ NewLookup 3 1 roll put
+ }for
+ [/Indexed currentcolorspace HiVal NewLookup]setcolorspace_opt
+ end
+ }{
+ level3
+ {
+ currentdict/Names known{
+ [/Indexed[/DeviceN Names MappedCSA/TintTransform load]HiVal Lookup]setcolorspace_opt
+ }{
+ [/Indexed[/Separation Name MappedCSA sep_proc_name load]HiVal Lookup]setcolorspace_opt
+ }ifelse
+ }{
+ [/Indexed MappedCSA HiVal
+ [
+ currentdict/Names known{
+ Lookup dup type/stringtype eq
+ {/exch cvx CSDBase/CSD get_res/Names get length dup/mul cvx exch/getinterval cvx{255 div}/forall cvx}
+ {/exec cvx}ifelse
+ /TintTransform load/exec cvx
+ }{
+ Lookup dup type/stringtype eq
+ {/exch cvx/get cvx 255/div cvx}
+ {/exec cvx}ifelse
+ CSDBase/CSD get_res/MappedCSA get sep_proc_name exch pop/load cvx/exec cvx
+ }ifelse
+ ]cvx
+ ]setcolorspace_opt
+ }ifelse
+ }ifelse
+ end
+ set_crd
+ }
+ {
+ CSA map_csa
+ AGMCORE_host_sep level2 not and{
+ 0 0 0 0 setcmykcolor
+ }{
+ [/Indexed MappedCSA
+ level2 not has_color not and{
+ dup 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or{
+ pop[/DeviceGray]
+ }if
+ HiVal GrayLookup
+ }{
+ HiVal
+ currentdict/RangeArray known{
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ Lookup exch
+ dup HiVal gt{
+ pop HiVal
+ }if
+ NComponents mul NComponents getinterval{}forall
+ NComponents 1 sub -1 0{
+ RangeArray exch 2 mul 2 getinterval aload pop map255_to_range
+ NComponents 1 roll
+ }for
+ end
+ }bind
+ }{
+ Lookup
+ }ifelse
+ }ifelse
+ ]setcolorspace_opt
+ set_crd
+ }ifelse
+ }ifelse
+ end
+}def
+/setindexedcolor
+{
+ AGMCORE_host_sep{
+ /indexed_colorspace_dict AGMCORE_gget
+ begin
+ currentdict/CSDBase known{
+ CSDBase/CSD get_res begin
+ currentdict/Names known{
+ map_indexed_devn
+ devn
+ }
+ {
+ Lookup 1 3 -1 roll map_index
+ sep
+ }ifelse
+ end
+ }{
+ Lookup MappedCSA/DeviceCMYK eq{4}{1}ifelse 3 -1 roll
+ map_index
+ MappedCSA/DeviceCMYK eq{setcmykcolor}{setgray}ifelse
+ }ifelse
+ end
+ }{
+ level3 not AGMCORE_in_rip_sep and/indexed_colorspace_dict AGMCORE_gget/CSDBase known and{
+ /indexed_colorspace_dict AGMCORE_gget/CSDBase get/CSD get_res begin
+ map_indexed_devn
+ devn
+ end
+ }
+ {
+ setcolor
+ }ifelse
+ }ifelse
+}def
+/ignoreimagedata
+{
+ currentoverprint not{
+ gsave
+ dup clonedict begin
+ 1 setgray
+ /Decode[0 1]def
+ /DataSource<FF>def
+ /MultipleDataSources false def
+ /BitsPerComponent 8 def
+ currentdict end
+ systemdict/image gx
+ grestore
+ }if
+ consumeimagedata
+}def
+/add_res
+{
+ dup/CSD eq{
+ pop
+ //Adobe_AGM_Core begin
+ /AGMCORE_CSD_cache load 3 1 roll put
+ end
+ }{
+ defineresource pop
+ }ifelse
+}def
+/del_res
+{
+ {
+ aload pop exch
+ dup/CSD eq{
+ pop
+ {//Adobe_AGM_Core/AGMCORE_CSD_cache get exch undef}forall
+ }{
+ exch
+ {1 index undefineresource}forall
+ pop
+ }ifelse
+ }forall
+}def
+/get_res
+{
+ dup/CSD eq{
+ pop
+ dup type dup/nametype eq exch/stringtype eq or{
+ AGMCORE_CSD_cache exch get
+ }if
+ }{
+ findresource
+ }ifelse
+}def
+/get_csa_by_name
+{
+ dup type dup/nametype eq exch/stringtype eq or{
+ /CSA get_res
+ }if
+}def
+/paintproc_buf_init
+{
+ /count get 0 0 put
+}def
+/paintproc_buf_next
+{
+ dup/count get dup 0 get
+ dup 3 1 roll
+ 1 add 0 xpt
+ get
+}def
+/cachepaintproc_compress
+{
+ 5 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ /string_size 16000 def
+ /readbuffer string_size string def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ /LZWFilter
+ {
+ exch
+ dup length 0 eq{
+ pop
+ }{
+ ppdict dup length 1 sub 3 -1 roll put
+ }ifelse
+ {string_size}{0}ifelse string
+ }/LZWEncode filter def
+ {
+ ReadFilter readbuffer readstring
+ exch LZWFilter exch writestring
+ not{exit}if
+ }loop
+ LZWFilter closefile
+ ppdict
+ end
+}def
+/cachepaintproc
+{
+ 2 dict begin
+ currentfile exch 0 exch/SubFileDecode filter/ReadFilter exch def
+ /ppdict 20 dict def
+ currentglobal true setglobal
+ ppdict 1 array dup 0 1 put/count xpt
+ setglobal
+ {
+ ReadFilter 16000 string readstring exch
+ ppdict dup length 1 sub 3 -1 roll put
+ not{exit}if
+ }loop
+ ppdict dup dup length 1 sub()put
+ end
+}def
+/make_pattern
+{
+ exch clonedict exch
+ dup matrix currentmatrix matrix concatmatrix 0 0 3 2 roll itransform
+ exch 3 index/XStep get 1 index exch 2 copy div cvi mul sub sub
+ exch 3 index/YStep get 1 index exch 2 copy div cvi mul sub sub
+ matrix translate exch matrix concatmatrix
+ 1 index begin
+ BBox 0 get XStep div cvi XStep mul/xshift exch neg def
+ BBox 1 get YStep div cvi YStep mul/yshift exch neg def
+ BBox 0 get xshift add
+ BBox 1 get yshift add
+ BBox 2 get xshift add
+ BBox 3 get yshift add
+ 4 array astore
+ /BBox exch def
+ [xshift yshift/translate load null/exec load]dup
+ 3/PaintProc load put cvx/PaintProc exch def
+ end
+ gsave 0 setgray
+ makepattern
+ grestore
+}def
+/set_pattern
+{
+ dup/PatternType get 1 eq{
+ dup/PaintType get 1 eq{
+ currentoverprint sop[/DeviceGray]setcolorspace 0 setgray
+ }if
+ }if
+ setpattern
+}def
+/setcolorspace_opt
+{
+ dup currentcolorspace eq{pop}{setcolorspace}ifelse
+}def
+/updatecolorrendering
+{
+ currentcolorrendering/RenderingIntent known{
+ currentcolorrendering/RenderingIntent get
+ }
+ {
+ Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd AGMCORE_gget dup null eq
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd AGMCORE_gget dup null eq
+ }
+ {
+ /perceptual_crd AGMCORE_gget dup null eq
+ }ifelse
+ }ifelse
+ }ifelse
+ {
+ pop null
+ }
+ {
+ /RenderingIntent known{null}{Intent}ifelse
+ }ifelse
+ }ifelse
+ Intent ne{
+ Intent/ColorRendering{findresource}stopped
+ {
+ pop pop systemdict/findcolorrendering known
+ {
+ Intent findcolorrendering
+ {
+ /ColorRendering findresource true exch
+ }
+ {
+ /ColorRendering findresource
+ product(Xerox Phaser 5400)ne
+ exch
+ }ifelse
+ dup Intent/AbsoluteColorimetric eq
+ {
+ /absolute_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/RelativeColorimetric eq
+ {
+ /relative_colorimetric_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Saturation eq
+ {
+ /saturation_crd exch AGMCORE_gput
+ }
+ {
+ Intent/Perceptual eq
+ {
+ /perceptual_crd exch AGMCORE_gput
+ }
+ {
+ pop
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ 1 index{exch}{pop}ifelse
+ }
+ {false}ifelse
+ }
+ {true}ifelse
+ {
+ dup begin
+ currentdict/TransformPQR known{
+ currentdict/TransformPQR get aload pop
+ 3{{}eq 3 1 roll}repeat or or
+ }
+ {true}ifelse
+ currentdict/MatrixPQR known{
+ currentdict/MatrixPQR get aload pop
+ 1.0 eq 9 1 roll 0.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 1.0 eq 9 1 roll 0.0 eq 9 1 roll
+ 0.0 eq 9 1 roll 0.0 eq 9 1 roll 1.0 eq
+ and and and and and and and and
+ }
+ {true}ifelse
+ end
+ or
+ {
+ clonedict begin
+ /TransformPQR[
+ {4 -1 roll 3 get dup 3 1 roll sub 5 -1 roll 3 get 3 -1 roll sub div
+ 3 -1 roll 3 get 3 -1 roll 3 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 4 get dup 3 1 roll sub 5 -1 roll 4 get 3 -1 roll sub div
+ 3 -1 roll 4 get 3 -1 roll 4 get dup 4 1 roll sub mul add}bind
+ {4 -1 roll 5 get dup 3 1 roll sub 5 -1 roll 5 get 3 -1 roll sub div
+ 3 -1 roll 5 get 3 -1 roll 5 get dup 4 1 roll sub mul add}bind
+ ]def
+ /MatrixPQR[0.8951 -0.7502 0.0389 0.2664 1.7135 -0.0685 -0.1614 0.0367 1.0296]def
+ /RangePQR[-0.3227950745 2.3229645538 -1.5003771057 3.5003465881 -0.1369979095 2.136967392]def
+ currentdict end
+ }if
+ setcolorrendering_opt
+ }if
+ }if
+}def
+/set_crd
+{
+ AGMCORE_host_sep not level2 and{
+ currentdict/ColorRendering known{
+ ColorRendering/ColorRendering{findresource}stopped not{setcolorrendering_opt}if
+ }{
+ currentdict/Intent known{
+ updatecolorrendering
+ }if
+ }ifelse
+ currentcolorspace dup type/arraytype eq
+ {0 get}if
+ /DeviceRGB eq
+ {
+ currentdict/UCR known
+ {/UCR}{/AGMCORE_currentucr}ifelse
+ load setundercolorremoval
+ currentdict/BG known
+ {/BG}{/AGMCORE_currentbg}ifelse
+ load setblackgeneration
+ }if
+ }if
+}def
+/set_ucrbg
+{
+ dup null eq{pop/AGMCORE_currentbg load}{/Procedure get_res}ifelse setblackgeneration
+ dup null eq{pop/AGMCORE_currentucr load}{/Procedure get_res}ifelse setundercolorremoval
+}def
+/setcolorrendering_opt
+{
+ dup currentcolorrendering eq{
+ pop
+ }{
+ product(HP Color LaserJet 2605)anchorsearch{
+ pop pop pop
+ }{
+ pop
+ clonedict
+ begin
+ /Intent Intent def
+ currentdict
+ end
+ setcolorrendering
+ }ifelse
+ }ifelse
+}def
+/cpaint_gcomp
+{
+ convert_to_process//Adobe_AGM_Core/AGMCORE_ConvertToProcess xddf
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get not
+ {
+ (%end_cpaint_gcomp)flushinput
+ }if
+}def
+/cpaint_gsep
+{
+ //Adobe_AGM_Core/AGMCORE_ConvertToProcess get
+ {
+ (%end_cpaint_gsep)flushinput
+ }if
+}def
+/cpaint_gend
+{np}def
+/T1_path
+{
+ currentfile token pop currentfile token pop mo
+ {
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 exch rlineto
+ currentfile token pop dup type/stringtype eq
+ {pop exit}if
+ 0 rlineto
+ }loop
+}def
+/T1_gsave
+ level3
+ {/clipsave}
+ {/gsave}ifelse
+ load def
+/T1_grestore
+ level3
+ {/cliprestore}
+ {/grestore}ifelse
+ load def
+/set_spot_alias_ary
+{
+ dup inherit_aliases
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry xddf
+}def
+/set_spot_normalization_ary
+{
+ dup inherit_aliases
+ dup length
+ /AGMCORE_SpotAliasAry where{pop AGMCORE_SpotAliasAry length add}if
+ array
+ //Adobe_AGM_Core/AGMCORE_SpotAliasAry2 xddf
+ /AGMCORE_SpotAliasAry where{
+ pop
+ AGMCORE_SpotAliasAry2 0 AGMCORE_SpotAliasAry putinterval
+ AGMCORE_SpotAliasAry length
+ }{0}ifelse
+ AGMCORE_SpotAliasAry2 3 1 roll exch putinterval
+ true set_spot_alias
+}def
+/inherit_aliases
+{
+ {dup/Name get map_alias{/CSD put}{pop}ifelse}forall
+}def
+/set_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias 3 -1 roll put
+ }{
+ pop
+ }ifelse
+}def
+/current_spot_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ /AGMCORE_current_spot_alias get
+ }{
+ false
+ }ifelse
+}def
+/map_alias
+{
+ /AGMCORE_SpotAliasAry2 where{
+ begin
+ /AGMCORE_name xdf
+ false
+ AGMCORE_SpotAliasAry2{
+ dup/Name get AGMCORE_name eq{
+ /CSD get/CSD get_res
+ exch pop true
+ exit
+ }{
+ pop
+ }ifelse
+ }forall
+ end
+ }{
+ pop false
+ }ifelse
+}bdf
+/spot_alias
+{
+ true set_spot_alias
+ /AGMCORE_&setcustomcolor AGMCORE_key_known not{
+ //Adobe_AGM_Core/AGMCORE_&setcustomcolor/setcustomcolor load put
+ }if
+ /customcolor_tint 1 AGMCORE_gput
+ //Adobe_AGM_Core begin
+ /setcustomcolor
+ {
+ //Adobe_AGM_Core begin
+ dup/customcolor_tint exch AGMCORE_gput
+ 1 index aload pop pop 1 eq exch 1 eq and exch 1 eq and exch 1 eq and not
+ current_spot_alias and{1 index 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /sep_colorspace_dict AGMCORE_gget null ne
+ {/sep_colorspace_dict AGMCORE_gget/ForeignContent known not}{false}ifelse
+ 3 1 roll 2 index{
+ exch pop/sep_tint AGMCORE_gget exch
+ }if
+ mark 3 1 roll
+ setsepcolorspace
+ counttomark 0 ne{
+ setsepcolor
+ }if
+ pop
+ not{/sep_tint 1.0 AGMCORE_gput/sep_colorspace_dict AGMCORE_gget/ForeignContent true put}if
+ pop
+ true set_spot_alias
+ }{
+ AGMCORE_&setcustomcolor
+ }ifelse
+ end
+ }bdf
+ end
+}def
+/begin_feature
+{
+ Adobe_AGM_Core/AGMCORE_feature_dictCount countdictstack put
+ count Adobe_AGM_Core/AGMCORE_feature_opCount 3 -1 roll put
+ {Adobe_AGM_Core/AGMCORE_feature_ctm matrix currentmatrix put}if
+}def
+/end_feature
+{
+ 2 dict begin
+ /spd/setpagedevice load def
+ /setpagedevice{get_gstate spd set_gstate}def
+ stopped{$error/newerror false put}if
+ end
+ count Adobe_AGM_Core/AGMCORE_feature_opCount get sub dup 0 gt{{pop}repeat}{pop}ifelse
+ countdictstack Adobe_AGM_Core/AGMCORE_feature_dictCount get sub dup 0 gt{{end}repeat}{pop}ifelse
+ {Adobe_AGM_Core/AGMCORE_feature_ctm get setmatrix}if
+}def
+/set_negative
+{
+ //Adobe_AGM_Core begin
+ /AGMCORE_inverting exch def
+ level2{
+ currentpagedevice/NegativePrint known AGMCORE_distilling not and{
+ currentpagedevice/NegativePrint get//Adobe_AGM_Core/AGMCORE_inverting get ne{
+ true begin_feature true{
+ <</NegativePrint//Adobe_AGM_Core/AGMCORE_inverting get>>setpagedevice
+ }end_feature
+ }if
+ /AGMCORE_inverting false def
+ }if
+ }if
+ AGMCORE_inverting{
+ [{1 exch sub}/exec load dup currenttransfer exch]cvx bind settransfer
+ AGMCORE_distilling{
+ erasepage
+ }{
+ gsave np clippath 1/setseparationgray where{pop setseparationgray}{setgray}ifelse
+ /AGMIRS_&fill where{pop AGMIRS_&fill}{fill}ifelse grestore
+ }ifelse
+ }if
+ end
+}def
+/lw_save_restore_override{
+ /md where{
+ pop
+ md begin
+ initializepage
+ /initializepage{}def
+ /pmSVsetup{}def
+ /endp{}def
+ /pse{}def
+ /psb{}def
+ /orig_showpage where
+ {pop}
+ {/orig_showpage/showpage load def}
+ ifelse
+ /showpage{orig_showpage gR}def
+ end
+ }if
+}def
+/pscript_showpage_override{
+ /NTPSOct95 where
+ {
+ begin
+ showpage
+ save
+ /showpage/restore load def
+ /restore{exch pop}def
+ end
+ }if
+}def
+/driver_media_override
+{
+ /md where{
+ pop
+ md/initializepage known{
+ md/initializepage{}put
+ }if
+ md/rC known{
+ md/rC{4{pop}repeat}put
+ }if
+ }if
+ /mysetup where{
+ /mysetup[1 0 0 1 0 0]put
+ }if
+ Adobe_AGM_Core/AGMCORE_Default_CTM matrix currentmatrix put
+ level2
+ {Adobe_AGM_Core/AGMCORE_Default_PageSize currentpagedevice/PageSize get put}if
+}def
+/capture_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup Pscript_Win_Data/mysetup get put
+ }if
+ }if
+}def
+/restore_mysetup
+{
+ /Pscript_Win_Data where{
+ pop
+ Pscript_Win_Data/mysetup known{
+ Adobe_AGM_Core/save_mysetup known{
+ Pscript_Win_Data/mysetup Adobe_AGM_Core/save_mysetup get put
+ Adobe_AGM_Core/save_mysetup undef
+ }if
+ }if
+ }if
+}def
+/driver_check_media_override
+{
+ /PrepsDict where
+ {pop}
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get matrix currentmatrix ne
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get type/arraytype eq
+ {
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 0 get currentpagedevice/PageSize get 0 get eq and
+ Adobe_AGM_Core/AGMCORE_Default_PageSize get 1 get currentpagedevice/PageSize get 1 get eq and
+ }if
+ {
+ Adobe_AGM_Core/AGMCORE_Default_CTM get setmatrix
+ }if
+ }ifelse
+}def
+AGMCORE_err_strings begin
+ /AGMCORE_bad_environ(Environment not satisfactory for this job. Ensure that the PPD is correct or that the PostScript level requested is supported by this printer. )def
+ /AGMCORE_color_space_onhost_seps(This job contains colors that will not separate with on-host methods. )def
+ /AGMCORE_invalid_color_space(This job contains an invalid color space. )def
+end
+/set_def_ht
+{AGMCORE_def_ht sethalftone}def
+/set_def_flat
+{AGMCORE_Default_flatness setflat}def
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+%%BeginResource: procset Adobe_CoolType_Core 2.31 0 %%Copyright: Copyright 1997-2006 Adobe Systems Incorporated. All Rights Reserved. %%Version: 2.31 0 10 dict begin /Adobe_CoolType_Passthru currentdict def /Adobe_CoolType_Core_Defined userdict/Adobe_CoolType_Core known def Adobe_CoolType_Core_Defined {/Adobe_CoolType_Core userdict/Adobe_CoolType_Core get def} if userdict/Adobe_CoolType_Core 70 dict dup begin put /Adobe_CoolType_Version 2.31 def /Level2? systemdict/languagelevel known dup {pop systemdict/languagelevel get 2 ge} if def Level2? not { /currentglobal false def /setglobal/pop load def /gcheck{pop false}bind def /currentpacking false def /setpacking/pop load def /SharedFontDirectory 0 dict def } if currentpacking true setpacking currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def end setglobal currentglobal true setglobal userdict/Adobe_CoolType_GVMFonts known not {userdict/Adobe_CoolType_GVMFonts 10 dict put} if setglobal currentglobal false setglobal userdict/Adobe_CoolType_LVMFonts known not {userdict/Adobe_CoolType_LVMFonts 10 dict put} if setglobal /ct_VMDictPut { dup gcheck{Adobe_CoolType_GVMFonts}{Adobe_CoolType_LVMFonts}ifelse 3 1 roll put }bind def /ct_VMDictUndef { dup Adobe_CoolType_GVMFonts exch known {Adobe_CoolType_GVMFonts exch undef} { dup Adobe_CoolType_LVMFonts exch known {Adobe_CoolType_LVMFonts exch undef} {pop} ifelse }ifelse }bind def /ct_str1 1 string def /ct_xshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_yshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { _ct_x _ct_y moveto 0 exch rmoveto } ifelse /_ct_i _ct_i 1 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /ct_xyshow { /_ct_na exch def /_ct_i 0 def currentpoint /_ct_y exch def /_ct_x exch def { pop pop ct_str1 exch 0 exch put ct_str1 show {_ct_na _ct_i get}stopped {pop pop} { {_ct_na _ct_i 1 add get}stopped {pop pop pop} { _ct_x _ct_y moveto rmoveto } ifelse } ifelse /_ct_i _ct_i 2 add def currentpoint /_ct_y exch def /_ct_x exch def } exch @cshow }bind def /xsh{{@xshow}stopped{Adobe_CoolType_Data begin ct_xshow end}if}bind def /ysh{{@yshow}stopped{Adobe_CoolType_Data begin ct_yshow end}if}bind def /xysh{{@xyshow}stopped{Adobe_CoolType_Data begin ct_xyshow end}if}bind def currentglobal true setglobal /ct_T3Defs { /BuildChar { 1 index/Encoding get exch get 1 index/BuildGlyph get exec }bind def /BuildGlyph { exch begin GlyphProcs exch get exec end }bind def }bind def setglobal /@_SaveStackLevels { Adobe_CoolType_Data begin /@vmState currentglobal def false setglobal @opStackCountByLevel @opStackLevel 2 copy known not { 2 copy 3 dict dup/args 7 index 5 add array put put get } { get dup/args get dup length 3 index lt { dup length 5 add array exch 1 index exch 0 exch putinterval 1 index exch/args exch put } {pop} ifelse } ifelse begin count 1 sub 1 index lt {pop count} if dup/argCount exch def dup 0 gt { args exch 0 exch getinterval astore pop } {pop} ifelse count /restCount exch def end /@opStackLevel @opStackLevel 1 add def countdictstack 1 sub @dictStackCountByLevel exch @dictStackLevel exch put /@dictStackLevel @dictStackLevel 1 add def @vmState setglobal end }bind def /@_RestoreStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def @opStackCountByLevel @opStackLevel get begin count restCount sub dup 0 gt {{pop}repeat} {pop} ifelse args 0 argCount getinterval{}forall end /@dictStackLevel @dictStackLevel 1 sub def @dictStackCountByLevel @dictStackLevel get end countdictstack exch sub dup 0 gt {{end}repeat} {pop} ifelse }bind def /@_PopStackLevels { Adobe_CoolType_Data begin /@opStackLevel @opStackLevel 1 sub def /@dictStackLevel @dictStackLevel 1 sub def end }bind def /@Raise { exch cvx exch errordict exch get exec stop }bind def /@ReRaise { cvx $error/errorname get errordict exch get exec stop }bind def /@Stopped { 0 @#Stopped }bind def /@#Stopped { @_SaveStackLevels stopped {@_RestoreStackLevels true} {@_PopStackLevels false} ifelse }bind def /@Arg { Adobe_CoolType_Data begin @opStackCountByLevel @opStackLevel 1 sub get begin args exch argCount 1 sub exch sub get end end }bind def currentglobal true setglobal /CTHasResourceForAllBug Level2? { 1 dict dup /@shouldNotDisappearDictValue true def Adobe_CoolType_Data exch/@shouldNotDisappearDict exch put begin count @_SaveStackLevels {(*){pop stop}128 string/Category resourceforall} stopped pop @_RestoreStackLevels currentdict Adobe_CoolType_Data/@shouldNotDisappearDict get dup 3 1 roll ne dup 3 1 roll { /@shouldNotDisappearDictValue known { { end currentdict 1 index eq {pop exit} if } loop } if } { pop end } ifelse } {false} ifelse def true setglobal /CTHasResourceStatusBug Level2? { mark {/steveamerige/Category resourcestatus} stopped {cleartomark true} {cleartomark currentglobal not} ifelse } {false} ifelse def setglobal /CTResourceStatus { mark 3 1 roll /Category findresource begin ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse end }bind def /CTWorkAroundBugs { Level2? { /cid_PreLoad/ProcSet resourcestatus { pop pop currentglobal mark { (*) { dup/CMap CTHasResourceStatusBug {CTResourceStatus} {resourcestatus} ifelse { pop dup 0 eq exch 1 eq or { dup/CMap findresource gcheck setglobal /CMap undefineresource } { pop CTHasResourceForAllBug {exit} {stop} ifelse } ifelse } {pop} ifelse } 128 string/CMap resourceforall } stopped {cleartomark} stopped pop setglobal } if } if }bind def /ds { Adobe_CoolType_Core begin CTWorkAroundBugs /mo/moveto load def /nf/newencodedfont load def /msf{makefont setfont}bind def /uf{dup undefinefont ct_VMDictUndef}bind def /ur/undefineresource load def /chp/charpath load def /awsh/awidthshow load def /wsh/widthshow load def /ash/ashow load def /@xshow/xshow load def /@yshow/yshow load def /@xyshow/xyshow load def /@cshow/cshow load def /sh/show load def /rp/repeat load def /.n/.notdef def end currentglobal false setglobal userdict/Adobe_CoolType_Data 2 copy known not {2 copy 10 dict put} if get begin /AddWidths? false def /CC 0 def /charcode 2 string def /@opStackCountByLevel 32 dict def /@opStackLevel 0 def /@dictStackCountByLevel 32 dict def /@dictStackLevel 0 def /InVMFontsByCMap 10 dict def /InVMDeepCopiedFonts 10 dict def end setglobal }bind def /dt { currentdict Adobe_CoolType_Core eq {end} if }bind def /ps { Adobe_CoolType_Core begin Adobe_CoolType_GVMFonts begin Adobe_CoolType_LVMFonts begin SharedFontDirectory begin }bind def /pt { end end end end }bind def /unload { systemdict/languagelevel known { systemdict/languagelevel get 2 ge { userdict/Adobe_CoolType_Core 2 copy known {undef} {pop pop} ifelse } if } if }bind def /ndf { 1 index where {pop pop pop} {dup xcheck{bind}if def} ifelse }def /findfont systemdict begin userdict begin /globaldict where{/globaldict get begin}if dup where pop exch get /globaldict where{pop end}if end end Adobe_CoolType_Core_Defined {/systemfindfont exch def} { /findfont 1 index def /systemfindfont exch def } ifelse /undefinefont {pop}ndf /copyfont { currentglobal 3 1 roll 1 index gcheck setglobal dup null eq{0}{dup length}ifelse 2 index length add 1 add dict begin exch { 1 index/FID eq {pop pop} {def} ifelse } forall dup null eq {pop} {{def}forall} ifelse currentdict end exch setglobal }bind def /copyarray { currentglobal exch dup gcheck setglobal dup length array copy exch setglobal }bind def /newencodedfont { currentglobal { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } { FontDirectory 3 index known {FontDirectory 3 index get/FontReferenced known} { SharedFontDirectory 3 index known {SharedFontDirectory 3 index get/FontReferenced known} {false} ifelse } ifelse } ifelse dup { 3 index findfont/FontReferenced get 2 index dup type/nametype eq {findfont} if ne {pop false} if } if dup { 1 index dup type/nametype eq {findfont} if dup/CharStrings known { /CharStrings get length 4 index findfont/CharStrings get length ne { pop false } if } {pop} ifelse } if { pop 1 index findfont /Encoding get exch 0 1 255 {2 copy get 3 index 3 1 roll put} for pop pop pop } { currentglobal 4 1 roll dup type/nametype eq {findfont} if dup gcheck setglobal dup dup maxlength 2 add dict begin exch { 1 index/FID ne 2 index/Encoding ne and {def} {pop pop} ifelse } forall /FontReferenced exch def /Encoding exch dup length array copy def /FontName 1 index dup type/stringtype eq{cvn}if def dup currentdict end definefont ct_VMDictPut setglobal } ifelse }bind def /SetSubstituteStrategy { $SubstituteFont begin dup type/dicttype ne {0 dict} if currentdict/$Strategies known { exch $Strategies exch 2 copy known { get 2 copy maxlength exch maxlength add dict begin {def}forall {def}forall currentdict dup/$Init known {dup/$Init get exec} if end /$Strategy exch def } {pop pop pop} ifelse } {pop pop} ifelse end }bind def /scff { $SubstituteFont begin dup type/stringtype eq {dup length exch} {null} ifelse /$sname exch def /$slen exch def /$inVMIndex $sname null eq { 1 index $str cvs dup length $slen sub $slen getinterval cvn } {$sname} ifelse def end {findfont} @Stopped { dup length 8 add string exch 1 index 0(BadFont:)putinterval 1 index exch 8 exch dup length string cvs putinterval cvn {findfont} @Stopped {pop/Courier findfont} if } if $SubstituteFont begin /$sname null def /$slen 0 def /$inVMIndex null def end }bind def /isWidthsOnlyFont { dup/WidthsOnly known {pop pop true} { dup/FDepVector known {/FDepVector get{isWidthsOnlyFont dup{exit}if}forall} { dup/FDArray known {/FDArray get{isWidthsOnlyFont dup{exit}if}forall} {pop} ifelse } ifelse } ifelse }bind def /ct_StyleDicts 4 dict dup begin /Adobe-Japan1 4 dict dup begin Level2? { /Serif /HeiseiMin-W3-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMin-W3} { /CIDFont/Category resourcestatus { pop pop /HeiseiMin-W3/CIDFont resourcestatus {pop pop/HeiseiMin-W3} {/Ryumin-Light} ifelse } {/Ryumin-Light} ifelse } ifelse def /SansSerif /HeiseiKakuGo-W5-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiKakuGo-W5} { /CIDFont/Category resourcestatus { pop pop /HeiseiKakuGo-W5/CIDFont resourcestatus {pop pop/HeiseiKakuGo-W5} {/GothicBBB-Medium} ifelse } {/GothicBBB-Medium} ifelse } ifelse def /HeiseiMaruGo-W4-83pv-RKSJ-H/Font resourcestatus {pop pop/HeiseiMaruGo-W4} { /CIDFont/Category resourcestatus { pop pop /HeiseiMaruGo-W4/CIDFont resourcestatus {pop pop/HeiseiMaruGo-W4} { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } { /Jun101-Light-RKSJ-H/Font resourcestatus {pop pop/Jun101-Light} {SansSerif} ifelse } ifelse } ifelse /RoundSansSerif exch def /Default Serif def } { /Serif/Ryumin-Light def /SansSerif/GothicBBB-Medium def { (fonts/Jun101-Light-83pv-RKSJ-H)status }stopped {pop}{ {pop pop pop pop/Jun101-Light} {SansSerif} ifelse /RoundSansSerif exch def }ifelse /Default Serif def } ifelse end def /Adobe-Korea1 4 dict dup begin /Serif/HYSMyeongJo-Medium def /SansSerif/HYGoThic-Medium def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-GB1 4 dict dup begin /Serif/STSong-Light def /SansSerif/STHeiti-Regular def /RoundSansSerif SansSerif def /Default Serif def end def /Adobe-CNS1 4 dict dup begin /Serif/MKai-Medium def /SansSerif/MHei-Medium def /RoundSansSerif SansSerif def /Default Serif def end def end def Level2?{currentglobal true setglobal}if /ct_BoldRomanWidthProc { stringwidth 1 index 0 ne{exch .03 add exch}if setcharwidth 0 0 }bind def /ct_Type0WidthProc { dup stringwidth 0 0 moveto 2 index true charpath pathbbox 0 -1 7 index 2 div .88 setcachedevice2 pop 0 0 }bind def /ct_Type0WMode1WidthProc { dup stringwidth pop 2 div neg -0.88 2 copy moveto 0 -1 5 -1 roll true charpath pathbbox setcachedevice }bind def /cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_BoldBaseFont 11 dict begin /FontType 3 def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /Encoding cHexEncoding def /_setwidthProc/ct_BoldRomanWidthProc load def /_bcstr1 1 string def /BuildChar { exch begin _basefont setfont _bcstr1 dup 0 4 -1 roll put dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def systemdict/composefont known { /ct_DefineIdentity-H { /Identity-H/CMap resourcestatus { pop pop } { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse } def /ct_BoldBaseCIDFont 11 dict begin /CIDFontType 1 def /CIDFontName/ct_BoldBaseCIDFont def /FontMatrix[1 0 0 1 0 0]def /FontBBox[0 0 1 1]def /_setwidthProc/ct_Type0WidthProc load def /_bcstr2 2 string def /BuildGlyph { exch begin _basefont setfont _bcstr2 1 2 index 256 mod put _bcstr2 0 3 -1 roll 256 idiv put _bcstr2 dup _setwidthProc 3 copy moveto show _basefonto setfont moveto show end }bind def currentdict end def }if Level2?{setglobal}if /ct_CopyFont{ { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall }bind def /ct_Type0CopyFont { exch dup length dict begin ct_CopyFont [ exch FDepVector { dup/FontType get 0 eq { 1 index ct_Type0CopyFont /_ctType0 exch definefont } { /_ctBaseFont exch 2 index exec } ifelse exch } forall pop ] /FDepVector exch def currentdict end }bind def /ct_MakeBoldFont { dup/ct_SyntheticBold known { dup length 3 add dict begin ct_CopyFont /ct_StrokeWidth .03 0 FontMatrix idtransform pop def /ct_SyntheticBold true def currentdict end definefont } { dup dup length 3 add dict begin ct_CopyFont /PaintType 2 def /StrokeWidth .03 0 FontMatrix idtransform pop def /dummybold currentdict end definefont dup/FontType get dup 9 ge exch 11 le and { ct_BoldBaseCIDFont dup length 3 add dict copy begin dup/CIDSystemInfo get/CIDSystemInfo exch def ct_DefineIdentity-H /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefont exch def /_Type0Identity/Identity-H 3 -1 roll[exch]composefont /_basefonto exch def currentdict end /CIDFont defineresource } { ct_BoldBaseFont dup length 3 add dict copy begin /_basefont exch def /_basefonto exch def currentdict end definefont } ifelse } ifelse }bind def /ct_MakeBold{ 1 index 1 index findfont currentglobal 5 1 roll dup gcheck setglobal dup /FontType get 0 eq { dup/WMode known{dup/WMode get 1 eq}{false}ifelse version length 4 ge and {version 0 4 getinterval cvi 2015 ge} {true} ifelse {/ct_Type0WidthProc} {/ct_Type0WMode1WidthProc} ifelse ct_BoldBaseFont/_setwidthProc 3 -1 roll load put {ct_MakeBoldFont}ct_Type0CopyFont definefont } { dup/_fauxfont known not 1 index/SubstMaster known not and { ct_BoldBaseFont/_setwidthProc /ct_BoldRomanWidthProc load put ct_MakeBoldFont } { 2 index 2 index eq {exch pop } { dup length dict begin ct_CopyFont currentdict end definefont } ifelse } ifelse } ifelse pop pop pop setglobal }bind def /?str1 256 string def /?set { $SubstituteFont begin /$substituteFound false def /$fontname 1 index def /$doSmartSub false def end dup findfont $SubstituteFont begin $substituteFound {false} { dup/FontName known { dup/FontName get $fontname eq 1 index/DistillerFauxFont known not and /currentdistillerparams where {pop false 2 index isWidthsOnlyFont not and} if } {false} ifelse } ifelse exch pop /$doSmartSub true def end { 5 1 roll pop pop pop pop findfont } { 1 index findfont dup/FontType get 3 eq { 6 1 roll pop pop pop pop pop false } {pop true} ifelse { $SubstituteFont begin pop pop /$styleArray 1 index def /$regOrdering 2 index def pop pop 0 1 $styleArray length 1 sub { $styleArray exch get ct_StyleDicts $regOrdering 2 copy known { get exch 2 copy known not {pop/Default} if get dup type/nametype eq { ?str1 cvs length dup 1 add exch ?str1 exch(-)putinterval exch dup length exch ?str1 exch 3 index exch putinterval add ?str1 exch 0 exch getinterval cvn } { pop pop/Unknown } ifelse } { pop pop pop pop/Unknown } ifelse } for end findfont }if } ifelse currentglobal false setglobal 3 1 roll null copyfont definefont pop setglobal }bind def setpacking userdict/$SubstituteFont 25 dict put 1 dict begin /SubstituteFont dup $error exch 2 copy known {get} {pop pop{pop/Courier}bind} ifelse def /currentdistillerparams where dup { pop pop currentdistillerparams/CannotEmbedFontPolicy 2 copy known {get/Error eq} {pop pop false} ifelse } if not { countdictstack array dictstack 0 get begin userdict begin $SubstituteFont begin /$str 128 string def /$fontpat 128 string def /$slen 0 def /$sname null def /$match false def /$fontname null def /$substituteFound false def /$inVMIndex null def /$doSmartSub true def /$depth 0 def /$fontname null def /$italicangle 26.5 def /$dstack null def /$Strategies 10 dict dup begin /$Type3Underprint { currentglobal exch false setglobal 11 dict begin /UseFont exch $WMode 0 ne { dup length dict copy dup/WMode $WMode put /UseFont exch definefont } if def /FontName $fontname dup type/stringtype eq{cvn}if def /FontType 3 def /FontMatrix[.001 0 0 .001 0 0]def /Encoding 256 array dup 0 1 255{/.notdef put dup}for pop def /FontBBox[0 0 0 0]def /CCInfo 7 dict dup begin /cc null def /x 0 def /y 0 def end def /BuildChar { exch begin CCInfo begin 1 string dup 0 3 index put exch pop /cc exch def UseFont 1000 scalefont setfont cc stringwidth/y exch def/x exch def x y setcharwidth $SubstituteFont/$Strategy get/$Underprint get exec 0 0 moveto cc show x y moveto end end }bind def currentdict end exch setglobal }bind def /$GetaTint 2 dict dup begin /$BuildFont { dup/WMode known {dup/WMode get} {0} ifelse /$WMode exch def $fontname exch dup/FontName known { dup/FontName get dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse exch Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index/FontName get known { pop Adobe_CoolType_Data/InVMDeepCopiedFonts get 1 index get null copyfont } {$deepcopyfont} ifelse exch 1 index exch/FontBasedOn exch put dup/FontName $fontname dup type/stringtype eq{cvn}if put definefont Adobe_CoolType_Data/InVMDeepCopiedFonts get begin dup/FontBasedOn get 1 index def end }bind def /$Underprint { gsave x abs y abs gt {/y 1000 def} {/x -1000 def 500 120 translate} ifelse Level2? { [/Separation(All)/DeviceCMYK{0 0 0 1 pop}] setcolorspace } {0 setgray} ifelse 10 setlinewidth x .8 mul [7 3] { y mul 8 div 120 sub x 10 div exch moveto 0 y 4 div neg rlineto dup 0 rlineto 0 y 4 div rlineto closepath gsave Level2? {.2 setcolor} {.8 setgray} ifelse fill grestore stroke } forall pop grestore }bind def end def /$Oblique 1 dict dup begin /$BuildFont { currentglobal exch dup gcheck setglobal null copyfont begin /FontBasedOn currentdict/FontName known { FontName dup type/stringtype eq{cvn}if } {/unnamedfont} ifelse def /FontName $fontname dup type/stringtype eq{cvn}if def /currentdistillerparams where {pop} { /FontInfo currentdict/FontInfo known {FontInfo null copyfont} {2 dict} ifelse dup begin /ItalicAngle $italicangle def /FontMatrix FontMatrix [1 0 ItalicAngle dup sin exch cos div 1 0 0] matrix concatmatrix readonly end 4 2 roll def def } ifelse FontName currentdict end definefont exch setglobal }bind def end def /$None 1 dict dup begin /$BuildFont{}bind def end def end def /$Oblique SetSubstituteStrategy /$findfontByEnum { dup type/stringtype eq{cvn}if dup/$fontname exch def $sname null eq {$str cvs dup length $slen sub $slen getinterval} {pop $sname} ifelse $fontpat dup 0(fonts/*)putinterval exch 7 exch putinterval /$match false def $SubstituteFont/$dstack countdictstack array dictstack put mark { $fontpat 0 $slen 7 add getinterval {/$match exch def exit} $str filenameforall } stopped { cleardictstack currentdict true $SubstituteFont/$dstack get { exch { 1 index eq {pop false} {true} ifelse } {begin false} ifelse } forall pop } if cleartomark /$slen 0 def $match false ne {$match(fonts/)anchorsearch pop pop cvn} {/Courier} ifelse }bind def /$ROS 1 dict dup begin /Adobe 4 dict dup begin /Japan1 [/Ryumin-Light/HeiseiMin-W3 /GothicBBB-Medium/HeiseiKakuGo-W5 /HeiseiMaruGo-W4/Jun101-Light]def /Korea1 [/HYSMyeongJo-Medium/HYGoThic-Medium]def /GB1 [/STSong-Light/STHeiti-Regular]def /CNS1 [/MKai-Medium/MHei-Medium]def end def end def /$cmapname null def /$deepcopyfont { dup/FontType get 0 eq { 1 dict dup/FontName/copied put copyfont begin /FDepVector FDepVector copyarray 0 1 2 index length 1 sub { 2 copy get $deepcopyfont dup/FontName/copied put /copied exch definefont 3 copy put pop pop } for def currentdict end } {$Strategies/$Type3Underprint get exec} ifelse }bind def /$buildfontname { dup/CIDFont findresource/CIDSystemInfo get begin Registry length Ordering length Supplement 8 string cvs 3 copy length 2 add add add string dup 5 1 roll dup 0 Registry putinterval dup 4 index(-)putinterval dup 4 index 1 add Ordering putinterval 4 2 roll add 1 add 2 copy(-)putinterval end 1 add 2 copy 0 exch getinterval $cmapname $fontpat cvs exch anchorsearch {pop pop 3 2 roll putinterval cvn/$cmapname exch def} {pop pop pop pop pop} ifelse length $str 1 index(-)putinterval 1 add $str 1 index $cmapname $fontpat cvs putinterval $cmapname length add $str exch 0 exch getinterval cvn }bind def /$findfontByROS { /$fontname exch def $ROS Registry 2 copy known { get Ordering 2 copy known {get} {pop pop[]} ifelse } {pop pop[]} ifelse false exch { dup/CIDFont resourcestatus { pop pop save 1 index/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get} {false} ifelse exch pop exch restore {pop} {exch pop true exit} ifelse } {pop} ifelse } forall {$str cvs $buildfontname} { false(*) { save exch dup/CIDFont findresource dup/WidthsOnly known {dup/WidthsOnly get not} {true} ifelse exch/CIDSystemInfo get dup/Registry get Registry eq exch/Ordering get Ordering eq and and {exch restore exch pop true exit} {pop restore} ifelse } $str/CIDFont resourceforall {$buildfontname} {$fontname $findfontByEnum} ifelse } ifelse }bind def end end currentdict/$error known currentdict/languagelevel known and dup {pop $error/SubstituteFont known} if dup {$error} {Adobe_CoolType_Core} ifelse begin { /SubstituteFont /CMap/Category resourcestatus { pop pop { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and { $sname null eq {dup $str cvs dup length $slen sub $slen getinterval cvn} {$sname} ifelse Adobe_CoolType_Data/InVMFontsByCMap get 1 index 2 copy known { get false exch { pop currentglobal { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } { FontDirectory 1 index known {exch pop true exit} { GlobalFontDirectory 1 index known {exch pop true exit} {pop} ifelse } ifelse } ifelse } forall } {pop pop false} ifelse { exch pop exch pop } { dup/CMap resourcestatus { pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS } { 128 string cvs dup(-)search { 3 1 roll search { 3 1 roll pop {dup cvi} stopped {pop pop pop pop pop $findfontByEnum} { 4 2 roll pop pop exch length exch 2 index length 2 index sub exch 1 sub -1 0 { $str cvs dup length 4 index 0 4 index 4 3 roll add getinterval exch 1 index exch 3 index exch putinterval dup/CMap resourcestatus { pop pop 4 1 roll pop pop pop dup/$cmapname exch def /CMap findresource/CIDSystemInfo get{def}forall $findfontByROS true exit } {pop} ifelse } for dup type/booleantype eq {pop} {pop pop pop $findfontByEnum} ifelse } ifelse } {pop pop pop $findfontByEnum} ifelse } {pop pop $findfontByEnum} ifelse } ifelse } ifelse } {//SubstituteFont exec} ifelse /$slen 0 def end } } { { $SubstituteFont begin /$substituteFound true def dup length $slen gt $sname null ne or $slen 0 gt and {$findfontByEnum} {//SubstituteFont exec} ifelse end } } ifelse bind readonly def Adobe_CoolType_Core/scfindfont/systemfindfont load put } { /scfindfont { $SubstituteFont begin dup systemfindfont dup/FontName known {dup/FontName get dup 3 index ne} {/noname true} ifelse dup { /$origfontnamefound 2 index def /$origfontname 4 index def/$substituteFound true def } if exch pop { $slen 0 gt $sname null ne 3 index length $slen gt or and { pop dup $findfontByEnum findfont dup maxlength 1 add dict begin {1 index/FID eq{pop pop}{def}ifelse} forall currentdict end definefont dup/FontName known{dup/FontName get}{null}ifelse $origfontnamefound ne { $origfontname $str cvs print ( substitution revised, using )print dup/FontName known {dup/FontName get}{(unspecified font)} ifelse $str cvs print(.\n)print } if } {exch pop} ifelse } {exch pop} ifelse end }bind def } ifelse end end Adobe_CoolType_Core_Defined not { Adobe_CoolType_Core/findfont { $SubstituteFont begin $depth 0 eq { /$fontname 1 index dup type/stringtype ne{$str cvs}if def /$substituteFound false def } if /$depth $depth 1 add def end scfindfont $SubstituteFont begin /$depth $depth 1 sub def $substituteFound $depth 0 eq and { $inVMIndex null ne {dup $inVMIndex $AddInVMFont} if $doSmartSub { currentdict/$Strategy known {$Strategy/$BuildFont get exec} if } if } if end }bind put } if } if end /$AddInVMFont { exch/FontName 2 copy known { get 1 dict dup begin exch 1 index gcheck def end exch Adobe_CoolType_Data/InVMFontsByCMap get exch $DictAdd } {pop pop pop} ifelse }bind def /$DictAdd { 2 copy known not {2 copy 4 index length dict put} if Level2? not { 2 copy get dup maxlength exch length 4 index length add lt 2 copy get dup length 4 index length add exch maxlength 1 index lt { 2 mul dict begin 2 copy get{forall}def 2 copy currentdict put end } {pop} ifelse } if get begin {def} forall end }bind def end end %%EndResource currentglobal true setglobal %%BeginResource: procset Adobe_CoolType_Utility_MAKEOCF 1.23 0 %%Copyright: Copyright 1987-2006 Adobe Systems Incorporated. %%Version: 1.23 0 systemdict/languagelevel known dup {currentglobal false setglobal} {false} ifelse exch userdict/Adobe_CoolType_Utility 2 copy known {2 copy get dup maxlength 27 add dict copy} {27 dict} ifelse put Adobe_CoolType_Utility begin /@eexecStartData <BAB431EA07F209EB8C4348311481D9D3F76E3D15246555577D87BC510ED54E 118C39697FA9F6DB58128E60EB8A12FA24D7CDD2FA94D221FA9EC8DA3E5E6A1C 4ACECC8C2D39C54E7C946031DD156C3A6B4A09AD29E1867A>def /@recognizeCIDFont null def /ct_Level2? exch def /ct_Clone? 1183615869 internaldict dup /CCRun known not exch/eCCRun known not ct_Level2? and or def ct_Level2? {globaldict begin currentglobal true setglobal} if /ct_AddStdCIDMap ct_Level2? {{ mark Adobe_CoolType_Utility/@recognizeCIDFont currentdict put { ((Hex)57 StartData 0615 1e27 2c39 1c60 d8a8 cc31 fe2b f6e0 7aa3 e541 e21c 60d8 a8c9 c3d0 6d9e 1c60 d8a8 c9c2 02d7 9a1c 60d8 a849 1c60 d8a8 cc36 74f4 1144 b13b 77)0()/SubFileDecode filter cvx exec } stopped { cleartomark Adobe_CoolType_Utility/@recognizeCIDFont get countdictstack dup array dictstack exch 1 sub -1 0 { 2 copy get 3 index eq {1 index length exch sub 1 sub{end}repeat exit} {pop} ifelse } for pop pop Adobe_CoolType_Utility/@eexecStartData get eexec } {cleartomark} ifelse }} {{ Adobe_CoolType_Utility/@eexecStartData get eexec }} ifelse bind def userdict/cid_extensions known dup{cid_extensions/cid_UpdateDB known and}if { cid_extensions begin /cid_GetCIDSystemInfo { 1 index type/stringtype eq {exch cvn exch} if cid_extensions begin dup load 2 index known { 2 copy cid_GetStatusInfo dup null ne { 1 index load 3 index get dup null eq {pop pop cid_UpdateDB} { exch 1 index/Created get eq {exch pop exch pop} {pop cid_UpdateDB} ifelse } ifelse } {pop cid_UpdateDB} ifelse } {cid_UpdateDB} ifelse end }bind def end } if ct_Level2? {end setglobal} if /ct_UseNativeCapability? systemdict/composefont known def /ct_MakeOCF 35 dict def /ct_Vars 25 dict def /ct_GlyphDirProcs 6 dict def /ct_BuildCharDict 15 dict dup begin /charcode 2 string def /dst_string 1500 string def /nullstring()def /usewidths? true def end def ct_Level2?{setglobal}{pop}ifelse ct_GlyphDirProcs begin /GetGlyphDirectory { systemdict/languagelevel known {pop/CIDFont findresource/GlyphDirectory get} { 1 index/CIDFont findresource/GlyphDirectory get dup type/dicttype eq { dup dup maxlength exch length sub 2 index lt { dup length 2 index add dict copy 2 index /CIDFont findresource/GlyphDirectory 2 index put } if } if exch pop exch pop } ifelse + }def /+ { systemdict/languagelevel known { currentglobal false setglobal 3 dict begin /vm exch def } {1 dict begin} ifelse /$ exch def systemdict/languagelevel known { vm setglobal /gvm currentglobal def $ gcheck setglobal } if ?{$ begin}if }def /?{$ type/dicttype eq}def /|{ userdict/Adobe_CoolType_Data known { Adobe_CoolType_Data/AddWidths? known { currentdict Adobe_CoolType_Data begin begin AddWidths? { Adobe_CoolType_Data/CC 3 index put ?{def}{$ 3 1 roll put}ifelse CC charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore currentfont/Widths get exch CC exch put } {?{def}{$ 3 1 roll put}ifelse} ifelse end end } {?{def}{$ 3 1 roll put}ifelse} ifelse } {?{def}{$ 3 1 roll put}ifelse} ifelse }def /! { ?{end}if systemdict/languagelevel known {gvm setglobal} if end }def /:{string currentfile exch readstring pop}executeonly def end ct_MakeOCF begin /ct_cHexEncoding [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12 /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25 /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38 /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71 /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84 /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97 /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0 /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3 /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6 /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF]def /ct_CID_STR_SIZE 8000 def /ct_mkocfStr100 100 string def /ct_defaultFontMtx[.001 0 0 .001 0 0]def /ct_1000Mtx[1000 0 0 1000 0 0]def /ct_raise{exch cvx exch errordict exch get exec stop}bind def /ct_reraise {cvx $error/errorname get(Error: )print dup( )cvs print errordict exch get exec stop }bind def /ct_cvnsi { 1 index add 1 sub 1 exch 0 4 1 roll { 2 index exch get exch 8 bitshift add } for exch pop }bind def /ct_GetInterval { Adobe_CoolType_Utility/ct_BuildCharDict get begin /dst_index 0 def dup dst_string length gt {dup string/dst_string exch def} if 1 index ct_CID_STR_SIZE idiv /arrayIndex exch def 2 index arrayIndex get 2 index arrayIndex ct_CID_STR_SIZE mul sub { dup 3 index add 2 index length le { 2 index getinterval dst_string dst_index 2 index putinterval length dst_index add/dst_index exch def exit } { 1 index length 1 index sub dup 4 1 roll getinterval dst_string dst_index 2 index putinterval pop dup dst_index add/dst_index exch def sub /arrayIndex arrayIndex 1 add def 2 index dup length arrayIndex gt {arrayIndex get} { pop exit } ifelse 0 } ifelse } loop pop pop pop dst_string 0 dst_index getinterval end }bind def ct_Level2? { /ct_resourcestatus currentglobal mark true setglobal {/unknowninstancename/Category resourcestatus} stopped {cleartomark setglobal true} {cleartomark currentglobal not exch setglobal} ifelse { { mark 3 1 roll/Category findresource begin ct_Vars/vm currentglobal put ({ResourceStatus}stopped)0()/SubFileDecode filter cvx exec {cleartomark false} {{3 2 roll pop true}{cleartomark false}ifelse} ifelse ct_Vars/vm get setglobal end } } {{resourcestatus}} ifelse bind def /CIDFont/Category ct_resourcestatus {pop pop} { currentglobal true setglobal /Generic/Category findresource dup length dict copy dup/InstanceType/dicttype put /CIDFont exch/Category defineresource pop setglobal } ifelse ct_UseNativeCapability? { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering(Identity)def /Supplement 0 def end def /CMapName/Identity-H def /CMapVersion 1.000 def /CMapType 1 def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } if } { /ct_Category 2 dict begin /CIDFont 10 dict def /ProcSet 2 dict def currentdict end def /defineresource { ct_Category 1 index 2 copy known { get dup dup maxlength exch length eq { dup length 10 add dict copy ct_Category 2 index 2 index put } if 3 index 3 index put pop exch pop } {pop pop/defineresource/undefined ct_raise} ifelse }bind def /findresource { ct_Category 1 index 2 copy known { get 2 index 2 copy known {get 3 1 roll pop pop} {pop pop/findresource/undefinedresource ct_raise} ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /resourcestatus { ct_Category 1 index 2 copy known { get 2 index known exch pop exch pop { 0 -1 true } { false } ifelse } {pop pop/findresource/undefined ct_raise} ifelse }bind def /ct_resourcestatus/resourcestatus load def } ifelse /ct_CIDInit 2 dict begin /ct_cidfont_stream_init { { dup(Binary)eq { pop null currentfile ct_Level2? { {cid_BYTE_COUNT()/SubFileDecode filter} stopped {pop pop pop} if } if /readstring load exit } if dup(Hex)eq { pop currentfile ct_Level2? { {null exch/ASCIIHexDecode filter/readstring} stopped {pop exch pop(>)exch/readhexstring} if } {(>)exch/readhexstring} ifelse load exit } if /StartData/typecheck ct_raise } loop cid_BYTE_COUNT ct_CID_STR_SIZE le { 2 copy cid_BYTE_COUNT string exch exec pop 1 array dup 3 -1 roll 0 exch put } { cid_BYTE_COUNT ct_CID_STR_SIZE div ceiling cvi dup array exch 2 sub 0 exch 1 exch { 2 copy 5 index ct_CID_STR_SIZE string 6 index exec pop put pop } for 2 index cid_BYTE_COUNT ct_CID_STR_SIZE mod string 3 index exec pop 1 index exch 1 index length 1 sub exch put } ifelse cid_CIDFONT exch/GlyphData exch put 2 index null eq { pop pop pop } { pop/readstring load 1 string exch { 3 copy exec pop dup length 0 eq { pop pop pop pop pop true exit } if 4 index eq { pop pop pop pop false exit } if } loop pop } ifelse }bind def /StartData { mark { currentdict dup/FDArray get 0 get/FontMatrix get 0 get 0.001 eq { dup/CDevProc known not { /CDevProc 1183615869 internaldict/stdCDevProc 2 copy known {get} { pop pop {pop pop pop pop pop 0 -1000 7 index 2 div 880} } ifelse def } if } { /CDevProc { pop pop pop pop pop 0 1 cid_temp/cid_CIDFONT get /FDArray get 0 get /FontMatrix get 0 get div 7 index 2 div 1 index 0.88 mul }def } ifelse /cid_temp 15 dict def cid_temp begin /cid_CIDFONT exch def 3 copy pop dup/cid_BYTE_COUNT exch def 0 gt { ct_cidfont_stream_init FDArray { /Private get dup/SubrMapOffset known { begin /Subrs SubrCount array def Subrs SubrMapOffset SubrCount SDBytes ct_Level2? { currentdict dup/SubrMapOffset undef dup/SubrCount undef /SDBytes undef } if end /cid_SD_BYTES exch def /cid_SUBR_COUNT exch def /cid_SUBR_MAP_OFFSET exch def /cid_SUBRS exch def cid_SUBR_COUNT 0 gt { GlyphData cid_SUBR_MAP_OFFSET cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi 0 1 cid_SUBR_COUNT 1 sub { exch 1 index 1 add cid_SD_BYTES mul cid_SUBR_MAP_OFFSET add GlyphData exch cid_SD_BYTES ct_GetInterval 0 cid_SD_BYTES ct_cvnsi cid_SUBRS 4 2 roll GlyphData exch 4 index 1 index sub ct_GetInterval dup length string copy put } for pop } if } {pop} ifelse } forall } if cleartomark pop pop end CIDFontName currentdict/CIDFont defineresource pop end end } stopped {cleartomark/StartData ct_reraise} if }bind def currentdict end def /ct_saveCIDInit { /CIDInit/ProcSet ct_resourcestatus {true} {/CIDInitC/ProcSet ct_resourcestatus} ifelse { pop pop /CIDInit/ProcSet findresource ct_UseNativeCapability? {pop null} {/CIDInit ct_CIDInit/ProcSet defineresource pop} ifelse } {/CIDInit ct_CIDInit/ProcSet defineresource pop null} ifelse ct_Vars exch/ct_oldCIDInit exch put }bind def /ct_restoreCIDInit { ct_Vars/ct_oldCIDInit get dup null ne {/CIDInit exch/ProcSet defineresource pop} {pop} ifelse }bind def /ct_BuildCharSetUp { 1 index begin CIDFont begin Adobe_CoolType_Utility/ct_BuildCharDict get begin /ct_dfCharCode exch def /ct_dfDict exch def CIDFirstByte ct_dfCharCode add dup CIDCount ge {pop 0} if /cid exch def { GlyphDirectory cid 2 copy known {get} {pop pop nullstring} ifelse dup length FDBytes sub 0 gt { dup FDBytes 0 ne {0 FDBytes ct_cvnsi} {pop 0} ifelse /fdIndex exch def dup length FDBytes sub FDBytes exch getinterval /charstring exch def exit } { pop cid 0 eq {/charstring nullstring def exit} if /cid 0 def } ifelse } loop }def /ct_SetCacheDevice { 0 0 moveto dup stringwidth 3 -1 roll true charpath pathbbox 0 -1000 7 index 2 div 880 setcachedevice2 0 0 moveto }def /ct_CloneSetCacheProc { 1 eq { stringwidth pop -2 div -880 0 -1000 setcharwidth moveto } { usewidths? { currentfont/Widths get cid 2 copy known {get exch pop aload pop} {pop pop stringwidth} ifelse } {stringwidth} ifelse setcharwidth 0 0 moveto } ifelse }def /ct_Type3ShowCharString { ct_FDDict fdIndex 2 copy known {get} { currentglobal 3 1 roll 1 index gcheck setglobal ct_Type1FontTemplate dup maxlength dict copy begin FDArray fdIndex get dup/FontMatrix 2 copy known {get} {pop pop ct_defaultFontMtx} ifelse /FontMatrix exch dup length array copy def /Private get /Private exch def /Widths rootfont/Widths get def /CharStrings 1 dict dup/.notdef <d841272cf18f54fc13>dup length string copy put def currentdict end /ct_Type1Font exch definefont dup 5 1 roll put setglobal } ifelse dup/CharStrings get 1 index/Encoding get ct_dfCharCode get charstring put rootfont/WMode 2 copy known {get} {pop pop 0} ifelse exch 1000 scalefont setfont ct_str1 0 ct_dfCharCode put ct_str1 exch ct_dfSetCacheProc ct_SyntheticBold { currentpoint ct_str1 show newpath moveto ct_str1 true charpath ct_StrokeWidth setlinewidth stroke } {ct_str1 show} ifelse }def /ct_Type4ShowCharString { ct_dfDict ct_dfCharCode charstring FDArray fdIndex get dup/FontMatrix get dup ct_defaultFontMtx ct_matrixeq not {ct_1000Mtx matrix concatmatrix concat} {pop} ifelse /Private get Adobe_CoolType_Utility/ct_Level2? get not { ct_dfDict/Private 3 -1 roll {put} 1183615869 internaldict/superexec get exec } if 1183615869 internaldict Adobe_CoolType_Utility/ct_Level2? get {1 index} {3 index/Private get mark 6 1 roll} ifelse dup/RunInt known {/RunInt get} {pop/CCRun} ifelse get exec Adobe_CoolType_Utility/ct_Level2? get not {cleartomark} if }bind def /ct_BuildCharIncremental { { Adobe_CoolType_Utility/ct_MakeOCF get begin ct_BuildCharSetUp ct_ShowCharString } stopped {stop} if end end end end }bind def /BaseFontNameStr(BF00)def /ct_Type1FontTemplate 14 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /PaintType 0 def currentdict end def /BaseFontTemplate 11 dict begin /FontMatrix [0.001 0 0 0.001 0 0]def /FontBBox [-250 -250 1250 1250]def /Encoding ct_cHexEncoding def /BuildChar/ct_BuildCharIncremental load def ct_Clone? { /FontType 3 def /ct_ShowCharString/ct_Type3ShowCharString load def /ct_dfSetCacheProc/ct_CloneSetCacheProc load def /ct_SyntheticBold false def /ct_StrokeWidth 1 def } { /FontType 4 def /Private 1 dict dup/lenIV 4 put def /CharStrings 1 dict dup/.notdef<d841272cf18f54fc13>put def /PaintType 0 def /ct_ShowCharString/ct_Type4ShowCharString load def } ifelse /ct_str1 1 string def currentdict end def /BaseFontDictSize BaseFontTemplate length 5 add def /ct_matrixeq { true 0 1 5 { dup 4 index exch get exch 3 index exch get eq and dup not {exit} if } for exch pop exch pop }bind def /ct_makeocf { 15 dict begin exch/WMode exch def exch/FontName exch def /FontType 0 def /FMapType 2 def dup/FontMatrix known {dup/FontMatrix get/FontMatrix exch def} {/FontMatrix matrix def} ifelse /bfCount 1 index/CIDCount get 256 idiv 1 add dup 256 gt{pop 256}if def /Encoding 256 array 0 1 bfCount 1 sub{2 copy dup put pop}for bfCount 1 255{2 copy bfCount put pop}for def /FDepVector bfCount dup 256 lt{1 add}if array def BaseFontTemplate BaseFontDictSize dict copy begin /CIDFont exch def CIDFont/FontBBox known {CIDFont/FontBBox get/FontBBox exch def} if CIDFont/CDevProc known {CIDFont/CDevProc get/CDevProc exch def} if currentdict end BaseFontNameStr 3(0)putinterval 0 1 bfCount dup 256 eq{1 sub}if { FDepVector exch 2 index BaseFontDictSize dict copy begin dup/CIDFirstByte exch 256 mul def FontType 3 eq {/ct_FDDict 2 dict def} if currentdict end 1 index 16 BaseFontNameStr 2 2 getinterval cvrs pop BaseFontNameStr exch definefont put } for ct_Clone? {/Widths 1 index/CIDFont get/GlyphDirectory get length dict def} if FontName currentdict end definefont ct_Clone? { gsave dup 1000 scalefont setfont ct_BuildCharDict begin /usewidths? false def currentfont/Widths get begin exch/CIDFont get/GlyphDirectory get { pop dup charcode exch 1 index 0 2 index 256 idiv put 1 index exch 1 exch 256 mod put stringwidth 2 array astore def } forall end /usewidths? true def end grestore } {exch pop} ifelse }bind def currentglobal true setglobal /ct_ComposeFont { ct_UseNativeCapability? { 2 index/CMap ct_resourcestatus {pop pop exch pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 3 index def /CMapVersion 1.000 def /CMapType 1 def exch/WMode exch def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search { dup length string copy exch pop exch pop } {pop(Identity)} ifelse } {pop (Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { 3 2 roll pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def setglobal /ct_MakeIdentity { ct_UseNativeCapability? { 1 index/CMap ct_resourcestatus {pop pop} { /CIDInit/ProcSet findresource begin 12 dict begin begincmap /CMapName 2 index def /CMapVersion 1.000 def /CMapType 1 def /CIDSystemInfo 3 dict dup begin /Registry(Adobe)def /Ordering CMapName ct_mkocfStr100 cvs (Adobe-)search { pop pop (-)search {dup length string copy exch pop exch pop} {pop(Identity)} ifelse } {pop(Identity)} ifelse def /Supplement 0 def end def 1 begincodespacerange <0000><FFFF> endcodespacerange 1 begincidrange <0000><FFFF>0 endcidrange endcmap CMapName currentdict/CMap defineresource pop end end } ifelse composefont } { exch pop 0 get/CIDFont findresource ct_makeocf } ifelse }bind def currentdict readonly pop end end %%EndResource setglobal %%BeginResource: procset Adobe_CoolType_Utility_T42 1.0 0 %%Copyright: Copyright 1987-2004 Adobe Systems Incorporated. %%Version: 1.0 0 userdict/ct_T42Dict 15 dict put ct_T42Dict begin /Is2015? { version cvi 2015 ge }bind def /AllocGlyphStorage { Is2015? { pop } { {string}forall }ifelse }bind def /Type42DictBegin { 25 dict begin /FontName exch def /CharStrings 256 dict begin /.notdef 0 def currentdict end def /Encoding exch def /PaintType 0 def /FontType 42 def /FontMatrix[1 0 0 1 0 0]def 4 array astore cvx/FontBBox exch def /sfnts }bind def /Type42DictEnd { currentdict dup/FontName get exch definefont end ct_T42Dict exch dup/FontName get exch put }bind def /RD{string currentfile exch readstring pop}executeonly def /PrepFor2015 { Is2015? { /GlyphDirectory 16 dict def sfnts 0 get dup 2 index (glyx) putinterval 2 index (locx) putinterval pop pop } { pop pop }ifelse }bind def /AddT42Char { Is2015? { /GlyphDirectory get begin def end pop pop } { /sfnts get 4 index get 3 index 2 index putinterval pop pop pop pop }ifelse }bind def /T0AddT42Mtx2 { /CIDFont findresource/Metrics2 get begin def end }bind def end %%EndResource currentglobal true setglobal %%BeginFile: MMFauxFont.prc %%Copyright: Copyright 1987-2001 Adobe Systems Incorporated. %%All Rights Reserved. userdict /ct_EuroDict 10 dict put ct_EuroDict begin /ct_CopyFont { { 1 index /FID ne {def} {pop pop} ifelse} forall } def /ct_GetGlyphOutline { gsave initmatrix newpath exch findfont dup length 1 add dict begin ct_CopyFont /Encoding Encoding dup length array copy dup 4 -1 roll 0 exch put def currentdict end /ct_EuroFont exch definefont 1000 scalefont setfont 0 0 moveto [ <00> stringwidth <00> false charpath pathbbox [ {/m cvx} {/l cvx} {/c cvx} {/cp cvx} pathforall grestore counttomark 8 add } def /ct_MakeGlyphProc { ] cvx /ct_PSBuildGlyph cvx ] cvx } def /ct_PSBuildGlyph { gsave 8 -1 roll pop 7 1 roll 6 -2 roll ct_FontMatrix transform 6 2 roll 4 -2 roll ct_FontMatrix transform 4 2 roll ct_FontMatrix transform currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse dup 9 1 roll { currentdict /StrokeWidth 2 copy known { get 2 div 0 ct_FontMatrix dtransform pop 5 1 roll 4 -1 roll 4 index sub 4 1 roll 3 -1 roll 4 index sub 3 1 roll exch 4 index add exch 4 index add 5 -1 roll pop } { pop pop } ifelse } if setcachedevice ct_FontMatrix concat ct_PSPathOps begin exec end { currentdict /StrokeWidth 2 copy known { get } { pop pop 0 } ifelse setlinewidth stroke } { fill } ifelse grestore } def /ct_PSPathOps 4 dict dup begin /m {moveto} def /l {lineto} def /c {curveto} def /cp {closepath} def end def /ct_matrix1000 [1000 0 0 1000 0 0] def /ct_AddGlyphProc { 2 index findfont dup length 4 add dict begin ct_CopyFont /CharStrings CharStrings dup length 1 add dict copy begin 3 1 roll def currentdict end def /ct_FontMatrix ct_matrix1000 FontMatrix matrix concatmatrix def /ct_PSBuildGlyph /ct_PSBuildGlyph load def /ct_PSPathOps /ct_PSPathOps load def currentdict end definefont pop } def systemdict /languagelevel known { /ct_AddGlyphToPrinterFont { 2 copy ct_GetGlyphOutline 3 add -1 roll restore ct_MakeGlyphProc ct_AddGlyphProc } def } { /ct_AddGlyphToPrinterFont { pop pop restore Adobe_CTFauxDict /$$$FONTNAME get /Euro Adobe_CTFauxDict /$$$SUBSTITUTEBASE get ct_EuroDict exch get ct_AddGlyphProc } def } ifelse /AdobeSansMM { 556 0 24 -19 541 703 { 541 628 m 510 669 442 703 354 703 c 201 703 117 607 101 444 c 50 444 l 25 372 l 97 372 l 97 301 l 49 301 l 24 229 l 103 229 l 124 67 209 -19 350 -19 c 435 -19 501 25 509 32 c 509 131 l 492 105 417 60 343 60 c 267 60 204 127 197 229 c 406 229 l 430 301 l 191 301 l 191 372 l 455 372 l 479 444 l 194 444 l 201 531 245 624 348 624 c 433 624 484 583 509 534 c cp 556 0 m } ct_PSBuildGlyph } def /AdobeSerifMM { 500 0 10 -12 484 692 { 347 298 m 171 298 l 170 310 170 322 170 335 c 170 362 l 362 362 l 374 403 l 172 403 l 184 580 244 642 308 642 c 380 642 434 574 457 457 c 481 462 l 474 691 l 449 691 l 433 670 429 657 410 657 c 394 657 360 692 299 692 c 204 692 94 604 73 403 c 22 403 l 10 362 l 70 362 l 69 352 69 341 69 330 c 69 319 69 308 70 298 c 22 298 l 10 257 l 73 257 l 97 57 216 -12 295 -12 c 364 -12 427 25 484 123 c 458 142 l 425 101 384 37 316 37 c 256 37 189 84 173 257 c 335 257 l cp 500 0 m } ct_PSBuildGlyph } def end %%EndFile setglobal Adobe_CoolType_Core begin /$Oblique SetSubstituteStrategy end %%BeginResource: procset Adobe_AGM_Image 1.0 0
+%%Version: 1.0 0
+%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
+systemdict/setpacking known
+{
+ currentpacking
+ true setpacking
+}if
+userdict/Adobe_AGM_Image 71 dict dup begin put
+/Adobe_AGM_Image_Id/Adobe_AGM_Image_1.0_0 def
+/nd{
+ null def
+}bind def
+/AGMIMG_&image nd
+/AGMIMG_&colorimage nd
+/AGMIMG_&imagemask nd
+/AGMIMG_mbuf()def
+/AGMIMG_ybuf()def
+/AGMIMG_kbuf()def
+/AGMIMG_c 0 def
+/AGMIMG_m 0 def
+/AGMIMG_y 0 def
+/AGMIMG_k 0 def
+/AGMIMG_tmp nd
+/AGMIMG_imagestring0 nd
+/AGMIMG_imagestring1 nd
+/AGMIMG_imagestring2 nd
+/AGMIMG_imagestring3 nd
+/AGMIMG_imagestring4 nd
+/AGMIMG_imagestring5 nd
+/AGMIMG_cnt nd
+/AGMIMG_fsave nd
+/AGMIMG_colorAry nd
+/AGMIMG_override nd
+/AGMIMG_name nd
+/AGMIMG_maskSource nd
+/AGMIMG_flushfilters nd
+/invert_image_samples nd
+/knockout_image_samples nd
+/img nd
+/sepimg nd
+/devnimg nd
+/idximg nd
+/ds
+{
+ Adobe_AGM_Core begin
+ Adobe_AGM_Image begin
+ /AGMIMG_&image systemdict/image get def
+ /AGMIMG_&imagemask systemdict/imagemask get def
+ /colorimage where{
+ pop
+ /AGMIMG_&colorimage/colorimage ldf
+ }if
+ end
+ end
+}def
+/ps
+{
+ Adobe_AGM_Image begin
+ /AGMIMG_ccimage_exists{/customcolorimage where
+ {
+ pop
+ /Adobe_AGM_OnHost_Seps where
+ {
+ pop false
+ }{
+ /Adobe_AGM_InRip_Seps where
+ {
+ pop false
+ }{
+ true
+ }ifelse
+ }ifelse
+ }{
+ false
+ }ifelse
+ }bdf
+ level2{
+ /invert_image_samples
+ {
+ Adobe_AGM_Image/AGMIMG_tmp Decode length ddf
+ /Decode[Decode 1 get Decode 0 get]def
+ }def
+ /knockout_image_samples
+ {
+ Operator/imagemask ne{
+ /Decode[1 1]def
+ }if
+ }def
+ }{
+ /invert_image_samples
+ {
+ {1 exch sub}currenttransfer addprocs settransfer
+ }def
+ /knockout_image_samples
+ {
+ {pop 1}currenttransfer addprocs settransfer
+ }def
+ }ifelse
+ /img/imageormask ldf
+ /sepimg/sep_imageormask ldf
+ /devnimg/devn_imageormask ldf
+ /idximg/indexed_imageormask ldf
+ /_ctype 7 def
+ currentdict{
+ dup xcheck 1 index type dup/arraytype eq exch/packedarraytype eq or and{
+ bind
+ }if
+ def
+ }forall
+}def
+/pt
+{
+ end
+}def
+/dt
+{
+}def
+/AGMIMG_flushfilters
+{
+ dup type/arraytype ne
+ {1 array astore}if
+ dup 0 get currentfile ne
+ {dup 0 get flushfile}if
+ {
+ dup type/filetype eq
+ {
+ dup status 1 index currentfile ne and
+ {closefile}
+ {pop}
+ ifelse
+ }{pop}ifelse
+ }forall
+}def
+/AGMIMG_init_common
+{
+ currentdict/T known{/ImageType/T ldf currentdict/T undef}if
+ currentdict/W known{/Width/W ldf currentdict/W undef}if
+ currentdict/H known{/Height/H ldf currentdict/H undef}if
+ currentdict/M known{/ImageMatrix/M ldf currentdict/M undef}if
+ currentdict/BC known{/BitsPerComponent/BC ldf currentdict/BC undef}if
+ currentdict/D known{/Decode/D ldf currentdict/D undef}if
+ currentdict/DS known{/DataSource/DS ldf currentdict/DS undef}if
+ currentdict/O known{
+ /Operator/O load 1 eq{
+ /imagemask
+ }{
+ /O load 2 eq{
+ /image
+ }{
+ /colorimage
+ }ifelse
+ }ifelse
+ def
+ currentdict/O undef
+ }if
+ currentdict/HSCI known{/HostSepColorImage/HSCI ldf currentdict/HSCI undef}if
+ currentdict/MD known{/MultipleDataSources/MD ldf currentdict/MD undef}if
+ currentdict/I known{/Interpolate/I ldf currentdict/I undef}if
+ currentdict/SI known{/SkipImageProc/SI ldf currentdict/SI undef}if
+ /DataSource load xcheck not{
+ DataSource type/arraytype eq{
+ DataSource 0 get type/filetype eq{
+ /_Filters DataSource def
+ currentdict/MultipleDataSources known not{
+ /DataSource DataSource dup length 1 sub get def
+ }if
+ }if
+ }if
+ currentdict/MultipleDataSources known not{
+ /MultipleDataSources DataSource type/arraytype eq{
+ DataSource length 1 gt
+ }
+ {false}ifelse def
+ }if
+ }if
+ /NComponents Decode length 2 div def
+ currentdict/SkipImageProc known not{/SkipImageProc{false}def}if
+}bdf
+/imageormask_sys
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ level2{
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ AGMIMG_&imagemask
+ }{
+ BitsPerComponent ImageMatrix/DataSource load
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ cleartomark restore
+ end
+}def
+/overprint_plate
+{
+ currentoverprint{
+ 0 get dup type/nametype eq{
+ dup/DeviceGray eq{
+ pop AGMCORE_black_plate not
+ }{
+ /DeviceCMYK eq{
+ AGMCORE_is_cmyk_sep not
+ }if
+ }ifelse
+ }{
+ false exch
+ {
+ AGMOHS_sepink eq or
+ }forall
+ not
+ }ifelse
+ }{
+ pop false
+ }ifelse
+}def
+/process_mask
+{
+ level3{
+ dup begin
+ /ImageType 1 def
+ end
+ 4 dict begin
+ /DataDict exch def
+ /ImageType 3 def
+ /InterleaveType 3 def
+ /MaskDict 9 dict begin
+ /ImageType 1 def
+ /Width DataDict dup/MaskWidth known{/MaskWidth}{/Width}ifelse get def
+ /Height DataDict dup/MaskHeight known{/MaskHeight}{/Height}ifelse get def
+ /ImageMatrix[Width 0 0 Height neg 0 Height]def
+ /NComponents 1 def
+ /BitsPerComponent 1 def
+ /Decode DataDict dup/MaskD known{/MaskD}{[1 0]}ifelse get def
+ /DataSource Adobe_AGM_Core/AGMIMG_maskSource get def
+ currentdict end def
+ currentdict end
+ }if
+}def
+/use_mask
+{
+ dup/Mask known {dup/Mask get}{false}ifelse
+}def
+/imageormask
+{
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }
+ {
+ save mark
+ level2 AGMCORE_host_sep not and{
+ currentdict
+ Operator/imagemask eq DeviceN_PS2 not and{
+ imagemask
+ }{
+ AGMCORE_in_rip_sep currentoverprint and currentcolorspace 0 get/DeviceGray eq and{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ /Decode[Decode 1 get Decode 0 get]def
+ }if
+ use_mask{
+ process_mask image
+ }{
+ DeviceN_NoneName DeviceN_PS2 Indexed_DeviceN level3 not and or or AGMCORE_in_rip_sep and
+ {
+ Names convert_to_process not{
+ 2 dict begin
+ /imageDict xdf
+ /names_index 0 def
+ gsave
+ imageDict write_image_file{
+ Names{
+ dup(None)ne{
+ [/Separation 3 -1 roll/DeviceGray{1 exch sub}]setcolorspace
+ Operator imageDict read_image_file
+ names_index 0 eq{true setoverprint}if
+ /names_index names_index 1 add def
+ }{
+ pop
+ }ifelse
+ }forall
+ close_image_file
+ }if
+ grestore
+ end
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask eq{
+ imagemask
+ }{
+ image
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ Width Height
+ Operator/imagemask eq{
+ Decode 0 get 1 eq Decode 1 get 0 eq and
+ ImageMatrix/DataSource load
+ /Adobe_AGM_OnHost_Seps where{
+ pop imagemask
+ }{
+ currentgray 1 ne{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ BitsPerComponent ImageMatrix
+ MultipleDataSources{
+ 0 1 NComponents 1 sub{
+ DataSource exch get
+ }for
+ }{
+ /DataSource load
+ }ifelse
+ Operator/colorimage eq{
+ AGMCORE_host_sep{
+ MultipleDataSources level2 or NComponents 4 eq and{
+ AGMCORE_is_cmyk_sep{
+ MultipleDataSources{
+ /DataSource DataSource 0 get xcheck
+ {
+ [
+ DataSource 0 get/exec cvx
+ DataSource 1 get/exec cvx
+ DataSource 2 get/exec cvx
+ DataSource 3 get/exec cvx
+ /AGMCORE_get_ink_data cvx
+ ]cvx
+ }{
+ DataSource aload pop AGMCORE_get_ink_data
+ }ifelse def
+ }{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ /DataSource load
+ filter_cmyk 0()/SubFileDecode filter def
+ }ifelse
+ /Decode[Decode 0 get Decode 1 get]def
+ /MultipleDataSources false def
+ /NComponents 1 def
+ /Operator/image def
+ invert_image_samples
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ 1 AGMCORE_&setgray
+ currentdict imageormask_sys
+ }{
+ currentdict ignoreimagedata
+ }ifelse
+ }ifelse
+ }{
+ MultipleDataSources NComponents AGMIMG_&colorimage
+ }ifelse
+ }{
+ true NComponents colorimage
+ }ifelse
+ }{
+ Operator/image eq{
+ AGMCORE_host_sep{
+ /DoImage true def
+ currentdict/HostSepColorImage known{HostSepColorImage not}{false}ifelse
+ {
+ AGMCORE_black_plate not Operator/imagemask ne and{
+ /DoImage false def
+ currentdict ignoreimagedata
+ }if
+ }if
+ 1 AGMCORE_&setgray
+ DoImage
+ {currentdict imageormask_sys}if
+ }{
+ use_mask{
+ process_mask image
+ }{
+ image
+ }ifelse
+ }ifelse
+ }{
+ Operator/knockout eq{
+ pop pop pop pop pop
+ currentcolorspace overprint_plate not{
+ knockout_unitsq
+ }if
+ }if
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/sep_imageormask
+{
+ /sep_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_avoid_L2_sep_space{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ }if
+ AGMIMG_ccimage_exists
+ MappedCSA 0 get/DeviceCMYK eq and
+ currentdict/Components known and
+ Name()ne and
+ Name(All)ne and
+ Operator/image eq and
+ AGMCORE_producing_seps not and
+ level2 not and
+ {
+ Width Height BitsPerComponent ImageMatrix
+ [
+ /DataSource load/exec cvx
+ {
+ 0 1 2 index length 1 sub{
+ 1 index exch
+ 2 copy get 255 xor put
+ }for
+ }/exec cvx
+ ]cvx bind
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Name findcmykcustomcolor
+ customcolorimage
+ }{
+ AGMCORE_producing_seps not{
+ level2{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne AGMCORE_avoid_L2_sep_space not and currentcolorspace 0 get/Separation ne and{
+ [/Separation Name MappedCSA sep_proc_name exch dup 0 get 15 string cvs(/Device)anchorsearch{pop pop 0 get}{pop}ifelse exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ currentdict imageormask
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask
+ }{
+ sep_imageormask_lev1
+ }ifelse
+ }ifelse
+ }{
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ currentdict/ImageMatrix get concat
+ knockout_unitsq
+ }{
+ currentgray 1 ne{
+ AGMCORE_is_cmyk_sep Name(All)ne and{
+ level2{
+ Name AGMCORE_IsSeparationAProcessColor
+ {
+ Operator/imagemask eq{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ /sep_tint AGMCORE_gget 1 exch sub AGMCORE_&setcolor
+ }if
+ }{
+ invert_image_samples
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ [/Separation Name[/DeviceGray]
+ {
+ sep_colorspace_proc AGMCORE_get_ink_data
+ 1 exch sub
+ }bind
+ ]AGMCORE_&setcolorspace
+ /sep_tint AGMCORE_gget AGMCORE_&setcolor
+ }if
+ }ifelse
+ currentdict imageormask_sys
+ }{
+ currentdict
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ sep_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ Operator/imagemask ne{
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }ifelse
+ }{
+ currentoverprint not Name(All)eq or Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{
+ currentcolorspace 0 get/Separation ne{
+ [/Separation Name MappedCSA sep_proc_name exch 0 get exch load]setcolorspace_opt
+ /sep_tint AGMCORE_gget setcolor
+ }if
+ }if
+ currentoverprint
+ MappedCSA 0 get/DeviceCMYK eq and
+ Name AGMCORE_IsSeparationAProcessColor not and
+ //Adobe_AGM_Core/AGMCORE_pattern_paint_type get 2 ne{Name inRip_spot_has_ink not and}{false}ifelse
+ Name(All)ne and{
+ imageormask_l2_overprint
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+}def
+/colorSpaceElemCnt
+{
+ mark currentcolor counttomark dup 2 add 1 roll cleartomark
+}bdf
+/devn_sep_datasource
+{
+ 1 dict begin
+ /dataSource xdf
+ [
+ 0 1 dataSource length 1 sub{
+ dup currentdict/dataSource get/exch cvx/get cvx/exec cvx
+ /exch cvx names_index/ne cvx[/pop cvx]cvx/if cvx
+ }for
+ ]cvx bind
+ end
+}bdf
+/devn_alt_datasource
+{
+ 11 dict begin
+ /convProc xdf
+ /origcolorSpaceElemCnt xdf
+ /origMultipleDataSources xdf
+ /origBitsPerComponent xdf
+ /origDecode xdf
+ /origDataSource xdf
+ /dsCnt origMultipleDataSources{origDataSource length}{1}ifelse def
+ /DataSource origMultipleDataSources
+ {
+ [
+ BitsPerComponent 8 idiv origDecode length 2 idiv mul string
+ 0 1 origDecode length 2 idiv 1 sub
+ {
+ dup 7 mul 1 add index exch dup BitsPerComponent 8 idiv mul exch
+ origDataSource exch get 0()/SubFileDecode filter
+ BitsPerComponent 8 idiv string/readstring cvx/pop cvx/putinterval cvx
+ }for
+ ]bind cvx
+ }{origDataSource}ifelse 0()/SubFileDecode filter def
+ [
+ origcolorSpaceElemCnt string
+ 0 2 origDecode length 2 sub
+ {
+ dup origDecode exch get dup 3 -1 roll 1 add origDecode exch get exch sub 2 BitsPerComponent exp 1 sub div
+ 1 BitsPerComponent 8 idiv{DataSource/read cvx/not cvx{0}/if cvx/mul cvx}repeat/mul cvx/add cvx
+ }for
+ /convProc load/exec cvx
+ origcolorSpaceElemCnt 1 sub -1 0
+ {
+ /dup cvx 2/add cvx/index cvx
+ 3 1/roll cvx/exch cvx 255/mul cvx/cvi cvx/put cvx
+ }for
+ ]bind cvx 0()/SubFileDecode filter
+ end
+}bdf
+/devn_imageormask
+{
+ /devicen_colorspace_dict AGMCORE_gget begin
+ CSA map_csa
+ 2 dict begin
+ dup
+ /srcDataStrs[3 -1 roll begin
+ AGMIMG_init_common
+ currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
+ {
+ Width Decode length 2 div mul cvi
+ {
+ dup 65535 gt{1 add 2 div cvi}{exit}ifelse
+ }loop
+ string
+ }repeat
+ end]def
+ /dstDataStr srcDataStrs 0 get length string def
+ begin
+ AGMIMG_init_common
+ SkipImageProc{
+ currentdict consumeimagedata
+ }{
+ save mark
+ AGMCORE_producing_seps not{
+ level3 not{
+ Operator/imagemask ne{
+ /DataSource[[
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ colorSpaceElemCnt/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource 1/string cvx/readstring cvx/pop cvx]cvx colorSpaceElemCnt 1 sub{dup}repeat]def
+ /MultipleDataSources true def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ }if
+ }if
+ currentdict imageormask
+ }{
+ AGMCORE_host_sep{
+ Names convert_to_process{
+ CSA get_csa_by_name 0 get/DeviceCMYK eq{
+ /DataSource
+ Width BitsPerComponent mul 7 add 8 idiv Height mul 4 mul
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ 4/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ filter_cmyk 0()/SubFileDecode filter def
+ /MultipleDataSources false def
+ /Decode[1 0]def
+ /DeviceGray setcolorspace
+ currentdict imageormask_sys
+ }{
+ AGMCORE_report_unsupported_color_space
+ AGMCORE_black_plate{
+ /DataSource
+ DataSource Decode BitsPerComponent currentdict/MultipleDataSources known{MultipleDataSources}{false}ifelse
+ CSA get_csa_by_name 0 get/DeviceRGB eq{3}{1}ifelse/devicen_colorspace_dict AGMCORE_gget/TintTransform get
+ devn_alt_datasource
+ /MultipleDataSources false def
+ /Decode colorSpaceElemCnt[exch{0 1}repeat]def
+ currentdict imageormask_sys
+ }{
+ gsave
+ knockout_unitsq
+ grestore
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }
+ {
+ /devicen_colorspace_dict AGMCORE_gget/names_index known{
+ Operator/imagemask ne{
+ MultipleDataSources{
+ /DataSource[DataSource devn_sep_datasource/exec cvx]cvx def
+ /MultipleDataSources false def
+ }{
+ /DataSource/DataSource load dstDataStr srcDataStrs 0 get filter_devn def
+ }ifelse
+ invert_image_samples
+ }if
+ currentdict imageormask_sys
+ }{
+ currentoverprint not Operator/imagemask eq and{
+ currentdict imageormask_sys
+ }{
+ currentoverprint not
+ {
+ gsave
+ knockout_unitsq
+ grestore
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ currentdict imageormask
+ }ifelse
+ }ifelse
+ cleartomark restore
+ }ifelse
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+ end
+ end
+}def
+/imageormask_l2_overprint
+{
+ currentdict
+ currentcmykcolor add add add 0 eq{
+ currentdict consumeimagedata
+ }{
+ level3{
+ currentcmykcolor
+ /AGMIMG_k xdf
+ /AGMIMG_y xdf
+ /AGMIMG_m xdf
+ /AGMIMG_c xdf
+ Operator/imagemask eq{
+ [/DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]/DeviceCMYK{}]setcolorspace
+ AGMIMG_c 0 ne{AGMIMG_c}if
+ AGMIMG_m 0 ne{AGMIMG_m}if
+ AGMIMG_y 0 ne{AGMIMG_y}if
+ AGMIMG_k 0 ne{AGMIMG_k}if
+ setcolor
+ }{
+ /Decode[Decode 0 get 255 mul Decode 1 get 255 mul]def
+ [/Indexed
+ [
+ /DeviceN[
+ AGMIMG_c 0 ne{/Cyan}if
+ AGMIMG_m 0 ne{/Magenta}if
+ AGMIMG_y 0 ne{/Yellow}if
+ AGMIMG_k 0 ne{/Black}if
+ ]
+ /DeviceCMYK{
+ AGMIMG_k 0 eq{0}if
+ AGMIMG_y 0 eq{0 exch}if
+ AGMIMG_m 0 eq{0 3 1 roll}if
+ AGMIMG_c 0 eq{0 4 1 roll}if
+ }
+ ]
+ 255
+ {
+ 255 div
+ mark exch
+ dup dup dup
+ AGMIMG_k 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 1 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_y 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 2 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_m 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec 4 3 roll pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ AGMIMG_c 0 ne{
+ /sep_tint AGMCORE_gget mul MappedCSA sep_proc_name exch pop load exec pop pop pop
+ counttomark 1 roll
+ }{
+ pop
+ }ifelse
+ counttomark 1 add -1 roll pop
+ }
+ ]setcolorspace
+ }ifelse
+ imageormask_sys
+ }{
+ write_image_file{
+ currentcmykcolor
+ 0 ne{
+ [/Separation/Black/DeviceGray{}]setcolorspace
+ gsave
+ /Black
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 1 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Yellow/DeviceGray{}]setcolorspace
+ gsave
+ /Yellow
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 2 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Magenta/DeviceGray{}]setcolorspace
+ gsave
+ /Magenta
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{4 3 roll pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ 0 ne{
+ [/Separation/Cyan/DeviceGray{}]setcolorspace
+ gsave
+ /Cyan
+ [{1 exch sub/sep_tint AGMCORE_gget mul}/exec cvx MappedCSA sep_proc_name cvx exch pop{pop pop pop 1 exch sub}/exec cvx]
+ cvx modify_halftone_xfer
+ Operator currentdict read_image_file
+ grestore
+ }if
+ close_image_file
+ }{
+ imageormask
+ }ifelse
+ }ifelse
+ }ifelse
+}def
+/indexed_imageormask
+{
+ begin
+ AGMIMG_init_common
+ save mark
+ currentdict
+ AGMCORE_host_sep{
+ Operator/knockout eq{
+ /indexed_colorspace_dict AGMCORE_gget dup/CSA known{
+ /CSA get get_csa_by_name
+ }{
+ /Names get
+ }ifelse
+ overprint_plate not{
+ knockout_unitsq
+ }if
+ }{
+ Indexed_DeviceN{
+ /devicen_colorspace_dict AGMCORE_gget dup/names_index known exch/Names get convert_to_process or{
+ indexed_image_lev2_sep
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }{
+ AGMCORE_is_cmyk_sep{
+ Operator/imagemask eq{
+ imageormask_sys
+ }{
+ level2{
+ indexed_image_lev2_sep
+ }{
+ indexed_image_lev1_sep
+ }ifelse
+ }ifelse
+ }{
+ currentoverprint not{
+ knockout_unitsq
+ }if
+ currentdict consumeimagedata
+ }ifelse
+ }ifelse
+ }ifelse
+ }{
+ level2{
+ Indexed_DeviceN{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ }{
+ /indexed_colorspace_dict AGMCORE_gget dup null ne
+ {
+ begin
+ currentdict/CSDBase known{CSDBase/CSD get_res/MappedCSA get}{CSA}ifelse
+ get_csa_by_name 0 get/DeviceCMYK eq ps_level 3 ge and ps_version 3015.007 lt and
+ AGMCORE_in_rip_sep and{
+ [/Indexed[/DeviceN[/Cyan/Magenta/Yellow/Black]/DeviceCMYK{}]HiVal Lookup]
+ setcolorspace
+ }if
+ end
+ }
+ {pop}ifelse
+ }ifelse
+ imageormask
+ Indexed_DeviceN{
+ end
+ }if
+ }{
+ Operator/imagemask eq{
+ imageormask
+ }{
+ indexed_imageormask_lev1
+ }ifelse
+ }ifelse
+ }ifelse
+ cleartomark restore
+ currentdict/_Filters known{_Filters AGMIMG_flushfilters}if
+ end
+}def
+/indexed_image_lev2_sep
+{
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ Indexed_DeviceN not{
+ currentcolorspace
+ dup 1/DeviceGray put
+ dup 3
+ currentcolorspace 2 get 1 add string
+ 0 1 2 3 AGMCORE_get_ink_data 4 currentcolorspace 3 get length 1 sub
+ {
+ dup 4 idiv exch currentcolorspace 3 get exch get 255 exch sub 2 index 3 1 roll put
+ }for
+ put setcolorspace
+ }if
+ currentdict
+ Operator/imagemask eq{
+ AGMIMG_&imagemask
+ }{
+ use_mask{
+ process_mask AGMIMG_&image
+ }{
+ AGMIMG_&image
+ }ifelse
+ }ifelse
+ end end
+}def
+ /OPIimage
+ {
+ dup type/dicttype ne{
+ 10 dict begin
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /ImageType 1 def
+ /Decode[0 1 def]
+ currentdict
+ end
+ }if
+ dup begin
+ /NComponents 1 cdndf
+ /MultipleDataSources false cdndf
+ /SkipImageProc{false}cdndf
+ /Decode[
+ 0
+ currentcolorspace 0 get/Indexed eq{
+ 2 BitsPerComponent exp 1 sub
+ }{
+ 1
+ }ifelse
+ ]cdndf
+ /Operator/image cdndf
+ end
+ /sep_colorspace_dict AGMCORE_gget null eq{
+ imageormask
+ }{
+ gsave
+ dup begin invert_image_samples end
+ sep_imageormask
+ grestore
+ }ifelse
+ }def
+/cachemask_level2
+{
+ 3 dict begin
+ /LZWEncode filter/WriteFilter xdf
+ /readBuffer 256 string def
+ /ReadFilter
+ currentfile
+ 0(%EndMask)/SubFileDecode filter
+ /ASCII85Decode filter
+ /RunLengthDecode filter
+ def
+ {
+ ReadFilter readBuffer readstring exch
+ WriteFilter exch writestring
+ not{exit}if
+ }loop
+ WriteFilter closefile
+ end
+}def
+/spot_alias
+{
+ /mapto_sep_imageormask
+ {
+ dup type/dicttype ne{
+ 12 dict begin
+ /ImageType 1 def
+ /DataSource xdf
+ /ImageMatrix xdf
+ /BitsPerComponent xdf
+ /Height xdf
+ /Width xdf
+ /MultipleDataSources false def
+ }{
+ begin
+ }ifelse
+ /Decode[/customcolor_tint AGMCORE_gget 0]def
+ /Operator/image def
+ /SkipImageProc{false}def
+ currentdict
+ end
+ sep_imageormask
+ }bdf
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_colorAry xddf
+ /customcolor_tint AGMCORE_gget
+ <<
+ /Name AGMIMG_colorAry 4 get
+ /CSA[/DeviceCMYK]
+ /TintMethod/Subtractive
+ /TintProc null
+ /MappedCSA null
+ /NComponents 4
+ /Components[AGMIMG_colorAry aload pop pop]
+ >>
+ setsepcolorspace
+ mapto_sep_imageormask
+ }ndf
+ Adobe_AGM_Image/AGMIMG_&customcolorimage/customcolorimage load put
+ /customcolorimage
+ {
+ Adobe_AGM_Image/AGMIMG_override false put
+ current_spot_alias{dup 4 get map_alias}{false}ifelse
+ {
+ false set_spot_alias
+ /customcolor_tint AGMCORE_gget exch setsepcolorspace
+ pop
+ mapto_sep_imageormask
+ true set_spot_alias
+ }{
+ //Adobe_AGM_Image/AGMIMG_&customcolorimage get exec
+ }ifelse
+ }bdf
+}def
+/snap_to_device
+{
+ 6 dict begin
+ matrix currentmatrix
+ dup 0 get 0 eq 1 index 3 get 0 eq and
+ 1 index 1 get 0 eq 2 index 2 get 0 eq and or exch pop
+ {
+ 1 1 dtransform 0 gt exch 0 gt/AGMIMG_xSign? exch def/AGMIMG_ySign? exch def
+ 0 0 transform
+ AGMIMG_ySign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ AGMIMG_xSign?{floor 0.1 sub}{ceiling 0.1 add}ifelse exch
+ itransform/AGMIMG_llY exch def/AGMIMG_llX exch def
+ 1 1 transform
+ AGMIMG_ySign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ AGMIMG_xSign?{ceiling 0.1 add}{floor 0.1 sub}ifelse exch
+ itransform/AGMIMG_urY exch def/AGMIMG_urX exch def
+ [AGMIMG_urX AGMIMG_llX sub 0 0 AGMIMG_urY AGMIMG_llY sub AGMIMG_llX AGMIMG_llY]concat
+ }{
+ }ifelse
+ end
+}def
+level2 not{
+ /colorbuf
+ {
+ 0 1 2 index length 1 sub{
+ dup 2 index exch get
+ 255 exch sub
+ 2 index
+ 3 1 roll
+ put
+ }for
+ }def
+ /tint_image_to_color
+ {
+ begin
+ Width Height BitsPerComponent ImageMatrix
+ /DataSource load
+ end
+ Adobe_AGM_Image begin
+ /AGMIMG_mbuf 0 string def
+ /AGMIMG_ybuf 0 string def
+ /AGMIMG_kbuf 0 string def
+ {
+ colorbuf dup length AGMIMG_mbuf length ne
+ {
+ dup length dup dup
+ /AGMIMG_mbuf exch string def
+ /AGMIMG_ybuf exch string def
+ /AGMIMG_kbuf exch string def
+ }if
+ dup AGMIMG_mbuf copy AGMIMG_ybuf copy AGMIMG_kbuf copy pop
+ }
+ addprocs
+ {AGMIMG_mbuf}{AGMIMG_ybuf}{AGMIMG_kbuf}true 4 colorimage
+ end
+ }def
+ /sep_imageormask_lev1
+ {
+ begin
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {
+ 255 mul round cvi GrayLookup exch get
+ }currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ MappedCSA 0 get/DeviceCMYK eq{
+ Components aload pop
+ }{
+ 0 0 0 Components aload pop 1 exch sub
+ }ifelse
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ AGMIMG_y 0.0 eq AGMIMG_m 0.0 eq and AGMIMG_c 0.0 eq and{
+ {AGMIMG_k mul 1 exch sub}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ currentcolortransfer
+ {AGMIMG_k mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_y mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_m mul 1 exch sub}exch addprocs 4 1 roll
+ {AGMIMG_c mul 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {255 mul round cvi ColorLookup exch get 0 get}currenttransfer addprocs settransfer
+ currentdict imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 2 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 1 get}exch addprocs 4 1 roll
+ {255 mul round cvi ColorLookup exch get 0 get}exch addprocs 4 1 roll
+ setcolortransfer
+ currentdict tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ }ifelse
+ end
+ }def
+ /sep_image_lev1_sep
+ {
+ begin
+ /sep_colorspace_dict AGMCORE_gget/Components known{
+ Components aload pop
+ Adobe_AGM_Image/AGMIMG_k xddf
+ Adobe_AGM_Image/AGMIMG_y xddf
+ Adobe_AGM_Image/AGMIMG_m xddf
+ Adobe_AGM_Image/AGMIMG_c xddf
+ {AGMIMG_c mul 1 exch sub}
+ {AGMIMG_m mul 1 exch sub}
+ {AGMIMG_y mul 1 exch sub}
+ {AGMIMG_k mul 1 exch sub}
+ }{
+ {255 mul round cvi ColorLookup exch get 0 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 1 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 2 get 1 exch sub}
+ {255 mul round cvi ColorLookup exch get 3 get 1 exch sub}
+ }ifelse
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end
+ }def
+ /indexed_imageormask_lev1
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ currentdict
+ MappedCSA 0 get dup/DeviceRGB eq exch/DeviceCMYK eq or has_color not and{
+ {HiVal mul round cvi GrayLookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceGray eq{
+ {HiVal mul round cvi Lookup exch get HiVal div}currenttransfer addprocs settransfer
+ imageormask
+ }{
+ MappedCSA 0 get/DeviceCMYK eq{
+ currentcolortransfer
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }{
+ currentcolortransfer
+ {pop 1}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 2 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi 1 add Lookup exch get HiVal div}exch addprocs 4 1 roll
+ {3 mul HiVal mul round cvi Lookup exch get HiVal div}exch addprocs 4 1 roll
+ setcolortransfer
+ tint_image_to_color
+ }ifelse
+ }ifelse
+ }ifelse
+ end end
+ }def
+ /indexed_image_lev1_sep
+ {
+ /indexed_colorspace_dict AGMCORE_gget begin
+ begin
+ {4 mul HiVal mul round cvi Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 1 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 2 add Lookup exch get HiVal div 1 exch sub}
+ {4 mul HiVal mul round cvi 3 add Lookup exch get HiVal div 1 exch sub}
+ AGMCORE_get_ink_data currenttransfer addprocs settransfer
+ currentdict imageormask_sys
+ end end
+ }def
+}if
+end
+systemdict/setpacking known
+{setpacking}if
+%%EndResource
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndProlog
+%%BeginSetup
+Adobe_AGM_Utils begin
+2 2010 Adobe_AGM_Core/ds gx
+Adobe_CoolType_Core/ds get exec Adobe_AGM_Image/ds gx
+currentdict Adobe_AGM_Utils eq {end} if
+%%EndSetup
+%%Page: 1 1
+%%EndPageComments
+%%BeginPageSetup
+%ADOBeginClientInjection: PageSetup Start "AI11EPS"
+%AI12_RMC_Transparency: Balance=75 RasterRes=300 GradRes=150 Text=0 Stroke=1 Clip=1 OP=0
+%ADOEndClientInjection: PageSetup Start "AI11EPS"
+Adobe_AGM_Utils begin
+Adobe_AGM_Core/ps gx
+Adobe_AGM_Utils/capture_cpd gx
+Adobe_CoolType_Core/ps get exec Adobe_AGM_Image/ps gx
+%ADOBeginClientInjection: PageSetup End "AI11EPS"
+/currentdistillerparams where {pop currentdistillerparams /CoreDistVersion get 5000 lt} {true} ifelse { userdict /AI11_PDFMark5 /cleartomark load put userdict /AI11_ReadMetadata_PDFMark5 {flushfile cleartomark } bind put} { userdict /AI11_PDFMark5 /pdfmark load put userdict /AI11_ReadMetadata_PDFMark5 {/PUT pdfmark} bind put } ifelse [/NamespacePush AI11_PDFMark5 [/_objdef {ai_metadata_stream_123} /type /stream /OBJ AI11_PDFMark5 [{ai_metadata_stream_123} currentfile 0 (% &&end XMP packet marker&&) /SubFileDecode filter AI11_ReadMetadata_PDFMark5 <?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.2.2-c063 53.352624, 2008/07/30-18:05:41 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/postscript</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">Print</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:MetadataDate>2011-09-07T13:14:45-05:00</xmp:MetadataDate>
+ <xmp:ModifyDate>2011-09-07T13:14:45-05:00</xmp:ModifyDate>
+ <xmp:CreateDate>2011-09-07T13:14:45-05:00</xmp:CreateDate>
+ <xmp:CreatorTool>Adobe Illustrator CS4</xmp:CreatorTool>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>160</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAACgAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8AIswHyh2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVmX5Qf+TF0n/o4/wCoaXLMX1O27D/xuHx/3JYblbqXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWZflB/5MXSf+jj/qGlyzF9Ttuw/8bh8f9yWG&#xA;5W6l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVmX5Qf8AkxdJ/wCjj/qGlyzF9Ttu&#xA;w/8AG4fH/clhuVupdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVZl+UH/kxdJ/6OP+&#xA;oaXLMX1O27D/AMbh8f8AclhuVupdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVZl+U&#xA;H/kxdJ/6OP8AqGlyzF9Ttuw/8bh8f9yWG5W6l2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxVm35Nf+TB0//Un/AOTL5Zi+p3HYP+NR+P3MJyt07sVdirsVdirsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirOvyWj5+frRq09OKdvn+7K/8bZZi+p3XYEb1Q8gWC5W6V2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV6F+RsQfzxyNf3dpMwp7lV3/4LLcX1O+9nReo/zT+h57lToXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXp35AxE+ar+Xstiynbb4poj1/2OXYeb0Xs&#xA;1H9/I/0f0h5jlLzrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir13/AJx7g5Xmt3H+&#xA;+44I/wDg2c/8aZfgG5eq9mI75D/V/S8iyh5V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;2KuxV7h/zj9aldG1W6ptLcpFXt+7Tl/zMzIwci9l7NQ/dTl3y+4fteH5jvGuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2Kvoj8kLMweRY5aU+t3M0w96EReH/FWZWH6XvPZ/Hw6YH+cSf0&#xA;fofO+YrwbsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir6k/Lux+peSNFgpQm2SYj3n&#xA;/en8XzMgPSH0jszHwaaA/o3893y3mG+buxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVV&#xA;tbeW5uYraIVlmdY4x4s5oPxOLOEDKQiOZfXttBHb28VvEKRwosaA/wAqig/VmeA+pxiAKD49zAfK&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqyn8sdM/SPnrSYiPghm+sufAW4Mo+9lAye&#xA;MXIOz7Iw+JqYDuN/Ld9O5mPoj45zAfKHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq9X&#xA;/wCcf9K9TVtT1RhtbQpbxk/zTNyNPcCL8cuwje3p/ZrDc5z7hXz/ALHt+ZL2D5F/Q+rf8sVx/wAi&#xA;n/pmBT5f+WyfzZfIu/Q+rf8ALFcf8in/AKY0v5bJ/Nl8i79D6t/yxXH/ACKf+mNL+WyfzZfIu/Q+&#xA;rf8ALFcf8in/AKY0v5bJ/Nl8i02k6qqlms5woFSTE4AA+jGkHT5B/DL5FCYtLsVdirsVdirsVdir&#xA;sVdirsVdirsVdir6O/JvRjp3ki2ldeM2oO909evFqJH9BRAfpzLxCg9/2Fg8PTA9Zb/q+xnGWO4d&#xA;irsVdirsVY5+Y2pLp/kjWJyaF7doE8eVx+5FPlzrkMhoOB2plENNM/0a+e36Xy5mG+buxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxVGaPpk+qaraadB/fXcqQqaVpzYDkfZepwgWW7BhOSYgOcjT61tLWC0tIbS&#xA;3XhBbxrFEngiAKo+4ZnAPp8ICMREcgq4snYq7FXYq7FXkv5+68sdjYaFG37ydzd3AB3EaVSMH2Zi&#xA;x/2OUZj0eY9pNTUI4hzO593T8eTxPMd492KuxV2KuxV2KuxV2KuxV2KuxV2KvUPyI8u/W9duNalW&#xA;sOnJ6cBPeaYEVH+rHy+8Zdhjvb0ns5peLIch5R5e8/s+97tmS9m7FXYq7FXYqp3NzBa20tzcOIoI&#xA;EaSWRtgqKKsT8hixnMRBJ2AfLHnLzHL5i8x3mqNURyvxtkP7MKfCg+dNz75hSlZt821+qOfMZ9On&#xA;u6JJkXDdirsVdirsVdirsVdirsVdirsVbVWZgqgszGiqNySewxSBb6j8geWh5d8rWmnsoF0w9a8I&#xA;7zSULD34ii/RmZCNB9H7N0ngYRDrzPv/ABsyLJue7FXYq7FXYq8c/Ovz6pVvK+nSVNQ2qSqdtt1g&#xA;B/F/oHiMx8s+jynb/aX+Rgf636v1/wBrxzKHk3Yq7FXYq7FXYq7FXYq7FXYq7FXYq9C/JnykdX8x&#xA;DU7hK2GlESbjZ7g/3a/7H7Z+Q8ctxRsu+7B0Xi5eM/TD7+ny5/J9CZlPcuxV2KuxV2KvOvzQ/M+L&#xA;QIn0nSXEmtSLSSQUK2ysOp8ZCPsr26nsDVkyVsHQ9r9rjAOCH95/uf293zPnwCSSSSRpJGLyOSzu&#xA;xqSTuSSepOYrw5JJsrcUOxV2KuxV2KuxV2KuxV2KuxV2KojT7C71C+gsbOMy3Ny4jijHdmNP9s4Q&#xA;LbMWKWSQjEWS+pfKHlq18uaBbaXBRmjHK4lAp6kzfbf7+ntTMyMaFPpGi0kcGIQHTn5lOck5bsVd&#xA;irTuiIzuwVFBZmY0AA3JJOKk08k/MH854oRJpnliQSzGqzan1RfEQg/aP+X08K9RRPL0Dy/afbwj&#xA;6MJs/wA79X6+TxeSSSWRpJGLyOSzuxJZmJqSSepOY7yJJJs81uKHYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq9y/JbyGbC1HmTUI6Xl0lLCNhvHCw3k/1pB0/yfnmTihW72fYPZ3BHxp/VL6fId/x+73vVMuek&#xA;dirsVdir5n85/mZ5g8zloJG+p6ZWq2MJND4eq+xc/h7ZhzyEvnuv7Xy6jb6Ydw/T3sRyDqnYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXof5Ufl22v3y6rqUX+4W1bZW6XEq/sf6i/tfd40txwvd33YvZfjS&#xA;8SY/dj7T+rv+T6DAAAAFAOgzKe5dirsVdirsVfHOYD5Q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqy/&#xA;8u/IF55r1Hk9YdJtmH1y5p17+lH/AJZH/AjfwBshDidr2X2bLUz7oDmf0Dz+59I2NjaWNpDZ2cSw&#xA;W0ChIok2CqMygKe/x44wiIxFAK2Fm7FXYq7FXYq+OcwHyh2KuxV2KuxV2KuxV2KuxV2KuxV2Ksw/&#xA;L/8ALrUfNV4JH5W2jxH/AEi8puxH+64q7FvfovfsDZCHE7XszsueplZ2xjmf0D8bPovSdJ0/SdPh&#xA;0/T4VgtIF4xxr+JJ6kk7knrmUBT3uHDHFEQgKiEXhbXYq7FXYq7FXYq+OcwHyh2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV6N+Xf5TXuumLU9XDWujbPHHustwP8n+VD/N37eIthivm7/svsWWap5Nsf2y/Z5/Lv&#xA;e9WdlaWVrFaWkSwW0K8YoowFVQPADMkCntoQjACMRQCthZOxV2KuxV2KuxV2KvjnMB8odirsVdir&#xA;sVdirsVdirsVV7KxvL66jtLOF7i5mPGKGMFmY+wGIDPHjlOQjEWS9s8g/kzbaeYtS8xhbm9FGisB&#xA;RoYz1BkPSRh4fZ+eZEMVc3sOzewY46nl3l3dB+v7ve9T6bDL3pHYq7FXYq7FXYq7FXYq7FXxzmA+&#xA;UOxV2KuxV2KuxV2KuxVmPk38rvMXmUpccPqOlsd72ZT8Q/4qTYv89l98sjjJdtoOx8uo3+mHef0D&#xA;r9z3fyp5J0Dyxa+lp0NZ3AE95JRppPm3Yf5I2zJjAB7TR6DFp41Ab9T1KfZJzXYq7FXYq7FXYq7F&#xA;XYq7FXYq+OcwHyh2KuxV2KuxV2Ksh8s+Q/M/mN1OnWbC2Job2ascApsfjI+KngoJyUYEufpOzc2o&#xA;+genvPL8e57L5R/Jvy7opS51D/crfrQgyrSBD/kxb1+bE+wGZEcQHN6zQ9hYsPql65efL5fr+x6A&#xA;AAAAKAdBlrvHYq7FXYq7FXYq7FXYq7FXYq7FXYq+OcwHyh2KuxVfFDLNIsUKNJI5oiICzE+AAxZR&#xA;iZGhuWbeXvyd846sVkngGmWrb+rdfC9PaIfHX/WplkcRLuNL2FqMu5HBHz/Vz+dPUvLX5N+U9I4S&#xA;3cZ1W8Wh9S5A9IH/ACYRVf8AguWXRxAPR6TsLBi3kOOXny+X67Z0iKihEAVFACqBQADoAMtd0A3i&#xA;rsVdirsVdirsVdirsVdirsVdirsVdir5K03y7r+pkfo/Tri6B/biidlHzYDiPpOYIiS+YYtJlyfR&#xA;GR+DMNK/JDzreUa6WDTozufWkDvT2WLnv7EjLBiLtcPs9qJ/VUfef1M30X8hvLttxfVbubUJB1jT&#xA;9xEfYhSz/c4ywYR1dxp/ZzDH6yZ/YP1/azzRvLWgaLHw0uwhtNuLOijmwH8zmrt9Jy0RA5O6waXF&#xA;iFQiI/jvTLC5DsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVf/2Q==</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:InstanceID>xmp.iid:0980117407206811B297A84155AD39AE</xmpMM:InstanceID>
+ <xmpMM:DocumentID>xmp.did:0980117407206811B297A84155AD39AE</xmpMM:DocumentID>
+ <xmpMM:OriginalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</xmpMM:OriginalDocumentID>
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>xmp.iid:0680117407206811B297A84155AD39AE</stRef:instanceID>
+ <stRef:documentID>xmp.did:0680117407206811B297A84155AD39AE</stRef:documentID>
+ <stRef:originalDocumentID>uuid:5D20892493BFDB11914A8590D31508C8</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:D27F11740720681191099C3B601C4548</stEvt:instanceID>
+ <stEvt:when>2008-04-17T14:19:15+05:30</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T16:23:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F1174072068118D4ED246B3ADB1C6</stEvt:instanceID>
+ <stEvt:when>2008-05-15T17:10:45-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:EF7F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T22:53:33-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F07F117407206811A46CA4519D24356B</stEvt:instanceID>
+ <stEvt:when>2008-05-15T23:07:07-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:35:43-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/pdf to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T10:40:59-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to &lt;unknown&gt;</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:26:55-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FB7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FC7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:29:20-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FD7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:30:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FE7F117407206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T11:31:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B233668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T12:23:46-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B333668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:27:54-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:B433668C16206811BDDDFD38D0CF24DD</stEvt:instanceID>
+ <stEvt:when>2008-05-16T13:46:13-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:47:57-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:51:06-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F11740720681197C1BF14D1759E83</stEvt:instanceID>
+ <stEvt:when>2008-05-16T15:52:22-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FA7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T13:28:01-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:FF7F117407206811B628E3BF27C8C41B</stEvt:instanceID>
+ <stEvt:when>2008-05-22T16:23:53-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:07C3BD25102DDD1181B594070CEB88D9</stEvt:instanceID>
+ <stEvt:when>2008-05-28T16:45:26-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>converted</stEvt:action>
+ <stEvt:params>from application/vnd.adobe.illustrator to application/vnd.adobe.illustrator</stEvt:params>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F87F1174072068119098B097FDA39BEF</stEvt:instanceID>
+ <stEvt:when>2008-06-02T13:25:25-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811BB1DBF8F242B6F84</stEvt:instanceID>
+ <stEvt:when>2008-06-09T14:58:36-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F97F117407206811ACAFB8DA80854E76</stEvt:instanceID>
+ <stEvt:when>2008-06-11T14:31:27-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0180117407206811834383CD3A8D2303</stEvt:instanceID>
+ <stEvt:when>2008-06-11T22:37:35-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:F77F117407206811818C85DF6A1A75C3</stEvt:instanceID>
+ <stEvt:when>2008-06-27T14:40:42-07:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>
+ <rdf:Bag>
+ <rdf:li>/</rdf:li>
+ </rdf:Bag>
+ </stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0680117407206811B297A84155AD39AE</stEvt:instanceID>
+ <stEvt:when>2011-09-07T13:14:07-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:0980117407206811B297A84155AD39AE</stEvt:instanceID>
+ <stEvt:when>2011-09-07T13:14:45-05:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS4</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Print</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>3.965807</stDim:w>
+ <stDim:h>6.000000</stDim:h>
+ <stDim:unit>Inches</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Default Swatch Group</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>White</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Black</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Red</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Yellow</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Green</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Cyan</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Blue</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>CMYK Magenta</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=15 M=100 Y=90 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>14.999998</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=90 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=80 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>80.000000</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=50 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=35 Y=85 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>35.000004</xmpG:magenta>
+ <xmpG:yellow>85.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=5 M=0 Y=90 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>5.000001</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=20 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>19.999998</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=90 M=30 Y=95 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>90.000000</xmpG:cyan>
+ <xmpG:magenta>30.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>30.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=0 Y=75 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=80 M=10 Y=45 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>80.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>45.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=70 M=15 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>70.000000</xmpG:cyan>
+ <xmpG:magenta>14.999998</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=50 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=95 Y=5 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>5.000001</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=100 Y=25 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>25.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=75 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>75.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=100 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=100 Y=35 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>35.000004</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=10 M=100 Y=50 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>10.000002</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=95 Y=20 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>95.000000</xmpG:magenta>
+ <xmpG:yellow>19.999998</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=25 Y=40 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>25.000000</xmpG:magenta>
+ <xmpG:yellow>39.999996</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=45 Y=50 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>45.000000</xmpG:magenta>
+ <xmpG:yellow>50.000000</xmpG:yellow>
+ <xmpG:black>5.000001</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=50 Y=60 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>60.000004</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=55 M=60 Y=65 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>55.000000</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>39.999996</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=25 M=40 Y=65 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>25.000000</xmpG:cyan>
+ <xmpG:magenta>39.999996</xmpG:magenta>
+ <xmpG:yellow>65.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=30 M=50 Y=75 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>30.000002</xmpG:cyan>
+ <xmpG:magenta>50.000000</xmpG:magenta>
+ <xmpG:yellow>75.000000</xmpG:yellow>
+ <xmpG:black>10.000002</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=35 M=60 Y=80 K=25</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>35.000004</xmpG:cyan>
+ <xmpG:magenta>60.000004</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>25.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=65 Y=90 K=35</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>65.000000</xmpG:magenta>
+ <xmpG:yellow>90.000000</xmpG:yellow>
+ <xmpG:black>35.000004</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=40 M=70 Y=100 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>39.999996</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=50 M=70 Y=80 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>50.000000</xmpG:cyan>
+ <xmpG:magenta>70.000000</xmpG:magenta>
+ <xmpG:yellow>80.000000</xmpG:yellow>
+ <xmpG:black>70.000000</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Grays</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=100</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>100.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=90</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>89.999405</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=80</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>79.998795</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=70</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>69.999702</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=60</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>59.999104</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=50</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>50.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=40</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>39.999401</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=30</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>29.998802</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=20</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>19.999701</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=10</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>9.999103</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=0 Y=0 K=5</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>0.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>4.998803</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Brights</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=100 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>100.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=75 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>75.000000</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=0 M=10 Y=95 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>0.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>95.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=85 M=10 Y=100 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>85.000000</xmpG:cyan>
+ <xmpG:magenta>10.000002</xmpG:magenta>
+ <xmpG:yellow>100.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=100 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>100.000000</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.000000</xmpG:yellow>
+ <xmpG:black>0.000000</xmpG:black>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>C=60 M=90 Y=0 K=0</xmpG:swatchName>
+ <xmpG:mode>CMYK</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:cyan>60.000004</xmpG:cyan>
+ <xmpG:magenta>90.000000</xmpG:magenta>
+ <xmpG:yellow>0.003099</xmpG:yellow>
+ <xmpG:black>0.003099</xmpG:black>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 9.00</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?> % &&end XMP packet marker&& [{ai_metadata_stream_123} <</Type /Metadata /Subtype /XML>> /PUT AI11_PDFMark5 [/Document 1 dict begin /Metadata {ai_metadata_stream_123} def currentdict end /BDC AI11_PDFMark5
+%ADOEndClientInjection: PageSetup End "AI11EPS"
+%%EndPageSetup
+1 -1 scale 0 -402.576 translate
+pgsv
+[1 0 0 1 0 0 ]ct
+gsave
+np
+gsave
+0 0 mo
+0 402.576 li
+248.096 402.576 li
+248.096 0 li
+cp
+clp
+[1 0 0 1 0 0 ]ct
+248.096 0 mo
+248.096 55.6211 li
+248.096 125.187 239.843 182.252 223.376 226.81 cv
+206.896 271.366 178.358 309.196 137.773 340.326 cv
+97.1987 371.45 51.271 392.2 0 402.576 cv
+0 296.38 li
+36.6191 275.638 57.374 247.856 62.2559 213.078 cv
+0 213.078 li
+0 0 li
+248.096 0 li
+cp
+false sop
+/0
+[/DeviceCMYK] /CSA add_res
+1 0 1 0 cmyk
+f
+%ADOBeginClientInjection: EndPageContent "AI11EPS"
+userdict /annotatepage 2 copy known {get exec}{pop pop} ifelse
+%ADOEndClientInjection: EndPageContent "AI11EPS"
+grestore
+grestore
+pgrs
+%%PageTrailer
+%ADOBeginClientInjection: PageTrailer Start "AI11EPS"
+[/EMC AI11_PDFMark5 [/NamespacePop AI11_PDFMark5
+%ADOEndClientInjection: PageTrailer Start "AI11EPS"
+[
+[/CSA [/0 ]]
+] del_res
+Adobe_AGM_Image/pt gx
+Adobe_CoolType_Core/pt get exec Adobe_AGM_Core/pt gx
+currentdict Adobe_AGM_Utils eq {end} if
+%%Trailer
+Adobe_AGM_Image/dt get exec
+Adobe_CoolType_Core/dt get exec Adobe_AGM_Core/dt get exec
+%%EOF
+%AI9_PrintingDataEnd userdict /AI9_read_buffer 256 string put userdict begin /ai9_skip_data { mark { currentfile AI9_read_buffer { readline } stopped { } { not { exit } if (%AI9_PrivateDataEnd) eq { exit } if } ifelse } loop cleartomark } def end userdict /ai9_skip_data get exec %AI9_PrivateDataBegin %!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 13.0 %%AI8_CreatorVersion: 14.0.0 %%For: (Jon Ruprecht) () %%Title: (Comma.eps) %%CreationDate: 9/7/11 1:15 PM %%Canvassize: 16383 %AI9_DataStream %Gb"-6BocQ1OWaK.p`K'"!B0G3Et3Ej2'-_']KQ3sFrN&X:H'2EJm'Ie25@"@;VC+)lX-_=cZ6M=PY+s$91YI0P)"fc0Hq>Q^\V^B %rl96?^4,h4pAP$ec-;Vn7XnoX]^]Je?[_V)?iT*8&$m1`@8%95h:`RJDRb\$F7;H-c+sU/CB+:pO)JC=qtU%!mpEg*iJ67d2t'!/ %n=,p'hd3t-q2\TqhRrlhq.fLsiL@aN2m3_[5J2F7nYY(O#TN.igE0e;q=]"s^AY6:++A:k@R@<rL>)FS+'s?h$JN>R)>m;!?G?7* %gK2.>oA\l4Du]&Rr:pTq6i)Ods8(9dO3hfioa&7brUrJT\aL+qV>TUCs7#<cf0=Z\nD`Kop[A+EYIX$b^3]\TRhm/RnZ]^=%6&G= %n:12Ee:_g<X_4C>\(6Q6bAcLtE1:;C2kbK!fI#b2?XCMDlYgZiqr6`'G9>`Bn7Ng#mpEijRFuu_q"<tQ&&r??]Z&tE)RK@>5Q(<= %eVAX&p\H*CMrq,1ZbLqgmAi285],HKjol6CTJEtU\\]FqI/*-[7p+UADgoW%s5kX=ngBh&k:ci.l3#?O^>NA4J+`5jn,JBY49g.J %#7hXQdu_HIW,S7(c"QKhP;7O/oIB$3MFs#_NqDV!gW.mL/U[pLg@&I\roM&`mp<d+NH?n'o8au"J(p8Cfpg4cd3rmRpTNdFmOjIr %j2Y6iV#,[@]AL&?L>hj8?h4[)ph)juG;!:;_84"pnkFkAC]P@/m9b6g!RKp3lhK@ErL]SHh``6!%Ie?Is,Rcl0*VC5m1eh*rcAYM %l5]fR3WA@'J5>c80k.7%nQUrS.n6TTj5HYJQ@a6O_)_``piIreWt_Xh^Z#2pCU_2b],a)GgYlL_403K_i*R"M)"Hk.!WRU.n2&j0 %mP"<ihoL;d-hZrRRBQ+0XG(0$s03?"8OppQ_\(l-=9h?Ls5UV3-MU^`'E4'ME('Ic[`%dU/`VZVIiLEH6n"'%hoW4Hn&JTk0)QgW %*"E8'otd6k*:k`P/E-X,,`eIBc[Fujn_:>3\jfkU5?J<6L]:jW]Ri7\rYr$Xrkqu"5$_Tg'n-q=L]?Bn*$)4Irm*_t#l]mmE.%FF %Y9IH_cRZaPhl&Mb4]hR/2<4]+XCEiR2k:a+3VOSAcMcbsEm)%#>XL_X#=k\ZM5.tdH.;an*$>0@[2?YuHoreS/H1]QE-14m`GF?l %4ELE)`brb(`>-?MloAP_j+?\,>uR>=mN'V7^R+*mH`elnA)k:5/U]^icHl+>q85AYS]TO.CX."=/KEulptKsR5@_FUh:d%<c;VW/ %`brcmL4Au?_]dk#D3]70gH&`'F=-PB2B1@OmB=6jgZ9g'EM*jAA?%W3a'/I8qoKrKq0W"\+7iJ<$u%s%P7i@`5P^L!J'V9TS`R32 %n6amFrbT(A^&@#Qq.dZW8GgN$]0$#KIe%-M+/\52G5+;*.t?/hr"I(_rQ^0QNu%_SfDRO5?2I%i':uqtM8K@\YPk5oa8>l5<)5k7 %Xn;DPcT5iSCTdW3GMh`.p?q`]rm\8tA0rCK/Y<DL0:BqS*`Hc*mu8pn`ODm%p#iZr+.99[$;CDdm-jg]b@e`BT@*Z;j;dr'R/4/C %htP'T97B&+VZ'iopLiI#Qi&uFm[qc'^-B&R-;=@UmI/B:JKKKCDY#[:hf_aDJ,3*gnh6?SjA1f8p(F@q(q+f59O5s):HiR7Yk$Z' %EnScoA#e:4q>8qBT>UId*.ACp>NYJa3n5d2/naaQT!bu@K`#mNIqSN;mr)CuHXk7ikGQ/Gr3P>=[,,0>WFksIF8'b.hjaOb3.E#& %i]<]MelHGSmcSQg^2,-G>"hB,pId`#UP/1!n*`LWa2b#lO,p9nIJNb%H^Vu/kZ"nd$W?RLIt&OMFY:Fj;pG4f;kPdlIkqQ1ZHqFe %:tPRPRC0GP9S'qMo/B8Y?i'cYjN7D8)J_MEVV8q:nB6*QGMdc.O8CbQDXQO$6kuUa[>/,;XNgbG5NGsp#e#+i9SHccMN'jVXNgb' %D@):\_UJ7VM*tS9NMjhR%Fgkopa+0gpCI.6^61Lh(V[tlh%NkDStDq^o,!J4hbPouJ2G:EqZ:_Rq31%#@eP9I=jqjg?fL21l1<PJ %lK=G"R^I@b]8cE$p>>FZ7t5D?c`HY$OKeI(S-?3F/8Vj";fPRnXe-,.ZG+lba/(B.J)YeG4#cu?<p]b!/8K"7g>"jBMOjbRn(\ro %6,r^\3"aRbI-1TUkZ-r^3=+dD:Pc!VJ&iXLS:\5B77Kb,0&q>t'g)#oQ#U]F>IF@32sqB)qS[^:DoGKO6^\tP.5^^]oC%,k_r4O' %lKk/1Gg#:)Th+:gEJjX-.$O4!inbL>Z"nhApGZMYOgfc@9O3-/kZbN_Y1r!,,iPjCfCb<S53@1?hF[5!4/,E@;*H?;QgQ4a4D<M( %kCd&ZD>.AN@eX)JZBrqMh1aYI1"Vo!45al2B>s;R]+nQ.mJ_D_J%Ya)UVCukm^q%kCa&(lJYqJta,U*iEk^NQrg<UfWQaPBoCe0B %9YSLfrAa+;mk*/F9ch.EcI1<W3"tgX[q3,Do4dB$Ap=2+rj8,%HJe^Cl.>-9$X].kT+@d>6kSj$gUh(:n3(sYpY[F('+oZ#j14\B %AAq[6@6^Ic)Qph<@S_6-4bf3RhF!WXr`%pd2#jVFk_JR=lLdT[XNR6VFpXaTlreh[CO/`k[s]ei&#A6;(3bhF6g8-!mk2T7j-Y^> %iJ,g03es]nJA#qmU'E@!8tmTs<qj`3'pH+^21.Hu6ZIh9M&<afESKhWYNEuQ)2*>h]fWjkDF5pOr>sO9m^CbXDqE^[kHSZkm*q#l %3hIG$ltMu-'+0ZuHK7#Ts5L)kGMcjj-2qcUr[h`tqEYcHrVj_32t+NA^X_6+042KjpuD+=0oE\po=O`nqt3%pj(*U/J'$UGrlpMn %VgnX6rl=L-l.qugRpU$HIK*ZXDZ9D3'5N#?o.U.:^L"VOq!4DV$)%7jooH:@^:Ja_qYOWlD!:BN`J7MRr'u"!^?X&9:[_Zhl2?CH %m;[m;^&-!R2t+NMR]VYfn%QL2+"og*J%k1)^NoA;`J5Caf9W&DrX8Yc"jBhZ]>6+5oYnj8he_2_HM?e;[8$W]D3&,gg\^gn-K=l@ %Zi0CR%tD=hj88RhC9uARe^amt:os\.]]8bY^q5)A`tPh-P>mpaC%L<D(\\]DIJaQDa"P!rh2=41?@V_.`V4k2rGq9/.t=a@ikJcO %=FY\p?glmbro%_3V[i:p(EYiTIei-Vf73\Vj/]Ye>/T%ge*D58![89)Bt\rpp3TK8Gk:U#?[Vm2gALa/"4d=\2Aj./_Ut'dB?s?" %6l0dMn%-:6j+eH.^'8WT)]8VPn%XW1quHdNhYc*O^>Fl.rau&0q+if6Ik\cPfL"7#HRO*U@5s49i!Duh)a0E>7OSS17NTa_J[-;? %:uF#/j^8<A,@u=Eef3plYgFdGfbPtT]7mPsHRO+3?k7-od'C!BE6c)RUA9;3-hJNGRcUdp5=,l_Xm?\iT].kIlZR.Vjj"nE!$/K( %H1-BH55FQ'nJf7942:N6rXaf<6L-9!&4-dSjA<]?Cr7ml_d,7?!QJfJURkkR.k!A22aGhZ(uXjM)D[NY1U`tpgX1u9d>SO4B$?d: %ZLo)fSr>U8IC&l+n'JF7dnWWK2-W[C*M]d*g:'CSRrj\%2pT"d3ll(m?.:r'M_n^@?7]D8>VKJ>>dPM')D%@/*&!kX,[n31Y^hJ[ %&B[J.OV\Xr;AKq4P8BIM'Gm%$[Ep,KGF'Pqda1DoL0c^UQk!cQ$uMkt"/l=hKG\3V)+oaT\;e,1O*=D1YYHE:T1eZ#k[qcgAgWeM %J[/"^Zqko1!"4Xa!p?fSF+@:(PakD'jDEc8ID1>S-j-Q>KgGNd@uVe">Y<\6XXQ=[qf5aJJ.3_S&r[d,05MiF-Z9?)8DEJhqp!sZ %!8''d,/TfDD4inY$po`bKBS(5"/,X'n,*+Y^!C<=q.\Hkj3mTh^SecJI5]MflLHiNdl)-fG-g"BGME)iDL2BU+*SJsbejcVkZW^$ %g$H/Zh/:!>gDtgeNI\?Qn+U64pW;dn^?dfUm='i$i:[E.3?oZR"&oZ4F:%*BghlJfGItKch&W#J#2C>W\He]^fa.2T?^/0*3Qqlu %TY^,Y\t/\,(M3U9ZNAcpn@u-E=\5r_B;Nhp`jj9pChI<</,N@nZ:91tb>ub\b$N5]PQR738/\7+.5V[W?S4X%IZfpHV+B91fh0ph %fjcamqR"CuD2`ClEK"stFc:O'H&R*/I>iZ7JW,5?Kn+qJ:m$m&d?+tQ$=Y:@,\&.ZV-kY1-=\F`-Y$gELnrO#ROBi.8PpHHV$pVs %%T<).Qa2fA@l*W37S8f+V'IKeMQW;4ihS!N'8J=3hnV)F..b.`muH8?Ju9LZ4[ll@OKD![%$I`IZ61pY%(CkEs$ff;Nl-)L9Gml6 %TFVUbqq?Gjc.REt+/gbQ&dU"bY*p;IOZ)p8SZ.J5h7<T9:0=bhI)KO6i?m[@!=3OZm9Dehb<,X.`O*gUG<&'o1Cccfk<p>(A%SpB %XU:ulo'65)&$Op(nF_k2IX(MtjONL=R(p`5.Nf-mI`ft).f(Op.1.L:os2JD_UJm_N*qkU%RPtp6@',n>E-IGTdctHq'*15BSKrE %:KWBsLR;_2Xto/N7"m%u.@!ebJ??%R`6,d]X)p&[5UacdP[_&I2EJ)heei_J/!g&6qI7%<d;P&R4W7O+`icCKRCgTf,+1-?-QXpG %*r.p>H;?'l\NTM1jS14(+Q#]7^F/;f+INB:JC02:@YNie.DeN@0io\`iMJcqX?<eo`L[5?]2Kb`3nC1plqZYEO_"b``_e!T/!@$` %*4S1'JTW]aX-/\uV:;fMV2gYA=j)7lmYnoMPf'lDX:1*a<^D66'XEi'fPY_EZZ6K'K,@8sc*[u8:3L'10qFWhALI%<A9>9LLB/m\ %_#mndZp5iBRL@KHK3+"\JGHp3q;9#GCg`A\oHZar*dVImT*+`\DE?Y)6eo5)DkLUqo]Rf\-,ZW,PlZ*r0N:neX>AugU+)851JrWO %&s?iDSZ$DX'a;$XJh7l@9,oM0Qj+ZfGHd3RYb="[feRC5#TMSeo+ne6!4;&%8AU=p_Zkoa"sOXfP.cEQ^e2p"BDEFk(43]]H<*1/ %r5fTJ@cW<gaE10PccWM<WO%1M^sfA5g?fu<G^p#\bL.6L9-hm3l"iur8K<5AQ6HuMBbYh(DL<coW!gBc3ac_e:]ZEr&BuN+&k,Zn %QUHo1K00;T'@LXNHVDPC;]lDLiZgAoeq.]BfSq'"ZXLfXY0)T4]sn?*Qj^-3XW79FU/#eT@91saknjmO6!\h/hfs^mjWZunXqIp: %WU&&7.L>.6[5)m8g4C@1K'burBPRg-KFM<jL;-.g><EH/$ce-5G5qqu%k!AhnB_4W8Ka`1TYV+/e[QR,#E\?IE.ZaET.SF3"Cb'W %H3;Z1g^_,:msslpJ-Tum>r1iX#[H'c]s9m.#N4Wi1'0#G*[a"("l^beGR>)3JPI/.Gg6>YM6q=kdtOPiFFjlgBq8@n`Y"N(%OOT0 %G=80f<#6b5M+Dm<"e>q][p`70er;5%c_T*$'hI,f.)e61fJEKRj]`8O]1F,Y_k:0hB5:Cl,M'.KB03.I$gncUYtbcn<Jals/Bdo5 %C@f'q#J:Obj/J$.W5EJf#7!qP^5Z6A)#4:H7pBk##Q72rC[f1G=q:_L4l]CKPU!stlebm*CQ8[U(Z2s<q=sr$qrYl@rs_JOl$$gb %W_.X%NbWSXbmY3HE'B.:fQtg.qYU3`]2rOL@gM^O%V^?G,PqMei;:F[YQYoR!"heAJd?IGa!:IH#P:/"a>\5;:3>(\FL$Y=o_nig %pAKH<[(nd>0`YBbOW'T[a8rQU/[;`X/1hD`6RF]&?/-)N6op\EOhX.L&#nAM1i?*Rm9TjT=l\iZ@I.TcZSQ(rdC9J($UX9KeD1G! %gCT376J`]E2Bls]6I_Bq,p?l\fF>-M#9`K>MS-iTOI$DF4n?lAd-;;84sBAdj?8Qcf-'n.aSYZ-5CI(NE:\"O^O,_?j2Y5O^hZbW %h82$eD>cDn9X+r#\i9Hr],:.A/)K//GFMO9SXaZ))@IRL.W,A!3OkOebhLfkXJL3MQ'UQqcg"l@RFH_7p[6#T=5Vk^-_Qq@k&^b4 %bN>'Bn2=krEBrkWED6U[hi$uN2?;37RVT#'okrlp\/ZA>]L#0nNp_P;+elW4i-<@R/MQdkO)6d-I=NY&q_;W_0j5Ack/oBLA@Z`f %\&FAuoQ9="deWsr^m2r;lUE7%a'52`WGhZslJ/Zq,AW3g5)i;ARCuWBqY<*PojOdSk#Gpm0O>f&d=j$`CBcRup.DFh;/@XOBgbF- %^GKa=iuUFDWl;?eV]Huq![8IYQQ<b0$+H+Ljd5)#]&FT1O9h'gl_>@UY1C)M2VFVj\K4tYH&gd)=l6A(c%AleXJ8*J<!\EiUGA"o %0<i*5O'A1oHuRc.rPLh2Gqhr'Q0l]!3Eh<nQUT"H--]&PPgBb9X&aNSGAm*qCDjL01s8=iX>Db$5P.=/AMP0B8EAmLqBT)AZ'Cc; %j_P?5b63/6J/i2u1+(]L5k=FcaiJgDR6MXRQ4$j&1YJBEaj#D'%$%,rPb1Io_&QF3hG^>\,"ia#CaHB\#EbugWb/g<+PP.IeTthm %Y>$BR2^,dHZUIBm->+tXD32*KWhA/uJ")D!'"5s7/7#Suc&ss*eV;"W(916ZMt/\Y?BV-^OtJ"KUC9;Kr4F9-3K`*5JafGM]EM_( %Oe?MZ@9<t,O&V\hr7NuQ`WFR)F2!Mn>Z6UZEd(C6T.*$Obeib&bM5*KbM7qf6V#b2)#>t28'23pV5ZQ*eCeQq%:plh;S=#LF0Y") %"3ibt*EX4o-TZ&,LKL:mA@eJp2&E[J-RhnljBU1ubWXn1BNT%&(5RTVcgO8S^*h+a<qPSpdA<m%4]RJfW*4=V3n='tjpTbCh^LLQ %kh&nYY'TfABs/9a-=M["r]E'jII?N)bfN*<Y::fiR)A>[fcD`7eH1na3L!+WZ]\oH:.j`-GVkeEMjs$;.EAuogVVKXe_+g(l8Ed, %l^ch"HWtQ.j,J1(NFiobS*WbQW/.#p?3ZN;<H8dV;'\OE$Fcc,/4Lo#-n8%H17no#.cdRRVh1HHF]N=*<?l7Y(j@'uBJ6DTQI?6K %C8qbD&WKea/>'1hempS%bZ$2^]dH?^YdPg@)%arRLh+Tep*,PddVbd9[O:((8J\Y.CI1TD""cnZ35V-NJ@oG9Bh\q=]$`dD4>hAe %1AMdaaIf*3_=<[t/up>\!m_7\lAfko\D5>e=b=ZlM6]3H=E)q3rM>h)C+5(((PSY+,Jm4iJQ`Ad1)7TOkPB(bc.IMlhiC-+mV:tr %pU+gQ!R]%hq5RCC9-l0T[T)8O?!*t!.\-f:Y5q.#L8f4!K5?%a^Sc)ke)4h\'Ircl^-uLX'>prq9kV36-[ESj>P&37naP^M*;_,G %Iq$r=Z=>&]LR<i`]&qCoPQLcOdmPL-Y3*W$O`oQ6@E5?JH8j5(XXT=n8u#Ai'(_Wi&MD1^5YhG[dW')aZQZ+Oo5e!$?BFX'CPlZI %[r,YkOV!0s@0f:kcEj_gEt5a?]';%3Mq;a!*fX!c#L/C?jii\Da+<m<;nImGISKWe6"NNpLm^9E<sL'3EQ./.i/Xek076$E6RTKc %7?8OLc=%`a6`4(R5XLKG%,q\"A7>1q84F()<9Mjg$".T.Mp>;:iOBNhGpgFto6ARpEIh^7)Q98+I<].u51@bXH;d3*e18*k5T=`$ %*eaMs#o[mu367-#6%XfR'R%VL;J#r%k"(0R1.H!A(m42XYHI@3Znd\FRRSo(j-SnJ9R.5t<)!1s$ZMQ$mE)["Mj]%]b5P`/cG[?8 %/_;k)3+'lUQ*)RNJ-Ikhg(O'L5WQ8D21T-Y]a."T2FJc"6lh@C+Apc&1#N$5,QP@IH.0Z;2\J*CJNFkIe`+;HeCRlSb=Z`3WR3;5 %;.!Va<u:\/Z!YuL(("rR(bc8&m:0C)P`*PlCrj.k"'mb5V%7aCJ6Z"t?9%)D7D6(<Q`V*Sp3lR+NIVm7Eg@7R1Pp]\;Pe_#eWQbn %=uNdqcYg?N>;8E</8TNo1=Q*dL.1>pIoCi&$'gdSa]$1)MckWWm.-aebQ(.)hPJ1R]SU!#K09Bp+F@o)9pgBS@$42HmQe3Gg49;o %!VC!H@4U/!6/di[#"f$GB@IG8lUQh`*$4>Jno1HA9Il4h.]$N6TgYV&&4.@1N=&sN$(XMjqe6W@,aM`1fo6-FBo#t$`8BhAQ;+L? %pg/,_WY*:8Qt)n"a#3@2m'`&E".o-16-,I1a;YFShF]cu:<h+d"=;U$*+nk3cNXofoVf`5jWA(!mE@q1#La\9g**1T9#uQm;WaU* %f><EJqJJ8j<qI/U1%TYf'BLDORCTEQS\MP!bH(Wu1tX44UD$<J.0NF"LFS);WJ+,!Hs4q(WZG#@?5^j7@jIMJFFhDt8#9#AdRd%c %/VLV<&8V'F"qUI%_g@EcmGo$EM&8uW!f$SkiBC69:h+W.2OHoO?__e>6l]bMDi0[=Uoh]u44.ZE\`4e6cQIeP/GO1(+oln^I9`M/ %o1#`K_OX<rCqA&JOBkpKMIAo/C?7-&6t*!)?'e)o=gPAkZ>,&a'S!c_"XlL7QrWY''AWCm*qJeR[)&V^3oOcIT9K>lgQ=hB;Ao`J %d`TOi'[7<om#*a7e.p;crcE7Hb+VK%0S<!238UAbqSr?c3!S8AT)VBR^i6Ygj,M%AZBG&3k'q,LijfQp_.osZY*OqY/ZU9k=?Xc@ %'NV3;OMN-O*c,q...*-.b,W-HS?#4Ss7)<4(<%=DURBjKmU(d&<StO^AU@!'QW:Z14CWs00d<O6'BKkIKF>I6f#k])0s5`f^]BX5 %>Rf_a$f`F5W&ZSI^^u2.M66]9A:n1C)D[b"Lrj6aSni.h+MiZ[M6()im\W?O;HCWi9[:9)Q#\V>RcJS%>g_9+=dt;Vf<.GqN@ItU %Pq)6rLLB5d:0ZP=C[OslnZnRU\lnX#iRA[EBoPl"E&j?<#_U588(afs`;ui\ap1lGS(KEGPgHW([nA2l-6a-mM%LNh4U1qP%&e]< %!<%'%M#$/TkP/=q3d!mk+3a0$3kJ%O`]"mBL#9L)2>E)J&C+m"`ED1djdHC??5Y94S?7sW.qZcRj&A#hR$fbUg5BL#CRubV)5gdd %/)DPP?6s[MP0V+dFH.^FRBh6&/,c0O9M03A<"FPjQbZc_Q*m,2Za;,#FSEkKVZo@cKB<*Oa=m@HP"l`:5t($M?1(tHb#HWFWP?`D %5#_=2Dj4S?e8(YU6;#]dmCHh'gMU1eQe!V;jA+/,:R^@dRn9J)c1X!:2Ou3/\fdQ*kqYL!H02"WpX?jr:i.MF(*>jU\JBja;p3Nj %KG,3dB`sD&H5+Jb'O+lR+JTo<mc<TGQ,>X&d>aqZkS"md;]Au(Em%!5<ps&=,rXu8)K8RV9kc9mOl^B`SBCm=gf&U<B5$c`^>UNT %i@2M";o^gZ8fGI0[!5@U4uN,bi8ZY=@62X0B$pP@)LV&;k8W;4%R?^b_\aU0C^sYdJ2Z/l#]Mb1omt9,ot3A0RWiB[jD0f.,%#sV %9sN8I7;07<.2i5+ol>8#h8h`<r*FK'C);>8O0h.%Ca4TgfYir([GRKJkAs4+:3\d.)R&*X3V3iGH6_qE,9#qWlVCH%*pLTXrI$Bj %XCph'(ME"nTeO)[H"uj;V893!,0q"qLlKep?*/Ig%oGB/+-sO51Tn]%TMAfDqd[UHWglj8T\!2k;TqHX]qV'(6qOP^Wi;N3!e*2r %pPS2*U^$\F%6gbBT%$#$C7nA)#5W`Eq<tQ(-PH,@_Oa<N-eDn$]12#,o$lSrK22s5^VQOpY5L/T`ddNIllgWnDC!F'BFEq[R;/se %=*^2(dB2[T?$EtIc/MKl"am_n4L9BAB6Uf(G.#=XO'IP_geu\6\7"7C#GsQ>P!`!&\r6Fh0!%9U]D-AKGCI<BL%XVGa!(><FO`m^ %4qM"SFaP((L5tB@ln5IR8boGrU&@^G=thGf0RN5D+Tdr<:uXf/`/2XJ!1@`m<Kfa1C4\EHF+K-_0>=0A%pdQT>Xm]:P(91'_+2T8 %Ik7MtA_I#`ZML%C*S[R+rYK2=hg9E"S,X[rs*>adR`&QBkb^B<k8F3\q>4t$r`SN88_e5"H2FLBqchAFTfY='BBf7k]hlZenW*!X %p$]hq<=b8Y2doFAPN[$Zd;<K8'3;^MX!Qr$VWMN8;03Q7X04?35Pg-&NF_-@QV_c0*@3!r3eD*5rdju33?<TO3EU;OIQ:N!mUY"I %^Nl(7pX<MmI5Y@dTnaD(D)O7EdHQh>Pa]_<bYjq4Kf]'!R:iShI2h6J$n]/lX&l)srDY(G/Z_brZ9%08R6Q+_D;%(dpC?W)-[YGi %(LM<kHJ*9/7\=$FCqDbg%[5X_jaLVo\W.n6kOMJ&jd9DuTt7'!'"l=DGijU)X/?cm9s;BKQf*^e\>`6_llmJuQZ]7\8a1k6f>1eP %WdHi5Q(SLHH9-'2I!;4/;hIjT4uN+nC@I'T4>lo`i)>9k)Z9E2K6%rZ`dI+ZKZ.>#Dhso2E51n!LFJ/4;_CndKimfBIaf=:pW5Pc %%Fo^8hP8q(SWe?S)lgfl4RN[//t'bnTc3kNceVFr8H(:Zqf4g1F3$LL7Eh#<-220DPlJkYEnYs'R\Hd':ADJ8VO]?QkPd2n3VoYK %.?@7@F)fatA]7nXEE6,g-?:i]s)^[YXdK+2@h^`0LMp$,&_=tT[uqODq6eEDVH<WA738>_m,sGdFEHS=TCn+ebgGa!NnpCM/3D&& %e1']BjReK.$TIhq&,)bNkJu#:XF#ejTpSi0nFOao_D.s,F4<9Z-C+O^l10g0F+L5AQ#[Xor\C%M,ZJ[WPYFlN4KKf-Su,GXVG]Tu %$&bcsPPZWI6AR#"O/L*X3J/rr`9C8-j=Fr^F,p4_<,9TihK^+=%fHt-O`b8H<G+L=mLsNRH63>+Fqg1bZC8On1YR&@!UDFq(#nr" %1)Y#&MK^qER^mo'29Mu3bbhhi#X6K<hQh]20(>;8SC<",,mF'0dXSm22dN'qBDfb[hZldFD$`-'@:LY^gChN^&X&-,<h9jO&aF2r %c5o<8"/1Dp6jU0lR9"Z-l[),P3mnpm>-p[*[@sEo'/qJ_l2+\GguQ$poeKTi_>UO7DL7q@@$XqYf.Vb^PTq9`2"oEVG,Ji=B)Y_@ %i_4JS=\e$'=,g-'AP1f_lUhI&I;Dk].;>Q\Q1-\8XOOf.Co(^&\go(?4jd%AIat;_\P(sBb(X#B04e7FN@AZ/DN@^KfQa0sbfW=8 %U9E@QIHiD=NF+1LDld6tI1lZ]/82m%93;'<>1:[3No)gGqS)c?Tf,h:orK]_A"JUOM`^dZ1<=5S9]%GEdUliNAo_niWC34e;=^F] %d5AdYqqLQ9ZFn"`IM58c4G;tMKus-D/_;k)me6!1?[VOFj\'K1l?`+o=rB[HkRk3XVYT(5N`O0DP6!mI.q=U.9<Zphd#oA374e$m %c4_t9Am7).gq,R2?-H(]PE^o9-2."R)!gEG<OnOh=K]Sf4R2/j<5)&rSh[0bTB4b*UgD*n0&tE]peG/7kj["P/,/K%SU5J%Kt7&K %M_gO(\Q>6ZT<2ASm!ZS623ke"M/+SVPtoQg"=u?mY'RXY8lV?8eI,9g#Z\hke&b@ucnlK)H;UXXP#T*]A0WlBMl%[q-Obi@8d,cl %=S[Wk1W0C"R(pti`K3j5n5(coN$@fX\Y.#TOW1hbE[qQ)fa<YUPG@F8Z`6DV)FcAHUm^&#]Ip1qe`,2<R0:Tbff==\k.u6>8XbP$ %^+:p/Ba=$N=]^Y*<QM>DK9&]@(HsjaN6e7IVBg+U,,YRN^Tr$+R->,<bC`ODEii$Wrmo:1_j"lZL#jc$RH)OCX2FikAT`&p3+\>< %r5AP:BmF=U2u`CGe=WEg"8.O9qiMUs?`=^>Ar\G"OenS47:HKsm]a.4`tnOHP1MI%qTJKuZ5h&70hIIH$;4-%bjl%QbR&=VF$*[K %d6oQ:fr\C"Ikm0N)+dnhV"Z`5Sh]`*ZI5k]/1L2co[D4QV]s`hR+4Iqj'h>uZ=*8%f6-=c*X]Y_`a`K!,[u5)S2;8(`uG\S,i&C@ %U$\gFrq"N6[]uKHcPZ.FGA0J"R:jUiW"^A4*8*:q&]PNAA'?r$Y*ci00;qN\-D8fZ8*b]f>P_n2$I/Zl5b'.;Z"s4,8(^$U\;WdA %@QZ^>d9tA\MQ6L/1$WRT$,A-1N4mtFEH#0CZ[&m@JD<d>R>(PRT/;LF"L`=pipTF_L\YnkB<'1jL=YCIprt0Hogqo,P#J"6e0d9L %8PX[J3N/9iSf7O[2>C]6H*W_u=\G?f,u<*T-YpgO[$EiMG!5YE4o'8lC?ipMlcHX%ag^RChl`l5PGa5#VhgP7Lm+`mPGa5#HUaMf %R7*W?,#A"D*iD-^2gEJ`n<Dhg.DJ/1TDjH5)uSloHi8=%5GcEpXnq\h@%Y;oXj,Fpo"M`N&!pRCiNh:)%KBglB^"]95ClG&!n%ua %/CAJp*QLjgYob7GrgKg0H@#$kA4l438TZEQ/]_n!jL?K(kJ$G@q[!.s*hCRLh<W+^2I(R=+uLF,)4S_"pKXeFc'HuJGc578d!,d6 %o@V<mc>T7Z)0%C,b!9MBb6en/r`$j$s3.SJ;_*GnP,Uo)?)d]>hE/@H6l0@%11j/5/8QDdfUcLu*,d9N+V=;kGBI0e!:;uiZD/AN %':r$f+HCDCT_k)-0'g%>!H,TdlicU2/!2?o@464TptBj2QTi3egE?gE``GXUGArMlVjnQ&s(or8d>?Ds3\9+;@67iB;=k3eF9ns, %.&7tnV8+*#!;Oq0`8RJ8q<4A5#1K8QO+85X:6;\M_]BC?Becp2<&`HF#CHDWY9@^C_HokpnHeA:Kq5AcU+Pa)KtYL1f,;0d9iW-5 %`?D4)S*$s,*VS4)?@UUA&C!V"fW,Ub+q[Gr,kegf]Bu;+O'#oQ76?`%'=8@Z%kDt'CTHkc]"71TZT#J2ZG&q=FG6"$bh'@eRb9/l %:S5csPjZas=uF.-euB1NXgY3$iRrgXC7*S!\`0V2ehpML0s/%OQ<dJ/Fl?>+4C<A?qn'H5W]-g*2r4&*qKRhsW^Kkr:dsrhf*Y^/ %!)@b)7b1T6llbUThmMaL[GuC0IkBKeau\[3<uHh^hW`0`&$G^D<pdWh@FaknGO]bsX0+[VfiD.=^F9&]J(JdZkPJETs00(h[^6qR %k*oOK!Gi0@F+E[o?JWM@B,f"`c\;JVghIgrY-+3!FFVaLn+UUm_MnaY$Jak6=bf([&&s+I$tCp!_d$f.0pgX'/i1D4bO%!MR:4>$ %G*k-CbZ%n@@3Fe^V@p51?NsUd4>%%PoIK*]Mk?B.=H<B$oZVUKM2+YGj/NeKG#qB9K=Nl?jBV>4\MaFuiH]Rc&*pMtOEE4YPlQs, %JK\Yn7'r>8WTJRgq(YskQ^fL:'n"$:`kIWa9dm%XP`n!>ZYDst),_6!/%mO2\#.s>4YXKos3(<q-T.q]_hsm`o#`gC"'\l$26ulK %]WeAhN@k*705PZ;UW\s*+<"QA0uZ]#XuBg@Z,AX-\c:cOUno(LA%$LR9bEQt)J(+t@8Ea<8*1[^iYQ@M%Yj=,G@[c-P>B0+T)10( %ofH#hP2L'DTJ$)Lk,WgJ!UQ%"juRk2eV9*2fd0C^'.sfE0rLdTf'aMA<DLT\>TQVGlMQ"dZ5SgG<I'I)H"uiu6dnSl[;q^!S`Fsl %5:?6s8HurhX*<?;DrI>D(N\$(DdH1q7l?0I?*ZL,Nk=E^3%=!goJa81/;o!=<rEYl<Tdh*NlKP<MQ&<^XCe:KpYe.O_eI[hCaQl[ %QUfcJ;r$h$q`N0?:Il&;7?HR#bmC*.`*+,k`d+B+;hI;SK+mr>hc=q;QY#4el(aT\h8Ns;/7o>NF,)_Tk)TERjLA7QiD@S;/3:Qt %_?Gr'%NI.8Imt5VYZBo.+N+G&H5C;-NO56TgPr#rUe7e@e$H%d+$i#jQ?lYE?U7Ikqt7:14/q@g;PeH7&Ka>"U_:)K'48VIS5&Z] %Rd,aZf5p.(7o)9_mS*;-0%G5-<c;JLh1LLJcb$Au<1E1CPH&8V2q<CjXBmr3'm6u#O)eOT:k_`H;POMJ,gMf-R[#?s`Tk1sWfIM! %/?Xdh%gprIf*FF(a>rB$60Ak@a'9kQ>U&?uCBU2$j;`5GIlql6LD<e%C_tH=JOAoarkM"1=!udSYO_rVkM:]mo*.,9h1;d$"pWAK %DObIr;S/dZVl)GUZ>^;alcbaH/]:>q6Ib:#h*HiDmFAAm=Z.k2g3g;Z<=:2/_:0*pG0W/^*7`W>ekWVlX'Mf0`mcmN>KTnI=Yl2> %fisH/C+3r,Z5j*&h,S6(Z^Eg]&N#cQd@2TVVFir\/"MEa9ERh#9Sa:\gYt?N,]I6+MD:$lkWNRZJ#8XDB(djF;b,'2pZ9obEoL_G %-DJX^b*WMA;r0]Lb+6PgOQLo(iQ7uO3POM#\eNd8"T((2'eco=$1QqefTn@k0ICmc.=c`>\g,)1_lk]J!f(`>04mhMF2>EPWGDDL %6b&+c^=oJ^*ht[1M@B_>!;d_VlYf<PV"kFDIp9SO??P@Nm-to^+Hbm2PH>98V`hsr(:.:aa6l"8X.Oa#<R.]aj]pt9=AeN/bj9Gt %hKEtim->ku,5-)d-FO;aY1B(%cmB.uU>3t0P7&bE9-9Oi9I#^kYc,3R1;!10C$Q(=du]o]k>#WU4tuGPNm9:-YM"2^<dbf7XnneR %4#QL;5V5h<QUq.b,Mh*F!\'#%K`k6e6W"+X&JPCF'L,aq7#oKC-`bjB)EXrCV[As-\9X?;bq+Om?JJfW"&kn7bonKDQo]SRoR8%M %3RW:Fe2Je;aY6^2&p4da0/4#7%==;#S2ppSZ/Sd#IR>NmZ?HWP%j`u7ZC_GM&oGR^$t\.`+ZE@15M"1heH.VIY9&@$*(Po#osKl\ %@e^1r;Hl_VOsd(Wb,-g]IQ@+)acoZGI]\tPi8$bX6+R"MMg=+?IUN\cSe*dUW6[tNrjG]<9?17!ghnT))<=U5.n.8VXWD,3VAR_7 %c]>Au*FtMdjj%rN`Z=SFgTUIOq2+$8`GX/Hh,C:W>Yls8&`Q`;ei'h_G1@t*W/qTH1l+arM%Ppr-:ggnQma[l;UWM%8I6(C.3j+O %1ej#V*9^AIC+SY8Ah?cXO"VkYAqZm59ku'#8t)$X>+hp.;c_&?ch;H8p")WYSh#_0J2$iCA!Nqr:KG/ZQ:+W8Z'(&GA?JNPW#f`s %0i<pu.\[oBW&R+<QEgkF'/T5k53D;pV'ir8F7j0XMIP.3njb.O3_e:,RK?I-1pYPd2bI*$kfT-qU^:T5g1"[4AQuKGm2,D+NP[6F %N1%V@\g=WG8m!N`RR7S]9@@mA#YiCf[&aq=bK/2ua';m@%$b$p]14?cW!41mnO,t4KEJ,o9BR7Y7mIt9=bJ)`673_L)kM/0/:QB: %keRKB$GAbeJQ)\b"O[ON%P2<:=^[E.j?SbZW[V"4H)DrIl0]V<!)kIpY:"O+c(/-Bg>+#bV$3t(3>,lMSo:VS:\+<%$e47"16O]S %euVT7YGl)KC71Oe+M'1[d;X&0Q_EYCNi#W/##=bHj[OJga$JE&U6!fnIdSOoC)\N^Ng]\2X;O9akD<>9P@nK1Te7kSGVQ,qGd>9\ %@ZLEG^?$0]@'c;_AiTM-ViN6VH8hV2$01CQ,XC+O6)@m-Dp^Oij8<a6KC:>:s!1AcBHYrP@u"9$9Br.:s%/gGF^"J8_\?/uY%k*> %$o;=)HI*>?X=5]]r\E?kK_f/b%UBm/d62\J`5d1_qY=bF1q.pNB)NuEI26%8-OJp=Ho7sc.K'*[T^jB+]K)E6SBN?-WFh0BY1/f/ %bsA^OEh#O[pGo!Q`ooN>+SN@?-P>Jr#@fV<edtq<.+XtR.*?nU=Dt(WP$,FV#Tk,8KAs=<$H4%ooKH??USOSr3GP[99S5PFg3p+N %\!KRVMpucWNlQd_cdh+McuIQ-XjP*B/[KVjW:Q\<'@q>&R-^D9-KOjda-1&S,b`@0nP5S]LO*!k)h6tnfLK#ej!<b!%5lL_*YPaL %@MdNcib(=bdADMaT4Dr%$\9m(;F=)iRYT=go2="mROCPsiiT$U9&mj&#n+D$rD.Xf"'*$,ePT;pX/eI_\nGhR9G26^BC`4&?G&0D %gVO8lF2=5;AJ75]VhqEJJ8IX?HEM+Q>]Un$<\eC43\ot02/(T66H@qWTm'Ha/'\J:D8e;Y1nDh,e7i@V[SUYZ7H)Y`H&BjF>b2/D %9LD[S(V`Mtr9:U@PFG\84d1e'n6eRG\Z^p84k%Y6Qar00pQWg5?mu-Dh9Zm4VJ!]CEPrh3YZ)nhU\RtTa16qt5G"IO0mZTpi=d3! %O6-/HoDrjc=u64HNJq/[*n^O!6E,/[R?@QPEJH':j*)eO!ArH@"O*16c43n*/Qp*hWXn)/WtK9>EXpomHlA<Pon8Fmc=+C2b0gH1 %OoEu^7:SbPFf.=MN:^]-Y);!:I/g1d#\-Ada<I_rOMc$2U0V6pFjC@hKoclm@L2#D"6H?9^m379]0Q9egqOJVUQYHdJ$42o`\h;D %q$;R\8Jf=*?i7j[Y^&*Y9cV_h$_#dDh$W:Z2g$N6G619L[k)g+pb79)E5J,>)j5f>8iImD7&lYO,FRt"DG6^g4H!Dn&n`G`c]g9D %f-.PpEjtn@:82ZSVd*0Ng.lJ>W_p+^T^"UE=uN*EldLC?<R"\&fHQ'Li2+;VjtL_2YeB:BQZoI3?>VRG=AG.f8QWVs=Dk^/jh!"l %bQ<6ZQfLi7G:*(AR+6GOdl6'P%'VHfhe8dZi0g7sl]S83;F9"LYrZ1?c6Hl8rOZue`H&1!hl&f3;+edRp8EF;4!A+YHEa*<4Zc&W %6^0-[S[#XG7'SB4.P\80lC;&iOJ%;n$Aj`JQNn3W$!SKNfUEHoA47'-+X:S%p#rs)L9S$-FS5gcOs$@/hdLfB_pi9pN<Np+.p,s\ %AsS"96"$D]2lg]mdi/"g.(L)AI47\/k%'mj8"$-$;_&Y/>uJn*!BdlZa(su/\%s;7aY_eacT&Ds6oHn]=j&kXo$1g,T%!2)?-WD! %W#=g=RcWGY9S8e=9XE.>GQ(HCm<[SqGM/UZh=GjWQG8\Hrd"bA7"np3fFoS!+sC_pasr689oTiY>n575E?h;LO)/P>M3e.`Y"fX? %,eTq<Gpr5GC47$)3(Z\YjHoO$3;h0EoOHrp]VqXt`@O:M@E#="bPd?EaMUd_I\I$JF%+<Z7J-C"qG>=[0VsG$[T'2RWm!Z'i_D*L %eT@5>,4$lR@;"^neCcZ!EMG(kAAhdCR=q3#4p%jLK5hN\jsGG"\eV-4@A>hB[l$WLj4#nd:#a]<bh>nD_Q"N_SV#L6ZIW'&C=%H. %=7W/O=kT11/(\rA<piOahC.'AdcQ?'s5_G`SL/\\bR3i-jS/IZqV)2qUHH3*ftC2DoX.NIQbUQF068)kBXr+Jh4=/6A5]0!P)$8\ %(V$F3hhA+%>YSZF.>am273if4B8<#+B;K+74)LC\a09oV[0H4iMHKtBBkojD6_B70:WCbZ#[HuU(sL3@A)b)I72#>rf<&:Lf5@6; %o#p;eEu122N]FGYG)h3KcX186]99PrFcBdIq'@GPfgmOgC4_9\XkY+c>En\8Rn=,e2N'sNVfJ&-^i3?FPk;oY+/X6[?<0g=)08sl %_3Z+L<7QC>s&>Y[MGqun*E8,00ktLd+oG>^,/K--D4F<JG+INN3Ls`V\)\1d#"^[N)"A/""_J9*HbXY1]<!b$f@sb#.Rs;uZQWK\ %=2muK8$MCs7[3Fo^?(7od+2!9j,+mBOPm#oHCm5[.cIX:n]>)5moF!@T/+^RU77umiJ3HN:;;*2rG953m$@(r\!Sp^>^`7$Z0V%, %Cn!kf_"le[o/iB&QiG4@9^ZUWG"qA'Me\_EAnk":4oIrNfX`eR^T`Bj/m"rlEU8'dMSbfTmIJFfO'N`/F(<O191J@[^@DR?A*?NI %N$7>nC2CZ_!MKQTk=AJu%tKV]G-%h_;tKkI%qt9?n;4^hkcPZ!lsR'`%O%0'^irY0A3CPO=JRou=$Q4.EG8"ZpkadRZdg2sA1)T; %/FFX,i9*95cEBC"'Qa,sf9_7M\72-SWtFg91/'@K3ITFMG9oc0FK:^s'M.B]PoP_*<`F7`2-EeAE(%DPYN"ToX\:D0B]4eg.7[LN %PJbmC3T_-\W+BtHIXGF_@_65bRUC^,Q-s*0iVW8TV5nfbcMUUVrp3QTXll#MWTIf][F7q-$2c=jkVQf51^W.m%;A$`ds2Dr^4WO] %&b#A6;icB7BMR>c7'([hN4?RsqGB$-D?`I:V,P^^+i4>[+=Y^M6is@rM5"fo,)2kaPLht<)2?L.R/)i]A4i#!Be0Y[Ejk,J\4Toc %.]$(%@#d:iLLmM0hMJL0Fi::m9jMF>m`b9;U8MI$0$da.T6E"c=YKl"?eeI/E[DT3^<Ig_"jYX[*Cc2o%s#"o*P#kPV;Ia"6mI/= %Oo,OQPI_ACjfDn5be@PaJK?Ib'$dcqC0nb^SK;m)QMt4AS9/i94mgFg*0%KfZ`bWQYMXcbDXPl`48ALZ^'"=!A8Y2"%sR+1J_k;. %$BbkCI$,F3U08eAZ*\)GRGUef,QY!7II.L^1i^-uhFK*);,Ugj@!(Nc"<*&^YrLDH]J]ItfV]8FDOihT5:@5j*`R1cn][T9+6Coi %jsciHA(SgJhq)DRS.eZI'r%J5*MQ!6QU>jqdVK)R=2NUmGXbT:\O`^M,1+/b6oL#L-c!pHX4"$Aip,^ZRJ*r#>sFb_''m1KPF)7' %RJ*.e0UE8qq4P>*P%B:^UGfe6E%/IqD4aO$2bgfm2eO\6bA14LgI-+JfN6B)]#WqeZ[8iX5/W9>F(5$rjIGA.p%,>-2I0KOVcHWp %2UE3mZYg/A>!nW7d@"RqS2?@O`mQZ>g.]bK)>1X>ogCN9fO-?^k$a<827VN$20giAc$OFXGqXbJcW*a%-].crb$fJ0k:D)I\&q3k %_orG%W9E+Frfd9,jsm))K\*4bXd\O?YC?<G<Ln3GePUALWIoYls$GN59hU&BlFgqF6?<g,o?<+m,\&VBI4)Knf@s]1q(V/-Y[nVc %Bt@;?a.b.]8qF=UHY/R%A*t,Er1*:E1tOb1:V:LFM`Fktg1$'fppbN&O5&IQC%.Y5]2/sZ"mSX#BRr78B.J(t4*Q!DZsWU@CBi/< %A^+pqmmo[?b(GQ9^mn(R5Go_h-!@qX[j31$V8"([-RtS/ZVTVLC:5P8e>2?gJA.C';<M';j'CglhhY"lnni8Zd[fb^<MgAqOd\Uk %8qIs!ddqf18*q!43c7Xs+1!rPpBUQ:TmlZ.^Gsc5UPJZoDW=6>CeT&0c'bW=c4hG!B(`Hm#F)+j$+-/%DbmZ.b9G/U5PJZ[8!pW" %[7nFp;]iT$1qhu?$S;-:IE0m$UmNuE(B0LVNZZBkf;l\UE4I5ah`O85bPSi>jS_3bo6qb(cZ_-+h_[?c=le^,SXFCZqe)7[cWlQq %Dg<$WObV1eQ@\MqP^CGKl[?4[F_;AFRKmINr?X:FE?6]M1T>P<##[df*BO8TU\6"EeN@"O5OisV*19mWe`8Eh!d#5;D+&$"lNL$T %e/4lc3'=lr=Bu5']m^f87"]_"*ia^`Q:X-#8T7A8VKcE*AkmJ$.-5\^ZfNs*q"P#@VaH2OpB[B!%DFO%f,P=h]lu/GNPh@-?e<Bb %(!iD\DpDm6b_^UJ]nu76<%R(&+$Slr'(tnk-#'q3]ecWnm*.I:=YmVC>As8m9lB_Yh(@N`lMYrXWKsarV!.K/o6]FkhQsdo-Mc6T %E?uNVG!*"I0%?pr\LJb(]j?s<Wb]_TVG7-W`rG^9YUA%%0+@gN6p^"a"SH(';_N^I-,@`P!6"$'l&kD#!pGG3gT7HbAguQ/&Mbt8 %&t/rTF]r3s-Ynj`_hGsOj-8ctNZX2u!02m.6NZ6%+0htRq&H;D44]loH@21/!T9I)]moeR&$Ol=I/WKFB?rX<fDi\bmX+kij1kNk %`Q+%C5.h!;G^02)T5Wd@E5]lMS!7fC*Q*jUD`oEI)FHbSfQ:'OD8HRcYJ0fE4-+feo'_('YQ$9RqS*%*f,K52gRJ6@T>Sp_"TS3\ %^lNc9Dipr5_[:eJ"6FA&e>Lo+rPS*fL&]$c,>m/dj@=1\^Bsmp$Op\I9_H9I?f@p/\$83a0&I.!:q&#u!hFP;LUHmM-G`oZ7R3l` %dGOj*qo0b+)>*Vss%p@^1Yn$K4'KkfjDJo@\+&k$D*E@&^OH"Kp%rqd55ag12ZW^)1T1F<c)'CN2ui:2O0H"Kh>D$"h7S.2j4cf2 %s7cXGs8(mXJu\i0r50t:QN2#cIAb-%j/l@rp,[u`0Z#[@h,[Y0n+I`F]XIc1HB)<o]GYD)i+.6$@?GI@oZ3)Z7tR-tLB/_ah-/HW %2e-s=nAk&G6^NNABda_[n>@4N0_Nh@>715-kR2cg;8H3pp1S%tLpI<peDDNRrs7'F>9,!o.OF_g"H9Kh[41&_q2-I<&01U^PUR=c %jl<,[34N0oZC`=8/oZ>kc7"9005iT6pB58@]H(I$;m\"6D$3>Tn-2@B:.()'nMIH0!4*?PRni<0i[nB=ZR7Oj_H*modlOl?<[@`g %J(1Hgj)jq?QQ_K\<#MH-6MLUELADFd"EZ7]TAZ4t%S/P\4R^<pOG6Yc]VH_1Z#&dm!?2)\BQ&d?/NJ&Zd268h.UWM-Q#_e7b>!Q5 %!!g*7hgm?<olP]JlK!2J[rHCT"8jkUjTVN2o,lH_LUZ@?$D\_g=)O2AA7Cid5/ph.e8I<A7c^2L<^_FQ+7Rjp(e^PkaW>$qnD++7 %nmaY)cI4*gKWYos7>0]8L?Zjjdf=nR#m(_N.![?dOY7!aGU+S#YREdP"p49qbaZW`-,<VJ?,1CIEW!=2$Zn+9jP+/H^oX5/bE#XG %bSDE!@_m'<relfDS+!E42E?F@M@eqgOhSf_R,6R(&4Zk*!`V1HM!LEoXqtCRR'$F\CsOWYC;D6@YZTV:I[)k^6OHL@-PeD;[ZYP` %+^k$s!UsUQUKU<;>hb[+$Qo8pU[9t-<"E(5X%*Gd7[^mrN43:`Z-10lg*,[nJp0E\<Ygc(!.m17'($Ee!]u>L7BAc\hR:Le"=+qH %qR:]sC(QgB?n9.QqKa3H%YKiK>p0!r!7F_n:4O2tCrBA^ThMpV](S;kkbb(l[9D""";$jF!G8tt1@XdX&i(fT/,1T^,X?^lj`7\p %8mSVj'X:72dAZ5b5bhh?#C;[AqutCdPp8U#i@XcP0Z4jZ`r7)\l3.dd&"I11*.n-o:o>*s'\5o#of3UN[-c0bK2g7)kO^6q.\dd\ %G/EDGf!BXM9Y%gErCNBhilQko/##^>]OFLpn;8]fK>AeEF@b7LrXPDJ"J6TZ:Io_?a0nhJ+]5*!mN,DBm")B@LQ8ds!149Mml<J6 %hb;'<iU$5aa4V3)S/p?%Tl/3/!?4[O[_e[j,^q/Z`X]Tl-<r\7qZPnc@E?%MN1`9r,O-BRm8uFC+gCH2*$*q'J4D%UL[WH/4+7[D %idddR43-e]^*>QA"q:\Z:Y7[8Ft>=JjlS70,7#rfRHsU=QWKQYo(g^?aN7lc5%cf_j:t-((eNTb>>Z8[4n!Q!4@Pk2=pN"6!1f8g %oNT@8.nhp@D*_9FI7qVqCJV<tp/B_5NTF(mD\/:&KOsOrGD-@hNmPP&EoYu+Eu;eTA_dZHe)VG1#(T2O6Y4==!*X6;HlF=qMmT8] %,9.s/.k9/Rh`I.&0]h!ALb`Ig;pV_V4'`llYOZHL<6).ai6&6G@[(0E-a2R]4dET+X7dZQ_]P!NNBdp/$9sA4Q6"?M&/no+1CYfQ %J5AaH-\Fq&(/,#sp8I%RqiieIHJ0Z1joOY>mh2k)JBK'@MFckN?Zqh,>WbUm+C9$jJs]'r,`"0uE"rS@1B_%U+bMaaOVN)tq/?B+ %a[DJ'UPKhn0O]PBD?7rN0]Rg.THndr1!+],r?Zgl\HB>fCO?s!gsH/f!0mZa%2M`++PI&:d->9"^q1dEd0%aOKG<XKZhtQAbs4Pq %ck=+I..pLC"qh3*7dM(u5Q'fd"<t]7+?m"E+NrH[d0WU/2_Zleknr@RBi.lBDatKL@6TPPQDrd+'mOC3@YNd27\G`[<$;GHo,`E? %kZ8r7-kb^!0^%p*Wo!hYn1+%EFELta,Pdt8hPCH:i')uUkidnoo*+4%h?cRA\GloL-dfI+Nk?Lfl?>FHnuuo#KQ1,![@uL>21d.` %$aAM4Ss#oZ+J&ZV3qPT+S^/;((TeofeL%/Gq%RAs!bEl)C#DV!0p:WrJ\c"%jpFV1Jm&5KJqJ]P!$nftO2H1'lf:;uH4'e>89e)F %;;ljA5q'":FcU&2rfW*?%81+>%HbGd;$V[IUu/Rqpe6AbmZ"$qV)A;Yr>=j9jQfJ,)"g9^dSKdq>Zli6h]iC[,g=AL!Cjq.SKaG0 %%'c9tfqT1,<1dSoS-cSN4W_aA4h4("+"F=UgnTg^Eoe[BpU+3G_6:Q;.DGLJ.DGN@o8n>^ZJ,NSX/Gd/`*mj55o/Bl@B2_k9$i>= %XK/,m+Q8I";IRAp6\^.@eH^rK%UklhI@LRu1eT73Id`,CKaI_(,>9:&9WdNqkR?(L!/)L-;B>hq/KfIQ!r+qN49,@,N@5HjY)[)c %PmbBr$lO#lB*09=P@[#t6,E.VF@:sJc4NZ04X6VF7/=2j_O3m*L=1NU%h.rq0S9tol];`/2e[`%*E8^$K>l8Fa:Rj*N2P!n,?1%l %o)aa2O?*]Ya.imFTT18Ta_kcc"0a$2>ZqO3]d)&B-Ic:i&6c7jl.A;hLK;fOC(%AQHkI_H*.(!$*@Di#!gP(iRG-UK:O*$"bCG13 %cP$kF@^MCL^j!FpWtP>^F<gYh;a:LXJYPU:NWX!o.Tb!c4nYp2i<lt)+o;&0N\+pO["`[&q19*Sk6lFVar&i3$"mAah.(6fR`WP) %@bAlRiY%(<:<Y<9YTkR#W3lf)P^qJ<7lOsU[iDar@*_TZKdsM3kg\,!Q>aqp('j,lK+WBu5E?]'iNZ54K:7@ao+mT3C'F/nR2q.n %C'7GM`!01VW<ijK"$-Nb'9E9A'+i78*nS)S%kL*B-6RP#,iMZr5VSm"!@K3:"]c9J4H4AK[/e>CM#g05W;Qt^:`#jEp7Dre5Imcl %#7j-5%Cg0Q)7-:6ec#XNg+F'9%fh5E7HP]ima_)b?]n?GOViR!hNiraW`dBBjf&:]Vh,kc`ZLR]9QG0[=QXCY5?!%<"TnELW8CQa %MoAhP9jUOL$CI31=tMJr[!!-+DjqSo*+F56blEF>CmmhARfXo@TN4^4?/(d,m?8H=&=l2Y;ZdTRmL`#%gHHV,a[9e)&HJ$r\D+t" %K0U-[WgO"kBX:]CN-q7"I^G,=F<!J[4+R$C@e[^6_;Itmqp=R9c,%rU,_1a-Vq"\''e4cUDqOVs:[&9PE#<-7ZVD"C*6pF4-)g:l %V_J&@*(9JqNIe#`?hoKBnimHXcn>"H6bCi(O(sRchP$M:*3;N8copPg"+r?=[4`q$;"I$"2q5F30JP1.O&4k'cSO'iTKJuums%<U %$-uH.6I.F:\=bN5/dO70gHrq6e?g>@[4E`8:s22O/C^tu]L"1XastoHcuTQ%/-r"I_ZKE92(S<X6Hok[-e)\"CncCI\3u#WPF+#e %Q"G`A79#XNG#d]UkuX."cQCXf;!WqjTXLQO4*"V86IW=O-2Q.PYN$&FQWcoVWbou"o-mBA4]bII1'Q44.p#OnI*WL+;6N)J(&:2a %<S-,J">pDi8?E'<&+k3ECDE`%TUI0[bZEOf`s\nuUX`c\Li@r\-Ku@5[A=-Vcj<Q=0V:1-R"$u;ls4r3mT]3&]pF(\k.b^sr:n1% %[@J54@>A2/=?QBQmsd2Z6CIV>Y'Z_&cfm5]elEpJc6I?RTmYuXC)74[gD0X6$AJWcB!XgCD.*n)*e.hLkEPj#_?TDm!*OIGh$'An %lN"SPr<6S2308Z.!/QR9Pu?,'"+_+n\7Ph>SbA)1pj>JIRcW'rd1nXla&;bkItP!+!Fo&HX,&$?>4F7JEBl,W40?1981\d<2sKF7 %dUYa-1T:bX$m^:J=)/L_XTUTMJ554LBhnaLO9eWOV02er*Ib-F:R0N0Mj_e(m6a,<[C;'Jg6k0nIl6?M=22KFp\t9/&U"4::N5nF %aq>EeWSo*Z6/IMs2\ksHo;(2iL1(n-(<uj^Gs6d=?lh3.gO?;$/Kt%V@d/)KjEFuVAEJCL(2k#`r3h3K]cO<?Yj=&"0R:Gl;8>G` %!LQANXD\[V"JO`[3kLPm8"`gCI&-u\,FQWHjqTaupj?\""Mi6I+p:A9iF$UT]Q82M^kg2;SP^AK`T$+gJ\Yq>3VjK27k+]IOpUYY %&M6<(!+;9BT)fc0ko13?_^[s&J3JO7,I.p-YJLQHD?+Y.+a!oA\cY26EF*#Y.'-h?!hZZAZ;Ti,6FWOS3s39C:/A5\+@>R:YqDn& %6==6`,hIucil+u]5(X\<SSmQo:famoZ:*P/eCst6*6tXdX,';oKPaW$-L9Y[>SG_0A6a`+*?-Zg$CF]/%mW+/*!mPg_$1G!7i3?X %OJ=*'bE/jaLdTQ[lAhf6A97krP3S&Y#pBijibi;F+aK=l^b[7Y:-^IMnS_B.m(UubLq`u;%GV^V5XV1K!,Pqa$m&9ZLCFsI]a7#8 %(mG"lO9Ha6C,+3BZ5Xu@#$IT2#SZ6^jgl<]W!KcoMN\npXZl2u[HRFF3Xc54d5qQd0kUY6Pm!amB*Xt/hNE]mBUmO/5fGjg([43s %aZXq\7:%Q$5O^;qYTQ+CIAeq%q_[>9%./Zi`t.uX'amd0Qpm:&)uW2R`XJD0*m3RiVrNYr`;Wg"Bc+PF/W)R$Yt)W3XGCiT)QB24 %n#+H&J9^4$8L+l2@EDZgQI[=uS>1&H5g-L+&?V]c?mEgr^T1lY]*M1A_(pIa'`>=rUJF3/Ch/D>huk0%$kDeU/Fsg8^hE&epPP7< %?Q=nX+>+r-N($1@oJ#7g#_=,T-)18_Z-+.P%s:Nc*LIe"h;f:f'aU#&%02HU"pU%SW%SOcTd*b!PLEiLg<_6!g-J5ZKS^Ut\fb%p %DAWR.c^2l:$EJnY(+G7eFhj>!!hd7n_7ZADh*t]q4MocKAcPSm;$W2!IGPL^F^Q8l;!]B<[FH.>.0K'Ld$In,!-.,Z6(np?FTUk" %,t2*BY)=XL'M>jiX#Qas^sG%E#At[#ZmHfEZ[!PtW.>Lg(FqEkMZTVbiZ1g2EtDpl<!))!Km4rMTeSJH#=j+_=Aa1IhIu[+P^HYV %&6[fo0A!\RS!cB-ZHp!,5*g^VQ*9DeI"dXs;A6>s8Z<%pKte2-p0Udl@d6DNSB1`;('PEu1rCA'lhZVKBeMf^1?8hhB9+)7pWp$o %s0S<[+1[<=k^ni2MjPZ:dF4&[Zqt&DZ-^=YpFu-PT"k:2\8PdbI(Zpgk;@aPM"k3-1nfObmpQOK!6](;!q'8p"0Zh<n^6$<WT]l? %Kun$L1;Vl?!7X^NXBjiP&nBBOA:g`D4t)j8fX\rF-"a#sa93U6k=7sjmuo7Uc0Rt(70P7.?/RsMm)Q$PJY19(+N'ut9@>\<"C)mK %BO@]AN,E0Wf:lubgCh6BM]bE"%,=*UE$>Cm=$TJRT!Hg(474IS3<Z=NP*K'<'[]uhNl!Onl,KZMn:$V^2Os7*MAeYcfn"g@N/'t; %q5LN<F9"a`2/;1Y87i)j.\^+XA,uosC0_J9BP\rT@7?7bA@tdc!>uBB*)Aq70iF=aZ#gt\jgpj-$kKRN/38^BB0#<^4KhCj8OReU %@-DHrbYCVV`+GFoJ3M9fjPr-!;'WmD,1u.5TfBkR;@,$rLtVhhgMm`rcE.,1Sp5g=Q+CoOF4rl[?pWlef;(2Z6N&Lm5pKCk&<=Oa %$%TYi*9H7<c<-jD%F?h])ZUIUAd7cPb+X&"$7c2)bA.Xto/?)s8*GL6N.S@G>lYC43YmY&#)WouoKF\-BZJiB0^qFa*uJT&r<A[6 %)2M_L#V>29/BBQed1`3S"oqZ:bTQtWG)@7@jEX$D:Q@1+]TZ8@U?ni)F+ab2b1[t'P-Gm\kBL%SO@-Z;OAJfk5[SbIi'd!=(1?i5 %2%AbZV@<Mpl4T&0a\a5#K9Oo4.nu\G>B2c.(@;,.FelLB!ng-I+_KEPjP$Ku`]U2;V""0cJE">!HS"`UA[&6SOo\'5?Qn'K)&jT[ %T*s:s0E&;0cV4Bb5<`s/Yfr/M'Fe$sJ9A9Q3.2`)lS*=/mj=$FY*)$o^&kZUPR]CTA$Ab?'Z8!!,'[6.FFhKJ)Nt3Jc>=k[Nn:Us %:"G)b'*DDd6d^IiEajQo"s15VW*78.cFhq:E^1gV$A6V`&pFB=UjFYiec5pm;-h3_aR&E:0\k=ioKd0r7J--AR2t-%/-eKA_SiuR %"48Tdb#QE7$5i+RDk0S_%tS;6UZ)<HM$M[Y_dL+0jou0qU+Vgs<<SuHXde.>%Hr,U'VHt-2F(T2g]1Yb`BZCi-_8ls/3`=TX]#5H %_:FSj$]b'EAX[2[:1^V&QU88c6T'ZhLfuBh7H;bB8Ks!",TFE*e]6B/.&s1EOd!Wj.^u[1d&-:uMVc0pFYS_r(iSik;)t$[Cd;@h %K9MbbI)uI]("R%W#!;%tA6+sS0o5p=C&<Tu+)7kt$L4`hgjg-s=l(&J[NNr^I_gBpDZ3#gOsWFRNO0'tcMEF&=^XLVFh])riHI9g %SEFMMo7;LU477a:`^*1%V%%CZ0os/N68D_K"W>n7TIE)OGngO#Wff+tm/ZqhYb&ZH4.j@iMj[j@$?r5.+P299kSZp',@7OH.Q.,X %iEt;(Zroj;cn"4gJ:jA`4NGjlbKs!2'%U1>9iYX?F`Us&US=jZHSg/L3*aEI"HKH,'p%Y07Wp6=rjnhH.BZ8+K1p-6,up29FaIV# %Ls(ZtBEmG,2QAG9r$uOb<[BK5lCcj6P-8+"NC(qpbh5;g*2>EcZ?"Fh"0b`g6ZrNJ(W:"?N20L%7dAqU.b[g9(BspubfX!e)i<LC %6J!prEf;dUK.L+?m2"#AcLq"'SBafcqKuf?UUSsXj=17KCK$<%lFn-=T8LE=kh6$>$..g6JSJIUE(09t0C=*=@%YHg`%d"/mAs#+ %"/FBmpW0GDfeA@n[PV[U:sm'>+c,3=O]@beF)?GTTm78>[\1F%;1K6:UaR,JTU`#c`XkfE#gtsq*Pm=sm2#:-Mq=c)a?t!\2?56W %;]oO%!jbgF0$+[OCuKNNaf</dTLk%(!-XjnI7$3*9'V%=14_]'oi4c]N?-^JKfb%'NX3!4Y7Qg7J\`j2,Bm4,TSA=:-Aq=#lH1h6 %<,'^:4#[8^ltZ\;Us-`q#Ts-LI?IW>NW]VIW]b<1?6l`_M?b>d>$$Dm[%E*r5[1nQRB?0AOSc>$4IUQs3o(rV"?^M.kRPGqBsdt[ %UGO)?<\tgU@SQ#$"u_U!@bTAVXMP-E-[<?+Im%]sN5hk_Q`L7jc9US1Ak)Xq>em.mP&?956LoF..81?d(A2sq4M]4]H=YM;EP`W_ %kZeRf6W!tY<F!D&Q)m:Pi;s*K.FNS6E>,"qD4E*3`'.0>><@nn>>Z=N;&k*EW$Ir(&?EJdZVh5mohtrY8+/mVTa!!P<RD*./Oj$1 %MM"croHrWB<r"k^FK5j]Ws"jM8"V<an`IW^0+31dM:o#V!Wr\\0sO<E#SeSpllu]=a%#:F9Y_M3WUq$pcr_7V<P\:-^-XNO6m?SZ %6,FsTeEJ`aN_3q0)VQggZg<"+)[^1th<G8"q)[5o>6C^H*X!)1B4M:W^*+jc9)qe4S6usgOR&;?OaBnl\Fi:)Un"g=la-"=19>Ht %V)q&1+_q0?AZmcI$$QIn=W39!90+&=Zj2V<Me;i9cH2YFfVk0.0k0hOU+@UJ]*I$`FlR%Q;';2p`L*0\THcFrOs?%#a5"H2Z&No_ %OL%q@UXG.b:d\'D.i,Sd,*6X:9Hk?e&a6T65rV;N^r=GsRBNA=JQ%Q-'q;;2OqF@-$%Cafilt^h>/ipCJ:2=&*6Z!R@b]g"NV3+P %N)_*6eSi9."m3o'".^;teV9'`1P.t%F@@gX1=$,o6W*8KeAm-(ZI$*$X&@>u?BmbIaOEe5)$2$1qEn68L87ZN#!)$:#;E,(2h7nu %+/^,EdE)`9>?4]H:ljp*UI9(#__"G!86(D$E``Gek-S,6;E!Wu<'0L!aF)91[(M>5F/7A.W-k&Sl6h0H(b=%@+p(shP"H[6#Y3gO %IDrSg[=L._cDo=1+apNs;<SK"+fWs0U.SZ#3hB?]U5/dRNl.Mp'ck41W1".UK?i$Pio'+1$ebRc$hO(Rr>#.(/83s`%Y/pCiMoR% %SdX2/g_j7q_*E-D5q42EPr`oR=JrUnlTla$F*1'E.9JoJ8^=#mBQ,!;E<E.dYO]&#4,$=m?$/4^GFH2fLC+#bVd`K(BDc>sk6eBE %9_r9(\t\7a[+koqK3B#2`D,*(P,C&>lpK8i71rT:^8`Y&M'Zp>f'260a.=X1K?CBT*6kDeF[Q$!4=-5\8?NFu@4GojkR52';TeY4 %iX/L^<@FN2i^SID=4S^6?;PdDJkr?#VK?Ig,3NhDqV\caR"?=C^3s0-,Oi^?qgBrr(0(SU&HiYIV#qp7[=N<G1CV5,Eod:tG0;A? %DL+;C;\Z9K*NP_GJK2+S-tNCGL+<)ZWCEM@Q&1`i[0*[S@H*:;-Dpoj'tmmOf+HCDj@"33(%[7,<,gm.[BmEdq:u`C[/ltp^5TW_ %+eTlT1>DeAa$A/`7TT1Y"+H>j[fi"<],s(F5`+hYj"\niLl0t;P9MtEoIaT6pJ$_$0G-YmELs[M]KIsa`YO[m.B7c.'WgYd:e$pS %,9)CF0W^JcjBUcdWhbH[Q!JWSP*<qMe1<m'!te&+BPfnL<,p9[QaG0]eis1+eTL7m$U?k,M"%L,Q`?^WoBN?55-b6\JS!26cm0b; %MgQ-t.?X\5mdJQ/-^sd0VN5P#j9AG5?"^dREmT`k:-^I)>Dtl].i9<B<20)V$Bu?2VAdLLaq-=+#V]9G5Z$'5O!i8IZ7u!q6t"M# %XCm/%!puqTN4QP2=uCPIX]s>s_7g<tgA*%o0^:A#:_nG6al]k*.S`cimC:q^-32NJ=XKFT#JI"@U'>.6'3i1q?)nDCX&`P0jM9t6 %qJ**jUM-F$#b@/mT3/\.ms6V5%Ps4$1H=CqV90!rk8StuCA+q@J9@]aXi@ra0`deF<Pf&-2cONQ19X0?++#W8%8cs8[jsSkk=S@@ %RZ<:Zh8GIbQl@HD%^0oqk5t<ccL!Lk;Jt=^edHM_WjA'MX0O[C5n4Ws1!*E6.Je;5dh8^I$0<sX!5PG0GbkZF@&j_hZ8.l"h.WR` %;%Y@WR`P#Fm*=Tef;:&FH7!a#XY_5Xo63I[i2H#i[I%B);%K!gPYW.!4F/;EaXV7O;'eW\#%1DYXBSX,g>FrDP,D@I8cU,TfJWeJ %5fM6o$9DldZoX>1K+'$):'coPR1V!5FuP>ng?[*sfa4_h5je<",-b(tq(DM'Xn$Q6^8bC+,GkpWSP'CW\U`3mfet8h[d&aE8G^uj %;-!WjF-!LTC5aH/$uM=nj>1#1]Ip?j?.GC&O%6UcjIl#_l]7f6LPfN3D$3gXW/"U7HGqnEq'[?WnPJJ<*$PL<_fU6bWmqHMo$jUA %pOGFCMOG:90\X:aQHlo;Q`=#DMA`+6j#"_]TFa4KmoH;&,hulrrqW8kh-G'$$DF3u^5=V3i[:aRl\=,DU7b\IYhhA)eo]%HN]iEs %T#dtN_B)%O5K/'Tn-l!Y>(uAU3FPSH.g%4CP(9>hjT]0OHH'^0^fGM&,bi)l#.c6'>6A@baq_m!#/HU\8kAT"&6?.?UX/UY'nYr5 %b1^,([bWO5+TM_E6FX(E4lC:D^stE!<)#^L<ZY''2pr8$+"(Wt;N0b:GcQ8@/V#3SAb9_!_j&96P-EF_e]/l6k8=>Z@!*$E+G.6= %Q8.ZXjOP<!XfAd2A$/.1-Il-k?X/K2*RV,GdCiYI?(mSeRSIJc\9%Kn+Gd<9W_pSr=iKN83C'fM9&G"pF!mfbocp,F7Z^L35otUM %?-OdMi)-$YPN]Cck]L'no]0bO8"-T@!<H!4H;;SA>Ct5[FmUYQcHN1tj]O5@2(@@ME6B59]-Tr.$Us/(W(i9V15j"%$9K/"j;r-H %EkATVl2q5`l/qL<X,oZ1V"lk(=?B"?Pqk*0:]R$(PqV^=MLfb`$nhl[o`MJ*<a`9,!"aN:Y]_d!SNOU/c(r"&8'>"c7:TJT:/"TY %!s#p6M_:m/-pdkqf`$.8F^.L;nc8;W=c8lQYgKK1om22jBL=g<c=*J:Kg^p_!FVioTcnZFgp")&=?hY1i2ZQ'/u8a?l3e=cChu8u %cKrVuBkF(4&F89j-+i>D]=QXok_:\,;@Ch"rf6?=Q!'<Llil]%eWa98$=Rt_lCg_tMh0_bO+W>LfPXa?6]"h_aJ4VkC2O8!V1Gbl %aNrV@'C&WBFs7E1>8aAc[0au4<I&+0P^sNU,fF3^!`WYH-54s?44^N,7QO+d=jUGLMoWUgkc(th8Z724WPnHT@_P$3?JXYhZ@sFQ %K7u3+.JcU/ani<q[(PB(Lu%W%nPCgK=?$)ERK2Z6Wb5B23PMM.oa/\K\5&Hl%P?(Nma6ko"i<`/Mj9##!$804k!kn[MV7(%Eq6)4 %H$XM>6`SK0Ys)OIGStj(7Q$5qPj5=):otJ[<VN-,en"l.ARaYB680^lc'B/'qNL+_.cm91QpN3Sb_-1$f@\._/nmXga?9L:g=F2P %T&8V0>Ag7lJ'S:5#A#$(Y/1s4SjQXKM0LLJacH'cg8N;REc?E>/Y1B8n'9)T87u);A5sOI(ObY4.)$o&,"eW,*cuF:A$T+&:rtW0 %/6*u*gYX_7=&Mn3:k*NhX$S17s3rHGRaW;8]=lWt;_U4@4Y8-b`XHEI=+IeD"(TbNNE(<@a]#'W*k"aN$H?320PdFDlMB0`,u^DA %4K%_C1S/j=B]3')>G-+/^#c2qWk>+*IPCdl#uuQ1JCVH^$mJQoD%*j5eEKm.O,2Hpb=*n(<(K>")(bbU0iX:F3OQh&\[9:LkQk-! %Cp%-t5]^?FocF7K\hJ5*..GG8fF>Dubth$H<U_>o.RB1q!]PYN;m#ds8608&9jrg0XpbTBH7l9O;DCcF"^V=tpgRcNj:m^iVs.e/ %<Ol8tfJK.L(te*>POOabELis-`T25Q[>#A2VD7tl=BSlM[=P1f$WSL-%:mFF2+_4^n^2+7<<SVfb!D2d%5_j<&>p90D(]m-SiSG_ %&ae;)TXq0YlLV#mCb>_o*7`8/VI"^8ZP>Rr8ro@>gLtXt`L:oof]j1`1M<g)PS;'g:(GeX0p_*s,ITpf*gM&/"AUKfC#HZc&ZQHJ %l`-jNdmIW<FgX_T`SbhSN:#lje_aq7<glkX=8e7SNN\*`Y0IPTJYd6#=(V!Q99;Q73.Pf2A1A/Z366A5go^Rs2,$)tC5Z-;*EGm+ %h6^tM7N1SA$O<B-2V2Lt:a7[Z\4Fr=br3VA6"i(ZjTfpS/L$?d9s<F2\Z"kIZ1c_g2i</1TnPpFDoaAuJSK3@pMk)delX<aXi@Y) %cSOb;eIY++XmU*^Smb=&Y9J(bL'Vr@7ooDR9EmF<,fN=Y=-mHS!(()eeVCm#+Xef'd(CQ>63fcH10:%3!)0r?1OIo`@#*.J2%iUB %b-ARR#&Rl[0V`6\n!(ED-JL!"eAW2Uk`\K"OS?%=TTn/O5-4!*[TEt)Wd#h7:%orAnW,tJa:o55+BBZXp?!"qp)n%1*M&(1IF[<) %X/Z@c+:Q>tE`mp4X;+BBcduhC10t60KHqSBkc;]g[Cc<2ItT6pP'XU$a=>7jWXCh$586IB:9d:K&ND2KHWc7Edr6#V%"g0Vf)pt_ %d[-q?72frhRHJMqTdcG5`3uQm&TpGm#/U^>T;"=>,E3Nt(8H/V@bhqIQmH)I!i,0fo&:?--$D/lR9;"6Zqcrl3&&c@?c)kI,*EKo %DU;FD):;f0];9p.?n9O8^<sk?W7[(928gNNpG,[H9\<E=LM86NNiW<qMe$3/H-e=D>EOs"c]n`m0<8m/cbqc>b2O2%6cM_Xa>BfH %9K*L=<mapcIofS07!+pI\KrmuPm0V'E%,r!_:-G,)^t*TSRU0aWW``*RR-0[AS-3oO/fc1CV,n;KpTi&B3btfE7Je]p,c&eCB/1W %.pN?;$c7TD&k3TOW[@Jj%#8R/Z.1hZArja$arHH'[]8=!:E[\,4B*%__8ufq-PBC,,pimm*AC<d-a&"ULT44Xok!D*Ji^_6_pc[h %o8Jrl60Vnf>9MIpdrr^V(4_oFL4HR"kTYVWj/S,8W:C\*O/o92<*r9<)QnKdI51Oq8?:9S)62WRpmh/=m4sh*#q)uWK:f*W*BU]1 %j.OJrN[8i!.ba0-in/q\N%Ljb2WP^+T97s;L]P?J<Za<6hFAh-a3"k!o'0*%<?Fjj#\U>DS-1q#ar<if[d)/bVAs\!an5FgXNq>i %<74,qoq5O-=2Tj?eT2$KTZi3(-n7ccVF\):a!gQ0a>u<n=96#XmPUudGnPc.9H4_IN0Sc%e6bN%C)kt[T*q$@0&mZc4p&'tX60O; %(3Tm_RhPWlLeoHscnf^rB_s.!`^NZ5#uYih^u6T4Q(OD,,USKe26Le6%%+^\#o^<g&Fct]\QQ0cGg'Kl*>h42m[^/P7Gs73<uVt] %D*UgKjEOUnU6dhFfm5>klib-6fQoGA9d!C(cLGQ$^u-_d.@h\*,K4u7k8nIT]p3^Tam4p*(humYXjeDBNNjmTOB7t?4'Q"8;Dm:A %.N^Y?hiKj/?TZSXr@tCbL:89;aW'_S^g84gD05htY3LocVak,;>qEn^Y?m0j*bAUd5]eTc!JO;WN)kSg?OqqU7.#,D$khfU528`7 %Lb'ChaB^lP=)k/cT*'&[bqZ4#nQ=WD*-6<)VNc2Sep2+]k`/rDSrn6/C2b,0U=6fc2+X<VD?)Jukais@*s4em&YPSGh9bPa:u1$5 %h4X/4;5-!ANF?kokK1O'Pi5[c#Y\;^j9cna='tG+N?nS'<7@u0gB+m9>Q[`,McBepj`MfIK+5iNZsHa=AUV&TI16S45\0Li@nqZM %8l:^!e0G7Lf6DP\=5OA3=ri18\QoK*l]`*.hi_YSEF;Ja0`>V3Zl=XjOnINK[+JFFX"hK!kTjLuIpEH65qte703Pls!EZtGS=2Ak %Z7@=.<c;pBC6B4DAkjEi`0)8&!_:ctUOcpUgG=_udh@hDZ9A9=OhTTCPb;6)`uk^ZN;44+\-R$!-pCfdJ@:BS_SC5LK>P6^(c="p %JG9]0C;Cim.'r"X%r)(\?ZH4X)H'->T['7=?F)+pE3J:-CMgisQ,N4'K\0d'6ZHY5MGYgEQ(2Oj(Wi^&I]/Y#TdX[?OT9sl;.dGU %Ma9#@,!IB_=hJNKPaGKWp+\pi7T%k$.#q]#E30<]&5\V*<J[@RE[@U*]-p1**9Ab&,G$F<o7>;prBnDEcukEi*=*X:p,B8*,6HDA %@%0E@.8flS=\>I3@SACpOU<`OLI"dP*:_jj/^,F!X]uU-l);b8F]:),<>CF;GfW?'F"9p1;]9nG\\rOkZNGau-'ONL4&AS=,W()l %E7JE$:Zs<3L]3:]&Rh7TgF3Z7VU4lbWc7n[W`#R9NBelf,;l#=JnU0"#`bZ$o4-%07/%=)5">(&?M8n*-/ijL`9J5"7.dU56]Dop %%s?>#<p+#X)?POP`XL,5R^b3ZX'3+!Djqsf!i%di%b3um[WqII'iC+K;:KBokUCd8!ZbIGa,%f<'tdOc;KGP!7-sgrX>lTB*Pe]$ %JK(W.IaRS)H(j](Ji&[0"e;SSD[L6B8O6X;."^]O(lE-/TQ6(VX'?HV$l7N<e9n*ADT`OVC<uNK-@RDt1R2FL(F88HW]RE59VcdD %T=RVD=?JK8WL6&3R(h^-M%oWkqL7fK?9k.n]ub"Y4Tpi"Yr&D?Jb<b4XiA&ZH81T%<)<G:P$*2g7Lo+4m+^RN7:Gn9l.<jZ78h>Q %bU,1K&,!jOge*,A1nt^YBHG8F6_JUq3i`DV:b"=1E3,3oBMncm+Jl+,=g%tq.!AEEbXCLJ$947g8q@&!L'b<<$D\hi^>=[QDMO\5 %9.je#.ps[j/WLM9&6'`.ESa+9\.T-1YS8Cq?:;q"BN<<&b7;T3@Cjr,=%@l<>6U@^3s&n,Sgue$k)M8^cds,pUjinKknh(\m#lJ* %KFM5YW+:"6G>nk15n"-'WX&I#g4Yo?nenJE3sak`b:Yp'ZRXls:M&qR&TI("'QR2?9Cs;;+0SZ>JqfG(q[2R8U;7ILPOhK'"uOZ2 %P>'go&ZN+EL-ElQ1khu\qp_"@O%7!fUJo6F3Af+a,,[,c!D7]!R/r%9B;!'FYq;VoSarH(r0ifeM"NSfR=T'qfK'*d)lL+uK5lQ[ %"o!WmTH'(A5iiIRW1U7Y5"ioAn1a]h=(dBaN%A7g\3+_0=@Y"+O?3#*4.P/k3q<N.RW-p4"0t_PIo7'J!.8H&Ifs/(s(k.[M#Oe, %95GuJG=]Mfbh!&i-*biOTY:D565L5ClN;GKr,Z]`QP#8\Zc3^'NM1LAj,I[P"I4f16pFSY>p*(`5=6_B+K^ipI55T(d]QjV;nGFQ %cF3\dc,f:8Ena6MEOicN_430?DUIr@NDZAX/I:u7_^kLDjcOdZcXJ<EQl.GY2iOK8UPqJB1X`^%\^lClm/27h>9PGX^SZY(a9HYu %-(lNE^`Wig<AP3^^,EbZNXW'F"Pu]TkYT2_:8C3Ae@3)Tr>[$;ClAJCJ11%<[PB)@^O/]VUbaqgO<g5%25!/$FAmjOQ>WI1+G`$Q %J/IFb%HMC6XVt*=Um$#q[M8:$%oSJ@M*B5a63pW4+EYL23WmK(cXmqDppLm+,Y@sM/fG->X.LrT4VCRX"4<F"FU]c7/N5qgTF)Gr %2E?V/Nd6eg(s&9a;^=V\>c]_8%b:,>nRj[`)qAu+pM2b^mcF^EYp!mJm^3JqBokD#8GZsA?'`;leCS@9=lo_]S^\f=KP2)XC9)[N %LL[$[2Gj-""iE.NkD1\#ZUVW@;9d<9fWr?RAJGfIi3<q?))dS_CkV4AV%SeJm:l`>^>t8-<fas<bIHir2MfnR0$gKd49uEX24D%B %NeBi*Fd66lEXRTgXpRGVcI^MZ>;%Wq`]++)j(alco%bO`UMJ#*_3%(gJQ#E!4%3^bF3gOE?7n"9U)2mPX(14;$/0!gA+V0&UOZPQ %qOj$CY"137A>&5gV.62+9iahRomB\ZK+bo`V<<d'-2!gbWOo6"I2ifS[r2Yo<BNl)gG;s=m<H8cFQZSE'E`D+75<)q&HI.`g4S,4 %;KUrRaQd.'h,D0ZVaTp'a%HcM!VK;W1LC_^XBReeVI]@_q.HcUWH4G!e\/n;46"H!`_o>kdLNM$@57o.I\[EP:NjC3^#T[u;EDU2 %;bW70HK9)D">cJtYV\aR_kD5RP93r(ki0@/Q\9""=,ju9Fa#f/l"^BkIYimD+R5k&YE*]][LaJUJfU-M2r>&S(8H^`Y@kM+7&__K %H4XI]\R9Gr8aD]mD9u'tE(/rTW@S+'hOrDNFOM@eGTJG`<?fd"d]LmOE]CN/:\GoHJGt<=Mps[$I9ip,3#uT7k`o"AEWBs,mMBD: %-0khY@HD5bmZ`ercSeCd!KId[Y`Si.VJ66FELVkT%*AkRs4MbNjZ&91?1\Hu%f#&iHc6%kpWLu<&gSJ]LUIq`XlUQb:,!e%P-BXu %2@*4CHMUQcX01li`q8a%b^^pn$n,!/?2(ACr:3Jh!g1Ob<o>Gc!6Y/^0>Ngb1+\hd,1'P#TNpLN,*%E?7Cg%80QDObQpXG8(';me %bTZ=I&hCsa-T7HFYi<r,df]e+aU9@;b^^g&]-_+-nMOnlf.kMc^d$CM-jLYmoh9cR*7=CRp-Z[V:2pdeGP\P&"'<Y`,DK?q.)PH= %-nd!TJhu]Md8m_C^'-i*:YdpGN'&Zn?`]o2Q@?fL+bj.=9@aR"7N>VuD\X\1:_]V-inabV(f?`\!:Op$-VCipn!'&ZSe@@4<fAO9 %`JPNR"#;Gr'&j=4+b.P%AgaK)%K(UPk$MS1W/67"-t`iJ$KX7l>)#k>)kNSJrkukd3+H7R#%/!h4j]>=*Q<&>9C<sn.pRr^O8]<. %<(5'(WUl`jTd[jP((s4l+f9jUl\oXg")T:hZXoic[F&M8,r(6p]hi^H$tS=9TsBE,'uB9f3?YHr^Lbb=c;cA\0#Z%q4j>_T:lt9Z %0qMF;+"!9"'*d;g\[uT5OOHte%kMLA6+Q]0=eX#k-m9fQTjk+n:rG1bal$nC9XBHUqZc"cSSM+T>D((o%iqqBeXJ]G[qK5>M;ARo %aZ_352hlnF==nK%eeciL8N9sP2$cs#OXrG<R?u"j>b<AREg-n`:fjumX3<F<>,\03\6ca3eNr-<nW4<!TpFf`3[!.`1^f#5?HLd$ %X(iE@,jMZD1^&J9O9LHb'\*Vu>&sYpk[C`]3V'9nP%r&c"4IU5DFkN\3*R(;_]Z#g#2=OH>,WufN8Bd8Pab@4/P'?mM4,Js'&Xh3 %`^sG&U)X\*#h'9/N9cgn/r@SBm,@a8\qp;m!V7m3!31)cUm.9\#KSXBINcT6KF0`_E\U^!)MmF/g</OYa6q:D0oBH-j_4,bnrnLC %&c]jZcT#tA=mYJ51DnK_M?+1OM<6S"@R)a@"uOddTP\;2o!'*<^_E&N;_>QLTbo=[ZnM[Z3;C]g1,4r/AB9B0:D4MfFq@0uZ0$U> %WY$_g0.9250I.SfemN1B@cJR&K9ss)qSG_e#f1JrdkGE#O'?3s"M:/GS>6mB^%YW0oC`G-pEW*n&^%eBdnP5RfGf_clMhq[c^qIg %E*]YJlX4*R>Ct@ukjH2j&J'.B9bh6M"^itQ.N:3jB;[%]TEL44Pi[5qX%Y(/kH4HYAIY,:eDT.)KUSQg_\K&+)/^=H*QSf0pP1+p %YlOQ2L!&LH-m*NCYDgV%liq&c:=]$-/R?Y).!M!$(P,H:ZCG$!D,V[QBhU2`lp+K:A+-D6BSq]<I\j,BeW#6lNO$ob<`hS`r3WOM %2_YSuX3nUi8Rl2BU02D8bA,4$"Z`j._IT)O<3a5iiBA*sfV,;gD3,W"4PiUT[X1d5>Uum6[q&O_\gYSYiVUP<+u4E`oqb5O>7DV* %]dpt^MVLaX&DY)Gi8rNM&uIcrOW3Te-OlIYei'5+^7[Bb.>u#n[BE`QH=,G,[\d"D9%q9UhSe.Z69?#(>;8S\d&0K)6lgFcf$Ob% %eP]SUNAZl(lL/I_#n1=iX`3!GVQAiK_4(Sb3<G\E#,/]Ff*cIpf!A;n<Pk$+0WEn:cj'2Y<?-\eTomH'BH'#@$L;Jegp*?S'MM;H %hb#8)<+q!9,d5.8d?GZ)9[>qdjdJ*9&T^K$$'c!@oAbX!cuN$%KiRqG5-C+jDWFC%YD-cHX&*,1K<Zq<Xj1Cki"Y50(L^6tDp?si %OXHp0RZN_TUE.!!`0+;XVgM@)X4F69E2OKDrCD`A\Fg"p?@WCWX&ZEXNOQ*)KKbBKnm4Xc:!-@E.lLI<_$*_CKqalEPN')'n/$*% %`bLrn3$Cf`1H%uYA<oh=7NH1o9U2An,Xh7_oEDdWj[VYT@BJaPbDc#-6`-kaXK_csDAF$1Kc,IR6`:N*9CeoNi=b6%0ORfiHCV0) %!*Z>C6".n=3$k!V<hqF191i`GXpI``VQ%k#:c'E>"?n:C\eF%&FU`O3$'CZY?6E]E]Qj(R!Jr=3dQe/[+>FX(#=MAddZao9Dh7(D %H>VS#@nn>?\oe./gJAEN:6>Sr:al2N\8F<3=Z:[ALf5uXAHcG<l]r$tW(ce3H%Bqu)WD@*q'$g/9sZUe)TH%_JUC_WTe,O70lk$" %i&PU9*7(Sj`[6%+9JSQ,B?/RCVRkT1&KX$u"(YMRP<JtTOH,I60bW&O30ImO`(20d2J1SK>%-H0C;n$?4.J]D2#SWMV+DcO<HqKo %ZN20F:n5:Q&G@S8kQiA5m4Cf5kpWg,+@-Jdd3On[#UXsJ$'%?m-,m_$@AB\LG"T'ij7/m5/2fr7qAp!_cHADn6!2GNVSF%6't?VK %"(DKYHK)su!3p(BJ4#;R-_OFs@8s?YX;C+hf>FKPi%@U<a9Rj`N1hr4l]SSEf6a<r6,aD@c!E)0h8r4QTL'lf(W;Q8AITMJ8\ngb %_a`;8"<6kr`/)>Ej9:IlJ.E7LM/E\P'Rs,gEd0HQjjM3A.q<"\1_'#-6(F;I"GE0I+k2km@-<?;Ko#Mc5+pCL+;S0qe)?lHYbsg` %,EN]M@^3)f@!K>>R6$;t.2GMh-tI?tG&ZLO$t)V%dWDo[:.,]H!3=(U>##tg)[./^=_/h%2Yp=Pb:@4[m)<A5URf/l.qN`9_NI2I %\@A%sX=K`$&Z5p%:V+ONA7h*>@J.6QM!\"S`\?]"Fq/Tq*$`E-D4S]e+JW]40@GAAAORmH8dRlJJSI#>AC\b5;V"`B!").B*!rC+ %.q9gTQ"qfYe7_OC5W/'(rdqR+BnGgjB`_V&;"j+!=_VED\[RX<_B9.I'=GSdO,#?,[QQaL"YND<<\4\ci-M9Ce/X.3/Vm^U@bA3; %S'lH\#fRDc?,1>e(<U6`NF5.i=^>%k<.Q`#1<e^T][QpdeVa!h4O>84Rat<c[$q=oYeC]M#QtCJN67TRmLg`;8mX3-X(i)=D<\5P %R'*l$EEJ.01>J._/4ee0-</aTKVq.9fW,CoMBd=S?2,h4#0:Wf78eQ-qlJmgAQ!@t3eOZ-!EG*$J]+W8nq5t).Cg-YqCBlR;7XT" %a[Uf(A^3:@4(4"o)@3c!@Os@N!9q4.(!&BOM4f]<[O,?sV*Ss/X^(rfI]NNmOqAlXR?r5mNrn-9o?jQ!ArF;QL<j#A)&_BqbiF"G %'EBs)ihe4Z(rQlg9=ZR)0LZ>2j:-`bD%Xo7En&o^=X.Uc3FSp+*n&Dc0NANq'kQD(I/d_.A..Ddl*d.g0ijuiZqkGj-]UcGYYPso %F=T`l$JB8#EP4>6EQG%GiDWYu`o,Dg]8@3!`kj:Of5*9u:Bfu2N:s7J*HJ]CfEs/75U1Ls8t=sN.`@9*ncBDYRPtT1WmT%_6I!5) %1ff:X"EmbRAZM^J5,KjN'X:M1C&k1fZm:R>4WdKK;\8b+;^8B--!IcUQBI4o[=k3#,`K:js&q.SaVkOMSSBFo"u/*Z2/j?k\I!9[ %d@#r0)31G%LlH4#FB3eV,I)3)2PXXaJgSMP&lg>;TPVlJZ5?de8/O[aLf(Encp``W"^9jLp0_Sb9gaN5b*mts`p&aMFGeVR$b'EY %=2W*5UZl`s"Q<`_L%OY:[LuSmIjc7!/26/5=V9A&QNDn8_lMH>0*'Ei#Y:*P.qQ]-4F/Yuk:C.BUh]UJ`:B#]EE#u3*2=E#9t2\h %MW-+qd&-0fLf4CPYn[bEl)QGOM^L_Q;$YGC$mXmXFJXSXEB-'`X-eQtG5EHt4U%c%F5lm:IROauJAcBnL'L&R`&E;_RF%Z8jTV5m %n`-oTfY"U(]&oI-ie/23jWGpQ"&,6s<b>J?"1422Iud7N*?Sfh`Dp&@[R]=^^I&fi;BK>I#%/`CE^V=:'+;XP/EIR5U!o`\.4\n[ %Z1=*Z#n3)c.i?QrnX-J<s!``?VJ6f'7&YCA,*iqc+CqR6*oLq@+u*4K_a6@+7qFD"TYTYlJINU#MF,fqVlLV5LPkK*N1hs.,Weu@ %)[ka2Z?f#P9p4-/RpnliNP^ZWP?DZ^iG36pAo=.hPgM2o:E7MH+n06uq+*JibT!fN&n>%H0Hr;lZ0)n44$\R2N>MqcBBLtW*j&Q5 %1P+qTK<Ug<<FeXSYic0HXGLY`#m>eW4pABj$l:*!@lD+PAtcOTA6'?TZN#u>ncDDk1+>ll@'Kn;ASZu`qOn4T3*3,-;u6QKn)\%C %ZW;S]'j"(CEA!&A;hSh*!3eh-XqG6Hi;$OoVWp?5'/B`O<1u9,1ip;gARg_c"ti63<eQ)=G9k1Odp%ZC[P].Y08:X8/<h';4'Pl; %94nnfS'%hR#&S-$G0*A\`/:]Ih&.QG+SuKRkln;>H+d+!&=Vh<MQkesWY??oDLbF)IOGRD2$+U\L-@@\^NKTEqFUpF9lCT?9&)?< %,5u]\Ji%"?Bn\DXcJTolUT-F0kBO#F`iA%@#E'qi6suomCO&:eJrr?ZKV!`FJTrOQa]QeRBIji"YZOMeZB/rqYa<mui%%X/_X.%I %P6=HRh>Vu9R42`8/es6adj1taLGjE];Ig=BBNAZBj%UV6J-<)P=@O[2<qG:l=R65Io&5[MUaAijK=WoQLK[XYU)J5;0Km?T.*j7m %?MI]ILlZ8'0L[6j%U2bh,>KF[.^6QK]rSnUjeRY^JEHaf!#/;K(3mA>p(a>S5TRRVZ]O-1UH>u$/-emP605&fBNTQAX&*+F.&p-I %[PE[49s[UATo)\31)U8$`@W;XYohu=a];r:fFC_'O&L4Z8P-3q[eI32$9,QV+lg=X.qL/$alKRV&?k3dJjJaF/P7M.81(>ba^g!K %6<Q,k'3S#M*$DcaHFZ\?fG8%I;:8PX$c$tR9#+aIK*5S%TN(Ir=X(:!16-u2.@qb70c"JZ:)jS&33LtG=KDb^:UPun@H(H"7NE)` %$Wo2(QR1,W82utM%'ehm4$EflK&5qW_A/&B"i!Os%6_MDg4`OlDTYSd%YUZ'+`>QR0c7F?R^ZIX"WIgYV'`;tE$G!Cr)0a4$c>Mk %LPn8J@W2V&Ge$4]:?Y%6aH+*S_Q(dXK]]cqmq<gP6/GdkIUs9'>"5OQ>o8jf'FP(?>'G(SalAfki1#n"/o`]OOLpl$Ds'si.Sn3m %V\SKmC.QVm$q'g:+E!nR"$;f7.-AN87hT8'B$jK/QAopI:6qCY,RbGGPf,!FWi;0`T5<U$JfZ1m?lHOdTs'GTX4`=S_k'A0`M#2i %ejpY6&BZG2f<StlB,V1l(#d5\50Ks5RSJi>al&Dr1=j)aF:olib]srXJ?TWee:?s3/i4P"d?Q5V8q_5iN-S[6>h)fRKAmbT1'g#` %Bl^<p`"K\D,glb\N4anc6GOF;eR/rp9`tGS'EXY00dVD<E(l;uklj>a75&>sEh"B-2>i?Q<$/nH/65nEa%>7B.CAFQ7"nTooE)ib %NQQR(>AdZq$?MbgNHd/C![*@%@DNAt'6#5hFX%rcRJj*/W`h3Rk9LXl:gUpRk&K'JELb9fM?FYNKgPsjKm4Q/AT#H/:Z:EjPf)#& %.*0?+9gua*8/eQ1/O_+d")\11j^9?%Z8$WR&BgbE!EngP>S1]1N>uO2d/p[d/\toMj/%l@6;Gu#X]T`tbWhT-Yr,f@/7&u.@@b@? %UE#WF6mi%SQ#sdCE.B>o@cm:C\`r4'W2k:/K$cd?-&cPCQ>rs773;o*$r^IdLhloZ.u_]Jh^gEVQttqSapj2/25+!#)h[9A,?XQ" %0NG/I,DJ`,-_9H4s+YEk@2]7f9I#dI/9A6K)s_++a>ZQBQLUEGph6Ogh2IJhNB[])k)snO];?3=RD`NH@VK9J@e'U_6o>`GJ!iD6 %10=+dYQQIM;A*$B:i\sl__iR8[0YkVT^4CMfkUM:)Up%<<R2Ii2&$VMG[.]4p+6Ti`A/&9GOn;j7`6uc/PG6HnWCgXl@Xu;DTc3Y %d++_eXfT*Y7T.12P7[@emM9CM*"_=3;s?W-A>OH<Scs\oWI`&5oYuLp%%K2NF<lkd*ru+fN>K0XW8n+nrNnmoMm8H:e?X5k7r!Yr %<eNFdoh;@ER]%1T9Ati6@^5Np3P1I<a:#Z4bUXohmG:p%%9(1+)kh0A_i\'6qnq9U<J;D$#I=^%FqV`g<QirFU9WU:KXbV@gI[%m %K+L]k)6bK(&MpAd<[]VWQ!6`fM9uKYXsLF4YT^;G[WF`%A^ur@-'@`QCkSS0[pntpN#NK]bK3:7OQA=Y#4,Yl[EM\-dIB*2#_BL+ %`\eXdV-3tCBdAY&lXhEFBfUos!Jjt)PTeO$M$C"U!i=T:.9>l6>o@<P`uQrjr3g&fTu>@a'r4J[:n57t7IJ_/Io:G$<a>SG<5]2# %I0$k>C3.K8MU`&VC7u,/7d=CQU_D.um$it&!lu*?WsY1`m&^R]'2h9KetgR`ed3K)&gGSG<JRiErCir3_#'ZJ83=$\UPXYSFMNp7 %*2`\)*6\k,dYA`EeHc<s?\NMf,S^.^G,ab1DW5jETgQ+D3E?B!@TX8?<Ye^JmrMSC2AXi*=H`:b5+!YsBlG;VJs?O9e>R2f;RV/` %'[_OD6@$C4imO&3KJb`j'b77l81[mZTOX@,`E#]G,]$0,Xk65a5l`5?e8f[CUg9`t7TDCs;-@o$fuf?t(hGl:`JL7hS!MSmM+p<f %%(=#"*3g5?Tq"uA_Lmn,$sro%A1A(_p8uiqe>tMMoVrX$CYP*(/b,L#BFMeEB9LBseteRoZpbNXRU)%ap$:X<>Vgj>?C8a_h$Oa9 %4n[GE+e`hTWp,tkT2MX'ef&e@>'@.E92$"rV95o:?6D?SUU%aaAa%]*'qte9?I4L^i<YW"EkHR]Uo^\;!<%tt6CHF4lQ(DPCO6Ae %JMs:/L/UXn:h(+n(1J85/3u:[Z4])U`$1.n+fZ\VE=g`PDc7N?C;bNN)Dp3Rf[MS=.[-uJW9>WjhGbE,;-Dk%BeTsMe!a70>iuu7 %d["a(Pu+b$@WYLrJZbqDmrT"GD8]m.*+#>[*;;bAqN:QW<E$mjcpeRNGrS!f7B_89fZMdBC[TIp.!?;H&'7JM>:H&KbUjW36pi6Z %81Xo(%H:h^OH,!RQ$">f(`;jnVNJWOo=PLK=p%G<4XnRC>#s0C"E@R6FG)c05n>-f%3pMc"J==!*@8"mltiO2<hCJG!_6f,s'Y5H %<f"9Fj1[=T7C%40IZb!H(lL"J`.#d@S17iB$mgl`_2g%jKSlTTRtta!UnEa$K-o6,!sO7,Y[WCgjt!%/TrorJN]u.s`b!-<Q\O_Z %<f!\8nb!c/$#d&_,9`d3hbVB!nh6/&*"l\!-<FSa$CDr/.P$OBC<dk29s2U[-f`1eZbbu6EBd=1BAg(aHn-P;Mj`N3;=GY==CbU/ %>_+2UI8j6l/;JbW7Mq!394#u$`?m`EKFSjuO`4ir(rW_3"p5scOUT(A8lS4-"9Z!(]I=/I'Hr"Qd>*R?;LF9E-IO'/]4sGQ+ll0# %X`/#SC!*=<7e`.+Ob?cI<[`,?_&JBV\n!gC9P4#iLbR-NJjHKdC0=,'NN?C%6AKjDjTQ:o%IX7R_%A^B:4#&;l<st!\-5a\'3_7g %D-#Y^Wq2^W]g)^hZC(Z]&bA<8&;.1jYrCZ1!L]_3WDlO7bfDakF`!k06$7-qV(@D`[Fj>uYT`XPUiMP+YN-9$S/a-fr`1'UK3sVV %(hbiHU[^n-YU'_;.+t`\_"0GC6*:741d232FV7WdNlkC^T^C/naFPW-JjEX?o@/[ZZmo-tD)RlI9HIgJL8LbW?lZT3JENU@f#o1g %5"9+OgB,6"j>8V3>#g:I!mb*HW%>5-P0e!Ti_g!O.[1`'ji4fH\P[<U'm#e(K]qBs0;r@#WFhV]Z5W<)%TdjCq'e^gjV(dKOUfKD %CdcsnE4`C%;B01(03<.*O#73b1Y:!lN.eHV)@TM>;)O-2e\6Ud2)KcWPGELmEic(sQ)J)4^o\T2E(^,M5<f6_?/0MP/`a!;7hk]C %)!g2;Cj#'#o=,<uR4`@n=5E"$Fd#pnb8#"1pX4n[R>If/M7i)mkfh!:FCTg3;*pJ&,'cI5qIgM@oO6ik2$g&qs"kB>2&B>ZH4a98 %BWZ/_=#U>"-=1L.=sef]SJ\`%GdWsl[XJqG\qmm8?.Y(RRu,gfM=8&4&o]aDY_b(#`Zi^H/TtSC]?u_HOd"TLb>(1^9^Ln8S7ac) %FA;Dk.+5IAPM2"'mDc`_7E)EfTWQVMh725D0t]C#[i62I'1L]93:6qsO5cMffhS(/,U3*&PGu'KT'jO"cbsA?`,BiE^"5`-2\G-, %=S#j$H8gGh)s][0(V^SLhi5%9M9GA,n9:Z+kEl:]/-9+kJMl3c,9DIIha*SFTu3KV_m?S5PG-rRkV><FYX3FK,e@4o$[=*=%Z;so %7@+mebG*DEgR-s^kjs%@)*_`c6+T`6?-\Qir$3L>P:l1C$q!XR9r6%FZBh8^V/tnj^<CQ7FSTHZQtP!Se;P5]3nuYM4?6\BSM'fb %$r]r_eYgUj1WL6[jV@%m&?Xn@)Y"_g)3AI_P'Y>E>n3_l[\b[\;hkBgL+R.p=fTY2[?e"riO8$U@*LB;c*2!VH+<;)ll,D@V&g:P %QSkkf0\5>0>K^7%E1D((ct8]p\h%W&5.2MV>E@pKcNcDH*B1klf4Ca^b?hZpFLR2nYKO?*A``55piY9hHF/3N!l5r.@$d'r/Uq3H %FkC7oS7PO`YUt$D)&I6O<kcU,1ZWipad-jcQ'lZI`Nm[3g#^5DiR."4DYD^CB:(gYXIidIcri!K0(3J?Tlc%6[**jNj[edfWHOY1 %],[q/I'-cCf.K__>"70WqeV%cG)"IhLB"\PPhW+c>p\CqZLlErqKCPA]0*ncSAI)[_fmjNc`e=3)3@?naYUTPWuT>h[cTS^k8>'! %/mn5Z[rdsl]$FJAB"'s1Gl]u)/lonBDg%1MH\RNl_qa)0pn$RLmrF2-=iP(kah-p$?(UX?-[M+DI>2Ha%4cdt^jS?rI$[.5b;DN) %9Aej8^ROR29VKMtr0TqQ@TD2;me=6eB6a?dSH#/H!&L#GB!Mngo+S4MAPht>F>G0naJR<r?<BeHcqifN:]&M`%l'DD@X0_dFkJ=7 %bST(T)/VEoi>0qf][9C"0pBhVPP1c@+(Q^ba9KaWeg*$h^>I1rZ8S%ARs1]uTr"C+V3C_ORj2N/T1h3<bhZE:)H:Q4qoqa1S.ACr %`'[RrDZ62EY+BN;T:$*Q1YI@<82iBN=!TH_ju/[h6$baE43Eu@c)rmeM5cuPWL)J@T*VH`19-[DC.q/G:JY5EY6H&2<M$Ni(3_dd %]'O,e9P[p7[LRZ=>+W3X'!=SBf--RJdEt[%lf)#)_f.QTL:<aaYKOu<BC>)jr,ikX]A.rXSiQ4i*[fbNH!QKo:3c%NoJ`+G5[UA1 %l&t>U'(C"bH?uYVCC,OX5f(g@'j@:RP/6D2'htWdhQN/DDP\c][r<f+^2RLe'$EXtSnXM5WC-R4-&A!5PNicVbtqA^l)]3\=$;SF %=Z3B7n^\V9Xr0:(%eWmj&iN**2FB[Z@k#$JcYSpDC`T3QQ[EY1VJR?MgVEg>V2:\8Pj?]BFc#B!OP3\9]Im2jT2r-g_7,0"Y=n1? %T`FGB"\sjWjTSp&_?jZ0LR#.S\RCg/EJ?6R:TrCs@dK::FpT3O<0/oCO^3jd/fEaZEFk3lZH%^1SiF%Wht6+lkGUJS1nS&?d'_r. %,GNR<-0ZCtBohPd98YbtT\:PnmF&;c:q1]5?K[,QVpo`cED&[N,HP)m[i6MT<h_u7=2^YcOsP)th3aLGoLh,@VAiMk'7VeOX4*-q %ksbZTM\^%OMn1W6CZC[pA5bDgC*m,a)d1]!_4$;5l:#l=A&'G]@T+N(p]]\;[-sWG?boTT(G"K_K\O)J\X=;HDD^3DjBadfY87\Y %2KH%A(j9C$f>]DN0oiq\aI1,k:6]<K*cj5_ZQJ@UG=:XgoOnnPg5S[0)o(+F\osiXB-M$$dC.l@gmK#9DS0mP13d(=E>*?IND3^u %a4u>1G=&)%6.ESelV:^Y9FUYh]QZ:iHkJk#($J&UY=,;'?Ra`!ZEM9\cc!lM`6rk)mUma9]@$QT\Gp[k!=bYdQ[)sj90nol?p.:P %QW'U$^+dUWcsq4^nis5;MJ.5\\dT9sP>r%JOtHjV**Yn!=_!2=@tq1^bO*\g!U2@oFP0*o4=%8'-!bt`/ecA9CJ'q%V9d,$2fD?U %j(1Ap9UB=&L6(Ilm[=I.9ns<nL-91(BrB.rZ^/A(iVMfE!d,B6\nj_i]L6NpN#KF*/i1pZ(8VW';NI9G:ZA`RpXJ;YRcTXrnkF7p %WRe@W22kTWDQF]sXY/ef$p3&Z-Ee$I=-k"FL.eVk44[sk>K^X00V<JIdUr:(B"6I(/8]Se]!^mC4eB/$::WCa\Lph:3`<S@riX/& %fB:ZLo'c7>qUVtKN>V_C>_+]DJfP?<*a@S3Zf)l3@[A`f%Cb>QLU#%TfOK-l1-tUo,A6ct]3LS+f#ekbb:X`GQT&t;a6&2=ZbtQY %_t)Jl"C91kg>s1mEKYLu94sVe405Adrm\>\X!:s%/q[r+mBt+G42W5RL2Rj+C#rIaE7iJ*h0->KB399-1@@'e]KI1j0&pl:*Onli %ggqJnZ4kRR(sd.Bp\Br`9Zl['QQ(\A/sl/JhWGJ@FGES:L3\*"V7Oi_]pAQ,Z=J13ZtGc8].DcD549fQhZHZ!O&135pNXSS^<1(P %_gL<R8al5LcZ65`B\IfTmQKS(*^tIC97AJ]r.mDK_e)-VI,AMWn+,_hE:8!rqE'Z81[P.t9EEt>!c.B<N,fYTZPmpA+EXq9o[555 %-",r5C?X`#R*#@^P:NAs<FR9W75nF>2m:2h*#PGu)/WiBBk!*:%ZYG@Nc&HiF]gu`N$5mi,2G@,]ppC4j<f*560[N*RE;TePDQ-* %[ABAMAPFeE->uR*_9>S*R^p'gr<tX`CcJ!03TCf8ZF&=r49MI_:"pm=g[m\1ZC+BO:"GtTI\E077,>LEh$cg0>Y*\P8_s;:h-<Y0 %]M11"Sn>8oFYcO1F%jj?U[$sDl=RSqOO2MoN1H(?H>S?cm;fLX2lpaMr+ctK[d$Llj`OedJG\hH.W5(AHH^D8(:l,.?'j;`/Iu0_ %XEW@jAsrETXF4B'^CIa.MR_W=9<3_g;eeCfVOPs.>`*.-9)[3b$!P@s1o;>ZOqc_HBJbemF_R$$.$_C99/At1CIt(#!iR/?e-rHY %Q\)51<]*6\eKr&sdUg["CNX=#>.uW"$P0mV6X\T_s!=MQ1gt/J`CBK0*MThW;R7tV>)t+L/ZDq&nfC`aR+#mXMs.I]F\(NCZ,nlA %F$5Dl)*5A>oj*n0D_7[>LjZBndl0YYf;&B3&d>Ea'c[kuG,Yg]BFXhQLj,%/c4DM7,`Fmt`YiO3%Lls80QMnQZ:dU=V6!qBDV5S0 %p)#UK\2@>j34j:'$`H3-)UL*FkSeKh&J8`DZ?1iXZqH,,+\h?Cb)s3W5M'JH>@Fr:4J[()::fVXnC%-bOIqN"k'/W/J'b1Er.iYF %]b:IY^HJ8Dl@WI/"(_T=@[:hQSUa#beO1BJ9c-(LO^oZ(RQfF?@jj7fI9s=HJL`)&9VHfnEqu%P$g1Bq>S.?uAZ<+_E?%]8<tfSL %4$cfe<CnB"g%<[pQlN:qqIca-->',V]Q\U7:UfoIbgJtJ"M]cO.7jCKQ?UG[cN#[8P>G;'UsN\U+=W8RMSZuTgbp#rUF'2^L*;[L %7q14h+I+`rW6i?7e5W#no`>i?T9P$Pdj0Hc[3?P"+I9s#<)d0_lAJ6K_8?06PC2ls590Ue^[G:>*e^`sH@>JRc2#oWq:/8rLEslN %h>ZBT?[mdEBLRFIme]5^4MN;JH1K#PlbS'6q;]6ho'3F1DpI:mkNAbPkLWc_2]qJa_`%h8s7bWo<Vb*PWRf>i&+=D^hYuKl5G.lD %l-7JpUr;NDk8/&ScE?*ok2;;M^:G?a#6/oEiR]m\g[DOJ^\bpb+9-V/ITj\IQ1nV`1bSY(jPh2FrV>gXVk7nr/e&a<'J=Njir?R6 %D>NYtc0`i8S&D/l]g^-!o3lWC5&>@'rk5f^s*fKA4T4m;V\d,II.CGoD9r$I;K>K)TZk).jnac4F*;m,m/#PgRo6_.f5!ErB[MmN %Q'J)QD\nJbkaDHUd%YC1-?%etr:'.6m-=4ZC%ouL$i<B,o)Pmrg7Fe?\*kr8DuNZ4hV3-prS?l:mHL'&I;%5:/H(Y$MmMNoGkB5Y %Dk][E?eW(5:>VSU]K,l(n&j-cIPa`i](Zu/V9QVuGPS_sgQV@NN*Z>%Or\55rq_ZOpG_q\k</W3]:I__iB')MMg(*NX#4D>*d^`W %hWNO8fC*TPci/$-o'=WbVotR;6)u'";=!L+[,h)8Z^[05l^Pl\)'4%,<HEP9q<R_.o@kRLk"AYR0/%+UrQ")659>3YfClYX9m^_q %457"bg7I&7HXDK8pZ'Li\KYAXp%nUR?JjN'HOm:J/[dG%VRj6]>MZ?,>Imu(e\/Z-[o`=4:Yg)Q:u0m!9tR+e*Lb$Cn86U:X]P=i %S\78"q!R=/2qPfm#rgc0BL?l`U'CNt%aH.KhQ8dFG>AfSI#EH#qr[_-qstK"citsrqp9uO$3#&;md8d#PH/=QJ@fig?9C,aQ>_\" %*b&J]hN6hHeXM=RW]&N2[XC*Hrpe%<B=H4T@o%HEAcF]*i=7I7$b.2Z9(;KLiqhfPIf#P_R"bG/LPt8k6nZ/[5bHDh\%eN*rpAO1 %orrd%!j*56\^CNI/l$:jr;5+3X0\kgD-MGXr`cpI,EK%3hVOiO6mIHln%FjA!C(M[h>DM<HM61ZaX2AUkb2;19b+Q\s#^q]fl,6% %m8fhibpL@!5E":e57_uDq=a[_lLkr3aWA;?H1i9I6a-9*Ys\8ZO0TpF]2)kQCW$,eoH:W9]p!!]2M8t-[U5?h!5CY7#-b``G'QIA %"#OQY;>nZV"&R_`\((pj1NmV&o_*4CgOE<h8dG:5q<bX=kNc*hh)dDgDU*0M^-'#55#PbTfss2Uo&aQDNL/N)%HLmADLOX!T%p#4 %d&($f@iUC[=+NMFk[Ug'NtF.C+!"m*K2L?GUZ^WkCq%OXl(;<)?XI/&]/_tMT>dtII@LSmDJ.uto[2YhjdVGmkO4^\M%kF^2=47l %]p:V<c16TO`1gMlOBk^>hje&D/B:3GU5Jc5l^M72^:q,Vl,+"1-BE+MHSh5FnrT@nhom-I+Q@i+gWIe-nF8bE+3bk8=ZFAYDdnW/ %Z:E^<A+m\0@bLHd^\Cj?ouhg[rHLgb04+g>_W!l99brH%&E,d1_EEq%)W4DtU,GAT$WMIgGJ<H7UcbB8Fn%$;qNH&A96TE-ICe', %GPq'Se^`?lG@q_)Vjgcm<Zf!K7fIh@&+=!I\bb6:SO:`Lhu7qAEdDnSG'3\KP@&Ot0Y0@qY?L;8gBHt8*Q\6j<drSo?^J2>Ip7@X %P2]]Y;f;Qu[2H++2P4<6>I&&,TOS7;rekS7]<^=20XJ39N@`ZK[XO2eDTT':n<O;%h[f8"[]I1b2hFBpG^aY;$"E+-Rn*=qS*S8Z %NPWL+Is"q9a_C*MON2+H*K3U/YPme\HMO]:q>hLTEq.o+LW+mE[_:FZRuOjJ.Y%I#[(&hKeqGNZY1Rq/U$s\lb(j$Jci4_q^T`-M %V]Hu!l0@VGEQ#r_ai3LOY2:dKhXJ;_pcP\pT2$c3Vsc7qXTs*X"4oYUmqoZs6PIGuk.Q%]IXD'CK>uFH*_7S;\N7JfGqa!c?0.bA %9RAJ;Q>(N?Ns6$!]Ht1%rRca2[`$t5_.)*kAcHGZ0[!\+.gDQJ!=\SP;b/P(52=%amVu>Eh`l;e%^Wu(^@cH47s)1')E>t3QL)cI %\qe2ii@s#,(juR,)#^kX@5cd0\,GrF1iSiD/_N"6cu-^/2OIY%^.'.Q*+jIhG3+IfD/blEpAaIhRV.7!\*<&F5\%<^XFV>K!;E8X %`CAh0Z&.h_+FL^,4OD,mT=".QT3jfQp6!sr=hYYWLj%s;>&GnG&_<[HadKj*ak?,r)sh7sCYmGS2h&N:m<>r9Nje%2g5DFEfO*&" %)qq`=BP0"rp\WWm5?kFcm4W/MrG96@mJ!sChp5K(cKi`fn;hBi>MT"WaG7632G9?1r0itsil:GRc$n>nHiEK?Mf17D5.o`'!cT)U %/7'@l`K3D)^;"T:.Vt]dpSR=6+YAU2^V!kh5/(6+09;)6jfu+KkiDoSrNmdF5_!:nJbJ4*eNs$*S+:q%q+^\&_./+6T3o8lqsjUL %I(AS(k3U^+PM>7>$tJnI]shq=3Oe;W0lMOFMO:5Wg_7Wm$"C?%+D+jG:ld='iX_M()rG\3r[)L8's.Dk@'T+R_8`(6D%AG[BM7"K %mHsQBo%33:jT>=gGA@ukmVNF!qL5moB#cZI41$.^2A?(qHk6#6+gup_%9WcLC)^V(THT4fT"h@HW3m(S>MYAuA(NV,5<qS"l41Mp %8*7i31V7aNIX0ecqmNohSDX<nH$6gthY,KkTtB@Epo#(B%fkC\!df.^kAVee`[nZ[VO"nWH*3Q^GB1H6p?q"T4*g9imd?k.:c@U. %NV:l8$[M2-^;jjRF,V+*?-%@/o%o)UC!tjl]\U$!]aK+4[tD`^COL:'j,`YpB/A67X^K'/m)j4MfJ(J85JFi]RblTcQE<8nmnN_! %G&_O#gX:7OSH&6QD>F(f.8\#:DW^Srm2\`dC>WlmY$ptHrG0B1:TSb!5F)]FAo/JOZo>S`NGa*<gY0p70r9W$oAQ12DU-P1^*u"F %ZZ"-mhOOUfrQY62l\i+(Df3kWHuj^WEqRo@V7*kQD20udPI#XTP1uJem_<UcPMFaRi&WI`\t&]Eq;o6C2/*<Md?*qn50q+*2P"-< %s4GERdld/.p7CI1W*R,h%KE+51!`G?IDpue%Scc>A9N:rle-"*c#4XH_S9>D+2&D!\ZX9=r8QVKQM\K&#-$,X*rrXOBe),#]<+9, %c"";ng[+;c^#n\K2LE'\?.KCfdZE:>NAtUcg"UB;G+62$AoG03gMQY-RiSum>d-NS;*ZQ'7]7tYK_g`%^)aRI4j$UZO"a)k/SobD %NA%Rrllq5)Eh\1<kKm>fO?JB=Q6GD!SO6mcV!Z_TRZB5%ai4)C[jUA)9_c5DB(!2c[e9"Bo2"c"c3J:/QCj]iV4VW%q75`eZR\Q/ %Sp0Jc4Zdl.]ta)Rh/c>.;Lo)LpnQc;qX3O12qPf-K)A&a<i/$l^n\FD/EVH:8*&S)&mCf-o?E^UW.dnCqZ/%snqMNohN/7P^&r3K %DKc!=O)N?^@7f7E^"I(kroh&_JX6>nYbb]^!q>`TqA;)@D&JW9E@U=jJF$:BX]*KO<PMa!-%A*_NsTU!V%g[oUV0mgVVf\VC]MN9 %deDUm6gY]!B_`t>+mr0rZt0!Gp*$THK2H.Q=g[omNP/2!D-M2&W"J_mNNKl$VoN8r=Pf.Q;.Bj\hn;lsH]R!r;.CPho"@n1Dq*E? %UB[Z/[jN,&>P<s-:+Kp@hOL+mSm;3dqKt:=SK;+i1\.AhDV+->"7k5k9/a,=CiLlfns8X"^3k)%h<k%*ko)'cX#<?0J"0k^5Zfae %k5I*Q7uI\)IQ2V"p@@A4s1US,3aJo!9qJqGMt^[[o[URs^QlM'r<?c`5-dhZ_BU<f>!A!s]Xba]hAe*E!6nZ:&`iY3q,r.E!)7a? %ZqZU?[HUP0(N",5mAZ$3Cu1bpkR/EPHg7=YBX^#!a1If_hHcAr^O(.B8&i6JJ\&JTMYj!3j@_,Yh)D`Voa((t)mj<<n70YrZeaiM %jmC]Hm+?8Z^Ks8JY]j#N57TWkD0nKo1enBke_VRcHR<b*aDKpp&R+p:'&Ta:O':AoA..0CI!^QcYOLoo^26`3p'T^U.t!7n?@.BE %V\QqdMG)^)I(QBK/S="p9oX(2oCa*[4c[Zkj4e?sH];s12*V$G280ORZl9q@TmeORh^0r.HEHYNYHQj]FE=a8O56ja40A':aoi=r %`JAGXr6Ae_]ND91lkqJEI7)Z9Gi$u44laL/*m2>%nL4+n4b(N'DIYn;P`%)(`W!%_/l#/kq<!2qf>!oIT&5"lY77RkDf7jF/@TV? %l2/M?Dit-KgK2rqNS1_YoF`M1%]uR'+gfpG_rt^5B$4!%\&e#_r0TBo#<62ek3N=.B5btBpR!SgRq=e=o'Ki&k3U53Ya@A)gOFU! %p%J)i?.ukjELf:;mnN`Ik7%LG0>Ph1rdMB8G]$\FI;F8NO_3<kV^EE3(8GO1]kNBZ?uOrYr-37.[TVA)&+,M\?/*=]F7MQYQgZhO %c.2CZ51mB,*Xr9R=Ni[FG#A6K,@bfd`.QmNStG&?reb"7%tPWIFhe+A(%8s8gYTgrJ=G`ch3BM=f5Z:B]MlpC^\IQ,f2lT(g]U\# %gtl7ue90g;mcoH%qpLdH[u^9t[(e6\Y=hOSn/ZFD4*Y+YPkaI'\2`mEJpW^WhIJ7D3_K_=QfU<F0+Y<"/8rTJ(7_fVG,lRf"p`O6 %`,2ihnB78`D+!pt1h9Ndbgml)NtOO%EIRfPan[u'F8*u(PFM0uT.eMK82@J841B'Zg[_[lGsh:<kI*6YbKnIpda,B#r7pqCfcQd^ %UN=V>cJ>`mn$=igj'Cl,Di$P0(143G4#@Nj.i$GVbfTjFNG3ugjktXd*(u?a<HkK!c$b_FI4%UP/l0Wj(,I`4_T&_h'`YB2>EpaV %1B+_0-;*eKf_i5W3;ZX"o^-rYcL-E/@XQg8A-),@Nq!B.:6.E8D,9],]h@VZd;XIQ0###:43>OV(o$H/9n1pH@r1HHnF8lPrGIm[ %06#[[NkdC\6hQL187T>gnnm.4n1h7dQWDJmYf9sO6MbA@XNCII]g%K?_clogO(UC)cYp8.7'\E)I!bG%nhJu)K;LY2Cc]VFJ%qDj %EqISn;/s:]3rSpcm3[m3Q6!pHFmsOtZTmj?f`TMUrO$HScQ3F&K$"RVPlKe+jQc,n$aN<>c[>c6:kigGKm_*MD&;W41gKcq"5V^! %^2eQ+,3PP(>jQU(:L&KuXQCiEGbC+9PlBok:]INHlPEW@C)SK3H'#]<lh/f;jV:=aF%G;'B0Vqo[=<Glf3e=opo!RE>lJ\jn`9H< %c,$k2DGDh1h]2RmjS\:uleh^26leBAs8M>n-h#4XeA:%6%-X.0I45-cs--mi:D*PKi"#a,nA"ufFmoUXs8C&JbfLjh@)G9N`Z.#! %d_R5cUH?UYJlq1\l]",RKjoP-PkIO^ohhqOOa-OFYF[lRTlg"ss*4bgoB+u/S!,eojna%km2rQAcBen&"psqgV^L_"-h#75ld$QY %Z3Q0XQguSL'U72<.<h#.Ym:<?I%p"*2U3;`cea:7*L14rBTY?u2Yhu<Vb]p+Hn*[3T?FtDm.,uo;H`0r&*bg]7q4aRcGGdU<(pkJ %dN#+SGBY/oB:a0N7Hin)IVg8k\>56A*-lJm6$&9u1=4)ab@!P]<d$';jI:Gb+G6k2oV5S1rR*55696O4;nh0"Zp%C8k(?$FUhgni %*Xc8bS%]VX2DG!da;C-#JW=:mU?Ok/eWIbL.hABmTO2g*2d8K,9<E>ApcTIM"j`S]UJld-b%*DAp,lP[c_QS[o?`oVQFSdl^\G%N %BC^3TT.0.Y_dJ`Y]>`e";b+YSGi1!IB]fUS(deD('L1c59r6f[@'U.<k=X?@SS6-cPVkUkPd)j,2/e^0)oBg_b/I&l@r9G^@ESN9 %ot0du3qtf7IqaX8<Zg,ebQ!KsRlpfoo0ETlLPJ(g9+b!#9hq"$eO<j-*WDa+1%.HkIERn5^2!XTE?%s2grn:BC@5*kLUZC&J!PTU %_=.DCn?;kH"7Fe7Pf#:p6$n(6kTjuFU6<j8R`ZO@g=#]`]uE6sn]1lK:Dk#j_SN2DAaE\PHi*=H&LX._AVFYDlP0ek&$?7ZdRj2` %(O2rG3/ZQO00l3_F\/R`+PWc_LDiSKI2e?KAN^FEBc@S[itP-Vn-bo"[#E/g&*</DN_ti5bGGg]`gped(.aK&Te;7aKXr.">gbXO %92iaLGK8Y6anSf25d9cd>cG"j3:4]p.!o=sWucR0@MaXKWnN02SuK2h%YHGl?$IhPYW6g:>PZg#TtO&&Z+clg[B87*'[+/N,J7;L %!VWL$#\[bkM#pZpccu$XkYc=):3d+M1>LVq-]u6n7VNo0m9P2INluV:cR6"6J,f/coab[?a!VZ>k<G)'kht.=]=1!Hr8[Xb."\\[ %8u;R\m??G,dXA,P6.m(%*SVCHfk:;\IBK32Qi=NY<hk0"keG9hPCK171*lcn3Ru9Qb635j2Ui:uK8pG5H!ReLgQ@Zn]@XrK*GbWm %.sq!PosZ;:L\JF4jg+k(O&q\&c(b,\o-A:]otg5IY`Ui59K?D$[gtt*kBOa%b,UsWLA/tHH"+OR]tUUTFCgn8\+ao^6o]gJisiLs %,MKFbFcsFcV,fCU>.0b^TC1mC2;`3pDsLhK\U;Lg*i%aibUVJU,A^Y?QFf_S[`5c?`g=Yn>_g5$1oON7#3dEM3^W&AdlPX.[udn_ %CJd8c]^0%&c#*3H5$8K0>g$l!86D+5F>+`-ZI4L;`245_!sq/["6l$-BERcRk(@CJPli]/(/i*(n]'Krnkp7g8:;N$IbPkC3X3ac %P<Bq^\?S='8mP,d*Ag2K)p>ER)l'`:qkA%,%tq5PZ2`c&2;t2KP-S/T96hb'gf#]7alpQIX2:[5i5A[4:5#Uj'-F+S:qFdfC+0Ua %kE^G[X"\f?r[<P@Po<bWhUKg$ar0Dj^\a(gqod2pES4EhCl7e3Vc(;,:Hrt,J#],rEj!-(B$:YU_S.ijqJrE\dI,=V+*n/nT\u^# %*W2Q.QUeIiIJ<]4?@V_@aff@W?uo.mX.Fb$mp<o:E'O6`e]-/>j.to2^Pc9)bH:#iIm6$*3;EIDo:kU-T&'>Cl4#m_Xsk^K5<ljX %l/Jf?>IcK>^\o2D#[a.9I9ZaNc,&jS^Ck+E/ZlbIUT.RZk!#ffNV1SXk5Im&c1j?7\C-;YkPAbYR=@[ujjUQfcVJFS?N9islbAtf %3[sXlch[6lJ"N:GK*mV\BP*fi`WN$<bVIUjGfG!=`Ssk6K.Y$:Pj67^o7]h!]Z?(M&$%@Oeb:(uqhMNC5+EFbn!A)+F]18O:cH@a %4ClfdUSt&'X"0eqC2qqk^lF]&k2(Hh/=KHBQ@Om([OXseBq3Fe8M6@sEpPCU,T5pjNQ7=5!TpaA7n`TuE^0gib/sbGMP>m7SoW@6 %J$rpj`9_+Ye62E"S^CWMW0tIDARehr8dR\,QauOua$9CeRK-lC.t:(4><*Oe:4QmdQ>V@cI:TZg3fM19f#VrgdI,irEQ_B;)8jU` %ckn[IU:Q7"XDacAUA[g44ZM5[95iq.h?U(u/UhSL&6%7gJfe4bb/CQ(CHP!0j%T3c;OiKVRL29%g5+_Uq3NemQ!l,.\(40l=-_2; %77$JXA"5Z4^6=ELDY7!?B"f4a,1\^$qT<B;DV^;GY0;\5rRdo)C-:66VICA,>T&3ODZ,Q2Y^GDr6p"ik):g30NG35?2hj7&>;n:b %JPc6#3R8H-./Ob.+,VFX/!-TaeI#i39-%6=:or=e<>JC/54(ot_U/aKXtmCj(85'>?%PnB'uScs/4MZ*$L#Es=*nn&q&=XlYnGVr %)9dr<j*rQ=YN:Skb/d\?lrfV*7<.ZgJC>n+WA[lBL,mqSo%KAYR/L:;2'%#FD3UcGQ+jP&l(S!oe,PVs5+&RIoK@oA9\Gac?Y8ut %`E;BZ*OD:hI2:K"N8n-,jgFfn06UG.p,ZuR<Xu3;fp/8NlF@2Ve$[g#C.+P8VbZoABrtuR[@+_rNgampF1:g-F.;OO+W*?sc';Y2 %F^lZQW9J-f?u_-.`(l1Zn&:/NAt[QCK>@r1Ac11?L:'ok@Rb.F\1tN/1&2G/juN"[9FQ3!E+JTN-VnM!A7n_K70K;=#?-7b.k\Gi %4rCtS:,m\'*u/0sb'n#?U2EiJ\T&.ER\l`po7G&q&oO]o+m`oH%<%5B[I[cI4+8q")`^.L;%/aBJLU*iA-Fc?)dnaGJ.5<YWgHi/ %nMN%I`>=&<W<QoLA6&S2cj+Rl0TIMX;G&iOPmng#NV@=X`],`]$_lfME7WXlR`mE=+bc0tYhAgc\*t1eNcUU`09:a4p,q%F:-EaG %?]I9&?ankZMsmQN`,:pagpt=U<jp(0'3Z9q]1ltFG.XIga#cJ"A(bSYN.o*%YKCa,@$;M`mS]Gc#1!>[[mQ]*cQ?I3<RFUX7K$uO %+]roo`q(RUQNKM+X8]_DXT<X=mrUSX^dq@QQ;%io@u'`DQub:.!pZl@e):Jo]<YXD<Sf)f<ut$B0R#OA_n95uO.6Enr:ER2]5>*b %b0OX+7#bO=E\<V?6[n8_RQOmNnZIE!U%5-F$Dq&XprCTgeq>H/!!.)j[h5/kE;Q>]0l!!*JFBpV7VJ"J6!\HT+gT6)/abm%U;VZD %.MVPGe(q!^O/Q?m<4Af3AO])Sh0;aKDV5%YY4l<Ns$E+ci'T%9N[A'9Aqr.i`k.Z%<^)>4b-fPA^f9<MRp_WQYpK':Z-6:\n.f4; %`r8_(hR3i-go<XD^"J%gU7@^2#8N1*JC7*I!EuZkVQBEU^\Xc%0i5%3g)%pIXnu3MLKS/H%pm?`Uh<>U(]`fs4.[ubQ0\rjR/GH* %oL3VFV8D=@arQC7]r]#]SEUMh[OlDE:d%U&>'eh]rd\KXk&;e2?hIL'I,j0>Hp^oVD*>060U3k1U(p=R"!A6OaU+J&Q]$>;_b^E2 %;"/D%Ka;usG'5RmBu-h6lk5RXNpcBC*1/dmD6E)YX98Ougb9ur6F..6OeF=$VBT!U2ZPc(ITKL$#/Wk<Uo9j<%8a=N_K*Xk0Rtp- %_[B#qn4+g,#U!o2V-/(o!7EH"L:MRN`MqDK\,o*THMMfW,dNdY1]/SFF9[uA!5^4!&2`Ut3*t>1+LL_HD[j`L[[&rY]G@ng5io.2 %T$bI-R0,:!_j<2cO@OFkA`HB0*),P+[@olp7b%6!m*\^r]?42TSrnWQIgpp)YP'gk#f_L+ktL%*)kNCkU.h%[<XIL-Qg$Dr6((!8 %Vb]dg%IL3!i&<bO@1F53"uLC'Q`bG0/cqI0\qL^<atQ=/Gs>G#AK1?be00ng=*e(*g1=BUJS&S>#+Y5m#\5nCiok/\P=WHseNg`% %#<l:S5.8:qVtTmF5'pI.Z'Y![%JlK@\XUUc]#f[^!,rh."N,K1=.Bc-Z.']I%dTdISVdo=S4Q^B=<4F.!6LX.GNKhdM0W?CdUi_k %>7Y#J1-YN(+Ni+3W+FS=&Wts^f;f+gThe!Xh5q!IQ84?h"Q0L_2gDPF@B:50!Bk/tJ_L2_-g.c)+]VraqgNd=^f#o\ZF\c>RTdhk %Q$)4=Cs^2G7s]g".s58*N`"NO[UfR0AS!@U\o".sO1$Xsp:/qgCRO->3fLlT*!A!d%5^L=QR/?IBLIREnmoaG*Q2I%^19RQQ]LCL %^e5MI/%/_*#NVLN;ep+U9\n&g'4ntS?q90<d-O10&en1!RR'Z74u?F6Oci]:=:HrSVlX/9l<FR&&4:E/*F=il!iD_e@p*M\B]hYC %UYgFt]Vheup9'jgan9#D*O_Ie;qNGP>NFRm5X*A(\Lr4_^Heia8Vg#B?BDh]H0q`:EHW3e#OpeU'hdoWL604,Pj>l:iB4X*&EIn' %7L$TO^idH:9V>m`5`1k#R6V$Ji`Tj&:PoXSq\/1WSUg-rcSjFB3PKn:;V;jTh0NhaptYbX/]\HHb^9`GEn&+c@HB)M\M.f&/u/8_ %VIfBEhXOH.B$Zm2iGeS79Zq_s(.rf_R:kTV#5a7#UH*BdILU('Np53.VSS#\WrM?ePEWNZAd0"ulNje-^d!4&7Zqeq-R220<"6Ve %#knk.LOddGj\_Qkck.lapkmpl!TjZ6'[+3/U*6k,0:O9)7C.aLmY)`o^o.Lg%0<6?cINgTag<TDU,*?9jrF5T!VrQ7enshH9tGgB %s5LA=:%\h*.<:hI@6J)liMT00_X3g4$A3K:@Vk#q>s('34fK^\&$=)GD_f$Z45T5D'"S9@\dd\H(Jslm`YYbf)K*N%c@s'U9if#) %jo,P2*I)Yp1XBe;['@1rfW8@H+>$h;e(jLIaq,!n>+eUJRAG!nYc5fjc't,)NYS:o'sO\8PGcuu#+R`8q?NCp^]ZIo:6h!(4G_8B %lV>g$M7"+1H'=SAG@Q83rPV&);2;/2Lu&q-;jhO)>#f?V3A$uS#:$j".&p>]/?#s:<?rc@U=%g;"LZ;OA>RIs'KB&0B*M,)`^8!u %6"kkdS)a6pXbLODN>&'Pe,<`=Rgt<qdus&pSI,W!/\moK4_efH&O;ncF>[+XAs>e$A.Vr\Roo%nV7-p"G:?KJX37c9-M7Np),[u" %O1ArW(m44T!q@&cFK0:^((VRE:k@72q;0SRqj`&UB>7WJTNYDiI6g]2TdD2'6?$YC>rmankrM,t;rGaPgM$%&27seCY`'saSH>]O %"W1bY;?gH])Hr0F1bn^e!52d-DM,@+R@&8MfFF)^CrkJa78O(56dc%KQ%bpT)U!-+LbqQG$QP*A*#cK3EBc#!ehfQAj%LTcMFYre %9M[@N,d`;b0kJ3KlR":CIGiS6cn>KC`QOe,nM>)jR,bJ4*q-*@>*jN2@@)u$#0jU&R*'8c))1e+00ThM\'/uMQ-RqlR+OE7m6"Qr %>"q':3Yed$ZUn/D@AKpW%!pI[#fSm[TT)7M>Re+`?ODP=3;0S5XZ?/g*u:pLW(5K``Ss_=>ZsctfP9(^B(O1:KCq+;p8-EVUofq' %7ti5C],)$_$'@0:=T6'Q3*M%]V0_A%&;7V?POUQ(02XVY(OY%XUhlI<RLS2Og<#0<29(2)@'F"M#!Z:>Ho6F_'OpK?:T23X.OU6p %KAI-k,2X55NB<LGmg!hMeBm[m-pK4eZ2SD8QM(Em!^!-!:kMHCr!%&CX2b1tX@2OH+Ula;b3P>LGG,)R6hD"?PEjp`ZE;O)T!)D7 %/Khn*!DpZ*K(=>o4jdQ)rVkmeZS^"N&Z3[?&%[:b]cPJ_R-NboHO-..N'LHdE:H'P$#/V(=O9Ji%1#JOddq$uE`5X.bDZpQj2hb' %\F'DZ2#(o4%VkB:2:3cm]elQJ(n<g_GZ<qf(XKIn0;#//j`n&Vj0N9g^>(LKN02-kE]/:OZ`sa9Z9,k<E5A%Rl6!gc)^:GR*RB3L %Doa^V[GWq=b07k;Cc2J?DFUd"jmYYT;\@^Lat]9*mnsjoC]*j.:1D0C:Fg@T[iF3)7lEfV.p)]G'+Y9Qh3VK1dk_)B#59^.hYl'f %'8Yn[V5j*-og&jKAkgDL%M#SIcVC*#YQ^:d>(/+$,/KBnSFd'ZQgUW;(g?Ef^hjqu2qA"]8UerIBGBaFj[&O45?lQ.F;uYM"<OPj %)L?t:Qk2aE"^EoRhpDF0%6bj6b$)XC&N2dBLLV3o6sL--idijY#e5-E;@[/a5UBZ`/h'VqEH!H_&k/#+86i/nRdM?mU"j])I1Qj5 %$_@I<*6,4KMm7hNIC>rKjhW_1&K.Y-rhST1C]dlrVYUeVd/+n`'u=3Ejhp(4"b[AE-*WEpdU=qA>*M7rk*7'jTk.N!EoGK?aS;/V %#,!C'Mm>tQ?n+cD#,YcIbDt,&Yc(GXYsg!+1uDr57UOX^SAB2s=5>WMN%%+:Lud?!6/d'+EQ=3,OJpSu%Z6C&=6a2S&$'&^0O&Kp %'jHFMo(jl-O7meWZh4Hlalos>:eG+NYcQ3085h"j##f'6F#76%b_#i`dB^3S3A_J48lgdk0=5\#Ab`r1Ru1m>Q2rOG9o_g/A\jV0 %oDg8H_-0kW%&8$hSrc>t6m*)&'4YSRdkbs+"te/&oT'eb'Aceb76,]On!0%c2mKV3p1,JQ6:4-/)jE)cJ]>_ecP+T,&,7M<7$mWW %QmRAZj$X"@i##<#+\cXG4[a*l7Q;p2!/t(5Y<Yhf^fM'k17#pFpcfJ.(ruuERJifbJJ<dErR$:Y8Rc1ffX&fQJqTsP%?6+ljjbe. %=B\aX'q0TUT&lt`'=K;!A(iOk"jo2;7TC.XJ\W$=<C,hYN@cK=F'Y\R7TGr$[\U%/+/9-QbCUZ;eVSGf<AXW704N>\0<*#CaS5cF %*E`P(J9;Sr=]VA,X&`2J=;74j;@q#[.N2UO7"lX>$6D8rPT6[b(+_S.2cWK_kG;'7S*9qBkah;.&ToVJ<(A2DYa]tc1H"Kd!W6Ki %gcROlGu;TAZ^8Z]q^akQ:L?TgHoLH6AHouL,Dsm7-ZHCE^Zku1k'Oc`%9DOh%dg!>!4jFia7sFKoUOPk,Bml_<rAG5FqfG+kl;tJ %f<tX4c&B_fZtH`:Ei=^E@hf0eN:8c#RoQbfTdeO!>=HQ^Nd;rN?0R1CPGAZ\C8d]$Hc"8N+qnhO!o^5h9kD?"UT3_U.0p[62)j/M %`CHhS4b-]tSkrQT+pgsKA%CB+-c%TP;,;%"9A-J\%@X`+*!F4f"St]u.k&@uMfrc(01RFnQ^*s=T/u(rnanOI1D:@b,uSIp/k<k: %X(-CuGFl_lT!(]U$m;E@(CnDP9Go[<^d_*O#iZ7/Yf,C.is;n!_B8k&c76YB#93IWKTrrdj0@!Nr)%(H*SblRSIVKO;\jCtd$Ue5 %3pRLh1E&hZXQ(U]F/`1rLlS^MdocZ0Nb6.Z9,0)g$j<`*_S\5l1T:CK:@),T)?=QMCC$PY#rY04BPj[rGFgW2gA/gp1SXM##6lVB %[#d4XFVYt?qM]I0Osi#O)B-k]0]5"c-c%/TOe4dd;6DqQ`Nai/___2L\U"/uW:?SSF^((Pka;,Xp13Rg?&7EZ&']0m?+A:0S3>P. %Ii#5A#!hmP&K:]U?^X(1cG5P-/AngK>7']";s'0I\B0YiA*T-th60jd4DS]C)i%P@01Aj!!PpR&(GT_B+\/C7(mGd0Uo)L_$eR]L %jg9^ic0g5K814Wr*!^=T_,*fOpaH5_[Hrg15`Wnn"?'g#.<#%n)[T7h?&%cYKHPVlS/s]u=.4E;D"W0n7CWsp>M)WB%:Bna@6)O# %`t(-W@c"C^ToC3fd:?7fT.QZL$Qirh10^(/d=jrg@ucQ%Es_F4!Ct_t*HQ2W,Dub1[)J`Xf$?M4?ghAK7Z,n2I%4EK%Lf@HlqQ"_ %m1H*%>gftGZk+W%`5$1,Dd<!d"OeeLUZQ`e11K)HArr#+T/`D0$#RoKU;<t'f`,R1FMrAA%uLDH.2m94]ZBD="7sYO[K((O<`J5e %e<LNVZAP5)TW:I@Pec9o</#U0U_cK"94U3%"$^+$RhnDRB\irg=Be0dg:6aSEGF4*(eQk)Q4L,*#MWji6&K4F@eMZo![hb\C5=r( %_jYFM1V`u2!l(nC,VFj+Q,TPTJTW9D)-_u?-#+nE#A&g`V][U,gDF%O##<1A'!+(`Vj&3<#*)f#'sOHI?-=GbD!<SuKFjhQ;Zl2* %jhOb3nCWr,fLIIG\2C)ig3@.M't!ML5V$O.OYKqa`Zqg.]2/\F0b@h"A]NroTF(PQg7;:mdA]e`MNJ&sUZ=\=a^e61$V+O,:*P## %0Ok?/CbrQ:E(eQgAf[,,25pU3cYE^o_R;e^K5cRDV?_3JYqfCb0Sh6',\)O$V'P\\FWGt;NAm)OFKdEZTA+#DKmiLNpfNg\hGL@n %8i@gD/3kVN-c)T6.2J*AhV2%AYjo^=<[`Y9/4Gg.5n&m)_1UrH^i34R3i,km>JXe/qG&/A'@"6mk=mM@CKpIOW8VKoXo->mkHS_; %@<!"[0GoA1DQ.e+&ejXm>,96jLU&%8&qr?)HaObRiLWJH@HFF<>J'!V,A@ItPWXs;aCQhb)0Q,831+(hJ?MEP.P%AcmHiJ14Yc[@ %X;d.5GYG@#3l8npgp'N<M>^UOQP3;A/!^a)C:]oM:2K$6`l*H#SrMiNmU09hXZKP4Vq0!/felMb([t)mIbYusF`M@EbT!%3q%JFh %=`-62+/##8,kIL+3%kaj&qu/+_1S=0iYT'B4rl+Z*E1B@=berCja1B2:-?IV2hYd<j;_f_c".9bDuH"h^JSSa+je%n$q>K0[m&@< %W6(_"JRX39e1b%1#8T"8<@YNB=?3Sg=9/<d",G<8G,jR#`&*3a=a;tQ`e\%;7oT4e&eD<fQ`Vgo:Hl"GJ+:`rq[tZB]mOR%q#&S' %]LNBS&B"6h3.)&0D?/ks*I)!M:e@b89U#_WEV<ZK=VKp^RK7Uso2,t-AA0hrY&!F:8YNt]Y5[fGC7$eJqr[J1b!`('h*,?SJeMK' %D"Oq-n")E5KKC<oNnhSD'4\U>n#F-e0*OE"Gr$ur%Zk*aK;8VFd<Wr^JBPaJ$JE-k6t4UJe>0k]`BT];Nr['dZcWOjVI*@G/U[dD %7E(]^fd.pf<J6G6q)S%S3<`OR_,ia'haRaA.?;<q7EI#hHA??]CZ^9#GOcR)>dQ'_OdD9I*`rfJ.SpZV-!$uaNK=>gL[m#if1t82 %#,_$u@mZ=`i0EXl#k:,#LULI^:m3-qDRj\QK)f.dV&P_KOc6p<+"VhN))@I$dG6FS.6)Kf(>h2A1sMM5[qB+IQAmC!p-Se1"(^r3 %QJOL\p4p`J"G+p@".PgUOc;8=`j9%sBY=s^k3Pbl!C<Cr`e^Ta#WeJ-3.ip%/^6rr"/g)NqlKTEZfqj$G-T%A)hCGnmJ*uuV6)H\ %fZ)^Z;_hjMDJ402s+&\6AAQDVo%k`8aL411$<eG^$WY+P1QJ/3ZKR\ZR7WM)L1)*=mtF!l9GZ-83/f2BktqcNQq9uoW#A>&3".cd %JkW<9P8&R(5dX'/]dqp:0hW%IDp44Y1F:#W:3<L*Z6nj6K!-jW#pajmA7]k"H5'8L@3K3##1_3-=^Pk)PEAP5SdZUM860P2qH]Ch %!3Qa,&sJT94Fi.-BW9,D0qa4TQ2mQiBgS(i/d19X$t0]V8P_qM)RqM[Q&\47`9mUd.E+7Y!m>GNigi@dKRXT4@PjEG@Uo+Cq)`n: %g\I'j%)+A[V$,9W0Qt7KCFcZcM2:mp+I+(p!C2BoCCA3b7a"(/M^Ak93QaTf4^CAqYXc_rSHD8!P8KL&U+ffW*+MaRGgN#V<!*M" %'cbc>Hg9urgL/BQ?^_O\BP(E&!85m3?lLFKM'\j[.-Js0Q'A$Y>2)k-46dX$bGVX,6_/2j'qq.R\ESqiS5C88`AT6idm$JT]QVmn %CP`ToROEKpF%ToS(n"L/"IYPd/8B@VRtaPC]M']N`A6KW>mt76UcNgu-X-gL2*j@r-3K`(5eD6P)$0P*Sf.Q,*e-JqHR/1E3<<CI %A4=:-K"^.CFM+r#qO+cF+FSN]@:-Yu4+Q$j>I`);!bF&227D?$oM1>>rSR)_i3Q!_!(-em#YCJq$]M1HrVB7t(.4(.OLN'\gT1"k %2`?=SYAMs)VghpA_(lL9(m787-CD,UK&56QS"NhMQF5F(k\V?%cp!AtZ0!JaS(!6']6;-VJ=jsnEs3Wp'!j=o;NDs%<F"@P`9'`O %a"`u<al:+4X*A9920124a!iBU$S+LYCJ37;ZH7=lnH.c3YY27V.m.`oMS[hNi688hgFW?eC]m.bpFF9J#igO!qll`.,:"`3#Li2V %q^RGd5^8E7M1m;I+V5f^@Wqn#1"q*#EmRWe.jUp\[NNG<?c,VUgg%STkR[l>-"o3Ua&p6>UJbo;:A#<P<$o`0a2eXNOGf9?L)?:I %[m8)"LjjKq&2KG(*cK]N]($4"'lVIo&Mt?d;`b#*"]Pl;kLaN3g0MArBQ%!4?k[!3b"2;]GG[VaR07M23qDs&].dA7Z%C)XoI2Zi %a3eqNPu8qRb@m]POA[7p-c*&]!ZUEX[o*oS6-.3o&ZdL(i0.$f:GX7V#HR^m(X^m%ja*RB1Z7-4:0.(D4D_`bU"qtVk&&uC%SUpJ %:s2?Hg8ta,IC,MEZ`+!8i&n_/6bArm;Th2?UYc5?r7KDe3LkE2q&6[s-c7coXdR(J\Cis[Q"?Ee'bnkY&>O]1L*ATOcqm,B$(&Fc %'cTLPEk6SWkt-Z%gtn4p:JO5sME<ngi1e64-Nl?hV;Gf?FU!14U8`P@mC2tskO\urrX4JaTrC1cSN-hl=MsfBk#'/8S&E><Kl(t" %cA59rU=:at<'TU%#^Z@pLX#oQ*ah2;6cJWLZ1--@OMe?jIHgM.:e@b*@4AAU@0]nOgAn!C>JZ:<NS4@_fjOcFqmH/(Op5_"gti(% %#-fA<N?7H\$JD(nb&2+q=/n0c_^Ebdb9`-YiE8J+h:\2"4E;\,s!LUEqnZBuM(>A+M1A.A'hc1A!+_T<f&]nF!c0IY]h^aQar7lP %<0UPf1E3*GM]+i_+XW8+Oh`n>Z8iX/lpdB@4@K32(1Ric6\M!FKgjc6N->GH2.9SjgSW@F2_t*=9PSG1'PMg*g<leWo!g]INfMD! %<@ET,$72oeJhTTJEQCZaoF3(e&4H53E0Y(\p>p*9(-*Y#)Fh%h7Qh$_RSDbkOu`jlftEsI3.iY\'$4,pB/IR;iS]B_Y*3N-XX4ag %*XI7*:Zd#MqrG`_Rte5IR%f/ALA*I3H=TUMd-B3G>bT]MH$WR5XXP3Nn/0C)R_:jpBc<J]=6I@JcN,&O'2u9%q4]#PKSE].V,laZ %]c^7h3EdT3-7.G7J44!n^*-)Y&"5F]@=/iT),0[=(pAU!%9aCsCGbprRP#[Lm+0B*4goSo9/3k#WP]4/!Au\<AY[o-lsk^k7ZWa. %H1D#CpRc8Y<mOH"c\gGIT9U:)?YW,pHTY?DGK1>%ehhW2&Glid8K4.nn,L*HVJ)o<2J'?d,^DZ,$W'_'e]lpcm%L"mY]X\A"m*/7 %J%rF9(`8R-T^QXC7tS%cEdYuUNpO?0Po7lP4LI\?\qJ=//7qj?L^@(@6Lf1A;tKVb"#q%`FtkALI9PKL0`N22#D!_]]HO^fg,1"" %S"OOO<"?C.^^a`(MaHO\O_lJq"ECR:31)IN;[l"?ZM0Rob21&.o+V"DDCH^Hh3V=2\UZ;f_k7U=:d*`GAN)rc7(@-A`hrj'N<&CO %iP$&]S;6:HaPR_-/cY0'::[XY@m)QAiQuZupB*3DjN.>8U<(fl$i]$g@uM8RY)!,tD_oIK-^]3RLPsb73Ac823Jo]JEXLZDBR$0& %d93d]H:Q6e3a_[?n;^V^BM)Bq^SC$L4:eCnLbXefh_\1tbXO/XF\3<=!Y2N%r##ui*Wqr[6"`2"'mib;iu;!UK&7,l!"k(;!LbF] %8meKbJX@&oA/Z1AK)<^sk*erLK"F=-8ZDu6G8e3QEuf\g\bA4$PDsufm\YN<IhB):*hMfK#kl'ipO0i))7-Za.ubYs':goZ6dXr8 %_7RMu1]L20k-G=?i9UEcXNoe-8W@:m^&RNbT='"Dip+d4+"i&Q^>T$?G4sD\'ha#UnuOC=Z^X1d(R'%fs1!VqM+-2$s0g=O"E9A, %IW6FqY`X'I--*dl9VDt`#]YWBi?>;/*95pt;,:`tIY](Ei9!:ZJ!XqK,k/'B%,5llfX,T"7g0qYX,9r2X+u@%k7?kmglZ9i.gH=E %ejWh]'bK2C_6:osdd)Y+(WoR1=qN7,%kQ7"&l99H7p\Z]q.M=G3m'STSmNE=qO&o(BMkEOL;(L5/-L6[2$/Ah+t?pMe'9'fM[8OR %^_gpa'@7MK73->o;8[p'(>EVU)(9R<!bG.X;KG5qZ6Ch_)R+.^-H!k'_Qo:1X.31TH;sgfp]>Q`;HZL=S$B%(A=(*Y.Qj:sA1)cK %g'SFL.@15`LUMr%nH`\]OJnRb*Pe(;S<-35,bP0M.nX@@LP//%//WVA2!KesISah&kA2;rRbDL+ormEE@)j0=eD2`X7GE("]G;@u %Tmbjn%Kk;*)+TcZ&n64u$5Ht&E,HMKT>rrnI`[i'fN<fF@0Lc&R:V`s%u!ltU*8X+V)](.Ta3I\8P]DnJ@S()^o1;q!i5$YS;)mC %-4419W<qT[[42QCZ=Q!gfE3U]=fnW/]KcpBoDGR9#Y@S+6B@<R!Uk6JB!*.->0KZ+,rqSTfYY;^ak!:q%8I\K<P_14Z.RM?&)O>n %ii4#):$ECYH5igQ'(ThR>n>.R<&'cgMT[2I(5,;!F.S5-BR(jp"9RPZb_QMoM&o7KJXZh/np=\"4pN]U/BpO=Ro1J]CmOL1X./!$ %Y=00[5i1T0aG!0+U'>dWAYKJE4SC?\F_%+[O/9p5=YoUQ<\<PqA]blX+c*06!'>8rjS8[^fqZ]ip:<90SiqFHHM[(#n(5#r:q"%X %_#d-6'`B]s8do>79iR(n_SnTIdds^0ckQXVICRrU"Vsok4Bi*8"DmRSJ6J2*kU@W03(!,oIKc5P37f]X()nL!Ab*D+?`K7\UKiDH %SLNLFLM[/6p<l^i4Fk0dM>aZH7%XJ(7"%Lm=mj(^RYc$^dS/"LW0re$(083Dq3l"2!YQMALhDXD4YVD,S:X*1)^)l2,YD`n:F?ZD %"Z6Bb%Q)#%bPkloiMf(*;s]qVAYR&0!h7DD"[I\h+t;Y_7kVmO#Q234s,j#HTR^a:2qD+<O"t=Xa,^\W\N(?'2!SZ*OJZCW?@`b- %b&p.kqltMWiS"l!^]qXH9KM.=GJ,q&f9bBE+_rOr?tfD<M:U5QKr4hnp6CQS#@`Y.Z@"WY6b0m-Q>:Xg#H0:BUao'3EPYZk]L/>o %AW$N]7:Tmj\>&!iLBK"lXQ$NFAqq5,*3<_M4=,!d2uuH=CB/$:iJ@jPPCWA)UhNmQX+DQp6eNS+F2tBS_4<Y)@,6ClDGf$[Y-rFt %0cE('9I(_+-/X2OTH&]:6)6qPc40E3;4]MH=O@_CCOXuX&4a$+"4nuu]JQ"s`q+b9l-UoU(poOQ0#oo_Ef`oi1(?1,>Z4[d/=)3n %k<u+r!1!/ldFD3oiMKV96V*.A-9n$iOM=`SIFVa"8[A\jMWko8Ft>!_dGMi1JB;Ju[p7i0i)N9bMa?;>#8pEb$e&q-_,R:6QC@(` %7RBD<\&omng42(,b(1>M7"]bF/SCa:+Y\F"nJqNFK"0PDkBT@.(h)+*i1\4cOJLN1@X[WFn8HD@_1Lqi\R?C#E%^q!HjtfBG?1l$ %S-KJ^11=kR9-#:=).).1Zg2]"-1jLapr.Q0.gfplKo&=QC*TuPJM;T\cVpl#GQG%k:4a3720r`L0H>M*p:)YDkTML8\dW="-BjRR %asNBAdE"/dML&bWh7Wo-%2UQr)$=1sfSf!((>Xq0KO+j8;UR@K.pfr(N$*QSDnjXg9C>n$aL?pXOLq^hfH6n=L!0l<%R$hc(=8P\ %UrmV1'e%Z&5&aAVK7PsPr]-pcf;ud(7?%'HZlcrk6>pI62us8GO9!B?b2Im:`%j>9hT83o"BC0NMb4(M,.a]s,ZQQ1*uZRXaGQ5G %EL`is.5ilrjknMS6'6_T0(^:mXrJf4WN3gpJfP,lWVJ_(MVcM"qKs)N]K.5>5Cu\RnMXW5*/Qq"K&ROlP?F)^1=6:l]:`s@V/N&m %U=`!DbOQ.fSLE_U&g8<0'8/2rM.nidS-fTod)$Iug&\o&Ft).u'QcP-mH#"tZP1i$dcAT+.ZBCR@]r1\bEhA(%1OWN+C7Ks#K>=W %*ZWHu!&[<]C8]HMS6sfWb@K]cb6YNmjY/$1.All'B&sStdKE"sWGE]fF:_CS;j>*ln<W+I1+4HH49jAGW*3g-0^T'NB/,6ih@2#Q %LNrK4@&KuO.?6$<lqIePeJEV%4Z!^I7%OKJ\iUej4jg7UI8H%n!;7U(kqS=ea;oB#d-$k*FQ5]>3ueFb=1RB$1muE"d7h)\X)\FM %43X,]Glu"p%Q@V0JW\6>mu9)`>1+[eVQ!gd+m.g\Mk$M\1:4?O+a2Z$CbE%6`V+kr(n;*o&KMP.Wcj6H$1F^(Eft.#>n\?V'nVi/ %kmgu5F&YQsN(+TeNNSC,7J#'#L0Q5TL)Pg8(WDmGae2fSM()79G2sLamRl=Vi8:?Z``)"O)?`K@$H(2[o%5(s'j6DRC=<FY^>OR& %F8ZYu:>FT#f1JD4mauVuKs`SmXlV=>RF0(+oWP=Ei%se[GV'*D+P>h.RN.AM.$FqYTbo#nWHgaf$I9kbKBS8cXoO-Jjab-$cC?C$ %GqiiN"JlMiD)U+*cN3-aJs67N!>2]ZU6Gi"=@e88+i^:]Z3OHV[`W4-[9J;&>a[rkK8>%B)fe+(1K42fTg%Hu7'!H'Z\&:GU!4tM %]r21aaU[]*>:*pgW.:-=(L1/"T\5Ee"72:L6gS;J%\\Il11pJI6uC#,G)<!1(`)V112R&V3u1IZ`;V>OJ]VU90kaN`/90>]NMb/G %p/$Vj%q#PV'.Aen/$f#-#,:IMY]o$p>1t-$RsB5@!krA)okJ(367PH6p_5^<,mQseNuB0`U<agV9'7"5U#S3a^b$ue#dd]m#Dk)5 %fSu'1$.q$'h?ilj9N6#UKBjL,bJB)`"lq1ek(NBE.<p<@OZBH"U0485'Wi%f.BKbVg/1Y3j4+@5e>03jG-?TcMP!(Vdh)YVl)QLr %0'eIX\LVGZ0deMeo#X_;J^k'f.ff8$Js8:[cnU&Q5;mm5O)&9#?<JdTJ<4cq!iJ;F&2GAZZ>9NJ8kBA$j=e;t1R5S>,JIZ^>:gj' %TG!E9^fBbR5QmJ;`@&<i_:9Ed#^p[7%A6[C0HHZ"3]c,(Jg5@*+m,_sBZ]g?$hnQHU%8hVOJo/cm,um!8HnN^bBNX0&\*0jQ#4e. %:L7'j;ims_g"bku6@1XJ-$l/`EpUXG7]XN&9MlB8)-qf>Ne=oW%tbGt4:TD'l%52[2=4LZ,U;UqDE,X-=Yap2StdQ6g.GB6kT'j$ %c4o*?CDhP_,&Lg8V]5;]5Smjt,0Ksh0q#`Z/7EMb8#n1;lUT91PGp+[%FUd`juKjQKfjVoGS(&N"L&=J&PWnX8M!L.18pO3,ZK9q %_$plJ`Sc3>B[]4K>V\Y"3Y[d4ICKe4jJndCP.+8Jgrq=HUBh_A8.1%1???_[R+1V:$Fsq)T#f&oP*?)1m,Ej1MIts:/eP.lpl&7; %<?!4bk8^A*UeSp/;FBX"1P\L00O)6RRlF:Y'B#9sia>;2'UtPk$-[/<AI2r0S/=#e^u816=Lq$-:Pr5-ZOOYQa>ouYJAdS/<sI]% %T[6Y<")5s7[TlFmGm!^e6,RE2'S-rbg;^k0oqC8#(LLA7:RlTud-"g%+d.IOADC:&n`IZU'f=CW6o`4t_HANk(3n.O+fF,tp'Vuf %5"']3iC!a-r\W!I3*)o?*(k/uZC0(4XbSqcEj\/^&9iU\X9t`=/[416:7l?*Kee5U4kc>Mg/aNdZ@V#mnPeX'3p-%_,=;n%KoU9S %KM2NUW9OXoH+DM!Etk`6$BV%b58S0.Ohu<u82RnWU'[5.O!1`^O.*DYr4##H_Bp!E.FhrN-C5,;Y=kDtre?Ucec>'eOo8OKM8)W+ %(>uP#k;k2(-/^ijneYoh'qO`=/upD0/gLa)M??5aQ&d8)14&hR:akUM$*XDeFSlj<Q\oYn5`&/m+>Cbj$gVP5n&$aC!'ma?p>q-c %lO^TE0Wb<rd5d:AYE[9IpBX_tI(n':M.t4RbJoj1C9dWGqf/&j:-HK7<-\'ZVjXT5<N6ssapsoJkAc"i>^,dqHBMfY4![J(@i(ki %*)*o`A3gde;0FMQG3V01<fh"h!1U39P/8?G%DM1>=pr#!4EJa?@ocBG-;uX!^fNipQg((NAoS0b!AtmdIEW-ciW]7Ilnm"LHO!mh %R"u)G:,O'q*(e3;+]OKZ.b7F/(a20Z`FKs=Jm*3RU'F)XYN/.ceH)tEJUj`)=3'S^g?68qmO8Hm+XMa,F/e+(7pJ,i(:KBEj%/0a %!3FQ$9+#Hp(P9%*+9UE(/Se&L!_r)8c<4I2(.qlllA"[.,9A7;Z^+8j>"Ph-flkTG(7D[hI%4L"SsLKU//ZLL5u(ji<OJ)9H+N"b %\C!A]?OqfWJjbG]@Q2D!N[YJ]eDlojGsmmN0);.Dr(Pd]@7LHc!^.DBXPHG\/2/@(A]S&sIX]Bb!AfkoPD0'-Vb^WJ[UFB#oI5R[ %QIp&9-&W2=O55ZNC5S/f!b2MMB?rr2K\d=Q<gG3ZWl^RQr$qt-4#+K1B'1H:\t]GG<?O4JqHke##fO5b&OoO$!8R.clk<iP)lR+u %^D.V"Jop"/*$=)Fn<lEJB`>).S[%)1&5C50&.MbX?e9%*I<"9n>SoS7E!ELT*)[#T';[%DN6]7>B-c:.plku#>g>LTHW,_%Y6<*. %BA$N:+8WX>M^JcHddbCq_ns^A=3SmRZ\CI9E8Y]lJ'UR"<(Z'lT"E428f5Z4m(AO#ID/"92^1Pp-Z4!=(kR06PTk4KU;>1Z/Ud[g %-YCS5!WJ[mnA1"taK`Q%$unR0?ucg^IdFC"Z$09*:84?U8q4tWFGb:ZjK]D%@r`.\TLGbA?2b9n:uEn`KaK9O=XQeKeIf*L-RMj1 %-$RMs<@/_B1PV%7l6K6,Jldu,>(bC]HD?/CZ:PK&CS:r$,2*:Z.\78\<Pk!2P_@TsjG8J0Ya>od6]iRfDt..3;^a(]4b>=aX!)<^ %LYORGNB3/L`>%nr+hcpMrnIuo/W(gnboIGNKV6;MnOPXP&=F()Q,u>3\pE%:&4MUE!Y"WC^T\qWOh_B!ZO4FL86>qKM2o?C0C"oJ %%%u+KQ@BG^E^]lDR`6JE/!elZ_0Xbn@'$(A(f!59\Dc"P_9GOJ,sXBP('4aC,nM.`l]=/A,+VCDgco$O!(gBURl+<\&Db4MeF0ro %8>/L8\"P#Y&lmuR'<6t9`!K%?k,6?1#tKa_I8//sLLQe=KKp=]3HUbR3.T(N2<\FQ+4OgIlOs%7bfd3d_u/dU!bsh0etUV*\V`'9 %KNA9cJ<=;ZZ\ap_`3LQY4TdOFCT2KYs-_)'.0)1EVc>04aoMR\$pZPY$n1Y8!^MG,c(uh`-_Z16$"X_u/b&Re[h%F<1a<DlF,3p. %1+^7hOGl0"/\QL^HH7-*l.sFc'$uUHGn/mA`u8I9QM9/GN;:Ke!<QRA0]J,t,Z.s23b74o6jkF(1"SLLeeID2.LRcF$)$\oUEcIX %!-PQRio'M]/n"jRHZH4*<$p*Q9E^#HJ7kHpBQ)Oeej7II:[L`shEG&b'slp;Xs]^"JC<Y/!cSaC\qbqQ_+Rem*;&%EQ/2MeX5O$l %cTX5!h0P[V9QpKm?o1Y8N;!mZMi4"4N@^_:.s:q5.3>k@qTPFLbV&TVp?dh1O\(,lAY'L)LDX!#.4iPmq)M!I%kN1b(.!B.>^^!c %jKbcp2^7f%&0aq>!dLdm:fsIE$l2a6MY".5_4IfL$[6GoG=W=%QRP1<<CE]-RUY&,]VSImk.2Zp1T2&%^^/\jblm:-(>uPiU#Ycj %81EnNWDu_D\5a6F?m7Eklien29MjZAOYVl9fp)<?R^%0XpI/RV#^s+aWF=cqp]c7I.YOG*-IN0]kS-7VaTuk.]gWJ[JD^`N\$D5X %&A(ck`0D#--^lV4/-oNdQ3JN(blL<BHdJ$0b*!u;E@;A-[h[6m\8XER"gAoM%X5u6]qUoY#"g(R2TDnMNMm&/,q<\b4u<ni"CWd= %UAT%o+5CM)+[^3,pr[=8Gg>.MH.Whi^VQ1(#YAFB!Qa^'I-`APc[I#9"J[_TfYKnj(95o8SR]B/Y`9.8Pf*M%^WU8$VNBQM??jl& %gqh'>!Wh-ddY+]?&J;Vd8Yh0-5V'CUPSYI8n!("#RPmZd/$[M/V@U>OA$m!k-ial-clpm=S:EG`i&X[sn;).Yrk_c(/F*`ua<5\F %kX7)gm_De4Uq\0-*7X-oeOgI(\2%H!eDT[BG,-*>N&--gD6REq'ak%RK`1WF)>&I]AE^c/!l;>-Z6NP-rP[-`j;gXHM;qY]YcIMh %cY$s`4$6DNlc3l*P4,+b0rC.BIPc&`'#m]RP[4TTFk*'CDWn*el2ImE1sc;/SmWE">,Wrh%E.qTkF2ii_.2+:@-20h^m%X38cXF/ %FE`<P38QO.%&OoMT,GPWg=G<1\!6s]g51LtCi,Mdb7U8YY#%9c[UFOq1^&fghfDpr^hUeg3k7Zle-,[#6pZ!W^ND2!L'/_9(aFPm %#.\"@S",VdQua0uUR*MYM7peKfM`gtLBMuJ#:(HH,]O^B=CHUpD*eXF]E'4GX^^%;QnBNb%irXqh9:HuO-u+pPiYq;Xp%"!!D+lb %%T7qr`VoCm>ALkfhZ`6`a[m,*SEgK:Pi+EW7h'hH`!$=j608MA(@S%KmoC!sn'u<h&$&fiJp[b.']^)DBGF\"1$LNITRb[IjrgPE %d!TO1_A-ZD<2BC4'(%\GC9k"(gXU4j`cX3Flc<V@`d&kHCmb!M>X&6,<$X"*ZdFa$hXG<b>\?ESk1*7UY)sX$:&_\boODB[KT#/c %o/?p3T:OhFh].#jEr*r[rFs3;n/jo`TIXS?a;C'LH#LBi?bd/'KNf#fZl-&G!fJ5X.DSLk%='cD!(@<$[lie]Ks!$9^'kq8E'4>^ %ToD8;)`h:H]HP&0knB6.8QA`+@;Q)iH'U_:Y,RWg`e)(O<,NgJM?O](^)Rb4(Uu$]&0sXtS]=QUAeTj_4/<&N&:BU;a[kW`N7]Hg %<o&O_^-"eiK0NE)_Cbr[cYGnp.X1u)!%qR=J^5GuM7CE1dW4LVF;1=P3^F<jmpica5VOXU[m>g^64tJ#*JNQF+=RpkdIWl2#?$DP %7gQk@F1o:rX==KQKom0Z'8q,)!.YXU:m-$1cs[N`[e3)T5Zl[DQn^&V4q1bO#pBSUH=]_!PK@g(LM!:'@p[(jU6]X7!G;*m6,P]L %i53HrS48l0?#`c8#Zrnd8:i=G3TcMlhgZ5(/i(q/MTA^Gj((+W%=T:m%MVm(&j1r&a:85;)L<+GjWB22F"%*J`IY+L$RR&G,5*u8 %#Y4u_1<;_eJ716I1<3$@1s%GMfKamo6Xe,FO`PIH24cfg#_kicn)YB1'[8'o.LdpA"4pVCGF7tV^go3^M3uOd5Y6bTFp:476K4@f %O['cQD?]UK_%@HWV`Hh5nH0%Q"0l,9i0[([[M$K*P!Mbg72:F'!RjE'aL9_goIa6VEAS4Y&!KFUp/]#W?RAK-3@TCoQl,AO2i+8= %56+(\+g(oVMR)/J_*OgCQ%2AS9n!d10[#(Del9+KN9I["==K'I39=(<7sluNlsijep>S"s:(V^P!,:DP5]jS)4Ei&Y*;C=J`F%ZY %;M6$@_a9jp.-/Q-XpMDa6X:91$NNor^;IJs.!V7YRu$VgI2+.CKb0j89*MRq9#.+VHQtirWY"ZK,h/O=+DNkLNA*D5cI%0K(m%W, %G0MH@OF+utDp;g\KRi9="Bl$,=:8B)'MT6r>icOB"hPG^(&9ee'+KWi@Vp8LV#uL:dkil!SdP3GN690)@O1pTY[!TmQIC,@0T[u- %J.+HC*!t"A.e+StMFnm&.K][)`aO((nsmTt(<ln;#+iNh))_')@Q#B;>YC:t7'Rd8bfW!_>NWJIS0aOA(5.k&%eG80,Z(k.W3YNd %bq@E/?p#S(X2<hM$b#1%!;nXJ0G;3`1mT=@Bcg"]bu']AhXR[A'($=Y9FY@G0J$B^LAcL26TD+!K1K'"ODg06&!m?>^;(.B;F9(n %?q]%<`'u+O2A"UP1Is9W.6bI>ABt6UhcB9_4,[hW:8#\J.[lZjnJ4&2bgL^Xkj*8JiDu8#cPDh$@ViOT3e=AX&X)OF$:`nB!E=[X %Z!f..hV>DL1Cb,n4Gq'063nTf=9/[@UpCiUs$(jKhUoc/]T<*LJDZ!b#mg`Nk3=t:Jh:I6Qp<Vu/gAI?'P,=Jm-O<=j87P[rR=cr %1F('JM6hc72nN3@p%7nK;-i?`XHWgm0Hq(7n6%cXab?$m`\YSa_rl*cM+^IcXqY'&$@a[2"p[!26kUQ!K%LEX*18s1=qQUL<TC-m %VNgSub+g3n`M-!L5mW0<#<Bj,JYGQ(bUV/D7#2":KtRa_Lq\%/.8^d-)3\ktdP;bjT"mf'RKE,CMMF_;K//E=7?[5*A/HGd.fTgY %5e]KbV%$UR'1<ffN+WAMVef2V36kjl,^Rc&#j'oE99O>na9@DDQ1@8O0Hu-E')Rb/QQeo[pXO"(DDn3:OWd+eS,tFonS8aJeDE%1 %#lqLcoM(La"`[,]b2i1e(9aVZ0>uPo)T3q``I40\1.E&5.UUaH*"oq;XqN2p:$b-l]p11+0p7nZ/s4m#i'SeH&i'Ke_Y;(RS!*6d %"=O[X0bHjR/V(p].=?dG.*2saRi1Eu?u!-"]sNCu5k_a[*i(fQc3db!ir]\qg!aZ8cpdMQN;,pM,>X;#$'B[Y]Uo2(;T(LIA5Qo` %9k6XE[WJ!(HY*j^Z)<GX!/a@IBc7^?7'V?#()Z-KN`FZM">IG\c:!nRE!s=].%F\c5g?+#gY?DV*s"lP&VhU,EL'02eeRU?#uC\# %_Z#OIBL2/FC3#D.,]3XPYfF."S@I:T%&9WX9<Bq1.nV2Y3/_Ol[Tlk/bS%)nY2b37:Eb(:Os=PI=SP2qJJ&$E:__33Q@i0Fn#t6Y %#Eb#"Nq?I#K#`m:LEa,:8=6ah,@hjpfIbl^!)J`&%kBf0Q)8[8A[Qb9B_X)os/F;9ph=8I!Vb\,^!=fKZ3);jf8uqUa5ZYadZC\: %ao$]+.u"TPQe41RW)RQIW)/YsKO>+-rdr:W*`+_-'1<nW`!XSJ.,p6uK=4ruU(uQcdBEh+9MAP['G<,Cc7onU/pOLebcQTETT(9A %pc^8cjT'%4Obcei#`9=*^9>qPGqR)^6ni?)CIE\=c@/M_7a1:cMX5K.5BK[%M&3m(<gF1^OLQ"ODQ2d%4*@4UX3q!A%+L,3XH6$@ %nYoM`33]djS[_"_j=Z7BX)WAo7R-u>+h$l<!G`@;-'`hOZB.JL.f9(TT6BT[;uCkOOj#FGWY.XOMi^:@F@$oH"g6Dm<*Jkr7&R:T %+?FBK%HYrFM$tVu<NW4F:dIu6dp$k"b6YL,j@$$u+E1GWc/DmRnN5YWalAYN7qU+#.N(flAaCpA\jK4PB.jaFRm<,L@8jm(lrF(u %<qf<D^$_9ccBWDn!XO&c4?kjde8;7O=f!*;34s[QZ=UA#YkCt2[uu;Rqo^IkjJ-,Q=83CF/0aod,RVX.1))GobFpNiFqSibPga>; %>7@c2nj!2SU+s2u7('a&J[lS"`S:a3:?G0a$`T!"$Rgat'K?/.@3(0gMo7)(848HF(376$JH>8A^bSkK)jQjb`EX,1(W9!#'scf5 %+P9on2iL:4^K@clQ'S)QN1#E&6SeniHPG5prh@\/P[*A.[4MET;Ac*4C(Y?'/p0a91oW2@3/kDT"N3]>FWkbrQ*L_SCKDW:7+T=4 %0E?X%C4fmqZJ2I7@Zag`/f]9"YB.<(mMH!X8j[)5)W$<i.(BkSZ*o7qWfRn3Q\XNbQIaTjlZpQO``Y2Z7TX?\D60E3;a<8S2e*iS %*-6tOe*Q&9FrU9gY$(1kSWY_J\Po5109I[NET['9?UU9%)Jdf$ZUOFQJWWjPjN9&Ccg/\5h_,0H)8;3-`5n@SV'Q*odI?t2R/-qK %T_;lBC0;/m,#ZsC$"QK$Y`,P"@o*sgj[>G/K4G4KPJicCe-N/aP@FX4*!h4W+s7oeJp.Ts1GG1_69#saWM[ZL>4#Q!&0#G7U%.uY %i5_<5eq/on##`-h'D6Sp8QgTW.\^N!-X<D?bRU?[DdLSTX(<D&'HKOp23s(-86\u`;_p3s$k5=(^Gs`k-=C5ai?a^r>[^$W!U_S. %eOP`SBoNdS=-=k?:c&V[?XYF.Y#1s+b*@K+R1pEun\da/&M0q"ZOe8nObK&oCnZ$)H`^7fQ)bs+OinEB&nWL&9+(ODX6h$T=\;*k %G##HDVOGQBmrHo[JX;W0_ZoTsPj9<dE+*gmE["FYQ->eN4B,Hm7'3\bCYiW0os;">0`W*UAZAH<="$cg:K?I("X,NP(rJ5<#t.AP %+jDMgqRALjPfP[gCnW8VJpKu"*QbHn7;XGI.:FEN4@A?m/jdhGR(J.eDd'CQP87"N4(mnJ]S6GKVDgk_JLgE?8cKJcBhjm27a?N6 %E3`([4bbpn*)&j5+4C*T%]K6p$4.rZ.m=:3LlaE8<=2T@iZb0JK>qpU77ghkT81M-m!gVZbI/]MD8_9He;>5;!tRpid:-pIH=:+; %D$=\ojf5,?R&=bg'9LS.UZX*AaYCJ._HgHKgWb6uF"*CpP:2H(A']E9.9QZ#8G)XU@=(od7:Qum_/V;uTD>7`'S.o1,J+:F=&:.K %6[-Wa`6O36#rTij$.<L`&.5Dr+9Q+3bHu,`OJYe$b]RO:Mqlq]9sY6o0"GIsBp+AcF1X9B*j#E-=hsuTJ908WC??QW,+J\Os56>9 %-sTA9M[nY5)TXID;HOE3b.M-`n;'e]:_ntO+Cr7j65je3!Y+WaS8+@CX+Z(ORO`7iT$L%CV[uos6il(^Nk2!P9rfI=rXpa8BHj]: %M<uM1JjW3`CQ.@tjYIJ><-Jq:@bCbq.^:crQ3<qtkq>Dq;p7Uq<$nJP_^L`i*)TZl6-S^=+=4+.g4:(HQ\k=3;M'?M75(*eYVMC2 %hR>H`C0F.\=/[k+BJQ1*,c&AVWRZPK18<O-"&1;1ZWq2C)28l;$@\`>]r@81P6@M>l2h%hH"TuXOZ^QUVm53nBE`]a5SHSq'b<T; %6]'ifTXS&(3WuO],G7^C_IjP5MWC,X4\[UqVTNAR$kuQ-<\CJjPbZi(V$ST6eCRf94gK*(V\[H,=FH,jMZOrBams^:qa"&3A[rA[ %#/$sX+[eEO0h;G^Pr-hF$_pl".r8278jn%7Y^p!U%K&k#0F8JD^o/1Ala4og)J^3<R#m_dKNqd4Q(X+:O`i2i,[5kp9XOt$$S_aH %9d;VtR58;'An6J_@Xe20@2`:!*AXNJ!q@$=8.=^dR`LYZ@8*1YG)R\P<;K#e_T5ju8ldsQWL&;K>a9*PX4$p+0oTcs"q-?->%=Y# %Rb/UWYbVMb5rp/F4)lEX03!7N&Q!QQKM7XLJW,tPe:luXe;tK?qQX^6'i#n\Fql_[lBiNXlXFIL<_WGP)?@;t<O1TK,E!ckZ>W,U %j0E9G&A]N!1j!)-=]CX>2RY/kdSac*JJs,&OYmj7<O(NRJnnqo#(r>)&=,ckV#9#4l<5[:Hl7c4..&-88#IfP@d$an`M=YF)eLrh %cXT\qPsA2i^nbNZCo'[ULie[]n1RNgP9`f'&k8rWPe9]t"m$KC77GO_BrR=FM5#e7YqWAKkj9:I"P(Ta9$(\e6]cGZ<$\?O1LaDU %<K?jhh'Hj+CIDj;kr2/u:,<&$[%q2BQ&?plGTDqrD\oFg`"XBCdYB*u4O^`mk59iK'/NL>]rlNTVM$I['u$58MG.df=&_hCUHD:T %n-=gS68g44MK&r$74(mWkgTd[75(naOE>)sbIF-bVs3c,gRHAF<jjcOAb!dYH^2Jf$>H@URZWG>JGTMt,"-u6"6r0Y=[b;8A_Uc# %k@@m;<HDPe0ufUo$`Ed]Z0'CuE0&GYVOA0T+/9/dQ-L!^JFotZ7>4rS4&d@];e?'7Ki51T%DWI@A)n(QVJGO^Qgn5W%=QfQ!+i>+ %f-KK9Nm)Y4F["Q`MI7ga90!6G)^)ip]LTO8$V`<,['hGrcg&\/]i92e)&lbAe4O.)<lF!qb=#Hm#`N$nWEOCEk!u9@oLmc1Tm"R[ %Om$B-Qpcl19I94*M39F.%V#+/$:_%H@3?XHf.UM?%hY6d`jogg)*8C6WZq)&Acn:K8Cq3r5br[s?Kb.,<FA*i-@)/,Q28s.;iG5k %c0//BV)`6-TQ&=WOiN7oOW/mi&lf]0DQpSA0nUf89\(:rZ+LE(U"p\<3tJ"&7l)D8/M1H8S"b`)&+K1g)p#<b;oCb_MT]CmmZ7qu %&\KW.YQ-Xt$"Aja*?/lQN=KW:X;/5KXPOMh(U^G*Tmf6IDM6c08M>'!KO!j_7@VYU0O5D_4E&RHDhB88Z&FYkBF\7HfJM[KV0.YG %gl>!i.oAt(+Qq=p60`FoEGMG!eE9CY$`R2mF_oFW.5A6b!kU(gPcIF)k;(GZq+Z_A_F-Z^Ee;k9P0ec_at1(?!@7>=,J2kN,;9G, %DD`=VG#8ip[;JoMiuEoj.[N[?d`J#Q&m9IlA9d3^;Okj685E.-rj9t+K/=W"?V@dj!HR*CU/o+%&`k1\-/f'F/[!q9Ld):sLW#ku %?r90RLfrBQN9NnbV'7)^Br2!hi$e.A[5C+Q@LNl8Af&1CSMF5;'Hp>YPApT4<Q2m`BH[@)*am<h8)9J)eIZMFV-+\)p5Z+C1I]f[ %0SuqNo,/uGEammU/@/T79VM&(fM%&G>h+L6qK&Jq!Oo'C.ZbYD>26qh:*Mi`[5.nkG)A0`WJtVm^^;lB<.IWk)j5"#Ma3dH<d.]T %Gbi,"V+m5mTiY%u9=kjUDQK*]V:L<F1DgoUAITBb%6H8g'aIMk!<iG&K22P1<HB`(':'nI5pia&aXkU8!oaoFe^KCps5kgIB*N+M %4/JaM_;JfpP[i5Q@b$^IXHaEc04$__8)aE0M^,4#HEEJ=KFqc(#I#Cc)?R=S&/!o%S3:f"8fE).V#\lJS:P=Q=VZO\bM87o1QAgG %R2A82(P\dj9A65!l6/KX8g#6VHI\@<Q-<.N$a2Cn+A1-$->Ce@P<sS,,iTUI*!E*4]_.TcBdt`YSH-;o2CZ+7a\qhqFWJ[9_A%'n %8el-G.NIJPE6PN!RP6$;Jg<aBS%;"g#8/Z>^Fb0?On(7D.Y&fWMtID(Kki`02.dtp,3bP%>#EP/:@h@NZqCk?PP=5ek94oM'KucG %,-<dMTUh?K"15.A&6T8l;kQqP+E<k!YNmaHdSa,j*$rNK0k+l(_PQe*9^<%Kkf'TsUEp,Dmf?dPW)0Dq;-JY^PZM<T+NR`+*^llN %8_"*kUb+nZ\VQT@Z#;ci=DI$9bF%],QCZ!gk"D+'gD$*:Lsc^K^!S?^Yb,W.7fO.PTX#/C`>,b>.Kb<Z>c$mbS/!cA5XWQq[fSRQ %8Sb;d&d:fq,P%*I,-o(E)0.6"rg^"pED3+X@tZ^-4kF_VaT,^-NiWF(o#,S]5ljVR9tUVh@Z%Ie2DP<.M@GgQ-5&t3#@kncO`pt< %:]qG'[c"hI[dB;^*JqA!1E\*dV/\DqXQR\rAOn?S6rWdkeOd:W*?YEp!s:KA2!c>`%+e0^8Mp_uf1;kL\Q7_$&gDT/X=5'O,ZL$0 %"j^%E5RL4ObM\7#%^pbcKZ.PXr+K"Oka!J-*D@<YbSFMWE,O#:r;d4D\6A]UALF`NqKl*(F=YN8dOuUTV$$dV`!*=L"Enh+S1p=Z %[]91O7Ppu_[UQ8g!kKZc"'8)4P!Dot'gmeZE[,,VZOSDanThb_AFUY2c%T0k$p$FP\lr`P"2mUnQOlG3"h%oO"tiD.WCiB(4UK/n %6u<QH$.5m)'%jVTe$QCjU;Yd&8OT;r6a%-K/JiS:f$Cg\FZ;G*H[RfUN%.HES*2&uNs;mG5^c^<W3kJC]^M\39JBG%gC'U0Wf^Md %-?O?[;nT)?^PB5);`RbPc"$?Y;ER-&YZ"_@9sKii4X]>W'HWV%;TWJb\-[AW&63lb@TFm3<]?5(7J[]RUlS4p96c)NMu5gN)DSI( %>c7;?JhJU.1s)&6l[C4Cb<X@Sb(1\8.T(7(UkjH%`5:kK;Ud&cMa3h-,E$>n>u3NsU4f0I0b=5k#Bj8m/]!\\<^HSF(^kLDPhGYr %N3?cX$R.J4)*AKiNb@f6Ua>(%bPnc1/#Z2t'*2e,&7SQ")Vcqr^Uqu>,J0o(kYB&cV&;&l=D(-uL/SCR7<EsDVA;"\&N`?XSRRRf %J3#'S=[85KGZc`8.8D8MN6<ei^_(6XW1$P8\8\]$P/skA&>f;f&1^Bm5XB(oN^4GYehU13ZD:lcJbo>,$r]^V$@G<3n:)\ZK@/=? %n6D86K9[b[aiq4b!%)<Ie\e-e+*3Y`=[S]J@q&>?`Ckp$+Y7H!<#Hq5],(&h:fn!dO.oaK=,4#E`n!HtV:OEf.&\QD>t_h<ba"tj %E>'IL^5+Yh?So`7(5O0u!JkEeoL%,R7K_\Y<FT*68Ko3]jAmU!S\#mYOlg3Yj?'8>-^\#uGMEQ`JSHa&+R3[\F2][`M>U)uX,J^, %@ic6\;.P$K,lF;DN5/Uj.:JeUP(r8H,r*CFWHTL,)+h/3Woke9=VQs;3scM$4b1*[N#WE%k2s2;Od#tuFTql$=&Pk\9^=5d0/gh= %4H^XUXt3_YrC1O?`64$)M,K,sfol"YCK"u5+83l_-)?GjPTWVaju*3B6p!u3%9,C@]X$f);GNJp6r=_sYUhZ>9oMcoJQQ?JYbhTr %N+eV^657EA1Q)6&,Z^",?cH2HA6UH1?mX4s0c+*c*kV9VR3_<QCnQH5KrfWr:lAmb1;[/aqa<I'YsZm/8-!*SU'(]=<3/`K?nSk& %)7$%NnM\:)<E[6@YhkRCpRKe&K[HFd^Ans&";O[).:Rf0QIV6i+q9Bt9;hChGfcLidE[>q=XZY&V;k_,6M&(C/]Y.j'X9<R6:5M] %LF"5rR;sV!A@`&:JupDT&C3B+bW9=XQ/tN&C@>e%Co$o%Ppe6tpp;PEbDr>f/!1COde:=T]s-8t70F0^?*<h4TS'ml(3h;ck:<RB %@:4C020kM2-&Ea>E)2X%Q(DPYj3!$p6"Rp$mHQi5<_TJe6h7B*S*-caT)$=oW_0O^,S/Gb)3lP\\Bm8N8sA$ekY>$JG0u:sHFJ<- %.-F1@V-bO]mGT5<":_8jO>8\&k*Ah[9bWN*Ni2F#!rjQFK3>#;9aV;4BGu84@P<ir*-8=Q/f/;\KOm0[4X)M*$k(XsXq&XYK4`DB %qDc3>B]u*lrp53^3^lWM18V5%@UpYh,G:6#8IK0K*8gn&rcX%eaADN#/^Y',i&W9._1Dqh2L4pMOg(iPgH$k_MB#5D+DB?-.$TQB %6,8+&dq]A\IATlpBZdX(R=kbn2F8h:.M6i(U@1]2Da'B/7'cs!,$62R_5Zde)6IM)>*A_C;SHGsd+$u&0a`3'F`X6(dtWL"3Xs)` %QE"V3H"<i`!\d*^Ous6M"Ca"CCKq;V+_9<3T_`?G@MF\B8A2.(2F<6,#fJQ-XHcgNd8Jpl-AV+P'/tSP!i-U\Y+G8j\]"q6fLN;Z %8k?BO(J:eCKdi*g8cp9\o2Ng9iJY<5E9TZqn8"ENjLW@2b5-7'@'%m'rG#dCj8(:n!5.cSqGPh.i>g[iS6_Smb((rj(gaR=U+2Xd %U#?V[b]9+c_D2*93&/5>Ntjr<V[&j(JC*uB6#K+H;92%u7mN"A6a0Bo[L`b>R5G<Z!/cALOL^IF%3k`d=j@]&%^[uEUA@6n?/VL* %`J:Rk)+1A$-o#YEgW:YQ;!W$6Ms2,l'9S%:V$%GDRK<sG&?'.MSQ:%$C93AK\i;9i]hF3';CMa@FcZs+1-`Qpo]`3TKYM$ub(ppZ %$LT;CN6a>\-8*9XKnLWZJuVl8N'a,5g<JS/cXOk?'Itj8kpc"O1l0WCL<EmsD2bBCBHjba@piiP)j6CYUABL>O<dKb_Fnm3W(53D %X&rV$JVp"qJn95C<m1jd_h#cB-NQH;`l0(VPMh0L58QH,inSKfVNpaEk>u415*/cmL^K&_8JPp-Nf'!@!/S*h"$M<B.%"t,i-)@t %^ok[o"SXZ7#]S9!g-m?fL'dZcAVJ@edm_0gnpSDdY7se?O6`K0C_s.aiC,I%h4R!o<3&Q%!!CCC_2c`JBk^Od<>E_G.0U;U6qfRb %-o98MP:Q".jbXZH;KD'].LXnYO]?1L%8fJ7j",_F-Y*5LG[q#5"uT3h>?OX+M-3su1c7S9"hD6!^V46&8g%-`85g/I])pG]$;Vj0 %;EBOU]-hap<Kb:$EPcJ:__E6B[]2Slgrd-0h,qa`K)Q^TQ4TUAXTc4).*(t37Ps"EFT`=BV5#@6(UuQ0=K].paKhgJc%qD1i%Uis %!QZ.5"ph:A704<]c(aMjA:m3VfG,ko(ie1u7:[6u>!,EWU1Y\FEd&2s23#g?>=ns4U9Pk]^m^6><0bG`SUn'n][S4o?Xk.Q>OiiF %r$=.&Lur!h.6LhLHLgSa1P*RNgaeYpX"<%5?B;Fs.8=4R&rF3%oAJMlq?IctQNZ^uBlp_8848;[D4'Q4($DXQ!-]1N4DmW?6e,g3 %>$M6lC0[F"'hl'i491?b6R6'8H/j"X@BiGbYW!<:4:4O@&Jq9$jC<e-KI`lK'`,LB@rJX3PX3DGIA+)Y^T/'O3eT#M<fmS(,9!tR %BRhTpaKrH1]<FA[UV]>QPK5H-c%lhpT>KtBZl$$"N0.[fX3j0<@V.0G5\E0\7=j1O\O9',RpC`;2Tb.mYC.XOL5@4p7M>5#Ma`/j %;h^B1bU#p2W$"-:$6^7-W?HkY@0hM.fL\mqAZ"ZIX%J?`P[q46Apf?]dY?F!M]$5^KS0X(eIUT7/W61K\:[br"uT6,;!S\IY!q+[ %A!S,X-rhL!MB]Al<>>kFDk'81Z*pGrBG;5X-Ws/E1>@E@dh!maJl#IG!okgu7+*[3GA]MrV[\X_,0=@rT][J:j+V?:>QQ)^Fj6,K %8Gl$]B"g[K[YBIdd)=S+;6Gh=l=?4iFI,AEaD`O?`\)hkS"D\u3(?2(fB>X;.$)IBP(7NYF^><72eoZcW"p%!5"ojkAMLu4C#En5 %NUDLRZ>0$);cBS^H9*qui/paAj*7`dpf14EE`pP3Aeq6h-+.F&(2k^3-T0OZ9]uXW!shUDV$eP!XFt.XiFat-_?hq+66.6#A?u[1 %+TWg`k_it#!FebWK-[LX]E24Ic6[5:9hS,SpA-,ll-_jq1@GF!AkC0_ML`lPF"=%9-&Hmuq<h^k02qNN+LFlVRS"<(B[q=4I?6\5 %oP?kQBZ7rD:kQ-`+Lk>1)0fo8dmUB-VI69A.FJb5eeDgdO+`VD'Nn=/"3S%ebf(,$%3Uu=RC".!RYfp\Q`lpjng's//.Kg[##5IQ %$h5UCH*&q?UDa[Y#ooe!.#-J!&NutJ-kc$e%^<pX`5ndK4?4pl<MfuYRH`6;EN@QILE":neC4RJ(!Z"=O#?V;k.XsGbbScA#[e7/ %ek0G`Qs;*VoeNsOMODB_>*S?7C0:lZ&;ndfl`,07O9GR2Lln+iUWOmB?9*N9?6"Z&B8AHRXT;+&#SbQ7'?(;O>q;AM?RWq&`(i+3 %('S(p"MjSoM.2<d^<6@$"W#'+]8W#U'FDbBOob=nVX:4TMS(^Q5^@;U<s<k:Xg"ar8s3a-jHY>/L^7MKr40AP),JEe&[;ro`r@o: %&k+-M"qMqF2P,$K.`:hsAYl[hEhoa@,K_7U5s[b!X*5\.3$bBE#W3`2A1S?lNCJ!uV-p3md;+Q5b=u9/I(<LW$uP_@f[@_Wj_0Yb %,\^?=XphRba?<33L=qMGGnR-=`YNoVd!M8HKMX"c6C='JeIci&%LPeYBs/.hB@SpS=)(F.`p(>]XF[fWJB?(OTU//#`0heuWD]`p %m-?d=g`1-Q[9(6ebX`04,\1&&50edUW'r6Lnl&F8//XQB9]sA=Q(pAfdqR3N3U9Mtg"$b)SRhCT35)sre6E;/6E!Bs[Hr-'JRfN\ %D5"DZ5q+3<Va9AIQAC8[BB0*[!31h'%?m_WQ5(=S+T]qi?*Q0m!`+X'7u`t]"r8YjIu8Q*V/k]riPSU\kYa8kEHdik-*R@Yh$Y#J %'c/hSZcEc6r-$S5P,h&4#aZ3Ig*0YZV"SDt$R<'G9g31b['D.8+Q0-D14?-n,IE_u-@mnK#3a(lCUqTcWL1$PNoE#s5s]gC6p4[G %,_j`u_HN]q1f32o=9pboRh3$:KV\oPMMYW.CO$o"88MuD9Tg)'";3AE0pAgo/'IafFI3)C<p]Z_'lY\/MWm+kIORP&=61??#dZjk %Q/!W<5d2(.Kf)m.`&&`u5lXPP'p'DFZ"l`CXWK&<6g6>1+.J)4$oKK5RR`ZVl%o4DWV,tQRZ%@i7r0;K1fLD3YUFa4;6Ze*8Ou<S %C.4o3)A(%HdcA4mUR$cX9pcPaDM^i!Vg;f<PemHL[3(=Y;?\i+#dI'd2d[iKp#`Ii?GWGc)Ot1&-)Z$r@\I,Zi`r=s!D(Vs(M[nd %=,`r,4)N.,-IgMPltRrcAYec-Ch7rp_,ln\;rlfdk=_pk'$C#(WA4kFTX\ordimTF`0r`AU.a`kKfTi7"[4MIo*a@lR5k4EZ)MG< %.f_>FP7S,"9n>UG'"C2f+O^E7@9GW*m084]gEN)heGN$tCZXMILr!+8^f2Zm3-k`3>'M#$"%l4K8<q'7NZl=:,QTm09VMm8\=2,g %#Z=PpWm^[E:okHS[`Eu&&8ThHOYZR)M;JBR7tQiLCSW8$Z:'\<(dPk__Z1D9"--W!?cneZ;jL69k#*no+\tEa$\fst1_j6uB3@H5 %?<YP)ii/cYBqb;NV3\^p+s2FtE7of+51A%+f1gOq<]VkUDTJW_#[<7<S1%H(Z+`tl`pLBG50jdG6Wfc)HrsLOUgSY$`C,.2>G8u$ %Y#SDF)_*J$"og9G0k1oi^F9`1dT>C_mK4NI+Qk/-%[,QU1/1)9;^7a=b":O*,M?ZEBEPN9Ve\2MV^\,iBX&jt6.-F6CQe@RY6^dN %7+"=LHIu%MAd4[qUoRTSA5/H*@msn3Hk-"dV#tD_qKU".77i.k%t8CB63Lg#MT-$@98Ea.XV@]9.B-2.1pZ9PJh@+]<UiXLrZc:^ %i#iAZ&7UI)^dbh1rR8);S^T]ogEFsM]E\K@i93SH<)qq)7e'.6r<NtDTa43M&Z<2K77Cu#.:Q7%W^(>V2i,*iMlHf0j@[S8_M/DM %4=`8Y-Pb]P)Ohj5Qa,,9&5[55!%-%M1:*2tG\>,g@/:*L11QsS2D%<Qa3@6f/PHlfc+k'.p$)AmGtfmP>pqon[KEP.FW`*6b:L>g %0os$+H)%@6ABj"brdql(>@\'5E]"sm'2P#[I=+=uKfAWe#\g`";'Jh*=ADl.8)]r!HN_K2?J4XS3LD,+/7o]T\LT2!:^+s?71m&K %$CW&u4jE(a(#2J(LQj<L'0,A'#%kXe-^M>#$fMAZ!kf3]bUJXRP<_?Z4=M*WiS-u9Q[je3T%VU#7'*Tm^bTn]>&,_Om\54Q0![;' %`Y,-lJXEGn-$:+RhGq?;]q2(k5\4W1'qsEi\0J+*M-'b3#9/b:7fSnW;.N++@2]Ii.&WXb</ACi1m=.I5(*SfYD=t:[\:c5n5p?] %!t6M0/QPe*Q?Y?R)Nu"BEAV-_\^U[DU-_.!'(nZ6&/_F!VM^QiC&b/aWsS"G$\`iUb/.'MR4(fSLVsB1!tk!U_PcS0)R9>`$q2A& %SUmSXB;%aH_!XKu+Rj.LgM<t*&oO=MPmQE[e1T/!3'k6K!,e&Z,5RfR=W$3;Na66^E/C8'8DLFJfJ)n"8B$fm;2$Q$=G.TjQWm`B %U.dFm"T96HPLP!$F.7%SeA;h)&/R3%?"!X^%EcioiX1Se_F:OIB<\$c=%jW;R'&WV.#ZN^/lKpbN_Gc^%Z4f=]qq+Q6s,?rc"7Xr %fJL)'$".gX$kML<ZqrG4.umQgXC;W3;sP\I0%D*j3j-m2fQiK$1Uo0d;.]eh1cpMq#_p,(`>0'LaG5>GLbKo$orOf;&4':QobX)A %(qVaq53.S&+tZ6?1M[WH,<0==N0WH9Ln`knMultf8@_ucSgck,Sl``\[-V\X,SJ"*/2G*Od'DD$b<pGq^:dc4LU1+&=uQL6:*M9^ %l(1gqW%>-1;`StJ#V)Xi;j;t[9VC"5ZKrtf,D,jp<6.aUjrC[MUi;goiQp"mY:.OA[\tN5$(qtH+Tt:`FBB]S-(#Uh8H`R++hL": %U];T#9aDu>1afmK2:Y'&8V+)iT23sa:83EQ8-``fKk;_@%Us$6@jkjl,:^/Rf/k;0$ik9gXr#$K;M&;_S0bjbDrd).LCVH`5b]uG %5t2Tgb8=,S+V#Uq-e6-m6(oU3B!oME`u7NKB:>(p9cO1&3RK_mL2Eo%;VFPUkGH,CH\O9*!&V4!=b%%)O,CRM9UI<W>?+9a/Mg7& %,-*Es)@oP=^R]eR9?`T,3UX@s77D>"/?KW;;Z^&Q4<Ti`!fYZ'/?n5VA"Xm&]%%E*jtVG6AR`R#KSb:Y$+-*go=7LGciA=CH>CA5 %;2U233O,#9Rm[sQM34snCVJE+OEgm#Bjh3j5TgI+L[M0gZp:4]>U+6,ca79J7/R,G6=TF^oZO+G%7CS>(*U]UJdl+=WM1pV%6ZL1 %<^f>@lD=WFM>9L.a\)a?;)^$_jA9gAPKGFcY)!eM>bp'iWj<I$_9a]EN@g&W93+WGgEi?LKl.`/0S6Y?k\]l-@HLSF2Q^=_4f)Kn %`^<'FeYoiMPm8ci^X`omnjCZ.c&baQA#a]L>aknP-#d269^ElC>EUpS%gASi&Bcc`B4aLH";8YD>GeE!+\TVlKlNU))H!`*)Y&[# %;)<VdN(#R9JHJu2Rp@7d!=bN#cipgBD<YMX4:\%7Y)p6uOmF6.%8FeeR0q@G^D&H)ZVijt2ZHJ*`Y(.b[\^hIB4=/a[GN0YETa-o %%%#qb&=sHtQc`bj'B36EAHY"7IdC]^BV[L6f#"'%SHss^i>;DE$.k<=Y+t#2X#)*;0X!RZTcd1.f]<>2i\HM=9;B(+'E'W'7>-Vu %DCG!Z!^!-R"2i)-WFV1V#kGk+Kd;fgNb2O_I.@o$UF%SS'@b*'8B'S?>M+"N8nEmY,bfDe!<Z2=1o7X2WNns(J83`*>)udK[0WC1 %"Je8E<.mWV,obd=k/^O@g'ZR>0k6<*&9DUndFL?T94s-f25/eM9bHmU46!pZk+=bs6]V!L[ChkTJ!=ub,aL1T[ke?>HY,un*_mNU %gPTr;^g/"8GBo$*-\iK_J)B;q@`;u[+B.(EgAl6uWYW6DTdHP6'Q"S0'T'_Rc)"j[@5XnW&95!!e@/D).CnU6,U;\XMNUT0aR(_@ %[U9[O.3Mo!Q*7!*8i23s;WH0dROegs='nQp+/r8;PmpWGbf\`l!S&jQ)PBf'9;7`bQ701%1pCo"/2;:P#SHN3kkKG)AN6dV/@'pA %;*)M:djPY]+O1VV4_Z;_,lucQRqbe6@fXFG/&lGQmSM8K0!?oqOYql86$,DIgC)9o;BZlSc%RLYAVPCXL<Md2]X:_fct0;((:6BM %V#o#+Pp+V0(f;8TQ>+)O`BnD91;&PheEBm6^Ur2#E?:odLXX+G;X6^]^#XZGU1+lJI9M@8"N<k8-8ju]$'IGDaEhYsq_GRqaoU%O %4>9I[4=D%-VJ<7:Y;.IN97ue=kQi"j9mr<W"7ega#G,Y0Ups=a<=FjsnfO,Z`+%o+'dP;3BJ!*AFB:P[l:_jCYp28+<XV?Hk+4#6 %[UKfcNCOqLj<nsePr(]3:"aO7]I-PjNi8G'r(bbkPpqS7DBqkH!U,$1$&Q%r$'+VU<%^tk;sKPl[*D;W@;b347bm#nN!&.LjM/$. %a/*?jOM\n&`%=!%Or9bR7@tom(^lUs'e84)\L/6!Z7q,)Q8'qiY[s*P`,8,g(Qeu#]P9*X6^_9a4$]s4*KLJ&QHhdF:T!4`Og\^# %#\0\g\Vdjq7'MlXG/0V$[*:t@:JC^@Xod3bnK!?Fj%l+08r199h+A"e#=,5b<'5mYjVW./K_6^dbZ5_AMm5[\R>]E0TtnXXaM!E1 %_C2g_&`m&lW1nE1Wa,%^A,RURrf\abS+Kmh+9T9?*K=J7of_r-j%&39X<cHF,S,ISE_8jf1Kskp#nj?La[0Vk7=Yk);cUaW4Y6`Y %dT%5)F,WM=Q=+pd\'Y!h7iTqKbaPhV6W0q_`/Mu4=aA$8@mK$o\T20N%k/"!Y\dEo1<X(A;$i8'A.56-1sO3N)lCPN(Z!Ifb=-A/ %j5=ltQ^Tpl)Of[HKoUa[[0'Sjdt03KnGVuN6]k%ubBNR4:+l..aFnr/@=F(_5jQ&`Xb])DE+KBG5h8`M#\:--EK^[VR2/THP8+BC %6ldke9T"RdWe&$$nIekPj2E[j.!T!):b3f%R2.R@/;F8*h86JpC7uD^?qCJ;O=Cen6l('mra)YTlHMqFJ3bX,['jq?9^YA4Z'j$u %a@`Qh<WG-QnFfkHMT'Y\kFJm_.JB(GAtTsHR:HXt5e64^B9;:IBXODu;?a/>\2"6U#8!jo);FECp]Qb</-(MtW>DPW#dA-$AC&bD %O>*:af5)K7B&mrse5aFV][3P"pm0VEAP'Ks,b_6bN*&QAMi"&$m7>!WjOIfjPi1P+V`%QaC*<uK,H,<E%LlU]/8tm_7UchJ;I'uB %I6*WfO@X*Q16c>-=!=&1/_N*I9YH-O=B"P(D4h%c.o#S@B'?/Rdn5%hP,/rpG/0@>P*VFgJ<[%p'eu8ddu8S.)U7rlhW:+om_T^. %Q3nRh,*W3[Asb&`&B5=kBX+V04#m?i`**udk=gJ;n1$0QEiaj!a;U"WE"^!-Bugf;[e*f(Po2B0R6`Ha30Fa31ucU5n+R$4'oRSm %D.Ak9P@::("HpkUCe^)W"Y\C/$9\Mm>#8H@\X]``nDRWQ@0r<RE--8bfab#-qb*D6h7k]b7%pmD22G]DPjr79;X#i:.EBmEOoE=> %Q=t#oi]BO43ggiK*t0S,a-/hJb_Se(/dc0s9aMQA$@oR8>6VZd+B6EFi4s?sEfg22p]O3E$^[SP!r,1/GCkTe8OSBmQCnd\Pu[8S %ZkG0%$fY2,_C;<$WT4p(C_P&$Q+DC*d?eXePp:aFUtSGtg,"YZ+D`Sk#1VPGqo-4$4A2ZQ6M"+#1=21%C\Xc_T+T[8J=T)=GbJP' %$K)ASEh$@L;9Wi7YcGXb<g"Nc!oaoFLN13d_@7k3M7YFjHn!%0"L>&U;R1?38k:8F_JtId(8ZQfKpAc"_iE3Y(icloQCgf\GS_fF %#$3NhbVc-dF;$I8;q0&#6/?+KY7ds&Wjr4"N?t?]LdXWr<1#<QbUcW/OTSck!7E>i.l&coPGOt-$.b&fPY.04j<gdX$%h5O_>BD$ %/:s@Lc#6QR302QZ7oEMg(d&\`^!N`\AGLVUCtR]QB,FMq?tE?^$LnJo>Di"j[N#Nl,N'h6O3b>"9+/'W%Gf/?S]8fF/m'Qf/"C,p %=We=';oBu<Q)V(AQ:mE!b9Bp1M\NF"<a2<PfKj<RIYbfO3I+J^qhroj<@ZO(-OG1)%dt7f=_t,b1eTH+Wd(YFir((C;'S^Y.4%[T %XKic:&f[<U.`T<6SIuLde"s'cr^,e[k=[Olcjg7ClmQ#B[Y69%I9GnF0qHUQj.NtPUt0R')U_)+AM[3DnDXG+domjCBbLp\@B3jm %PP'K.OXQ"Cj*Ie\9pQPUX7a&oUn]7^<["'b8KBS,-s=NWQHC^QF!8L5n3TjYY%$7_;^G(R\,-)WVT>jgqBdsE(%9WpS8$D_W3.NQ %A&W>N*#SO[P(5b<l'9N>&oh0NN7BH<Zp#"qN-!0-6@m"2.3s1he:n>gi=reP1k'CQ:MJ4jI(HhSW,qd[Gcu1;ohHKLqNIK+ao6Os %1OIU**HZHOgB2Wh^>"+qX"r4`@Ym/>(O?.($t9e\Drr_2:?;Gcr+OFrh=(0+r5V#H"%sa0p@\^>EV4Q5ljk03HQtb*gXG-T]tleE %2Qjg3)F#.Q*mXJV1:AS!G4e4Ms(dh?W7CIi\@4=6gtj,j%q^T?GO%K*PNcE0OaO*umW4c/QaauhO5K>@9h,!R2*Z\t;U40k%L1t= %l?#)_pP#HBZg.Sbh7o<MrBC9RN&hLIs'hArs2-quQb35-^O">C4'C`qkD,\(c8M8>UnJ4@+N=$!USg+R8fBQY&j`UpN"?/K;Df*' %D4?M!m^DNiIXeD!1"R)E.[AL)eO%^<QKNqaT8pt*S\]L4osD1k*;G@COpgj>?=o"9(AR@+f1W>-_2K*-+%ug[DtjEoG+(&NR(r[W %c;H+uQV#6sJ'imFdcf72e<7Do?]mJ;T(.R85LCG%:@^j\M^W(,qgbLP7[l9*E;unQIQPBc>Ao+SI&/(dP-m4V(Yq`bIaoUITc@\j %=-T=6^[t@L]XjoZ_;A]UP1kA@@=RhT,6#.^Va7ES-DB?G&G)!`kZ:/"p>!i>3W"m,Dm,Bod,C&\_`__i30&57EW.N/SbrC>Xne5C %;mB[KdS&0S@*gndp!(#h,\7aKU&Ik8)N[,^6Tss"XW:#(RB:.":T+nh7>lJt*tA]or[U7+q>Z#")gCo/C:D<jKNXjR(>lh:95BPU %@#)8DECYn7&LtGfXl0OG%COfVD\>Pe(,+;t15!V#b"tp=/dN^1+n67;.+N.j#-hpm$a.SqK/"4G6$*.=]0RtSeC*bM1.kj7>&>Q- %/1K"-U+Y;-#9[5CV-6]"l$ofE<Yn=m-nEK*1ti:5,a6Q3OEQ;:Qs*.L=JdAAD5@V_AdXI1Q-rTo'pr_/>8_B&,Z2SNYQ5iB5VIhC %6O8KRV)cqc,1&1@HW%e)SnOiih2WZRA6_^MdM:DPRFQF3,Nc!b?_:CMRXSG$PUS=eqjXC/>uAjr5AJ8SQ'$BqMT@XRjpErk?Xj7K %f&8XAeri26]!dDlWrpO[/JV6u-:07ar@JSCA/2!Xf[M$*_tRmYPE9EY'4E[*a=.R=8VAQ+#q3pnRPY!NZ5>M1;@#VlqCD0'`0R6N %R]/<j,]cSaIHMJ6f@Y^dbDS,S.*HfbN;'=b7Ja20#3J]^Vs4WCMnD1(3m^<)GW,=p%?PB\auCMMJBSu;O>X/POG_?+l)jeRM^Y)R %bTFs$JJW%4Xaj#Em9Ur<81j1O#GP=2oc>;S5eTKa-mN=4JY)0-&Nkr3Jk/?o)gM_TBjEBON/th0LtZ^b-H*#,'=FXd6/rgG8X2)I %3"X0Gi8IEu^3"u:'K$hkcjWEbW^Y@P`Y)cUPp0hImaM%*A\q*I2,pq/:4;/t=rl*+J5X[]LKq:le'5""<LD@+fNNlqgfU^ECbBNu %Ci'4u[l-oSCi$4=Ci@3<3GdAHF3.XU].(`V%ROTLOj-6<5tZ3rC[j^7)KlU-Lbg%4EsMRb%sZVYVOV#LSnnish;2g%o]"s"Rpj(< %2Vk"=kreLIh$"BO]R]M-_khFgmfH(OT(eI<P&>*;hHI\%QEDC/dn:)g;<pGLlYlde\c8aBIdcQO;O@0]M_)Dm18B+RpJO/G=etlE %9!aKSV$qOOrR1"tD]7nO!b&QQ8kf6a[[6P-LHSg-n2tlS0Mqs96JdUuX]K(?C2M-u[D_nr.hXY%hYi2I22pHPM*/a!+op[*kT.+E %HR_h;I45?U\Sl<sm6g#(ii#.ZIrU\'l>cg(kN)ED-I.,'+iKSdilB<fHV*5i+CIpp]`KHdjo2&..th8l[:ta(-7R2M:b?ce\&@>@ %fe@TW:fA$Y\l"Bi7ZB`[g6rin2?$*?9^15DGC]TIn]81rE?0cULpGNO:W!nYgH`_\cLU(24XBGCIV%,QON;.IYfeRV,'T?@X>R<# %^4QZtW.eS-lU%W&Z77\37E/gpG/=`+^04gLm6QJgO2fd.Bf//4d[JW`',qU!`48ICac-H2`9'tK`9+)O<;!\egn!T0SHQKqYcQ)4 %#I.PXWp5lU>Ku;DiQ*oh/m$rcI)F#:>:cAPI_(*t!pu^5<BF%l97Zb<KH\Miql"*8Prrl7%RH20?)UFrVWP:NphLUd_Ei%O>LGfI %/Mn;BBek>96NC<436_2>*gF@*KdNk)1Mm@)W)Y`7oV/`t=TFh#K.Z3+O?[c.D&bb&JTkiX[jJ*$,i?-=kG($pb<WI(.#JclYj=7Z %&(>^bgZ?H1'fW?kCcj7*<#eZ-\Yk"nOgR`C'rsV"/TMI2j46U)gMl6o0lN;fClhq>i/"b%L&_oidZVVmMU`p^&nReW!s5?mRIip? %//T6ijkAJr-&`aHQ,+H9WpBrF<!bc>7IMTq"0B?,8lqK?1h49OC,6-%)8Iq"-YsAfbD^>#9B!N8)FVe+9BM%j:c[q+$&OhS#69<[ %Jpgh@\90CQZo"c>'[?$V+F>rkBmn>p6Nhechqt(Y4QMnWS'<fi>(%@9*V'-$'r0C?[>hP_DA;VU\%@s_b18N"jAoKD?N%LTk\/8# %4srfAigi+`_4CghdO2&2'd*:(J"@?8?9DecO84.@KN[j/Fj@0$HTQkn_=Z-">CCM\gLp6OlM1$cd.f2H_c2,4"K1=*0UmdRYBJ3( %r6rKK<`r`Ln^7bI@u%]R6BoAb0<H#)oXLY1G*EL5`9jVpAo@E+j4RaWg`O16n*TdShH>>R^UH;VAG&^jo%&9prI#*YrIDW[]ln_g %qjmHZ1$aW'o;EmUb$N`]oY%JX3.>S6%JkF8C$/p.s0f8b)ik6Q$hHDZgj+;\SLLG]KP6l4NItZ7W3kDK`,oZ21<SC0)n7*>\;lI' %.u@OES5ra3,e]:Z;N@n2@Y&5Y"mR9fGY0_T)#jb%"r@#&0O5A8I#q#A/!sFA".T[jLsRsl0hne<.Yn,tX$KJe5;>r5'^QT05iq." %O/!7te0*>qg,0K#Xd3/IU,jm]fchVbG)kd$OS6]7JunGrorKDrdS2lW;C'0^70N9;l_kV[8@sZf@5ZjD=QhBf-&`Nd;;l(3r!V.' %/>FAFQ\sT?Bd$%b#T:5URMD%3Ub$Fc[nt@j#u\>_d2aK>;@:c\<eP=Td^kf$b_FGV>g6.H4WQIcBk8"j$)l4I;G9/NN55o+48?I" %@qJVie/@DYi)M2@>AU]82)2ko6mVYY+uCDlcotFuqC2)<\O##sSY5E1K8%Z'#/1cK'X0WK$.r*)M_dY3d4en&]Hi2?fSY`^6j'JA %"0Rf=l:RWJS;^Xd-IZuFdak(#!PlU3<iP(`BdC):)*gYg[pY$'Wt]ml7$\c),/^.n;1_&8G#5:d$;6S=66L[l;@Z,0Jr#&"p_I_F %?4mI`1C"D!6cI\i(L-\mS&/aQO'u<X/5$jYaO%@n-RP&HfP)3R*$F:+pmjiakdP8(Isr+MoHI/bjce,o0\Cg>TH[]t)T+-<*-b`! %1PG]p7j(+*jtB_:ADht`R6efX<`KY*O+fR`U0((Hag**49&3rRPde($J--`n(:IKO:XIh\^*:R)AZ6IQ^FSu#@pO^&=TV+VM3dC* %Dde1UQPNub+=EkaBh^."-LA1e!:#1QDSC`in/:iC4>GHlpB-37i:EUZ8fS"P3gn.5S-=KoCo(CsU=*mSX\7[2(!9*q#iS-k"lLoq %pZsQ@a]^"&:"3)#9cE$#UI)<<l;trn.,#RRiY!-/IUN(m/UZe9I3=.E,tX9#SQJek*.c1q_J_nneDDmd(^CfcR2S/.AA*Fr6nB6t %2rc5W[TM_T)%SJXR<FA!*/VrN"0*]E2Af63g<2T<ZL>mG$Hp8b,\g2hWte9,!a-`p5*eODFu@sL.P5rieZsFUd<#LX9uE@ZfJsCf %PRtt5fZ>uaBu"ujfTfX`IF/1@QSpBY(3Ub1b#'5o2E#(2M(9:;P]1Qc1Dts,2U6Eg)KRgKp%ap[l1U5!!%_H+T&obiA4qLVJP:kj %e$O)%$3O\a7SZq@1gn[%;kd.q:2M&T"YK9g@+EQt+q_K+U6J/#E-CAt8kB^k&45b,WEk5R[>P@e$'eFo[a`9^4-aIcFh)T-B'95d %0GR5XV=:PH[O$LdJN*&_H`8.=<#%.NNLqMA@'gVZWMQ^fn-$3EE`$W[P-VBGcW%Nr`E9&e4En,(A8^%.H5Oe$_l\&g;n?`b0a16* %[\g>r&YROg`Y,"F>]":D6)W>YP8:\S^?n%F<JXgH7?<r(TWDqKejQ=\QZLItZ))Qqh",PpFdD3NMa1K"4@A^9.iE1%bGPu&$?_-0 %Xt5t,?EBjqI`+)c.AAWal4TjoiL"[T%YFne-!1kq^VA8BMbHC.EJ"P`dW1qH1A==#YZJZ#O9U*ib#%L8/E">%hi"hMjEI!7Mc+[W %a&I<JeiB%aY/2WINH[pf9#g3!Ht\\2":pH$qE^Y&E0O[c&dJHk7,V5R"B^K1WG:[J;M1dI"1eIXgs?(#L>SI-UuYV]SMm`\TMJbq %,+.Vb#37V5\>95Zh6:Ps")DP;5F:)i!G>q_E.qthB,'R2TcQ4[.r9F$ZeVA$NX`q3!blGg748>k;X^VT+gkK:/@CWKC9Fcf+GbnI %#?5O@c&ud+<?P4:CU.OR22PHAmV3@">,4"nI&eaZg04JUM\n0NB'sq\&$$c/,YHmr2DJgNN-1e#Me"E!Z#&)!,"'grg)-pV7VaZO %pk0F9X*8D#&tBk%4CRb9;tA.+&r2Wa\3/bAY9AUBOlC&U@TI6<?<9(J+=cn&F)"U0#^&\#/8)4Z3%CXjPuL>u1+cY7GmR6;C=T]n %+]Bgi?]g#-V+q__l:M45/"d2r`QH>H.+#:7p/En42YX8"X/7#5+F6m\!O8MUG<2j1?P,M"Lg"kG_)^d55$lCgpB-%L@hmQF0n+l( %b8hn?/2qSf)4(s,8sB!L!ilmuS".bH11-EFLM^kA+NTpF6#)5q.p"Y!CJ&`Q"SpZ;Mb)bNQR-'GZ%ku'Jl#W;HnWhR;d::&8rGXR %&JL$A/Xce%S9quuFM0"uls*\Y[u%@XfX)_:(99\5/Y^epD%L3'%'9U`-n/0[LkcTi7>PuAlhM2tJ7,aP`[.$gji)O;;?bZdX^::K %q%\-:<uU-J1,c.Z!dX6\n_<I4.5N$n+D-N.f,tqL:EV+SB^='A,_'`q@SP3em+I,-WC`'.4R]ZOG+mGdkI5e^d2CSa%p?^MAQi"] %=8Yg_/4J)'cG(\-F+Q>;j!6oi&#E-l7nGDa>"8n0kXj;g8ej!F4%c=FSZGG)fJ=quVqOdb+%[@?\U>/!!B9`b;JB99m,5q9G<LHj %-!4MHG1PoIEQOr3,Zet@\&n2KiGJ4Yo9FAQ!sf=9CEJ:9C1p$,j'q#Ge;'!&e1n?S&iJh_3R(ad4#I!R+ds1uU0;^*"u0$6qDi#" %VPT`=$Tq/;9r6?m\<39!;X^B(#@]JWY&Tq5#'f;H;=$_0"8l9TBs\eF9oE[n$JAAH/`?"7&nAT_!F$LCmHoHeJ&Pc1D!cmE0tVM9 %9G.\ZeCu1Mb66=!.$i9mej3"?pLKb,_eK`=(8IGd!:UDnRqldFQL.D:eMhW7m*lq88$m>Yn.a)jOOr1*rhb-j0]5kc"&EU"P3TEB %/NQKclko-u!H#ubhKHuIbu>]:'iYR-;lnS^C0)(S0aKQ\[l>+8J3tWA(e\!,L"`onLB5+BCcX<(M6.Y-b/DMKN0=foA8[-Jf%:Q< %gCVJX#?B-V70oW!J_OS/6n&pMkf%f)lar'&76CjWA.i$N0/<+e.(L%B$#CrWC1N50=s,JW,S7p175mmX>A`P&nH-Y@&qr*&=g##K %V3XG6d?:e5\QNn#K$0'lndq^)n5sB-=+l"*(oiE-EsDu&/$*Dq@I`[)+h%57M.QBJ3AkX,"&mQP4>WH>33kNE=8\=d-Vadg1[Y6) %(Krq_'nH5W%o2D<2!Maqm*4Y`L'0NThg/<)-h@-<i&UuMau,lH!==4:BF5.g'<0LtA;tgg+2PH0BSrbQOHdo%$!o(DX!5V1MTS5> %O;-0DeG>[JTW3!*'jttfXe[@I)SbUb`.Wk<+\JjPGX>eC2ulUWJ$Hl>aBKHO+BW?G#QGE$iS`n5o=GI;=;5O30^LSdjS.ic;4Nn$ %C;_*Bqb=VC&]Ft1;Q9e*YXm&t`=ok_d8Wt3m8:*%8gUAcEN'*s`!X#b[.)7llqiYcPbK/5KL2!Q$T&n.lk)P!&J-D6]N0tCMl]BP %;R)&+1?#FUY+Lh8Zd1094-ro_[;qG/RDk?>OLQ#^(:DX/NXa?DWrR6L,.iV>$nOcCn_.5qZD]2(LCg^=)\b7qip_R],o6:*1OlQ= %9_U+,9;aga-3\rUN]'s\<d7shh(*G*'_=+nq0Q7<-JI!1+RgH5_a99:?k+qBs),f-(X9dio<iOL%p=Sila:D3&+0Jhr^$WB,pYIZ %,0ib2_=N3MZt`)k/%`oM`8\Vr9C>BNC)ckN75/dC,)HBf*a"!2E@0O\%mW0)+f[rhj;o;B/2ptQ[4\Wjp6AVE<O+;i'F2Nf+sCZN %@S0:YUf&_l!-22D=:63]K)2TGeVELXKmRUo/j)+!LX#2F2-@(hV_d4Q4=;1;2GbSh62ndZ.`8P)Iu^DW*K(S,c!huB;oub)rN'Nm %`/85S,XVsE_RL(X6Hmu:XBI4&/HO+*fg$0M,4Y+^J=K)e7l!-%3EVT3$GdFMcNK)qb]/M-P(t6mE.fnU\01)5#+#6&=3SjDH#3m+ %Tc-A"M4,$6nerA\'W?;7hDACuP109O(s+uMc50@tSKJQ_cO+6!8'+bqkRCQA3k\L5.1K9*jdAE!%;Y6/>.gE[h?!2EP.a\k?"g'[ %gnC]T93.=t]s(I+WLdEtf&aCUGR#9=+96:/R@'8`Y+QXO'toc0A#HE&"(:L!_bfnjZD9*%2FlV'13(p6<a\(h)'ICi.!\u05r0c@ %=?=BOR6;N-l92=C-?AXK[h?$;-8"GB'GVD)`hYTSNa>PY!.Da#6c;l'=&"9X%9E#VFas8TSabX39i]?@V#m*X#q1X;Lj-FE91e-] %\X-uuObu#flY4[O8Mom*CLFoLg6BCTfpi+Ca.qNVY*e6eM2OeH(G[I=?rZ2?>2Y$.G1[Fe8YoRkOnRdR+6h4"*AXM1-Eq<]`NMBm %-AC@X[8f5U#3C1W3e0L6'brW:UP2=5EFXYMe.QO0YiJ<<$AglD*[T+ndGd*Vf&tQWcG!nfHA*F2p[,DlF/I;LTpb^Z3n%O:=rh3u %>0$8/48AlaP>b]A1Mp[]qOGk/f!iL$YBl_mLAJ,SO43nu;*E3(NW6;aEB7kOl.UPR$H;8#bn!0o3485N0JnU7\gsHD-19,Jg-[$! %l[M)$a3o=t.4Q7t"/_TsgdDBd-P'(HjG+C!:i(PX'oK+hW^PMOs0*E\%Sj#pSU:1T-Eu_VP"ld,=7X7#orCHWgOM=$kZIcATU'.2 %F[4:4GSXsrr.:-t>&=-bZn6IjVt;Pn`Ll;q`-+2uDo<e@eBLPa;qdYa`h1W(fYsK2d-O.!Y`:%Nr$a4W4o?0\mIYS@]VV*->G/\" %LHhWMKtdSs#%n29O6^a)`1PK;:2fiqW+.f\#CK1aiXVo3`^LCdH+[5pW-S;LJYL2f(8uP6I;qO*4(M<c;k07C<'EZQ5+qQ<LBVFb %_1*G$r-1da;#Ta9"3TLEUH6ZG()?>#;n5FNZlf:#@`Wu&5W,njrhsjN0I[7V6i5h<.#@5!JVn,*r)"d1OI=rfc&7s)>l1AYcRmHW %RFD7;d]U?K.?h3$:Spn@k!#G7RP8jsQ1?aZWTC&;kSEBMG.\?!RU!o;\u)aE"59V(r;h?<OI)Rp]3D(RnqRBpVm5@dR]#QQH/6q7 %m13m&LV3L@5OK'toC@,"2kSr0mp,*jN8MhNjb:u[Q:ZAdg\W'e7Jo-1;8E$e-f^4o]mmDlI5$K+iNFoLR>`6amBPip]=^hCKQ]8' %=ScVG^QeZXiFq-Kqn^jeKDqHNV\-9"IW+"g4d^C69Xb$KFQ@A2,E\TNGEU8>hFctImlg^6K2""@Q@0Rop?p#q$^s[()l)9HZ0bJ( %0/-Mq[aN-H#E$D?37sN='"`clpc\C[$q.R*fA/C!Bn'$1Ui.Pb/84mU[l]re[QFK`:YlSAm$=F!(epm@;<RIeUUffp"l2E6>tZ%W %;Pf<3T=R2=o/#<3\AB9J[pWu9SasKW$s7?1HumI#=0)H%)b'[sr(Tub;5=(W0<[=D]K3knH,ne\p=f9pH#5V:af5<\5.L./WP=cu %NO't8FWJbD-3*pZ?Q/&D09,(IbIQr7SE0GuG],;qabBcX4X^%^:V`^rm`/md6oO)eNYNjL)rJ;l?1-?0R&S7LR4b](LRM1lFQs>R %;3Uks3iY/B4KL68piHbkk+Qk68tof"o3Y___t^>U0H';P'C+@>C,&L!p+ASkr*UnLaT<;4&IOd*e5$]*;>O7(,!+s^r36d%^OHaj %_K=`A*[JlE0)T:aF'q$o9K3>UKG67uBojqcIug<*2Q?%+kMs7"7`Aa4*e(crDD[_4?+r7hr-KuEn^=HD\6]^@`d`N*$nnf1anGI[ %rHc#T`==h],<sdnn!V(4ggL:_=dJK]2S$3YTuVM1OZ`3.[GG`PDnK[;hVK@B*RafL;WmVghK3]+gJ0H@\[S+0jL9U54PNF0r4^Su %meRg^9)2KiS]gU0qt&((%/36d23AqM&#NkZ(fXG9n1-9IHSjq^]L]\p+)h$>n7_:ug/d7Vll6Crg>"qic?(%mQE$ken-W'lF")pK %"9/G;(S4=mVaf]Z^$.67M:"GGm/4'8B0_>[+7'KWgTq.PB>`%'+-r8%*d%!,?//Yj'5Q:dk;&rB2ggBHR\<8V<>GRYC/qrOR%sp' %rW6f+;G3gRWts/iH[4GNh:9eKkBu<D(dMjo00^HfqigDuC$"Zug$Yg5NdjL`Wu]k>S`Ts?gWO@Ws)gj#rZa@j4C?FT4A>C@8U9tF %eib!.j<I-tVr=T5^[K9)AqdQBcVLpb<E'!rlFg8Dd@-UIdsCNKeSMJA+h[OhULK-CUX?fC&gl(mhX4iRe`nIMW$CKUX:2k(pB4cI %=n12;#Yn^Np-9,?eN9Pbc3^uL)*@iMfQ$Ih@E1mf,!G#2\ib`3ocM2=&(\NWD6A7)r!DQNO+2.'FZu?*DZ)a95M-a%Gr__op,I=d %BXI@]^:*.tlG5NnEDgdu7<GcFZBWD3-SgY=mooSICunH4jjWGR=a>4s00UCRm,M9g_i(;)k9Bp"7-hTq0paMJWYY/X4M+/Gn"aN: %VY6Y(R3.ieq3S,[BbJAs,.OX&!u`6abcF(KV),OZT:tu!H!03S70p,#<1`@OBDVTF+$S0J5@eqbVXL.c^//D]h"&LYopt@EVn)Bd %,?jn!IK,C/4N6@X5GR\fBDVUqSGA;hRK"9dIpSC/H048hkNVlg'h1KG1H5?%g4.,&cd_rTK.ERnrMT,H00UFin!VmZW[hG*4=boY %p)gStB3tT3f(tRdXoD)=r5ch#^XgT#Q,";';<0R--eN5,W8;Zoo`$/#rjYA00._()U3`7V&4IHa8$)3JdXS.dT5imIV>p#Ib%F?H %l)T7TPKW\olT`prcTe/#5?%Fi=iTOHg]-,VIsS!dT1PInRABYFlM\M&N%2YV/`TNQ_+B6qaCgD15=4lne&q"P*C7P2NGMbV=R((% %.K3t;ru!m^;uAjfY'd,AT=X_4T-a11O03jCIlo62VY2+?MJ(fFpXT,H1Tg[Nbl#Q#beI-C0+-28!X`X@<k12DMnIsi:`JIhp]$$4 %rh\+/6$Pn!C+`"Sk'iH=FT4/Qs,8D!l2Db[=$G+3:H_VN'Rb^K])TgXnjW3`Xo+UTJ&j+2@`ZjpN:QG_PlEO"o-9GTs&tb=;PGjV %[$'TD'W:CEB:`i;+-lPl`"'t[q_cRRCRrdf!,"3?1Z!Lk"8Mb=o9g'GeGY0jj)G-mR/g!'iT%7Ts,Z%?OIs)`hq%pkT320>Us+ln %b5;W!!"^KX`$HU--@(lC&fk:jBm$<Ks"cM3.Z)X&0q?/I"_Xk8RHf:APg<>/O,H#jWW&fu4%(0Q'DP8q5L#IS5GFE-e,9dbi])#Z %^SgYkYJh#<q*,=3oA<Fd>SP.KkOsbAllT(5rb@uVEW7^&E`2<[[hS;Sb"li=qX:_NjR6Iue,C:NT\Ir3@/M1PO>HdmRB$*lfFPZ/ %m\0i1BjOba.1mmqPU))fO5`8`>Z(0Aq&cK0r_kD)IUr[>,g#U*asD$UNiKTMji.1*Yo:V4adL9?Iut7kW$]E3*[a--(]G:n6_s,$ %hCMDAWXsBY&n`hWOX?TqXstT\-S%UuQ+=SH,qI.q:-M(h;YAq]WB\n/?>*J6cGE1KX;Z70UWKn7F`6neD_`A]JBHi#5t:d)#)W)` %%K1Jch2ggE`\7Y$UcB-mcE_LAET,jIGA6Uk>PR7RY;j&l)r';<>8dO6bIE22=T6(PcA;G5a?T#3nX$KNs,A&(&/[HkD;_(hHd7^R %.ofSKINoQ0b!5*L?seC1TH.-5Fl<7qT"g&A=1<Ogr\#pK72pa0*DO<J':+gaK$oL7-^WG>p;?1Um[ZG9>9?,ZoKSoD`;f"-=7?(` %k3`1kLY(#Hpj89U\p8-0rr0)6J,cqUq\Xgdg]-S\r-_O/s3:SUiTKJ'G&OR>.>r%K?].4DbZ$17muN8(pG_oTr[q>tdgNOR7tXkf %Qt<unPBB)$=neQKJiqW<q./1ucX'>C4+Dho2>T9M%gl7@B2:_XmJ5@o`DRLB_1FW3pI9dJ0-:\$IF"cp`kCVIYI?H8\NY7$*=QQ& %>$=^=o_O$dMgG<tW#d&V4/"T>d,Wa&*pj?44M9QWBRZ6[?\"LnKA.E,+&7RLQ.iH$hOa'^gC",:RJ`)+hOCq,ar!$lj2((Ij0,S) %X=kO]mrTqh6T4o#@AdT(m;s`)nR+D1i4HUFaujh*)/?kY:Rn2jISP'Pid1Y$NOs](MP&]/B=G]AT*%3)e(^Jlqb3+J5`X.1A/jGk %Dr4Wkr8Yp_08B/aA@H('G4+Y2DuAirmrIaa'AaQU,]&I[1)IK,+BtUh3`&n8&E#=smIcO-YkZO<fW7<+2Pl`=Ct_sQM(a?7RJpPd %g=kp'Vl^`L&#LOJ\SqpopSMkiB7Kr/:ABI>p@_"'5;ehej5J;O-nrR7D>u#ckokNCL#K"9dtdp%mkk;jDY6cto%&&4Fh/s(Rt9Qa %H25]qr,Cq*&'(l?QUtL&pg*jFMmm"!O?l"aP+M3iq&^[R?U])-htn)<ik*ml4E]ms^[Wo=T>)93%2qWN;a7U[Be,<X*`).ZIrWeM %i7jrFPQ##F)YnH.TAmDR(qF=p7#bQbms=[ph"kGrZp+i"DuO^jpY+pW4oVl&ZV6T_NKPX?4luZckV+Zm=&J.Ps.bQS=s4WC%3sc5 %68MEKGJ.mJ:nt&@Wg(f_X^(WdC#[JBDf)pSh16Ag;Yu.uOi.K7Ci"gaLV[2iUbSRpP=V1MhRDL5D;=,/7B9;E(,h=l:"J.O3A!7h %Tr$#5b\4$Jjo6H_/,@IEASLJdqL@na(X;c;"CQKC6b>+Z[qEs?!"FupfGiEMBnlFHn1fo'ngUkJFfX0/+:@SUGM^@F]X[AJm:$Og %`kNGZ\D7e)9O.P,EFWt\Y&(:EUQ(0I[Rn$K;cg.m>5+>ok'D!"NNWWT>^L8/k9d=+J8\.cS'K^=Amt#a`<f^[c'Fd#f8<=t[*?s5 %k3Up,hPTkY]J5<s*2,K0cCqS!3Cgp*(dfp8na0Ip\=#6m$o\Pg_i3jlMWU.X+V_$r9l1/IA%ZLm6J39\]q+>\3=i[,,Fp_3(V3pq %_kK>+Y&UaY\!Q[coo'Vo"9k:C?k9S6DsE`CmI`sglOUA*qq:1M%m#'$%^1JZHYKt>52%VU0bo[C3ir/.$bLdKH*t[oG+K.MO)ZBc %e*WkWl7ZHcbe/b]H+ZA5%?;B8]C!JoFXOf5?3]De*7J3*/\:Nto'B(@D1*4(cgm\M)BJe+fq!J?%-tQu^is7"H2+sr^%9GeX7?(h %.28kJQ2aX'Y[,ds<qo^,H*CH)DO.',iaB*eh9;SGK#-Pibmq1$m2"q0UX.Z=P!_^2[[Y6kN':r7M[gVQ4P),gr).1n[5K&>I^<+Z %==nl*YF54!TM`p),DB@KaDSP#B6/)fj6C!!nMfmZqVKZ4ErOq<Pn20\J]]eEJk$lb"hE7'gKNNP9#=6Ylr%G]?VG4koFc%?Oq78G %`MUo_rhKW[_R[US"(JjSn5r81_8,)e5<XJ)ZS`VoS,X"/m(W]K3PR<4mCi%9PU?oHHPZBm!'@bVf:HWWou:M;Bu?!R\D@"@^%pR6 %mEWUne)$,brK5\g[U]a+)`k%K.K7=Ape`t?E;5d`7'BD_q`CAcYP7a:9BTVf[_I1V#_-WgH2.8\pG]j<Vf^=I=$,UFZSNNsT9h^M %RLZh#pLo!L:&PWMs.(c;U&RT_rgVk[HTE"MNCD[XYP?`+]A3L;4ob>&p@@t7FEZ4#RhiEeD#/Jhl4;X$5!,P\4S*Bd,FPt=p6!YG %Qlc+a->%oEZ[J")Z'LaUhXB/:NjnsPitHg0h].[^Hf)n7*<1H3eu,nQIrZmq,A6"(h`pIEN<Uc`prBQ&a)o\3r-mY#Ni%<tNlL8T %pLei:S\LMTrH8#,b,bh(+RV@A`(mlas717$)#D>Z1R*C+.@n0KpBQ'bs38Sl2B)9RG$^\-abiI\Z2-Woqpm\.BOE2j@Vbf61>sK/ %^%U]Jj1aj:_emL64nc4hiSXN4EOM#EH$7t5]fX=@^&-PKVH@hXOWX<Ps#CZuq:e-Rr/6>Y`n"\H$NurO=*kIT6a&G?jJrbSo)W+q %_Y"sGp8@l*)Cu/DqsEk@W5!Zb4+k3f_it,U33#2'N_d.7qJ_VReS#@`mTf$.:&7W8ktUo\-GAYeV_87I\?cq,'-\W$n&04d]'6jJ %H]<'O^Xm`oSa>edflT3CN-]gQhrd835@'#t#EKJP+3`S`*qa,lKB_n*`(Sj12"2%D>?:L/QS-CCo'epmS_&OM3DnP1Bu=Z7)TRL/ %]j:Y<7unp0oIM_r]03p1rHE\n_sP`C"#Ne-ML(_P?'3.I*SWK">hiMFLJq=AIiid(%0!Tb\[=TUlYR)$_nC8&q6WfP2OLqcE4`m> %g$F]*n+U-!3Y*UM[bU%q\3JUemdE!0kGNs3k_jaSde_g.4IC.[H_">[T4d5!\2/;TgY6fHCo94=485GTh9"MYX57MLCTKDb#BkkQ %\jdH011>9]*1,2;S^m\P8_=4PcU-18mD3'_)t*'RHM,hpRqZ^r(i4hq5HE+HI-@<hms/*6ToDcM[l=<"2ga="7H5+uEc3d@df0'a %AG=I.*^P$dr#2;SDN?,K^!WUkmf$l8^?g@igU_kU%n9q#pAC$Ni!7^mlSJ?Zd7k?ZDGL&A&QZX![b9RFPUjE>i+A!1YJM@O>\Gr6 %%luM'9Ud'`7>i)Qq'0j#\%?fe-GL(g].aK9NddWc)XdIPKX1LtIfs-U\^Dk2`k(Kma4^62^PC:ifc9oR(pRXLTBfP8;qZuM^XLp( %(T04[gI:$(`FpQ4g]DCqmqh?O7^df<%Am5rs/Slaj[K6ugqq@W-ac.IlAR+`FEE7Iq:s(#d5+:tKEa)#3rWq9EW2Gk.rDnceZR3_ %UZSX9k=V36ZsHe"^fkfB>.4rFRq&kT)fP'81WSW^<s'OrYILo"j[6mSk8ua6$KB@5LQ>4l#Aee_,TLXt5^3"`k&G(['q:b=ZIo)' %B8]P+5@)<G^;:%jol;Va?f'V0XpfOPIC)>GH&fKoS+b8'h\1PM3j./*\RmU,buVSS[T9gAZf14in";KkhbXg)QAWpWodC7sYD/gg %$/5&a>Jn.FhX8ccfk*9(fo'&.8(3b&A;nT#gmpqD'eR>^hdT-pTl$^^/!DD?9^eA#qhD<Pm^CcmqEgcl-%+k54aZ+hIY=KQm`M"4 %[ep$mZ0f9^H+W(tBR^DhjDk0lHun3H>(c.k4NTC.an?:(X(+G_c(\L)VV?`)38P)X`M#ZVo`o"eIPj-_fsD>0Gt_/!<OR5&fb'Du %%C[HepsZT*ne0<+)t-LE:Y^+s>FnU:]#c;i6_!Q:VJg,7;4jM$)"e3h2F`+Hf$.(4LTO/C`r4T+?hko!*H?sDNV?J^8%[5OPOVM* %I<W,O]A7Oig!SP`[c0:o";O;LC5U]hQN,WDREdT6\S2heI!lXYjkD6IC.WJ:[%iG%G`U>@l)]<mj$g!obtL*dbmo5EIqQa=aSsJs %U\JEVE$DOt.SDUmZB*oer`C@t_bX<+LcFmig"m#4"$Hu)&+;NiHT\1mCSSa<T%VrVnNW)S-Q^e*anRD.+e&p:e.U>`Kjr4M(CA"/ %2a:Sn][D'hf^e$&DpM'"5G!B&r5$8m06DY=N`cK9@H/,1,Sp/5R)\+[#T3_raDjR:)kAcr-LmdM;WFW&W^BuJ/c"T.Y4G`=G%^,H %B72i=*S]Yr/'L4bYON3&=R46n9ElHC)#M,u6mFFtS7nrg(i#%ITib6ss5EOco_%`0Kl<aW6mIJ3^6N6k>$o=Y4$l,>UYSfIh%?,\ %g@WFlUScPMfc,s'C$s@6IqEsQ8$nEEkVt;+C00Pl+nLG'/]kjfZi)KQWc[dU1o_;VKr8VHj^`$G7p^,o_/"V/4Q`dd'34(K2PV*J %C<qXIGi<Y7^?KJFVM"_K=kKa&jVEcMAq09W/-UgbNMGGEg4XAug$Kk)6V<!a&YCZb[eJ\"BK5b]d0H&Jnc$%J,).5BHfMB!$01Si %"Z&\nY0)cBfoYT]la2s2Y6N`4/1R^O\5Sm1hUa:t2qs6Vi!B4F(c<(4%&1XC4UJFF0tR8A.p3Qh5@i*V?QZO+COLDK`!Jo6g"YJg %f1*eN869I_ot4Zn)dmp>PJ,NuZmWV%m"r`k*B"mnCcsSD[5YqXajqK9[<5Z=c^(8?IRU#!NBejtXReY5+9srW>jP]HqdWkAf/I$m %T8Y/r2q,m/f2V`4Amj$!7;*hp41R@ndAg[4n9R->@%eY14f#06O[#@pL3A>)eB2V&"J=Q?j'SAFrHg;J],An6_e.JKnjKX_UBW;) %fj3!4TSbT3qu4gh^8/2(e,!0"@(&lXCG'#.FEbOE<jsEj+$K?G1Qpok]N42<kbIm,j-+0am?L0g]%E,4D#55,Ho2>6i5gsK#0Gj$ %p&0'XU\^-EP!aD=rQ4LkeI-"_r<t'!C\q&fkG@<G>kPti<c;o_pMMZJ)<X-EFR$:s&Q`,F7G_s6SfB&Fg/)p:GK,'W1Zo80#nFd< %O4F+:F6sgn:ieo5gBr^lTI4o8+8+JZSA&<mUX.]Mepj=Dg+I2HB(0m=4kK)gdb?o)*+?)ArFG-4$u*b#L%W:+G:sWZg]`JW/4XEG %fb5nYp5>7NT"Nb6fc'U>,<Je!hY7WKoVR8dhO?f$D#kZl8+<XecG/6F`gp9$G9"'J\-XP4_8bm7Afqab_S7H$CTMWLcD4,5mri@4 %-Ms?>J'W<97Mp):jji_c2./J"XVY:.pm6\)a8V!Z*pL<#%m!'t*qhXihE/Z;oQGHWb]/ikpA8b^]K>.rEO=6On82Z"WV_-dP?7GC %LU5;*pattD<_gYLI+S>]E;+&;U,DX#,(eL3L5LB.RK_sBaKD#an<6<Mamfn`nQ6/gpr"1qF5m,pJI`NL%ii/:)cFqCdbJ?9J:"0S %<Sp;K]AmPPJ*66;#eW1g';6fb(Ib5QCAqa)gpmrjq=2MunQp.Hm7$[A\sX6pinZO`lCl6f)B;!59s/s;]#l?ZYcpXe75<\/P+L0# %h^:T=`o2q90/lrCpW`!q#c%<,M;unhFsiX`0@JXTSRRAag?*V1o7g99=OCp3k8Z?)^V(PtpUJ\b:rYM19K^eAL4Xfs/pqcJ"ZA%f %0-!(rCcr^IrZ0Kj:T$P,%D(N2$<tao0m7nRZdKkJ2Of-fi:A$C?@./"MlXP[0&95dJ$?S/F*`2rc'?o@:[W+JEp<K<h-k55p0%Ce %lWa1_=)L48IH,eMeWnB$^USc7]&,/!DC,&#F)dLo)F_"*?e8XlME\Xtp#hSnDdL&_41dMbQX!iXGOt+^-W=f&GAlmAfACK&]Ts!J %GDFdgo[d/F^3G(a<L__rr;2BENH80Ymr.Zss8(2JpAOQYeXahED"Z*6]f-aGjIbjYXCn.g?i,!<`UfpIl`[%p>73OiXJfG?cbBA: %a42QnQ"Ple[+Xli:H,Jjh>$6sQ.a=*`Uumep,C:ShL;kS:*sc:(Onp*?iBW0=<$'9I<Xf'g7,eDS)X=T2''GZ^>=o0J%L!nX"U'N %+$\ghpZL-m:]-hKs)%_[p75"1QHNW">CF0^l'PuUY.)*ZFKYK5r5JZ;^AIVOpJ(APlF#/`l/rl7^:EmZ`LG[:So/WTqd83)G5'HE %=8VsQ>Pr2[n^abc2gfZd?1&HViFfo1)?,#-HYmlmX"Td:(Ot4Ih0f.rD]&M.Rof'm8XI`a=.fG5F*6:<@cubDqc>Ee4$R$n(<,Cg %X)rL<^Cst%HR0.bp=JcYT)!(N^).R1dqJX$Y^<qDf/LEnrVZ5__:ki4\AKtEZ$GbLpWg0BTAR4Z\X?fk4$VeuhC,t!T.aMt[f++/ %AF%^:UtZjKF8gf0jBm@n-2A^6SpriA4Pa+dHQcbIXncd[1Q$\Yo`"^KhR1Zg5.UIe'Q;+`_p?bh1g)jUD>icq-@`aSA)j$Wl.Y`5 %pXm-*l..NS/:!B5nQYb"ki.R@[k8um?bO1VrB.iDmHXDKhu##U)$]I)Ha)Z)/\]Wdh(XAOl2eidY<P@K5peG_akHSaR;1(3^WQ-9 %o3_Bq:Y($/\Gkda^#*`#H=)'.Q>\qbp=e-a05mpUH.1YTIJ?tFrp#[morGi2r:JuIs3132\%_b$X8O_@gpO8$qX`IQZZ<E.rRr%R %`FSqtj'17nT>'(:Ko7lR^&"6LKV"OUh0KrGI(#>hGB`*0FSb-6G3/_pY@N>Z2k9#Zn\2YXEG\VP4?o+u%r]b*bnCm/>qMVZHL^k2 %q2P&E]GB=G=8]gN7mluk,N"sF]_Z1-?`Qujmd2*db.3dRbe#J)GLK>QHfFkRD_&`Uq0C\D<"1b2J%g9'q^-gbrN33cg6_,Xl1@k1 %G^01%(^R#a9ZH5^eX(Jifko?,J(_V/]sk:rkLZHKZd/e,+9/cjDtUrmC\Kd!YO7]RHuEeIUV"526C?qf27U=Xb-+%5qp+poYCF=\ %ooi1Tc])AtS0,`._><Q.k6Cochd-D?8Y]?gSkfiVG.q8>s67tgmG38/<Ro'hff*t.EqR^onu=dA%<HL3jW>Nj(I#P(Fo><A#?O+H %nL+.["`1C>(U)`priWs,ooG]*V>f(fRpY%/Hb$hrqY6Dhl^*CYcYp%?='p?GY<KK]H%#;;P<6I;>NN?O/Y0Ls0tR$fR#^!,QR:T8 %)kZ:p^@Q-S?et"^rU"ZQJK0bKO,Wo++26D"m.'ogX,f`^?T-Yeg\]^2^FunPd@2dj<q!_H4C1)#@,^hVbF;:bcQ@6fIsVg;Y)G"u %?[oK[`QtYJi6fQab6srTOjEMZG<G@bb&,E%WiM3<hmREk`m\;k9D%r=etjbml[BVaII7X>GFr0REBR+Zf@@p.DN;?HiO@S:Zqo'0 %ani\t?S?>&]B(ZdYP=F8?]Nh;ao.^lejakY's,prp%^/]YD-Cr2kOqm/foIis&$H%o@)7^o1qQ^Q!F+NkAG[Z]6P'>]&C,CHp&Ba %?25taFM@WPT\W^2f7&H+Knd@FJLPd(62><qGVf.2^L!8)_[F&KXg+qWCWdZN>@)fD]_m6Q(7JM"4;lC0=:_T=6_eSbIeX\kYMI1B %0_cUGM6#&-UNn7TOtl`MnboP0./6Jb0F!6aGll]"l)]>lF>6!K)"ODfb$T;2d,X0[ABH]0nZ.&W=7oOu0a>[$*5B5aD4#pq18!MW %f,EOE0A_[5QhJ?*0t.QakN3P3cX='D^?%.]T%_Y5?,!?<X)o*5I(LH;d^f'ThH7/HNa*2,=oK,LMD)+3b!!1PA"6q2T^cXhWd:_i %mob+_Tp'Vi?RdGDVW3"$c"R#_dA5'Ye>74p$Eqd(Asec4m4Q+fO/?,G/&0BC<7ds1GE!Wl>1FSbY*I"oM:Dc"j_>Xk_n\CE8bjqW %169lN8Z0-SL*QGN9Y"MYb[]l6`ZbU8T,*ILqe\]'&C/q9n,aKfUV)O=4HMdIqSSX8q6Q>fSq6p1lFg9$N`R=9H@=+tQ1oIb/r\=. %cgHcODT;5$V/s,lh1"VO`1>3nZH<*TkH8[7gjAVRc)]70:G1LMp>+>DPq@L:&18Ao_7Z)`D!-!t'Ea4GrX-Bl:sJ"B.kLGGnh7Z> %GN"<E[Ai0NpR<,&l.aPPMB:.DTSoNe/=e:=GGF0KntfF@qRs(]bF3?PHT>2V1k,@Ep$pn0SQcmh0;!1_3nh)HS_H#uimEH`q;MeM %r:&dVeHap<LQGqD]%UjmN7U<<Kse\&+`%ioqbJ<9(-gZ([!m5qjY)NQ=ES!NFD(:'o5D=4X<W(<md9DpK>CMU^Wh/N?e[fJ"PmMJ %B\hW\blQ7HkmlpY.%^Dp\@;J&gY(W1_hUI$Z2)sh?-:o9nuj-q<e_)aKpL"AQ(`MZimXi7J%,8^A,Y$B0>#,/o?13Bm@8OjjkDFu %5:8C=.>gXM'+AchQB,"(I6@A*m`P!/mHgI@=l`ooHbbX6f?4uEiX<IpDuASu[0L&\hctQV]f`rIrJIaXH_+EPaBQFH=#Oe^f^lB1 %)Edq$VVf-Fr=m8(:%!;_S;i(>VGqqlKDW;F!"ZgcH-N(Ls4btOA"_B,_7d#OT^@XV^V%3VXl"S)]^k@_XX$MVBD:T$rUuE_5L(], %ggdh[[D.+$rp&aegR_2ZX="gmDt*sfVM[I.,3/Oqg?3Ab4'0D@cTcjRl,Kjqr\)C(C8]S3^NSkJb<M4[J+N*^[h!ERDgAVZN@O`# %0@$\Kqp"/6)s\<Km>$"o:Hjhs\,0A?UWn-i]=!Y]Df\I`J*Y^_qrYppY$AVZqrLK*=[0%`'jS;Yp@eJS0A8X<<M.qpYdF>@p,9J\ %8c;"1"@Q>"G=E/sO`)r.hq-EhYOO2hpM%C1P0u;6UV"//mDZ9#omX4`4=P/S^%^Mn?@@4m8\=ErX,h1;s6A4tqD>bYoTMnu5ZZh> %q>FiS/b_kdn9jT'2m[p8jQ]sq<;g$MmeJK,b\k,LNONe3IJUoT_ap*'dD)iug4/n`lBA-Z(]FS>7a]5:2cDr0YEo?8Si:%.SZ>4! %P?3P,QoMI#@]-]gfa1Gmg9`7LI=@q:?i>A#.iUT7p@L6IK%'VNn)TH9%nB\[f%p)B`>^IZqXS$T-d_E'h/5,Gn(QpI2_q"S?#J_I %pX`IfD(jeZo$+@V_\Mhis4>9#X/81tq3H5SRgdn%Is:R_c0#mqbARSLs+:':l/6H_?WRa6r49d'T<.EB\D_A2QJh:-[e=)nrSC?C %UY2c-?fnO12cdW\Ya+e*55hUrH0+j?_lKuThKjVAb'+fLY/mlI]2r30kN'XsG3MHp[Ii:b]<u3lhWsEQID:6g?X4c?51gQh,6)a@ %q\6DJrSEb8s8)b2qp+TiH)9mQi#G'<]pN+-KPGfOO?aqq5T5=$]>+;W+8[G=`XU#nqd.TpmR=A-8>FRG1c(JQ-Qdh@2*53@]<ddC %jSHR^fdV?<LpD6R3p!-Ir1NuX\8k0b-.XmJ74a!V9j6P3_#6p?e',X>R.O[-54-S]IE>FenN$*1qACSC_2Q.?_7U&t)eM1S"G"EI %h7u8nG,b$!G<ebWPhl:h8cCL.G'>#9rW/Oi;a)qjIeeWH(GGY+QssHaF_j,]jkM+eP"3>kZPMPii:^7)ja1?CogaH4H!.l#ZDiV. %mWP'.?4MsC&'bQ-1S/jF\?R^7YGC=Pg$\Er2d_D8^,`.O,.>^>9%.0VQ*;UVOE^G_90GD>kQqo9QjY@;itIiAh>f*q;Che&amC]l %_g3a1A6OanMB\q&]3)77]J%"SERnQWh-]1+T8u:;p@8&_LqJJ&(DB$=R_e,P5#KW%>r,V(;Ff:DAgbt:"K`9JD:nEOV(_.],bE`d %Mng>/EUuoP<Zc/EF0U9_2b:Ps`#)*j\i^A5D8hf"e$DH_DJN0\X1\t^k8BRU^W-l=#C4G;b-=&Z\=Frjeae@uq+etJ((&/iNGGuE %HDt#OBJN3Tr9"V9+B9plbeF5n0j!ZA4]_,sU7BPkl"tI/06d!WjRZG.1+E-P5o*#X.rZ`#_P<:;\+Xu)o*h/+3\P^#>WTKF"af?G %:"g1R/.,%jZ!N7Y/_t/R(icJm.;S(&>&jCoONOkP%uqanNH!^mEZ;M-etK8\$o]*5Jg8-:P&DNZ9UP8t=9%fXDtJ['!RXU$IU8KC %-,%0_"mD?fB_dGF(U&<+-+oXn7g1E.MdA(Ef5n_&/U\u3X4#5j6R8.bI@A<^eeZs[.ZkN$q_48$\h=8BV+)[M?qduT;qjg-K:bmg %Q%-64-hPpq1k-kab>A"N+\$:CV:p#[>j.g1UC6SRr>FluJ#Q;O'S3\,0;,]Ho[p'^jDbUjHp+7KDJp(+@Cu"faUhQ7i<`V@G6pRA %@CO_)*%p9Bpui^0aq<Xs)p<n=b$"Vb-bkH2<iYfEC/`&/!gLmoi[Yft]LDV'aI5EQ'5q:+0t_nHD(Xnds4(B.kBA)K^mFC&kU[d, %Qce:12.g.V,L/Wblo`MKTcse8R7/10DtFHgL$S&7WO/.KOR'6*Ca/)Acf("sOl(ON\:l:X\WodFrV=AZ/,5Y+I6^:'i*:t.dro;) %+Y)pe+>:p%i8nI4H3^dKZdGWU*M\:2E\,flq&d?"!iaGa]Go#\o#?1t'Ht7h,.F;!NOOi,`sWi<Mq,GVOU>A*G9Q8&CZ,fn(G[>m %[^Yj(b1W^=Kp,3RlI4)e+0>&#g%LUi/V[`#YJQnXnLLi.En0RF]INaUKr4DZ:/BoZ:CiN^p8K"BgeaaB;XNr9!4K#H+6_Z57SR&S %&oRe5UsdS>A$(%*MOs7B9p%ta![$OWVWq*)Y@E'102ErQ9B"3,(MqH2)&$*oGP=6Sdm&Go]qdC!]"8e.ge^2T?kTO.*AG$>pZEQb %<hI-R7ussJ[YmK5;ue9dE7,Mlalun+S-biSrT.&<p\-CDWm./rV7P,I_(]P^M&YPXdm)PC.Ne%8o9jXt"K_,dj0a`L?s,:/Dk08+ %oB)\#A$A=Lquqf>\:-K%[6Z)j=V'k$J:[:=8_oG>-YbCDrBV;/F2@K-TdXIf"bHN*l^Zo95qWCMF6GVWTD#BEG&/-Se9L'cLoC61 %]O,&)%dnRVjCuMVO@M>b@FmOK%"cPW+)s7ual$qZOAAgc8!l17%(b0"QTM^'Q;XLW^+1e`,7?_E[*:glJ1^V=$e33N&517hltV"Z %J"$RrX(mn<+5_KGcEZShK5iVlTeIDIHn]dJ>BA*aSH/;pQ-*=*1G$j5q:F%reG^]??C^"9lRZq?B(Qd!-"VBT9EZAf/:J,X4"C8t %gSS/0dmi[BN5]tVjE'R\3*hj*5Cnl?3a?!Uh`bgec94b6dKV599u4MWRSW_V(?c.*ct\L$f]-2K1T:SWdO@tI-(f_,iUE,2FhS%Q %c]5'1]M89*"%CYt(Jo)<;eOB'DD9e+D=kqJLq9MbcsuZHkt@[$g#jA+b@Qu`h>HlA3Jh<kY,1X/%!c)sUmkraHNBZ2A"c-D3D2.9 %m(L:Y^p37O>qaHKMeB9JZIMQs]UdD1P$:*ec?#2eq?\rCJbpj2D#[JJ"/aBb:sk8.JaUt>3uWEc*hb]mA)51N!3F\QQQh#VE,L,N %p6P"+:Js.Rk2gG6p9OS>doulB1ug#VgYBt;`[L`=f=LUbH2#[g,Gb@.<V;%KoF?'p-i\@SDnNUnr9V<8!(ZkFA/Q[7Wo6].m&f/C %A+*&_1)@$`:3e);[`.W-MI58*"%Ks;U+UKrCh&b.Ap4Nrm#HkLqbQ*!N)oNW+B>&J[.s0LNmUY<rbYMm$:.\l\76+1+MHM,V7O\c %'iJ?YD<6hHG7Lqb?:/r'[so/TSG4hGf?tj=pNo#H47\s5SRQsT:7ZHF_@H@<q+Z<(nXX/n#s7af\_Hjr+hk+%Ju/4FpCK=Q[o^,U %\M9a1*p6r0rM78[7AaadZ<*K!4rqa`[O5EkZ22dJXQ/W]L!""7+n31::Mn4Wf0/>5'jdb;#Sqp6!s_p]*r!^X7,!$(H@(^AMs_]I %'Du!`\_irXT]_OFLB!V%:gYB%pUYXCF--tl-+<5%0oj;<!p$!K/O&@Haes)6H$Aa-OU^oNo\q0*$_g>G1Noi_rP(eeZo\2&=,X^. %r2+uc6_t+gXI$!*dJpI3XX.)ig3S#H.kV)=DRYsLnl=YeAJ\_f9K<:_DEC'=d:nHSDidPDSnrK]#A<R0J.-[+DQk]4_sgSQP($#W %\Hbpc-i1Yrpo\ZhJ7D8a=g^G+VEd-<=mg"FPBi1:RpFuf`p='mJAD@fh(ihjh7k8\hX;QUB_(CHHVUQKg"YeWbW`<I+p47IP9pf. %`:Xg)KFTT\\^D+Hbp45\,f0k\dJr(e`#^sc`BPZLirqE^m.]2W/FVEOf5lr4+e,F-?iAL:/b2fr&)YIV)qFCRR=+-Akg%6#/=!I, %a]%iBT)lW;$o_F'5lP^YBnIb0oVL\Y^V;pR!"j./$q/gn0_h4['%HFt1tjMJjP1fP.6m=Hmbc,R)RQ%pH*S0kSK9aR0;YL0E(EqP %M;@PPpp77-^[@H,7#1[6f'iu?Zk=HL;mh`08T\LT#=aH$/5J+re#3gkU1prTIg?[61ssA%0Ob?bgcSFI_37#A]Ib4[B_:%>FnEjj %U(Q#(P7E#77r"_e&JJU?DHBQ^=@oO>aC0nEXL@fYQ,+%!O%AR-^<I=fPAWCd'm&(MXH,G6U6TJlK4Sub/_c]?7"Ho7b2PF0"d1u1 %AXed_lZ-$srU=20F9/+uc%RQ'aT>--dG^/uNCNrf>Fm5raUHkmrr%3"_%=jc@r]X,6kUNr9qH>mX2)X^4)]o<Z)5e7#OD-D),9b& %kfW=0In^VScg<3Ijb\S7&W;hLmOe0`-5u.C8Ld<g,DfU&YINuq0D'c=C*H46rLLfa2.e/#lW+TfF@oTHP8?('$CQ)hSFJd;e3lhF %I'e4g=JC59;o7J)qacHQDgAjg6q#q\A2EW]6DA?(;%mrR<#;%Vo@+QXAE-mnr&+du;[h'@285SZ,95)DflFhTBqk6N>WgTk/sZ=i %h`i?B[Vm0p/CDJ3*@=WOU#qCEHt7TjZCo3`YV`A<qn\cFM'VrW=FXb9[_JF]1Rb8!\/ah-6G>:bBf+4LR-7GYF9YH]>IU8]!hBbA %^5OS.,DO$e#P.Pj;*kq5A]s,]e,)4ikki9'7MCLQbN2iUqp@EX+Z`;Ymt[/=:%\F/qtH1GKI'"e'q4L!k$)=5]I2DS1PTSX99t), %l:@Y+H_89IHhRP(#0<ZbdRA3qa2]aY=kG$'1p4=Me4gSc3O6r1Gbe&Si_JSY;(k]Z:k<.CZbO,Yda.9V6k:5`L*_/Yo12>c*_lqm %L1m8&XGI[cGCSggc%$-DlbCqA2'4t^5dYdK:k_nBN$3K`D"o95d(>:m1HS=`Q7=e+U6#^Tf!aI3B5:&&PRu[>o8CjrId:SPd6mOb %`U5R,W@,H6]p?oPdP8$#_dYZeM*"`)g..VHp1aOUq"KAeqFt!<`//tiU%s9)/_Mkn#'42H'[QaS?,S$b@u9-R_`g47',R])[f3`- %:sU#UpfL/uYtl#Vp[\OfoQrW>E#cK;Se'N35-RhPT(Q@ps)du(H-8F;E%GULY^FZpQsV5@p1h0c@%Mg.G"Keo]:PY$EV^Q[Ub4XX %S^lJ1e8n+&Ps!5Qp?=(^$^gH[LS[u4bV@'-#r.=lYYTb0O4u/Xl1--"GiG?%E9qL7AOj7;K.]=C7^5bTTh)VIk8<`oT!b&t?e`j! %g<bh->0aTh$gc>gkfsgZF"D5>fj#uMdqG!tBADZ)Vjt5ZVk22_iJr=ioV\OdZJ(^Ggj/mEj:LiFMbd_LEpabY=oC-"<q,@>4cWG# %.&2(qS&7D\8YjBn7iOR!(<sR>Z4B]t^E**1++?_J]qsm9r9'>/^N$/17Rs]TVU't&k1a*,Nm+8Ze`Yk\,I5@qf!#8SYl7.r%=$;5 %XGB+lZ$(Y=D!qL+X2PS4IAT#Nf"b'njoX8Y;Vn#mI\00emO]c;-VL(R0LTDOGg72"M+7>[=JB1:q$fs_1#Z7!P7Em,h"!XJ7-?n2 %OZ#0D$cj[_$Z,pl\_V/bM:0s>7l2c*0=:_hO]GL,U96\.H52SX0fTi`&uD^[$rLsb"P3U/-ORj;)XBJN-t)NfJgUo-Ik4G1!U]o* %oN9RS^DtXu"&"le.<qS+m>K%PS"_-reOB%&T)QZ'KWFl+s&8OGkk)>"Y'nN`1$`^VmQDu4(]@t-Nn"mK0]lf8eWq"EGN/OQgj'Yp %BX6-%cRK`X4""2$JKJ[MbQ!d^3p.OWYRYdgF5G5\?0NrmU6BI=S#k=ml!@naPsG^)Y%\bO%eH]W-(cb&lp'@XL*]*S^h3_=D$g%@ %#++!u01ifP5j]9fhhr,`rUVSIQs$'7"8?gB;Q0qW4/q,B4seS;mN_MD%Lq-Uqog)#DJ.M)?j)O60`sFs)sAtYNtMTo%i!)dnL4dp %WF`@^l'/DFj-'S$DT`u>glVY&R`$4;ZQ*Z%pJ[cZ`,tbbgNhp8Nu4M,N#eOIi($?<K:TjMr3\-!o4R1)k@S962*tuhG%I&;If;74 %Hnm&WQ->D*/Ee_a;V7j?C;g(pXBV;Dal;DSZm.Ai<>k53EurGI@,/E"P,t/ETu($>0$e_TSloOQj182QUU""pKX%PtUa3P5@;RZ. %+P10:"7;'461\ss_.dNdA,>4;H^T@ch?DMEhXu;/XP1[r9%kAB**V6oI;$K'N#l7!m\SB1@WeMUB;5dSNg)Yh;$hG$_5J-1IQKXg %(M^;cW4Zq'%1&e=JF%gH>Yi.>DA`fCI,_GacLjesC%?.o;k'OSpOVl+?ca,t^Is&p4INP:#UGg]lC]((Wbi0p'[:hfPfJ3_m\Z6& %FXOrh^g9%/oM2]5BaoC#5qi.Ki"6)@0#Rg)7VB8_RSLXQiIo't^kD9=kY'S/j5[N)V//7VEEs4LM]U'HK'ZXK1-=CuR3NNgDW&A= %]:9N5`7OQb:<C/CA;.!_4j1d[6sqr#'fI<:19b?p8*mZp,.,R4"nJIhh0MDirHUi5V\.-fD>9)lVG"tA3d.]SG\6iJ`hW]B_AdU[ %WA>.OAe:L'AIT"nRpS")CI6UVcnKs7a$79e7ZqmNem>E@(Kcs&)A@$;>5NH&n?S&HjUX(L"t?qEFE;922iqNYNM`sf>Ho8^'&R%9 %>`[RUQ.E2grW;pp73)SP"takJ%Ma<IAd(=E0X/s*np"e%CfM6s4.E[21)#_^R)pfdR5B3G^lu9Omdr)S[>,:<[Zke[Hf2>D75k;% %0W[m2!ckt&:K-s0J&IOmKU(WAXsdra<?74SQIkXp@G)#L_OQ`OQn@U($=26c%;0].-n.nHic9B4mt[<<i6V\#C/F'9)@0`@)SctB %bLeL>omp6g20lOG6tkhLoh#B1es:9s]cRRVD-<tBW::3[m<Kd<5)0K2S('/uA1K)*1Sg=!n*BkQ_4]Yc&OKJY#0ZIj$Ek=8\T#WB %&*?OqAH+`m<^,2mPoR-[06-?`LH[!bAnbN0,%bgfSGkt0Q<XX4$bQti,$s9M;n'&V#tV0eSVKVYQVa$[A>Qu%F3.$:,_'sA"ckYX %/%]?.cia`5SUJb#Ougf[BW6,mE2Osq=6_1'[X<dU"3A;26k>+!<4SAJolDG4;_`_C'-ZP8ql@WmDI8af#I6eOf-aE!(k3"U:/$ou %$hU=;e$'RTd^bRkPQl/YG:'UV=bSR>\_N:8dTUn9fOK#Q#l4Iuoe2!e\oEKn+p;O59cIM.@L6DN?;aQOq4T7\H%Y#P\GbLrDtLI] %h=kjj1(c:)%V/)Bl!:%am^bg9UbLus(c,33d[MLd*R9rSglZDp9)F^sQ=\&[f]lkKas#!dJ>32'W=]@$WY7pD&bO,Ic0'L8k$B"7 %gPM]"W^Dl@0q>unj_\R((-$doCeVb+6_B^\U+m7kK,!sZa_uGOea8/'P1k6"`l+9goWCHV(%*p#[rU'A>2%B<mr@N=6t;qsTsdZp %*$9:LeqM^)[Q'1eR]7MCL*E19C*Jn/To/4A2AYk!Nq$P:#aig"<lI[^q3frnFtosc4"OYR)XXbn#4PT*1o,o&#T/c[l.'HQ?DF&e %Y?EK%Bk,:(c(m+H"<4sZUN*??o!0u8UOcQ8Bf+(M+1.eKUL!XIR!/+;1t[]bfIPd<9JjgpE,ngGJ;HNo"/8NRAKuDN(5<=H2G1pb %/C(^-B:]Lg3;cNi!;=(?HocFq25JYU.tVpCE'u9i`WND=c%<rAbaOctM86.E/$g>9Mtr&j98cR)f,,oDeg*g]3";Y<N]PW1gC!>' %!U])HJY65`*2k0GGNF"d6$JU^AOJA+DTiAn27"*NnTgdM+l3[E[lutK]g,,dQKNng'4:3.XZ&o2]>3ihYF=g)GonSR9YZ!?gnFF. %Xh,F?2=3#ub?YObUW:(b[)23afC*0j3sb^)eI$MH`O)C`2jE2-BallRl.uk<Hf8'F-`3knD[f9.K),_?LW/\HU?!ae%0LARN;#)+ %,%RNO7J*_6e)RKpq"[3cH<7SK?\l*AT5-$r0idB(GpX[Lgkc<\V-hb6Q\h:L!C'om17g!2l#`(@@3pNNm87+pdZ(6ipK_T.7=RSQ %\PgDd'Irb;f^q:Rjr3Bp%sf!ha%@))CN_BagD2W#NSSR1*jl=ITWt`g[a?qK6NT4_f4JK"EY.2'Nr>u*YY8Po`SQqU^1AS,FS=Um %lBFnt\6*#&Nm'%[IQu"F>AN<AJt2u^/U-tFqpnPQZhJ$12Z*((&]DqZ;$]5Fjqdn43oM]7M4g%TL9APCaWp"_SSS:\%SN$Ucsb=R %)DQ@)#Wa,4:_/:U*^M0ZqK--/j:QJX[%Im;SNML!"tcb[6RRqfUX=Yt@-H\/A$ORq0m"3>=+m7,:)5lFFRf\ug)a24d"rBuAIrI7 %%LQcaj)a/K80CL0Mi',14hW0'`,2tE]G)YP,@?uM>EW1)#j6_A:[ar%hX.^FSKPpROsY!Mc)4dT86j,9;/VG=WW@`(IMXY0:)%], %:TcGJ4=kX8UO@P_a>qf2PBa5_f8FsP#IJ[]K7$Yf>fh*p"dt!Qd0,n:V/+5:<"M7&7iR!DW$rI7aWEksK4oHJj.+-]c!\-]<ILK> %IV:'n?oN'PUfPMY/]hDGom2Q7YT#32,<dD&J_fhY;u(rr5[0OcP<hT,;l*tp=b:5s+beH(-;MAa?:JaCTq)he;4Z"$;OS*/oW#hM %HY6c7$Df)*.?/akWC.aVTBuZc:pFi^*kQNb.6.m)M64]j!e/lm-I#j/Z)V3V/h@?'?n"Ze@#AQ_C)l,&.0j/]Nc1eJJ$Fm$<d89r %*X!^+8mg_r4#5\o>c2TjLaITM'Q`24B+`?<@Ljf+rm]s&&pkouN1;SXZdW>mL*8tZI,kBb9[V:UZG`g,R+T6TP@KJ(;>#S&2;2%M %'0CY1KjNXa:3<L.''g-#/p4VhL!TMaR)LZMB=-Po*\SmT!n4s5,2SFo9h[mK+T,jr]=P$m%XZuf:Z8PP<E4J"__iR];7rV0V5mJ/ %4EIuHW.W5u2+(kOH%.iD2!AKO+`>Ft#*Z,])PYY6LU[_sQc$n4'O]396D!h"jKC[#>o^%Ym)[]8,*h%g3iZSu+>SP4jPQCapC?2] %`)oV=!4`K>K1A<MOh:E(p/k&VMW`SQefO^jBlib$@<U'-U9"+^Xl*nI8WFF.&^]a(&TpZu7g>LkBlSXDF@j-4Q$4r#5"3tE8No4A %)&+IM-0a5+IYn)kJKu,lOf?eN)4aoF^_4)TnAqgg4p?1k/`jJ-n]2!]qfViY):3n4-G)VI%.+sobQV0H^IJLFcm0YM*$SAhT,5o9 %O[8j>lRLgQlG,CkU'DI(Z6ZJDhh.ad8?oGTi/M;qhRFJ63IKHO=B,WZ4=5(&0IDtac:dHE@>n+i$n^R?aQZ\,6b>+)?+@X7!#aY* %U]EZ&Oh-'2$S(-#1agOSAuO.f3gKMeZFDprFArGnXR$(,aBhaj=M4dj;DqPDna\;1pmoQemYlG3,pjL^LP&QbaJkBD_eHl8ll%u+ %.LZ+CcY,G2%\/4W4IfZ2Wc<8CkdB!P!`e1;&3#2M6!W%%iC)?qkMJ7X`ktC:*G#e%7cWGAD[A*#%k!6:WCXG0%M'pMMrDN6&BUdk %=V!GN_f?qe;rX<<S8G5P-h:iD.OS,.m2qX&]k0Nl:6<h`7]5#2.a>]MG1>G@YcTVQ(u:2Q8?RkE#+6HUAW6o1Fa/\oA\PLDQ452$ %fs,U*A3;qs$54RcKNN.gmmYPXjM==fYCbVB#TAo?<X,D@Yfj8c<P&ZNXDu="D<F?`TG_ei0\qbtjb(AoK6@Y(6C%]<FtpsZn5f[$ %DUZJ!=^PJAXEY\QfIJPaXjQ7DoO1&TRJb$!M?dl+OW(T3Riiml1[\`2Wt;7/b?+q(<$``2C72&@)(7cK$pg[!GK(b'@66q$;B]@? %59^iN@K[ki[\N7/BZZARQ.JMZ&H&B(RZi\85'HY=bHRmk)+pQ@BK]ra'TUK%Qd+_K!Xa^Q(W2qcfD@/=*0WV!CH,D\JAMW]+JQ\k %rr`[an1+><-lgr*VXf,cQST&(W^(fYZ5iAu)k3n.k!jU#4]_2**/i;nHGQJQW]Z.g*6>?=r69C'D4$5SL:%4%"DIGAaq0TgmCY]L %UUE:VMDD\EMQ7\*YJZK?%VP5Y@XI%b0<?)T7F>W.J1bi0IJBtH?DcbGFabf=8R$(#Fg@(i>i=fGR\/m#`VXc1nBtNdT?C;GSU.R! %s!SWjJHdYld,(A',@Vte1@&omA$Jk/1O)N$0hMO1mO[mmH5)7')!lGCn^%n0T*7WXhejWThV\rgOa^(9lo#A^M3:i9+G[0G*e%9k %*79TOd>BS++=b?>V*#!6(JY<\MtF`Q>\-5."O,ki"1na8&u+B3I(+SbKO)f:h8N,V*8#*NLH><r8(_Z>*@t'7F7DE6&REK0j*U(M %M3dT8'eF]KlgX9Y8+]B3YbPhG/6I)FoI!\b;_$\:7D6`d'gut0L.tZ"7U2"uHgK>:N$/VWqsu6c9:],3%9:\tX<Qb,Cr(GKbZI7f %U.>+#(hetNL8ra=K!/[l;pcmW>YM"n9$+&)Gok2oe]:@'W3RY(4&o7)QfKX<C%B+M8ubf8(!r'7SWFc\qNQlYal`8qQR@J2EnKoU %lFn\^)c8[\j]VbdRBBM%6unW_Nr!b\f1T\+01:IfG?%jt:>XHH%@Z]G5E&W"*U4V`Y/P)pRSMuC0KRU'.%d/S^$%u8Ts/Xj+s6>g %3g;9=SS>849daBX]4R3"O6K![Tpelh+liteh3C(-7Pl,8:;cIaL8!j.=?>Ddh\\0j$;79P[mpOh%cqIj=(!rs9o#0Cg='gcRLWoa %#]iLq6.;O3FI:hFFeItO]C]sZ>>!MAktoC!M(fiBLRLFq2O$rnS[9ibR_i."l#=)-Z"Q2k*7KP;P;FSFM&V,F]8C*ed<)Z2/&T_U %BPb*(BKB)pJ;V0V3`NISOooV&RLZ/8`2?Z]cu]VW&VJGPb57)/BK?h`G\c(_1n>8Bb8<&V$;6/Va/Aq;ki32(UAA>fY&;*Xn[^8L %.BUjg')8h4=R76o7lIk\2V6Q]]BIZT7X9rq=,47;eFDeeEG4>FcQuF8,fF4C)AXek5Qjp!TUp.oP&s9t.SruJ:)oY4W_8F`TMq<% %0$AADSOe=^0J\$=.D(O9R;`rUT8;oeon2<n'Xf<s$AHad4`al9/@e)k]$&k8m^Z50P$_/M%U35ATaIirZHO=!ae]J<V^au!5!PGg %FJj&[.fHK<.PnA:.TL'J'Kq>80tPQ`Yr7PgTf_(AmMP;[6D6J`_4tkbJ:"H9GMSqi,c\mf1^m#Sg,=2>qe@Ym(g=qU<^*cc*a#(1 %1&"L94s>jp*hHq+n>_"\C,25Pap:@^&r14L+eU$CG,QR@$uuU=q@cN-\dDYlZIL,;'>[=?Z"$8Z%>B`7<$)(B"EoX-Tn#rgjFaMY %L&t'uk)ZLeL'!@6bNP6fCo2?I+im1PTb(=';!'fXG4nqEUT1aQWYIg3=5/NG8@NVjA4IhtQ*K[tA#b'e\/GoV?u:7=$*8!INOoo: %2J,K'@p6l;Dq-6liSK9"AI$1H`Hn_.3RmK?O=ir\?"QpVT#>V/e;M5m&7c,lo<EI3ij,QGaf#Q$i5$X%7'(_%G;U,8`^ScmiAKHR %"Oi65<i:[q%(IU6Bh**LC8R9f,"17+W%D)YWrgA8.DkEA+I:uE$6XsN&%q<;G@u:LY/]94b7Ke@EGaNHD&)L"OH2GgiE=O[$?q5( %b#?4lWN28](JhtLb1"*6ALcJlECjp7+kK]'PH4EbCYWX-E2WD1F,5:n&$-f>GV]SKH;tEU"cXt#3@6V<%TAkb3af'(q&%ZJ5D&[I %((q+Zm@Gi>SLa?p`>oPp*CK=d/Q1D-9X,U#(01KG1+?Kb6'odDJo=/1R"S=6W$&_hb:r$WQj=FUX`N;WPqXOB+=9Tj,X$tkFtkj. %-Li2nI&D?jgq7$'9IZkhKY$NTSQh@.Vj^Vb#/oTDXJNr2[HG](-4ghCK*^%'PhBcY)2:9i_lMfuIYhKh\1Fo:B50[KJT3:<n[FCl %o8D1WFIL?8d]CCA@t!C?VWuXX2hNfeII,K`g23515uY<aKh?WA.l"2YouX%=W'EKr@pD<d<26&H0WqJ^#YmcDNi%"Yr?1+%Rd$'& %_."QaIk=e>osT]*h0I_Fb\#jkJPVP$)VmpVL=A?HaBD3[`^@@]"hnL?P6chcJ+kK>.`0)kLkGAss!VthM<hCBMM"(s&*Lf^nFibO %.O`li&f;\S`aSmV<a5LToo9.5%C&=;==hr[N#aEOZ+b@c6li\'rsMn`c,C@XOBao#+/9t[;)'opi/$.`3eCcHb0f=`)luk(9a#"2 %[-!kaL,YB,s+K`UU`V<Z@oado?^gIJ==GG3/46dRMrBLnSuciYU3,5#6raAlPS/D1X!?8A_%SDe]9F_M$]qd4k?dQi$c5$:1BI%4 %A)7S08aLdjHmLdmVt)<@oV=Cc1;?P81%unjUQZ):YhgGkk#mr='6>+`b-XaUe>S:c#)T@I.47ljfUG1])(Dd]d6iM@,[I9J@ClXg %);hEf)JG<iYj#OpAJX!nX&,3QXXC(nT3?r>\r4]^J3[=3$CVt":3,s%%TJl`L*jeaP<*uP"MM1&O7QOBgn!RWMjQ,&A8+WeMe],) %b0i$WEh1)EM7%I4BM3`E(>GI>gfTEE.M&k'EU^Pe=Yo0NUBG8BVW-lV"X!*0Ct.R+I@jZu%>QF[8@%Yp[8EMm=jKgL4=9UXb.+Lf %DWm1iVL,F8jXWL;i`e5_$;g1;[&CUrY]qn!;p49.EA@bA[!tc>1kH"<:+8p1%e(Bk1@0r^V5,$lg8Hq4\APFY3b"pj^/!06WLmPN %AOkA4_g5<,]8HfDAR_k!*l6?TEb'Lki1MtNfgS%3*G*pbO\D2t<_6$[*!j,$_8"2EEkZ$PCL#@86)m*fXVS!ANDREe9a-b[GgDW` %'Mtd)Z,6G/OnX,i)5s<6(aO6`O]?!M1o=5@a!!n'attHu<V19)&^-quOQ+?X:6$dSe'Z+=An6^3liJeuZ4:#t?&8V^MZHe*%g`^g %V@!DRPF\iX"fN1=Gj/#TJc\o0!>OC0W#Z&?('@*SXfk1pMF9nqKIP/ueV4-)MZJJN],h-so2At6LbVq6;1NC9JD;%<.MO#&9,AF1 %@D%cfcfM+t(ZeS&O\JVK5/CA#@8X`HYJNLQb,84$c'Y5Q$t_oa5g`r'cU8nW6Gn`P?.MOF(Ie/hooY4bb,;7gV4OE/6E^IW<".M1 %Q:4Em@!ks=rHCWZNOTp"AR.N#G=1VtlR*O<!I$oilM>5<;nBE?T6sYRX6t^/eFf%"$DC8Tg?\U/KhqD[W%700.8-rYFoCAW6TEDW %cFSHs81oN7]!>?79S=aJ0".pTr6Q_'MlZ1?M)oZSeaJA&+NV-CncM3iW*WES%gbaj]@C.L@oO[aO`s)u;:eVCjtA>6Y-Y:'lpb'P %G;03bqT6@'2;LMD;qFhEW/JlO^7qbP$7<kJ4am"u%)BMkWp;%i$M<p/;:eT-TOLgTNZR,j'Tm]Y>sF"A.B)MZXNj)rW9Yg6L8;>Z %TBOQQc0uF1X6Z[>HSqV%T6sX':6KbNooi1](*HLteb.tm>:<X=giIU\>sET=dMAnbFo>k%g0kjWW#hR8^(o2kp_:lmWNO:>X0*Pr %$?GrU7<;_`oom3T-t_3d[+=o6\)cM-#=d59_sQD9Q]]5Pn67Bdq/[fYBc/DNookFqMmE\lYNmRu[e-qOD*:("8K.AMHj2,DY,\,n %H@0Hm9M2cQ>iod7/&`l)V!>#H-ZX$1<:s`46i--FEDS*p\tZe%qT53e(`Ce-f2',\TC,pQfXcMmI=3U2qPh9D)Go$]^8dgfH@/ef %E$a6/ZEE*X@!Ft;562L)Fo<puahk',\6I7cf(G5&mum$H=4d,/:NVcpPch1TLR8lD<Bp;+iRHKP]A@HTk*U>9'BWQ!UTP]B\563( %Y0J)QeFf#j#XJV*I<GML%7B:MWkY^/4<TsGO`f:K'+[uEeaL?r;gjjp\?6q1#\%TeKq#/Cf(DsQ_s"8h-_/<%!0.K!(:-3PFoCA[ %#?_b=@=VHlh[^j<LGq44m@fH`plO>_p!)9j.+p,e[s6N-I,_gB[O@<9Z]+G%Rqu[e`5+7D.@-2sZpX[K4CcIJ_]m+jo3QMOD&shn %/TgbGK5IH&p'gA+A>$Dj1G;$VQ.aa2f)2=bD%:q%[ZU(Y]1up=n&_K1gZeTV3=<A"=oGqX>Bcu3bWME@_r/uh7mn$"<I=%?pDi!@ %qZ@KDO8:(CM&+Y52uJ#DZrr5Z$I?o`h7VR$]mb/@pX.fTF7Eskc+>0r?VBRmYtV:J^!5Q^\_`>+4(=gda6q3UpNI*OfNF%CT7^=l %Fo&NV,+IO8`NFV-gR7GPg+R'QB9Y3-^320$FP)^#WC!@F;P,%RZ4aK.n+W$AF+6`nedg8.Cj(W[#*0bPZK'%0I'<Ng1MJkehL5S( %_f,^9bpBJ#[e`mWM"%7MDp<8Ws7*IM#AUCE,ciA=RKNq@51cm2Qpie5%/4Fjo+JL"Z"'UBNR"M5nS!>rlXXkuI=SVY,$u_`C2TV1 %,\d2c%Q0lkgW2P%=)4pP9VOOCFZKY>>Kl@'ro6IaZ>V&4#7U")-ihN^r`6k^J6G>1+WDY`-PK@'UD?#(J7e>bo%]/Z([%)hi0^\1 %!f-S'Q*`.cbHJJG#dA0:XfPiT_gF=RSq2&kG3<J*nsRdrB,QJ$`r7B1gGJB`;<@g9:m1F0f@R:*r6hX_:LLu!.mF1(HC88k2VR'; %-RUZgFM_jInWD5;JZ.IGrY0J&^14s@p_s&JGLNKtTQ"XMn7Ta6CDa)SlsbT1pnHt:s,[Raj\RH.R]VaEP*\.*c>'HsoK'_daref4 %Opkm]0"Rg^F72D=0mHq#R0J9$6,k-o0XVWO-K=s%ki3b=$?+b4o7L4sIh9'EIc\ld*eN1"&^.UT`m'"R;hk0uV<AXVK!a3S.U^d/ %::S,2LE8Ee=6TVP$P["13Cs/f^?_6(T8u"Hm4n![!T-a\pkg#\^)$t(dgNQk!p[<!@-.RLh;^j&_BZaE^^b%Ka"H2L4)@Rh*PnA# %E1k`fL;@di*`(@U[_ep`5f!Ci#5V&c/JF_u"L(,ajspV4Bm],\mH@I4Eo^;p,8n>#oU^`5/a>_<C*l5*f0r9+-:2p_B0831XK.q; %8gZ#ecEZStC@dCPebig.^#3%b3[%h$6E\kkb0!Y4)W@&;"]ULRG3WZM5$I;U+eEfYXOtjFA8p,$\\P+/nEfBKbXS:BZ5*N52OfGh %:Ef%K>Bh]e5:Ekms$d3VX_mA&lh75=le$Dh+5/8Ua).hOj]BpGo:O<EH=@q<+h2#Ls-_!d5NGK@j_RnZ$n9QK34F$QZMDc>K:B9] %A,!6UVpsCb?/<CWjnotlfnCHY,:U+FlRsf[cg/Ft\*=ZWIUdq,XnI(8b[.3")/a,1N.SIpGq&4QcYHUE.Xj:-\b)GVi7SlqGoCeQ %ZaZ:igrj>s.XlddbUe*NDi+$TFQ,VN(#&f<>+Bbu.c`FOS19aO_USJ#``[aB[-@hHC(G5'LfI/;ThP;EQ`<kc8_=%Q2&hqD"F]U; %Mrc>5kNp.\Q6,l;Yeij719e.\"$`)A42&MH=@f@i^krb$J95Zf]7-Le(QDZ(.k:l)9R24t1WVo=k2l7$&H(OAK\uT>6Oi2+ph>Qq %<^qQ%3iE7YGVRK<<2Hp!MO_/rIX]X__K=@7cqCMhB*I13dkV^2(5Wq'SX9;X)t_Tp^B(FMpe/"S=m"lk7G/s.kc=e4U(J(fk"9%e %XeN!(nDG?!k\o[u!Y0UFB+1]bPOk/7*P1->cZ]oDIX)]rg7]XDiL;iBo$YkFf<a^p.Ri5]a^r1K-nQE/?tI@5<hM+gnU.5OGqDEi %Yq9b(naT59Bh->`V^eE=?O=INM`5<Q]KDU*GtuYAF_SV:I+X.=$!kP3h0A#i#9[NM@V6J8NCitN=J`NMDIPq'RlJY6GJF8PS/B/j %rYDLAXCM)gF/BIh+.eP?W9d-VrAG2Unps;>'@@78D'E4(n4g:/`H\0%S24o>)EU9g^HrpCb(kZa#i-:'A_ok*9*V7T2uDFZiW4DX %/BWh;>f?H_Or6'(N<W`'488$3Jd()+^]V?4[?N9sP+W8(YELU@c.S6J]F!i5?$5UE2_FMb?[So/;`HEno-R:G/@U&$5<'U!^t,". %Sqg]LMH$CJW1gbOk1IcaM4,;_7LfM^jHKCeIn8#1hEsX(7sMBA3r@-S>hC8N$pH[-+VN^9!.2$dP_YuO@UN;73j]("C(,ei3"6og %-:mP\na]AhZ65ZaE]R>=9^a%@hB"$0*&<'kC)0Rd,nm(*?j]l[Z<qQ.3#5KNrKc=nNNZk=!@nCKZ5k1.nV8D@#GG'maF]J.(/>>Z %J-p^3"Olhdf+V>PjI0Hfgp46,c9At!WMSV%dg'%n!#7Xkcp/i;-,ls6A.r?4=pB)mL6J5;0G[E`[E,^R3#f^=OF1HeMmO;ub/+\L %0""rVqr!c>=Ej=`T_e^LVH#kNJk]9=m2:,/bZaq9Mn'sei>>./$J`Soh^+K(^NlZ+coP7+N.ERsYG)%X):Q.USO/?B.:^6N8$N(a %`\,2/Yi;os.dY',O:%:(?mSRfj>`iV2Y[J%eccUL24TcmK+"N(q7E?M21\p#$I^Hn.(]3,\5&u-_Tc3$8t'8TRLi/k<iKVMY$CmX %?9&FNif`rm]_:I<L.fM^1cn=I-anTQ@3fa+c$F`>j949A09t0RQjELo#j(WW51!3,93]!X81!&HG\nncM;24D<831)Tc^?BABZ'? %5Gm`Do<9fHCbS_Q`U>"dHG?uu^_f`%*qHPuB&3PYNQ:4'jl>LiG%kk<IfJ^a9:tTS%gkEd_d>3+.WBtLd!ro3![mm0G6.1(W4Egl %T8jr)]"RB;s%GGH!Eo*#Il8MP#5;jW5J*oTq)D\*H065OS^i&9fJR>5&&eT'U\J@NGgHoFkm,EMfe7aFQ20Ki,BR)bCpia'K6q2I %_+N03jhC<lO3o3P#PS4iOp$iS.Hhh_&"FXRpE[DMkV$%t2+-k/AkIZ]&](mRjC)A_D1dpG:HiZ>D';F#$1XH[oQ_OmoFWUjG+M6\ %0AQjtWXn`oCpP4%K-36kIEKGf',ePNa;%@mcU9jDL'm1N--4H59pE=_f>pA@DTN]a8!#J_nZ[^9(k8hN"\k.@#+?!oR[#^%CD^p5 %P(I:u!UCorl/(i<fl#k7++KnEiL-PSEkSm*B0Y>tA0Q8BC"S_H:M>"\\PDbXR0g%uYmH\q)<`2moeXfA^"%^n-`Qb.&7n).\fpdr %BeX#fa$O@hFA.0Z7W/5eKk7Kt55PQi[hYY.*XCSN*2-D-'p^F9EP"aRCZ`t#Ab.YL;_/u`Y0"OFT2R=;G`_B9L^$S2Ft9#;bj_Ns %(Ut2IeX=*5gQ7HMY>B^OW-6cSAmkqRGs>;dhUur(6Z$-*o`)Y"]S!\cJ&IL"[SOM_G\MNMG=lcY'*6s+,rrF$$7hi,0<F<6A+;YC %I*AFq,8\7*k^Y39IPs"3;gL?8&+qrK!k&bc4i#ej=]ZW2%n8'D/Tod-p7,IkWX%l5IOGHJ;(t,JVZGW^#QB\Nl+dJ_Z@fUfM?4U] %#cD*/cJ;X@jF$U%O&,qlH*Z9C2DVR_N2IO&$ImH'R:Z1SaphKFjo/\#*sOg"O.bGEWgVo[._pd8Bm?*g\@NVCeqa!b$'a`>%7pc0 %P[>9Y81mttQ"<\[3f2Et5V'Ys_!i,<-@_uT)gKFh-0Ki;WWdf>SQsl1s"7(p>:UE%Vqh8>3D,"f9D:b(!m)Tcnoc"3UqXg^L*iYe %q;)CsDa1+[V:tD+*$!0%05HFmj3a>aKT+dkSklE+raGiuos;C&RVkiNHn?3%Y3-a=^K>Rns6j(DI%:0Olf1_)-BN-^CUF;,P`O(: %ET:U3(3+ft@^dl=gF!CRMqiild&8CX5*M7CebYf(Q9NE><o>66N1+TrBD-fS<e4uDq=#&0ms%#MHUCcem&V8@nBX;Y,8%O67=K#5 %6K,A=(AktJltJ=a99#CN/b*R'-_3lL7$M$dMs"@'n<FJ_o5BW:)thY)"chYu(3;Bc.#QUailm4_1b^MAG-`]I+#3WoNY`P(/qL:[ %8r8)OlcS>I[ro%?a`7p4G7PeNR=4o#h!AnNWb2"N\q_?B"M=8(Vj5u,ho%p!s7+AFe%*<OYI*om0c^_>6U#T?;#>tP&,FQq'6sI7 %_*^D.812:QUYm:;jT>l4'0JB=h,.$5`OMV;4iVkLh4fdg+Y$k*6Z9u!$rI$mR%A&/a:K(?">XS.a:K(?1`7>i6j4!-@ZRc;6WCkJ %,g&5(,%QK:(p_L9"%.gAJ0@&k6UQU,J0CP,@8t;Z'efcRCiIH,'ekkY"`2d21.29S9n^n;6WCj_G$>h&1.29STh[L(A;CR,Z,n[( %L($r,1+!UYaH.Pp?jPAuYouK!;bQ%t2^i3m$5bP$;'SG_-oisn7Y_EF]<'P9$rO;YE*4+o1=YEk<ZNq`28IpU#)3PiF]iJf)5?uC %'MU8:A9^NSq217W.UXZh0k3P)3b;!+OQo``N!gM0/Rt59L8Y=?bEEAE)<,2NfT77+@*"$j$k!qf$R/ps1.29S9n^n;6e.##\jD.M %J0>^s2CrBplGH%%=a.pu[6D!p6E(8/UA?"ZQ3N$OF_OM!+[aaCF:ReG))B.N!(EJEQuJl="k;oGA?KfHL]Zl8"@A-jq#ZQG":@8K %87/#ESj:T%JFNd]isDO1lt(Qq`cqR8!#,!O!_n?\0@1P3+BU;&^-H0jJL3_?(MJaTnEfPYq#ZQG"IeQ,?<!/>&?nM+43tXMes^13 %_ns[nhAhrlS&Hr[FTjF*og'0;km#"KYN72R^4cn!3jPb\2BWK,RIF$XFgHB?BF1o*Z"V/#_397'.Zjog60r*BMrVA#bJg2T!-dBU %cq7q*KufQ9]ERMW#]8"@`U7iFc8m4>%g/>97]H%U],\MY@:&!cNn-FbX3E<i=pMaq,'aY*8p!r/Ng4[YONq1PHOh22"=pSC</;-N %V9l;-Fn3kN?i/9LDt(Q#Ko+^j@fg8WlcbRWVZn"aqqJEco,/s;VTXEs'lUV-Z)beBZDLj!rbB:-\@eC@UO+>>!8k."a3tg<&02Q& %?U*l=oY6<t.<rc.7tUd!^[^AZ0U0'R7AJe%./^M61HF]DDh>-]k1W4^"8Vo#o^d)#frV+Ks5'R0=1qY@>:\O*DO>Xgi8*-,-g2"" %#&f,a/f7J+K-$%Ij@p]nhtrK!A9+<XV[$.^V7ndKCgY!Ls+3K#i575Cl9@4iS(>jBS\1B.T0A`2Z)Bl&%#8aF_3dG!%7P47q!Z)) %TKa,#7W+[mGG/Qo+,b\YKq`R:3(?AT6K*_b7Zt$G:k\HgP2Y%f0M2,_8GM>b'FI;,O^J<2-5,uA'!X-8(A0'7i#OT@O%&"DdAT9o %,bm<gQp2LH7DQ*Y_2(;s"OH"eaADXYQLMp.#tP*p#5fL#qkHI08AlU-1I!mL'-dC;GUO'5*0'`GiE.)4"@`u^,];TRd(LQH#;hc@ %`e%T]r:,"KN.;=h%hW53gfI5<.ultI"P9*>:QrD+lC)CPcV:Y`VsC5SC2+M$;#u89:T2SEV!)gp[HQtT5:[j9?\dnG/T.HOp#\4s %0"0][c.@Da3,\GJS&>!_5O]W]POn**"<T&@rs'.Kf<k~> %AI9_PrivateDataEnd \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/logo/Comma.svg b/ThirdParty/CsvHelper-master/logo/Comma.svg
new file mode 100644
index 0000000..4d4572d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/logo/Comma.svg
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ 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"
+ viewBox="0 0 380.71732 576"
+ height="576"
+ width="380.71732"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ id="clipPath18"
+ clipPathUnits="userSpaceOnUse"><path
+ id="path16"
+ d="M 0,432 H 285.538 V 0 H 0 Z" /></clipPath></defs><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,576)"
+ id="g10"><g
+ id="g12"><g
+ clip-path="url(#clipPath18)"
+ id="g14"><g
+ transform="translate(265.6133,416.8525)"
+ id="g20"><path
+ id="path22"
+ style="fill:#00a650;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -55.621 c 0,-69.566 -8.253,-126.631 -24.72,-171.189 -16.479,-44.556 -45.017,-82.386 -85.603,-113.516 -40.574,-31.124 -86.502,-51.874 -137.773,-62.25 v 106.196 c 36.619,20.742 57.374,48.524 62.256,83.302 h -62.256 V 0 Z" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.csproj b/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.csproj
new file mode 100644
index 0000000..18dca20
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>net6.0</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <None Remove="CsvHelper.Performance.v3.ncrunchproject" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\..\src\CsvHelper\CsvHelper.csproj" />
+ </ItemGroup>
+
+</Project> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.v3.ncrunchproject b/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.v3.ncrunchproject
new file mode 100644
index 0000000..319cd52
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/CsvHelper.Performance.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/Program.cs b/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/Program.cs
new file mode 100644
index 0000000..f884759
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/performance/CsvHelper.Performance/Program.cs
@@ -0,0 +1,409 @@
+// Copyright 2009-2021 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using BenchmarkDotNet.Attributes;
+using BenchmarkDotNet.Running;
+using CsvHelper.Configuration;
+using System;
+using System.Buffers;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Performance
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ BenchmarkRunner.Run<Benchmarks>(); return;
+
+ //Test(); return;
+
+ //WriteField(50, 1_000_000, new CsvConfiguration(CultureInfo.InvariantCulture) { ShouldQuote = args => true }); return;
+ //WriteRecords(1_000_000);
+
+ //for (var i = 0; i < 10; i++)
+ //{
+ // Parse();
+
+ // ReadGetField();
+ // ReadGetRecords();
+ // ReadGetRecordsAsync().Wait();
+
+ // Console.WriteLine();
+ //}
+ }
+
+ public static string GetFilePath()
+ {
+ var homePath = Environment.ExpandEnvironmentVariables("%HOMEDRIVE%%HOMEPATH%");
+ var filePath = Path.Combine(homePath, "Documents", "performance.csv");
+
+ return filePath;
+ }
+
+ static void WriteField(int columns = 50, int rows = 1_000_000, CsvConfiguration config = null)
+ {
+ Console.WriteLine("Writing using WriteField");
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ config ??= new CsvConfiguration(CultureInfo.InvariantCulture);
+
+ using (var stream = File.Create(GetFilePath()))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ for (var column = 1; column <= columns; column++)
+ {
+ csv.WriteField($"Column{column}");
+ }
+ csv.NextRecord();
+
+ for (var row = 1; row <= rows; row++)
+ {
+ for (var column = 1; column <= columns; column++)
+ {
+ //csv.WriteField($"{row:N0}_{column}");
+ csv.WriteField($"{row}_{column}");
+ }
+ csv.NextRecord();
+ }
+ }
+
+ stopwatch.Stop();
+ Console.WriteLine(stopwatch.Elapsed);
+ }
+
+ static void WriteRecords(int rows = 2_000_000)
+ {
+ Console.WriteLine("Writing using WriteRecords");
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ var random = new Random();
+
+ using (var stream = File.Create(GetFilePath()))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ //csv.Configuration.ShouldQuote = (field, context) => true;
+
+ var records = new List<Columns50>();
+ for (var i = 0; i < rows; i++)
+ {
+ var record = new Columns50
+ {
+ Column1 = random.Next(),
+ Column2 = random.Next(),
+ Column3 = random.Next(),
+ Column4 = random.Next(),
+ Column5 = random.Next(),
+ Column6 = random.Next(),
+ Column7 = random.Next(),
+ Column8 = random.Next(),
+ Column9 = random.Next(),
+ Column10 = random.Next(),
+ Column11 = random.Next(),
+ Column12 = random.Next(),
+ Column13 = random.Next(),
+ Column14 = random.Next(),
+ Column15 = random.Next(),
+ Column16 = random.Next(),
+ Column17 = random.Next(),
+ Column18 = random.Next(),
+ Column19 = random.Next(),
+ Column20 = random.Next(),
+ Column21 = random.Next(),
+ Column22 = random.Next(),
+ Column23 = random.Next(),
+ Column24 = random.Next(),
+ Column25 = random.Next(),
+ Column26 = random.Next(),
+ Column27 = random.Next(),
+ Column28 = random.Next(),
+ Column29 = random.Next(),
+ Column30 = random.Next(),
+ Column31 = random.Next(),
+ Column32 = random.Next(),
+ Column33 = random.Next(),
+ Column34 = random.Next(),
+ Column35 = random.Next(),
+ Column36 = random.Next(),
+ Column37 = random.Next(),
+ Column38 = random.Next(),
+ Column39 = random.Next(),
+ Column40 = random.Next(),
+ Column41 = random.Next(),
+ Column42 = random.Next(),
+ Column43 = random.Next(),
+ Column44 = random.Next(),
+ Column45 = random.Next(),
+ Column46 = random.Next(),
+ Column47 = random.Next(),
+ Column48 = random.Next(),
+ Column49 = random.Next(),
+ Column50 = random.Next(),
+ };
+ records.Add(record);
+ }
+
+ csv.WriteRecords(records);
+ }
+
+ stopwatch.Stop();
+ Console.WriteLine(stopwatch.Elapsed);
+ }
+
+ static void Parse()
+ {
+ Console.WriteLine("CsvHelper parsing");
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ using (var stream = File.OpenRead(GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ string[] record;
+ while (parser.Read())
+ {
+ record = parser.Record;
+ }
+
+ stopwatch.Stop();
+ Console.WriteLine(stopwatch.Elapsed);
+ }
+ }
+
+ static void ReadGetField()
+ {
+ Console.WriteLine("Reading using GetField");
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ using (var stream = File.OpenRead(GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ // Read header.
+ csv.Read();
+
+ while (csv.Read())
+ {
+ for (var i = 0; i < 50; i++)
+ {
+ csv.GetField<int>(i);
+ }
+ }
+ }
+
+ stopwatch.Stop();
+ Console.WriteLine(stopwatch.Elapsed);
+ }
+
+ static void ReadGetRecords()
+ {
+ Console.WriteLine($"Reading using GetRecords");
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ using (var stream = File.OpenRead(GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<Columns50>();
+ foreach (var record in records)
+ {
+ }
+ }
+
+ stopwatch.Stop();
+ Console.WriteLine(stopwatch.Elapsed);
+ }
+
+ static async Task ReadGetRecordsAsync()
+ {
+ Console.WriteLine("Reading using GetRecordsAsync");
+ var stopwatch = new Stopwatch();
+ stopwatch.Start();
+
+ using (var stream = File.OpenRead(GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ while (await csv.ReadAsync())
+ {
+ var record = csv.GetRecord<Columns50>();
+ }
+ }
+
+ stopwatch.Stop();
+ Console.WriteLine(stopwatch.Elapsed);
+ }
+
+ private class Data
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public int Age { get; set; }
+
+ public DateTimeOffset Birthday { get; set; }
+ }
+
+ private class DataMap : ClassMap<Data>
+ {
+ public DataMap()
+ {
+ Map(m => m.Id).Index(0);
+ Map(m => m.Name).Index(1);
+ Map(m => m.Age).Index(2);
+ Map(m => m.Birthday).Index(3);
+ }
+ }
+
+ public class Columns50
+ {
+ public int Column1 { get; set; }
+ public int Column2 { get; set; }
+ public int Column3 { get; set; }
+ public int Column4 { get; set; }
+ public int Column5 { get; set; }
+ public int Column6 { get; set; }
+ public int Column7 { get; set; }
+ public int Column8 { get; set; }
+ public int Column9 { get; set; }
+ public int Column10 { get; set; }
+ public int Column11 { get; set; }
+ public int Column12 { get; set; }
+ public int Column13 { get; set; }
+ public int Column14 { get; set; }
+ public int Column15 { get; set; }
+ public int Column16 { get; set; }
+ public int Column17 { get; set; }
+ public int Column18 { get; set; }
+ public int Column19 { get; set; }
+ public int Column20 { get; set; }
+ public int Column21 { get; set; }
+ public int Column22 { get; set; }
+ public int Column23 { get; set; }
+ public int Column24 { get; set; }
+ public int Column25 { get; set; }
+ public int Column26 { get; set; }
+ public int Column27 { get; set; }
+ public int Column28 { get; set; }
+ public int Column29 { get; set; }
+ public int Column30 { get; set; }
+ public int Column31 { get; set; }
+ public int Column32 { get; set; }
+ public int Column33 { get; set; }
+ public int Column34 { get; set; }
+ public int Column35 { get; set; }
+ public int Column36 { get; set; }
+ public int Column37 { get; set; }
+ public int Column38 { get; set; }
+ public int Column39 { get; set; }
+ public int Column40 { get; set; }
+ public int Column41 { get; set; }
+ public int Column42 { get; set; }
+ public int Column43 { get; set; }
+ public int Column44 { get; set; }
+ public int Column45 { get; set; }
+ public int Column46 { get; set; }
+ public int Column47 { get; set; }
+ public int Column48 { get; set; }
+ public int Column49 { get; set; }
+ public int Column50 { get; set; }
+ }
+ }
+
+ public class Benchmarks
+ {
+ [GlobalSetup]
+ public void GlobalSetup()
+ {
+ }
+
+ [GlobalCleanup]
+ public void GlobalCleanup()
+ {
+ }
+
+ [IterationSetup]
+ public void IterationSetup()
+ {
+ }
+
+ [IterationCleanup]
+ public void IterationCleanup()
+ {
+ }
+
+ [Benchmark]
+ public void GetRecordsFieldCache()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CacheFields = false,
+ };
+ using (var stream = File.OpenRead(Program.GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ Program.Columns50 record;
+ while (csv.Read())
+ {
+ record = csv.GetRecord<Program.Columns50>();
+ }
+ }
+ }
+
+ //[Benchmark]
+ public void GetRecordsSpan()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CacheFields = false,
+ };
+ using (var stream = File.OpenRead(Program.GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ Program.Columns50 record;
+ while (csv.Read())
+ {
+ record = csv.GetRecord<Program.Columns50>();
+ }
+ }
+ }
+
+ //[Benchmark]
+ public void Parse()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ using (var stream = File.OpenRead(Program.GetFilePath()))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ string[] record;
+ while (parser.Read())
+ {
+ record = parser.Record;
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/.gitignore b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/.gitignore
new file mode 100644
index 0000000..3e8591d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/.gitignore
@@ -0,0 +1 @@
+output/ \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.csproj b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.csproj
new file mode 100644
index 0000000..dbd00dd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.csproj
@@ -0,0 +1,16 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <OutputType>Exe</OutputType>
+ <TargetFramework>net6.0</TargetFramework>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <None Remove="CsvHelper.Website.v3.ncrunchproject" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Statiq.Web" Version="1.0.0-beta.31" />
+ </ItemGroup>
+
+</Project>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.v3.ncrunchproject
new file mode 100644
index 0000000..319cd52
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/CsvHelper.Website.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <IgnoreThisComponentCompletely>True</IgnoreThisComponentCompletely>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/Program.cs b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/Program.cs
new file mode 100644
index 0000000..6ea4e42
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/Program.cs
@@ -0,0 +1,21 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Threading.Tasks;
+using Statiq.App;
+using Statiq.Common;
+using Statiq.Markdown;
+using Statiq.Web;
+
+namespace CsvHelper.Docs
+{
+ class Program
+ {
+ static async Task<int> Main(string[] args) => await Bootstrapper
+ .Factory
+ .CreateWeb(args)
+ .RunAsync();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/README.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/README.md
new file mode 100644
index 0000000..0a91246
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/README.md
@@ -0,0 +1,7 @@
+## Preview the docs locally
+
+```
+> dotnet run -- preview --virtual-dir CsvHelper
+```
+
+Open browser to http://localhost:5080/CsvHelper
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/TocItem.cs b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/TocItem.cs
new file mode 100644
index 0000000..14df9e6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/TocItem.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Statiq.Common;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Website
+{
+ public class TocItem
+ {
+ public string Title { get; set; }
+
+ public string Link { get; set; }
+
+ public List<TocItem> Children { get; set; } = new List<TocItem>();
+
+ public static TocItem Create(IMetadataDictionary data)
+ {
+ var tocItem = new TocItem()
+ {
+ Title = data.Get<string>("title"),
+ Link = data.Get<string>("link"),
+ };
+
+ if (data.ContainsKey("children"))
+ {
+ tocItem.Children = Create(data.GetList<IMetadataDictionary>("children"));
+ }
+
+ return tocItem;
+ }
+
+ public static List<TocItem> Create(IEnumerable<IMetadataDictionary> objects, TocItem parent = null) => objects?.Select(Create).ToList() ?? new List<TocItem>();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/.nojekyll b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/.nojekyll
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/.nojekyll
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Index.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Index.cshtml
new file mode 100644
index 0000000..e412a7b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Index.cshtml
@@ -0,0 +1,330 @@
+title: A .NET library for reading and writing CSV files. Extremely fast, flexible, and easy to use.
+---
+<div class="home">
+ <div class="columns">
+ <div class="column">
+ <h1 class="title is-1">CsvHelper</h1>
+ <h2 class="subtitle">A .NET library for reading and writing CSV files. Extremely fast, flexible, and easy to use.</h2>
+
+ <div class="columns is-variable is-2">
+ <div class="column is-narrow">
+ <a class="button is-large is-success" href="https://www.nuget.org/packages/CsvHelper/">
+ <span class="icon">
+ <i class="fas fa-download"></i>
+ </span>
+ <span>Download</span>
+ </a>
+ </div>
+ <div class="column is-narrow">
+ <a class="button is-large is-link" href="@Context.GetLink("/getting-started")">
+ <span class="icon">
+ <i class="fas fa-play-circle"></i>
+ </span>
+ <span>Get Started</span>
+ </a>
+ </div>
+ </div>
+
+ </div>
+ <div class="column">
+ <img src="@Context.GetLink("/images/logo.svg")" />
+ </div>
+ </div>
+
+ <h3 class="title is-3">Features</h3>
+ <hr />
+
+ <div class="columns is-multiline">
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-bolt"></i>
+ </span>
+ <span>Fast</span>
+ </h4>
+ <p class="subtitle is-6">Compiles classes on the fly for extremely fast performance.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-sync-alt"></i>
+ </span>
+ <span>Flexible</span>
+ </h4>
+ <p class="subtitle is-6">Conservative when writing, liberal when reading.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-thumbs-up"></i>
+ </span>
+ <span>Easy to Use</span>
+ </h4>
+ <p class="subtitle is-6">
+ Reading and writing is as simple as GetRecords&lt;T&gt;() and WriteRecords(records).
+ No configuration required.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-cogs"></i>
+ </span>
+ <span>Highly Configurable</span>
+ </h4>
+ <p class="subtitle is-6">Feature rich mapping and attribute systems to configure any type of CSV file to any type of class.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-clipboard-check"></i>
+ </span>
+ <span><a href="https://tools.ietf.org/html/rfc4180" target="_blank">RFC 4180</a> Compliant</span>
+ </h4>
+ <p class="subtitle is-6">Adheres to the RFC 4180 standard to ensure compatibility across systems.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-linux"></i>
+ </span>
+ <span>Linux Mode</span>
+ </h4>
+ <p class="subtitle is-6">
+ Mode for common Linux/SerDe files where an escape character is used instead of RFC 4180's field quoting.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-file-excel"></i>
+ </span>
+ <span>Graceful Fallback</span>
+ </h4>
+ <p class="subtitle is-6">When non-standard files are read, fallback will match MS Excel parsing.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-memory"></i>
+ </span>
+ <span>Low Memory Usage</span>
+ </h4>
+ <p class="subtitle is-6">Reading records will yield results so only one record is in memory at a time.</p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-database"></i>
+ </span>
+ <span>Field Caching</span>
+ </h4>
+ <p class="subtitle is-6">
+ Option to use field caching when there is repeated data in a CSV file. This will reduce memory
+ and speed up parsing time.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-apple"></i>
+ </span>
+ <span>Run Anywhere</span>
+ </h4>
+ <p class="subtitle is-6">
+ CsvHelper is built on .NET Standard 2.0 which allows it to run
+ <a href="https://docs.microsoft.com/en-us/dotnet/standard/net-standard" target="_blank">almost everywhere</a>.
+ Older versions of .NET are possible if needed.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ <span>Open Source</span>
+ </h4>
+ <p class="subtitle is-6">
+ Many contributors have helped make CsvHelper the great library it is today.
+ Completely free for commercial use. Dual licensed under
+ <a href="https://opensource.org/licenses/MS-PL" target="_blank">MS-PL</a> and
+ <a href="https://opensource.org/licenses/Apache-2.0" target="_blank">Apache 2</a>.
+ </p>
+ </div>
+ </div>
+
+ <br />
+
+ <h3 class="title is-3">Help</h3>
+ <hr />
+
+ <div class="columns is-multiline">
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-stack-overflow"></i>
+ </span>
+ <span>Stack Overflow</span>
+ </h4>
+ <p class="subtitle is-6">
+ <a href="https://stackoverflow.com/questions/tagged/csvhelper">Stack Overflow</a>
+ has millions of users in its community just waiting to answer your questions.
+ There is only one of me and I'm pretty busy.
+ <span class="icon">
+ <i class="fas fa-grin-squint-tears"></i>
+ </span>
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-book"></i>
+ </span>
+ <span>Documentation</span>
+ </h4>
+ <p class="subtitle is-6">
+ Learn how to use CsvHelper using the <a href="@Context.GetLink("/api")">API reference</a>
+ or check out some <a href="@Context.GetLink("/examples")">examples</a>.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fas fa-bug"></i>
+ </span>
+ <span>Features Requests and Bugs</span>
+ </h4>
+ <p class="subtitle is-6">
+ If you have a feature request or have found a bug, you can
+ <a href="https://github.com/joshclose/csvhelper/issues" target="_blank">log an issue</a>.
+ Please use
+ <a href="https://stackoverflow.com/questions/tagged/csvhelper" target="_blank" rel="nofollow">Stack&nbsp;Overflow</a>
+ if you have a question.
+ </p>
+ </div>
+ </div>
+
+ <br />
+
+ <h3 class="title is-3">License</h3>
+ <hr />
+
+ <p>Completely free for commercial use. Dual licensed. Choose which ever license suits your needs.</p>
+ <p><a href="https://opensource.org/licenses/MS-PL" target="_blank" rel="nofollow">Microsoft Public License (MS-PL)</a></p>
+ <p><a href="https://opensource.org/licenses/Apache-2.0" target="_blank" rel="nofollow">Apache License, Version 2.0</a></p>
+
+ <br /><br />
+
+ <h3 class="title is-3">Contributions</h3>
+ <hr />
+
+ <div class="content">
+ <p>Want to contribute? Great! Here are a few guidelines.</p>
+ <ol>
+ <li>
+ If you want to do a feature, post an issue about the feature first. Some features are intentionally left out,
+ some features may already be in the works, or I may have some advice on how I think it should be done. I would
+ feel bad if time was spent on some code that won't be used.
+ </li>
+ <li>
+ If you want to do a bug fix, it might not be a bad idea to post about it too. I've had the same bug fixed by
+ multiple people at the same time before.
+ </li>
+ <li>
+ All code should have a unit test. If you make a feature, there should be significant tests around the feature.
+ If you do a bug fix, there should be a test specific to that bug so it doesn't happen again.
+ </li>
+ <li>
+ Pull requests should have a single commit. If you have multiple commits, squash them into a single commit before
+ requesting a pull.
+ </li>
+ <li>
+ When in Rome: Try and follow the code styling already in place. I use default Visual Studio Text Editor settings
+ but change tabs to Keep tabs.
+ </li>
+ </ol>
+ </div>
+
+ <br />
+
+ <h3 class="title is-3">Contributors</h3>
+ <hr />
+
+ <a href="https://github.com/JoshClose/CsvHelper/graphs/contributors">
+ <img src="https://camo.githubusercontent.com/be8184ec3d8d1a25fbf40e461eb193d178fb8e5a/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f63737668656c7065722f636f6e7472696275746f72732e7376673f77696474683d38393026627574746f6e3d66616c7365" data-canonical-src="https://opencollective.com/csvhelper/contributors.svg?width=890&amp;button=false" style="max-width: 100%" />
+ </a>
+
+ <br /><br />
+
+ <h3 class="title is-3">Donations</h3>
+ <hr />
+
+ <div class="columns is-multiline">
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-paypal"></i>
+ </span>
+ <span>One Time Donation</span>
+ </h4>
+ <p class="subtitle is-6">
+ You can do a one time donation through
+ <a href="https://www.paypal.me/closejosh" target="_blank" rel="nofollow">Paypal</a>.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-osi"></i>
+ </span>
+ <span>Recurring Donations</span>
+ </h4>
+ <p class="subtitle is-6">
+ You can do recurring donations through
+ <a href="https://opencollective.com/csvhelper" target="_blank" rel="nofollow">Open Collective</a>.
+ </p>
+ </div>
+
+ <div class="column is-4">
+ <h4 class="title is-4 has-text-weight-normal">
+ <span class="icon">
+ <i class="fab fa-amazon"></i>
+ </span>
+ <span>Wish List</span>
+ </h4>
+ <p class="subtitle is-6">
+ If you want to do something a little more fun, you can pick something
+ from my <a href="http://a.co/7EwAZXU" target="_blank" rel="nofollow">Amazon wish list</a>. This
+ obviously doesn't go directly towards building software, but does help
+ keep me sane when I'm not.
+ </p>
+ </div>
+ </div>
+
+ <h3 class="title is-3">Backers</h3>
+ <hr />
+
+ <a href="https://opencollective.com/csvhelper#backers" target="_blank" rel="nofollow">
+ <img src="https://camo.githubusercontent.com/47a6bf22fd6cbdd06e076c8710fcfe422e333e86/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f63737668656c7065722f6261636b6572732e7376673f77696474683d383930" data-canonical-src="https://opencollective.com/csvhelper/backers.svg?width=890" style={{ maxWidth: "100%" }} />
+ </a>
+
+ <h3 class="title is-3">Sponsors</h3>
+ <hr />
+
+ <a href="https://opencollective.com/csvhelper/sponsor/0/website" target="_blank" rel="nofollow">
+ <img src="https://camo.githubusercontent.com/8c4b18a584bc3d249062d169f460ee2d3b8f7373/68747470733a2f2f6f70656e636f6c6c6563746976652e636f6d2f63737668656c7065722f73706f6e736f722f302f6176617461722e737667" data-canonical-src="https://opencollective.com/csvhelper/sponsor/0/avatar.svg" style={{ maxWidth: "100%" }} />
+ </a>
+</div>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Footer.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Footer.cshtml
new file mode 100644
index 0000000..57c9dac
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Footer.cshtml
@@ -0,0 +1,3 @@
+<footer id="footer" class="footer">
+ <div class="has-text-centered">&copy; 2009-2022 Josh Close</div>
+</footer>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Header.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Header.cshtml
new file mode 100644
index 0000000..62f1956
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Header.cshtml
@@ -0,0 +1,35 @@
+<header id="header" class="header">
+ <nav class="navbar is-light">
+ <div class="navbar-brand">
+ <a class="navbar-item" href="@Context.GetLink()">
+ <img src="@Context.GetLink("/images/logo.svg")" width="66" height="28" />
+ </a>
+ <div id="navbar-burger" class="navbar-burger">
+ <span></span>
+ <span></span>
+ <span></span>
+ </div>
+ </div>
+ <div id="navbar-menu" class="navbar-menu">
+ <div class="navbar-start">
+ <a class="navbar-item" href="@Context.GetLink("/getting-started")">Getting Started</a>
+ <a class="navbar-item" href="@Context.GetLink("/examples")">Examples</a>
+ @*<a class="navbar-item" href="@Context.GetLink("/api")">API</a>*@
+ <a class="navbar-item" href="@Context.GetLink("/migration")">Migration</a>
+ <a class="navbar-item" href="@Context.GetLink("/change-log")">Change Log</a>
+ </div>
+ <div class="navbar-end">
+ <a class="navbar-item" href="https://twitter.com/JoshClose">
+ <span class="icon">
+ <i class="fab fa-twitter"></i>
+ </span>
+ </a>
+ <a class="navbar-item" href="https://github.com/JoshClose/CsvHelper">
+ <span class="icon">
+ <i class="fab fa-github"></i>
+ </span>
+ </a>
+ </div>
+ </div>
+ </nav>
+</header>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Layout.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Layout.cshtml
new file mode 100644
index 0000000..f22b920
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Layout.cshtml
@@ -0,0 +1,87 @@
+@{
+ var isMarkdown = Metadata.Get<string>("Source").EndsWith(".md");
+ var hasTock = Metadata.ContainsKey("toc");
+}
+<!DOCTYPE html>
+<html lang="en-us">
+<head>
+ <meta charSet="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="apple-touch-icon" sizes="57x57" href="@Context.GetLink("/favicons/apple-icon-57x57.png")" />
+ <link rel="apple-touch-icon" sizes="60x60" href="@Context.GetLink("/favicons/apple-icon-60x60.png")" />
+ <link rel="apple-touch-icon" sizes="72x72" href="@Context.GetLink("/favicons/apple-icon-72x72.png")" />
+ <link rel="apple-touch-icon" sizes="76x76" href="@Context.GetLink("/favicons/apple-icon-76x76.png")" />
+ <link rel="apple-touch-icon" sizes="114x114" href="@Context.GetLink("/favicons/apple-icon-114x114.png")" />
+ <link rel="apple-touch-icon" sizes="120x120" href="@Context.GetLink("/favicons/apple-icon-120x120.png")" />
+ <link rel="apple-touch-icon" sizes="144x144" href="@Context.GetLink("/favicons/apple-icon-144x144.png")" />
+ <link rel="apple-touch-icon" sizes="152x152" href="@Context.GetLink("/favicons/apple-icon-152x152.png")" />
+ <link rel="apple-touch-icon" sizes="180x180" href="@Context.GetLink("/favicons/apple-icon-180x180.png")" />
+ <link rel="icon" type="image/png" sizes="192x192" href="@Context.GetLink("/favicons/android-icon-192x192.png")" />
+ <link rel="icon" type="image/png" sizes="32x32" href="@Context.GetLink("/favicons/favicon-32x32.png")" />
+ <link rel="icon" type="image/png" sizes="96x96" href="@Context.GetLink("/favicons/favicon-96x96.png")" />
+ <link rel="icon" type="image/png" sizes="16x16" href="@Context.GetLink("/favicons/favicon-16x16.png")" />
+ <link rel="manifest" href="@Context.GetLink("/manifest.json")" />
+ <meta name="msapplication-TileColor" content="#ffffff" />
+ <meta name="msapplication-TileImage" content="/ms-icon-144x144.png" />
+ <meta name="theme-color" content="#ffffff" />
+ <title>@Metadata.Get("title") | CsvHelper</title>
+
+ <environment include="Development">
+ <link rel="stylesheet" href="../../lib/bulma/bulma.css" />
+ </environment>
+ <environment exclude="Development">
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.1/css/bulma.min.css" />
+ </environment>
+ <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/default.min.css" />
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/vs.min.css" />
+ <link rel="stylesheet" href="@Context.GetLink("/styles/index.css")" />
+
+ <script defer src="https://use.fontawesome.com/releases/v5.14.0/js/all.js"></script>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/highlight.min.js"></script>
+</head>
+<body>
+ <partial name="_Header" />
+
+ <main id="main" class="container is-fluid">
+ <div class="columns is-variable is-1">
+ @if (isMarkdown)
+ {
+ @if (hasTock)
+ {
+ <div class="column is-2">
+ <partial name="_SideBar" />
+ </div>
+ }
+
+ <div class="column">
+ <div class="content">
+ @RenderBody()
+ </div>
+ </div>
+ }
+ else
+ {
+ <div class="column">
+ @RenderBody()
+ </div>
+ }
+ </div>
+ </main>
+
+ <br /><br />
+
+ <partial name="_Footer" />
+
+ @*<partial name="_Metadata" />*@
+
+ <script>
+ hljs.configure({
+ tabReplace: " "
+ });
+ hljs.initHighlightingOnLoad();
+ </script>
+ <script src="@Context.GetLink("/scripts/header.js")"></script>
+ <script src="@Context.GetLink("/scripts/sidebar.js")"></script>
+ @RenderSection("Scripts", required: false)
+</body>
+</html>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Metadata.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Metadata.cshtml
new file mode 100644
index 0000000..d97ddec
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_Metadata.cshtml
@@ -0,0 +1,11 @@
+<table>
+ <tbody>
+ @foreach (var key in Metadata.Keys)
+ {
+ <tr>
+ <td>@key</td>
+ <td>@Metadata[key]</td>
+ </tr>
+ }
+ </tbody>
+</table> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_SideBar.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_SideBar.cshtml
new file mode 100644
index 0000000..ca4fbfb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_SideBar.cshtml
@@ -0,0 +1,9 @@
+@{
+ var items = TocItem.Create(Metadata.GetList<IMetadataDictionary>("toc"));
+ items.Add(new TocItem { Title = "Back to top", Link = "#" });
+ ViewBag.ShowChildren = true;
+}
+
+<div id="sidebar" class="sidebar">
+ <partial name="_TocItems" for="@items" />
+</div>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItem.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItem.cshtml
new file mode 100644
index 0000000..5605d66
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItem.cshtml
@@ -0,0 +1,16 @@
+@inherits StatiqRazorPage<TocItem>
+<li>
+ <span>
+ @if (Model.Children.Count > 0)
+ {
+ <a class="expander"></a>
+ }
+
+ <a href="@(new RelativeUrl(Model.Link, Document.GetString(Keys.LinkRoot)).ToString())">@Model.Title</a>
+ </span>
+
+ @if (Model.Children.Any())
+ {
+ <partial name="_TocItems" for="@Model.Children" />
+ }
+</li>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItems.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItems.cshtml
new file mode 100644
index 0000000..c844982
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/Shared/_TocItems.cshtml
@@ -0,0 +1,11 @@
+@inherits StatiqRazorPage<IEnumerable<TocItem>>
+@{
+ var c = ViewBag.ShowChildren ? string.Empty : "is-hidden";
+ ViewBag.showChildren = false;
+}
+<ul class="@c">
+ @foreach (var item in Model)
+ {
+ <partial name="_TocItem" for="@item" />
+ }
+</ul>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewImports.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewImports.cshtml
new file mode 100644
index 0000000..ae373a5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewImports.cshtml
@@ -0,0 +1,10 @@
+@using Statiq.Common
+@using Statiq.Razor
+@using Statiq.Web
+@using Statiq.Web.Pipelines
+@using Microsoft.Extensions.Logging
+@using CsvHelper.Website;
+@using Newtonsoft.Json;
+
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@inherits StatiqRazorPage<IDocument>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewStart.cshtml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewStart.cshtml
new file mode 100644
index 0000000..1901578
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_ViewStart.cshtml
@@ -0,0 +1,3 @@
+@{
+ Layout = @"Shared/_Layout.cshtml";
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_manifest.yml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_manifest.yml
new file mode 100644
index 0000000..26054ca
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/_manifest.yml
@@ -0,0 +1 @@
+ContentType: Asset
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/api/Index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/api/Index.md
new file mode 100644
index 0000000..b79b735
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/api/Index.md
@@ -0,0 +1 @@
+# Coming soon... \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/browserconfig.xml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/browserconfig.xml
new file mode 100644
index 0000000..ae389fe
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/browserconfig.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<browserconfig>
+ <msapplication>
+ <tile>
+ <square70x70logo src="/ms-icon-70x70.png"/>
+ <square150x150logo src="/ms-icon-150x150.png"/>
+ <square310x310logo src="/ms-icon-310x310.png"/>
+ <TileColor>#ffffff</TileColor>
+ </tile>
+ </msapplication>
+</browserconfig> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md
new file mode 100644
index 0000000..bd6b576
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/change-log/index.md
@@ -0,0 +1,1862 @@
+# Change Log
+
+### 30.0.1
+
+#### Bug Fixes
+
+- Fixed issue when writing with the escape char not being escaped if it was different than the quote char.
+- Fixed issue with `CsvWriter` not passing `leavOpen` parameter to other constructor call.
+- Fixed issue with TypeConverter being assigned to a member that has a Convert expression assigned to it.
+
+### 30.0.0
+
+#### Features
+
+- Added `Field` and `RawRecord` to `BadDataException`.
+- Pass `IWriterConfiguration` into `CsvWriter` constructor instead of `CsvConfiguration`.
+- Allow inherited header prefixes.
+- Allow mapping to dynamic properties.
+- Added `MemberName` to the type converter exception message.
+- Added `MaxFieldSize` configuration. If max size is set and the size is reached, `MaxFieldSizeException` is thrown.
+- Added class level attribute capability.
+ New Attributes:
+ - `BufferSizeAttribute`
+ - `CacheFieldsAttribute`
+ - `CommentAttribute`
+ - `CountBytesAttribute`
+ - `DelimiterAttribute`
+ - `DetectColumnCountChangesAttribute`
+ - `DetectDelimiterAttribute`
+ - `DetectDelimiterValueAttribute`
+ - `EncodingAttribute`
+ - `EscapeAttribute`
+ - `ExceptionMessagesContainRawDataAttribute`
+ - `HasHeaderRecordAttribute`
+ - `IgnoreBlankLinesAttribute`
+ - `IgnoreReferencesAttribute`
+ - `IncludePrivateMembersAttribute`
+ - `InjectionCharactersAttribute`
+ - `InjectionEscapeCharacterAttribute`
+ - `InjectionOptionsAttribute`
+ - `LineBreakInQuotedFieldIsBadDataAttribute`
+ - `MaxFieldSizeAttribute`
+ - `ModeAttribute`
+ - `NewLineAttribute`
+ - `ProcessFieldAttribute`
+ - `QuoteAttribute`
+ - `TrimOptionsAttribute`
+ - `UseNewObjectForNullReferenceMembersAttribute`
+ - `WhiteSpaceCharsAttribute`
+- Added `params object[] constructorArgs` to `TypeConverterAttribute`.
+- Added validation message expression to `Validate` mapping.
+- Added `IReaderRow` to `ValidateArgs`.
+- Relax `Default` and `Constant` type constraints to `IsAssignableFrom`.
+
+#### Bug Fixes
+
+- Added `null` check in `WriteRecords`.
+- Fixed interpolation in exception message.
+- Fixed constructor mapping issue where parameter has a type converter but would still try and use constructor mapping.
+
+#### Breaking Changes
+
+- Added `string field` and `string rawRecord` to `BadDataException` constructor.
+- Added `double MaxFieldSize { get; }` to `IParserConfiguration`.
+- Added `bool LeaveOpen { get; }` to `IWriterConfiguration`.
+- Added `bool LeaveOpen { get; }` to `IParserConfiguration`.
+- Added `IReaderRow row` to `ValidateArgs` constructor.
+
+### 29.0.0
+
+#### Features
+
+- Added support for `TypeConverter` factories. This allows for the ability to handle many types at once.
+Code that manually handle nullable, enums, and collections were changed into factories.
+- Moved delimiter detection into a configuration function.
+This allows for a user to easily change the detection logic.
+Default logic is in `ConfigurationFunction.GetDelimiter`.
+- Changed `CsvConfiguration.SanitizeInjection` flag to `CsvConfiguration.InjectionOptions` enum.
+ - Options are:
+ - None - Default. Does no injection protection. The is default because it's not a part of CSV and is used for an external tool.
+ - Escape - Escapes the field based on OWASP recommendations if an injection char is detected.
+ - Strip - Removes the injection character.
+ - Exception - Throws an exception if an injection char is detected.
+ - Added `\t` and `\r` to `CsvConfiguration.InjectionEscapeCharacter`.
+ - Changed `CsvConfiguration.InjectionEscapeCharacter` from `\t` to `'`.
+- `CsvDataReader.GetDataTypeName` will use types when the schema table is overridden.
+- More detail added to `CsvConfiguration.Validate` exception messages.
+- Reduce double dictionary lookup in a few places.
+
+#### Bug Fixes
+
+- Fixed issues with delimiter detection logic.
+- Missing `ConfigureAwait(false)` added to async calls.
+- Fixed issue with `CsvReader.TryGetField` throwing an exception when multiple headers are read.
+- Fixed issue with `MemberMap.Validate` passing the wrong type into the expression call.
+- Fixed issue with `MemberMap<T>.Convert` not working with `static` methods.
+- Fixed issue with `DateTimeConverter` and `DateTimeOffsetConverter` throwing an exception other than `TypeConverterException` on failure.
+- Fixed issue where `MissingFieldFound` was not being called if `IgnoreBlankLines` was off.
+
+#### Breaking Changes
+
+- `CsvConfiguration.SanitizeForInjection` -> `CsvConfiguration.InjectionOptions`
+- `bool IWriterConfiguration.SanitizeForInjection` -> `InjectionOptions IWriterConfiguration.InjectionOptions`
+- `CsvConfiguration.InjectionEscapeCharacter` changed from `\t` to `'`.
+- Added `\t` and `\r` to `CsvConfiguration.InjectionCharacters`.
+- Added `GetDelimiter IParserConfiguration.GetDelimiter` delegate.
+
+### 28.0.1
+
+#### Bug Fixes
+
+- Disabled nullable until all null issues are fixed.
+
+### 28.0.0
+
+#### Features
+
+- Updated delimiter detection algorithm.
+ - Strips escaped text based on mode.
+ - Only looks for delimiters that appear on every line.
+ - Uses `CultureInfo.TextInfo.ListSeparator` if it's on every line.
+- Cache processed fields in parser so they're not processed on every access.
+- Cache `CsvParser.Record[]` so multiple calls wont' regenerate it.
+- `ShouldSkipRecord` is `null` by default and won't get called if not set.
+- `ShouldSkipRecordArgs` holds `IReaderRow` now instead of `string[]`.
+- Changed `CsvParser` constructor to take in `IParserConfiguration` instead of `CsvConfiguration`.
+- Changed `CsvReader` constructor to take in `IReaderConfiguration` instead of `CsvConfiguration`.
+
+#### Bug Fixes
+
+- Fixed issue where collection types weren't getting the correct `MemberMapData` passed to them when converting the item.
+- Fixed issue where `BadDataFound` was being called multiple times for the same field.
+- Fixed issue where you can't read with no header when a name has been mapped.
+- Fixed issue where quoted fields not correctly being identified if there was a buffer swap on white space before quote.
+
+#### Breaking Changes
+
+- `ShouldSkipRecordArgs` holds `IReaderRow` now instead of `string[]`.
+- Removed `ConfigurationFunctions.ShouldSkipRecord` as the default is now `null`.
+- Added `IParserConfiguration.Validate`.
+
+### 27.2.1
+
+#### Bug Fixes
+
+- Changed dependencies to minimal needed version.
+
+### 27.2.0
+
+#### Features
+
+- Support for net60 `DateOnly` and `TimeOnly` types.
+
+### 27.1.1
+
+#### Bug Fixes
+
+- Fixed issue with delimiter detection in parser async read.
+
+### 27.1.0
+
+#### Features
+
+- Added IgnoreBaseAttribute to not look at the base class when auto mapping.
+
+### 27.0.4
+
+#### Bug Fixes
+
+- Changed delimiter detection to look line by line instead of the full buffer.
+
+### 27.0.3
+
+#### Bug Fixes
+
+- Specified exact dependency version matches.
+
+### 27.0.2
+
+#### Bug Fixes
+
+- Fixed issue with delimiter detection.
+
+### 27.0.1
+
+#### Bug Fixes
+
+- `\t` wasn't removed and just an exception was being thrown.
+
+### 27.0.0
+
+#### Features
+
+- Config option to auto detect delimiter. Off by default.
+- Added ability to apply a type converter to all registered types.
+- Added ability to apply type converter options to all registered types.
+- Added ability to pass an IAsyncEnumerable to WriteRecords.
+- Added option to use default value on conversion failure.
+
+#### Breaking Changes
+
+- Added `IParserConfiguration.DetectDelimiter`.
+- Added `IParserConfiguration.DetectDelimiterValues`.
+- Added `IWriter.WriteRecordsAsync<T>(IAsyncEnumerable<T> records, CancellationToken cancellationToken = default)`.
+- Removed `\t` from `CsvConfiguration.WhiteSpaceChars` as a default.
+
+### 26.1.0
+
+#### Features
+
+- Allow schema of destination table to be specified in CsvDataReader.
+
+### 26.0.1
+
+#### Bug Fixes
+
+- Fixed issue with constant not working when the field is missing.
+
+### 26.0.0
+
+#### Features
+
+- Added configuration for `ExceptionMessagesContainRawData` that defaults to true.
+
+#### Bug Fixes
+
+- Removed all `init` properties. These were causing people too many problems.
+- Fixed issue with exception message not containing the header record.
+
+#### Breaking Changes
+
+- Added `bool IParserConfiguration.ExceptionMessagesContainRawData { get; }`.
+- Added `bool IWriterConfiguration.ExceptionMessagesContainRawData { get; }`.
+- All delegate args objects have `init` removed and now have constructors with parameters.
+ - BadDataFound
+ - ConvertFromString
+ - GetConstructor
+ - GetDynamicPropertyName
+ - HeaderValidated
+ - MissingFieldFound
+ - PrepareHeaderForMatch
+ - ReadingExceptionOccurred
+ - ReferenceHeaderPrefix
+ - ShouldQuote
+ - ShouldSkipRecord
+ - ShouldUseConstructorParameter
+ - Validate
+
+### 25.0.0
+
+#### Bug Fixes
+
+- Fixed stack overflow issue with accessing Parser[int] or Parser.Record in BaddataFound callback. Throws an exception explaining issue now.
+
+#### Breaking Changes
+
+- All delegate args had their non-parameterless constructor removed in favor of using `init`.
+
+### 24.0.1
+
+#### Bug Fixes
+
+- Fixed issue with Trimming all white space.
+
+### 24.0.0
+
+#### Features
+
+- Added `CancellationToken` to reading and writing async methods.
+
+#### Bug Fixes
+
+- Fixed issue with `ShouldQuote` not having the correct field type when writing records instead of fields.
+- Fixed issue with `CharCount` and `ByteCount` when trimming.
+
+#### Breaking Changes
+
+- `void IWriterRow.WriteConvertedField(string field)` -> `void IWriterRow.WriteConvertedField(string field, Type fieldType)`
+- `void CsvWriter.WriteConvertedField(string field)` -> `void CsvWriter.WriteConvertedField(string field, Type fieldType)`
+
+### 23.0.0
+
+#### Features
+
+- Changed public `init` properties to `set`. Once VB.NET implements `init`, it can change back.
+- Made method `CsvWriter.WriteBuffer` protected so sub classes can write fields.
+- `CsvWriter.Flush` and `CsvWriter.FlushAsync` will now flush the underlying `TextWriter`.
+- Changed all `delegate` methods to accept an args `struct` instead of parameters. This makes it easier to understand what parameters are passed in, and allows for additional parameters to be added later without a breaking change.
+
+#### Breaking Changes
+
+- Removed the large `CsvConfiguration` constructor. The properties are now settable, so this isn't needed for VB.NET.
+- All delegates now take in a single struct argument.
+ - BadDataFound
+ - ConvertFromString
+ - GetConstructor
+ - GetDynamicPropertyName
+ - HeaderValidated
+ - MissingFieldFound
+ - PrepareHeaderForMatch
+ - ReadingExceptionOccurred
+ - ReferenceHeaderPrefix
+ - ShouldQuote
+ - ShouldSkipRecord
+ - ShouldUseConstructorParameter
+ - Validate
+
+### 22.1.2
+
+#### Bug Fixes
+
+- Fixed issue with data corruption when parser buffer ran out in middle of escape and quote.
+
+### 22.1.1
+
+#### Bug Fixes
+
+- Fixed issue where CsvConfiguration.NewLine was being set when value is null in constructor causing IsNewLine to be true.
+
+### 22.1.0
+
+#### Features
+
+- Added `[EnumIgnoreAttribute]`.
+
+### Bug Fixes
+
+- Fixed issue with `EnumIgnoreCase` value not making it to the converter when reading.
+
+### 22.0.0
+
+#### Features
+
+- Changed `ParserMode` to `CsvMode` and added the modes to `CsvWriter`.
+- Added `Type fieldType` parameter to `ShouldQuote` delegate.
+- Added `TypeConverterOptions.EnumIgnoreCase` (default is false). Allows `EnumConverter` to ignore case when matching enum names, values, or `NameAttribute`.
+
+#### Bug Fixes
+
+- Fixed issue with `EnumConverter` when duplicate names or values appeared in an Enum.
+
+#### Breaking Changes
+
+- `ParserMode` -> `CsvMode`
+- Added `IParserConfiguration.ProcessFieldBufferSize`.
+- Added `IWriterConfiguration.Mode`.
+- `ShouldQuote(string, IWriterRow)` -> `ShouldQuote(string, Type, IWriterRow)`.
+- `EnumConverter` was changed to case sensitive by default.
+
+### 21.3.1
+
+#### Bug Fixes
+
+- Fixed issue with CsvContext not being passed into AutoMap.
+
+### 21.3.0
+
+#### Features
+
+- Added back Excel compatibility for bad data fallback.
+ 1. If a field doesn't start with a `Quote`, read until a `Delimiter` or `NewLine` is found.
+ 1. If in quoted field and a `Quote` is found that isn't preceded by an `Escape`, read until a `Delimiter or `NewLine` is found.
+ 1. `TrimOptions.Trim` will be applied before these rules.
+
+### 21.2.1
+
+#### Bug Fixes
+
+- Fixed issue with processed field buffer not being large enough on resize.
+
+### 21.2.0
+
+#### Features
+
+- Process boolean and null type converter options when writing.
+
+### 21.1.2
+
+#### Bug Fixes
+
+- Fixed parsing issue with state not being reset when buffer is filled in the middle of a state.
+
+### 21.1.1
+
+#### Bug Fixes
+
+- Fixed parsing issue with buffer ending in the middle of a line ending.
+
+### 21.1.0
+
+#### Features
+
+- Added ParserMode.NoEscape. This will ignore quotes and escape characters.
+
+### 21.0.6
+
+#### Bug Fixes
+
+- Fixed issue with writing a field that is larger then 2x the buffer size.
+
+### 21.0.5
+
+#### Bug Fixes
+
+- Fixed issue with VB not being able to set `init` properties on CsvConfiguration by adding a constructor that takes in all properties as optional named arguments.
+
+### 21.0.4
+
+#### Bug Fixes
+
+- Fixed issue with cache miss in on both the reader and writer.
+
+### 21.0.3
+
+No changes.
+
+### 21.0.2
+
+#### Bug Fixes
+
+- Fixed issue with `CsvConfiguration.NewLine` not defaulting to '\r\n'.
+
+### 21.0.1
+
+#### Big Fixes
+
+- Fixed issue with `CsvWriter` not keeping track of `Row` and `Index`.
+
+### 21.0.0
+
+#### Features
+
+- `CsvConfiguration.NewLine` changed to a `string`. You can now read and write any string you like for a line ending. This defaults to `Environment.NewLine`. When reading, if the value is not explicitly set `\r\n`, `\r`, or `\n` will still be used.
+
+#### Bug Fixes
+
+- Fixed issue with other platforms than net50 using `init`.
+- Fixed issue with being unable to write \r\n in an environment that does use that for `Environment.NewLine`.
+
+#### Breaking Changes
+
+- `char? CsvConfiguration.NewLine` changed to `string CsvConfiguration.NewLine`.
+
+### 20.0.0
+
+#### Features
+
+- Parser performance.
+- Writer performance.
+- Changed CsvConfiguration to a read only `record` to eliminate threading issues.
+- Unix parsing mode. Uses escape character instead of field quoting. Configurable `NewLine`.
+- Field caching. Disabled by default. When enabled, this will cache all fields created so duplicate fields won't need to create a new string from a character array.
+
+#### Breaking Changes
+
+- Removed `Caches` enum.
+- `ReadingContext` and `WritingContext` were merged into a single `CsvContext`. Anywhere that used either was changed to `CsvContext`.
+- All `Func`s and `Action`s now have their own `delegate`.
+- `ConvertUsing` renamed to `Convert`.
+- `ShouldQuote` now takes in `IWriterRow` instead of `CsvContext`.
+- `CsvConfiguration` changed from a `class` to a `record`.
+- All `CsvConfiguration` properties changed to read only `get; init;`.
+- `CsvConfiguration.NewLine` changed to `char?`.
+- `CsvConfiguration.NewLineString` removed.
+- `CsvConfiguration.RegisterClassMap` moved to `CsvContext`.
+- `CsvConfiguration.UnregisterClassMap` moved to `CsvContext`.
+- `CsvConfiguration.AutoMap` moved to `CsvContext`.
+- All `IParserConfiguration` setters removed.
+- `bool IParserConfiguration.CacheFields` added.
+- `bool IParserConfiguration.LeaveOpen` added.
+- `char? IParserConfiguration.NewLine` added.
+- `ParserMode IParserConfiguration.Mode` added.
+- `IParserConfiguration.IgnoreQuotes` removed.
+- `char[] IParserConfiguration.WhiteSpaceChars` added.
+- All `IReaderConfiguration` setters removed.
+- `IReaderConfiguration.TypeConverterOptionsCache` removed.
+- `IReaderConfiguration.TypeConverterCache` removed.
+- `IReaderConfiguration.Maps` removed.
+- `IReaderConfiguration.RegisterClassMap` removed.
+- `IReaderConfiguration.UnregisterClassMap` removed.
+- `IReaderConfiguration.AutoMap` removed.
+- `ISerializerConfiguration` removed and properties added to `IWriterConfiguration`.
+- All `IWriterConfiguration` setters removed.
+- `IWriterConfiguration.QuoteString` removed.
+- `IWriterConfiguration.TypeConverterCache` removed.
+- `IWriterConfiguration.MemberTypes` removed.
+- `IWriterConfiguration.Maps` removed.
+- `IWriterConfiguration.RegisterClassMap` removed.
+- `IWriterConfiguration.UnregisterClassMap` removed.
+- `IWriterConfiguration.AutoMap` removed.
+- `MemberMap.Optional` added.
+- `MemberMap<TClass, TMember>.ConvertUsing` renamed to `Convert`.
+- `CsvFieldReader` removed.
+- `CsvParser.Read` returns `boolean` instead of `string[]`.
+- `CsvParser` constructors that take in a `FieldReader` removed.
+- `CsvParser[int index]` added to retrieve fields after a `Read`.
+- `CsvSerializer` removed.
+- `IFieldReader` removed.
+- `IParser.ByteCount` added.
+- `IParser.CharCount` added.
+- `IParser.Count` added.
+- `IParser[int index]` added.
+- `IParser.Record` added.
+- `IParser.RawRecord` added.
+- `IParser.Row` added.
+- `IParser.RawRow` added.
+- `IParser.Read` returns `bool` instead of `string[]`.
+- `IParser.ReadAsync` returns `bool` instead of `string[]`.
+- `IReader.Parser` removed.
+- `int IReaderRow.ColumnCount` added.
+- `int IReaderRow.CurrentIndex` added.
+- `string[] IReaderRow.HeaderRecord` added.
+- `IParser IReaderRow.Parser` added.
+- `ISerializer` removed.
+- `string[] IWriterRow.HeaderRecord` added.
+- `int IWriterRow.Row` added.
+- `int IWriterRow.Index` added.
+- `RecordBuilder` removed.
+
+### 19.0.0
+
+#### Features
+
+- Added the rest of the mapping and attributes configuration for constructor parameters.
+- Reading speed improvement.
+
+#### Breaking Changes
+
+- Added `IParameterMapper` to `BooleanFalseValuesAttribute`, `BooleanTrueValuesAttribute`, `ConstantAttribute`, `CultureInfoAttribute`, `DateTimeStylesAttribute`, `DefaultAttribute`, `FormatAttribute`, `HeaderPrefixAttribute`, `IgnoreAttribute`, `NameIndexAttribute`, `NullValuesAttribute`, `NumberStylesAttribute`, `OptionalAttribute`, and `TypeConverterAttribute`.
+- Renamed `MapTypeConverterOption` to `MemberMapTypeConverterOptions`.
+- Renamed `TypeConverterOptions.NumberStyle` to `TypeConverterOptions.NumberStyles`.
+- Removed `ReflectionHelper.CreateInstance<T>`.
+- Removed `ReflectionHelper.CreateInstance`.
+- Removed `ReflectionHelper.CreateInstanceWithoutContractResolver`.
+
+### 18.0.0
+
+#### Features
+
+- Added parameter mapping via class map or attributes.
+
+#### Breaking Changes
+
+- `NameAttribute` added interface `IParameterMapper`.
+- `IndexAttribute` added interface `IParameterMapper`.
+
+### 17.0.1
+
+#### Bug Fixes
+
+- Fixed issue where EnumConverter wasn't working if enum value wasn't an Int32.
+
+### 17.0.0
+
+#### Features
+
+- ValidateHeader will validate all members before calling HeaderValidated.
+
+#### Breaking Changes
+
+- `Action<bool, string[], int, ReadingContext> IReaderConfiguration.HeaderValidated` -> `Action<InvalidHeader[], ReadingContext> IReaderConfiguration.HeaderValidated`
+- `Action<bool, string[], int, ReadingContext> CsvConfiguration.HeaderValidated` -> `Action<InvalidHeader[], ReadingContext> CsvConfiguration.HeaderValidated`
+- `ConfigurationFunctions.HeaderValidated` signature changed from `(bool isValid, string[] headerNames, int headerNameIndex, ReadingContext context)` to `(InvalidHeader[] invalidHeaders, ReadingContext context)`
+- `CsvReader.ValidateHeader(ClassMap map)` -> `CsvReader.ValidateHeader(ClassMap map, List<InvalidHeader> invalidHeaders)`
+- Removed `HeaderValidationException.HeaderNames`.
+- Removed `HeaderValidationException.HeaderNameIndex`.
+- Added `InvalidHeader[] HeaderValidationException.InvalidHeaders`.
+
+### 16.2.0
+
+#### Features
+
+- Added ability to put `[Name]` attribute on enum values.
+- Added ability to register a converter for `Enum` that will be a default for all enum types.
+
+### 16.1.0
+
+#### Features
+
+- GetRecords throws `ObjectDisposedException` when `CsvReader` is disposed. A message hint was added to help the user understand what went wrong.
+
+### 16.0.0
+
+#### Features
+
+- Ability to have duplicate header names when using dynamic records.
+
+#### Breaking Changes
+
+- Added `Func<ReadingContext, int, string> IReaderConfiguration.GetDynamicPropertyName`.
+- Added `Func<ReadingContext, int, string> CsvConfiguration.GetDynamicPropertyName`.
+
+### 15.0.10
+
+- Fixed `IgnoreAttribute` to ignore the whole property treey if put on a reference property when auto mapped.
+
+### 15.0.9
+
+#### Bug Fixes
+
+- Fixed issue where `CsvDataReader.FieldCount` was throwing an exception if there were no records.
+
+### 15.0.8
+
+#### Bug Fixes
+
+- Fixed `CsvDataReader.GetOrdinal` issue where it wasn't doing a case-insensitive match after a failed case-sensitive match. Run values through `PrepareHeaderForMatch`.
+
+### 15.0.7
+
+#### Bug Fixes
+
+- Fixed issue where writing `null` to `WriteField` didn't output a field.
+
+### 15.0.6
+
+#### Bug Fixes
+
+- Fixed test not building.
+
+### 15.0.5
+
+#### Bug Fixes
+
+- Fixed issue with multiple character delimiter not working when the first char of the delimiter precedes the actual delimiter.
+
+### 15.0.4
+
+#### Bug Fixes
+
+- Fixed issue with `ReflectionHelper` caching not always unique.
+
+### 15.0.3
+
+#### Bug Fixes
+
+- Updated default number styles for `DecimalConverter` and `DoubleConverter` to match MS's recommendations.
+
+### 15.0.2
+
+#### Bug Fixes
+
+- Fixed issue with `DataReader.GetValues` not working when column and rows have different count.
+
+### 15.0.1
+
+### Bug Fixes
+
+- Downgraded `System.Threading.Tasks.Extensions` to 4.5.2 due to loading error of `Microsoft.Bcl.AsyncInterfaces`.
+
+### 15.0.0
+
+#### Features
+
+- Ignore attribute on a reference will ignore all properties on that reference.
+
+#### Breaking Changes
+
+- Added `IMemberReferenceMapper` to `IgnoreAttribute`.
+
+### 14.0.0
+
+#### Features
+
+- Added `IAsyncDispose` on writing classes.
+
+#### Breaking Changes
+
+- Added dependency `<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />` to `net45`.
+- Added dependency `<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />` to `net47`.
+- Added dependency `<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.3" />` to `netstandard2.0`.
+- `IWriter` added interface `IAsyncDisposable` for `net47` and `netstandard2.1`.
+- `ISerializer` added interface `IAsyncDisposable` for `net47` and `netstandard2.1`.
+- `WritingContext` added interface `IAsyncDisposable` for `net47` and `netstandard2.1`.
+- `CsvWriter` added methods `public async ValueTask DisposeAsync()` and `protected virtual async ValueTask DisposeAsync(bool disposing)` for `net47` and `netstandard`.
+- `CsvSerializer` added methods `public async ValueTask DisposeAsync()` and `protected virtual async ValueTask DisposeAsync(bool disposing)` for `net47` and `netstandard`.
+- `WritingContext` added methods `public async ValueTask DisposeAsync()` and `protected virtual async ValueTask DisposeAsync(bool disposing)` for `net47` and `netstandard`.
+
+### 13.0.0
+
+#### Features
+
+- Added `netstandard2.1` build.
+- Added required CultureInfo parameter to any class that uses CultureInfo.
+- Apply member attributes using interface instead of hard coding.
+- Added customizable new line when writing. You can choose from `CRLF`, `CR`, `LF`, or `Environment.NewLine`.
+- Renamed `Configuration` to `CsvConfiguration` to avoid namespace conflicts.
+- Added `GetRecordsAsync` and `WriteRecordsAsync`.
+
+#### Breaking Changes
+
+- Removed dependency `<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />` from `netstandard2.0`.
+- Removed dependency `<PackageReference Include="System.Reflection.TypeExtensions" Version="4.4.0" />` from `netstandard2.1`.
+- Added dependency `<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" />` to `net47`.
+- Added dependency `<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.1.0" />` to `netstandard2.0`.
+- `ClassMap.AutoMap()` -> `ClassMap.AutoMap(CultureInfo)`
+- `CsvParser.CsvParser(TextReader)` -> `CsvParser.CsvParser(TextReader, CultureInfo)`
+- `CsvParser.CsvParser(TextReader, bool)` -> `CsvParser.CsvParser(TextReader, CultureInfo, bool)`
+- `CsvReader.CsvReader(TextReader)` -> `CsvReader.CsvReader(TextReader, CultureInfo)`
+- `CsvReader.CsvReader(TextReader, bool)` -> `CsvReader.CsvReader(TextReader, CultureInfo, bool)`
+- `CsvSerializer.CsvSerializer(TextWriter)` -> `CsvSerializer.CsvSerializer(TextWriter, CultureInfo)`
+- `CsvSerializer.CsvSerializer(TextWriter, bool)` -> `CsvSerializer.CsvSerializer(TextWriter, CultureInfo, bool)`
+- `CsvWriter.CsvWriter(TextWriter)` -> `CsvWriter.CsvWriter(TextWriter, CultureInfo)`
+- `CsvWriter.CsvWriter(TextWriter, bool)` -> `CsvWriter.CsvWriter(TextWriter, CultureInfo, bool)`
+- `Factory.CreateParser(TextReader)` -> `Factory.CreateParser(TextReader, CultureInfo)`
+- `Factory.CreateReader(TextReader)` -> `Factory.CreateReader(TextReader, CultureInfo)`
+- `Factory.CreateWriter(TextWriter)` -> `Factory.CreateWriter(TextWriter, CultureInfo)`
+- `IFactory.CreateParser(TextReader)` -> `IFactory.CreateParser(TextReader, CultureInfo)`
+- `IFactory.CreateReader(TextReader)` -> `IFactory.CreateReader(TextReader, CultureInfo)`
+- `IFactory.CreateWriter(TextWriter)` -> `IFactory.CreateWriter(TextWriter, CultureInfo)`
+- Added `ISerializerConfiguration.NewLine`.
+- Added `ISerializerConfiguration.NewLineString`.
+- Added `Configuration.NewLine`.
+- Added `Configuration.NewLineString`.
+- Removed `Configuration.Configuration()` parameterless constructor.
+- Attributes now require the use of `IMemberMapper` or `IMemberReferenceMapper` to be loaded. All existing attributes added these and implemented the interface.
+- Renamed `Configuration` to `CsvConfiguration`.
+- Added `IAsyncEnumerable<T> CsvReader.GetRecordsAsync<T>()`
+- Added `IAsyncEnumerable<T> CsvReader.GetRecordsAsync<T>(T anonymousTypeDefinition)`
+- Added `IAsyncEnumerable<object> CsvReader.GetRecordsAsync(Type type)`
+- Added `IAsyncEnumerable<T> CsvReader.EnumerateRecordsAsync<T>(T record)`
+- Added `Task CsvWriter.WriteRecordsAsync(IEnumerable records)`
+- Added `Task CsvWriter.WriteRecordsAsync<T>(IEnumerable<T> records)`
+- Added `IAsyncEnumerable<T> IReader.GetRecordsAsync<T>()`
+- Added `IAsyncEnumerable<T> IReader.GetRecordsAsync<T>(T anonymousTypeDefinition)`
+- Added `IAsyncEnumerable<object> IReader.GetRecordsAsync(Type type)`
+- Added `IAsyncEnumerable<T> IReader.EnumerateRecordsAsync<T>(T record)`
+- Added `Task IWriter.WriteRecordsAsync(IEnumerable records)`
+- Added `Task IWriter.WriteRecordsAsync<T>(IEnumerable<T> records)`
+
+### 12.3.2
+
+#### Bug Fixes
+
+- Changed double and single converters to only test for format "R" if the user hasn't supplied a format.
+
+### 12.3.1
+
+#### Bug Fixes
+
+- Fix for bug in .NET Framework that causes a StackOverflowException. This needs to be changed back eventually.
+
+### 12.3.0
+
+#### Features
+
+- Added UriConverter.
+
+### 12.2.3
+
+#### Big Fixes
+
+- Changed round trip default format to test if "R" works and use backup of "G9" for float and "G17" for double.
+
+### 12.2.2
+
+#### Bug Fixes
+
+- Fixed issue where multiple properties with the same name were used when a child class property hides a parent class property using the new modifier.
+- Fixed issue where a null reference exception was thrown when writing and all properties are ignored.
+
+### 12.2.1
+
+#### Bug Fixes
+
+- Fixed issue where an "Index out of bounds of the array" exception was happening on TryGetField of type DateTime.
+- Fix `RawRecord` adding spaces if `TrimOptions.Trim` is used.
+
+### 12.2.0
+
+#### Features
+
+- Allow default value when using optional members.
+- Added BigIntConverter.
+- Mapping to member with type `Type` will throw exception by default.
+
+#### Bug Fixes
+
+- Made SingleConverter and DoubleConverter round-trip-able.
+
+### 12.1.3
+
+#### Bug Fixes
+
+- Always write \r\n line endings to be compliant with RFC 4180.
+
+### 12.1.2
+
+#### Bug Fixes
+
+- Fixed issue where CsvDataReader would skip the first row when there is no header record.
+- Fixed CsvDataReader issue where null values weren't being represented as DBNull.Value on GetValue and GetValues methods.
+- Fixed issue with IsDBNull method where an empty string was considered a null.
+
+### 12.1.1
+
+#### Bug Fixes
+
+- Fixed issue where `CsvReader.ReadAsync` wasn't behaving the same as `CsvReader.Read`.
+
+### 12.1.0
+
+#### Features
+
+- Added constructor to `Configuration` to pass in the `CultureInfo`. When passing a culture in, the `Delimiter` will be set to `CultureInfo.TextInfo.ListSeparator`.
+
+### 12.0.1
+
+#### Bug Fixes
+
+- Fixed issue where writing a dynamic object would still sort the header when no sort was specified.
+
+### 12.0.0
+
+#### Features
+
+- Added config option for sorting dynamic object properties when writing. Defaults to property value set order.
+
+#### Breaking Changes
+
+- Added `IComparer<string> IWriterConfiguration.DynamicPropertySort`.
+- Added `IComparer<string> Configuration.DynamicPropertySort`.
+
+### 11.0.1
+
+#### Bug Fixes
+
+- Fixed issue with leaveOpen not being used in the context's dispose.
+
+### 11.0.0
+
+#### Features
+
+- Removed config options `QuoteAllFields`, `QuoteNoFields`, `QuoteRequiredChars`, and `BuildREquiredQuoteChars` in favor of `ShouldQuote` function.
+
+#### Breaking Changes
+
+- Removed `IWriterConfiguration.QuoteAllFields`.
+- Removed `IWriterConfiguration.QuoteNoFields`.
+- Removed `IWriterConfiguration.QuoteRequiredChars`.
+- Removed `IWriterConfiguration.BuildRequiredQuoteChars`.
+- Removed `Configuration.QuoteAllFields`.
+- Removed `Configuration.QuoteNoFields`.
+- Removed `Configuration.QuoteRequiredChars`.
+- Removed `Configuration.BuildRequiredQuoteChars`.
+- Added `Func<string, WritingContext, bool> IWriterConfiguration.ShouldQuote`.
+- Added `Func<string, WritingContext, bool> Configuration.ShouldQuote`.
+
+### 10.0.0
+
+#### Features
+
+- Added a more friendly header validation message.
+- Separated header and field validation exceptions.
+- Added data properties to validation classes.
+- Changed Configuration.ReadingExceptionOccurred to not throw an exception and return a boolean whether it should throw an exception. The caller will throw if true.
+- Changed `NamedIndexCache` type from `Tuple<string, int>` to `(string, int)`.
+- Config option to consider a line break in a quoted field as bad data.
+- Changed delimiter default value from ',' to CultureInfo.CurrentCulture.TextInfo.ListSeparator.
+- PrepareHeaderForMatch now passes in the header name and index.
+- Dynamic records will now have null properties for missing fields.
+- Write ExpandoObject and IDynamicMetaObjectProvider object properties in ascending order to ensure order of property creation doesn't matter.
+- Added escape character configuration.
+- Added IDataReader implementation. This allows for easily loading a DataTable.
+
+### Breaking Changes
+
+- `ValidationException` is now `abstract`.
+- `IReaderConfiguration.ReadingExceptionOccurred` type changed from `Action<CsvHelperException>` to `Func<CsvHelperException, bool>`.
+- `Configuration.ReadingExceptionOccurred` type changed from `Action<CsvHelperException>` to `Func<CsvHelperException, bool>`.
+- Changed `NamedIndexCache` type from `Tuple<string, int>` to `(string, int)`. This adds a dependency to `System.ValueTuple` on .NET 4.5.
+- Added `bool IParserConfiguration.LineBreakInQuotedFieldIsBadData`.
+- Added `bool Configuration.LineBreakInQuotedFieldIsBadData`.
+- Changed `IReaderConfiguration.PrepareHeaderForMatch` type from `Func<string, string>` to `Func<string, int, string>`.
+- Changed `Configuration.PrepareHeaderForMatch` type from `Func<string, string>` to `Func<string, int, string>`.
+- Added `char ISerializerConfiguration.Escape`.
+- Added `char IParserConfiguration.Escape`.
+- Added `char Configuration.Escape`.
+
+### 9.2.3
+
+#### Bug Fixes
+
+- Fixed issue where TrimOptions.InsideQuotes would fail when there were escaped quotes in the field.
+
+### 9.2.2
+
+#### Bug Fixes
+
+- Fixed issue where NamedIndexes wasn't being reset on ReadHeader call.
+
+### 9.2.1
+
+#### Bug Fixes
+
+- Fixed issue where a TypeConverterAttribute isn't being used when on a reference.
+
+### 9.2.0
+
+#### Features
+
+- More clear exception messages when reading and a missing field is found.
+
+### 9.1.0
+
+#### Features
+
+- Allow parameterless constructor on classes and reference property classes when auto mapping.
+
+### 9.0.2
+
+#### Bug Fixes
+
+- Fixed issue where `WriteAsync` wasn't calling `SanitizeForInjection`.
+
+### 9.0.1
+
+#### Bug Fixes
+
+- Fixed issue where `leaveOpen` parameter in `CsvParser` constructor was hard coded.
+- Fixed issue where header validation was being ran on properties that only had an index mapped.
+
+### 9.0.0
+
+This release contains changes from 8.3.0 and 8.2.0.
+
+### 8.3.0
+
+This has been unlisted in nuget because of a breaking change before it. The changes are in 9.0.0.
+
+#### Features
+
+- Removed restriction that was disallowing the null char '\0' to be used as a delimiter.
+
+### 8.2.0
+
+This has been unlisted in nuget because of a breaking change. The changes are in 9.0.0.
+
+#### Features
+
+- Added Optional config to factory builder.
+- Added `OptionalAttribute`.
+
+#### Breaking Changes
+
+- Added `IHasMapOptions : IHasOptional`.
+- Added `MemberMapBuilder : IHasOptional`.
+- Added `MemberMapBuilder : IHasOptionalOptions`.
+
+### 8.1.1
+
+#### Features
+
+- Configuration functions are available on a static class `ConfigurationFunctions`.
+
+#### Bug Fixes
+
+- Fixed issue where `IgnoreBlankLines` wasn't being checked in `GetField<T>(int index, ITypeConverter converter)`.
+
+### 8.1.0
+
+#### Features
+
+- Added `IsOptional` mapping option.
+
+### 8.0.0
+
+#### Features
+
+- Added Unity build.
+- Added `IsOptional` mapping option.
+
+#### Bug Fixes
+
+- Added missing interface methods to configs.
+- Fixed issue with parsing when only CR is used and fields are quoted.
+- Fixed issue where `GetField` was calling the `ObjectResolver`.
+- Made the contexts not serializable in exceptions.
+- Fixed issue with `ObjectResolver` fallback causing a `StackOverflowException`.
+
+#### Breaking Changes
+
+- Added `IReaderConfiguration.IgnoreReferences`.
+- Added `IWriterConfiguration.IgnoreReferences`.
+
+### 7.1.1
+
+#### Bug Fixes
+
+- Added constructor to `CsvWriter` that allows for `leaveOpen` to be set.
+- Made `CsvWriter.Dispos`e able to be called multiple times.
+- Added `ConfigureAwait(false)` to all async calls.
+
+### 7.1.0
+
+#### Features
+
+- Changed record object creation to use the `ObjectResolver`.
+
+### 7.0.1
+
+#### Bug Fixes
+
+- Allow private constructors to be used to instantiate new class instances.
+
+### 7.0.0
+
+#### Features
+
+- Reading performance improvements.
+
+#### Breaking Changes
+
+- Removed `IReadingContext` and `IWritingContext` interfaces. `ReadingContext` and `WritingContext` are used directly now.
+
+### 6.1.1
+
+#### Bug Fixes
+
+- Fixed issue with circular references when auto mapping.
+
+### 6.1.0
+
+#### Features
+
+- Dynamic now uses `Configuration.PrepareHeaderForMatch` on header name to get property name for dynamic object.
+
+### 6.0.3
+
+#### Bug Fixes
+
+- Fixed issue with LINQPad not working properly due to types from differently assemblies being cached in the writer.
+
+#### Breaking Changes
+
+- `IWritingContext.TypeActions` signature changed.
+
+### 6.0.2
+
+#### Bug Fixes
+
+- Fixed issue with LINQPad not working properly due to types from differently assemblies being cached.
+
+### 6.0.0
+
+#### Features
+
+- Use `ObjectResolver` to create internal classes `RecordManager`, `ExpressionManager`, `RecordCreatorFactory`, and `RecordHydrator`, `RecordWriterFactory`.
+- Added generic resolve method to object resolver.
+- Added mapping methods to MemberMap for use during runtime mapping.
+- Added more info and properties to TypeConverterException.
+
+#### Bug Fixes
+
+- Fixed issue where mapping an interface doesn't get used when writing.
+
+#### Breaking Changes
+
+- Added `IObjectResolver.Resolve<T>( params object[] constructorArgs )` method.
+- Added `IWriter.WriteRecords<T>( IEnumerable<T> records )` method.
+- `TypeConverterException` constructors signatures changed.
+
+### 5.0.0
+
+#### Features
+
+- Added `Map<TClass>.References( expression )` back in.
+
+#### Bug Fixes
+
+- Fixed `DefaultTypeConverterException` message. The generated message wasn't being used.
+
+### 4.0.3
+
+#### Bug Fixes
+
+- Added `ReadingExceptionOccurred` callback to `GetRecord` methods when an exception occurs.
+
+### 4.0.2
+
+#### Bug Fixes
+
+- Fixed issue with parsing when buffer spans over a field.
+
+### 4.0.1
+
+#### Bug Fixes
+
+- Fixed issue where trimming inside quotes would fail when the character after a space was a delimiter, \r, or \n.
+
+### 4.0.0
+
+#### Breaking Changes
+
+- Added setter to `ISerializerConfiguration.Quote`.
+- Removed `ClassMap<TClass>.References( expression, constructorArs )`. Use sub property mapping instead.
+- Removed `ClassMap<TClass>.ConstructUsing( expression ). Use the `ObjectResolver` instead.
+- Change how reference header prefixing works.
+ - Changed `Configuration`/`IReaderConfiguration`/`IWriterConfiguration` `bool PrefixReferenceHeaders` to `Func<Type, string, string> ReferenceHeaderPrefix`. The function takes in the member type and member name and returns the prefix.
+ - Removed `MemberReferenceMap.Prefix()` method.
+ - Removed `ParameterReferenceMap.Prefix()` method.
+- Changed `Configuration`/`IReaderConfiguration`/`IWriterConfiguration` `ClassMap AutoMap<T>()` to `ClassMap<T> AutoMap<T>()`
+- Changed `TypeConverterException` constructors parameter from `ReadingContext` to `IReadingContext`.
+
+### 3.4.0
+
+#### Bug Fixes
+
+- Fixed issue when a map was created through auto mapping, you couldn't use sub property mapping to update a member.
+
+### 3.3.0
+
+#### Features
+
+- Added more information to the `DefaultTypeConverter.ConvertFromString` not convertible exception.
+- Reduced the number of `PrepareHeaderForMatch` calls.
+
+### 3.2.0
+
+#### Features
+
+- Attribute mapping. It's back...
+
+### 3.1.1
+
+#### Bug Fixes
+
+- Fixed issue where you weren't able to write `IEnumerable`.
+
+### 3.1.0
+
+#### Features
+
+- Allow multiple headers to be written.
+
+#### Bug Fixes
+
+- Flush `CsvWriter` on `Dispose`.
+- Made `ShouldSkipRecord` not called if the parser returns `null` for an end of stream.
+- `ShouldUseConstructorParameters` returns `false` if there are no constructors.
+- Header validation doesn't validate members where `ConvertUsing` or `Constant` are used.
+
+### 3.0.0
+
+#### Features
+
+- netstandard2.0
+- Massive speed improvements to the `CsvParser`.
+- Speed improvements to `CsvSerializer`.
+- Map child properties so multiple mapping classes aren't needed.
+- `ConvertUsing` implementation for writing.
+- Read/write `IEnumerable` properties.
+- Field mapping.
+- Async reading/writing.
+- Added `ClassMapBuilder` to build maps on the fly without a mapping class.
+- Write `IDynamicMetaObjectProvider` objects. `DynamicObject` and `ExpandoObject` are the 2 most common.
+- Allow `null` fields to be written.
+- `IDictionary` type converters.
+- Added trim options to trim in parser and removed trim from reader.
+- Header validation.
+- Field validation.
+- Added `leaveOpen` flag to constructors to not dispose of underlying `TextReader` and `TextWriter`.
+- Added properties to `CsvHelperException` and removed the string data.
+- Speed up mappings that use `ConvertUsing` by caching the named indexes.
+- Write comments.
+- Map constants.
+- Write fields that aren't mapped.
+- Specify values that resolve to `null` when reading.
+- Added CsvProperMap<T> to allow for compile time type checking on mappings.
+- Read more than 1 header row.
+- Changed reading exception callback to send a CsvHelperException.
+- Map the same property more than once.
+- Exposed the underlying TextReader as a property.
+- Removed header matching manipulation configuration `IsHeaderCaseSensitive`, `IgnoreHeaderWhiteSpace`, and `TrimHeaders` and added a config for `PrepareHeaderForMatch` that is a function. Both the header field name and the property name are ran through this method before matching against each other.
+- Added interfaces for configuration so you can tell what options are available in your current context.
+- Moved detection of column count changes into the reader. The parser shouldn't care and should just return whatever data it finds.
+- `ConstructUsing` works with reference maps.
+- `ConstructUsing` can use initializers.
+- Allow resuming reading of more data is written to the stream.
+- Auto mapping with user defined `struct`.
+- Ability to change required quote characters.
+- Speed improvements when using `GetField`.
+- Speed improvements when using `WriteField`.
+- Allow mapping default value to be a string that is converted.
+- Moved reading/writing state data into a common context object that is shared.
+- Multiple `string` formats for `TypeConverterOptions`.
+- Created object resolver so interfaces can be mapped to and IoC containers can be plugged in.
+- Made methods `ReIndex` and `GetMaxIndex` on `CsvClassMap` `public`.
+- Added a `Flush` method to the writer so `NextRecord` just writes a line ending. This will allow users to not write a line ending if they want.
+- Removed statics to eliminate possible threading issues.
+- Added `SerializableAttribute` to exception classes. It was removed previously because of netstandard1.x not having it available.
+- Added `ByteArrayConverter`.
+- Reading anonymous types.
+- Auto mapping with any constructor.
+- Changed `Property` naming to `Member` since both properties and fields are used.
+- `TypeConverterFactory` is now instance of `Configuration` instead of a static.
+- Changed `Configuration` flags to callbacks with default functionality to let the user change the functionality if they want.
+
+#### Bug Fixes
+
+- Fixed issue with `CsvClassMapCollection[type]` choosing the wrong type when multiple types on the inheritance tree are mapped.
+- Fixed issue where setting `Configuration.ShouldSkipRecord` method always overrides the `Configuration.SkipEmptyRecords` setting.
+- Fixed issue where ignoring header whitespace wouldn't work if a named property had the same whitespace in it.
+- When comments are on and a field is being written that is the first field in the record and the first char is a comment char, quote the field because it's not a comment.
+- Fixed issue with type converter options set in factory not working with auto mapping or explicit map.
+- Fixed line ending spanning buffer issue.
+- Fixed issue of skipping a character if a line ending was within a quoted field.
+- Added locking to factory to make it thread safe.
+- Fixed bug when mapping a constant then mapping another property after will throw an exception.
+- Changed reflection calls to `ConvertToString` to get the method for `ITypeConverter` instead of the actual converter. This is so the overridden implementation will be used instead of a random method with the same name.
+- Adding locking in `ReflectionHelper.CreateInstance` for the static delegate cache.
+- Fixed quote handling issue of `IsFieldBad` by marking unquoted fields with quote chars as bad only when `Configuration.IgnoreQuotes` is `false`.
+- Fixed issue with automapping not mapping references correctly in some nested situations because it thought it was a circular dependency when it wasn't.
+- Fixed issue with private properties not being able to be set.
+- Fixed issue with getting the class map from the collection. It was only getting the current and not looking up the tree.
+- Fixed issue with `Constant` not working with `null`.
+
+#### Breaking Changes
+
+- Removed all .NET builds except for net45 and netstandard2.0.
+- Removed obsolete code.
+ - `object ICsvReader.GetField( int index, ITypeConverter converter )`
+ - `object ICsvReader.GetField( string name, ITypeConverter converter )`
+ - `object ICsvReader.GetField( string name, int index, ITypeConverter converter )`
+ - `void ICsvWriter.WriteField( Type type, object field )`
+ - `void ICsvWriter.WriteField( Type type, object field, ITypeConverter converter )`
+ - `void ICsvWriter.WriteRecord( Type type, object record )`
+- Moved methods that aren't row level out of `ICsvReaderRow` and into `ICsvReader`.
+ - `IEnumerable<T> GetRecords<T>()`
+ - `IEnumerable<object> GetRecords( Type type )`
+ - `void ClearRecordCache<T>()`
+ - `void ClearRecordCache( Type type )`
+ - `void ClearRecordCache()`
+- Removed `CanConvertTo` and `CanConvertFrom` from the type converters because there is no need for them.
+- Added properties to `CsvHelperException` and removed the string data.
+- Changed `WriteRecord` to not call `NextRecord`.
+- Changed config setting name from `IgnorePrivateAccessor` to `IncludePrivateProperties` to be more clear on intention.
+- Changed reading exception callback to send a `CsvHelperException`.
+- Removed configuration `IsHeaderCaseSensitive`, `IgnoreHeaderWhiteSpace`, and `TrimHeaders` and added `PrepareHeaderForMatch`.
+- Changed `DateTime` and `DateTimeOffset` converters to not work when the `string` is spaces to match what all the other converters do. The .NET Framework `DateTime` and `DateTimeOffset` converters will convert a `string` of all spaces into `MinValue`, so we are diverging from that a little.
+- Changed `ReadHeader` to not set `CurrentRecord` to `null`.
+- Removed Excel specific code. This will go into a separate library. The malformed fallback behavior that mimics Excel still exists.
+- Moved reading/writing state data into a common context object that is shared.
+- Changed `BadDataCallback` to take in a `ReadingContext` instead of a `string`.
+- Removed `Csv` prefix from all classes except `CsvReader`, `CsvParser`, `CsvWriter`, and `CsvSerializer`.
+- Removed default `null` values since there is no common standard that could be found.
+- Removed default `boolean` values of `yes`, `y`, `no`, `n` since it's not a standard boolean. `true`, `false`, `1`, `0` still work.
+- Changed default delimiter to `,` instead of ListSeparator.
+- Added a `Flush` method to the writer.
+- Changed `Property` naming to `Member`.
+- Removed `Configuration`s `ThrowOnBadData`, `IgnoreReadingExceptions`, `SkipEmptyRecords`, and `WillThrowOnMissingField` in favor of function callbacks.
+- Renamed
+ - `TypeConverterFactory` to `TypeConverterCache`
+ - `TypeConverterOptionsFactory` to `TypeConverterOptionsCache`
+ - `Configuration.HeaderValidatedCallback` to `Configuration.HeaderValidated`
+ - `Configuration.MissingFieldFoundCallback` to `Configuration.MissingFieldFound`
+ - `Configuration.ReadingExceptionCallback` to `Configuration.ReadingExceptionOccurred`
+ - `Configuration.BadDataFoundCallback` to `Configuration.BadDataFound`
+ - `ICsvParser` to `IParser`
+ - `FieldReader` to `CsvFieldReader`
+ - `ICsvReader` to `IReader`
+ - `ICsvReaderRow` to `IReaderRow`
+ - `ICsvSerializer` to `ISerializer`
+ - `ICsvWriter` to `IWriter`
+ - `ICsvWriterRow` to `IWriterRow`
+
+### 2.16.3
+
+#### Bug Fixes
+
+- Fixed issue with `CsvClassMapCollection[type]` choosing the wrong type when multiple types on the inheritance tree are mapped.
+
+### 2.16.2
+
+#### Bug Fixes
+
+- Made `TypeInfo` compatibility stuff internal to not cause conflicts.
+
+### 2.16.1
+
+#### Bug Fixes
+
+- Fix for UWP release not working.
+
+### 2.16
+
+#### Features
+
+- Added `CsvReader.ReadHeader` so headers can be read without reading the first row.
+
+### 2.15.0.2
+
+#### Features
+
+- Update to .NET Core 1.0 release.
+
+### 2.15
+
+#### Features
+
+- Added `SerializableAttribute` to all exceptions.
+
+### 2.14.3
+
+#### Features
+
+- Updated project to .NET Core RC2.
+
+#### Bug Fixes
+
+- Fixed issue with assembly not being a release build.
+
+### 2.14.2
+
+#### Bug Fixes
+
+- Added net45 build and excluded it from CoreFX compatibility.
+
+### 2.14.1
+
+#### Bug Fixes
+
+- Fixed issue with .NET 2.0 classes being included that shouldn't have been in .NET 4.0.
+
+### 2.14
+
+#### Features
+
+- Added CoreCLR support.
+
+### 2.13.5
+
+#### Bug Fixes
+
+- Fixed `ShouldSkipRecord` not working on rows before header.
+
+### 2.13.3
+
+#### Bug Fixes
+
+- Fixed issue where the number of delimiter characters was read when a multiple character delimiter is hit. This was causing non-delimiters to be read when just the first character of the delimiter was found.
+
+### 2.13.2
+
+#### Bug Fixes
+
+- Fixed issue with `TryGetField` with named index returning wrong value.
+
+### 2.13.1
+
+#### Bug Fixes
+
+- Added missing `DateTimeConverter` to the list of default converters.
+
+### 2.13
+
+#### Features
+
+- When writing, use empty values for properties on reference properties when flag `UseNewObjectForNullReferenceProperties` is off.
+
+#### Bug Fixes
+
+- Fixed portable target for Windows Phone 8.1.
+
+### 2.12
+
+#### Features
+
+- Added Windows Phone 8.1 support to the PCL assembly.
+- Added ability to set a prefix for reference maps. i.e. `Prefix( string prefix = null)`
+- Added callback to use to determine if a record should be skipped when reading.
+- Excel leading zeros number formatting. This allows you to read and write numbers that will preserve the zeros on the front. i.e. `="0001"`
+- Use default value when a field is null because of a missing field in the row.
+- Added `TrimFields` to CsvWriter.
+- ability to specify constructor arguments when referencing another map within a mapping.
+- Added `Names` property on `CsvPropertyNameCollection` to get raw list of property names.
+- Added raw file line number to parser.
+- Mapping methods on `CsvClassMap<T>` are now public to more easily allow mapping during runtime.
+- Added `DateTimeOffset` converter.
+
+#### Bug Fixes
+
+- Fixed exception that was occurring when fields were empty and `UseExcelLeadingZerosFormatForNumerics = true`.
+- Excel compatibility fix. If a field starts with a quote but never ends and the end of the file is reached, the field would be null. The field will now contain everything.
+- Don't get static properties when automapping.
+- Made all exceptions thrown contain Exception.Data["CsvHelper"].
+- Fixed missing support writing the double quotes for inner quotes on a quoted field. This used to be there and was removed at some point. A unit test is now in place so this doesn't happen again.
+
+### 2.11.1.1
+
+#### Bug Fixes
+
+- Fixed issue with writing an array of records.
+
+### 2.11
+
+#### Features
+
+- Allow preservation of numeric strings for Excel.
+
+#### Bug Fixes
+
+- Fixed writing issue with anonymous objects outputting wrong headers.
+
+### 2.10
+
+#### Features
+
+- Updated writer methods to match reader methods.
+
+### 2.9.1
+
+#### Bug Fixes
+
+- Fixed issue where char converter would trim a single space string.
+
+### 2.9
+
+#### Features
+
+- Added support to ignore whitespace when determining a record is empty.
+
+### 2.8.4
+
+#### Bug Fixes
+
+- Fixed breaking change to not break.
+
+### 2.8.3
+
+#### Bug Fixes
+
+- Fixed issue where header wasn't written when there were no records in the IEnumerable on WriteRecords( IEnumerable ).
+
+### 2.8.2
+
+#### Bug Fixes
+
+- Fixed issue where an exception was always thrown if Configuration.ThrowOnBadData is on.
+
+### 2.8
+
+#### Features
+
+- Added configurations for a callback when a bad field is detected. Added configuration to throw an exception when a bad field is detected.
+- Made mapping with interfaces not duplicate property maps.
+
+### 2.7.1
+
+#### Bug Fixes
+
+- Fixed issue with mappings overwriting an explicitly set index when re-indexing.
+- Auto mapping will ignore Enumerable properties instead of throwing an exception. Exceptions will still be thrown if an Enumerable is used outside of auto mapping.
+
+### 2.7
+
+#### Bug Fixes
+
+- Fixed issue where using dynamic proxy objects would always automap instead of using a registered class map.
+- Fixed issue when trimming fields and the field is null.
+- Fixed issue when writing a field and the value is null.
+- Removed deprecated writer methods.
+
+### 2.6.1
+
+#### Features
+
+- PCL implementation. .NET 4.0+, Silveright 4.0+, WP7 7.5+, Windows 8
+- Excel separator record reading and writing.
+- Writer speed enhancements. Thanks to thecontrarycat.
+
+#### Bug Fixes
+
+- Fixed issue with mapping order when no index is specified.
+
+### 2.6
+
+#### Features
+
+- Added config to prefix headers of reference properties with the parent property name when automapping.
+- Ability to ignore blank lines. When this config option is set to false, the parser will return and array of nulls. You can differentiate between a row with commas this way. The reader will behave the same way as a blank record.
+
+#### Bug Fixes
+
+- Fixed issue when writing and a reference map type is a struct.
+
+### 2.5
+
+#### Features
+
+- Global type converter options.
+- Easier access to property maps to allow for changing maps on the fly.
+- Option to ignore references when auto mapping.
+- AutoMap functionality is available in class maps.
+- Mappings can be specified in the constructor of the mapping class. Overriding CreateMap is now deprecated.
+
+#### Bug Fixes
+
+- Updated ConvertUsing to not cause the exception "Operation Could Destabilize the Runtime" when property is a nullable type and a non-nullable type is returned.
+
+### 2.4.1
+
+#### Bug Fixes
+
+- Fixed issue where parsing would add delimiter chars to the field when the buffer ran out in the middle of the delimiter.
+
+### 2.4
+
+#### Features
+
+- Split writing up into a writer and serializer so the writer can write other things besides CSV files.
+
+#### Bug Fixes
+
+- Fixed issue where a NullReferenceException was thrown when using reference maps and a reference was null.
+- Fixed issue where TryGetField was throwing MissingFieldException.
+- Fixed issue where a commented row on the last line that doesn't have a newline will return the commented row.
+- Fixed NuGet package for WP8.
+- Added missing WriteHeader methods to ICsvWriter that were a part of CsvWriter.
+
+### 2.3
+
+#### Features
+
+- Support for TimeSpan.
+- Support for writing records of type dynamic. The dynamic objects do not work with collections, which means ExpandoObject doesn't currently work.
+
+#### Bug Fixes
+
+- Fixed issue with extra exception info not being added when the reading exception callback is used.
+- Fixed issue where having only reference maps throws exception.
+
+### 2.2.2
+
+#### Bug Fixes
+
+- Fixed issue with parser where a line wouldn't end if the previous char was a \0.
+
+### 2.2.1
+
+#### Bug Fixes
+
+- Fixed issue with trimming fields not working under one path.
+2.2.0
+
+#### Features
+
+- Added Row property to ICsvReader.
+- Config option to trim headers and values when reading.
+
+### 2.1.1
+
+#### Bug Fixes
+
+- Fixed issue when WillThrowOnMissingField is off and exception was still being thrown.
+
+### 2.1.0
+
+#### Features
+
+- Made RegisterClassMap overload with CsvClassMap instance public.
+
+### 2.0.1
+
+#### Bug Fixes
+
+- Made a WinRT Any CPU build and removed the arch specific WinRT builds.
+
+### 2.0.0
+
+#### Features
+
+- Added parser configuration to ignoring quotes and treating them like any other character.
+- Added CsvFactory to create ICsvParser, ICsvReader, and ICsvWriter classes. This is useful when you need to unit test code that uses CsvHelper since these 3 classes require a TextReader or TextWriter to work.
+- All assembly versions are strong named but will use a single version of 2.0.0.0. The file version and NuGet versions will change with every release.
+- Removed class type constraint from reading and writing.
+- Added non-generic class mapping overload.
+- WriteRecords param changed from IEnumerable<object> to non-generic IEnumerable.
+- Value types can be read and written instead of just custom classes.
+- Indexes are automatically set and incremented when mapping in order of the Map and Reference calls.
+- Auto mapping with circular reference detection.
+- Config option to ignore spaces in header names.
+- Fixed exception handling. Exception are no longer wrapped. Exception.Data["CsvHelper"] contains CsvHelper specific exception info.
+- Row exception can be skipped during GetRecords.
+- Renamed IsStrictMode to WillThrowOnMissingField.
+- Window Phone 7 & 8 builds.
+- Auto mapping will use defined maps if available.
+- Type converter options.
+- Added IEnumerable converter that throws an exception so people will know that converting to/from and enumerable is not supported instead of getting a cryptic error message.
+- Dynamic support for reading and writing.
+- Multiple maps can be supplied.
+- Renamed InvalidateRecordCache to ClearRecordCache.
+- Recursive reference mapping down the whole mapping tree.
+- Configuration.CultureInfo was added in place of Configuration.UseInvariantCulture.
+
+#### Bug Fixes
+
+- Getting the exception helper message failed when writing because no parser is available.
+- WriteRecords Dynamic invoke had wrong parameter count.
+- GetField( string ) was not returning null if the header is not found.
+- CsvBadDataException when there were extra columns in the row.
+- Raw record corruption.
+
+### 1.17.0
+
+#### Features
+
+- Ignore properties that can't be set in attribute mapping.
+- Made TypeConverterFactory thread safe.
+- Added remove converter method.
+
+#### Bug Fixes
+
+- Issue with writer exception in WinRT.
+
+### 1.16.0
+
+#### Features
+
+- Change TypeConverterFactory to use a set of cache type converters so global type converters can be used.
+- Added GetField<T, TConverter> overloads.
+- Changed all Activator.CreateInstance calls to use compiled expression trees to create them instead.
+- Changed mapping for ConvertUsing to accept a Func so a block expression can be used.
+
+### 1.15.0
+
+#### Features
+
+- Support for Silverlight 4 & 5.
+
+#### Bug Fixes
+
+- Issue where writing with Configuration.QuoteAllFields enabled will not quote the quotes inside the field.
+- Issue with WinRT not building after pull request merge.
+
+### 1.14.0
+
+#### Features
+
+- Parse full line on read. This allows for the parser to retain the whole unchanged raw CSV lin on a read.
+- Changed delimiter config from a char to a string.
+- Iterating records multiple times will throw a CsvReaderException. This is to help stop confusion when 0 results are returned the second iteration.
+
+#### Bug Fixes
+
+- Issue where EnumConverter isn't created correctly from the TypeConverterFactory.
+- Issue with updating count for all closing quotes.
+
+### 1.13.0
+
+#### Features
+
+- Configuration to always not quote all fields.
+- WriteHeader method is public.
+- Added enum converter.
+
+#### Bug Fixes
+
+- Issue with boolean converter returning true for "no" value.
+- Issue with GetMethod in WinRT.
+
+### 1.12.1
+
+#### Bug Fixes
+
+- Issue where an exception was being thrown when reading all records multiple times.
+
+### 1.12.0
+
+#### Features
+
+- WinRT support.
+
+### 1.11.0
+
+#### Features
+
+- Better exception information added to CsvBadDataException.
+
+### 1.10.0
+
+#### Features
+
+- Mapping property for CreateUsing which allows user to specify how the property gets created.
+
+### 1.9.2
+
+#### Bug Fixes
+
+- Issue with skipping empty records.
+
+### 1.9.1
+
+#### Bug Fixes
+
+- Issue with detecting column count changes.
+
+### 1.9.0
+
+#### Features
+
+- Added properties to CsvReaderException to give more information about the error.
+- Ability to skip empty records based on config settings.
+- Getting by index that doesn't exist will give a default or CsvMissingFieldException.
+- Made column count detection a config setting.
+- Map option for constructing the row object.
+- Throw exception when inconsistent column lengths are detected.
+- String.Format support in CsvWriter.
+- Excel compatible parsing.
+- Parser can keep track of the byte position using an encoding so a user can seek to a stream and start reading from there.
+
+#### Bug Fixes
+
+- Fixed bug with column count detection.
+- Issue with double counting the closing quote.
+- Issue where parsing was incorrect when the last row didn't have a CRLF at the end.
+- Issue with error messages.
+
+### 1.8.0
+
+#### Features
+
+- Writer overload for shouldQuote when writing a field.
+- Ability for using alternative names for headers in the configuration.
+- Better error messages.
+
+### 1.7.0
+
+#### Features
+
+- Configuration to quote all fields when writing.
+- Parser keeps a char count of where it's at.
+
+#### Bug Fixes
+
+- Fixed subclass issue by having the reader and writer use interfaces instead of concrete classes.
+
+### 1.6.0
+
+#### Features
+
+- Custom boolean type converter that can convert from 1 and 0 besides the normal conversion.
+- Property map configuration to set a default value.
+- CsvWriter no longer flushes to the output stream after every record.
+- Non-generic overloads for reading, writing, and attribute mapping.
+- Invalidate record cache will clear the properties list.
+
+### 1.5.0
+
+#### Features
+
+- Support .NET 2.0 and 3.5 builds.
+
+### 1.4.0
+
+#### Features
+
+- Case insensitive header matching.
+
+### 1.3.0
+
+#### Features
+
+- Removed CsvHelper class.
+- Property reference mapping. One level deep.
+
+### 1.2.0
+
+#### Features
+
+- Support for multiple duplicate header names.
+
+### 1.1.2
+
+#### Bug Fixes
+
+- Issue when using a readonly or writeonly stream and disposing causes an exception.
+
+### 1.1.1
+
+#### Features
+
+- Updated CsvHelper.cs to allow for readonly and writeonly stream.
+
+#### Bug Fixes
+
+- Fixed DateTimeConverter issue where a white space string would return a - DateTime.MinValue instead of null.
+
+### 1.1.0
+
+#### Features
+
+- Changed .NET 3.5 project to client profile.
+- Added getter for the current record in the header.
+
+### 1.0.0
+
+#### Features
+
+- Changed strict mode to default to true.
+- Renamed strict mode configuration property.
+- Changed reader to not throw an exception when there are duplicate header records unless in strict mode.
+
+#### Bug Fixes
+
+- Fixed bug where if there is no line ending at the end of the file, the last field would be null instead of an empty string.
+- Fixed configuration references and constructor signatures.
+
+### 0.16.0
+
+#### Features
+
+- Added configuration option for using CultureInvariant to read/write.
+- Updated the reader/writer to use the config option.
+- Both CsvReader and CsvWriter are using Local culture when converting from/to strings.
+- CsvClassMap without generic argument.
+
+### 0.15.0
+
+#### Features
+
+- Changed TryGetField<T> to do a low level check instead of jsut wrapping in try/catch blocks.
+- Removed non generic TryGetField methods.
+- Formatting changes.
+- Changed CsvParser to use the Configuration.Comment char instead of #.
+
+#### Bug Fixes
+
+- Fixed indentation error caused by new constructor in CsvPropertyMap.
+
+### 0.14.0
+
+#### Features
+
+- Changed GetRecords<T> to return IEnumerable<T>.
+- Added convenience constructor to CsvPropertyMap.
+- Major configuration overhaul.
+- Changed end of file check to be more low level.
+- Final record is returned if there is a trailing delimiter.
+- Added an exception re-throw to parsing that tells the line and character number.
+- Added ability to change what the quote char is.
+- Added CSV specific exceptions.
+
+#### Bug Fixes
+
+- Fix for issue when CsvHelper uses CurrentCulture instead of InvariantCulture.
+
+### 0.13.0
+
+#### Features
+
+- Changed StreamReader to TextReader to be more generic.
+
+### 0.12.0
+
+#### Features
+
+- Added option to have a commented out line using '#' as the first character of the line.
+
+#### Bug Fixes
+
+- Fixed issue with spaces in non-quoted field.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/_directory.json b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/_directory.json
new file mode 100644
index 0000000..63672f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/_directory.json
@@ -0,0 +1,160 @@
+{
+ "toc": [
+ {
+ "title": "Prerequisites",
+ "link": "~/examples/prerequisites",
+ "children": [
+ {
+ "title": "Using and Dispose",
+ "link": "~/examples/prerequisites/using-and-dispose"
+ },
+ {
+ "title": "Reading and Writing Files",
+ "link": "~/examples/prerequisites/reading-and-writing-files"
+ },
+ {
+ "title": "Streams",
+ "link": "~/examples/prerequisites/streams"
+ }
+ ]
+ },
+ {
+ "title": "Reading",
+ "link": "~/examples/reading",
+ "children": [
+ {
+ "title": "Get Class Records",
+ "link": "~/examples/reading/get-class-records"
+ },
+ {
+ "title": "Get Dynamic Records",
+ "link": "~/examples/reading/get-dynamic-records"
+ },
+ {
+ "title": "Get Anonymous Type Records",
+ "link": "~/examples/reading/get-anonymous-type-records"
+ },
+ {
+ "title": "Enumerate Class Records",
+ "link": "~/examples/reading/enumerate-class-records"
+ },
+ {
+ "title": "Reading by Hand",
+ "link": "~/examples/reading/reading-by-hand"
+ },
+ {
+ "title": "Reading Multiple Data Sets",
+ "link": "~/examples/reading/reading-multiple-data-sets"
+ },
+ {
+ "title": "Reading Multiple Record Types",
+ "link": "~/examples/reading/reading-multiple-record-types"
+ }
+ ]
+ },
+ {
+ "title": "Writing",
+ "link": "~/examples/writing",
+ "children": [
+ {
+ "title": "Write Class Objects",
+ "link": "~/examples/writing/write-class-objects"
+ },
+ {
+ "title": "Write Dynamic Objects",
+ "link": "~/examples/writing/write-dynamic-objects"
+ },
+ {
+ "title": "Write Anonymous Type Objects",
+ "link": "~/examples/writing/write-anonymous-type-objects"
+ },
+ {
+ "title": "Appending to an Existing File",
+ "link": "~/examples/writing/appending-to-an-existing-file"
+ }
+ ]
+ },
+ {
+ "title": "Configuration",
+ "link": "~/examples/configuration",
+ "children": [
+ {
+ "title": "Class Maps",
+ "link": "~/examples/configuration/class-maps",
+ "children": [
+ {
+ "title": "Mapping Properties",
+ "link": "~/examples/configuration/class-maps/mapping-properties"
+ },
+ {
+ "title": "Mapping by Name",
+ "link": "~/examples/configuration/class-maps/mapping-by-name"
+ },
+ {
+ "title": "Mapping by Alternate Names",
+ "link": "~/examples/configuration/class-maps/mapping-by-alternate-names"
+ },
+ {
+ "title": "Mapping Duplicate Names",
+ "link": "~/examples/configuration/class-maps/mapping-duplicate-names"
+ },
+ {
+ "title": "Mapping by Index",
+ "link": "~/examples/configuration/class-maps/mapping-by-index"
+ },
+ {
+ "title": "Auto Mapping",
+ "link": "~/examples/configuration/class-maps/auto-mapping"
+ },
+ {
+ "title": "Ignoring Properties",
+ "link": "~/examples/configuration/class-maps/ignoring-properties"
+ },
+ {
+ "title": "Constant Value",
+ "link": "~/examples/configuration/class-maps/constant-value"
+ },
+ {
+ "title": "Type Conversion",
+ "link": "~/examples/configuration/class-maps/type-conversion"
+ },
+ {
+ "title": "Inline Type Conversion",
+ "link": "~/examples/configuration/class-maps/inline-type-conversion"
+ },
+ {
+ "title": "Optional Maps",
+ "link": "~/examples/configuration/class-maps/optional-maps"
+ },
+ {
+ "title": "Validation",
+ "link": "~/examples/configuration/class-maps/validation"
+ }
+ ]
+ },
+ {
+ "title": "Attributes",
+ "link": "~/examples/configuration/attributes"
+ }
+ ]
+ },
+ {
+ "title": "Type Conversion",
+ "link": "~/examples/type-conversion",
+ "children": [
+ {
+ "title": "Type Converter Options",
+ "link": "~/examples/type-conversion/type-converter-options"
+ },
+ {
+ "title": "Custom Type Converters",
+ "link": "~/examples/type-conversion/custom-type-converter"
+ }
+ ]
+ },
+ {
+ "title": "CsvDataReader",
+ "link": "~/examples/csvdatareader"
+ }
+ ]
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/attributes/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/attributes/index.md
new file mode 100644
index 0000000..871798f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/attributes/index.md
@@ -0,0 +1,49 @@
+# Attributes
+
+Most of the configuration done via class maps can also be done using attributes.
+
+###### Data
+
+```
+Identifier,name,IsBool,Constant
+1,one,yes,a
+2,two,no,b
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.GetRecords<Foo>().ToList().Dump();
+ }
+}
+
+[Delimiter(",")]
+[CultureInfo("")] // Set CultureInfo to InvariantCulture
+public class Foo
+{
+ [Name("Identifier")]
+ public int Id { get; set; }
+
+ [Index(1)]
+ public string Name { get; set; }
+
+ [BooleanTrueValues("yes")]
+ [BooleanFalseValues("no")]
+ public bool IsBool { get; set; }
+
+ [Constant("bar")]
+ public string Constant { get; set; }
+
+ [Optional]
+ public string Optional { get; set; }
+
+ [Ignore]
+ public string Ignored { get; set; }
+}
+
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/auto-mapping/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/auto-mapping/index.md
new file mode 100644
index 0000000..3bf1c59
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/auto-mapping/index.md
@@ -0,0 +1,39 @@
+# Auto Mapping
+
+If you don't supply a map to the configuration, one is automatically created for you on the fly. You can call auto mapping directly in your class map also. You may want to do this if you have a large number of properties that will be set up correctly by default, and only need to make a couple changes.
+
+###### Data
+
+```
+Id,The Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m => m.Name).Name("The Name");
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/constant-value/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/constant-value/index.md
new file mode 100644
index 0000000..39f9baa
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/constant-value/index.md
@@ -0,0 +1,41 @@
+# Constant Value
+
+You can set a constant value to a property instead of mapping it to a field.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public bool IsDirty { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Map(m => m.IsDirty).Constant(true);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/ignoring-properties/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/ignoring-properties/index.md
new file mode 100644
index 0000000..df6719d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/ignoring-properties/index.md
@@ -0,0 +1,40 @@
+# Ignoring Properties
+
+When you use auto mapping in your class map, every property will get mapped. If there are properties that you don't want mapped, you can ignore them.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public bool IsDirty { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m => m.IsDirty).Ignore();
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/index.md
new file mode 100644
index 0000000..7f4f88d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/index.md
@@ -0,0 +1,16 @@
+# Class Maps
+
+Topics | &nbsp;
+- | -
+[Mapping Properties](~/examples/configuration/class-maps/mapping-properties) | Mapping to properties.
+[Mapping by Name](~/examples/configuration/class-maps/mapping-by-name) | Mapping properties by header name.
+[Mapping by Alternate Names](~/examples/configuration/class-maps/mapping-by-alternate-names) | Mapping properties that may be one of many names.
+[Mapping Duplicate Names](~/examples/configuration/class-maps/mapping-duplicate-names) | Mapping properties that have duplicate header names.
+[Mapping by Index](~/examples/configuration/class-maps/mapping-by-index) | Mapping properties by header index position.
+[Auto Mapping](~/examples/configuration/class-maps/auto-mapping) | Automatic mapping.
+[Ignoring Properties](~/examples/configuration/class-maps/ignoring-properties) | Ignoring mapped properites.
+[Constant Value](~/examples/configuration/class-maps/constant-value) | Setting a constant value for a property.
+[Type Conversion](~/examples/configuration/class-maps/type-conversion) | Using a specific type converter.
+[Inline Type Conversion](~/examples/configuration/class-maps/inline-type-conversion) | Convert a field to a type inline.
+[Optional Maps](~/examples/configuration/class-maps/optional-maps) | Map a property only if it exists.
+[Validation](~/examples/configuration/class-maps/validation) | Validate a field value.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/inline-type-conversion/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/inline-type-conversion/index.md
new file mode 100644
index 0000000..37f71e1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/inline-type-conversion/index.md
@@ -0,0 +1,100 @@
+# Inline Type Conversion
+
+If you don't want to write a full `ITypeConverter` implementation, you can specify a function that will do the same thing.
+
+## Reading
+
+###### Data
+
+```
+Id,Name,Json
+1,one,"{ ""Foo"": ""Bar"" }"
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.GetRecords<Foo>().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public Json Json { get; set; }
+}
+
+public class Json
+{
+ public string Foo { get; set; }
+}
+
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Map(m => m.Json).Convert(row => JsonConvert.DeserializeObject<Json>(row.GetField("Json")));
+ }
+}
+```
+
+## Writing
+
+###### Example
+
+```cs
+void Main()
+{
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" }
+ };
+
+ using (var writer = new StreamWriter("path\\to\\file.csv"))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.WriteRecords(records);
+
+ writer.ToString().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public Json Json { get; set; }
+}
+
+public class Json
+{
+ public string Foo { get; set; }
+}
+
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Map(m => m.Json).Convert(o => JsonConvert.SerializeObject(o));
+ }
+}
+```
+
+###### Output
+
+```
+Id,Name,Json
+1,one,"{""Id"":1,""Name"":""one"",""Json"":null}"
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-alternate-names/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-alternate-names/index.md
new file mode 100644
index 0000000..86d570b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-alternate-names/index.md
@@ -0,0 +1,39 @@
+# Mapping by Alternate Names
+
+If you have a header name that could vary, you can specify multiple header names.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Name("TheId", "Id");
+ Map(m => m.Name).Name("TheName", "Name");
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-index/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-index/index.md
new file mode 100644
index 0000000..b0b96a8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-index/index.md
@@ -0,0 +1,41 @@
+# Mapping by Index
+
+If your data doesn't have a header you can map by index instead of name. You can't rely on the order of class properties in .NET, so if you're not mapping by name, make sure you specify an index.
+
+###### Data
+```
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Index(0);
+ Map(m => m.Name).Index(1);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-name/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-name/index.md
new file mode 100644
index 0000000..30d3477
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-by-name/index.md
@@ -0,0 +1,39 @@
+# Mapping by Name
+
+If your property names don't match your class names, you can map the property to the column by name.
+
+###### Data
+
+```
+ColumnA,ColumnB
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Name("ColumnA");
+ Map(m => m.Name).Name("ColumnB");
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-duplicate-names/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-duplicate-names/index.md
new file mode 100644
index 0000000..47d44cc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-duplicate-names/index.md
@@ -0,0 +1,41 @@
+# Mapping Duplicate Names
+
+Sometimes you have duplicate header names. This is handled through a header name index. The name index is the index of how many occurrences of that header name there are, not the position of the header.
+
+###### Data
+
+```
+Id,Name,Name
+1,first,last
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string FirstName { get set; }
+ public string LastName { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.FirstName).Name("Name").NameIndex(0);
+ Map(m => m.LastName).Name("Name").NameIndex(1);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-properties/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-properties/index.md
new file mode 100644
index 0000000..a401b6d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/mapping-properties/index.md
@@ -0,0 +1,39 @@
+# Mapping Properties
+
+This will map the properties of a class to the header names of the CSV data. The mapping needs to be registered in the context. This example is identical to not using a class mapping at all. The headers match the property names.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/optional-maps/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/optional-maps/index.md
new file mode 100644
index 0000000..0a4c065
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/optional-maps/index.md
@@ -0,0 +1,42 @@
+# Optional Maps
+
+If you have data that may or may not have a header, you can make the mapping optional.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.GetRecords<Foo>().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public DateTimeOffset? Date { get; set; }
+}
+
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Map(m => m.Date).Optional();
+ }
+}
+```
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/type-conversion/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/type-conversion/index.md
new file mode 100644
index 0000000..1e9527b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/type-conversion/index.md
@@ -0,0 +1,59 @@
+# Type Conversion
+
+If you need to convert to or from a non-standard .NET type, you can supply a type converter to use for a property.
+
+###### Data
+
+```
+Id,Name,Json
+1,one,"{ ""Foo"": ""Bar"" }"
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.GetRecords<Foo>().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public Json Json { get; set; }
+}
+
+public class Json
+{
+ public string Foo { get; set; }
+}
+
+public class JsonConverter<T> : DefaultTypeConverter
+{
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return JsonConvert.DeserializeObject<T>(text);
+ }
+
+ public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
+ {
+ return JsonConvert.SerializeObject(value);
+ }
+}
+
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Map(m => m.Json).TypeConverter<JsonConverter<Json>>();
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/validation/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/validation/index.md
new file mode 100644
index 0000000..a450f11
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/class-maps/validation/index.md
@@ -0,0 +1,40 @@
+# Validation
+
+If you want to ensure your data conforms to some sort of standard, you can validate it.
+
+###### Data
+
+```
+Id,Name
+1,on-e
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.GetRecords<Foo>().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public DateTimeOffset? Date { get; set; }
+}
+
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Validate(field => !field.Contains("-"));
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/index.md
new file mode 100644
index 0000000..400751c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/configuration/index.md
@@ -0,0 +1,7 @@
+# Configuration
+
+## Topics
+&nbsp; | &nbsp;
+- | -
+[Class Maps](~/examples/configuration/class-maps) | Configure CSV structure with a class map.
+[Attributes](~/examples/configuration/attributes) | Configure CSV structure with attributes.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/csvdatareader/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/csvdatareader/index.md
new file mode 100644
index 0000000..7d7c980
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/csvdatareader/index.md
@@ -0,0 +1,38 @@
+# CsvDataReader
+
+The question on how to load a data table using CsvHelper came up so often that I just built the functionality in.
+
+`CsvDataReader` implements `IDataReader`. This means it has all the capabilities of a forward only data reader. There is really no reason to use this class directly over using `CsvReader`. `CsvDataReader` requires an instance of `CsvReader` and uses it internally to do it's work.
+
+Loading a `DataTable` in CsvHelper is simple. By default, a table will be loaded with all columns populated as strings. For the reader to be ready after instantiation, the first row needs to be read immediately, so you need to make any configuration changes before creating an instance of CsvDataReader.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ // Do any configuration to `CsvReader` before creating CsvDataReader.
+ using (var dr = new CsvDataReader(csv))
+ {
+ var dt = new DataTable();
+ dt.Load(dr);
+ }
+}
+```
+
+If you want to specify columns and column types, the data table will be loaded with the types automatically converted.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ // Do any configuration to `CsvReader` before creating CsvDataReader.
+ using (var dr = new CsvDataReader(csv))
+ {
+ var dt = new DataTable();
+ dt.Columns.Add("Id", typeof(int));
+ dt.Columns.Add("Name", typeof(string));
+
+ dt.Load(dr);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/index.md
new file mode 100644
index 0000000..05f182b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/index.md
@@ -0,0 +1,10 @@
+# Examples
+
+Sections | &nbsp;
+- | -
+[Prerequisites](~/examples/prerequisites) | Implied knowledge when using CsvHelper.
+[Reading](~/examples/reading) | Reading CSV data.
+[Writing](~/examples/writing) | Writing CSV data.
+[Configuration](~/examples/configuration) | Configuring the behavior of CsvHelper to work with your CSV data or custom class structures.
+[Type Conversion](~/examples/type-conversion) | Using type conversion to convert CSV fields to and from .NET types.
+[DataReader](~/examples/csvdatareader) | Using a DataTable to read CSV data.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/index.md
new file mode 100644
index 0000000..8979ecc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/index.md
@@ -0,0 +1,9 @@
+# Prerequisites
+
+Here are some prerequisites that are needed for using CsvHelper. These are .NET basics that are implied knowledge when using CsvHelper. [Microsoft has excellent documentation](https://docs.microsoft.com/dotnet/){target=_blank} that can you can use to learn more.
+
+Topics | &nbsp;
+- | -
+[Using and Dispose](~/examples/prerequisites/using-and-dispose) |
+[Reading and Writing Files](~/examples/prerequisites/reading-and-writing-files) |
+[Streams](~/examples/prerequisites/streams) |
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/reading-and-writing-files/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/reading-and-writing-files/index.md
new file mode 100644
index 0000000..c5f4f8f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/reading-and-writing-files/index.md
@@ -0,0 +1,65 @@
+# Reading and Writing Files
+
+To open a file for reading or writing, we can use `System.IO.File`.
+
+```cs
+using (var stream = File.OpenRead("path\\to\\file.csv"))
+{
+}
+
+using (var stream = File.OpenWrite("path\\to\\file.csv"))
+{
+}
+```
+
+These both return a `FileStream` for working with our file. Since our data is text, we will need to use a `StreamReader` and `StreamWriter` to read and write the text.
+
+```cs
+using (var stream = File.OpenRead("path\\to\\file.csv"))
+using (var reader = new StreamReader(stream))
+{
+}
+
+using (var stream = File.OpenWrite("path\\to\\file.csv"))
+using (var writer = new StreamWriter(stream))
+{
+}
+```
+
+`StreamReader` and `StreamWriter` have shortcuts for doing this.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv"))
+{
+}
+
+using (var writer = new StreamWriter("path\\to\\file.csv"))
+{
+}
+```
+
+CsvHelper doesn't know anything about your encoding, so if you have a specific encoding, you'll need to specify that in your stream.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv", Encoding.UTF8))
+{
+}
+
+using (var writer = new StreamWriter("path\\to\\file.csv", Encoding.UTF8))
+{
+}
+```
+
+`CsvReader` and `CsvWriter` take a `TextReader` and `TextWriter` in their constructors. `TextReader` and `TextWriter` are `abstract` classes for reading and writing text. `StreamReader` inherits `TextReader` and `StreamWriter` inherits `TextWriter`, so we can use those with `CsvReader` and `CsvWriter`.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader))
+{
+}
+
+using (var writer = new StreamWriter("path\\to\\file.csv"))
+using (var csv = new CsvWriter(writer))
+{
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/streams/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/streams/index.md
new file mode 100644
index 0000000..a470129
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/streams/index.md
@@ -0,0 +1,29 @@
+# Streams
+
+When reading from a stream, if you need to go back to the beginning of the stream, you can use the `Stream.Position` property.
+
+```cs
+using (var stream = new File.OpenRead("path\\to\\file"))
+using (var reader = new StreamReader(stream))
+{
+ // Read file content.
+ var content = reader.ReadToEnd();
+
+ // Go back to beginning of the stream.
+ stream.Position = 0;
+
+ // Read file content again.
+ content = reader.ReadToEnd();
+}
+```
+
+When writing to a file, you need to flush the writer for the data to be written to the stream. `StreamWriter` contains an internal buffer and the data is only written to the stream when the buffer is full, or `Flush` is called. `Flush` is automatically called when a `using` block exits.
+
+```cs
+using (var stream = new File.OpenWrite("path\\to\\file"))
+using (var writer = new StreamWriter(stream))
+{
+ writer.WriteLine("Foo");
+ writer.Flush(); // Data is written from the writer buffer to the stream.
+} // Flush is also called here.
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/using-and-dispose/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/using-and-dispose/index.md
new file mode 100644
index 0000000..468d381
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/prerequisites/using-and-dispose/index.md
@@ -0,0 +1,21 @@
+# Using and Dispose
+
+Whenever you have an object the implements `IDisposable`, you need to dispose of the resource when you're done with it. Most classes that use unmanaged resources will implement `IDisposable`. This means a lot of classes in the `System.IO` namespace will need to be disposed of.
+
+The best practice to dispose of an object when you're done with it is to wrap the code in a `using` block. When the `using` block exits, the resource will automatically be disposed of as soon as possible.
+
+```cs
+using (var stream = new MemoryStream())
+{
+ // Use the stream.
+}
+// The stream will be disposed of as soon as possible.
+```
+
+If you need to keep keep it around for a while and dispose of it later, `using` does some error handling for you, so it's still a good idea to use it instead of calling `Dispose` directly. There is some debate on whether this is a good idea because it doesn't show intent.
+
+```cs
+var stream = new MemoryStream();
+// Later in a different part of your code.
+using (stream) { }
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/enumerate-class-records/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/enumerate-class-records/index.md
new file mode 100644
index 0000000..ed95cf5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/enumerate-class-records/index.md
@@ -0,0 +1,34 @@
+# Enumerate Class Records
+
+Convert CSV rows into a class object that is re-used on every iteration of the enumerable. Each enumeration will hydrate the given record, but only the mapped members. If you supplied a map and didn't map one of the members, that member will not get hydrated with the current row's data. Be careful. Any methods that you call on the projection that force the evaluation of the `IEnumerable`, such as `ToList()`, you will get a list where all the records are the same instance you provided that is hydrated with the last record in the CSV file.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var record = new Foo();
+ var records = csv.EnumerateRecords(record);
+ foreach (var r in records)
+ {
+ // r is the same instance as record.
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-anonymous-type-records/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-anonymous-type-records/index.md
new file mode 100644
index 0000000..08b443e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-anonymous-type-records/index.md
@@ -0,0 +1,28 @@
+# Get Anonymous Type Records
+
+Convert CSV rows into anonymous type objects. You just need to supply the anonymous type definition.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var anonymousTypeDefinition = new
+ {
+ Id = default(int),
+ Name = string.Empty
+ };
+ var records = csv.GetRecords(anonymousTypeDefinition);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-class-records/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-class-records/index.md
new file mode 100644
index 0000000..8bd75af
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-class-records/index.md
@@ -0,0 +1,27 @@
+# Get Class Records
+
+Convert CSV rows into class objects.
+
+###### Data
+```
+Id,Name
+1,one
+```
+
+###### Example
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<Foo>();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-dynamic-records/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-dynamic-records/index.md
new file mode 100644
index 0000000..d9f1cb7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/get-dynamic-records/index.md
@@ -0,0 +1,23 @@
+# Get Dynamic Records
+
+Convert CSV rows into `dynamic` objects. Since there is no way to tell what type the properties should be, all the properties on the dynamic object are strings.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<dynamic>();
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/index.md
new file mode 100644
index 0000000..4634419
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/index.md
@@ -0,0 +1,11 @@
+# Reading
+
+Topics | &nbsp;
+- | -
+[Get Class Records](~/examples/reading/get-class-records) |
+[Get Dynamic Records](~/examples/reading/get-dynamic-records) |
+[Get Anonymous Type Records](~/examples/reading/get-anonymous-type-records) |
+[Enumerate Class Records](~/examples/reading/enumerate-class-records) |
+[Reading by Hand](~/examples/reading/reading-by-hand) |
+[Reading Multiple Data Sets](~/examples/reading/reading-multiple-data-sets) |
+[Reading Multiple Record Types](~/examples/reading/reading-multiple-record-types) |
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-by-hand/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-by-hand/index.md
new file mode 100644
index 0000000..66bba95
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-by-hand/index.md
@@ -0,0 +1,40 @@
+# Reading by Hand
+
+Sometimes it's easier to not try and configure a mapping to match your class definition for various reasons. It's usually only a few more lines of code to just read the rows by hand instead.
+
+###### Data
+
+```
+Id,Name
+1,one
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = new List<Foo>();
+ csv.Read();
+ csv.ReadHeader();
+ while (csv.Read())
+ {
+ var record = new Foo
+ {
+ Id = csv.GetField<int>("Id"),
+ Name = csv.GetField("Name")
+ };
+ records.Add(record);
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-data-sets/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-data-sets/index.md
new file mode 100644
index 0000000..53d7b15
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-data-sets/index.md
@@ -0,0 +1,90 @@
+# Reading Multiple Data Sets
+
+For some reason there are CSV files out there that contain multiple sets of CSV data in them. You should be able to read files like this without issue. You will need to detect when to change class types you are retreiving.
+
+###### Data
+```
+FooId,Name
+1,foo
+
+BarId,Name
+07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,bar
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ };
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.Context.RegisterClassMap<BarMap>();
+ var fooRecords = new List<Foo>();
+ var barRecords = new List<Bar>();
+ var isHeader = true;
+ while (csv.Read())
+ {
+ if (isHeader)
+ {
+ csv.ReadHeader();
+ isHeader = false;
+ continue;
+ }
+
+ if (string.IsNullOrEmpty(csv.GetField(0)))
+ {
+ isHeader = true;
+ continue;
+ }
+
+ switch (csv.HeaderRecord[0])
+ {
+ case "FooId":
+ fooRecords.Add(csv.GetRecord<Foo>());
+ break;
+ case "BarId":
+ barRecords.Add(csv.GetRecord<Bar>());
+ break;
+ default:
+ throw new InvalidOperationException("Unknown record type.");
+ }
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public class Bar
+{
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Name("FooId");
+ Map(m => m.Name);
+ }
+}
+
+public sealed class BarMap : ClassMap<Bar>
+{
+ public BarMap()
+ {
+ Map(m => m.Id).Name("BarId");
+ Map(m => m.Name);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-record-types/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-record-types/index.md
new file mode 100644
index 0000000..56c0476
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/reading/reading-multiple-record-types/index.md
@@ -0,0 +1,74 @@
+# Reading Multiple Record Types
+
+If you have CSV data where each row may be a different record type, you should be able to read based on a row type or something similar.
+
+###### Data
+
+```
+A,1,foo
+B,07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,bar
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.Context.RegisterClassMap<BarMap>();
+ var fooRecords = new List<Foo>();
+ var barRecords = new List<Bar>();
+ while (csv.Read())
+ {
+ switch (csv.GetField(0))
+ {
+ case "A":
+ fooRecords.Add(csv.GetRecord<Foo>());
+ break;
+ case "B":
+ barRecords.Add(csv.GetRecord<Bar>());
+ break;
+ default:
+ throw new InvalidOperationException("Unknown record type.");
+ }
+ }
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+
+public class Bar
+{
+ public Guid Id { get; set; }
+ public string Name { get; set; }
+}
+
+public sealed class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Index(1);
+ Map(m => m.Name).Index(2);
+ }
+}
+
+public sealed class BarMap : ClassMap<Bar>
+{
+ public BarMap()
+ {
+ Map(m => m.Id).Index(1);
+ Map(m => m.Name).Index(2);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/custom-type-converter/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/custom-type-converter/index.md
new file mode 100644
index 0000000..d1bbb96
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/custom-type-converter/index.md
@@ -0,0 +1,58 @@
+# Custom Type Converters
+
+The built in type converters will handle most situations for you, but if you find
+a situation where they don't you can create your own type converter.
+
+You can register the converter globally or per member via an attribute or class map.
+You only need to use one, but all are shown in the example.
+
+###### Data
+
+```
+Id,Name,Json
+1,one,"{""foo"": ""bar""}"
+```
+
+###### Example
+
+```cs
+void Main()
+{
+ using (var reader = new new StreamReader("path\\to\\file.csv"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ // Register globally.
+ csv.Context.TypeConverterCache.AddConverter<JsonNode>(new JsonNodeConverter());
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.GetRecords<Foo>().ToList().Dump();
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+ // Register via attribute.
+ [TypeConverter(typeof(JsonNodeConverter))]
+ public JsonNode Json { get; set; }
+}
+
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ // Register via map.
+ Map(m => m.Json).TypeConverter<JsonNodeConverter>();
+ }
+}
+
+public class JsonNodeConverter : DefaultTypeConverter
+{
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return JsonSerializer.Deserialize<JsonNode>(text);
+ }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/index.md
new file mode 100644
index 0000000..0da487c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/index.md
@@ -0,0 +1,40 @@
+# Type Conversion
+
+When reading and writing a custom class will get converted to and from
+a CSV row. Each CSV field can be converted to and from a class property.
+This conversion for class properties is done via type converters.
+
+There are many built in converters already available to you.
+
+CsvHelper Converter | C# type keyword | .NET Type
+- | -
+ArrayConverter | [ ] | System.Array
+BigIntegerConverter | | System.Numerics.BigInteger
+BooleanConverter | bool | System.Boolean
+ByteArrayConverter | byte[ ] | System.Array
+ByteConverter | byte | System.Byte
+CharConverter | char | System.Char
+CollectionGenericConverter | | System.Collections.Generic.Collection\<T\>, System.Collections.Generic.List\<T\>
+DateOnlyConverter | | System.DateOnly
+DateTimeConverter | | System.DateTime
+DateTimeOffsetConverter | | System.DateTimeOffset
+DecimalConverter | decimal | System.Decimal
+DoubleConverter | double | System.Double
+EnumConverter | enum | System.Enum
+GuidConverter | | System.Guid
+IDictionaryConverter | | System.Collections.Generic.Dictionary\<string, string\>
+IDictionaryGenericConverter | | System.Collections.Generic.Dictionary\<TKey, TValue\>
+IEnumerableConverter | | System.Collections.ICollection, System.Collections.IEnumerable, System.Collections.IList
+IEnumerableGenericConverter | | System.Collections.Generic.ICollection\<T\>, System.Collections.Generic.IEnumerable\<T\>, System.Collections.Generic.IList\<T\>
+Int16Converter | short | System.Int16
+Int32Converter | int | System.Int32
+Int64Converter | long | System.Int64
+NullableConverter | | System.Nullable\<T\>
+SByteConverter | sbyte | System.SByte
+SingleConverter | float | System.Single
+StringConverter | string | System.String
+TimeOnlyConverter | | System.TimeOnly
+UInt16Converter | ushort | System.UInt16
+UInt32Converter | uint | System.UInt32
+UInt64Converter | ulong | System.UInt64
+UriConverter | | System.Uri
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/type-converter-options/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/type-converter-options/index.md
new file mode 100644
index 0000000..f1cf4d2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/type-conversion/type-converter-options/index.md
@@ -0,0 +1,27 @@
+# Type Converter Options
+
+Options can be passed to the type converters.
+Most type converters use `IFormattable.ToString` to write and `TryParse` to read.
+Any option for these methods should be available through configuration.
+
+###### Mapping Example
+
+```cs
+public sealed class FooMap : ClassMap\<Foo\>
+{
+ public FooMap()
+ {
+ Map(m => m.DateTimeProps).TypeConverterOption.DateTimeStyles(DateTimeStyles.AllowInnerWhite | DateTimeStyles.RoundtripKind);
+ }
+}
+```
+
+###### Attributes Example
+
+```cs
+public class Foo
+{
+ [DateTimeStyles(DateTimeStyles.AllowInnerWhite | DateTimeStyles.RoundtripKind)]
+ public DateTime DateTimeProp { get; set; }
+}
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/appending-to-an-existing-file/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/appending-to-an-existing-file/index.md
new file mode 100644
index 0000000..c709017
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/appending-to-an-existing-file/index.md
@@ -0,0 +1,52 @@
+# Appending to an Existing CSV File
+
+###### Example
+
+```cs
+void Main()
+{
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+
+ // Write to a file.
+ using (var writer = new StreamWriter("path\\to\\file.csv"))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+ }
+
+ records = new List<Foo>
+ {
+ new Foo { Id = 2, Name = "two" },
+ };
+
+ // Append to the file.
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ // Don't write the header again.
+ HasHeaderRecord = false,
+ };
+ using (var stream = File.Open("path\\to\\file.csv", FileMode.Append))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
+
+###### Output
+
+```
+Id,Name
+1,one
+2,two
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/index.md
new file mode 100644
index 0000000..d019dd6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/index.md
@@ -0,0 +1,51 @@
+# Writing
+
+<h2 class="title is-2 has-text-danger">Injection Warning</h2>
+
+When opening a CSV in an external program, a formula in a field could be ran that contains a vulnerability.
+Read more here: [CSV Injection](https://owasp.org/www-community/attacks/CSV_Injection).
+Due to this issue, there is a setting `InjectionOptions` that can be configured.
+
+The list of injection characters to detect are configurable in `CsvConfiguration.InjectionCharacters`
+and default to `=`, `@`, `+`, `-`, `\t`, `\r`. An injection character can be the first character of a field
+or quoted field. i.e. `=foo` or `"=foo"`
+
+The `InjectionOptions` values are `None` (default), `Escape`, `Strip`, and `Exception`.
+
+###### None
+
+No injection protection is taken.
+
+###### Exception
+
+If an injection character is detected, a `CsvWriterException` is thrown.
+
+###### Strip
+
+All injection characters at the start of a field will be removed. `===foo` will be stripped to `foo`.
+
+###### Escape
+
+If an injection character is detected, the field will be prepended with the `InjectionEscapeCharacter`
+that defaults to `'`. The field will be quoted if it is not already.
+
+`=one` -> `"'=one"`
+
+`"=one"` -> `"'=one"`
+
+`=one"two` -> `"'=one""two"`
+
+This option is disabled by default because the primary goal if this library is to read and write CSV
+files. If you are storing user entered data that you haven't sanitized yourself and you're letting
+it be accessed by people that may open in Excel/Sheets/etc, you might consider enabling this feature.
+The `InjectionEscapeCharacter` is not removed when reading.
+
+When writing, you can throw an enumerable of class objects, dynamic objects, anonymous type objects, or pretty much
+anything else, and it will get written.
+
+Topics | &nbsp;
+- | -
+[Write Class Objects](~/examples/writing/write-class-objects) |
+[Write Dynamic Objects](~/examples/writing/write-dynamic-objects) |
+[Write Anonymous Type Objects](~/examples/writing/write-anonymous-type-objects) |
+[Appending to an Existing File](~/examples/writing/appending-to-an-existing-file) |
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-anonymous-type-objects/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-anonymous-type-objects/index.md
new file mode 100644
index 0000000..3beedd5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-anonymous-type-objects/index.md
@@ -0,0 +1,26 @@
+# Write Anonymous Type Objects
+
+###### Example
+
+```cs
+void Main()
+{
+ var records = new List<object>
+ {
+ new { Id = 1, Name = "one" },
+ };
+
+ using (var writer = new StreamWriter("path\\to\\file.csv"))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+ }
+}
+```
+
+###### Output
+
+```
+Id,Name
+1,one
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-class-objects/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-class-objects/index.md
new file mode 100644
index 0000000..4327224
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-class-objects/index.md
@@ -0,0 +1,32 @@
+# Write Class Objects
+
+###### Example
+
+```cs
+void Main()
+{
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+
+ using (var writer = new StreamWriter("path\\to\\file.csv"))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+ }
+}
+
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
+
+###### Output
+
+```
+Id,Name
+1,one
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-dynamic-objects/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-dynamic-objects/index.md
new file mode 100644
index 0000000..8f025bb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/examples/writing/write-dynamic-objects/index.md
@@ -0,0 +1,30 @@
+# Write Dynamic Objects
+
+###### Example
+
+```cs
+void Main()
+{
+ var records = new List<dynamic>();
+
+ dynamic record = new ExpandoObject();
+ record.Id = 1;
+ record.Name = "one";
+ records.Add(record);
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ writer.ToString().Dump();
+ }
+}
+```
+
+###### Output
+
+```
+Id,Name
+1,one
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-144x144.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-144x144.png
new file mode 100644
index 0000000..f128b25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-144x144.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-192x192.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-192x192.png
new file mode 100644
index 0000000..e834438
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-192x192.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-36x36.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-36x36.png
new file mode 100644
index 0000000..fa2662c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-36x36.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-48x48.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-48x48.png
new file mode 100644
index 0000000..f6d39e8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-48x48.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-72x72.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-72x72.png
new file mode 100644
index 0000000..303aa57
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-72x72.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-96x96.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-96x96.png
new file mode 100644
index 0000000..9b150c2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/android-icon-96x96.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-114x114.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-114x114.png
new file mode 100644
index 0000000..f57ebc1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-114x114.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-120x120.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-120x120.png
new file mode 100644
index 0000000..18f8d49
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-120x120.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-144x144.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-144x144.png
new file mode 100644
index 0000000..f128b25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-144x144.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-152x152.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-152x152.png
new file mode 100644
index 0000000..fe75037
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-152x152.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-180x180.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-180x180.png
new file mode 100644
index 0000000..37794f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-180x180.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-57x57.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-57x57.png
new file mode 100644
index 0000000..a74b379
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-57x57.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-60x60.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-60x60.png
new file mode 100644
index 0000000..4a1156c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-60x60.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-72x72.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-72x72.png
new file mode 100644
index 0000000..303aa57
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-72x72.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-76x76.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-76x76.png
new file mode 100644
index 0000000..2a875f2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-76x76.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-precomposed.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-precomposed.png
new file mode 100644
index 0000000..dab9519
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon-precomposed.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon.png
new file mode 100644
index 0000000..dab9519
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/apple-icon.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-16x16.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-16x16.png
new file mode 100644
index 0000000..dad5a10
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-16x16.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-32x32.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-32x32.png
new file mode 100644
index 0000000..0395d4c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-32x32.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-96x96.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-96x96.png
new file mode 100644
index 0000000..9b150c2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon-96x96.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon.ico b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon.ico
new file mode 100644
index 0000000..0ca93d0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/favicon.ico
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-144x144.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-144x144.png
new file mode 100644
index 0000000..f128b25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-144x144.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-150x150.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-150x150.png
new file mode 100644
index 0000000..a4d021a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-150x150.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-310x310.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-310x310.png
new file mode 100644
index 0000000..400b60e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-310x310.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-70x70.png b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-70x70.png
new file mode 100644
index 0000000..8030480
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/favicons/ms-icon-70x70.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/_index.json b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/_index.json
new file mode 100644
index 0000000..0810b32
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/_index.json
@@ -0,0 +1,24 @@
+{
+ "toc": [
+ {
+ "title": "Installation",
+ "link": "#installation"
+ },
+ {
+ "title": "CultureInfo",
+ "link": "#cultureinfo"
+ },
+ {
+ "title": "Newlines",
+ "link": "#newlines"
+ },
+ {
+ "title": "Reading a CSV file",
+ "link": "#reading-a-csv-file"
+ },
+ {
+ "title": "Writing a CSV file",
+ "link": "#writing-a-csv-file"
+ }
+ ]
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/index.md
new file mode 100644
index 0000000..cb79e5b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/getting-started/index.md
@@ -0,0 +1,294 @@
+# Getting Started
+
+## Installation
+<hr />
+
+### Package Manager Console
+
+```
+PM> Install-Package CsvHelper
+```
+
+### .NET CLI Console
+
+```
+> dotnet add package CsvHelper
+```
+
+## Prerequisites
+
+There is some basic .NET knowledge that is implied when using this documentation. Please look over the prequisites to make sure you have an
+understanding of them. [Prerequisites](~/examples/prerequisites)
+
+## CultureInfo
+
+CsvHelper requires you to specify the `CultureInfo` that you want to use. The culture is used to determine the default delimiter, default line ending, and formatting when type converting. You can change the configuration of any of these too if you like. Choose the appropriate culture for your data. `InvariantCulture` will be the most portable for writing a file and reading it back again, so that will be used in most of the examples.
+
+## Newlines
+
+By default, CsvHelper will follow [RFC 4180](https://tools.ietf.org/html/rfc4180#page-2) and use `\r\n` for writing newlines no matter what operating system
+you are running on. CsvHelper can read `\r\n`, `\r`, or `\n` without any configuration changes. If you want to read or write in a non-standard format, you can
+change the configuration for `NewLine`.
+
+```cs
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = Environment.NewLine,
+};
+```
+
+## Reading a CSV File
+<hr />
+
+Let's say we have CSV file that looks like this.
+
+```
+Id,Name
+1,one
+2,two
+```
+
+And a class definition that looks like this.
+
+```cs
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
+
+If our class property names match our CSV file header names, we can read the file without any configuration.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ var records = csv.GetRecords<Foo>();
+}
+```
+
+The `GetRecords<T>` method will return an `IEnumerable<T>` that will `yield` records.
+What this means is that only a single record is returned at a time as you iterate the records.
+That also means that only a small portion of the file is read into memory. Be careful though.
+If you do anything that executes a LINQ projection, such as calling `.ToList()`, the entire file
+will be read into memory. `CsvReader` is forward only, so if you want to run any LINQ queries
+against your data, you'll have to pull the whole file into memory. Just know that is what you're doing.
+
+Let's say our CSV file names are a little different than our class properties and we don't want to
+make our properties match.
+
+```
+id,name
+1,one
+2,two
+```
+
+In this case, the names are lower case. We want our property names to be Pascal Case, so we can
+just change how our properties match against the header names.
+
+```cs
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ PrepareHeaderForMatch = args => args.Header.ToLower(),
+};
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader, config))
+{
+ var records = csv.GetRecords<Foo>();
+}
+```
+
+Using the configuration `PrepareHeaderForMatch`, we're able to change how the header matching
+is done against the property name. Both the header and the property name are ran through the
+`PrepareHeaderForMatch` function. When the reader needs to find the property to set for the
+header, they will now match. You can use this function to do other things such as remove
+whitespace or other characters.
+
+Let's say out CSV file doesn't have a header at all.
+
+```
+1,one
+2,two
+```
+
+First we need to tell the reader that there is no header record, using configuration.
+
+```cs
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ HasHeaderRecord = false,
+};
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader, config))
+{
+ var records = csv.GetRecords<Foo>();
+}
+```
+
+CsvReader will use the position of the properties in the class as the index position. There is an
+issue with this though. [You can't rely on the ordering of class members in .NET](https://blogs.msdn.microsoft.com/haibo_luo/2006/07/10/member-order-returned-by-getfields-getmethods/).
+We can solve this by mapping the property to a position in the CSV file.
+
+One way to do this is with attribute mapping.
+
+```cs
+public class Foo
+{
+ [Index(0)]
+ public int Id { get; set; }
+
+ [Index(1)]
+ public string Name { get; set; }
+}
+```
+
+The `IndexAttribute` allows you to specify which position the CSV field is that you want to use
+for the property.
+
+You can also map by name. Let's use our lower case header example from before and see how we can
+use attributes instead of changing the header matching.
+
+```cs
+public class Foo
+{
+ [Name("id")]
+ public int Id { get; set; }
+
+ [Name("name")]
+ public string Name { get; set; }
+}
+```
+
+[There are many other attributes you can use also.](~/examples/configuration/attributes)
+
+What if we don't have control over the class we want to map to so we can't add attributes to it?
+In this case, we can use a fluent `ClassMap` to do the mapping.
+
+```cs
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Name("id");
+ Map(m => m.Name).Name("name");
+ }
+}
+```
+
+To use the mapping, we need to register it in the context.
+
+```cs
+using (var reader = new StreamReader("path\\to\\file.csv"))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>();
+}
+```
+
+Creating a class map is the recommended way of mapping files in CsvHelper because it's a
+lot more powerful.
+
+You can also read rows by hand.
+
+```cs
+using (var reader = new StreamReader("path\\to\file.csv"))
+using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+{
+ csv.Read();
+ csv.ReadHeader();
+ while (csv.Read())
+ {
+ var record = csv.GetRecord<Foo>();
+ // Do something with the record.
+ }
+}
+```
+
+`Read` will advance row. `ReadHeader` will read the row into CsvHelper as the header values.
+Separating `Read` and `ReadHeader` allows you to do other things with the header row before
+moving onto the next row. `GetRecord` also does not advance the reader to allow you to do
+other things with the row you might need to do. You may need to `GetField` for a single field
+or maybe call `GetRecord` multiple times to fill more than one object.
+
+
+## Writing a CSV File
+
+Now let's look at how we can write CSV files. It's basically the same thing, but in reverse order.
+
+Let's use the same class definition as before.
+
+```cs
+public class Foo
+{
+ public int Id { get; set; }
+ public string Name { get; set; }
+}
+```
+
+And we have a set of records like this.
+
+```cs
+var records = new List<Foo>
+{
+ new Foo { Id = 1, Name = "one" },
+ new Foo { Id = 2, Name = "two" },
+};
+```
+
+We can write the records to a file without any configuration.
+
+```cs
+using (var writer = new StreamWriter("path\\to\\file.csv"))
+using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+{
+ csv.WriteRecords(records);
+}
+```
+
+The `WriteRecords` method will write all the records to the file. After you are done writing,
+you should call `writer.Flush()` to ensure that all the data in the writer's internal buffer
+has been flushed to the file. Once a `using` block has exited, the writer is automatically
+flushed, so we don't have to explicitly do it here. It's recommended to always wrap any
+`IDisposable` object with `using` blocks. The object will dispose of itself (and in our case
+flush too) as soon as possible after the `using` block has exited.
+
+Remember how we can't rely on property order in .NET? If we are writing a class that has a header,
+it doesn't matter, as long as we are reading using the headers later. If we want to position
+the headers in the CSV file, we need to specify an index to guarantee it's order. It's
+recommended to always set an index when writing.
+
+```cs
+public class FooMap : ClassMap<Foo>
+{
+ public FooMap()
+ {
+ Map(m => m.Id).Index(0).Name("id");
+ Map(m => m.Name).Index(1).Name("name");
+ }
+}
+```
+
+You can also write rows by hand.
+
+```cs
+using (var writer = new StreamWriter("path\\to\\file.csv"))
+using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+{
+ csv.WriteHeader<Foo>();
+ csv.NextRecord();
+ foreach (var record in records)
+ {
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ }
+}
+```
+
+`WriteHeader` will not advance you to the next row. Separating `NextRecord` from `WriteHeader`
+allows you to write more things in the header if you need to. `WriteRecord` also will not
+advance you to the next row to give you the ability to write multiple objects or use
+`WriteField` to write individual fields.
+
+<br/>
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/google6ad86f23ff698b61.html b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/google6ad86f23ff698b61.html
new file mode 100644
index 0000000..bc2b4dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/google6ad86f23ff698b61.html
@@ -0,0 +1 @@
+google-site-verification: google6ad86f23ff698b61.html \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/images/logo.svg b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/images/logo.svg
new file mode 100644
index 0000000..972caa1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/images/logo.svg
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ 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"
+ viewBox="0 0 816 347.11066"
+ height="347.11066"
+ width="816"
+ xml:space="preserve"
+ id="svg2"
+ version="1.1"><metadata
+ id="metadata8"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+ id="defs6"><clipPath
+ id="clipPath18"
+ clipPathUnits="userSpaceOnUse"><path
+ id="path16"
+ d="M 0,260.333 H 612 V 0 H 0 Z" /></clipPath></defs><g
+ transform="matrix(1.3333333,0,0,-1.3333333,0,347.11067)"
+ id="g10"><g
+ id="g12"><g
+ clip-path="url(#clipPath18)"
+ id="g14"><g
+ transform="translate(64.7041,203.8296)"
+ id="g20"><path
+ id="path22"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -15.985 v 10.686 c 0,3.098 -0.169,5.042 -0.514,5.817 -0.337,0.761 -1.096,1.146 -2.257,1.146 -1.317,0 -2.154,-0.464 -2.507,-1.403 -0.355,-0.938 -0.529,-2.961 -0.529,-6.073 V -18.38 c 0,-2.991 0.174,-4.934 0.529,-5.848 0.353,-0.916 1.154,-1.364 2.394,-1.364 1.19,0 1.968,0.448 2.333,1.364 0.366,0.914 0.551,3.055 0.551,6.433 v 7.723 H 0 v -2.392 C 0,-18.823 -0.447,-23.337 -1.346,-26 c -0.897,-2.662 -2.883,-4.997 -5.963,-6.998 -3.074,-2.001 -6.865,-3.006 -11.372,-3.006 -4.68,0 -8.54,0.846 -11.58,2.551 -3.036,1.686 -5.053,4.04 -6.036,7.04 -0.989,3 -1.484,7.511 -1.484,13.536 v 17.96 c 0,4.435 0.155,7.753 0.457,9.964 0.305,2.217 1.209,4.351 2.715,6.403 1.507,2.052 3.594,3.662 6.267,4.842 2.674,1.174 5.74,1.759 9.204,1.759 4.71,0 8.594,-0.903 11.66,-2.719 3.06,-1.83 5.078,-4.095 6.037,-6.811 C -0.482,15.804 0,11.576 0,5.834 Z" /></g><g
+ transform="translate(104.3105,211.9858)"
+ id="g24"><path
+ id="path26"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -14.848 v 4.559 c 0,2.128 -0.191,3.483 -0.568,4.065 -0.381,0.583 -1.01,0.869 -1.899,0.869 -0.96,0 -1.694,-0.395 -2.185,-1.178 -0.492,-0.782 -0.735,-1.978 -0.735,-3.565 0,-2.059 0.275,-3.602 0.827,-4.642 0.53,-1.03 2.037,-2.284 4.52,-3.76 7.117,-4.224 11.596,-7.688 13.444,-10.396 1.85,-2.703 2.777,-7.075 2.777,-13.099 0,-4.381 -0.519,-7.606 -1.538,-9.678 -1.027,-2.08 -3.008,-3.817 -5.949,-5.226 -2.931,-1.403 -6.351,-2.109 -10.251,-2.109 -4.279,0 -7.926,0.814 -10.957,2.436 -3.022,1.617 -4.999,3.681 -5.938,6.184 -0.938,2.507 -1.406,6.064 -1.406,10.67 v 4.021 h 14.845 v -7.476 c 0,-2.3 0.21,-3.779 0.63,-4.441 0.417,-0.655 1.154,-0.983 2.218,-0.983 1.066,0 1.853,0.417 2.377,1.25 0.518,0.834 0.773,2.075 0.773,3.716 0,3.627 -0.49,5.991 -1.475,7.101 -1.013,1.119 -3.51,2.977 -7.485,5.586 -3.97,2.634 -6.609,4.542 -7.899,5.738 -1.29,1.19 -2.355,2.832 -3.208,4.931 -0.847,2.103 -1.271,4.788 -1.271,8.055 0,4.708 0.603,8.147 1.803,10.326 1.204,2.179 3.15,3.88 5.832,5.102 2.68,1.228 5.923,1.839 9.723,1.839 4.15,0 7.686,-0.668 10.609,-2.007 2.927,-1.34 4.859,-3.032 5.812,-5.071 C -0.477,10.781 0,7.32 0,2.437 Z" /></g><g
+ transform="translate(148.6602,230.6021)"
+ id="g28"><path
+ id="path30"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -8.131,-61.479 H -32.416 L -41.653,0 h 16.856 c 1.963,-16.943 3.361,-31.268 4.203,-42.99 0.825,11.844 1.7,22.37 2.622,31.551 L -16.856,0 Z" /></g><g
+ transform="translate(161.9082,247.7832)"
+ id="g32"><path
+ id="path34"
+ style="fill:#00a650;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -33.23 c 0,-41.568 -4.923,-75.663 -14.769,-102.286 -9.842,-26.623 -26.894,-49.222 -51.141,-67.825 -24.25,-18.597 -51.687,-30.99 -82.319,-37.193 v 63.45 c 21.879,12.394 34.279,28.993 37.196,49.772 h -37.196 V 0 Z" /></g><g
+ transform="translate(64.7041,192.9053)"
+ id="g36"><path
+ id="path38"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -15.985 v 10.689 c 0,3.098 -0.169,5.039 -0.514,5.815 -0.337,0.764 -1.096,1.148 -2.257,1.148 -1.317,0 -2.154,-0.461 -2.507,-1.402 -0.355,-0.939 -0.529,-2.965 -0.529,-6.073 v -28.554 c 0,-2.987 0.174,-4.934 0.529,-5.844 0.353,-0.923 1.154,-1.368 2.394,-1.368 1.19,0 1.968,0.445 2.333,1.368 0.366,0.91 0.551,3.054 0.551,6.426 v 7.73 H 0 v -2.392 c 0,-6.362 -0.447,-10.876 -1.346,-13.539 -0.897,-2.666 -2.883,-4.997 -5.963,-6.998 -3.074,-2.005 -6.865,-3.006 -11.372,-3.006 -4.68,0 -8.54,0.846 -11.58,2.548 -3.036,1.689 -5.053,4.046 -6.036,7.043 -0.989,2.996 -1.484,7.513 -1.484,13.538 V 5.084 c 0,4.437 0.155,7.755 0.457,9.969 0.305,2.215 1.209,4.352 2.715,6.401 1.507,2.052 3.594,3.661 6.267,4.841 2.674,1.178 5.74,1.763 9.204,1.763 4.71,0 8.594,-0.907 11.66,-2.723 3.06,-1.829 5.078,-4.094 6.037,-6.814 C -0.482,15.811 0,11.58 0,5.841 Z" /></g><g
+ transform="translate(104.3105,201.0684)"
+ id="g40"><path
+ id="path42"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 h -14.848 v 4.556 c 0,2.128 -0.191,3.48 -0.568,4.065 -0.381,0.582 -1.01,0.868 -1.899,0.868 -0.96,0 -1.694,-0.391 -2.185,-1.174 -0.492,-0.782 -0.735,-1.978 -0.735,-3.569 0,-2.055 0.275,-3.601 0.827,-4.641 0.53,-1.034 2.037,-2.287 4.52,-3.76 7.117,-4.221 11.596,-7.689 13.444,-10.396 1.85,-2.707 2.777,-7.078 2.777,-13.103 0,-4.377 -0.519,-7.603 -1.538,-9.674 -1.027,-2.08 -3.008,-3.82 -5.949,-5.227 -2.931,-1.403 -6.351,-2.109 -10.251,-2.109 -4.279,0 -7.926,0.811 -10.957,2.434 -3.022,1.616 -4.999,3.684 -5.938,6.19 -0.938,2.507 -1.406,6.058 -1.406,10.667 v 4.024 h 14.845 v -7.479 c 0,-2.3 0.21,-3.779 0.63,-4.444 0.417,-0.655 1.154,-0.98 2.218,-0.98 1.066,0 1.853,0.42 2.377,1.253 0.518,0.834 0.773,2.068 0.773,3.716 0,3.623 -0.49,5.987 -1.475,7.1 -1.013,1.117 -3.51,2.975 -7.485,5.58 -3.97,2.634 -6.609,4.543 -7.899,5.739 -1.29,1.19 -2.355,2.838 -3.208,4.937 -0.847,2.099 -1.271,4.784 -1.271,8.052 0,4.704 0.603,8.146 1.803,10.325 1.204,2.179 3.15,3.881 5.832,5.106 2.68,1.221 5.923,1.839 9.723,1.839 4.15,0 7.686,-0.671 10.609,-2.011 2.927,-1.339 4.859,-3.034 5.812,-5.071 C -0.477,10.778 0,7.316 0,2.434 Z" /></g><g
+ transform="translate(148.6602,219.6777)"
+ id="g44"><path
+ id="path46"
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -8.131,-61.479 H -32.416 L -41.653,0 h 16.856 c 1.963,-16.936 3.361,-31.264 4.203,-42.983 0.825,11.84 1.7,22.363 2.622,31.55 L -16.856,0 Z" /></g><g
+ transform="translate(203.7622,247.7896)"
+ id="g48"><path
+ id="path50"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v -28.379 c 2.699,2.498 5.621,4.378 8.769,5.618 3.14,1.26 6.503,1.877 10.085,1.877 5.509,0 10.198,-1.4 14.063,-4.205 3.871,-2.806 6.231,-6.041 7.092,-9.703 0.857,-3.658 1.285,-10.345 1.285,-20.06 v -71.293 H 9.815 v 72.772 c 0,6.022 -0.295,9.896 -0.894,11.614 -0.597,1.705 -1.932,2.571 -4.011,2.571 -1.923,0 -3.222,-0.885 -3.895,-2.653 C 0.339,-43.604 0,-47.116 0,-52.355 v -73.79 H -31.476 V 0 Z" /></g><g
+ transform="translate(295.6255,188.3408)"
+ id="g52"><path
+ id="path54"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v 7.555 c 0,5.357 -0.283,8.808 -0.857,10.371 -0.57,1.552 -1.741,2.335 -3.511,2.335 -2.174,0 -3.531,-0.662 -4.048,-1.998 C -8.935,16.939 -9.195,13.37 -9.195,7.555 V 0 Z m 31.555,-16.832 h -40.75 v -22.356 c 0,-4.68 0.337,-7.699 1.011,-9.044 0.676,-1.346 1.973,-2.02 3.899,-2.02 2.389,0 3.983,0.897 4.789,2.691 0.807,1.788 1.21,5.255 1.21,10.393 v 13.637 h 29.841 v -7.635 c 0,-6.387 -0.397,-11.299 -1.207,-14.722 -0.811,-3.436 -2.688,-7.094 -5.653,-10.987 -2.955,-3.897 -6.707,-6.824 -11.258,-8.774 -4.546,-1.937 -10.247,-2.92 -17.104,-2.92 -6.646,0 -12.514,0.961 -17.604,2.885 -5.091,1.921 -9.055,4.565 -11.881,7.912 -2.833,3.346 -4.796,7.043 -5.889,11.064 -1.089,4.026 -1.633,9.874 -1.633,17.565 V 1.015 c 0,9.034 1.223,16.16 3.663,21.389 2.442,5.218 6.437,9.213 12.001,11.996 5.559,2.778 11.945,4.164 19.164,4.164 8.831,0 16.115,-1.672 21.856,-5.019 5.74,-3.353 9.763,-7.794 12.08,-13.323 2.312,-5.541 3.465,-13.316 3.465,-23.34 z" /></g><path
+ id="path56"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 369.878,121.645 H 337.467 V 247.79 h 32.411 z" /><g
+ transform="translate(422.1592,194.9668)"
+ id="g58"><path
+ id="path60"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 c 0,6.381 -0.233,10.256 -0.701,11.605 -0.466,1.352 -1.766,2.03 -3.899,2.03 -2.074,0 -3.413,-0.783 -4.011,-2.335 C -9.212,9.737 -9.505,5.971 -9.505,0 v -42.862 c 0,-6.229 0.311,-10.123 0.934,-11.685 0.622,-1.555 1.972,-2.331 4.05,-2.331 2.026,0 3.286,0.709 3.779,2.141 0.494,1.422 0.742,4.892 0.742,10.402 z m -8.964,30.075 -0.541,-9.143 c 2.801,3.696 5.893,6.458 9.272,8.284 3.378,1.819 7.063,2.722 11.06,2.722 4.882,0 9.108,-1.31 12.658,-3.931 3.563,-2.628 5.785,-5.65 6.664,-9.076 0.886,-3.432 1.327,-9.247 1.327,-17.455 v -43.553 c 0,-9.4 -0.558,-16.093 -1.676,-20.057 -1.113,-3.982 -3.4,-7.151 -6.855,-9.514 -3.453,-2.364 -7.625,-3.547 -12.506,-3.547 -3.895,0 -7.509,0.919 -10.827,2.736 -3.324,1.813 -6.365,4.523 -9.117,8.118 V -88.047 H -40.983 V 30.075 Z" /></g><g
+ transform="translate(503.7344,188.3408)"
+ id="g62"><path
+ id="path64"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="m 0,0 v 7.555 c 0,5.357 -0.283,8.808 -0.857,10.371 -0.575,1.552 -1.737,2.335 -3.504,2.335 -2.182,0 -3.531,-0.662 -4.051,-1.998 C -8.936,16.939 -9.194,13.37 -9.194,7.555 V 0 Z m 31.556,-16.832 h -40.75 v -22.356 c 0,-4.68 0.337,-7.699 1.012,-9.044 0.678,-1.346 1.973,-2.02 3.896,-2.02 2.393,0 3.992,0.897 4.796,2.691 0.804,1.788 1.207,5.255 1.207,10.393 v 13.637 h 29.839 v -7.635 c 0,-6.387 -0.408,-11.299 -1.207,-14.722 -0.805,-3.436 -2.692,-7.094 -5.654,-10.987 -2.96,-3.897 -6.712,-6.824 -11.252,-8.774 -4.551,-1.937 -10.252,-2.92 -17.101,-2.92 -6.649,0 -12.52,0.961 -17.613,2.885 -5.09,1.921 -9.054,4.565 -11.884,7.912 -2.826,3.346 -4.789,7.043 -5.879,11.064 -1.089,4.026 -1.638,9.874 -1.638,17.565 V 1.015 c 0,9.034 1.215,16.16 3.664,21.389 2.443,5.218 6.441,9.213 11.998,11.996 5.558,2.778 11.948,4.164 19.168,4.164 8.829,0 16.114,-1.672 21.853,-5.019 5.745,-3.353 9.769,-7.794 12.076,-13.323 2.313,-5.541 3.469,-13.316 3.469,-23.34 z" /></g><g
+ transform="translate(577.0547,225.0415)"
+ id="g66"><path
+ id="path68"
+ style="fill:#58595b;fill-opacity:1;fill-rule:nonzero;stroke:none"
+ d="M 0,0 -1.247,-13.603 C 3.324,-3.862 9.944,1.294 18.623,1.864 v -36.386 c -5.771,0 -10.002,-0.776 -12.703,-2.335 C 3.218,-38.416 1.555,-40.579 0.933,-43.365 0.309,-46.139 0,-52.543 0,-62.567 v -40.829 H -31.483 V 0 Z" /></g></g></g></g></svg> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/manifest.json b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/manifest.json
new file mode 100644
index 0000000..8d36cc9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/manifest.json
@@ -0,0 +1,41 @@
+{
+ "name": "App",
+ "icons": [
+ {
+ "src": "\/android-icon-36x36.png",
+ "sizes": "36x36",
+ "type": "image\/png",
+ "density": "0.75"
+ },
+ {
+ "src": "\/android-icon-48x48.png",
+ "sizes": "48x48",
+ "type": "image\/png",
+ "density": "1.0"
+ },
+ {
+ "src": "\/android-icon-72x72.png",
+ "sizes": "72x72",
+ "type": "image\/png",
+ "density": "1.5"
+ },
+ {
+ "src": "\/android-icon-96x96.png",
+ "sizes": "96x96",
+ "type": "image\/png",
+ "density": "2.0"
+ },
+ {
+ "src": "\/android-icon-144x144.png",
+ "sizes": "144x144",
+ "type": "image\/png",
+ "density": "3.0"
+ },
+ {
+ "src": "\/android-icon-192x192.png",
+ "sizes": "192x192",
+ "type": "image\/png",
+ "density": "4.0"
+ }
+ ]
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/index.md
new file mode 100644
index 0000000..e52193e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/index.md
@@ -0,0 +1,33 @@
+# Migration
+
+Migration steps for major version bumps.
+
+- [29 to 30](~/migration/v30)
+- [28 to 29](~/migration/v29)
+- [27 to 28](~/migration/v28)
+- [26 to 27](~/migration/v27)
+- [25 to 26](~/migration/v26)
+- [24 to 25](~/migration/v25)
+- [23 to 24](~/migration/v24)
+- [22 to 23](~/migration/v23)
+- [21 to 22](~/migration/v22)
+- [20 to 21](~/migration/v21)
+- [19 to 20](~/migration/v20)
+- [18 to 19](~/migration/v19)
+- [17 to 18](~/migration/v18)
+- [16 to 17](~/migration/v17)
+- [15 to 16](~/migration/v16)
+- [14 to 15](~/migration/v15)
+- [13 to 14](~/migration/v14)
+- [12 to 13](~/migration/v13)
+- [11 to 12](~/migration/v12)
+- [10 to 11](~/migration/v11)
+- [9 to 10](~/migration/v10)
+- [8 to 9](~/migration/v9)
+- [7 to 8](~/migration/v8)
+- [6 to 7](~/migration/v7)
+- [5 to 6](~/migration/v6)
+- [4 to 5](~/migration/v5)
+- [3 to 4](~/migration/v4)
+- [2 to 3](~/migration/v3)
+- [1 to 2](~/migration/v2)
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v10/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v10/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v10/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v11/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v11/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v11/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v12/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v12/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v12/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v13/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v13/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v13/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v14/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v14/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v14/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v15/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v15/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v15/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v16/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v16/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v16/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v17/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v17/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v17/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v18/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v18/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v18/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v19/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v19/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v19/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v2/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v2/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v2/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v20/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v20/index.md
new file mode 100644
index 0000000..9ca4b1d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v20/index.md
@@ -0,0 +1,322 @@
+# Migrating from version 19 to 20
+
+## ConvertUsing
+
+`ConvertUsing` was renamed to `Convert`.
+
+```cs
+// v19
+Map(m => m.Property).ConvertUsing(row => row.GetField<int>(0) + row.GetField<int>(1));
+
+// v20
+Map(m => m.Property).Convert(row => row.GetField<int>(0) + row.GetField<int>(1));
+```
+
+## CsvConfiguration
+
+All properties changed from `get; set;` to `get; init;`.
+
+```cs
+// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = ";";
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = ";",
+}
+```
+
+`CsvConfiguration` changed from a `class` to a `record`.
+
+```cs
+// v19
+class MyConfig : CsvConfiguration {}
+
+// v20
+record MyConfig : CsvConfiguration {}
+```
+
+### ShouldQuote
+
+`ShouldQuote` now takes in `IWriterRow` instead of `CsvContext`.
+
+```cs
+// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, row) => true,
+};
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, context) => true,
+};
+```
+
+### NewLine
+
+Changed from `enum NewLines` to `char?`.
+
+```cs
+// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = NewLines.LF,
+};
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = '\n',
+};
+```
+
+### NewLineString
+
+This was removed. Any code referencing this should be deleted.
+
+### RegisterClassMap
+
+This moved to `CsvContext`.
+
+```cs
+// v19
+csv.Configuration.RegisterClassMap<MyMap>();
+
+// v20
+csv.Context.RegisterClassMap<MyMap>();
+```
+
+### UnregisterClassMap
+
+This moved to `CsvContext`.
+
+```cs
+// v19
+csv.Configuration.UnregisterClassMap<MyMap>();
+
+// v20
+csv.Context.UnregisterClassMap<MyMap>();
+```
+
+### AutoMap
+
+This moved to `CsvContext`.
+
+```cs
+// v19
+csv.Configuration.AutoMap<MyType>();
+
+// v20
+csv.Context.AutoMap<MyType>();
+```
+
+## IParserConfiguration
+
+All setters removed.
+
+```cs
+// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = ";";
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = ";",
+};
+```
+
+- Added `bool CacheFields`.
+- Added `bool LeaveOpen`.
+- Added `char? NewLine`.
+- Added `ParserMode Mode`.
+- Added `char[] WhiteSpaceChars`.
+- Removed `bool IgnoreQuotes`.
+
+Any classes that implement `IParserConfiguration` will need these changes.
+
+## IReaderConfiguration
+
+All setters removed.
+
+```cs
+// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = ";";
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = ";",
+};
+```
+
+- Removed `TypeConverterOptionsCache`.
+- Removed `TypeConverterCache`.
+- Removed `Maps`.
+- Removed `RegisterClassMap`.
+- Removed `UnregisterClassMap`.
+- Removed `AutoMap`.
+
+Any classes that implement `IReaderConfiguration` will need these changes.
+
+## ISerializerConfiguration
+
+This interface was removed and it's properties were added to `IWriteConfiguration`.
+
+```cs
+// v19
+class MyConfig : ISerializerConfiguration {}
+
+// v20
+class MyConfig : IWriterConfiguration {}
+```
+
+## IWriterConfiguration
+
+All setters removed.
+
+```cs
+// v19
+var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+config.Delimiter = ";";
+
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = ";",
+};
+```
+
+- Removed `QuoteString`.
+- Removed `TypeConverterCache`.
+- Removed `MemberTypes`.
+- Removed `Maps`.
+- Removed `RegisterClassMap`.
+- Removed `UnregisterClassMap`.
+- Removed `AutoMap`.
+
+Any classes that implement `IWriterConfiguration` will need these changes.
+
+## MemberMap
+
+`ConvertUsing` renamed to `Convert`.
+
+```cs
+// v19
+Map(m => m.Property).ConvertUsing(row => row.Get(0));
+Map(m => m.Property).ConvertUsing(value => value?.ToString() ?? string.Empty);
+
+// v20
+Map(m => m.Property).Convert(row => row.Get(0));
+Map(m => m.Property).Convert(value => value?.ToString() ?? string.Empty);
+```
+
+## CsvParser
+
+`string[] Read()` changed to `bool Read()`.
+
+```cs
+// v19
+string[] record;
+while ((record = parser.Read()) != null)
+{
+}
+
+// v20
+while (parser.Read())
+{
+ // Only get fields you need.
+ var field1 = parser[0];
+ var field2 = parser[1];
+
+ // Get all fields.
+ var record = parser.Record;
+}
+```
+
+Constructor paramter `IFieldReader fieldReader` removed from all constructors.
+
+```cs
+// v19
+var parser = new CsvParser(fieldReader);
+
+// v20
+var parser = new CsvParser();
+```
+
+## CsvSerializer
+
+Removed. Functionality moved into `CsvWriter`.
+
+## IFieldReader
+
+Removed. Functionality moved into `CsvParser`.
+
+## IParser
+
+- Added `long ByteCount`.
+- Added `long CharCount`.
+- Added `int Count`.
+- Added `string this[int index]`.
+- Added `string[] Record`.
+- Added `string RawRecord`.
+- Added `int Row`.
+- Added `int RawRow`.
+- Changed `string[] Read` to `bool Read`.
+- Changed `Task<string[]> ReadAsync` to `Task<bool> ReadAsync`.
+
+Any classes that implement `IParser` will need these changes.
+
+## IReader
+
+- Removed `ICsvParser Parser`.
+
+Any classes that implement `IReader` will need these changes.
+
+## IReaderRow
+
+- Added `int ColumnCount`.
+- Added `int CurrentIndex`.
+- Added `string[] HeaderRecord`.
+- Added `IParser Parser`.
+
+Any classes that implement `IReaderRow` will need these changes.
+
+## ISerializer
+
+Removed. Functionality moved into `IWriter`.
+
+## IWriterRow
+
+- Added `string[] HeaderRecord`.
+- Added `int Row`.
+- Added `int Index`.
+
+## RecordBuilder
+
+Removed. Functionality moved into `CsvWriter`.
+
+## Caches
+
+`enum Caches` was removed. Modifying internal caches is not supported anymore.
+Any code referencing this should be removed.
+
+## ReadingContext/WritingContext
+
+`ReadingContext` and `WritingContext` was merged into a single `CsvContext`.
+Anywhere either of these was used should change to `CsvContext`.
+
+## Func/Action
+
+Any place a `Func` or `Action` was used now has a dedicated `delegate`.
+This should only affect classes that are inheriting `ClassMap`
+or `CsvConfiguration`.
+
+## CsvFieldReader
+
+Class removed. Code was wrapped into `CsvParser`.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v21/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v21/index.md
new file mode 100644
index 0000000..6fbc307
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v21/index.md
@@ -0,0 +1,19 @@
+# Migrating from version 20 to 21
+
+## CsvConfiguration
+
+Property `char? NewLine` changed to `string NewLine`.
+
+```cs
+// v20
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = '\r',
+};
+
+// v21
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ NewLine = "\r",
+};
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v22/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v22/index.md
new file mode 100644
index 0000000..ea7972f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v22/index.md
@@ -0,0 +1,51 @@
+# Migrating from version 21 to 22
+
+## ParserMode
+
+Name change to `CsvMode`.
+
+```cs
+// v21
+ParserMode.RFC4180
+
+//v22
+CsvMode.RFC4180
+```
+
+## ShouldQuote
+
+```cs
+// v21
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, context) => true,
+};
+
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, context, row) => true,
+};
+```
+
+## EnumConverter
+
+`EnumConverter` was changed to case sensitive by default.
+
+If you want Enums to ignore case, you need to set a type converter option.
+
+```cs
+Map(m => m.Property).TypeConverterOption.EnumIgnoreCase();
+```
+
+## IParserConfiguration
+
+- Added `ProcessFieldBufferSizse`.
+
+Any class that implements `IParserConfiguration` will need these changes applied to it.
+
+## IWriterConfiguration
+
+- Added `Mode`.
+
+Any class that implements `IWriterConfiguration` will need these changes applied to it.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v23/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v23/index.md
new file mode 100644
index 0000000..e2fed33
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v23/index.md
@@ -0,0 +1,228 @@
+# Migrating from version 22 to 23
+
+## CsvConfiguration
+
+All the constructor parameters were removed in favor of using
+property setters. Apply this change to any of the options.
+
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture, delimiter = ";");
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ Delimiter = ";",
+};
+```
+
+## Delegates
+
+All delegates now take in a single struct argument.
+
+**BadDataFound**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ BadDataFound = (field, context) =>
+ {
+ Console.WriteLine($"field: {field}");
+ Console.WriteLine($"context: {context}");
+ },
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ BadDataFound = args =>
+ {
+ Console.WriteLine($"field: {args.Field}");
+ Console.WriteLine($"context: {args.Context}");
+ },
+};
+```
+
+**ConvertFromString**
+```cs
+// v22
+Map(m => m.Property).Convert(row => row.GetField(0));
+
+// v23
+Map(m => m.Property).Convert(args => args.Row.GetField(0));
+```
+
+**ConvertToString**
+```cs
+// v22
+Map(m => m.Property).Convert(value => value.ToString());
+
+// v23
+Map(m => m.Property).Convert(args => args.Value.ToString());
+```
+
+**GetConstructor**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetConstructor = classType => classType.GetConstructors().First(),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetConstructor = args => args.ClassType.GetConstructors().First(),
+};
+```
+
+**GetDynamicPropertyName**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetDynamicPropertyName = (fieldIndex, context) => $"Field{fieldIndex}";
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ GetDynamicPropertyName = args => $"Field{args.FieldIndex}",
+};
+```
+
+**HeaderValidated**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ HeaderValidated = (invalidHeaders, context) => Console.WriteLine($"Invalid headers count: {invalidHeaders.Count}"),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ HeaderValidated = args => Console.WriteLine($"Invalid headers count: {args.InvalidHeaders.Count}"),
+};
+```
+
+**MissingFieldFound**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ MissingFieldFound = (headerNames, index, context) => Console.WriteLine($"Missing field: {headerNames[0]}"),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ MissingFieldFound = args => Console.WriteLine($"Missing field: {args.HeaderNames[0]}"),
+};
+```
+
+**PrepareHeaderForMatch**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ PrepareHeaderForMatch = (header, fieldIndex) => header.ToLower(),
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ PrepareHeaderForMatch = args => args.Header.ToLower(),
+};
+```
+
+**ReadingExceptionOccurred**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReadingExceptionOccurred = exception =>
+ {
+ Console.WriteLine(exception.Message);
+ throw args.Exception;
+ },
+};
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReadingExceptionOccurred = args =>
+ {
+ Console.WriteLine(args.Exception.Message);
+ throw args.Exception;
+ },
+};
+```
+
+**ReferenceHeaderPrefix**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReferenceHeaderPrefix = (memberType, memberName) => $"{memberName}.",
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ReferenceHeaderPrefix = args => $"{args.MemberName}.",
+};
+```
+
+**ShouldQuote**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = (field, fieldType, row) => true,
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldQuote = args => true,
+};
+```
+
+**ShouldSkipRecord**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = (records) => record.Length == 0,
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = args => args.Record.Length == 0,
+};
+```
+
+**ShouldUseConstructorParameters**
+```cs
+// v22
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldUseConstructorParameters = type => true;
+};
+
+// v23
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldUseConstructorParameters = args => true;
+};
+```
+
+**Validate**
+```cs
+// v22
+Map(m => m.Property).Validate(field => !string.IsNullOrEmpty(field));
+
+// v23
+Map(m => m.Property).Validate(args => !string.IsNullOrEmpty(args.Field));
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v24/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v24/index.md
new file mode 100644
index 0000000..65f2d9d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v24/index.md
@@ -0,0 +1,21 @@
+# Migrating from version 23 to 24
+
+## IWriterRow
+
+```cs
+// v23
+WriteConvertedField(field);
+
+// v24
+WriteConvertedField(field, fieldType);
+```
+
+## CsvWriter
+
+```cs
+// v23
+WriteConvertedField(field);
+
+// v24
+WriteConvertedField(field, fieldType);
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v25/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v25/index.md
new file mode 100644
index 0000000..62ee34c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v25/index.md
@@ -0,0 +1,187 @@
+# Migrating from version 24 to 25
+
+## Delegates
+
+All delegate args had their non-parameterless constructor removed
+in favor of using `init`.
+
+**BadDataFoundArgs**
+
+```cs
+// v25
+var args = new BadDataRoundArgs(field, rawRecord, context);
+
+// v26
+var args = new BadDataFoundArgs
+{
+ Field = field,
+ RawRecord = rawRecord,
+ Context = context,
+};
+```
+
+**ConvertFromStringArgs**
+
+```cs
+// v25
+var args = new ConvertFromStringArgs(row);
+
+// v26
+var args = new ConvertFromStringArgs
+{
+ Row = row,
+};
+```
+
+**ConvertToStringArgs**
+```cs
+// v25
+var args = new ConvertToStringArgs(value);
+
+// v26
+var args = new ConvertToStringArgs
+{
+ Value = value,
+};
+```
+
+**GetConstructorArgs**
+```cs
+// v25
+var args = new GetConstructorArgs(type);
+
+// v26
+var args = new GetConstructorArgs
+{
+ ClassType = type,
+};
+```
+
+**GetDynamicPropertyNameArgs**
+```cs
+// v25
+var args = new GetDynamicPropertyNameArgs(index, context);
+
+// v26
+var args = new GetDynamicPropertyNameArgs
+{
+ FieldIndex = index,
+ Context = context,
+};
+```
+
+**HeaderValidatedArgs**
+```cs
+// v25
+var args = new HeaderValidatedArgs(headers, context);
+
+// v26
+var args = new HeaderValidatedArgs
+{
+ InvalidHeaders = headers,
+ Context = context,
+};
+```
+
+**MissingFieldFoundArgs**
+```cs
+// v25
+var args = new MissingFieldFoundArgs(headerNames, index, context);
+
+// v26
+var args = new MissingFieldFoundArgs
+{
+ HeaderNames = headerNames,
+ Index = index,
+ Context = context,
+};
+```
+
+**PrepareHeaderForMatchArgs**
+```cs
+// v25
+var args = new PrepareHeaderForMatchArgs(header, fieldIndex);
+
+// v26
+var args = new PrepareHeaderForMatchArgs
+{
+ Header = header,
+ FieldIndex = fieldIndex,
+};
+```
+
+**ReadingExceptionOccurredArgs**
+```cs
+// v25
+var args = new ReadingExceptionOccurredArgs(exception);
+
+// v26
+var args = new ReadingExceptionOccurredArgs
+{
+ Exception = exception,
+};
+```
+
+**ReferenceHeaderPrefixArgs**
+```cs
+// v25
+var args = new ReferenceHeaderPrefixArgs(memberType, memberName);
+
+// v26
+var args = new ReferenceHeaderPrefixArgs
+{
+ MemberType = memberType,
+ MemberName = memberName,
+};
+```
+
+**ShouldQuoteArgs**
+```cs
+// v25
+var args = new ShouldQuoteArgs(field, fieldType, row);
+
+// v26
+var args = new ShouldQuoteArgs
+{
+ Field = field,
+ FieldType = fieldType,
+ Row = row,
+};
+```
+
+**ShouldSkipRecordArgs**
+```cs
+// v25
+var args = new ShouldSkipRecordArgs(record);
+
+// v26
+var args = new ShouldSkipRecordArgs
+{
+ Record = record,
+};
+```
+
+**ShouldUseConstructorParametersArgs**
+```cs
+// v25
+var args = new ShouldUseConstructorParametersArgs(parameterType);
+
+// v26
+var args = new ShouldUseConstructorParametersArgs
+{
+ ParameterType = parameterType,
+};
+```
+
+**ValidateArgs**
+```cs
+// v25
+var args = new ValidateArgs(field);
+
+// v26
+var args = new ValidateArgs
+{
+ Field = field,
+};
+```
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v26/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v26/index.md
new file mode 100644
index 0000000..694fefc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v26/index.md
@@ -0,0 +1,202 @@
+# Migrating from version 25 to 26
+
+## Delegates
+
+All delegates args objects have their `init` accessor removed.
+Constructor parameters are used instead.
+
+**BadDataFoundArgs**
+
+```cs
+// v26
+var args = new BadDataFoundArgs
+{
+ Field = field,
+ RawRecord = rawRecord,
+ Context = context,
+};
+
+// v27
+var args = new BadDataRoundArgs(field, rawRecord, context);
+```
+
+**ConvertFromStringArgs**
+
+```cs
+// v26
+var args = new ConvertFromStringArgs
+{
+ Row = row,
+};
+
+// v27
+var args = new ConvertFromStringArgs(row);
+```
+
+**ConvertToStringArgs**
+```cs
+// v26
+var args = new ConvertToStringArgs
+{
+ Value = value,
+};
+
+// v27
+var args = new ConvertToStringArgs(value);
+```
+
+**GetConstructorArgs**
+```cs
+// v26
+var args = new GetConstructorArgs
+{
+ ClassType = type,
+};
+
+// v27
+var args = new GetConstructorArgs(type);
+```
+
+**GetDynamicPropertyNameArgs**
+```cs
+// v26
+var args = new GetDynamicPropertyNameArgs
+{
+ FieldIndex = index,
+ Context = context,
+};
+
+// v27
+var args = new GetDynamicPropertyNameArgs(index, context);
+```
+
+**HeaderValidatedArgs**
+```cs
+// v26
+var args = new HeaderValidatedArgs
+{
+ InvalidHeaders = headers,
+ Context = context,
+};
+
+// v27
+var args = new HeaderValidatedArgs(headers, context);
+```
+
+**MissingFieldFoundArgs**
+```cs
+// v26
+var args = new MissingFieldFoundArgs
+{
+ HeaderNames = headerNames,
+ Index = index,
+ Context = context,
+};
+
+// v27
+var args = new MissingFieldFoundArgs(headerNames, index, context);
+```
+
+**PrepareHeaderForMatchArgs**
+```cs
+// v26
+var args = new PrepareHeaderForMatchArgs
+{
+ Header = header,
+ FieldIndex = fieldIndex,
+};
+
+// v27
+var args = new PrepareHeaderForMatchArgs(header, fieldIndex);
+```
+
+**ReadingExceptionOccurredArgs**
+```cs
+// v26
+var args = new ReadingExceptionOccurredArgs
+{
+ Exception = exception,
+};
+
+// v27
+var args = new ReadingExceptionOccurredArgs(exception);
+```
+
+**ReferenceHeaderPrefixArgs**
+```cs
+// v26
+var args = new ReferenceHeaderPrefixArgs
+{
+ MemberType = memberType,
+ MemberName = memberName,
+};
+
+// v27
+var args = new ReferenceHeaderPrefixArgs(memberType, memberName);
+```
+
+**ShouldQuoteArgs**
+```cs
+// v26
+var args = new ShouldQuoteArgs
+{
+ Field = field,
+ FieldType = fieldType,
+ Row = row,
+};
+
+// v27
+var args = new ShouldQuoteArgs(field, fieldType, row);
+```
+
+**ShouldSkipRecordArgs**
+```cs
+// v26
+var args = new ShouldSkipRecordArgs
+{
+ Record = record,
+};
+
+// v27
+var args = new ShouldSkipRecordArgs(record);
+```
+
+**ShouldUseConstructorParametersArgs**
+```cs
+// v26
+var args = new ShouldUseConstructorParametersArgs
+{
+ ParameterType = parameterType,
+};
+
+// v27
+var args = new ShouldUseConstructorParametersArgs(parameterType);
+```
+
+**ValidateArgs**
+```cs
+// v26
+var args = new ValidateArgs
+{
+ Field = field,
+};
+
+// v27
+var args = new ValidateArgs(field);
+```
+
+## IParserConfiguration
+
+- Added property `bool ExceptionMessagesContainRawData { get; }`.
+
+Any class that implements `IParserConfiguration` will need these changes
+applied to it.
+
+## IWriterConfiguration
+
+- Added property `bool ExceptionMessagesContainRawData { get; }`.
+
+Any class that implements `IParserConfiguration` will need these changes
+applied to it.
+
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v27/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v27/index.md
new file mode 100644
index 0000000..02db92b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v27/index.md
@@ -0,0 +1,36 @@
+# Migrating from version 26 to 27
+
+## CsvConfiguration.WhiteSpaceChars
+
+- Removed `\t` from the array of default characters.
+
+If you are expecting `\t` to be trimmed, you will need to add this to the
+whitespace characters.
+
+```cs
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ WhiteSpaceChars = new[] { ' ', '\t' },
+};
+```
+
+## IParserConfiguration
+
+- Added property `bool DetectDelimiter { get; }`.
+- Added property `string[] DetectDelimiterValues { get; }`.
+
+Any class that implements `IParserConfiguration` will need these changes
+applied to it.
+
+## IWriter
+
+- Added method `Task WriteRecordsAsync<T>(IAsyncEnumerable<T> records, CancellationToken cancellationToken = default)`.
+This does not apply to projects that reference the `net45` version of CsvHelper.
+
+Any class that implements `IWriter` will need these changes applied to it.
+
+## IParser
+
+- Added property `string Delimiter { get; }`.
+
+Any class that implements `IParser` will need these changes applied to it.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v28/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v28/index.md
new file mode 100644
index 0000000..743dd9c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v28/index.md
@@ -0,0 +1,38 @@
+# Migrating from version 27 to 28
+
+## ShouldSkipRecordArgs
+
+- `string[] ShouldSkipRecordArgs.Record` changed to `IReaderRow ShouldSkipRecordArgs.Row`.
+
+```cs
+// 27
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = args => args.Record.Length < 10;
+};
+
+// 28
+
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = args => args.Row.Parser.Record.Length < 10;
+};
+```
+
+## ConfigurationFunctions.ShouldSkipRecord
+
+- Removed `ConfigurationFunctions.ShouldSkipRecord`.
+
+`null` can be used in place of this now, and is the default.
+
+```cs
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ ShouldSkipRecord = null
+};
+```
+
+
+## IParserConfiguration.Validate
+
+Implement the `Validate` method.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v29/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v29/index.md
new file mode 100644
index 0000000..c9406b4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v29/index.md
@@ -0,0 +1,29 @@
+# Migrating from version 28 to 29
+
+## CsvConfiguration.SanitizeForInjection
+
+`bool CsvConfiguration.SanitizeInjection` changed to `InjectionOptions CsvConfiguration.InjectionOptions`.
+
+```cs
+// 28
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ SanitizeForInjection = true,
+}
+
+// 29
+var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+{
+ InjectionOptions = InjectionOptions.Escape,
+}
+```
+
+## IWriterConfiguration.SanitizeForInjection
+
+`bool IWriterConfiguration.SanitizeInjection` changed to `InjectionOptions IWriterConfiguration.InjectionOptions`.
+Any class that implements `IWriterConfiguration` will need this changed.
+
+## IParserConfiguration.GetDelimiter
+
+`GetDelimiter IParserConfiguration.GetDelimiter` was added.
+Any class that implements `IParserConfiguration` will need to add this.
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v3/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v3/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v3/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v30/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v30/index.md
new file mode 100644
index 0000000..2c324f5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v30/index.md
@@ -0,0 +1,31 @@
+# Migrating from version 29 to 30
+
+## BadDataException constructor
+
+```cs
+// 29
+throw new BadDataException(context);
+
+// 30
+throw new BadDataException(field, rawRecord, context);
+```
+
+## IParserConfiguration
+
+Any class that implements `IParserConfiguration` will need to add property `double MaxFixFieldSize { get; }`.
+Any class that implements `IParserConfiguration` will need to add property `bool LeaveOpen { get; }`.
+
+## IWriterConfiguration
+
+ixFieldSize { get; }`.
+Any class that implements `IWriterConfiguration` will need to add property `bool LeaveO
+
+## ValidateArgs
+
+```cs
+// 29
+var args = new ValidateArgs(field);
+
+// 30
+var args = new ValidateArgs(field, row);
+```
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v4/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v4/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v4/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v5/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v5/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v5/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v6/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v6/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v6/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v7/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v7/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v7/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v8/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v8/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v8/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v9/index.md b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v9/index.md
new file mode 100644
index 0000000..5060312
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/migration/v9/index.md
@@ -0,0 +1,2 @@
+# Coming Soon
+
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/robots.txt b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/robots.txt
new file mode 100644
index 0000000..7d329b1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/robots.txt
@@ -0,0 +1 @@
+User-agent: *
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/header.js b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/header.js
new file mode 100644
index 0000000..491a05c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/header.js
@@ -0,0 +1,6 @@
+(() => {
+ document.getElementById("navbar-burger").addEventListener("click", () => {
+ document.getElementById("navbar-burger").classList.toggle("is-active");
+ document.getElementById("navbar-menu").classList.toggle("is-active");
+ });
+});
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/sidebar.js b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/sidebar.js
new file mode 100644
index 0000000..496dfef
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/scripts/sidebar.js
@@ -0,0 +1,41 @@
+(() => {
+ const sidebar = document.getElementById("sidebar");
+ if (!sidebar) {
+ return;
+ }
+
+ const parent = sidebar.parentElement;
+ const footer = document.getElementById("footer");
+
+ const resizeSidebarWidth = () => {
+ const rect = parent.getBoundingClientRect();
+ const style = getComputedStyle(parent);
+ const width = rect.width - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight);
+ sidebar.style.width = `${width}px`;
+ };
+
+ const resizeSidebarHeight = () => {
+ const parentRect = parent.getBoundingClientRect();
+ const parentStyle = getComputedStyle(parent);
+ const footerRect = footer.getBoundingClientRect();
+ const bodyRect = document.body.getBoundingClientRect();
+
+ const top = Math.max(parentRect.top + parseFloat(parentStyle.paddingTop), 0);
+ const bottom = Math.max(bodyRect.height - footerRect.top, 0);
+
+ sidebar.style.top = `${top}px`;
+ sidebar.style.bottom = `${bottom}px`;
+ }
+
+ const handleExpanderClick = (e) => {
+ e.currentTarget.classList.toggle("expanded");
+ e.currentTarget.closest("li").querySelector("ul").classList.toggle("is-hidden");
+ }
+
+ const sidebarResizeObserver = new ResizeObserver(resizeSidebarWidth);
+ sidebarResizeObserver.observe(parent);
+
+ window.addEventListener("load", resizeSidebarHeight);
+ document.addEventListener("scroll", resizeSidebarHeight);
+ document.querySelectorAll(".expander").forEach(el => el.addEventListener("click", handleExpanderClick));
+})();
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/base.scss b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/base.scss
new file mode 100644
index 0000000..3e8f30b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/base.scss
@@ -0,0 +1,10 @@
+html, body
+{
+ height: 100vh;
+}
+
+body
+{
+ display: flex;
+ flex-direction: column;
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/bulma.scss b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/bulma.scss
new file mode 100644
index 0000000..5074ebf
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/bulma.scss
@@ -0,0 +1,121 @@
+// Colors
+$black: hsl(0, 0%, 4%) !default
+$black-bis: hsl(0, 0%, 7%) !default
+$black-ter: hsl(0, 0%, 14%) !default
+
+$grey-darker: hsl(0, 0%, 21%) !default
+$grey-dark: hsl(0, 0%, 29%) !default
+$grey: hsl(0, 0%, 48%) !default
+$grey-light: hsl(0, 0%, 71%) !default
+$grey-lighter: hsl(0, 0%, 86%) !default
+$grey-lightest: hsl(0, 0%, 93%) !default
+
+$white-ter: hsl(0, 0%, 96%) !default
+$white-bis: hsl(0, 0%, 98%) !default
+$white: hsl(0, 0%, 100%) !default
+
+$orange: hsl(14, 100%, 53%) !default
+$yellow: hsl(48, 100%, 67%) !default
+$green: hsl(141, 53%, 53%) !default
+$turquoise: hsl(171, 100%, 41%) !default
+$cyan: hsl(204, 71%, 53%) !default
+$blue: hsl(217, 71%, 53%) !default
+$purple: hsl(271, 100%, 71%) !default
+$red: hsl(348, 86%, 61%) !default
+
+// Text colors
+$text: $grey-dark !default
+$text-invert: findColorInvert($text) !default
+$text-light: $grey !default
+$text-strong: $grey-darker !default
+
+$primary: $turquoise !default
+
+$info: $cyan !default
+$success: $green !default
+$warning: $yellow !default
+$danger: $red !default
+
+$light: $white-ter !default
+$dark: $grey-darker !default
+// Invert colors
+$orange-invert: findColorInvert($orange) !default
+$yellow-invert: findColorInvert($yellow) !default
+$green-invert: findColorInvert($green) !default
+$turquoise-invert: findColorInvert($turquoise) !default
+$cyan-invert: findColorInvert($cyan) !default
+$blue-invert: findColorInvert($blue) !default
+$purple-invert: findColorInvert($purple) !default
+$red-invert: findColorInvert($red) !default
+
+$primary-invert: findColorInvert($primary) !default
+$primary-light: findLightColor($primary) !default
+$primary-dark: findDarkColor($primary) !default
+$info-invert: findColorInvert($info) !default
+$info-light: findLightColor($info) !default
+$info-dark: findDarkColor($info) !default
+$success-invert: findColorInvert($success) !default
+$success-light: findLightColor($success) !default
+$success-dark: findDarkColor($success) !default
+$warning-invert: findColorInvert($warning) !default
+$warning-light: findLightColor($warning) !default
+$warning-dark: findDarkColor($warning) !default
+$danger-invert: findColorInvert($danger) !default
+$danger-light: findLightColor($danger) !default
+$danger-dark: findDarkColor($danger) !default
+$light-invert: findColorInvert($light) !default
+$dark-invert: findColorInvert($dark) !default
+// General colors
+$scheme-main: $white !default
+$scheme-main-bis: $white-bis !default
+$scheme-main-ter: $white-ter !default
+$scheme-invert: $black !default
+$scheme-invert-bis: $black-bis !default
+$scheme-invert-ter: $black-ter !default
+
+$background: $white-ter !default
+
+$border: $grey-lighter !default
+$border-hover: $grey-light !default
+$border-light: $grey-lightest !default
+$border-light-hover: $grey-light !default
+// Text colors
+$text: $grey-dark !default
+$text-invert: findColorInvert($text) !default
+$text-light: $grey !default
+$text-strong: $grey-darker !default
+// Code colors
+$code: darken($red, 15%) !default
+$code-background: $background !default
+
+$pre: $text !default
+$pre-background: $background !default
+// Link colors
+$link: $blue !default
+$link-invert: findColorInvert($link) !default
+$link-light: findLightColor($link) !default
+$link-dark: findDarkColor($link) !default
+$link-visited: $purple !default
+
+$link-hover: $grey-darker !default
+$link-hover-border: $grey-light !default
+
+$link-focus: $grey-darker !default
+$link-focus-border: $blue !default
+
+$link-active: $grey-darker !default
+$link-active-border: $grey-dark !default
+
+// Responsiveness
+// The container horizontal gap, which acts as the offset for breakpoints
+$gap: 32px !default
+// 960, 1152, and 1344 have been chosen because they are divisible by both 12 and 16
+$tablet: 769px !default
+// 960px container + 4rem
+$desktop: 960px + (2 * $gap) !default
+// 1152px container + 4rem
+$widescreen: 1152px + (2 * $gap) !default
+$widescreen-enabled: true !default
+// 1344px container + 4rem
+$fullhd: 1344px + (2 * $gap) !default
+$fullhd-enabled: true !default
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/content.scss b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/content.scss
new file mode 100644
index 0000000..cd6f71d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/content.scss
@@ -0,0 +1,4 @@
+pre code.hljs
+{
+ background-color: transparent;
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/header.scss b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/header.scss
new file mode 100644
index 0000000..507e6d4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/header.scss
@@ -0,0 +1,9 @@
+@import "bulma";
+
+@media screen and (min-width: $tablet)
+{
+ nav
+ {
+ padding: 0 1.5em;
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/index.scss b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/index.scss
new file mode 100644
index 0000000..bd2d146
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/index.scss
@@ -0,0 +1,8 @@
+@charset "utf-8";
+
+@import "bulma";
+
+@import "base";
+@import "header";
+@import "content";
+@import "sidebar";
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/sidebar.scss b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/sidebar.scss
new file mode 100644
index 0000000..a9f3b6d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/input/styles/sidebar.scss
@@ -0,0 +1,53 @@
+@import "bulma";
+
+.expander
+{
+ position: absolute;
+ font-size: 1.5rem;
+ transform: rotate(0deg);
+ top: -3px;
+ left: 0;
+
+ &::before
+ {
+ content: "\203A";
+ }
+
+ &.expanded
+ {
+ left: 4px;
+ top: 2px;
+ transform: rotate(90deg);
+ }
+}
+
+.sidebar
+{
+ display: flex;
+ position: fixed;
+ overflow-x: hidden;
+ overflow-y: auto;
+
+ ul
+ {
+ li
+ {
+ line-height: 2rem;
+ padding-left: 1em;
+ position: relative;
+
+ a
+ {
+ color: $text;
+
+ &:not(.expander)
+ {
+ &:hover
+ {
+ text-decoration: underline;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css
new file mode 100644
index 0000000..55ba378
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css
@@ -0,0 +1,11624 @@
+/*! bulma.io v0.9.1 | MIT License | github.com/jgthms/bulma */
+/* Bulma Utilities */
+@-webkit-keyframes spinAround {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(359deg);
+ }
+}
+@keyframes spinAround {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(359deg);
+ }
+}
+
+.delete, .modal-close, .button, .file, .breadcrumb, .pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis, .tabs, .is-unselectable {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after {
+ border: 3px solid transparent;
+ border-radius: 2px;
+ border-right: 0;
+ border-top: 0;
+ content: " ";
+ display: block;
+ height: 0.625em;
+ margin-top: -0.4375em;
+ pointer-events: none;
+ position: absolute;
+ top: 50%;
+ transform: rotate(-45deg);
+ transform-origin: center;
+ width: 0.625em;
+}
+
+.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child),
+.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.delete, .modal-close {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ background-color: rgba(10, 10, 10, 0.2);
+ border: none;
+ border-radius: 290486px;
+ cursor: pointer;
+ pointer-events: auto;
+ display: inline-block;
+ flex-grow: 0;
+ flex-shrink: 0;
+ font-size: 0;
+ height: 20px;
+ max-height: 20px;
+ max-width: 20px;
+ min-height: 20px;
+ min-width: 20px;
+ outline: none;
+ position: relative;
+ vertical-align: top;
+ width: 20px;
+}
+
+.delete::before, .modal-close::before, .delete::after, .modal-close::after {
+ background-color: white;
+ content: "";
+ display: block;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ transform-origin: center center;
+}
+
+.delete::before, .modal-close::before {
+ height: 2px;
+ width: 50%;
+}
+
+.delete::after, .modal-close::after {
+ height: 50%;
+ width: 2px;
+}
+
+.delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus {
+ background-color: rgba(10, 10, 10, 0.3);
+}
+
+.delete:active, .modal-close:active {
+ background-color: rgba(10, 10, 10, 0.4);
+}
+
+.is-small.delete, .is-small.modal-close {
+ height: 16px;
+ max-height: 16px;
+ max-width: 16px;
+ min-height: 16px;
+ min-width: 16px;
+ width: 16px;
+}
+
+.is-medium.delete, .is-medium.modal-close {
+ height: 24px;
+ max-height: 24px;
+ max-width: 24px;
+ min-height: 24px;
+ min-width: 24px;
+ width: 24px;
+}
+
+.is-large.delete, .is-large.modal-close {
+ height: 32px;
+ max-height: 32px;
+ max-width: 32px;
+ min-height: 32px;
+ min-width: 32px;
+ width: 32px;
+}
+
+.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after {
+ -webkit-animation: spinAround 500ms infinite linear;
+ animation: spinAround 500ms infinite linear;
+ border: 2px solid #dbdbdb;
+ border-radius: 290486px;
+ border-right-color: transparent;
+ border-top-color: transparent;
+ content: "";
+ display: block;
+ height: 1em;
+ position: relative;
+ width: 1em;
+}
+
+.image.is-square img,
+.image.is-square .has-ratio, .image.is-1by1 img,
+.image.is-1by1 .has-ratio, .image.is-5by4 img,
+.image.is-5by4 .has-ratio, .image.is-4by3 img,
+.image.is-4by3 .has-ratio, .image.is-3by2 img,
+.image.is-3by2 .has-ratio, .image.is-5by3 img,
+.image.is-5by3 .has-ratio, .image.is-16by9 img,
+.image.is-16by9 .has-ratio, .image.is-2by1 img,
+.image.is-2by1 .has-ratio, .image.is-3by1 img,
+.image.is-3by1 .has-ratio, .image.is-4by5 img,
+.image.is-4by5 .has-ratio, .image.is-3by4 img,
+.image.is-3by4 .has-ratio, .image.is-2by3 img,
+.image.is-2by3 .has-ratio, .image.is-3by5 img,
+.image.is-3by5 .has-ratio, .image.is-9by16 img,
+.image.is-9by16 .has-ratio, .image.is-1by2 img,
+.image.is-1by2 .has-ratio, .image.is-1by3 img,
+.image.is-1by3 .has-ratio, .modal, .modal-background, .is-overlay, .hero-video {
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.button, .input, .textarea, .select select, .file-cta,
+.file-name, .pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ align-items: center;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ box-shadow: none;
+ display: inline-flex;
+ font-size: 1rem;
+ height: 2.5em;
+ justify-content: flex-start;
+ line-height: 1.5;
+ padding-bottom: calc(0.5em - 1px);
+ padding-left: calc(0.75em - 1px);
+ padding-right: calc(0.75em - 1px);
+ padding-top: calc(0.5em - 1px);
+ position: relative;
+ vertical-align: top;
+}
+
+.button:focus, .input:focus, .textarea:focus, .select select:focus, .file-cta:focus,
+.file-name:focus, .pagination-previous:focus,
+.pagination-next:focus,
+.pagination-link:focus,
+.pagination-ellipsis:focus, .is-focused.button, .is-focused.input, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta,
+.is-focused.file-name, .is-focused.pagination-previous,
+.is-focused.pagination-next,
+.is-focused.pagination-link,
+.is-focused.pagination-ellipsis, .button:active, .input:active, .textarea:active, .select select:active, .file-cta:active,
+.file-name:active, .pagination-previous:active,
+.pagination-next:active,
+.pagination-link:active,
+.pagination-ellipsis:active, .is-active.button, .is-active.input, .is-active.textarea, .select select.is-active, .is-active.file-cta,
+.is-active.file-name, .is-active.pagination-previous,
+.is-active.pagination-next,
+.is-active.pagination-link,
+.is-active.pagination-ellipsis {
+ outline: none;
+}
+
+.button[disabled], .input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled],
+.file-name[disabled], .pagination-previous[disabled],
+.pagination-next[disabled],
+.pagination-link[disabled],
+.pagination-ellipsis[disabled],
+fieldset[disabled] .button,
+fieldset[disabled] .input,
+fieldset[disabled] .textarea,
+fieldset[disabled] .select select,
+.select fieldset[disabled] select,
+fieldset[disabled] .file-cta,
+fieldset[disabled] .file-name,
+fieldset[disabled] .pagination-previous,
+fieldset[disabled] .pagination-next,
+fieldset[disabled] .pagination-link,
+fieldset[disabled] .pagination-ellipsis {
+ cursor: not-allowed;
+}
+
+/* Bulma Base */
+/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */
+html,
+body,
+p,
+ol,
+ul,
+li,
+dl,
+dt,
+dd,
+blockquote,
+figure,
+fieldset,
+legend,
+textarea,
+pre,
+iframe,
+hr,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 0;
+ padding: 0;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: 100%;
+ font-weight: normal;
+}
+
+ul {
+ list-style: none;
+}
+
+button,
+input,
+select,
+textarea {
+ margin: 0;
+}
+
+html {
+ box-sizing: border-box;
+}
+
+*, *::before, *::after {
+ box-sizing: inherit;
+}
+
+img,
+video {
+ height: auto;
+ max-width: 100%;
+}
+
+iframe {
+ border: 0;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
+
+td:not([align]),
+th:not([align]) {
+ text-align: inherit;
+}
+
+html {
+ background-color: white;
+ font-size: 16px;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ min-width: 300px;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ text-rendering: optimizeLegibility;
+ -webkit-text-size-adjust: 100%;
+ -moz-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ text-size-adjust: 100%;
+}
+
+article,
+aside,
+figure,
+footer,
+header,
+hgroup,
+section {
+ display: block;
+}
+
+body,
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+}
+
+code,
+pre {
+ -moz-osx-font-smoothing: auto;
+ -webkit-font-smoothing: auto;
+ font-family: monospace;
+}
+
+body {
+ color: #4a4a4a;
+ font-size: 1em;
+ font-weight: 400;
+ line-height: 1.5;
+}
+
+a {
+ color: #3273dc;
+ cursor: pointer;
+ text-decoration: none;
+}
+
+a strong {
+ color: currentColor;
+}
+
+a:hover {
+ color: #363636;
+}
+
+code {
+ background-color: whitesmoke;
+ color: #da1039;
+ font-size: 0.875em;
+ font-weight: normal;
+ padding: 0.25em 0.5em 0.25em;
+}
+
+hr {
+ background-color: whitesmoke;
+ border: none;
+ display: block;
+ height: 2px;
+ margin: 1.5rem 0;
+}
+
+img {
+ height: auto;
+ max-width: 100%;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ vertical-align: baseline;
+}
+
+small {
+ font-size: 0.875em;
+}
+
+span {
+ font-style: inherit;
+ font-weight: inherit;
+}
+
+strong {
+ color: #363636;
+ font-weight: 700;
+}
+
+fieldset {
+ border: none;
+}
+
+pre {
+ -webkit-overflow-scrolling: touch;
+ background-color: whitesmoke;
+ color: #4a4a4a;
+ font-size: 0.875em;
+ overflow-x: auto;
+ padding: 1.25rem 1.5rem;
+ white-space: pre;
+ word-wrap: normal;
+}
+
+pre code {
+ background-color: transparent;
+ color: currentColor;
+ font-size: 1em;
+ padding: 0;
+}
+
+table td,
+table th {
+ vertical-align: top;
+}
+
+table td:not([align]),
+table th:not([align]) {
+ text-align: inherit;
+}
+
+table th {
+ color: #363636;
+}
+
+/* Bulma Elements */
+.box {
+ background-color: white;
+ border-radius: 6px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ color: #4a4a4a;
+ display: block;
+ padding: 1.25rem;
+}
+
+a.box:hover, a.box:focus {
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc;
+}
+
+a.box:active {
+ box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc;
+}
+
+.button {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-width: 1px;
+ color: #363636;
+ cursor: pointer;
+ justify-content: center;
+ padding-bottom: calc(0.5em - 1px);
+ padding-left: 1em;
+ padding-right: 1em;
+ padding-top: calc(0.5em - 1px);
+ text-align: center;
+ white-space: nowrap;
+}
+
+.button strong {
+ color: inherit;
+}
+
+.button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large {
+ height: 1.5em;
+ width: 1.5em;
+}
+
+.button .icon:first-child:not(:last-child) {
+ margin-right: calc(-0.5em - 1px);
+ margin-left: 0.25em;
+}
+
+.button .icon:last-child:not(:first-child) {
+ margin-right: 0.25em;
+ margin-left: calc(-0.5em - 1px);
+}
+
+.button .icon:first-child:last-child {
+ margin-left: calc(-0.5em - 1px);
+ margin-right: calc(-0.5em - 1px);
+}
+
+.button:hover, .button.is-hovered {
+ border-color: #b5b5b5;
+ color: #363636;
+}
+
+.button:focus, .button.is-focused {
+ border-color: #3273dc;
+ color: #363636;
+}
+
+.button:focus:not(:active), .button.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.button:active, .button.is-active {
+ border-color: #4a4a4a;
+ color: #363636;
+}
+
+.button.is-text {
+ background-color: transparent;
+ border-color: transparent;
+ color: #4a4a4a;
+ text-decoration: underline;
+}
+
+.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused {
+ background-color: whitesmoke;
+ color: #363636;
+}
+
+.button.is-text:active, .button.is-text.is-active {
+ background-color: #e8e8e8;
+ color: #363636;
+}
+
+.button.is-text[disabled],
+fieldset[disabled] .button.is-text {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-white {
+ background-color: white;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white:hover, .button.is-white.is-hovered {
+ background-color: #f9f9f9;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white:focus, .button.is-white.is-focused {
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25);
+}
+
+.button.is-white:active, .button.is-white.is-active {
+ background-color: #f2f2f2;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white[disabled],
+fieldset[disabled] .button.is-white {
+ background-color: white;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-white.is-inverted {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered {
+ background-color: black;
+}
+
+.button.is-white.is-inverted[disabled],
+fieldset[disabled] .button.is-white.is-inverted {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-white.is-loading::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-white.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ color: white;
+}
+
+.button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused {
+ background-color: white;
+ border-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-white.is-outlined.is-loading::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-white.is-outlined[disabled],
+fieldset[disabled] .button.is-white.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-white.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ color: #0a0a0a;
+}
+
+.button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-white.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-white.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ box-shadow: none;
+ color: #0a0a0a;
+}
+
+.button.is-black {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black:hover, .button.is-black.is-hovered {
+ background-color: #040404;
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black:focus, .button.is-black.is-focused {
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25);
+}
+
+.button.is-black:active, .button.is-black.is-active {
+ background-color: black;
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black[disabled],
+fieldset[disabled] .button.is-black {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-black.is-inverted {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-black.is-inverted[disabled],
+fieldset[disabled] .button.is-black.is-inverted {
+ background-color: white;
+ border-color: transparent;
+ box-shadow: none;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-loading::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-black.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused {
+ background-color: #0a0a0a;
+ border-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-black.is-outlined.is-loading::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-black.is-outlined[disabled],
+fieldset[disabled] .button.is-black.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ box-shadow: none;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ color: white;
+}
+
+.button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-black.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-black.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-light {
+ background-color: whitesmoke;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:hover, .button.is-light.is-hovered {
+ background-color: #eeeeee;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:focus, .button.is-light.is-focused {
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.button.is-light:active, .button.is-light.is-active {
+ background-color: #e8e8e8;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light[disabled],
+fieldset[disabled] .button.is-light {
+ background-color: whitesmoke;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-light.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered {
+ background-color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-inverted[disabled],
+fieldset[disabled] .button.is-light.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: transparent;
+ box-shadow: none;
+ color: whitesmoke;
+}
+
+.button.is-light.is-loading::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-light.is-outlined {
+ background-color: transparent;
+ border-color: whitesmoke;
+ color: whitesmoke;
+}
+
+.button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-outlined.is-loading::after {
+ border-color: transparent transparent whitesmoke whitesmoke !important;
+}
+
+.button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-light.is-outlined[disabled],
+fieldset[disabled] .button.is-light.is-outlined {
+ background-color: transparent;
+ border-color: whitesmoke;
+ box-shadow: none;
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent whitesmoke whitesmoke !important;
+}
+
+.button.is-light.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-light.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-dark {
+ background-color: #363636;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:hover, .button.is-dark.is-hovered {
+ background-color: #2f2f2f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:focus, .button.is-dark.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.button.is-dark:active, .button.is-dark.is-active {
+ background-color: #292929;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark[disabled],
+fieldset[disabled] .button.is-dark {
+ background-color: #363636;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-dark.is-inverted {
+ background-color: #fff;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted:hover, .button.is-dark.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-dark.is-inverted[disabled],
+fieldset[disabled] .button.is-dark.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #363636;
+}
+
+.button.is-dark.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-dark.is-outlined {
+ background-color: transparent;
+ border-color: #363636;
+ color: #363636;
+}
+
+.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .button.is-dark.is-outlined.is-focused {
+ background-color: #363636;
+ border-color: #363636;
+ color: #fff;
+}
+
+.button.is-dark.is-outlined.is-loading::after {
+ border-color: transparent transparent #363636 #363636 !important;
+}
+
+.button.is-dark.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-dark.is-outlined[disabled],
+fieldset[disabled] .button.is-dark.is-outlined {
+ background-color: transparent;
+ border-color: #363636;
+ box-shadow: none;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #363636 #363636 !important;
+}
+
+.button.is-dark.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-dark.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-primary {
+ background-color: #00d1b2;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:hover, .button.is-primary.is-hovered {
+ background-color: #00c4a7;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:focus, .button.is-primary.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25);
+}
+
+.button.is-primary:active, .button.is-primary.is-active {
+ background-color: #00b89c;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary[disabled],
+fieldset[disabled] .button.is-primary {
+ background-color: #00d1b2;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-primary.is-inverted {
+ background-color: #fff;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-inverted:hover, .button.is-primary.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-primary.is-inverted[disabled],
+fieldset[disabled] .button.is-primary.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-primary.is-outlined {
+ background-color: transparent;
+ border-color: #00d1b2;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-outlined:hover, .button.is-primary.is-outlined.is-hovered, .button.is-primary.is-outlined:focus, .button.is-primary.is-outlined.is-focused {
+ background-color: #00d1b2;
+ border-color: #00d1b2;
+ color: #fff;
+}
+
+.button.is-primary.is-outlined.is-loading::after {
+ border-color: transparent transparent #00d1b2 #00d1b2 !important;
+}
+
+.button.is-primary.is-outlined.is-loading:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-outlined.is-loading:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-primary.is-outlined[disabled],
+fieldset[disabled] .button.is-primary.is-outlined {
+ background-color: transparent;
+ border-color: #00d1b2;
+ box-shadow: none;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .button.is-primary.is-inverted.is-outlined:focus, .button.is-primary.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #00d1b2 #00d1b2 !important;
+}
+
+.button.is-primary.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-primary.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-primary.is-light {
+ background-color: #ebfffc;
+ color: #00947e;
+}
+
+.button.is-primary.is-light:hover, .button.is-primary.is-light.is-hovered {
+ background-color: #defffa;
+ border-color: transparent;
+ color: #00947e;
+}
+
+.button.is-primary.is-light:active, .button.is-primary.is-light.is-active {
+ background-color: #d1fff8;
+ border-color: transparent;
+ color: #00947e;
+}
+
+.button.is-link {
+ background-color: #3273dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link:hover, .button.is-link.is-hovered {
+ background-color: #276cda;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link:focus, .button.is-link.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.button.is-link:active, .button.is-link.is-active {
+ background-color: #2366d1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link[disabled],
+fieldset[disabled] .button.is-link {
+ background-color: #3273dc;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-link.is-inverted {
+ background-color: #fff;
+ color: #3273dc;
+}
+
+.button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-link.is-inverted[disabled],
+fieldset[disabled] .button.is-link.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #3273dc;
+}
+
+.button.is-link.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-link.is-outlined {
+ background-color: transparent;
+ border-color: #3273dc;
+ color: #3273dc;
+}
+
+.button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+}
+
+.button.is-link.is-outlined.is-loading::after {
+ border-color: transparent transparent #3273dc #3273dc !important;
+}
+
+.button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-link.is-outlined[disabled],
+fieldset[disabled] .button.is-link.is-outlined {
+ background-color: transparent;
+ border-color: #3273dc;
+ box-shadow: none;
+ color: #3273dc;
+}
+
+.button.is-link.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #3273dc;
+}
+
+.button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #3273dc #3273dc !important;
+}
+
+.button.is-link.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-link.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-link.is-light {
+ background-color: #eef3fc;
+ color: #2160c4;
+}
+
+.button.is-link.is-light:hover, .button.is-link.is-light.is-hovered {
+ background-color: #e3ecfa;
+ border-color: transparent;
+ color: #2160c4;
+}
+
+.button.is-link.is-light:active, .button.is-link.is-light.is-active {
+ background-color: #d8e4f8;
+ border-color: transparent;
+ color: #2160c4;
+}
+
+.button.is-info {
+ background-color: #3298dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info:hover, .button.is-info.is-hovered {
+ background-color: #2793da;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info:focus, .button.is-info.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25);
+}
+
+.button.is-info:active, .button.is-info.is-active {
+ background-color: #238cd1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info[disabled],
+fieldset[disabled] .button.is-info {
+ background-color: #3298dc;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-info.is-inverted {
+ background-color: #fff;
+ color: #3298dc;
+}
+
+.button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-info.is-inverted[disabled],
+fieldset[disabled] .button.is-info.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #3298dc;
+}
+
+.button.is-info.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-info.is-outlined {
+ background-color: transparent;
+ border-color: #3298dc;
+ color: #3298dc;
+}
+
+.button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused {
+ background-color: #3298dc;
+ border-color: #3298dc;
+ color: #fff;
+}
+
+.button.is-info.is-outlined.is-loading::after {
+ border-color: transparent transparent #3298dc #3298dc !important;
+}
+
+.button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-info.is-outlined[disabled],
+fieldset[disabled] .button.is-info.is-outlined {
+ background-color: transparent;
+ border-color: #3298dc;
+ box-shadow: none;
+ color: #3298dc;
+}
+
+.button.is-info.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #3298dc;
+}
+
+.button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #3298dc #3298dc !important;
+}
+
+.button.is-info.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-info.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-info.is-light {
+ background-color: #eef6fc;
+ color: #1d72aa;
+}
+
+.button.is-info.is-light:hover, .button.is-info.is-light.is-hovered {
+ background-color: #e3f1fa;
+ border-color: transparent;
+ color: #1d72aa;
+}
+
+.button.is-info.is-light:active, .button.is-info.is-light.is-active {
+ background-color: #d8ebf8;
+ border-color: transparent;
+ color: #1d72aa;
+}
+
+.button.is-success {
+ background-color: #48c774;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success:hover, .button.is-success.is-hovered {
+ background-color: #3ec46d;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success:focus, .button.is-success.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25);
+}
+
+.button.is-success:active, .button.is-success.is-active {
+ background-color: #3abb67;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success[disabled],
+fieldset[disabled] .button.is-success {
+ background-color: #48c774;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-success.is-inverted {
+ background-color: #fff;
+ color: #48c774;
+}
+
+.button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-success.is-inverted[disabled],
+fieldset[disabled] .button.is-success.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #48c774;
+}
+
+.button.is-success.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-success.is-outlined {
+ background-color: transparent;
+ border-color: #48c774;
+ color: #48c774;
+}
+
+.button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused {
+ background-color: #48c774;
+ border-color: #48c774;
+ color: #fff;
+}
+
+.button.is-success.is-outlined.is-loading::after {
+ border-color: transparent transparent #48c774 #48c774 !important;
+}
+
+.button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-success.is-outlined[disabled],
+fieldset[disabled] .button.is-success.is-outlined {
+ background-color: transparent;
+ border-color: #48c774;
+ box-shadow: none;
+ color: #48c774;
+}
+
+.button.is-success.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #48c774;
+}
+
+.button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #48c774 #48c774 !important;
+}
+
+.button.is-success.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-success.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-success.is-light {
+ background-color: #effaf3;
+ color: #257942;
+}
+
+.button.is-success.is-light:hover, .button.is-success.is-light.is-hovered {
+ background-color: #e6f7ec;
+ border-color: transparent;
+ color: #257942;
+}
+
+.button.is-success.is-light:active, .button.is-success.is-light.is-active {
+ background-color: #dcf4e4;
+ border-color: transparent;
+ color: #257942;
+}
+
+.button.is-warning {
+ background-color: #ffdd57;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning:hover, .button.is-warning.is-hovered {
+ background-color: #ffdb4a;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning:focus, .button.is-warning.is-focused {
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25);
+}
+
+.button.is-warning:active, .button.is-warning.is-active {
+ background-color: #ffd83d;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning[disabled],
+fieldset[disabled] .button.is-warning {
+ background-color: #ffdd57;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-warning.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: #ffdd57;
+}
+
+.button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered {
+ background-color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-inverted[disabled],
+fieldset[disabled] .button.is-warning.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: transparent;
+ box-shadow: none;
+ color: #ffdd57;
+}
+
+.button.is-warning.is-loading::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-warning.is-outlined {
+ background-color: transparent;
+ border-color: #ffdd57;
+ color: #ffdd57;
+}
+
+.button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused {
+ background-color: #ffdd57;
+ border-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-outlined.is-loading::after {
+ border-color: transparent transparent #ffdd57 #ffdd57 !important;
+}
+
+.button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-warning.is-outlined[disabled],
+fieldset[disabled] .button.is-warning.is-outlined {
+ background-color: transparent;
+ border-color: #ffdd57;
+ box-shadow: none;
+ color: #ffdd57;
+}
+
+.button.is-warning.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: #ffdd57;
+}
+
+.button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #ffdd57 #ffdd57 !important;
+}
+
+.button.is-warning.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-warning.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-light {
+ background-color: #fffbeb;
+ color: #947600;
+}
+
+.button.is-warning.is-light:hover, .button.is-warning.is-light.is-hovered {
+ background-color: #fff8de;
+ border-color: transparent;
+ color: #947600;
+}
+
+.button.is-warning.is-light:active, .button.is-warning.is-light.is-active {
+ background-color: #fff6d1;
+ border-color: transparent;
+ color: #947600;
+}
+
+.button.is-danger {
+ background-color: #f14668;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger:hover, .button.is-danger.is-hovered {
+ background-color: #f03a5f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger:focus, .button.is-danger.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25);
+}
+
+.button.is-danger:active, .button.is-danger.is-active {
+ background-color: #ef2e55;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger[disabled],
+fieldset[disabled] .button.is-danger {
+ background-color: #f14668;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-danger.is-inverted {
+ background-color: #fff;
+ color: #f14668;
+}
+
+.button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-danger.is-inverted[disabled],
+fieldset[disabled] .button.is-danger.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #f14668;
+}
+
+.button.is-danger.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-danger.is-outlined {
+ background-color: transparent;
+ border-color: #f14668;
+ color: #f14668;
+}
+
+.button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused {
+ background-color: #f14668;
+ border-color: #f14668;
+ color: #fff;
+}
+
+.button.is-danger.is-outlined.is-loading::after {
+ border-color: transparent transparent #f14668 #f14668 !important;
+}
+
+.button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-danger.is-outlined[disabled],
+fieldset[disabled] .button.is-danger.is-outlined {
+ background-color: transparent;
+ border-color: #f14668;
+ box-shadow: none;
+ color: #f14668;
+}
+
+.button.is-danger.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #f14668;
+}
+
+.button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #f14668 #f14668 !important;
+}
+
+.button.is-danger.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-danger.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-danger.is-light {
+ background-color: #feecf0;
+ color: #cc0f35;
+}
+
+.button.is-danger.is-light:hover, .button.is-danger.is-light.is-hovered {
+ background-color: #fde0e6;
+ border-color: transparent;
+ color: #cc0f35;
+}
+
+.button.is-danger.is-light:active, .button.is-danger.is-light.is-active {
+ background-color: #fcd4dc;
+ border-color: transparent;
+ color: #cc0f35;
+}
+
+.button.is-small {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.button.is-normal {
+ font-size: 1rem;
+}
+
+.button.is-medium {
+ font-size: 1.25rem;
+}
+
+.button.is-large {
+ font-size: 1.5rem;
+}
+
+.button[disabled],
+fieldset[disabled] .button {
+ background-color: white;
+ border-color: #dbdbdb;
+ box-shadow: none;
+ opacity: 0.5;
+}
+
+.button.is-fullwidth {
+ display: flex;
+ width: 100%;
+}
+
+.button.is-loading {
+ color: transparent !important;
+ pointer-events: none;
+}
+
+.button.is-loading::after {
+ position: absolute;
+ left: calc(50% - (1em / 2));
+ top: calc(50% - (1em / 2));
+ position: absolute !important;
+}
+
+.button.is-static {
+ background-color: whitesmoke;
+ border-color: #dbdbdb;
+ color: #7a7a7a;
+ box-shadow: none;
+ pointer-events: none;
+}
+
+.button.is-rounded {
+ border-radius: 290486px;
+ padding-left: calc(1em + 0.25em);
+ padding-right: calc(1em + 0.25em);
+}
+
+.buttons {
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.buttons .button {
+ margin-bottom: 0.5rem;
+}
+
+.buttons .button:not(:last-child):not(.is-fullwidth) {
+ margin-left: 0.5rem;
+}
+
+.buttons:last-child {
+ margin-bottom: -0.5rem;
+}
+
+.buttons:not(:last-child) {
+ margin-bottom: 1rem;
+}
+
+.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) {
+ font-size: 1.25rem;
+}
+
+.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) {
+ font-size: 1.5rem;
+}
+
+.buttons.has-addons .button:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.buttons.has-addons .button:not(:last-child) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ margin-left: -1px;
+}
+
+.buttons.has-addons .button:last-child {
+ margin-left: 0;
+}
+
+.buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered {
+ z-index: 2;
+}
+
+.buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected {
+ z-index: 3;
+}
+
+.buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover {
+ z-index: 4;
+}
+
+.buttons.has-addons .button.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.buttons.is-centered {
+ justify-content: center;
+}
+
+.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+}
+
+.buttons.is-right {
+ justify-content: flex-end;
+}
+
+.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+}
+
+.container {
+ flex-grow: 1;
+ margin: 0 auto;
+ position: relative;
+ width: auto;
+}
+
+.container.is-fluid {
+ max-width: none !important;
+ padding-left: 32px;
+ padding-right: 32px;
+ width: 100%;
+}
+
+@media screen and (min-width: 1024px) {
+ .container {
+ max-width: 960px;
+ }
+}
+
+@media screen and (max-width: 1215px) {
+ .container.is-widescreen:not(.is-max-desktop) {
+ max-width: 1152px;
+ }
+}
+
+@media screen and (max-width: 1407px) {
+ .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen) {
+ max-width: 1344px;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .container:not(.is-max-desktop) {
+ max-width: 1152px;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .container:not(.is-max-desktop):not(.is-max-widescreen) {
+ max-width: 1344px;
+ }
+}
+
+.content li + li {
+ margin-top: 0.25em;
+}
+
+.content p:not(:last-child),
+.content dl:not(:last-child),
+.content ol:not(:last-child),
+.content ul:not(:last-child),
+.content blockquote:not(:last-child),
+.content pre:not(:last-child),
+.content table:not(:last-child) {
+ margin-bottom: 1em;
+}
+
+.content h1,
+.content h2,
+.content h3,
+.content h4,
+.content h5,
+.content h6 {
+ color: #363636;
+ font-weight: 600;
+ line-height: 1.125;
+}
+
+.content h1 {
+ font-size: 2em;
+ margin-bottom: 0.5em;
+}
+
+.content h1:not(:first-child) {
+ margin-top: 1em;
+}
+
+.content h2 {
+ font-size: 1.75em;
+ margin-bottom: 0.5714em;
+}
+
+.content h2:not(:first-child) {
+ margin-top: 1.1428em;
+}
+
+.content h3 {
+ font-size: 1.5em;
+ margin-bottom: 0.6666em;
+}
+
+.content h3:not(:first-child) {
+ margin-top: 1.3333em;
+}
+
+.content h4 {
+ font-size: 1.25em;
+ margin-bottom: 0.8em;
+}
+
+.content h5 {
+ font-size: 1.125em;
+ margin-bottom: 0.8888em;
+}
+
+.content h6 {
+ font-size: 1em;
+ margin-bottom: 1em;
+}
+
+.content blockquote {
+ background-color: whitesmoke;
+ border-right: 5px solid #dbdbdb;
+ padding: 1.25em 1.5em;
+}
+
+.content ol {
+ list-style-position: outside;
+ margin-right: 2em;
+ margin-top: 1em;
+}
+
+.content ol:not([type]) {
+ list-style-type: decimal;
+}
+
+.content ol:not([type]).is-lower-alpha {
+ list-style-type: lower-alpha;
+}
+
+.content ol:not([type]).is-lower-roman {
+ list-style-type: lower-roman;
+}
+
+.content ol:not([type]).is-upper-alpha {
+ list-style-type: upper-alpha;
+}
+
+.content ol:not([type]).is-upper-roman {
+ list-style-type: upper-roman;
+}
+
+.content ul {
+ list-style: disc outside;
+ margin-right: 2em;
+ margin-top: 1em;
+}
+
+.content ul ul {
+ list-style-type: circle;
+ margin-top: 0.5em;
+}
+
+.content ul ul ul {
+ list-style-type: square;
+}
+
+.content dd {
+ margin-right: 2em;
+}
+
+.content figure {
+ margin-left: 2em;
+ margin-right: 2em;
+ text-align: center;
+}
+
+.content figure:not(:first-child) {
+ margin-top: 2em;
+}
+
+.content figure:not(:last-child) {
+ margin-bottom: 2em;
+}
+
+.content figure img {
+ display: inline-block;
+}
+
+.content figure figcaption {
+ font-style: italic;
+}
+
+.content pre {
+ -webkit-overflow-scrolling: touch;
+ overflow-x: auto;
+ padding: 1.25em 1.5em;
+ white-space: pre;
+ word-wrap: normal;
+}
+
+.content sup,
+.content sub {
+ font-size: 75%;
+}
+
+.content table {
+ width: 100%;
+}
+
+.content table td,
+.content table th {
+ border: 1px solid #dbdbdb;
+ border-width: 0 0 1px;
+ padding: 0.5em 0.75em;
+ vertical-align: top;
+}
+
+.content table th {
+ color: #363636;
+}
+
+.content table th:not([align]) {
+ text-align: inherit;
+}
+
+.content table thead td,
+.content table thead th {
+ border-width: 0 0 2px;
+ color: #363636;
+}
+
+.content table tfoot td,
+.content table tfoot th {
+ border-width: 2px 0 0;
+ color: #363636;
+}
+
+.content table tbody tr:last-child td,
+.content table tbody tr:last-child th {
+ border-bottom-width: 0;
+}
+
+.content .tabs li + li {
+ margin-top: 0;
+}
+
+.content.is-small {
+ font-size: 0.75rem;
+}
+
+.content.is-medium {
+ font-size: 1.25rem;
+}
+
+.content.is-large {
+ font-size: 1.5rem;
+}
+
+.icon {
+ align-items: center;
+ display: inline-flex;
+ justify-content: center;
+ height: 1.5rem;
+ width: 1.5rem;
+}
+
+.icon.is-small {
+ height: 1rem;
+ width: 1rem;
+}
+
+.icon.is-medium {
+ height: 2rem;
+ width: 2rem;
+}
+
+.icon.is-large {
+ height: 3rem;
+ width: 3rem;
+}
+
+.image {
+ display: block;
+ position: relative;
+}
+
+.image img {
+ display: block;
+ height: auto;
+ width: 100%;
+}
+
+.image img.is-rounded {
+ border-radius: 290486px;
+}
+
+.image.is-fullwidth {
+ width: 100%;
+}
+
+.image.is-square img,
+.image.is-square .has-ratio, .image.is-1by1 img,
+.image.is-1by1 .has-ratio, .image.is-5by4 img,
+.image.is-5by4 .has-ratio, .image.is-4by3 img,
+.image.is-4by3 .has-ratio, .image.is-3by2 img,
+.image.is-3by2 .has-ratio, .image.is-5by3 img,
+.image.is-5by3 .has-ratio, .image.is-16by9 img,
+.image.is-16by9 .has-ratio, .image.is-2by1 img,
+.image.is-2by1 .has-ratio, .image.is-3by1 img,
+.image.is-3by1 .has-ratio, .image.is-4by5 img,
+.image.is-4by5 .has-ratio, .image.is-3by4 img,
+.image.is-3by4 .has-ratio, .image.is-2by3 img,
+.image.is-2by3 .has-ratio, .image.is-3by5 img,
+.image.is-3by5 .has-ratio, .image.is-9by16 img,
+.image.is-9by16 .has-ratio, .image.is-1by2 img,
+.image.is-1by2 .has-ratio, .image.is-1by3 img,
+.image.is-1by3 .has-ratio {
+ height: 100%;
+ width: 100%;
+}
+
+.image.is-square, .image.is-1by1 {
+ padding-top: 100%;
+}
+
+.image.is-5by4 {
+ padding-top: 80%;
+}
+
+.image.is-4by3 {
+ padding-top: 75%;
+}
+
+.image.is-3by2 {
+ padding-top: 66.6666%;
+}
+
+.image.is-5by3 {
+ padding-top: 60%;
+}
+
+.image.is-16by9 {
+ padding-top: 56.25%;
+}
+
+.image.is-2by1 {
+ padding-top: 50%;
+}
+
+.image.is-3by1 {
+ padding-top: 33.3333%;
+}
+
+.image.is-4by5 {
+ padding-top: 125%;
+}
+
+.image.is-3by4 {
+ padding-top: 133.3333%;
+}
+
+.image.is-2by3 {
+ padding-top: 150%;
+}
+
+.image.is-3by5 {
+ padding-top: 166.6666%;
+}
+
+.image.is-9by16 {
+ padding-top: 177.7777%;
+}
+
+.image.is-1by2 {
+ padding-top: 200%;
+}
+
+.image.is-1by3 {
+ padding-top: 300%;
+}
+
+.image.is-16x16 {
+ height: 16px;
+ width: 16px;
+}
+
+.image.is-24x24 {
+ height: 24px;
+ width: 24px;
+}
+
+.image.is-32x32 {
+ height: 32px;
+ width: 32px;
+}
+
+.image.is-48x48 {
+ height: 48px;
+ width: 48px;
+}
+
+.image.is-64x64 {
+ height: 64px;
+ width: 64px;
+}
+
+.image.is-96x96 {
+ height: 96px;
+ width: 96px;
+}
+
+.image.is-128x128 {
+ height: 128px;
+ width: 128px;
+}
+
+.notification {
+ background-color: whitesmoke;
+ border-radius: 4px;
+ position: relative;
+ padding: 1.25rem 1.5rem 1.25rem 2.5rem;
+}
+
+.notification a:not(.button):not(.dropdown-item) {
+ color: currentColor;
+ text-decoration: underline;
+}
+
+.notification strong {
+ color: currentColor;
+}
+
+.notification code,
+.notification pre {
+ background: white;
+}
+
+.notification pre code {
+ background: transparent;
+}
+
+.notification > .delete {
+ left: 0.5rem;
+ position: absolute;
+ top: 0.5rem;
+}
+
+.notification .title,
+.notification .subtitle,
+.notification .content {
+ color: currentColor;
+}
+
+.notification.is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.notification.is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.notification.is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.notification.is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.notification.is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.notification.is-primary.is-light {
+ background-color: #ebfffc;
+ color: #00947e;
+}
+
+.notification.is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.notification.is-link.is-light {
+ background-color: #eef3fc;
+ color: #2160c4;
+}
+
+.notification.is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.notification.is-info.is-light {
+ background-color: #eef6fc;
+ color: #1d72aa;
+}
+
+.notification.is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.notification.is-success.is-light {
+ background-color: #effaf3;
+ color: #257942;
+}
+
+.notification.is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.notification.is-warning.is-light {
+ background-color: #fffbeb;
+ color: #947600;
+}
+
+.notification.is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.notification.is-danger.is-light {
+ background-color: #feecf0;
+ color: #cc0f35;
+}
+
+.progress {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ border: none;
+ border-radius: 290486px;
+ display: block;
+ height: 1rem;
+ overflow: hidden;
+ padding: 0;
+ width: 100%;
+}
+
+.progress::-webkit-progress-bar {
+ background-color: #ededed;
+}
+
+.progress::-webkit-progress-value {
+ background-color: #4a4a4a;
+}
+
+.progress::-moz-progress-bar {
+ background-color: #4a4a4a;
+}
+
+.progress::-ms-fill {
+ background-color: #4a4a4a;
+ border: none;
+}
+
+.progress.is-white::-webkit-progress-value {
+ background-color: white;
+}
+
+.progress.is-white::-moz-progress-bar {
+ background-color: white;
+}
+
+.progress.is-white::-ms-fill {
+ background-color: white;
+}
+
+.progress.is-white:indeterminate {
+ background-image: linear-gradient(to right, white 30%, #ededed 30%);
+}
+
+.progress.is-black::-webkit-progress-value {
+ background-color: #0a0a0a;
+}
+
+.progress.is-black::-moz-progress-bar {
+ background-color: #0a0a0a;
+}
+
+.progress.is-black::-ms-fill {
+ background-color: #0a0a0a;
+}
+
+.progress.is-black:indeterminate {
+ background-image: linear-gradient(to right, #0a0a0a 30%, #ededed 30%);
+}
+
+.progress.is-light::-webkit-progress-value {
+ background-color: whitesmoke;
+}
+
+.progress.is-light::-moz-progress-bar {
+ background-color: whitesmoke;
+}
+
+.progress.is-light::-ms-fill {
+ background-color: whitesmoke;
+}
+
+.progress.is-light:indeterminate {
+ background-image: linear-gradient(to right, whitesmoke 30%, #ededed 30%);
+}
+
+.progress.is-dark::-webkit-progress-value {
+ background-color: #363636;
+}
+
+.progress.is-dark::-moz-progress-bar {
+ background-color: #363636;
+}
+
+.progress.is-dark::-ms-fill {
+ background-color: #363636;
+}
+
+.progress.is-dark:indeterminate {
+ background-image: linear-gradient(to right, #363636 30%, #ededed 30%);
+}
+
+.progress.is-primary::-webkit-progress-value {
+ background-color: #00d1b2;
+}
+
+.progress.is-primary::-moz-progress-bar {
+ background-color: #00d1b2;
+}
+
+.progress.is-primary::-ms-fill {
+ background-color: #00d1b2;
+}
+
+.progress.is-primary:indeterminate {
+ background-image: linear-gradient(to right, #00d1b2 30%, #ededed 30%);
+}
+
+.progress.is-link::-webkit-progress-value {
+ background-color: #3273dc;
+}
+
+.progress.is-link::-moz-progress-bar {
+ background-color: #3273dc;
+}
+
+.progress.is-link::-ms-fill {
+ background-color: #3273dc;
+}
+
+.progress.is-link:indeterminate {
+ background-image: linear-gradient(to right, #3273dc 30%, #ededed 30%);
+}
+
+.progress.is-info::-webkit-progress-value {
+ background-color: #3298dc;
+}
+
+.progress.is-info::-moz-progress-bar {
+ background-color: #3298dc;
+}
+
+.progress.is-info::-ms-fill {
+ background-color: #3298dc;
+}
+
+.progress.is-info:indeterminate {
+ background-image: linear-gradient(to right, #3298dc 30%, #ededed 30%);
+}
+
+.progress.is-success::-webkit-progress-value {
+ background-color: #48c774;
+}
+
+.progress.is-success::-moz-progress-bar {
+ background-color: #48c774;
+}
+
+.progress.is-success::-ms-fill {
+ background-color: #48c774;
+}
+
+.progress.is-success:indeterminate {
+ background-image: linear-gradient(to right, #48c774 30%, #ededed 30%);
+}
+
+.progress.is-warning::-webkit-progress-value {
+ background-color: #ffdd57;
+}
+
+.progress.is-warning::-moz-progress-bar {
+ background-color: #ffdd57;
+}
+
+.progress.is-warning::-ms-fill {
+ background-color: #ffdd57;
+}
+
+.progress.is-warning:indeterminate {
+ background-image: linear-gradient(to right, #ffdd57 30%, #ededed 30%);
+}
+
+.progress.is-danger::-webkit-progress-value {
+ background-color: #f14668;
+}
+
+.progress.is-danger::-moz-progress-bar {
+ background-color: #f14668;
+}
+
+.progress.is-danger::-ms-fill {
+ background-color: #f14668;
+}
+
+.progress.is-danger:indeterminate {
+ background-image: linear-gradient(to right, #f14668 30%, #ededed 30%);
+}
+
+.progress:indeterminate {
+ -webkit-animation-duration: 1.5s;
+ animation-duration: 1.5s;
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ -webkit-animation-name: moveIndeterminate;
+ animation-name: moveIndeterminate;
+ -webkit-animation-timing-function: linear;
+ animation-timing-function: linear;
+ background-color: #ededed;
+ background-image: linear-gradient(to right, #4a4a4a 30%, #ededed 30%);
+ background-position: top left;
+ background-repeat: no-repeat;
+ background-size: 150% 150%;
+}
+
+.progress:indeterminate::-webkit-progress-bar {
+ background-color: transparent;
+}
+
+.progress:indeterminate::-moz-progress-bar {
+ background-color: transparent;
+}
+
+.progress:indeterminate::-ms-fill {
+ animation-name: none;
+}
+
+.progress.is-small {
+ height: 0.75rem;
+}
+
+.progress.is-medium {
+ height: 1.25rem;
+}
+
+.progress.is-large {
+ height: 1.5rem;
+}
+
+@-webkit-keyframes moveIndeterminate {
+ from {
+ background-position: 200% 0;
+ }
+ to {
+ background-position: -200% 0;
+ }
+}
+
+@keyframes moveIndeterminate {
+ from {
+ background-position: 200% 0;
+ }
+ to {
+ background-position: -200% 0;
+ }
+}
+
+.table {
+ background-color: white;
+ color: #363636;
+}
+
+.table td,
+.table th {
+ border: 1px solid #dbdbdb;
+ border-width: 0 0 1px;
+ padding: 0.5em 0.75em;
+ vertical-align: top;
+}
+
+.table td.is-white,
+.table th.is-white {
+ background-color: white;
+ border-color: white;
+ color: #0a0a0a;
+}
+
+.table td.is-black,
+.table th.is-black {
+ background-color: #0a0a0a;
+ border-color: #0a0a0a;
+ color: white;
+}
+
+.table td.is-light,
+.table th.is-light {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.table td.is-dark,
+.table th.is-dark {
+ background-color: #363636;
+ border-color: #363636;
+ color: #fff;
+}
+
+.table td.is-primary,
+.table th.is-primary {
+ background-color: #00d1b2;
+ border-color: #00d1b2;
+ color: #fff;
+}
+
+.table td.is-link,
+.table th.is-link {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+}
+
+.table td.is-info,
+.table th.is-info {
+ background-color: #3298dc;
+ border-color: #3298dc;
+ color: #fff;
+}
+
+.table td.is-success,
+.table th.is-success {
+ background-color: #48c774;
+ border-color: #48c774;
+ color: #fff;
+}
+
+.table td.is-warning,
+.table th.is-warning {
+ background-color: #ffdd57;
+ border-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.table td.is-danger,
+.table th.is-danger {
+ background-color: #f14668;
+ border-color: #f14668;
+ color: #fff;
+}
+
+.table td.is-narrow,
+.table th.is-narrow {
+ white-space: nowrap;
+ width: 1%;
+}
+
+.table td.is-selected,
+.table th.is-selected {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.table td.is-selected a,
+.table td.is-selected strong,
+.table th.is-selected a,
+.table th.is-selected strong {
+ color: currentColor;
+}
+
+.table td.is-vcentered,
+.table th.is-vcentered {
+ vertical-align: middle;
+}
+
+.table th {
+ color: #363636;
+}
+
+.table th:not([align]) {
+ text-align: inherit;
+}
+
+.table tr.is-selected {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.table tr.is-selected a,
+.table tr.is-selected strong {
+ color: currentColor;
+}
+
+.table tr.is-selected td,
+.table tr.is-selected th {
+ border-color: #fff;
+ color: currentColor;
+}
+
+.table thead {
+ background-color: transparent;
+}
+
+.table thead td,
+.table thead th {
+ border-width: 0 0 2px;
+ color: #363636;
+}
+
+.table tfoot {
+ background-color: transparent;
+}
+
+.table tfoot td,
+.table tfoot th {
+ border-width: 2px 0 0;
+ color: #363636;
+}
+
+.table tbody {
+ background-color: transparent;
+}
+
+.table tbody tr:last-child td,
+.table tbody tr:last-child th {
+ border-bottom-width: 0;
+}
+
+.table.is-bordered td,
+.table.is-bordered th {
+ border-width: 1px;
+}
+
+.table.is-bordered tr:last-child td,
+.table.is-bordered tr:last-child th {
+ border-bottom-width: 1px;
+}
+
+.table.is-fullwidth {
+ width: 100%;
+}
+
+.table.is-hoverable tbody tr:not(.is-selected):hover {
+ background-color: #fafafa;
+}
+
+.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover {
+ background-color: #fafafa;
+}
+
+.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) {
+ background-color: whitesmoke;
+}
+
+.table.is-narrow td,
+.table.is-narrow th {
+ padding: 0.25em 0.5em;
+}
+
+.table.is-striped tbody tr:not(.is-selected):nth-child(even) {
+ background-color: #fafafa;
+}
+
+.table-container {
+ -webkit-overflow-scrolling: touch;
+ overflow: auto;
+ overflow-y: hidden;
+ max-width: 100%;
+}
+
+.tags {
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.tags .tag {
+ margin-bottom: 0.5rem;
+}
+
+.tags .tag:not(:last-child) {
+ margin-left: 0.5rem;
+}
+
+.tags:last-child {
+ margin-bottom: -0.5rem;
+}
+
+.tags:not(:last-child) {
+ margin-bottom: 1rem;
+}
+
+.tags.are-medium .tag:not(.is-normal):not(.is-large) {
+ font-size: 1rem;
+}
+
+.tags.are-large .tag:not(.is-normal):not(.is-medium) {
+ font-size: 1.25rem;
+}
+
+.tags.is-centered {
+ justify-content: center;
+}
+
+.tags.is-centered .tag {
+ margin-right: 0.25rem;
+ margin-left: 0.25rem;
+}
+
+.tags.is-right {
+ justify-content: flex-end;
+}
+
+.tags.is-right .tag:not(:first-child) {
+ margin-left: 0.5rem;
+}
+
+.tags.is-right .tag:not(:last-child) {
+ margin-right: 0;
+}
+
+.tags.has-addons .tag {
+ margin-left: 0;
+}
+
+.tags.has-addons .tag:not(:first-child) {
+ margin-right: 0;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.tags.has-addons .tag:not(:last-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.tag:not(body) {
+ align-items: center;
+ background-color: whitesmoke;
+ border-radius: 4px;
+ color: #4a4a4a;
+ display: inline-flex;
+ font-size: 0.75rem;
+ height: 2em;
+ justify-content: center;
+ line-height: 1.5;
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+ white-space: nowrap;
+}
+
+.tag:not(body) .delete {
+ margin-right: 0.25rem;
+ margin-left: -0.375rem;
+}
+
+.tag:not(body).is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.tag:not(body).is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.tag:not(body).is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.tag:not(body).is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.tag:not(body).is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.tag:not(body).is-primary.is-light {
+ background-color: #ebfffc;
+ color: #00947e;
+}
+
+.tag:not(body).is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.tag:not(body).is-link.is-light {
+ background-color: #eef3fc;
+ color: #2160c4;
+}
+
+.tag:not(body).is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.tag:not(body).is-info.is-light {
+ background-color: #eef6fc;
+ color: #1d72aa;
+}
+
+.tag:not(body).is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.tag:not(body).is-success.is-light {
+ background-color: #effaf3;
+ color: #257942;
+}
+
+.tag:not(body).is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.tag:not(body).is-warning.is-light {
+ background-color: #fffbeb;
+ color: #947600;
+}
+
+.tag:not(body).is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.tag:not(body).is-danger.is-light {
+ background-color: #feecf0;
+ color: #cc0f35;
+}
+
+.tag:not(body).is-normal {
+ font-size: 0.75rem;
+}
+
+.tag:not(body).is-medium {
+ font-size: 1rem;
+}
+
+.tag:not(body).is-large {
+ font-size: 1.25rem;
+}
+
+.tag:not(body) .icon:first-child:not(:last-child) {
+ margin-right: -0.375em;
+ margin-left: 0.1875em;
+}
+
+.tag:not(body) .icon:last-child:not(:first-child) {
+ margin-right: 0.1875em;
+ margin-left: -0.375em;
+}
+
+.tag:not(body) .icon:first-child:last-child {
+ margin-right: -0.375em;
+ margin-left: -0.375em;
+}
+
+.tag:not(body).is-delete {
+ margin-right: 1px;
+ padding: 0;
+ position: relative;
+ width: 2em;
+}
+
+.tag:not(body).is-delete::before, .tag:not(body).is-delete::after {
+ background-color: currentColor;
+ content: "";
+ display: block;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ transform-origin: center center;
+}
+
+.tag:not(body).is-delete::before {
+ height: 1px;
+ width: 50%;
+}
+
+.tag:not(body).is-delete::after {
+ height: 50%;
+ width: 1px;
+}
+
+.tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus {
+ background-color: #e8e8e8;
+}
+
+.tag:not(body).is-delete:active {
+ background-color: #dbdbdb;
+}
+
+.tag:not(body).is-rounded {
+ border-radius: 290486px;
+}
+
+a.tag:hover {
+ text-decoration: underline;
+}
+
+.title,
+.subtitle {
+ word-break: break-word;
+}
+
+.title em,
+.title span,
+.subtitle em,
+.subtitle span {
+ font-weight: inherit;
+}
+
+.title sub,
+.subtitle sub {
+ font-size: 0.75em;
+}
+
+.title sup,
+.subtitle sup {
+ font-size: 0.75em;
+}
+
+.title .tag,
+.subtitle .tag {
+ vertical-align: middle;
+}
+
+.title {
+ color: #363636;
+ font-size: 2rem;
+ font-weight: 600;
+ line-height: 1.125;
+}
+
+.title strong {
+ color: inherit;
+ font-weight: inherit;
+}
+
+.title + .highlight {
+ margin-top: -0.75rem;
+}
+
+.title:not(.is-spaced) + .subtitle {
+ margin-top: -1.25rem;
+}
+
+.title.is-1 {
+ font-size: 3rem;
+}
+
+.title.is-2 {
+ font-size: 2.5rem;
+}
+
+.title.is-3 {
+ font-size: 2rem;
+}
+
+.title.is-4 {
+ font-size: 1.5rem;
+}
+
+.title.is-5 {
+ font-size: 1.25rem;
+}
+
+.title.is-6 {
+ font-size: 1rem;
+}
+
+.title.is-7 {
+ font-size: 0.75rem;
+}
+
+.subtitle {
+ color: #4a4a4a;
+ font-size: 1.25rem;
+ font-weight: 400;
+ line-height: 1.25;
+}
+
+.subtitle strong {
+ color: #363636;
+ font-weight: 600;
+}
+
+.subtitle:not(.is-spaced) + .title {
+ margin-top: -1.25rem;
+}
+
+.subtitle.is-1 {
+ font-size: 3rem;
+}
+
+.subtitle.is-2 {
+ font-size: 2.5rem;
+}
+
+.subtitle.is-3 {
+ font-size: 2rem;
+}
+
+.subtitle.is-4 {
+ font-size: 1.5rem;
+}
+
+.subtitle.is-5 {
+ font-size: 1.25rem;
+}
+
+.subtitle.is-6 {
+ font-size: 1rem;
+}
+
+.subtitle.is-7 {
+ font-size: 0.75rem;
+}
+
+.heading {
+ display: block;
+ font-size: 11px;
+ letter-spacing: 1px;
+ margin-bottom: 5px;
+ text-transform: uppercase;
+}
+
+.highlight {
+ font-weight: 400;
+ max-width: 100%;
+ overflow: hidden;
+ padding: 0;
+}
+
+.highlight pre {
+ overflow: auto;
+ max-width: 100%;
+}
+
+.number {
+ align-items: center;
+ background-color: whitesmoke;
+ border-radius: 290486px;
+ display: inline-flex;
+ font-size: 1.25rem;
+ height: 2em;
+ justify-content: center;
+ margin-right: 1.5rem;
+ min-width: 2.5em;
+ padding: 0.25rem 0.5rem;
+ text-align: center;
+ vertical-align: top;
+}
+
+/* Bulma Form */
+.input, .textarea, .select select {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-radius: 4px;
+ color: #363636;
+}
+
+.input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input:hover, .textarea:hover, .select select:hover, .is-hovered.input, .is-hovered.textarea, .select select.is-hovered {
+ border-color: #b5b5b5;
+}
+
+.input:focus, .textarea:focus, .select select:focus, .is-focused.input, .is-focused.textarea, .select select.is-focused, .input:active, .textarea:active, .select select:active, .is-active.input, .is-active.textarea, .select select.is-active {
+ border-color: #3273dc;
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.input[disabled], .textarea[disabled], .select select[disabled],
+fieldset[disabled] .input,
+fieldset[disabled] .textarea,
+fieldset[disabled] .select select,
+.select fieldset[disabled] select {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ box-shadow: none;
+ color: #7a7a7a;
+}
+
+.input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder,
+fieldset[disabled] .input::-moz-placeholder,
+fieldset[disabled] .textarea::-moz-placeholder,
+fieldset[disabled] .select select::-moz-placeholder,
+.select fieldset[disabled] select::-moz-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder,
+fieldset[disabled] .input::-webkit-input-placeholder,
+fieldset[disabled] .textarea::-webkit-input-placeholder,
+fieldset[disabled] .select select::-webkit-input-placeholder,
+.select fieldset[disabled] select::-webkit-input-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder,
+fieldset[disabled] .input:-moz-placeholder,
+fieldset[disabled] .textarea:-moz-placeholder,
+fieldset[disabled] .select select:-moz-placeholder,
+.select fieldset[disabled] select:-moz-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder,
+fieldset[disabled] .input:-ms-input-placeholder,
+fieldset[disabled] .textarea:-ms-input-placeholder,
+fieldset[disabled] .select select:-ms-input-placeholder,
+.select fieldset[disabled] select:-ms-input-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input, .textarea {
+ box-shadow: inset 0 0.0625em 0.125em rgba(10, 10, 10, 0.05);
+ max-width: 100%;
+ width: 100%;
+}
+
+.input[readonly], .textarea[readonly] {
+ box-shadow: none;
+}
+
+.is-white.input, .is-white.textarea {
+ border-color: white;
+}
+
+.is-white.input:focus, .is-white.textarea:focus, .is-white.is-focused.input, .is-white.is-focused.textarea, .is-white.input:active, .is-white.textarea:active, .is-white.is-active.input, .is-white.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25);
+}
+
+.is-black.input, .is-black.textarea {
+ border-color: #0a0a0a;
+}
+
+.is-black.input:focus, .is-black.textarea:focus, .is-black.is-focused.input, .is-black.is-focused.textarea, .is-black.input:active, .is-black.textarea:active, .is-black.is-active.input, .is-black.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25);
+}
+
+.is-light.input, .is-light.textarea {
+ border-color: whitesmoke;
+}
+
+.is-light.input:focus, .is-light.textarea:focus, .is-light.is-focused.input, .is-light.is-focused.textarea, .is-light.input:active, .is-light.textarea:active, .is-light.is-active.input, .is-light.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.is-dark.input, .is-dark.textarea {
+ border-color: #363636;
+}
+
+.is-dark.input:focus, .is-dark.textarea:focus, .is-dark.is-focused.input, .is-dark.is-focused.textarea, .is-dark.input:active, .is-dark.textarea:active, .is-dark.is-active.input, .is-dark.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.is-primary.input, .is-primary.textarea {
+ border-color: #00d1b2;
+}
+
+.is-primary.input:focus, .is-primary.textarea:focus, .is-primary.is-focused.input, .is-primary.is-focused.textarea, .is-primary.input:active, .is-primary.textarea:active, .is-primary.is-active.input, .is-primary.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25);
+}
+
+.is-link.input, .is-link.textarea {
+ border-color: #3273dc;
+}
+
+.is-link.input:focus, .is-link.textarea:focus, .is-link.is-focused.input, .is-link.is-focused.textarea, .is-link.input:active, .is-link.textarea:active, .is-link.is-active.input, .is-link.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.is-info.input, .is-info.textarea {
+ border-color: #3298dc;
+}
+
+.is-info.input:focus, .is-info.textarea:focus, .is-info.is-focused.input, .is-info.is-focused.textarea, .is-info.input:active, .is-info.textarea:active, .is-info.is-active.input, .is-info.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25);
+}
+
+.is-success.input, .is-success.textarea {
+ border-color: #48c774;
+}
+
+.is-success.input:focus, .is-success.textarea:focus, .is-success.is-focused.input, .is-success.is-focused.textarea, .is-success.input:active, .is-success.textarea:active, .is-success.is-active.input, .is-success.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25);
+}
+
+.is-warning.input, .is-warning.textarea {
+ border-color: #ffdd57;
+}
+
+.is-warning.input:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, .is-warning.is-focused.textarea, .is-warning.input:active, .is-warning.textarea:active, .is-warning.is-active.input, .is-warning.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25);
+}
+
+.is-danger.input, .is-danger.textarea {
+ border-color: #f14668;
+}
+
+.is-danger.input:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, .is-danger.is-focused.textarea, .is-danger.input:active, .is-danger.textarea:active, .is-danger.is-active.input, .is-danger.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25);
+}
+
+.is-small.input, .is-small.textarea {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.is-medium.input, .is-medium.textarea {
+ font-size: 1.25rem;
+}
+
+.is-large.input, .is-large.textarea {
+ font-size: 1.5rem;
+}
+
+.is-fullwidth.input, .is-fullwidth.textarea {
+ display: block;
+ width: 100%;
+}
+
+.is-inline.input, .is-inline.textarea {
+ display: inline;
+ width: auto;
+}
+
+.input.is-rounded {
+ border-radius: 290486px;
+ padding-left: calc(calc(0.75em - 1px) + 0.375em);
+ padding-right: calc(calc(0.75em - 1px) + 0.375em);
+}
+
+.input.is-static {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: none;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.textarea {
+ display: block;
+ max-width: 100%;
+ min-width: 100%;
+ padding: calc(0.75em - 1px);
+ resize: vertical;
+}
+
+.textarea:not([rows]) {
+ max-height: 40em;
+ min-height: 8em;
+}
+
+.textarea[rows] {
+ height: initial;
+}
+
+.textarea.has-fixed-size {
+ resize: none;
+}
+
+.checkbox, .radio {
+ cursor: pointer;
+ display: inline-block;
+ line-height: 1.25;
+ position: relative;
+}
+
+.checkbox input, .radio input {
+ cursor: pointer;
+}
+
+.checkbox:hover, .radio:hover {
+ color: #363636;
+}
+
+.checkbox[disabled], .radio[disabled],
+fieldset[disabled] .checkbox,
+fieldset[disabled] .radio,
+.checkbox input[disabled],
+.radio input[disabled] {
+ color: #7a7a7a;
+ cursor: not-allowed;
+}
+
+.radio + .radio {
+ margin-right: 0.5em;
+}
+
+.select {
+ display: inline-block;
+ max-width: 100%;
+ position: relative;
+ vertical-align: top;
+}
+
+.select:not(.is-multiple) {
+ height: 2.5em;
+}
+
+.select:not(.is-multiple):not(.is-loading)::after {
+ border-color: #3273dc;
+ left: 1.125em;
+ z-index: 4;
+}
+
+.select.is-rounded select {
+ border-radius: 290486px;
+ padding-right: 1em;
+}
+
+.select select {
+ cursor: pointer;
+ display: block;
+ font-size: 1em;
+ max-width: 100%;
+ outline: none;
+}
+
+.select select::-ms-expand {
+ display: none;
+}
+
+.select select[disabled]:hover,
+fieldset[disabled] .select select:hover {
+ border-color: whitesmoke;
+}
+
+.select select:not([multiple]) {
+ padding-left: 2.5em;
+}
+
+.select select[multiple] {
+ height: auto;
+ padding: 0;
+}
+
+.select select[multiple] option {
+ padding: 0.5em 1em;
+}
+
+.select:not(.is-multiple):not(.is-loading):hover::after {
+ border-color: #363636;
+}
+
+.select.is-white:not(:hover)::after {
+ border-color: white;
+}
+
+.select.is-white select {
+ border-color: white;
+}
+
+.select.is-white select:hover, .select.is-white select.is-hovered {
+ border-color: #f2f2f2;
+}
+
+.select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25);
+}
+
+.select.is-black:not(:hover)::after {
+ border-color: #0a0a0a;
+}
+
+.select.is-black select {
+ border-color: #0a0a0a;
+}
+
+.select.is-black select:hover, .select.is-black select.is-hovered {
+ border-color: black;
+}
+
+.select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25);
+}
+
+.select.is-light:not(:hover)::after {
+ border-color: whitesmoke;
+}
+
+.select.is-light select {
+ border-color: whitesmoke;
+}
+
+.select.is-light select:hover, .select.is-light select.is-hovered {
+ border-color: #e8e8e8;
+}
+
+.select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.select.is-dark:not(:hover)::after {
+ border-color: #363636;
+}
+
+.select.is-dark select {
+ border-color: #363636;
+}
+
+.select.is-dark select:hover, .select.is-dark select.is-hovered {
+ border-color: #292929;
+}
+
+.select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.select.is-primary:not(:hover)::after {
+ border-color: #00d1b2;
+}
+
+.select.is-primary select {
+ border-color: #00d1b2;
+}
+
+.select.is-primary select:hover, .select.is-primary select.is-hovered {
+ border-color: #00b89c;
+}
+
+.select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25);
+}
+
+.select.is-link:not(:hover)::after {
+ border-color: #3273dc;
+}
+
+.select.is-link select {
+ border-color: #3273dc;
+}
+
+.select.is-link select:hover, .select.is-link select.is-hovered {
+ border-color: #2366d1;
+}
+
+.select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.select.is-info:not(:hover)::after {
+ border-color: #3298dc;
+}
+
+.select.is-info select {
+ border-color: #3298dc;
+}
+
+.select.is-info select:hover, .select.is-info select.is-hovered {
+ border-color: #238cd1;
+}
+
+.select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25);
+}
+
+.select.is-success:not(:hover)::after {
+ border-color: #48c774;
+}
+
+.select.is-success select {
+ border-color: #48c774;
+}
+
+.select.is-success select:hover, .select.is-success select.is-hovered {
+ border-color: #3abb67;
+}
+
+.select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25);
+}
+
+.select.is-warning:not(:hover)::after {
+ border-color: #ffdd57;
+}
+
+.select.is-warning select {
+ border-color: #ffdd57;
+}
+
+.select.is-warning select:hover, .select.is-warning select.is-hovered {
+ border-color: #ffd83d;
+}
+
+.select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25);
+}
+
+.select.is-danger:not(:hover)::after {
+ border-color: #f14668;
+}
+
+.select.is-danger select {
+ border-color: #f14668;
+}
+
+.select.is-danger select:hover, .select.is-danger select.is-hovered {
+ border-color: #ef2e55;
+}
+
+.select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25);
+}
+
+.select.is-small {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.select.is-medium {
+ font-size: 1.25rem;
+}
+
+.select.is-large {
+ font-size: 1.5rem;
+}
+
+.select.is-disabled::after {
+ border-color: #7a7a7a;
+}
+
+.select.is-fullwidth {
+ width: 100%;
+}
+
+.select.is-fullwidth select {
+ width: 100%;
+}
+
+.select.is-loading::after {
+ margin-top: 0;
+ position: absolute;
+ left: 0.625em;
+ top: 0.625em;
+ transform: none;
+}
+
+.select.is-loading.is-small:after {
+ font-size: 0.75rem;
+}
+
+.select.is-loading.is-medium:after {
+ font-size: 1.25rem;
+}
+
+.select.is-loading.is-large:after {
+ font-size: 1.5rem;
+}
+
+.file {
+ align-items: stretch;
+ display: flex;
+ justify-content: flex-start;
+ position: relative;
+}
+
+.file.is-white .file-cta {
+ background-color: white;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta {
+ background-color: #f9f9f9;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25);
+ color: #0a0a0a;
+}
+
+.file.is-white:active .file-cta, .file.is-white.is-active .file-cta {
+ background-color: #f2f2f2;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.file.is-black .file-cta {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ color: white;
+}
+
+.file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta {
+ background-color: #040404;
+ border-color: transparent;
+ color: white;
+}
+
+.file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25);
+ color: white;
+}
+
+.file.is-black:active .file-cta, .file.is-black.is-active .file-cta {
+ background-color: black;
+ border-color: transparent;
+ color: white;
+}
+
+.file.is-light .file-cta {
+ background-color: whitesmoke;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta {
+ background-color: #eeeeee;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-light:active .file-cta, .file.is-light.is-active .file-cta {
+ background-color: #e8e8e8;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-dark .file-cta {
+ background-color: #363636;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta {
+ background-color: #2f2f2f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25);
+ color: #fff;
+}
+
+.file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta {
+ background-color: #292929;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-primary .file-cta {
+ background-color: #00d1b2;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta {
+ background-color: #00c4a7;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25);
+ color: #fff;
+}
+
+.file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta {
+ background-color: #00b89c;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-link .file-cta {
+ background-color: #3273dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta {
+ background-color: #276cda;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25);
+ color: #fff;
+}
+
+.file.is-link:active .file-cta, .file.is-link.is-active .file-cta {
+ background-color: #2366d1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-info .file-cta {
+ background-color: #3298dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta {
+ background-color: #2793da;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(50, 152, 220, 0.25);
+ color: #fff;
+}
+
+.file.is-info:active .file-cta, .file.is-info.is-active .file-cta {
+ background-color: #238cd1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-success .file-cta {
+ background-color: #48c774;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta {
+ background-color: #3ec46d;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(72, 199, 116, 0.25);
+ color: #fff;
+}
+
+.file.is-success:active .file-cta, .file.is-success.is-active .file-cta {
+ background-color: #3abb67;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-warning .file-cta {
+ background-color: #ffdd57;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta {
+ background-color: #ffdb4a;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta {
+ background-color: #ffd83d;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-danger .file-cta {
+ background-color: #f14668;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta {
+ background-color: #f03a5f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(241, 70, 104, 0.25);
+ color: #fff;
+}
+
+.file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta {
+ background-color: #ef2e55;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-small {
+ font-size: 0.75rem;
+}
+
+.file.is-medium {
+ font-size: 1.25rem;
+}
+
+.file.is-medium .file-icon .fa {
+ font-size: 21px;
+}
+
+.file.is-large {
+ font-size: 1.5rem;
+}
+
+.file.is-large .file-icon .fa {
+ font-size: 28px;
+}
+
+.file.has-name .file-cta {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.file.has-name .file-name {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.file.has-name.is-empty .file-cta {
+ border-radius: 4px;
+}
+
+.file.has-name.is-empty .file-name {
+ display: none;
+}
+
+.file.is-boxed .file-label {
+ flex-direction: column;
+}
+
+.file.is-boxed .file-cta {
+ flex-direction: column;
+ height: auto;
+ padding: 1em 3em;
+}
+
+.file.is-boxed .file-name {
+ border-width: 0 1px 1px;
+}
+
+.file.is-boxed .file-icon {
+ height: 1.5em;
+ width: 1.5em;
+}
+
+.file.is-boxed .file-icon .fa {
+ font-size: 21px;
+}
+
+.file.is-boxed.is-small .file-icon .fa {
+ font-size: 14px;
+}
+
+.file.is-boxed.is-medium .file-icon .fa {
+ font-size: 28px;
+}
+
+.file.is-boxed.is-large .file-icon .fa {
+ font-size: 35px;
+}
+
+.file.is-boxed.has-name .file-cta {
+ border-radius: 4px 4px 0 0;
+}
+
+.file.is-boxed.has-name .file-name {
+ border-radius: 0 0 4px 4px;
+ border-width: 0 1px 1px;
+}
+
+.file.is-centered {
+ justify-content: center;
+}
+
+.file.is-fullwidth .file-label {
+ width: 100%;
+}
+
+.file.is-fullwidth .file-name {
+ flex-grow: 1;
+ max-width: none;
+}
+
+.file.is-right {
+ justify-content: flex-end;
+}
+
+.file.is-right .file-cta {
+ border-radius: 0 4px 4px 0;
+}
+
+.file.is-right .file-name {
+ border-radius: 4px 0 0 4px;
+ border-width: 1px 0 1px 1px;
+ order: -1;
+}
+
+.file-label {
+ align-items: stretch;
+ display: flex;
+ cursor: pointer;
+ justify-content: flex-start;
+ overflow: hidden;
+ position: relative;
+}
+
+.file-label:hover .file-cta {
+ background-color: #eeeeee;
+ color: #363636;
+}
+
+.file-label:hover .file-name {
+ border-color: #d5d5d5;
+}
+
+.file-label:active .file-cta {
+ background-color: #e8e8e8;
+ color: #363636;
+}
+
+.file-label:active .file-name {
+ border-color: #cfcfcf;
+}
+
+.file-input {
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ outline: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.file-cta,
+.file-name {
+ border-color: #dbdbdb;
+ border-radius: 4px;
+ font-size: 1em;
+ padding-left: 1em;
+ padding-right: 1em;
+ white-space: nowrap;
+}
+
+.file-cta {
+ background-color: whitesmoke;
+ color: #4a4a4a;
+}
+
+.file-name {
+ border-color: #dbdbdb;
+ border-style: solid;
+ border-width: 1px 1px 1px 0;
+ display: block;
+ max-width: 16em;
+ overflow: hidden;
+ text-align: inherit;
+ text-overflow: ellipsis;
+}
+
+.file-icon {
+ align-items: center;
+ display: flex;
+ height: 1em;
+ justify-content: center;
+ margin-left: 0.5em;
+ width: 1em;
+}
+
+.file-icon .fa {
+ font-size: 14px;
+}
+
+.label {
+ color: #363636;
+ display: block;
+ font-size: 1rem;
+ font-weight: 700;
+}
+
+.label:not(:last-child) {
+ margin-bottom: 0.5em;
+}
+
+.label.is-small {
+ font-size: 0.75rem;
+}
+
+.label.is-medium {
+ font-size: 1.25rem;
+}
+
+.label.is-large {
+ font-size: 1.5rem;
+}
+
+.help {
+ display: block;
+ font-size: 0.75rem;
+ margin-top: 0.25rem;
+}
+
+.help.is-white {
+ color: white;
+}
+
+.help.is-black {
+ color: #0a0a0a;
+}
+
+.help.is-light {
+ color: whitesmoke;
+}
+
+.help.is-dark {
+ color: #363636;
+}
+
+.help.is-primary {
+ color: #00d1b2;
+}
+
+.help.is-link {
+ color: #3273dc;
+}
+
+.help.is-info {
+ color: #3298dc;
+}
+
+.help.is-success {
+ color: #48c774;
+}
+
+.help.is-warning {
+ color: #ffdd57;
+}
+
+.help.is-danger {
+ color: #f14668;
+}
+
+.field:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.field.has-addons {
+ display: flex;
+ justify-content: flex-start;
+}
+
+.field.has-addons .control:not(:last-child) {
+ margin-left: -1px;
+}
+
+.field.has-addons .control:not(:first-child):not(:last-child) .button,
+.field.has-addons .control:not(:first-child):not(:last-child) .input,
+.field.has-addons .control:not(:first-child):not(:last-child) .select select {
+ border-radius: 0;
+}
+
+.field.has-addons .control:first-child:not(:only-child) .button,
+.field.has-addons .control:first-child:not(:only-child) .input,
+.field.has-addons .control:first-child:not(:only-child) .select select {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.field.has-addons .control:last-child:not(:only-child) .button,
+.field.has-addons .control:last-child:not(:only-child) .input,
+.field.has-addons .control:last-child:not(:only-child) .select select {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered,
+.field.has-addons .control .input:not([disabled]):hover,
+.field.has-addons .control .input:not([disabled]).is-hovered,
+.field.has-addons .control .select select:not([disabled]):hover,
+.field.has-addons .control .select select:not([disabled]).is-hovered {
+ z-index: 2;
+}
+
+.field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active,
+.field.has-addons .control .input:not([disabled]):focus,
+.field.has-addons .control .input:not([disabled]).is-focused,
+.field.has-addons .control .input:not([disabled]):active,
+.field.has-addons .control .input:not([disabled]).is-active,
+.field.has-addons .control .select select:not([disabled]):focus,
+.field.has-addons .control .select select:not([disabled]).is-focused,
+.field.has-addons .control .select select:not([disabled]):active,
+.field.has-addons .control .select select:not([disabled]).is-active {
+ z-index: 3;
+}
+
+.field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover,
+.field.has-addons .control .input:not([disabled]):focus:hover,
+.field.has-addons .control .input:not([disabled]).is-focused:hover,
+.field.has-addons .control .input:not([disabled]):active:hover,
+.field.has-addons .control .input:not([disabled]).is-active:hover,
+.field.has-addons .control .select select:not([disabled]):focus:hover,
+.field.has-addons .control .select select:not([disabled]).is-focused:hover,
+.field.has-addons .control .select select:not([disabled]):active:hover,
+.field.has-addons .control .select select:not([disabled]).is-active:hover {
+ z-index: 4;
+}
+
+.field.has-addons .control.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.field.has-addons.has-addons-centered {
+ justify-content: center;
+}
+
+.field.has-addons.has-addons-right {
+ justify-content: flex-end;
+}
+
+.field.has-addons.has-addons-fullwidth .control {
+ flex-grow: 1;
+ flex-shrink: 0;
+}
+
+.field.is-grouped {
+ display: flex;
+ justify-content: flex-start;
+}
+
+.field.is-grouped > .control {
+ flex-shrink: 0;
+}
+
+.field.is-grouped > .control:not(:last-child) {
+ margin-bottom: 0;
+ margin-left: 0.75rem;
+}
+
+.field.is-grouped > .control.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.field.is-grouped.is-grouped-centered {
+ justify-content: center;
+}
+
+.field.is-grouped.is-grouped-right {
+ justify-content: flex-end;
+}
+
+.field.is-grouped.is-grouped-multiline {
+ flex-wrap: wrap;
+}
+
+.field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.field.is-grouped.is-grouped-multiline:last-child {
+ margin-bottom: -0.75rem;
+}
+
+.field.is-grouped.is-grouped-multiline:not(:last-child) {
+ margin-bottom: 0;
+}
+
+@media screen and (min-width: 769px), print {
+ .field.is-horizontal {
+ display: flex;
+ }
+}
+
+.field-label .label {
+ font-size: inherit;
+}
+
+@media screen and (max-width: 768px) {
+ .field-label {
+ margin-bottom: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .field-label {
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ margin-left: 1.5rem;
+ text-align: right;
+ }
+ .field-label.is-small {
+ font-size: 0.75rem;
+ padding-top: 0.375em;
+ }
+ .field-label.is-normal {
+ padding-top: 0.375em;
+ }
+ .field-label.is-medium {
+ font-size: 1.25rem;
+ padding-top: 0.375em;
+ }
+ .field-label.is-large {
+ font-size: 1.5rem;
+ padding-top: 0.375em;
+ }
+}
+
+.field-body .field .field {
+ margin-bottom: 0;
+}
+
+@media screen and (min-width: 769px), print {
+ .field-body {
+ display: flex;
+ flex-basis: 0;
+ flex-grow: 5;
+ flex-shrink: 1;
+ }
+ .field-body .field {
+ margin-bottom: 0;
+ }
+ .field-body > .field {
+ flex-shrink: 1;
+ }
+ .field-body > .field:not(.is-narrow) {
+ flex-grow: 1;
+ }
+ .field-body > .field:not(:last-child) {
+ margin-left: 0.75rem;
+ }
+}
+
+.control {
+ box-sizing: border-box;
+ clear: both;
+ font-size: 1rem;
+ position: relative;
+ text-align: inherit;
+}
+
+.control.has-icons-left .input:focus ~ .icon,
+.control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon,
+.control.has-icons-right .select:focus ~ .icon {
+ color: #4a4a4a;
+}
+
+.control.has-icons-left .input.is-small ~ .icon,
+.control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon,
+.control.has-icons-right .select.is-small ~ .icon {
+ font-size: 0.75rem;
+}
+
+.control.has-icons-left .input.is-medium ~ .icon,
+.control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon,
+.control.has-icons-right .select.is-medium ~ .icon {
+ font-size: 1.25rem;
+}
+
+.control.has-icons-left .input.is-large ~ .icon,
+.control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon,
+.control.has-icons-right .select.is-large ~ .icon {
+ font-size: 1.5rem;
+}
+
+.control.has-icons-left .icon, .control.has-icons-right .icon {
+ color: #dbdbdb;
+ height: 2.5em;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ width: 2.5em;
+ z-index: 4;
+}
+
+.control.has-icons-left .input,
+.control.has-icons-left .select select {
+ padding-left: 2.5em;
+}
+
+.control.has-icons-left .icon.is-left {
+ left: 0;
+}
+
+.control.has-icons-right .input,
+.control.has-icons-right .select select {
+ padding-right: 2.5em;
+}
+
+.control.has-icons-right .icon.is-right {
+ right: 0;
+}
+
+.control.is-loading::after {
+ position: absolute !important;
+ left: 0.625em;
+ top: 0.625em;
+ z-index: 4;
+}
+
+.control.is-loading.is-small:after {
+ font-size: 0.75rem;
+}
+
+.control.is-loading.is-medium:after {
+ font-size: 1.25rem;
+}
+
+.control.is-loading.is-large:after {
+ font-size: 1.5rem;
+}
+
+/* Bulma Components */
+.breadcrumb {
+ font-size: 1rem;
+ white-space: nowrap;
+}
+
+.breadcrumb a {
+ align-items: center;
+ color: #3273dc;
+ display: flex;
+ justify-content: center;
+ padding: 0 0.75em;
+}
+
+.breadcrumb a:hover {
+ color: #363636;
+}
+
+.breadcrumb li {
+ align-items: center;
+ display: flex;
+}
+
+.breadcrumb li:first-child a {
+ padding-right: 0;
+}
+
+.breadcrumb li.is-active a {
+ color: #363636;
+ cursor: default;
+ pointer-events: none;
+}
+
+.breadcrumb li + li::before {
+ color: #b5b5b5;
+ content: "\0002f";
+}
+
+.breadcrumb ul,
+.breadcrumb ol {
+ align-items: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.breadcrumb .icon:first-child {
+ margin-left: 0.5em;
+}
+
+.breadcrumb .icon:last-child {
+ margin-right: 0.5em;
+}
+
+.breadcrumb.is-centered ol,
+.breadcrumb.is-centered ul {
+ justify-content: center;
+}
+
+.breadcrumb.is-right ol,
+.breadcrumb.is-right ul {
+ justify-content: flex-end;
+}
+
+.breadcrumb.is-small {
+ font-size: 0.75rem;
+}
+
+.breadcrumb.is-medium {
+ font-size: 1.25rem;
+}
+
+.breadcrumb.is-large {
+ font-size: 1.5rem;
+}
+
+.breadcrumb.has-arrow-separator li + li::before {
+ content: "\02192";
+}
+
+.breadcrumb.has-bullet-separator li + li::before {
+ content: "\02022";
+}
+
+.breadcrumb.has-dot-separator li + li::before {
+ content: "\000b7";
+}
+
+.breadcrumb.has-succeeds-separator li + li::before {
+ content: "\0227B";
+}
+
+.card {
+ background-color: white;
+ border-radius: 0.25rem;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ color: #4a4a4a;
+ max-width: 100%;
+ overflow: hidden;
+ position: relative;
+}
+
+.card-header {
+ background-color: transparent;
+ align-items: stretch;
+ box-shadow: 0 0.125em 0.25em rgba(10, 10, 10, 0.1);
+ display: flex;
+}
+
+.card-header-title {
+ align-items: center;
+ color: #363636;
+ display: flex;
+ flex-grow: 1;
+ font-weight: 700;
+ padding: 0.75rem 1rem;
+}
+
+.card-header-title.is-centered {
+ justify-content: center;
+}
+
+.card-header-icon {
+ align-items: center;
+ cursor: pointer;
+ display: flex;
+ justify-content: center;
+ padding: 0.75rem 1rem;
+}
+
+.card-image {
+ display: block;
+ position: relative;
+}
+
+.card-content {
+ background-color: transparent;
+ padding: 1.5rem;
+}
+
+.card-footer {
+ background-color: transparent;
+ border-top: 1px solid #ededed;
+ align-items: stretch;
+ display: flex;
+}
+
+.card-footer-item {
+ align-items: center;
+ display: flex;
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ justify-content: center;
+ padding: 0.75rem;
+}
+
+.card-footer-item:not(:last-child) {
+ border-left: 1px solid #ededed;
+}
+
+.card .media:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.dropdown {
+ display: inline-flex;
+ position: relative;
+ vertical-align: top;
+}
+
+.dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu {
+ display: block;
+}
+
+.dropdown.is-right .dropdown-menu {
+ left: auto;
+ right: 0;
+}
+
+.dropdown.is-up .dropdown-menu {
+ bottom: 100%;
+ padding-bottom: 4px;
+ padding-top: initial;
+ top: auto;
+}
+
+.dropdown-menu {
+ display: none;
+ right: 0;
+ min-width: 12rem;
+ padding-top: 4px;
+ position: absolute;
+ top: 100%;
+ z-index: 20;
+}
+
+.dropdown-content {
+ background-color: white;
+ border-radius: 4px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ padding-bottom: 0.5rem;
+ padding-top: 0.5rem;
+}
+
+.dropdown-item {
+ color: #4a4a4a;
+ display: block;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ padding: 0.375rem 1rem;
+ position: relative;
+}
+
+a.dropdown-item,
+button.dropdown-item {
+ padding-left: 3rem;
+ text-align: inherit;
+ white-space: nowrap;
+ width: 100%;
+}
+
+a.dropdown-item:hover,
+button.dropdown-item:hover {
+ background-color: whitesmoke;
+ color: #0a0a0a;
+}
+
+a.dropdown-item.is-active,
+button.dropdown-item.is-active {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.dropdown-divider {
+ background-color: #ededed;
+ border: none;
+ display: block;
+ height: 1px;
+ margin: 0.5rem 0;
+}
+
+.level {
+ align-items: center;
+ justify-content: space-between;
+}
+
+.level code {
+ border-radius: 4px;
+}
+
+.level img {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.level.is-mobile {
+ display: flex;
+}
+
+.level.is-mobile .level-left,
+.level.is-mobile .level-right {
+ display: flex;
+}
+
+.level.is-mobile .level-left + .level-right {
+ margin-top: 0;
+}
+
+.level.is-mobile .level-item:not(:last-child) {
+ margin-bottom: 0;
+ margin-left: 0.75rem;
+}
+
+.level.is-mobile .level-item:not(.is-narrow) {
+ flex-grow: 1;
+}
+
+@media screen and (min-width: 769px), print {
+ .level {
+ display: flex;
+ }
+ .level > .level-item:not(.is-narrow) {
+ flex-grow: 1;
+ }
+}
+
+.level-item {
+ align-items: center;
+ display: flex;
+ flex-basis: auto;
+ flex-grow: 0;
+ flex-shrink: 0;
+ justify-content: center;
+}
+
+.level-item .title,
+.level-item .subtitle {
+ margin-bottom: 0;
+}
+
+@media screen and (max-width: 768px) {
+ .level-item:not(:last-child) {
+ margin-bottom: 0.75rem;
+ }
+}
+
+.level-left,
+.level-right {
+ flex-basis: auto;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.level-left .level-item.is-flexible,
+.level-right .level-item.is-flexible {
+ flex-grow: 1;
+}
+
+@media screen and (min-width: 769px), print {
+ .level-left .level-item:not(:last-child),
+ .level-right .level-item:not(:last-child) {
+ margin-left: 0.75rem;
+ }
+}
+
+.level-left {
+ align-items: center;
+ justify-content: flex-start;
+}
+
+@media screen and (max-width: 768px) {
+ .level-left + .level-right {
+ margin-top: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .level-left {
+ display: flex;
+ }
+}
+
+.level-right {
+ align-items: center;
+ justify-content: flex-end;
+}
+
+@media screen and (min-width: 769px), print {
+ .level-right {
+ display: flex;
+ }
+}
+
+.media {
+ align-items: flex-start;
+ display: flex;
+ text-align: inherit;
+}
+
+.media .content:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.media .media {
+ border-top: 1px solid rgba(219, 219, 219, 0.5);
+ display: flex;
+ padding-top: 0.75rem;
+}
+
+.media .media .content:not(:last-child),
+.media .media .control:not(:last-child) {
+ margin-bottom: 0.5rem;
+}
+
+.media .media .media {
+ padding-top: 0.5rem;
+}
+
+.media .media .media + .media {
+ margin-top: 0.5rem;
+}
+
+.media + .media {
+ border-top: 1px solid rgba(219, 219, 219, 0.5);
+ margin-top: 1rem;
+ padding-top: 1rem;
+}
+
+.media.is-large + .media {
+ margin-top: 1.5rem;
+ padding-top: 1.5rem;
+}
+
+.media-left,
+.media-right {
+ flex-basis: auto;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.media-left {
+ margin-left: 1rem;
+}
+
+.media-right {
+ margin-right: 1rem;
+}
+
+.media-content {
+ flex-basis: auto;
+ flex-grow: 1;
+ flex-shrink: 1;
+ text-align: inherit;
+}
+
+@media screen and (max-width: 768px) {
+ .media-content {
+ overflow-x: auto;
+ }
+}
+
+.menu {
+ font-size: 1rem;
+}
+
+.menu.is-small {
+ font-size: 0.75rem;
+}
+
+.menu.is-medium {
+ font-size: 1.25rem;
+}
+
+.menu.is-large {
+ font-size: 1.5rem;
+}
+
+.menu-list {
+ line-height: 1.25;
+}
+
+.menu-list a {
+ border-radius: 2px;
+ color: #4a4a4a;
+ display: block;
+ padding: 0.5em 0.75em;
+}
+
+.menu-list a:hover {
+ background-color: whitesmoke;
+ color: #363636;
+}
+
+.menu-list a.is-active {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.menu-list li ul {
+ border-right: 1px solid #dbdbdb;
+ margin: 0.75em;
+ padding-right: 0.75em;
+}
+
+.menu-label {
+ color: #7a7a7a;
+ font-size: 0.75em;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+}
+
+.menu-label:not(:first-child) {
+ margin-top: 1em;
+}
+
+.menu-label:not(:last-child) {
+ margin-bottom: 1em;
+}
+
+.message {
+ background-color: whitesmoke;
+ border-radius: 4px;
+ font-size: 1rem;
+}
+
+.message strong {
+ color: currentColor;
+}
+
+.message a:not(.button):not(.tag):not(.dropdown-item) {
+ color: currentColor;
+ text-decoration: underline;
+}
+
+.message.is-small {
+ font-size: 0.75rem;
+}
+
+.message.is-medium {
+ font-size: 1.25rem;
+}
+
+.message.is-large {
+ font-size: 1.5rem;
+}
+
+.message.is-white {
+ background-color: white;
+}
+
+.message.is-white .message-header {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.message.is-white .message-body {
+ border-color: white;
+}
+
+.message.is-black {
+ background-color: #fafafa;
+}
+
+.message.is-black .message-header {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.message.is-black .message-body {
+ border-color: #0a0a0a;
+}
+
+.message.is-light {
+ background-color: #fafafa;
+}
+
+.message.is-light .message-header {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.message.is-light .message-body {
+ border-color: whitesmoke;
+}
+
+.message.is-dark {
+ background-color: #fafafa;
+}
+
+.message.is-dark .message-header {
+ background-color: #363636;
+ color: #fff;
+}
+
+.message.is-dark .message-body {
+ border-color: #363636;
+}
+
+.message.is-primary {
+ background-color: #ebfffc;
+}
+
+.message.is-primary .message-header {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.message.is-primary .message-body {
+ border-color: #00d1b2;
+ color: #00947e;
+}
+
+.message.is-link {
+ background-color: #eef3fc;
+}
+
+.message.is-link .message-header {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.message.is-link .message-body {
+ border-color: #3273dc;
+ color: #2160c4;
+}
+
+.message.is-info {
+ background-color: #eef6fc;
+}
+
+.message.is-info .message-header {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.message.is-info .message-body {
+ border-color: #3298dc;
+ color: #1d72aa;
+}
+
+.message.is-success {
+ background-color: #effaf3;
+}
+
+.message.is-success .message-header {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.message.is-success .message-body {
+ border-color: #48c774;
+ color: #257942;
+}
+
+.message.is-warning {
+ background-color: #fffbeb;
+}
+
+.message.is-warning .message-header {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.message.is-warning .message-body {
+ border-color: #ffdd57;
+ color: #947600;
+}
+
+.message.is-danger {
+ background-color: #feecf0;
+}
+
+.message.is-danger .message-header {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.message.is-danger .message-body {
+ border-color: #f14668;
+ color: #cc0f35;
+}
+
+.message-header {
+ align-items: center;
+ background-color: #4a4a4a;
+ border-radius: 4px 4px 0 0;
+ color: #fff;
+ display: flex;
+ font-weight: 700;
+ justify-content: space-between;
+ line-height: 1.25;
+ padding: 0.75em 1em;
+ position: relative;
+}
+
+.message-header .delete {
+ flex-grow: 0;
+ flex-shrink: 0;
+ margin-right: 0.75em;
+}
+
+.message-header + .message-body {
+ border-width: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.message-body {
+ border-color: #dbdbdb;
+ border-radius: 4px;
+ border-style: solid;
+ border-width: 0 0 0 4px;
+ color: #4a4a4a;
+ padding: 1.25em 1.5em;
+}
+
+.message-body code,
+.message-body pre {
+ background-color: white;
+}
+
+.message-body pre code {
+ background-color: transparent;
+}
+
+.modal {
+ align-items: center;
+ display: none;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ position: fixed;
+ z-index: 40;
+}
+
+.modal.is-active {
+ display: flex;
+}
+
+.modal-background {
+ background-color: rgba(10, 10, 10, 0.86);
+}
+
+.modal-content,
+.modal-card {
+ margin: 0 20px;
+ max-height: calc(100vh - 160px);
+ overflow: auto;
+ position: relative;
+ width: 100%;
+}
+
+@media screen and (min-width: 769px) {
+ .modal-content,
+ .modal-card {
+ margin: 0 auto;
+ max-height: calc(100vh - 40px);
+ width: 640px;
+ }
+}
+
+.modal-close {
+ background: none;
+ height: 40px;
+ position: fixed;
+ left: 20px;
+ top: 20px;
+ width: 40px;
+}
+
+.modal-card {
+ display: flex;
+ flex-direction: column;
+ max-height: calc(100vh - 40px);
+ overflow: hidden;
+ -ms-overflow-y: visible;
+}
+
+.modal-card-head,
+.modal-card-foot {
+ align-items: center;
+ background-color: whitesmoke;
+ display: flex;
+ flex-shrink: 0;
+ justify-content: flex-start;
+ padding: 20px;
+ position: relative;
+}
+
+.modal-card-head {
+ border-bottom: 1px solid #dbdbdb;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+.modal-card-title {
+ color: #363636;
+ flex-grow: 1;
+ flex-shrink: 0;
+ font-size: 1.5rem;
+ line-height: 1;
+}
+
+.modal-card-foot {
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-top: 1px solid #dbdbdb;
+}
+
+.modal-card-foot .button:not(:last-child) {
+ margin-left: 0.5em;
+}
+
+.modal-card-body {
+ -webkit-overflow-scrolling: touch;
+ background-color: white;
+ flex-grow: 1;
+ flex-shrink: 1;
+ overflow: auto;
+ padding: 20px;
+}
+
+.navbar {
+ background-color: white;
+ min-height: 3.25rem;
+ position: relative;
+ z-index: 30;
+}
+
+.navbar.is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-brand > .navbar-item,
+.navbar.is-white .navbar-brand .navbar-link {
+ color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active,
+.navbar.is-white .navbar-brand .navbar-link:focus,
+.navbar.is-white .navbar-brand .navbar-link:hover,
+.navbar.is-white .navbar-brand .navbar-link.is-active {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-brand .navbar-link::after {
+ border-color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-burger {
+ color: #0a0a0a;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-white .navbar-start > .navbar-item,
+ .navbar.is-white .navbar-start .navbar-link,
+ .navbar.is-white .navbar-end > .navbar-item,
+ .navbar.is-white .navbar-end .navbar-link {
+ color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active,
+ .navbar.is-white .navbar-start .navbar-link:focus,
+ .navbar.is-white .navbar-start .navbar-link:hover,
+ .navbar.is-white .navbar-start .navbar-link.is-active,
+ .navbar.is-white .navbar-end > a.navbar-item:focus,
+ .navbar.is-white .navbar-end > a.navbar-item:hover,
+ .navbar.is-white .navbar-end > a.navbar-item.is-active,
+ .navbar.is-white .navbar-end .navbar-link:focus,
+ .navbar.is-white .navbar-end .navbar-link:hover,
+ .navbar.is-white .navbar-end .navbar-link.is-active {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-start .navbar-link::after,
+ .navbar.is-white .navbar-end .navbar-link::after {
+ border-color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-dropdown a.navbar-item.is-active {
+ background-color: white;
+ color: #0a0a0a;
+ }
+}
+
+.navbar.is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.navbar.is-black .navbar-brand > .navbar-item,
+.navbar.is-black .navbar-brand .navbar-link {
+ color: white;
+}
+
+.navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active,
+.navbar.is-black .navbar-brand .navbar-link:focus,
+.navbar.is-black .navbar-brand .navbar-link:hover,
+.navbar.is-black .navbar-brand .navbar-link.is-active {
+ background-color: black;
+ color: white;
+}
+
+.navbar.is-black .navbar-brand .navbar-link::after {
+ border-color: white;
+}
+
+.navbar.is-black .navbar-burger {
+ color: white;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-black .navbar-start > .navbar-item,
+ .navbar.is-black .navbar-start .navbar-link,
+ .navbar.is-black .navbar-end > .navbar-item,
+ .navbar.is-black .navbar-end .navbar-link {
+ color: white;
+ }
+ .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active,
+ .navbar.is-black .navbar-start .navbar-link:focus,
+ .navbar.is-black .navbar-start .navbar-link:hover,
+ .navbar.is-black .navbar-start .navbar-link.is-active,
+ .navbar.is-black .navbar-end > a.navbar-item:focus,
+ .navbar.is-black .navbar-end > a.navbar-item:hover,
+ .navbar.is-black .navbar-end > a.navbar-item.is-active,
+ .navbar.is-black .navbar-end .navbar-link:focus,
+ .navbar.is-black .navbar-end .navbar-link:hover,
+ .navbar.is-black .navbar-end .navbar-link.is-active {
+ background-color: black;
+ color: white;
+ }
+ .navbar.is-black .navbar-start .navbar-link::after,
+ .navbar.is-black .navbar-end .navbar-link::after {
+ border-color: white;
+ }
+ .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: black;
+ color: white;
+ }
+ .navbar.is-black .navbar-dropdown a.navbar-item.is-active {
+ background-color: #0a0a0a;
+ color: white;
+ }
+}
+
+.navbar.is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-brand > .navbar-item,
+.navbar.is-light .navbar-brand .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active,
+.navbar.is-light .navbar-brand .navbar-link:focus,
+.navbar.is-light .navbar-brand .navbar-link:hover,
+.navbar.is-light .navbar-brand .navbar-link.is-active {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-brand .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-burger {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-light .navbar-start > .navbar-item,
+ .navbar.is-light .navbar-start .navbar-link,
+ .navbar.is-light .navbar-end > .navbar-item,
+ .navbar.is-light .navbar-end .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active,
+ .navbar.is-light .navbar-start .navbar-link:focus,
+ .navbar.is-light .navbar-start .navbar-link:hover,
+ .navbar.is-light .navbar-start .navbar-link.is-active,
+ .navbar.is-light .navbar-end > a.navbar-item:focus,
+ .navbar.is-light .navbar-end > a.navbar-item:hover,
+ .navbar.is-light .navbar-end > a.navbar-item.is-active,
+ .navbar.is-light .navbar-end .navbar-link:focus,
+ .navbar.is-light .navbar-end .navbar-link:hover,
+ .navbar.is-light .navbar-end .navbar-link.is-active {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-start .navbar-link::after,
+ .navbar.is-light .navbar-end .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-dropdown a.navbar-item.is-active {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+ }
+}
+
+.navbar.is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.navbar.is-dark .navbar-brand > .navbar-item,
+.navbar.is-dark .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-dark .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active,
+.navbar.is-dark .navbar-brand .navbar-link:focus,
+.navbar.is-dark .navbar-brand .navbar-link:hover,
+.navbar.is-dark .navbar-brand .navbar-link.is-active {
+ background-color: #292929;
+ color: #fff;
+}
+
+.navbar.is-dark .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-dark .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-dark .navbar-start > .navbar-item,
+ .navbar.is-dark .navbar-start .navbar-link,
+ .navbar.is-dark .navbar-end > .navbar-item,
+ .navbar.is-dark .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-dark .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active,
+ .navbar.is-dark .navbar-start .navbar-link:focus,
+ .navbar.is-dark .navbar-start .navbar-link:hover,
+ .navbar.is-dark .navbar-start .navbar-link.is-active,
+ .navbar.is-dark .navbar-end > a.navbar-item:focus,
+ .navbar.is-dark .navbar-end > a.navbar-item:hover,
+ .navbar.is-dark .navbar-end > a.navbar-item.is-active,
+ .navbar.is-dark .navbar-end .navbar-link:focus,
+ .navbar.is-dark .navbar-end .navbar-link:hover,
+ .navbar.is-dark .navbar-end .navbar-link.is-active {
+ background-color: #292929;
+ color: #fff;
+ }
+ .navbar.is-dark .navbar-start .navbar-link::after,
+ .navbar.is-dark .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #292929;
+ color: #fff;
+ }
+ .navbar.is-dark .navbar-dropdown a.navbar-item.is-active {
+ background-color: #363636;
+ color: #fff;
+ }
+}
+
+.navbar.is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.navbar.is-primary .navbar-brand > .navbar-item,
+.navbar.is-primary .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-primary .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active,
+.navbar.is-primary .navbar-brand .navbar-link:focus,
+.navbar.is-primary .navbar-brand .navbar-link:hover,
+.navbar.is-primary .navbar-brand .navbar-link.is-active {
+ background-color: #00b89c;
+ color: #fff;
+}
+
+.navbar.is-primary .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-primary .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-primary .navbar-start > .navbar-item,
+ .navbar.is-primary .navbar-start .navbar-link,
+ .navbar.is-primary .navbar-end > .navbar-item,
+ .navbar.is-primary .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-primary .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active,
+ .navbar.is-primary .navbar-start .navbar-link:focus,
+ .navbar.is-primary .navbar-start .navbar-link:hover,
+ .navbar.is-primary .navbar-start .navbar-link.is-active,
+ .navbar.is-primary .navbar-end > a.navbar-item:focus,
+ .navbar.is-primary .navbar-end > a.navbar-item:hover,
+ .navbar.is-primary .navbar-end > a.navbar-item.is-active,
+ .navbar.is-primary .navbar-end .navbar-link:focus,
+ .navbar.is-primary .navbar-end .navbar-link:hover,
+ .navbar.is-primary .navbar-end .navbar-link.is-active {
+ background-color: #00b89c;
+ color: #fff;
+ }
+ .navbar.is-primary .navbar-start .navbar-link::after,
+ .navbar.is-primary .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #00b89c;
+ color: #fff;
+ }
+ .navbar.is-primary .navbar-dropdown a.navbar-item.is-active {
+ background-color: #00d1b2;
+ color: #fff;
+ }
+}
+
+.navbar.is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.navbar.is-link .navbar-brand > .navbar-item,
+.navbar.is-link .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active,
+.navbar.is-link .navbar-brand .navbar-link:focus,
+.navbar.is-link .navbar-brand .navbar-link:hover,
+.navbar.is-link .navbar-brand .navbar-link.is-active {
+ background-color: #2366d1;
+ color: #fff;
+}
+
+.navbar.is-link .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-link .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-link .navbar-start > .navbar-item,
+ .navbar.is-link .navbar-start .navbar-link,
+ .navbar.is-link .navbar-end > .navbar-item,
+ .navbar.is-link .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active,
+ .navbar.is-link .navbar-start .navbar-link:focus,
+ .navbar.is-link .navbar-start .navbar-link:hover,
+ .navbar.is-link .navbar-start .navbar-link.is-active,
+ .navbar.is-link .navbar-end > a.navbar-item:focus,
+ .navbar.is-link .navbar-end > a.navbar-item:hover,
+ .navbar.is-link .navbar-end > a.navbar-item.is-active,
+ .navbar.is-link .navbar-end .navbar-link:focus,
+ .navbar.is-link .navbar-end .navbar-link:hover,
+ .navbar.is-link .navbar-end .navbar-link.is-active {
+ background-color: #2366d1;
+ color: #fff;
+ }
+ .navbar.is-link .navbar-start .navbar-link::after,
+ .navbar.is-link .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #2366d1;
+ color: #fff;
+ }
+ .navbar.is-link .navbar-dropdown a.navbar-item.is-active {
+ background-color: #3273dc;
+ color: #fff;
+ }
+}
+
+.navbar.is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.navbar.is-info .navbar-brand > .navbar-item,
+.navbar.is-info .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active,
+.navbar.is-info .navbar-brand .navbar-link:focus,
+.navbar.is-info .navbar-brand .navbar-link:hover,
+.navbar.is-info .navbar-brand .navbar-link.is-active {
+ background-color: #238cd1;
+ color: #fff;
+}
+
+.navbar.is-info .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-info .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-info .navbar-start > .navbar-item,
+ .navbar.is-info .navbar-start .navbar-link,
+ .navbar.is-info .navbar-end > .navbar-item,
+ .navbar.is-info .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active,
+ .navbar.is-info .navbar-start .navbar-link:focus,
+ .navbar.is-info .navbar-start .navbar-link:hover,
+ .navbar.is-info .navbar-start .navbar-link.is-active,
+ .navbar.is-info .navbar-end > a.navbar-item:focus,
+ .navbar.is-info .navbar-end > a.navbar-item:hover,
+ .navbar.is-info .navbar-end > a.navbar-item.is-active,
+ .navbar.is-info .navbar-end .navbar-link:focus,
+ .navbar.is-info .navbar-end .navbar-link:hover,
+ .navbar.is-info .navbar-end .navbar-link.is-active {
+ background-color: #238cd1;
+ color: #fff;
+ }
+ .navbar.is-info .navbar-start .navbar-link::after,
+ .navbar.is-info .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #238cd1;
+ color: #fff;
+ }
+ .navbar.is-info .navbar-dropdown a.navbar-item.is-active {
+ background-color: #3298dc;
+ color: #fff;
+ }
+}
+
+.navbar.is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.navbar.is-success .navbar-brand > .navbar-item,
+.navbar.is-success .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active,
+.navbar.is-success .navbar-brand .navbar-link:focus,
+.navbar.is-success .navbar-brand .navbar-link:hover,
+.navbar.is-success .navbar-brand .navbar-link.is-active {
+ background-color: #3abb67;
+ color: #fff;
+}
+
+.navbar.is-success .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-success .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-success .navbar-start > .navbar-item,
+ .navbar.is-success .navbar-start .navbar-link,
+ .navbar.is-success .navbar-end > .navbar-item,
+ .navbar.is-success .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active,
+ .navbar.is-success .navbar-start .navbar-link:focus,
+ .navbar.is-success .navbar-start .navbar-link:hover,
+ .navbar.is-success .navbar-start .navbar-link.is-active,
+ .navbar.is-success .navbar-end > a.navbar-item:focus,
+ .navbar.is-success .navbar-end > a.navbar-item:hover,
+ .navbar.is-success .navbar-end > a.navbar-item.is-active,
+ .navbar.is-success .navbar-end .navbar-link:focus,
+ .navbar.is-success .navbar-end .navbar-link:hover,
+ .navbar.is-success .navbar-end .navbar-link.is-active {
+ background-color: #3abb67;
+ color: #fff;
+ }
+ .navbar.is-success .navbar-start .navbar-link::after,
+ .navbar.is-success .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #3abb67;
+ color: #fff;
+ }
+ .navbar.is-success .navbar-dropdown a.navbar-item.is-active {
+ background-color: #48c774;
+ color: #fff;
+ }
+}
+
+.navbar.is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-brand > .navbar-item,
+.navbar.is-warning .navbar-brand .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active,
+.navbar.is-warning .navbar-brand .navbar-link:focus,
+.navbar.is-warning .navbar-brand .navbar-link:hover,
+.navbar.is-warning .navbar-brand .navbar-link.is-active {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-brand .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-burger {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-warning .navbar-start > .navbar-item,
+ .navbar.is-warning .navbar-start .navbar-link,
+ .navbar.is-warning .navbar-end > .navbar-item,
+ .navbar.is-warning .navbar-end .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active,
+ .navbar.is-warning .navbar-start .navbar-link:focus,
+ .navbar.is-warning .navbar-start .navbar-link:hover,
+ .navbar.is-warning .navbar-start .navbar-link.is-active,
+ .navbar.is-warning .navbar-end > a.navbar-item:focus,
+ .navbar.is-warning .navbar-end > a.navbar-item:hover,
+ .navbar.is-warning .navbar-end > a.navbar-item.is-active,
+ .navbar.is-warning .navbar-end .navbar-link:focus,
+ .navbar.is-warning .navbar-end .navbar-link:hover,
+ .navbar.is-warning .navbar-end .navbar-link.is-active {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-start .navbar-link::after,
+ .navbar.is-warning .navbar-end .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-dropdown a.navbar-item.is-active {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+ }
+}
+
+.navbar.is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.navbar.is-danger .navbar-brand > .navbar-item,
+.navbar.is-danger .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active,
+.navbar.is-danger .navbar-brand .navbar-link:focus,
+.navbar.is-danger .navbar-brand .navbar-link:hover,
+.navbar.is-danger .navbar-brand .navbar-link.is-active {
+ background-color: #ef2e55;
+ color: #fff;
+}
+
+.navbar.is-danger .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-danger .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-danger .navbar-start > .navbar-item,
+ .navbar.is-danger .navbar-start .navbar-link,
+ .navbar.is-danger .navbar-end > .navbar-item,
+ .navbar.is-danger .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active,
+ .navbar.is-danger .navbar-start .navbar-link:focus,
+ .navbar.is-danger .navbar-start .navbar-link:hover,
+ .navbar.is-danger .navbar-start .navbar-link.is-active,
+ .navbar.is-danger .navbar-end > a.navbar-item:focus,
+ .navbar.is-danger .navbar-end > a.navbar-item:hover,
+ .navbar.is-danger .navbar-end > a.navbar-item.is-active,
+ .navbar.is-danger .navbar-end .navbar-link:focus,
+ .navbar.is-danger .navbar-end .navbar-link:hover,
+ .navbar.is-danger .navbar-end .navbar-link.is-active {
+ background-color: #ef2e55;
+ color: #fff;
+ }
+ .navbar.is-danger .navbar-start .navbar-link::after,
+ .navbar.is-danger .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #ef2e55;
+ color: #fff;
+ }
+ .navbar.is-danger .navbar-dropdown a.navbar-item.is-active {
+ background-color: #f14668;
+ color: #fff;
+ }
+}
+
+.navbar > .container {
+ align-items: stretch;
+ display: flex;
+ min-height: 3.25rem;
+ width: 100%;
+}
+
+.navbar.has-shadow {
+ box-shadow: 0 2px 0 0 whitesmoke;
+}
+
+.navbar.is-fixed-bottom, .navbar.is-fixed-top {
+ left: 0;
+ position: fixed;
+ right: 0;
+ z-index: 30;
+}
+
+.navbar.is-fixed-bottom {
+ bottom: 0;
+}
+
+.navbar.is-fixed-bottom.has-shadow {
+ box-shadow: 0 -2px 0 0 whitesmoke;
+}
+
+.navbar.is-fixed-top {
+ top: 0;
+}
+
+html.has-navbar-fixed-top,
+body.has-navbar-fixed-top {
+ padding-top: 3.25rem;
+}
+
+html.has-navbar-fixed-bottom,
+body.has-navbar-fixed-bottom {
+ padding-bottom: 3.25rem;
+}
+
+.navbar-brand,
+.navbar-tabs {
+ align-items: stretch;
+ display: flex;
+ flex-shrink: 0;
+ min-height: 3.25rem;
+}
+
+.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover {
+ background-color: transparent;
+}
+
+.navbar-tabs {
+ -webkit-overflow-scrolling: touch;
+ max-width: 100vw;
+ overflow-x: auto;
+ overflow-y: hidden;
+}
+
+.navbar-burger {
+ color: #4a4a4a;
+ cursor: pointer;
+ display: block;
+ height: 3.25rem;
+ position: relative;
+ width: 3.25rem;
+ margin-right: auto;
+}
+
+.navbar-burger span {
+ background-color: currentColor;
+ display: block;
+ height: 1px;
+ left: calc(50% - 8px);
+ position: absolute;
+ transform-origin: center;
+ transition-duration: 86ms;
+ transition-property: background-color, opacity, transform;
+ transition-timing-function: ease-out;
+ width: 16px;
+}
+
+.navbar-burger span:nth-child(1) {
+ top: calc(50% - 6px);
+}
+
+.navbar-burger span:nth-child(2) {
+ top: calc(50% - 1px);
+}
+
+.navbar-burger span:nth-child(3) {
+ top: calc(50% + 4px);
+}
+
+.navbar-burger:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.navbar-burger.is-active span:nth-child(1) {
+ transform: translateY(5px) rotate(45deg);
+}
+
+.navbar-burger.is-active span:nth-child(2) {
+ opacity: 0;
+}
+
+.navbar-burger.is-active span:nth-child(3) {
+ transform: translateY(-5px) rotate(-45deg);
+}
+
+.navbar-menu {
+ display: none;
+}
+
+.navbar-item,
+.navbar-link {
+ color: #4a4a4a;
+ display: block;
+ line-height: 1.5;
+ padding: 0.5rem 0.75rem;
+ position: relative;
+}
+
+.navbar-item .icon:only-child,
+.navbar-link .icon:only-child {
+ margin-left: -0.25rem;
+ margin-right: -0.25rem;
+}
+
+a.navbar-item,
+.navbar-link {
+ cursor: pointer;
+}
+
+a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active,
+.navbar-link:focus,
+.navbar-link:focus-within,
+.navbar-link:hover,
+.navbar-link.is-active {
+ background-color: #fafafa;
+ color: #3273dc;
+}
+
+.navbar-item {
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.navbar-item img {
+ max-height: 1.75rem;
+}
+
+.navbar-item.has-dropdown {
+ padding: 0;
+}
+
+.navbar-item.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.navbar-item.is-tab {
+ border-bottom: 1px solid transparent;
+ min-height: 3.25rem;
+ padding-bottom: calc(0.5rem - 1px);
+}
+
+.navbar-item.is-tab:focus, .navbar-item.is-tab:hover {
+ background-color: transparent;
+ border-bottom-color: #3273dc;
+}
+
+.navbar-item.is-tab.is-active {
+ background-color: transparent;
+ border-bottom-color: #3273dc;
+ border-bottom-style: solid;
+ border-bottom-width: 3px;
+ color: #3273dc;
+ padding-bottom: calc(0.5rem - 3px);
+}
+
+.navbar-content {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.navbar-link:not(.is-arrowless) {
+ padding-left: 2.5em;
+}
+
+.navbar-link:not(.is-arrowless)::after {
+ border-color: #3273dc;
+ margin-top: -0.375em;
+ left: 1.125em;
+}
+
+.navbar-dropdown {
+ font-size: 0.875rem;
+ padding-bottom: 0.5rem;
+ padding-top: 0.5rem;
+}
+
+.navbar-dropdown .navbar-item {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+.navbar-divider {
+ background-color: whitesmoke;
+ border: none;
+ display: none;
+ height: 2px;
+ margin: 0.5rem 0;
+}
+
+@media screen and (max-width: 1023px) {
+ .navbar > .container {
+ display: block;
+ }
+ .navbar-brand .navbar-item,
+ .navbar-tabs .navbar-item {
+ align-items: center;
+ display: flex;
+ }
+ .navbar-link::after {
+ display: none;
+ }
+ .navbar-menu {
+ background-color: white;
+ box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1);
+ padding: 0.5rem 0;
+ }
+ .navbar-menu.is-active {
+ display: block;
+ }
+ .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch {
+ left: 0;
+ position: fixed;
+ right: 0;
+ z-index: 30;
+ }
+ .navbar.is-fixed-bottom-touch {
+ bottom: 0;
+ }
+ .navbar.is-fixed-bottom-touch.has-shadow {
+ box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1);
+ }
+ .navbar.is-fixed-top-touch {
+ top: 0;
+ }
+ .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu {
+ -webkit-overflow-scrolling: touch;
+ max-height: calc(100vh - 3.25rem);
+ overflow: auto;
+ }
+ html.has-navbar-fixed-top-touch,
+ body.has-navbar-fixed-top-touch {
+ padding-top: 3.25rem;
+ }
+ html.has-navbar-fixed-bottom-touch,
+ body.has-navbar-fixed-bottom-touch {
+ padding-bottom: 3.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar,
+ .navbar-menu,
+ .navbar-start,
+ .navbar-end {
+ align-items: stretch;
+ display: flex;
+ }
+ .navbar {
+ min-height: 3.25rem;
+ }
+ .navbar.is-spaced {
+ padding: 1rem 2rem;
+ }
+ .navbar.is-spaced .navbar-start,
+ .navbar.is-spaced .navbar-end {
+ align-items: center;
+ }
+ .navbar.is-spaced a.navbar-item,
+ .navbar.is-spaced .navbar-link {
+ border-radius: 4px;
+ }
+ .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active,
+ .navbar.is-transparent .navbar-link:focus,
+ .navbar.is-transparent .navbar-link:hover,
+ .navbar.is-transparent .navbar-link.is-active {
+ background-color: transparent !important;
+ }
+ .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link {
+ background-color: transparent !important;
+ }
+ .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover {
+ background-color: whitesmoke;
+ color: #0a0a0a;
+ }
+ .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active {
+ background-color: whitesmoke;
+ color: #3273dc;
+ }
+ .navbar-burger {
+ display: none;
+ }
+ .navbar-item,
+ .navbar-link {
+ align-items: center;
+ display: flex;
+ }
+ .navbar-item.has-dropdown {
+ align-items: stretch;
+ }
+ .navbar-item.has-dropdown-up .navbar-link::after {
+ transform: rotate(135deg) translate(0.25em, -0.25em);
+ }
+ .navbar-item.has-dropdown-up .navbar-dropdown {
+ border-bottom: 2px solid #dbdbdb;
+ border-radius: 6px 6px 0 0;
+ border-top: none;
+ bottom: 100%;
+ box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1);
+ top: auto;
+ }
+ .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown {
+ display: block;
+ }
+ .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed {
+ opacity: 1;
+ pointer-events: auto;
+ transform: translateY(0);
+ }
+ .navbar-menu {
+ flex-grow: 1;
+ flex-shrink: 0;
+ }
+ .navbar-start {
+ justify-content: flex-start;
+ margin-left: auto;
+ }
+ .navbar-end {
+ justify-content: flex-end;
+ margin-right: auto;
+ }
+ .navbar-dropdown {
+ background-color: white;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-top: 2px solid #dbdbdb;
+ box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1);
+ display: none;
+ font-size: 0.875rem;
+ right: 0;
+ min-width: 100%;
+ position: absolute;
+ top: 100%;
+ z-index: 20;
+ }
+ .navbar-dropdown .navbar-item {
+ padding: 0.375rem 1rem;
+ white-space: nowrap;
+ }
+ .navbar-dropdown a.navbar-item {
+ padding-left: 3rem;
+ }
+ .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover {
+ background-color: whitesmoke;
+ color: #0a0a0a;
+ }
+ .navbar-dropdown a.navbar-item.is-active {
+ background-color: whitesmoke;
+ color: #3273dc;
+ }
+ .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed {
+ border-radius: 6px;
+ border-top: none;
+ box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
+ display: block;
+ opacity: 0;
+ pointer-events: none;
+ top: calc(100% + (-4px));
+ transform: translateY(-5px);
+ transition-duration: 86ms;
+ transition-property: opacity, transform;
+ }
+ .navbar-dropdown.is-right {
+ left: auto;
+ right: 0;
+ }
+ .navbar-divider {
+ display: block;
+ }
+ .navbar > .container .navbar-brand,
+ .container > .navbar .navbar-brand {
+ margin-right: -0.75rem;
+ }
+ .navbar > .container .navbar-menu,
+ .container > .navbar .navbar-menu {
+ margin-left: -0.75rem;
+ }
+ .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop {
+ left: 0;
+ position: fixed;
+ right: 0;
+ z-index: 30;
+ }
+ .navbar.is-fixed-bottom-desktop {
+ bottom: 0;
+ }
+ .navbar.is-fixed-bottom-desktop.has-shadow {
+ box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1);
+ }
+ .navbar.is-fixed-top-desktop {
+ top: 0;
+ }
+ html.has-navbar-fixed-top-desktop,
+ body.has-navbar-fixed-top-desktop {
+ padding-top: 3.25rem;
+ }
+ html.has-navbar-fixed-bottom-desktop,
+ body.has-navbar-fixed-bottom-desktop {
+ padding-bottom: 3.25rem;
+ }
+ html.has-spaced-navbar-fixed-top,
+ body.has-spaced-navbar-fixed-top {
+ padding-top: 5.25rem;
+ }
+ html.has-spaced-navbar-fixed-bottom,
+ body.has-spaced-navbar-fixed-bottom {
+ padding-bottom: 5.25rem;
+ }
+ a.navbar-item.is-active,
+ .navbar-link.is-active {
+ color: #0a0a0a;
+ }
+ a.navbar-item.is-active:not(:focus):not(:hover),
+ .navbar-link.is-active:not(:focus):not(:hover) {
+ background-color: transparent;
+ }
+ .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #fafafa;
+ }
+}
+
+.hero.is-fullheight-with-navbar {
+ min-height: calc(100vh - 3.25rem);
+}
+
+.pagination {
+ font-size: 1rem;
+ margin: -0.25rem;
+}
+
+.pagination.is-small {
+ font-size: 0.75rem;
+}
+
+.pagination.is-medium {
+ font-size: 1.25rem;
+}
+
+.pagination.is-large {
+ font-size: 1.5rem;
+}
+
+.pagination.is-rounded .pagination-previous,
+.pagination.is-rounded .pagination-next {
+ padding-left: 1em;
+ padding-right: 1em;
+ border-radius: 290486px;
+}
+
+.pagination.is-rounded .pagination-link {
+ border-radius: 290486px;
+}
+
+.pagination,
+.pagination-list {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ text-align: center;
+}
+
+.pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis {
+ font-size: 1em;
+ justify-content: center;
+ margin: 0.25rem;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ text-align: center;
+}
+
+.pagination-previous,
+.pagination-next,
+.pagination-link {
+ border-color: #dbdbdb;
+ color: #363636;
+ min-width: 2.5em;
+}
+
+.pagination-previous:hover,
+.pagination-next:hover,
+.pagination-link:hover {
+ border-color: #b5b5b5;
+ color: #363636;
+}
+
+.pagination-previous:focus,
+.pagination-next:focus,
+.pagination-link:focus {
+ border-color: #3273dc;
+}
+
+.pagination-previous:active,
+.pagination-next:active,
+.pagination-link:active {
+ box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2);
+}
+
+.pagination-previous[disabled],
+.pagination-next[disabled],
+.pagination-link[disabled] {
+ background-color: #dbdbdb;
+ border-color: #dbdbdb;
+ box-shadow: none;
+ color: #7a7a7a;
+ opacity: 0.5;
+}
+
+.pagination-previous,
+.pagination-next {
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+ white-space: nowrap;
+}
+
+.pagination-link.is-current {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+}
+
+.pagination-ellipsis {
+ color: #b5b5b5;
+ pointer-events: none;
+}
+
+.pagination-list {
+ flex-wrap: wrap;
+}
+
+@media screen and (max-width: 768px) {
+ .pagination {
+ flex-wrap: wrap;
+ }
+ .pagination-previous,
+ .pagination-next {
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ .pagination-list li {
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .pagination-list {
+ flex-grow: 1;
+ flex-shrink: 1;
+ justify-content: flex-start;
+ order: 1;
+ }
+ .pagination-previous {
+ order: 2;
+ }
+ .pagination-next {
+ order: 3;
+ }
+ .pagination {
+ justify-content: space-between;
+ }
+ .pagination.is-centered .pagination-previous {
+ order: 1;
+ }
+ .pagination.is-centered .pagination-list {
+ justify-content: center;
+ order: 2;
+ }
+ .pagination.is-centered .pagination-next {
+ order: 3;
+ }
+ .pagination.is-right .pagination-previous {
+ order: 1;
+ }
+ .pagination.is-right .pagination-next {
+ order: 2;
+ }
+ .pagination.is-right .pagination-list {
+ justify-content: flex-end;
+ order: 3;
+ }
+}
+
+.panel {
+ border-radius: 6px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ font-size: 1rem;
+}
+
+.panel:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.panel.is-white .panel-heading {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.panel.is-white .panel-tabs a.is-active {
+ border-bottom-color: white;
+}
+
+.panel.is-white .panel-block.is-active .panel-icon {
+ color: white;
+}
+
+.panel.is-black .panel-heading {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.panel.is-black .panel-tabs a.is-active {
+ border-bottom-color: #0a0a0a;
+}
+
+.panel.is-black .panel-block.is-active .panel-icon {
+ color: #0a0a0a;
+}
+
+.panel.is-light .panel-heading {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.panel.is-light .panel-tabs a.is-active {
+ border-bottom-color: whitesmoke;
+}
+
+.panel.is-light .panel-block.is-active .panel-icon {
+ color: whitesmoke;
+}
+
+.panel.is-dark .panel-heading {
+ background-color: #363636;
+ color: #fff;
+}
+
+.panel.is-dark .panel-tabs a.is-active {
+ border-bottom-color: #363636;
+}
+
+.panel.is-dark .panel-block.is-active .panel-icon {
+ color: #363636;
+}
+
+.panel.is-primary .panel-heading {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.panel.is-primary .panel-tabs a.is-active {
+ border-bottom-color: #00d1b2;
+}
+
+.panel.is-primary .panel-block.is-active .panel-icon {
+ color: #00d1b2;
+}
+
+.panel.is-link .panel-heading {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.panel.is-link .panel-tabs a.is-active {
+ border-bottom-color: #3273dc;
+}
+
+.panel.is-link .panel-block.is-active .panel-icon {
+ color: #3273dc;
+}
+
+.panel.is-info .panel-heading {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.panel.is-info .panel-tabs a.is-active {
+ border-bottom-color: #3298dc;
+}
+
+.panel.is-info .panel-block.is-active .panel-icon {
+ color: #3298dc;
+}
+
+.panel.is-success .panel-heading {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.panel.is-success .panel-tabs a.is-active {
+ border-bottom-color: #48c774;
+}
+
+.panel.is-success .panel-block.is-active .panel-icon {
+ color: #48c774;
+}
+
+.panel.is-warning .panel-heading {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.panel.is-warning .panel-tabs a.is-active {
+ border-bottom-color: #ffdd57;
+}
+
+.panel.is-warning .panel-block.is-active .panel-icon {
+ color: #ffdd57;
+}
+
+.panel.is-danger .panel-heading {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.panel.is-danger .panel-tabs a.is-active {
+ border-bottom-color: #f14668;
+}
+
+.panel.is-danger .panel-block.is-active .panel-icon {
+ color: #f14668;
+}
+
+.panel-tabs:not(:last-child),
+.panel-block:not(:last-child) {
+ border-bottom: 1px solid #ededed;
+}
+
+.panel-heading {
+ background-color: #ededed;
+ border-radius: 6px 6px 0 0;
+ color: #363636;
+ font-size: 1.25em;
+ font-weight: 700;
+ line-height: 1.25;
+ padding: 0.75em 1em;
+}
+
+.panel-tabs {
+ align-items: flex-end;
+ display: flex;
+ font-size: 0.875em;
+ justify-content: center;
+}
+
+.panel-tabs a {
+ border-bottom: 1px solid #dbdbdb;
+ margin-bottom: -1px;
+ padding: 0.5em;
+}
+
+.panel-tabs a.is-active {
+ border-bottom-color: #4a4a4a;
+ color: #363636;
+}
+
+.panel-list a {
+ color: #4a4a4a;
+}
+
+.panel-list a:hover {
+ color: #3273dc;
+}
+
+.panel-block {
+ align-items: center;
+ color: #363636;
+ display: flex;
+ justify-content: flex-start;
+ padding: 0.5em 0.75em;
+}
+
+.panel-block input[type="checkbox"] {
+ margin-left: 0.75em;
+}
+
+.panel-block > .control {
+ flex-grow: 1;
+ flex-shrink: 1;
+ width: 100%;
+}
+
+.panel-block.is-wrapped {
+ flex-wrap: wrap;
+}
+
+.panel-block.is-active {
+ border-left-color: #3273dc;
+ color: #363636;
+}
+
+.panel-block.is-active .panel-icon {
+ color: #3273dc;
+}
+
+.panel-block:last-child {
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+a.panel-block,
+label.panel-block {
+ cursor: pointer;
+}
+
+a.panel-block:hover,
+label.panel-block:hover {
+ background-color: whitesmoke;
+}
+
+.panel-icon {
+ display: inline-block;
+ font-size: 14px;
+ height: 1em;
+ line-height: 1em;
+ text-align: center;
+ vertical-align: top;
+ width: 1em;
+ color: #7a7a7a;
+ margin-left: 0.75em;
+}
+
+.panel-icon .fa {
+ font-size: inherit;
+ line-height: inherit;
+}
+
+.tabs {
+ -webkit-overflow-scrolling: touch;
+ align-items: stretch;
+ display: flex;
+ font-size: 1rem;
+ justify-content: space-between;
+ overflow: hidden;
+ overflow-x: auto;
+ white-space: nowrap;
+}
+
+.tabs a {
+ align-items: center;
+ border-bottom-color: #dbdbdb;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ color: #4a4a4a;
+ display: flex;
+ justify-content: center;
+ margin-bottom: -1px;
+ padding: 0.5em 1em;
+ vertical-align: top;
+}
+
+.tabs a:hover {
+ border-bottom-color: #363636;
+ color: #363636;
+}
+
+.tabs li {
+ display: block;
+}
+
+.tabs li.is-active a {
+ border-bottom-color: #3273dc;
+ color: #3273dc;
+}
+
+.tabs ul {
+ align-items: center;
+ border-bottom-color: #dbdbdb;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ display: flex;
+ flex-grow: 1;
+ flex-shrink: 0;
+ justify-content: flex-start;
+}
+
+.tabs ul.is-left {
+ padding-right: 0.75em;
+}
+
+.tabs ul.is-center {
+ flex: none;
+ justify-content: center;
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+}
+
+.tabs ul.is-right {
+ justify-content: flex-end;
+ padding-left: 0.75em;
+}
+
+.tabs .icon:first-child {
+ margin-left: 0.5em;
+}
+
+.tabs .icon:last-child {
+ margin-right: 0.5em;
+}
+
+.tabs.is-centered ul {
+ justify-content: center;
+}
+
+.tabs.is-right ul {
+ justify-content: flex-end;
+}
+
+.tabs.is-boxed a {
+ border: 1px solid transparent;
+ border-radius: 0 0 4px 4px;
+}
+
+.tabs.is-boxed a:hover {
+ background-color: whitesmoke;
+ border-bottom-color: #dbdbdb;
+}
+
+.tabs.is-boxed li.is-active a {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-bottom-color: transparent !important;
+}
+
+.tabs.is-fullwidth li {
+ flex-grow: 1;
+ flex-shrink: 0;
+}
+
+.tabs.is-toggle a {
+ border-color: #dbdbdb;
+ border-style: solid;
+ border-width: 1px;
+ margin-bottom: 0;
+ position: relative;
+}
+
+.tabs.is-toggle a:hover {
+ background-color: whitesmoke;
+ border-color: #b5b5b5;
+ z-index: 2;
+}
+
+.tabs.is-toggle li + li {
+ margin-right: -1px;
+}
+
+.tabs.is-toggle li:first-child a {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.tabs.is-toggle li:last-child a {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.tabs.is-toggle li.is-active a {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+ z-index: 1;
+}
+
+.tabs.is-toggle ul {
+ border-bottom: none;
+}
+
+.tabs.is-toggle.is-toggle-rounded li:first-child a {
+ border-bottom-right-radius: 290486px;
+ border-top-right-radius: 290486px;
+ padding-right: 1.25em;
+}
+
+.tabs.is-toggle.is-toggle-rounded li:last-child a {
+ border-bottom-left-radius: 290486px;
+ border-top-left-radius: 290486px;
+ padding-left: 1.25em;
+}
+
+.tabs.is-small {
+ font-size: 0.75rem;
+}
+
+.tabs.is-medium {
+ font-size: 1.25rem;
+}
+
+.tabs.is-large {
+ font-size: 1.5rem;
+}
+
+/* Bulma Grid */
+.column {
+ display: block;
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 1;
+ padding: 0.75rem;
+}
+
+.columns.is-mobile > .column.is-narrow {
+ flex: none;
+}
+
+.columns.is-mobile > .column.is-full {
+ flex: none;
+ width: 100%;
+}
+
+.columns.is-mobile > .column.is-three-quarters {
+ flex: none;
+ width: 75%;
+}
+
+.columns.is-mobile > .column.is-two-thirds {
+ flex: none;
+ width: 66.6666%;
+}
+
+.columns.is-mobile > .column.is-half {
+ flex: none;
+ width: 50%;
+}
+
+.columns.is-mobile > .column.is-one-third {
+ flex: none;
+ width: 33.3333%;
+}
+
+.columns.is-mobile > .column.is-one-quarter {
+ flex: none;
+ width: 25%;
+}
+
+.columns.is-mobile > .column.is-one-fifth {
+ flex: none;
+ width: 20%;
+}
+
+.columns.is-mobile > .column.is-two-fifths {
+ flex: none;
+ width: 40%;
+}
+
+.columns.is-mobile > .column.is-three-fifths {
+ flex: none;
+ width: 60%;
+}
+
+.columns.is-mobile > .column.is-four-fifths {
+ flex: none;
+ width: 80%;
+}
+
+.columns.is-mobile > .column.is-offset-three-quarters {
+ margin-left: 75%;
+}
+
+.columns.is-mobile > .column.is-offset-two-thirds {
+ margin-left: 66.6666%;
+}
+
+.columns.is-mobile > .column.is-offset-half {
+ margin-left: 50%;
+}
+
+.columns.is-mobile > .column.is-offset-one-third {
+ margin-left: 33.3333%;
+}
+
+.columns.is-mobile > .column.is-offset-one-quarter {
+ margin-left: 25%;
+}
+
+.columns.is-mobile > .column.is-offset-one-fifth {
+ margin-left: 20%;
+}
+
+.columns.is-mobile > .column.is-offset-two-fifths {
+ margin-left: 40%;
+}
+
+.columns.is-mobile > .column.is-offset-three-fifths {
+ margin-left: 60%;
+}
+
+.columns.is-mobile > .column.is-offset-four-fifths {
+ margin-left: 80%;
+}
+
+.columns.is-mobile > .column.is-0 {
+ flex: none;
+ width: 0%;
+}
+
+.columns.is-mobile > .column.is-offset-0 {
+ margin-left: 0%;
+}
+
+.columns.is-mobile > .column.is-1 {
+ flex: none;
+ width: 8.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-1 {
+ margin-left: 8.33333%;
+}
+
+.columns.is-mobile > .column.is-2 {
+ flex: none;
+ width: 16.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-2 {
+ margin-left: 16.66667%;
+}
+
+.columns.is-mobile > .column.is-3 {
+ flex: none;
+ width: 25%;
+}
+
+.columns.is-mobile > .column.is-offset-3 {
+ margin-left: 25%;
+}
+
+.columns.is-mobile > .column.is-4 {
+ flex: none;
+ width: 33.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-4 {
+ margin-left: 33.33333%;
+}
+
+.columns.is-mobile > .column.is-5 {
+ flex: none;
+ width: 41.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-5 {
+ margin-left: 41.66667%;
+}
+
+.columns.is-mobile > .column.is-6 {
+ flex: none;
+ width: 50%;
+}
+
+.columns.is-mobile > .column.is-offset-6 {
+ margin-left: 50%;
+}
+
+.columns.is-mobile > .column.is-7 {
+ flex: none;
+ width: 58.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-7 {
+ margin-left: 58.33333%;
+}
+
+.columns.is-mobile > .column.is-8 {
+ flex: none;
+ width: 66.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-8 {
+ margin-left: 66.66667%;
+}
+
+.columns.is-mobile > .column.is-9 {
+ flex: none;
+ width: 75%;
+}
+
+.columns.is-mobile > .column.is-offset-9 {
+ margin-left: 75%;
+}
+
+.columns.is-mobile > .column.is-10 {
+ flex: none;
+ width: 83.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-10 {
+ margin-left: 83.33333%;
+}
+
+.columns.is-mobile > .column.is-11 {
+ flex: none;
+ width: 91.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-11 {
+ margin-left: 91.66667%;
+}
+
+.columns.is-mobile > .column.is-12 {
+ flex: none;
+ width: 100%;
+}
+
+.columns.is-mobile > .column.is-offset-12 {
+ margin-left: 100%;
+}
+
+@media screen and (max-width: 768px) {
+ .column.is-narrow-mobile {
+ flex: none;
+ }
+ .column.is-full-mobile {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-mobile {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-mobile {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-mobile {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-mobile {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-mobile {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-mobile {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-mobile {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-mobile {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-mobile {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-mobile {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-mobile {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-mobile {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-mobile {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-mobile {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-mobile {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-mobile {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-mobile {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-mobile {
+ margin-left: 80%;
+ }
+ .column.is-0-mobile {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-mobile {
+ margin-left: 0%;
+ }
+ .column.is-1-mobile {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-mobile {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-mobile {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-mobile {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-mobile {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-mobile {
+ margin-left: 25%;
+ }
+ .column.is-4-mobile {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-mobile {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-mobile {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-mobile {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-mobile {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-mobile {
+ margin-left: 50%;
+ }
+ .column.is-7-mobile {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-mobile {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-mobile {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-mobile {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-mobile {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-mobile {
+ margin-left: 75%;
+ }
+ .column.is-10-mobile {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-mobile {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-mobile {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-mobile {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-mobile {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-mobile {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .column.is-narrow, .column.is-narrow-tablet {
+ flex: none;
+ }
+ .column.is-full, .column.is-full-tablet {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters, .column.is-three-quarters-tablet {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds, .column.is-two-thirds-tablet {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half, .column.is-half-tablet {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third, .column.is-one-third-tablet {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter, .column.is-one-quarter-tablet {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth, .column.is-one-fifth-tablet {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths, .column.is-two-fifths-tablet {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths, .column.is-three-fifths-tablet {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths, .column.is-four-fifths-tablet {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half, .column.is-offset-half-tablet {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third, .column.is-offset-one-third-tablet {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet {
+ margin-left: 80%;
+ }
+ .column.is-0, .column.is-0-tablet {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0, .column.is-offset-0-tablet {
+ margin-left: 0%;
+ }
+ .column.is-1, .column.is-1-tablet {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1, .column.is-offset-1-tablet {
+ margin-left: 8.33333%;
+ }
+ .column.is-2, .column.is-2-tablet {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2, .column.is-offset-2-tablet {
+ margin-left: 16.66667%;
+ }
+ .column.is-3, .column.is-3-tablet {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3, .column.is-offset-3-tablet {
+ margin-left: 25%;
+ }
+ .column.is-4, .column.is-4-tablet {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4, .column.is-offset-4-tablet {
+ margin-left: 33.33333%;
+ }
+ .column.is-5, .column.is-5-tablet {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5, .column.is-offset-5-tablet {
+ margin-left: 41.66667%;
+ }
+ .column.is-6, .column.is-6-tablet {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6, .column.is-offset-6-tablet {
+ margin-left: 50%;
+ }
+ .column.is-7, .column.is-7-tablet {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7, .column.is-offset-7-tablet {
+ margin-left: 58.33333%;
+ }
+ .column.is-8, .column.is-8-tablet {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8, .column.is-offset-8-tablet {
+ margin-left: 66.66667%;
+ }
+ .column.is-9, .column.is-9-tablet {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9, .column.is-offset-9-tablet {
+ margin-left: 75%;
+ }
+ .column.is-10, .column.is-10-tablet {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10, .column.is-offset-10-tablet {
+ margin-left: 83.33333%;
+ }
+ .column.is-11, .column.is-11-tablet {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11, .column.is-offset-11-tablet {
+ margin-left: 91.66667%;
+ }
+ .column.is-12, .column.is-12-tablet {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12, .column.is-offset-12-tablet {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .column.is-narrow-touch {
+ flex: none;
+ }
+ .column.is-full-touch {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-touch {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-touch {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-touch {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-touch {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-touch {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-touch {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-touch {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-touch {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-touch {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-touch {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-touch {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-touch {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-touch {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-touch {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-touch {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-touch {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-touch {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-touch {
+ margin-left: 80%;
+ }
+ .column.is-0-touch {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-touch {
+ margin-left: 0%;
+ }
+ .column.is-1-touch {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-touch {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-touch {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-touch {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-touch {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-touch {
+ margin-left: 25%;
+ }
+ .column.is-4-touch {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-touch {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-touch {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-touch {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-touch {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-touch {
+ margin-left: 50%;
+ }
+ .column.is-7-touch {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-touch {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-touch {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-touch {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-touch {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-touch {
+ margin-left: 75%;
+ }
+ .column.is-10-touch {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-touch {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-touch {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-touch {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-touch {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-touch {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .column.is-narrow-desktop {
+ flex: none;
+ }
+ .column.is-full-desktop {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-desktop {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-desktop {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-desktop {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-desktop {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-desktop {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-desktop {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-desktop {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-desktop {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-desktop {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-desktop {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-desktop {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-desktop {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-desktop {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-desktop {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-desktop {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-desktop {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-desktop {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-desktop {
+ margin-left: 80%;
+ }
+ .column.is-0-desktop {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-desktop {
+ margin-left: 0%;
+ }
+ .column.is-1-desktop {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-desktop {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-desktop {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-desktop {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-desktop {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-desktop {
+ margin-left: 25%;
+ }
+ .column.is-4-desktop {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-desktop {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-desktop {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-desktop {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-desktop {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-desktop {
+ margin-left: 50%;
+ }
+ .column.is-7-desktop {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-desktop {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-desktop {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-desktop {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-desktop {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-desktop {
+ margin-left: 75%;
+ }
+ .column.is-10-desktop {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-desktop {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-desktop {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-desktop {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-desktop {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-desktop {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .column.is-narrow-widescreen {
+ flex: none;
+ }
+ .column.is-full-widescreen {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-widescreen {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-widescreen {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-widescreen {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-widescreen {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-widescreen {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-widescreen {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-widescreen {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-widescreen {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-widescreen {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-widescreen {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-widescreen {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-widescreen {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-widescreen {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-widescreen {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-widescreen {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-widescreen {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-widescreen {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-widescreen {
+ margin-left: 80%;
+ }
+ .column.is-0-widescreen {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-widescreen {
+ margin-left: 0%;
+ }
+ .column.is-1-widescreen {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-widescreen {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-widescreen {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-widescreen {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-widescreen {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-widescreen {
+ margin-left: 25%;
+ }
+ .column.is-4-widescreen {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-widescreen {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-widescreen {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-widescreen {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-widescreen {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-widescreen {
+ margin-left: 50%;
+ }
+ .column.is-7-widescreen {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-widescreen {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-widescreen {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-widescreen {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-widescreen {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-widescreen {
+ margin-left: 75%;
+ }
+ .column.is-10-widescreen {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-widescreen {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-widescreen {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-widescreen {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-widescreen {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-widescreen {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .column.is-narrow-fullhd {
+ flex: none;
+ }
+ .column.is-full-fullhd {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-fullhd {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-fullhd {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-fullhd {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-fullhd {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-fullhd {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-fullhd {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-fullhd {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-fullhd {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-fullhd {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-fullhd {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-fullhd {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-fullhd {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-fullhd {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-fullhd {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-fullhd {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-fullhd {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-fullhd {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-fullhd {
+ margin-left: 80%;
+ }
+ .column.is-0-fullhd {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-fullhd {
+ margin-left: 0%;
+ }
+ .column.is-1-fullhd {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-fullhd {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-fullhd {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-fullhd {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-fullhd {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-fullhd {
+ margin-left: 25%;
+ }
+ .column.is-4-fullhd {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-fullhd {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-fullhd {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-fullhd {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-fullhd {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-fullhd {
+ margin-left: 50%;
+ }
+ .column.is-7-fullhd {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-fullhd {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-fullhd {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-fullhd {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-fullhd {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-fullhd {
+ margin-left: 75%;
+ }
+ .column.is-10-fullhd {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-fullhd {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-fullhd {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-fullhd {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-fullhd {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-fullhd {
+ margin-left: 100%;
+ }
+}
+
+.columns {
+ margin-left: -0.75rem;
+ margin-right: -0.75rem;
+ margin-top: -0.75rem;
+}
+
+.columns:last-child {
+ margin-bottom: -0.75rem;
+}
+
+.columns:not(:last-child) {
+ margin-bottom: calc(1.5rem - 0.75rem);
+}
+
+.columns.is-centered {
+ justify-content: center;
+}
+
+.columns.is-gapless {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+}
+
+.columns.is-gapless > .column {
+ margin: 0;
+ padding: 0 !important;
+}
+
+.columns.is-gapless:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.columns.is-gapless:last-child {
+ margin-bottom: 0;
+}
+
+.columns.is-mobile {
+ display: flex;
+}
+
+.columns.is-multiline {
+ flex-wrap: wrap;
+}
+
+.columns.is-vcentered {
+ align-items: center;
+}
+
+@media screen and (min-width: 769px), print {
+ .columns:not(.is-desktop) {
+ display: flex;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-desktop {
+ display: flex;
+ }
+}
+
+.columns.is-variable {
+ --columnGap: 0.75rem;
+ margin-left: calc(-1 * var(--columnGap));
+ margin-right: calc(-1 * var(--columnGap));
+}
+
+.columns.is-variable .column {
+ padding-left: var(--columnGap);
+ padding-right: var(--columnGap);
+}
+
+.columns.is-variable.is-0 {
+ --columnGap: 0rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-0-mobile {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-0-tablet {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-0-tablet-only {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-0-touch {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-0-desktop {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-0-desktop-only {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-0-widescreen {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-0-widescreen-only {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-0-fullhd {
+ --columnGap: 0rem;
+ }
+}
+
+.columns.is-variable.is-1 {
+ --columnGap: 0.25rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-1-mobile {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-1-tablet {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-1-tablet-only {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-1-touch {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-1-desktop {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-1-desktop-only {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-1-widescreen {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-1-widescreen-only {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-1-fullhd {
+ --columnGap: 0.25rem;
+ }
+}
+
+.columns.is-variable.is-2 {
+ --columnGap: 0.5rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-2-mobile {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-2-tablet {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-2-tablet-only {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-2-touch {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-2-desktop {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-2-desktop-only {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-2-widescreen {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-2-widescreen-only {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-2-fullhd {
+ --columnGap: 0.5rem;
+ }
+}
+
+.columns.is-variable.is-3 {
+ --columnGap: 0.75rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-3-mobile {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-3-tablet {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-3-tablet-only {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-3-touch {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-3-desktop {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-3-desktop-only {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-3-widescreen {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-3-widescreen-only {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-3-fullhd {
+ --columnGap: 0.75rem;
+ }
+}
+
+.columns.is-variable.is-4 {
+ --columnGap: 1rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-4-mobile {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-4-tablet {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-4-tablet-only {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-4-touch {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-4-desktop {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-4-desktop-only {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-4-widescreen {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-4-widescreen-only {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-4-fullhd {
+ --columnGap: 1rem;
+ }
+}
+
+.columns.is-variable.is-5 {
+ --columnGap: 1.25rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-5-mobile {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-5-tablet {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-5-tablet-only {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-5-touch {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-5-desktop {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-5-desktop-only {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-5-widescreen {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-5-widescreen-only {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-5-fullhd {
+ --columnGap: 1.25rem;
+ }
+}
+
+.columns.is-variable.is-6 {
+ --columnGap: 1.5rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-6-mobile {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-6-tablet {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-6-tablet-only {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-6-touch {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-6-desktop {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-6-desktop-only {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-6-widescreen {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-6-widescreen-only {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-6-fullhd {
+ --columnGap: 1.5rem;
+ }
+}
+
+.columns.is-variable.is-7 {
+ --columnGap: 1.75rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-7-mobile {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-7-tablet {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-7-tablet-only {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-7-touch {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-7-desktop {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-7-desktop-only {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-7-widescreen {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-7-widescreen-only {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-7-fullhd {
+ --columnGap: 1.75rem;
+ }
+}
+
+.columns.is-variable.is-8 {
+ --columnGap: 2rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-8-mobile {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-8-tablet {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-8-tablet-only {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-8-touch {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-8-desktop {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-8-desktop-only {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-8-widescreen {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-8-widescreen-only {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-8-fullhd {
+ --columnGap: 2rem;
+ }
+}
+
+.tile {
+ align-items: stretch;
+ display: block;
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 1;
+ min-height: -webkit-min-content;
+ min-height: -moz-min-content;
+ min-height: min-content;
+}
+
+.tile.is-ancestor {
+ margin-left: -0.75rem;
+ margin-right: -0.75rem;
+ margin-top: -0.75rem;
+}
+
+.tile.is-ancestor:last-child {
+ margin-bottom: -0.75rem;
+}
+
+.tile.is-ancestor:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.tile.is-child {
+ margin: 0 !important;
+}
+
+.tile.is-parent {
+ padding: 0.75rem;
+}
+
+.tile.is-vertical {
+ flex-direction: column;
+}
+
+.tile.is-vertical > .tile.is-child:not(:last-child) {
+ margin-bottom: 1.5rem !important;
+}
+
+@media screen and (min-width: 769px), print {
+ .tile:not(.is-child) {
+ display: flex;
+ }
+ .tile.is-1 {
+ flex: none;
+ width: 8.33333%;
+ }
+ .tile.is-2 {
+ flex: none;
+ width: 16.66667%;
+ }
+ .tile.is-3 {
+ flex: none;
+ width: 25%;
+ }
+ .tile.is-4 {
+ flex: none;
+ width: 33.33333%;
+ }
+ .tile.is-5 {
+ flex: none;
+ width: 41.66667%;
+ }
+ .tile.is-6 {
+ flex: none;
+ width: 50%;
+ }
+ .tile.is-7 {
+ flex: none;
+ width: 58.33333%;
+ }
+ .tile.is-8 {
+ flex: none;
+ width: 66.66667%;
+ }
+ .tile.is-9 {
+ flex: none;
+ width: 75%;
+ }
+ .tile.is-10 {
+ flex: none;
+ width: 83.33333%;
+ }
+ .tile.is-11 {
+ flex: none;
+ width: 91.66667%;
+ }
+ .tile.is-12 {
+ flex: none;
+ width: 100%;
+ }
+}
+
+/* Bulma Helpers */
+.has-text-white {
+ color: white !important;
+}
+
+a.has-text-white:hover, a.has-text-white:focus {
+ color: #e6e6e6 !important;
+}
+
+.has-background-white {
+ background-color: white !important;
+}
+
+.has-text-black {
+ color: #0a0a0a !important;
+}
+
+a.has-text-black:hover, a.has-text-black:focus {
+ color: black !important;
+}
+
+.has-background-black {
+ background-color: #0a0a0a !important;
+}
+
+.has-text-light {
+ color: whitesmoke !important;
+}
+
+a.has-text-light:hover, a.has-text-light:focus {
+ color: #dbdbdb !important;
+}
+
+.has-background-light {
+ background-color: whitesmoke !important;
+}
+
+.has-text-dark {
+ color: #363636 !important;
+}
+
+a.has-text-dark:hover, a.has-text-dark:focus {
+ color: #1c1c1c !important;
+}
+
+.has-background-dark {
+ background-color: #363636 !important;
+}
+
+.has-text-primary {
+ color: #00d1b2 !important;
+}
+
+a.has-text-primary:hover, a.has-text-primary:focus {
+ color: #009e86 !important;
+}
+
+.has-background-primary {
+ background-color: #00d1b2 !important;
+}
+
+.has-text-primary-light {
+ color: #ebfffc !important;
+}
+
+a.has-text-primary-light:hover, a.has-text-primary-light:focus {
+ color: #b8fff4 !important;
+}
+
+.has-background-primary-light {
+ background-color: #ebfffc !important;
+}
+
+.has-text-primary-dark {
+ color: #00947e !important;
+}
+
+a.has-text-primary-dark:hover, a.has-text-primary-dark:focus {
+ color: #00c7a9 !important;
+}
+
+.has-background-primary-dark {
+ background-color: #00947e !important;
+}
+
+.has-text-link {
+ color: #3273dc !important;
+}
+
+a.has-text-link:hover, a.has-text-link:focus {
+ color: #205bbc !important;
+}
+
+.has-background-link {
+ background-color: #3273dc !important;
+}
+
+.has-text-link-light {
+ color: #eef3fc !important;
+}
+
+a.has-text-link-light:hover, a.has-text-link-light:focus {
+ color: #c2d5f5 !important;
+}
+
+.has-background-link-light {
+ background-color: #eef3fc !important;
+}
+
+.has-text-link-dark {
+ color: #2160c4 !important;
+}
+
+a.has-text-link-dark:hover, a.has-text-link-dark:focus {
+ color: #3b79de !important;
+}
+
+.has-background-link-dark {
+ background-color: #2160c4 !important;
+}
+
+.has-text-info {
+ color: #3298dc !important;
+}
+
+a.has-text-info:hover, a.has-text-info:focus {
+ color: #207dbc !important;
+}
+
+.has-background-info {
+ background-color: #3298dc !important;
+}
+
+.has-text-info-light {
+ color: #eef6fc !important;
+}
+
+a.has-text-info-light:hover, a.has-text-info-light:focus {
+ color: #c2e0f5 !important;
+}
+
+.has-background-info-light {
+ background-color: #eef6fc !important;
+}
+
+.has-text-info-dark {
+ color: #1d72aa !important;
+}
+
+a.has-text-info-dark:hover, a.has-text-info-dark:focus {
+ color: #248fd6 !important;
+}
+
+.has-background-info-dark {
+ background-color: #1d72aa !important;
+}
+
+.has-text-success {
+ color: #48c774 !important;
+}
+
+a.has-text-success:hover, a.has-text-success:focus {
+ color: #34a85c !important;
+}
+
+.has-background-success {
+ background-color: #48c774 !important;
+}
+
+.has-text-success-light {
+ color: #effaf3 !important;
+}
+
+a.has-text-success-light:hover, a.has-text-success-light:focus {
+ color: #c8eed6 !important;
+}
+
+.has-background-success-light {
+ background-color: #effaf3 !important;
+}
+
+.has-text-success-dark {
+ color: #257942 !important;
+}
+
+a.has-text-success-dark:hover, a.has-text-success-dark:focus {
+ color: #31a058 !important;
+}
+
+.has-background-success-dark {
+ background-color: #257942 !important;
+}
+
+.has-text-warning {
+ color: #ffdd57 !important;
+}
+
+a.has-text-warning:hover, a.has-text-warning:focus {
+ color: #ffd324 !important;
+}
+
+.has-background-warning {
+ background-color: #ffdd57 !important;
+}
+
+.has-text-warning-light {
+ color: #fffbeb !important;
+}
+
+a.has-text-warning-light:hover, a.has-text-warning-light:focus {
+ color: #fff1b8 !important;
+}
+
+.has-background-warning-light {
+ background-color: #fffbeb !important;
+}
+
+.has-text-warning-dark {
+ color: #947600 !important;
+}
+
+a.has-text-warning-dark:hover, a.has-text-warning-dark:focus {
+ color: #c79f00 !important;
+}
+
+.has-background-warning-dark {
+ background-color: #947600 !important;
+}
+
+.has-text-danger {
+ color: #f14668 !important;
+}
+
+a.has-text-danger:hover, a.has-text-danger:focus {
+ color: #ee1742 !important;
+}
+
+.has-background-danger {
+ background-color: #f14668 !important;
+}
+
+.has-text-danger-light {
+ color: #feecf0 !important;
+}
+
+a.has-text-danger-light:hover, a.has-text-danger-light:focus {
+ color: #fabdc9 !important;
+}
+
+.has-background-danger-light {
+ background-color: #feecf0 !important;
+}
+
+.has-text-danger-dark {
+ color: #cc0f35 !important;
+}
+
+a.has-text-danger-dark:hover, a.has-text-danger-dark:focus {
+ color: #ee2049 !important;
+}
+
+.has-background-danger-dark {
+ background-color: #cc0f35 !important;
+}
+
+.has-text-black-bis {
+ color: #121212 !important;
+}
+
+.has-background-black-bis {
+ background-color: #121212 !important;
+}
+
+.has-text-black-ter {
+ color: #242424 !important;
+}
+
+.has-background-black-ter {
+ background-color: #242424 !important;
+}
+
+.has-text-grey-darker {
+ color: #363636 !important;
+}
+
+.has-background-grey-darker {
+ background-color: #363636 !important;
+}
+
+.has-text-grey-dark {
+ color: #4a4a4a !important;
+}
+
+.has-background-grey-dark {
+ background-color: #4a4a4a !important;
+}
+
+.has-text-grey {
+ color: #7a7a7a !important;
+}
+
+.has-background-grey {
+ background-color: #7a7a7a !important;
+}
+
+.has-text-grey-light {
+ color: #b5b5b5 !important;
+}
+
+.has-background-grey-light {
+ background-color: #b5b5b5 !important;
+}
+
+.has-text-grey-lighter {
+ color: #dbdbdb !important;
+}
+
+.has-background-grey-lighter {
+ background-color: #dbdbdb !important;
+}
+
+.has-text-white-ter {
+ color: whitesmoke !important;
+}
+
+.has-background-white-ter {
+ background-color: whitesmoke !important;
+}
+
+.has-text-white-bis {
+ color: #fafafa !important;
+}
+
+.has-background-white-bis {
+ background-color: #fafafa !important;
+}
+
+.is-flex-direction-row {
+ flex-direction: row !important;
+}
+
+.is-flex-direction-row-reverse {
+ flex-direction: row-reverse !important;
+}
+
+.is-flex-direction-column {
+ flex-direction: column !important;
+}
+
+.is-flex-direction-column-reverse {
+ flex-direction: column-reverse !important;
+}
+
+.is-flex-wrap-nowrap {
+ flex-wrap: nowrap !important;
+}
+
+.is-flex-wrap-wrap {
+ flex-wrap: wrap !important;
+}
+
+.is-flex-wrap-wrap-reverse {
+ flex-wrap: wrap-reverse !important;
+}
+
+.is-justify-content-flex-start {
+ justify-content: flex-start !important;
+}
+
+.is-justify-content-flex-end {
+ justify-content: flex-end !important;
+}
+
+.is-justify-content-center {
+ justify-content: center !important;
+}
+
+.is-justify-content-space-between {
+ justify-content: space-between !important;
+}
+
+.is-justify-content-space-around {
+ justify-content: space-around !important;
+}
+
+.is-justify-content-space-evenly {
+ justify-content: space-evenly !important;
+}
+
+.is-justify-content-start {
+ justify-content: start !important;
+}
+
+.is-justify-content-end {
+ justify-content: end !important;
+}
+
+.is-justify-content-left {
+ justify-content: left !important;
+}
+
+.is-justify-content-right {
+ justify-content: right !important;
+}
+
+.is-align-content-flex-start {
+ align-content: flex-start !important;
+}
+
+.is-align-content-flex-end {
+ align-content: flex-end !important;
+}
+
+.is-align-content-center {
+ align-content: center !important;
+}
+
+.is-align-content-space-between {
+ align-content: space-between !important;
+}
+
+.is-align-content-space-around {
+ align-content: space-around !important;
+}
+
+.is-align-content-space-evenly {
+ align-content: space-evenly !important;
+}
+
+.is-align-content-stretch {
+ align-content: stretch !important;
+}
+
+.is-align-content-start {
+ align-content: start !important;
+}
+
+.is-align-content-end {
+ align-content: end !important;
+}
+
+.is-align-content-baseline {
+ align-content: baseline !important;
+}
+
+.is-align-items-stretch {
+ align-items: stretch !important;
+}
+
+.is-align-items-flex-start {
+ align-items: flex-start !important;
+}
+
+.is-align-items-flex-end {
+ align-items: flex-end !important;
+}
+
+.is-align-items-center {
+ align-items: center !important;
+}
+
+.is-align-items-baseline {
+ align-items: baseline !important;
+}
+
+.is-align-items-start {
+ align-items: start !important;
+}
+
+.is-align-items-end {
+ align-items: end !important;
+}
+
+.is-align-items-self-start {
+ align-items: self-start !important;
+}
+
+.is-align-items-self-end {
+ align-items: self-end !important;
+}
+
+.is-align-self-auto {
+ align-self: auto !important;
+}
+
+.is-align-self-flex-start {
+ align-self: flex-start !important;
+}
+
+.is-align-self-flex-end {
+ align-self: flex-end !important;
+}
+
+.is-align-self-center {
+ align-self: center !important;
+}
+
+.is-align-self-baseline {
+ align-self: baseline !important;
+}
+
+.is-align-self-stretch {
+ align-self: stretch !important;
+}
+
+.is-flex-grow-0 {
+ flex-grow: 0 !important;
+}
+
+.is-flex-grow-1 {
+ flex-grow: 1 !important;
+}
+
+.is-flex-grow-2 {
+ flex-grow: 2 !important;
+}
+
+.is-flex-grow-3 {
+ flex-grow: 3 !important;
+}
+
+.is-flex-grow-4 {
+ flex-grow: 4 !important;
+}
+
+.is-flex-grow-5 {
+ flex-grow: 5 !important;
+}
+
+.is-flex-shrink-0 {
+ flex-shrink: 0 !important;
+}
+
+.is-flex-shrink-1 {
+ flex-shrink: 1 !important;
+}
+
+.is-flex-shrink-2 {
+ flex-shrink: 2 !important;
+}
+
+.is-flex-shrink-3 {
+ flex-shrink: 3 !important;
+}
+
+.is-flex-shrink-4 {
+ flex-shrink: 4 !important;
+}
+
+.is-flex-shrink-5 {
+ flex-shrink: 5 !important;
+}
+
+.is-clearfix::after {
+ clear: both;
+ content: " ";
+ display: table;
+}
+
+.is-pulled-left {
+ float: left !important;
+}
+
+.is-pulled-right {
+ float: right !important;
+}
+
+.is-radiusless {
+ border-radius: 0 !important;
+}
+
+.is-shadowless {
+ box-shadow: none !important;
+}
+
+.is-clickable {
+ cursor: pointer !important;
+}
+
+.is-clipped {
+ overflow: hidden !important;
+}
+
+.is-relative {
+ position: relative !important;
+}
+
+.is-marginless {
+ margin: 0 !important;
+}
+
+.is-paddingless {
+ padding: 0 !important;
+}
+
+.m-0 {
+ margin: 0 !important;
+}
+
+.mt-0 {
+ margin-top: 0 !important;
+}
+
+.mr-0 {
+ margin-right: 0 !important;
+}
+
+.mb-0 {
+ margin-bottom: 0 !important;
+}
+
+.ml-0 {
+ margin-left: 0 !important;
+}
+
+.mx-0 {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+}
+
+.my-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+.m-1 {
+ margin: 0.25rem !important;
+}
+
+.mt-1 {
+ margin-top: 0.25rem !important;
+}
+
+.mr-1 {
+ margin-right: 0.25rem !important;
+}
+
+.mb-1 {
+ margin-bottom: 0.25rem !important;
+}
+
+.ml-1 {
+ margin-left: 0.25rem !important;
+}
+
+.mx-1 {
+ margin-left: 0.25rem !important;
+ margin-right: 0.25rem !important;
+}
+
+.my-1 {
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+}
+
+.m-2 {
+ margin: 0.5rem !important;
+}
+
+.mt-2 {
+ margin-top: 0.5rem !important;
+}
+
+.mr-2 {
+ margin-right: 0.5rem !important;
+}
+
+.mb-2 {
+ margin-bottom: 0.5rem !important;
+}
+
+.ml-2 {
+ margin-left: 0.5rem !important;
+}
+
+.mx-2 {
+ margin-left: 0.5rem !important;
+ margin-right: 0.5rem !important;
+}
+
+.my-2 {
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+}
+
+.m-3 {
+ margin: 0.75rem !important;
+}
+
+.mt-3 {
+ margin-top: 0.75rem !important;
+}
+
+.mr-3 {
+ margin-right: 0.75rem !important;
+}
+
+.mb-3 {
+ margin-bottom: 0.75rem !important;
+}
+
+.ml-3 {
+ margin-left: 0.75rem !important;
+}
+
+.mx-3 {
+ margin-left: 0.75rem !important;
+ margin-right: 0.75rem !important;
+}
+
+.my-3 {
+ margin-top: 0.75rem !important;
+ margin-bottom: 0.75rem !important;
+}
+
+.m-4 {
+ margin: 1rem !important;
+}
+
+.mt-4 {
+ margin-top: 1rem !important;
+}
+
+.mr-4 {
+ margin-right: 1rem !important;
+}
+
+.mb-4 {
+ margin-bottom: 1rem !important;
+}
+
+.ml-4 {
+ margin-left: 1rem !important;
+}
+
+.mx-4 {
+ margin-left: 1rem !important;
+ margin-right: 1rem !important;
+}
+
+.my-4 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+}
+
+.m-5 {
+ margin: 1.5rem !important;
+}
+
+.mt-5 {
+ margin-top: 1.5rem !important;
+}
+
+.mr-5 {
+ margin-right: 1.5rem !important;
+}
+
+.mb-5 {
+ margin-bottom: 1.5rem !important;
+}
+
+.ml-5 {
+ margin-left: 1.5rem !important;
+}
+
+.mx-5 {
+ margin-left: 1.5rem !important;
+ margin-right: 1.5rem !important;
+}
+
+.my-5 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+}
+
+.m-6 {
+ margin: 3rem !important;
+}
+
+.mt-6 {
+ margin-top: 3rem !important;
+}
+
+.mr-6 {
+ margin-right: 3rem !important;
+}
+
+.mb-6 {
+ margin-bottom: 3rem !important;
+}
+
+.ml-6 {
+ margin-left: 3rem !important;
+}
+
+.mx-6 {
+ margin-left: 3rem !important;
+ margin-right: 3rem !important;
+}
+
+.my-6 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+}
+
+.p-0 {
+ padding: 0 !important;
+}
+
+.pt-0 {
+ padding-top: 0 !important;
+}
+
+.pr-0 {
+ padding-right: 0 !important;
+}
+
+.pb-0 {
+ padding-bottom: 0 !important;
+}
+
+.pl-0 {
+ padding-left: 0 !important;
+}
+
+.px-0 {
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+.py-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+}
+
+.p-1 {
+ padding: 0.25rem !important;
+}
+
+.pt-1 {
+ padding-top: 0.25rem !important;
+}
+
+.pr-1 {
+ padding-right: 0.25rem !important;
+}
+
+.pb-1 {
+ padding-bottom: 0.25rem !important;
+}
+
+.pl-1 {
+ padding-left: 0.25rem !important;
+}
+
+.px-1 {
+ padding-left: 0.25rem !important;
+ padding-right: 0.25rem !important;
+}
+
+.py-1 {
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+}
+
+.p-2 {
+ padding: 0.5rem !important;
+}
+
+.pt-2 {
+ padding-top: 0.5rem !important;
+}
+
+.pr-2 {
+ padding-right: 0.5rem !important;
+}
+
+.pb-2 {
+ padding-bottom: 0.5rem !important;
+}
+
+.pl-2 {
+ padding-left: 0.5rem !important;
+}
+
+.px-2 {
+ padding-left: 0.5rem !important;
+ padding-right: 0.5rem !important;
+}
+
+.py-2 {
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+}
+
+.p-3 {
+ padding: 0.75rem !important;
+}
+
+.pt-3 {
+ padding-top: 0.75rem !important;
+}
+
+.pr-3 {
+ padding-right: 0.75rem !important;
+}
+
+.pb-3 {
+ padding-bottom: 0.75rem !important;
+}
+
+.pl-3 {
+ padding-left: 0.75rem !important;
+}
+
+.px-3 {
+ padding-left: 0.75rem !important;
+ padding-right: 0.75rem !important;
+}
+
+.py-3 {
+ padding-top: 0.75rem !important;
+ padding-bottom: 0.75rem !important;
+}
+
+.p-4 {
+ padding: 1rem !important;
+}
+
+.pt-4 {
+ padding-top: 1rem !important;
+}
+
+.pr-4 {
+ padding-right: 1rem !important;
+}
+
+.pb-4 {
+ padding-bottom: 1rem !important;
+}
+
+.pl-4 {
+ padding-left: 1rem !important;
+}
+
+.px-4 {
+ padding-left: 1rem !important;
+ padding-right: 1rem !important;
+}
+
+.py-4 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+}
+
+.p-5 {
+ padding: 1.5rem !important;
+}
+
+.pt-5 {
+ padding-top: 1.5rem !important;
+}
+
+.pr-5 {
+ padding-right: 1.5rem !important;
+}
+
+.pb-5 {
+ padding-bottom: 1.5rem !important;
+}
+
+.pl-5 {
+ padding-left: 1.5rem !important;
+}
+
+.px-5 {
+ padding-left: 1.5rem !important;
+ padding-right: 1.5rem !important;
+}
+
+.py-5 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+}
+
+.p-6 {
+ padding: 3rem !important;
+}
+
+.pt-6 {
+ padding-top: 3rem !important;
+}
+
+.pr-6 {
+ padding-right: 3rem !important;
+}
+
+.pb-6 {
+ padding-bottom: 3rem !important;
+}
+
+.pl-6 {
+ padding-left: 3rem !important;
+}
+
+.px-6 {
+ padding-left: 3rem !important;
+ padding-right: 3rem !important;
+}
+
+.py-6 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+}
+
+.is-size-1 {
+ font-size: 3rem !important;
+}
+
+.is-size-2 {
+ font-size: 2.5rem !important;
+}
+
+.is-size-3 {
+ font-size: 2rem !important;
+}
+
+.is-size-4 {
+ font-size: 1.5rem !important;
+}
+
+.is-size-5 {
+ font-size: 1.25rem !important;
+}
+
+.is-size-6 {
+ font-size: 1rem !important;
+}
+
+.is-size-7 {
+ font-size: 0.75rem !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-size-1-mobile {
+ font-size: 3rem !important;
+ }
+ .is-size-2-mobile {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-mobile {
+ font-size: 2rem !important;
+ }
+ .is-size-4-mobile {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-mobile {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-mobile {
+ font-size: 1rem !important;
+ }
+ .is-size-7-mobile {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-size-1-tablet {
+ font-size: 3rem !important;
+ }
+ .is-size-2-tablet {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-tablet {
+ font-size: 2rem !important;
+ }
+ .is-size-4-tablet {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-tablet {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-tablet {
+ font-size: 1rem !important;
+ }
+ .is-size-7-tablet {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-size-1-touch {
+ font-size: 3rem !important;
+ }
+ .is-size-2-touch {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-touch {
+ font-size: 2rem !important;
+ }
+ .is-size-4-touch {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-touch {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-touch {
+ font-size: 1rem !important;
+ }
+ .is-size-7-touch {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-size-1-desktop {
+ font-size: 3rem !important;
+ }
+ .is-size-2-desktop {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-desktop {
+ font-size: 2rem !important;
+ }
+ .is-size-4-desktop {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-desktop {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-desktop {
+ font-size: 1rem !important;
+ }
+ .is-size-7-desktop {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-size-1-widescreen {
+ font-size: 3rem !important;
+ }
+ .is-size-2-widescreen {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-widescreen {
+ font-size: 2rem !important;
+ }
+ .is-size-4-widescreen {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-widescreen {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-widescreen {
+ font-size: 1rem !important;
+ }
+ .is-size-7-widescreen {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-size-1-fullhd {
+ font-size: 3rem !important;
+ }
+ .is-size-2-fullhd {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-fullhd {
+ font-size: 2rem !important;
+ }
+ .is-size-4-fullhd {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-fullhd {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-fullhd {
+ font-size: 1rem !important;
+ }
+ .is-size-7-fullhd {
+ font-size: 0.75rem !important;
+ }
+}
+
+.has-text-centered {
+ text-align: center !important;
+}
+
+.has-text-justified {
+ text-align: justify !important;
+}
+
+.has-text-left {
+ text-align: left !important;
+}
+
+.has-text-right {
+ text-align: right !important;
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-centered-mobile {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-centered-tablet {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-centered-tablet-only {
+ text-align: center !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-centered-touch {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-centered-desktop {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-centered-desktop-only {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-centered-widescreen {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-centered-widescreen-only {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-centered-fullhd {
+ text-align: center !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-justified-mobile {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-justified-tablet {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-justified-tablet-only {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-justified-touch {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-justified-desktop {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-justified-desktop-only {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-justified-widescreen {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-justified-widescreen-only {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-justified-fullhd {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-left-mobile {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-left-tablet {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-left-tablet-only {
+ text-align: left !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-left-touch {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-left-desktop {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-left-desktop-only {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-left-widescreen {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-left-widescreen-only {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-left-fullhd {
+ text-align: left !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-right-mobile {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-right-tablet {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-right-tablet-only {
+ text-align: right !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-right-touch {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-right-desktop {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-right-desktop-only {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-right-widescreen {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-right-widescreen-only {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-right-fullhd {
+ text-align: right !important;
+ }
+}
+
+.is-capitalized {
+ text-transform: capitalize !important;
+}
+
+.is-lowercase {
+ text-transform: lowercase !important;
+}
+
+.is-uppercase {
+ text-transform: uppercase !important;
+}
+
+.is-italic {
+ font-style: italic !important;
+}
+
+.has-text-weight-light {
+ font-weight: 300 !important;
+}
+
+.has-text-weight-normal {
+ font-weight: 400 !important;
+}
+
+.has-text-weight-medium {
+ font-weight: 500 !important;
+}
+
+.has-text-weight-semibold {
+ font-weight: 600 !important;
+}
+
+.has-text-weight-bold {
+ font-weight: 700 !important;
+}
+
+.is-family-primary {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
+}
+
+.is-family-secondary {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
+}
+
+.is-family-sans-serif {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
+}
+
+.is-family-monospace {
+ font-family: monospace !important;
+}
+
+.is-family-code {
+ font-family: monospace !important;
+}
+
+.is-block {
+ display: block !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-block-mobile {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-block-tablet {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-block-tablet-only {
+ display: block !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-block-touch {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-block-desktop {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-block-desktop-only {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-block-widescreen {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-block-widescreen-only {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-block-fullhd {
+ display: block !important;
+ }
+}
+
+.is-flex {
+ display: flex !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-flex-mobile {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-flex-tablet {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-flex-tablet-only {
+ display: flex !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-flex-touch {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-flex-desktop {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-flex-desktop-only {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-flex-widescreen {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-flex-widescreen-only {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-flex-fullhd {
+ display: flex !important;
+ }
+}
+
+.is-inline {
+ display: inline !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-inline-mobile {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-inline-tablet {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-inline-tablet-only {
+ display: inline !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-inline-touch {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-inline-desktop {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-inline-desktop-only {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-inline-widescreen {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-inline-widescreen-only {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-inline-fullhd {
+ display: inline !important;
+ }
+}
+
+.is-inline-block {
+ display: inline-block !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-inline-block-mobile {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-inline-block-tablet {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-inline-block-tablet-only {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-inline-block-touch {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-inline-block-desktop {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-inline-block-desktop-only {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-inline-block-widescreen {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-inline-block-widescreen-only {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-inline-block-fullhd {
+ display: inline-block !important;
+ }
+}
+
+.is-inline-flex {
+ display: inline-flex !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-inline-flex-mobile {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-inline-flex-tablet {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-inline-flex-tablet-only {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-inline-flex-touch {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-inline-flex-desktop {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-inline-flex-desktop-only {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-inline-flex-widescreen {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-inline-flex-widescreen-only {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-inline-flex-fullhd {
+ display: inline-flex !important;
+ }
+}
+
+.is-hidden {
+ display: none !important;
+}
+
+.is-sr-only {
+ border: none !important;
+ clip: rect(0, 0, 0, 0) !important;
+ height: 0.01em !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ white-space: nowrap !important;
+ width: 0.01em !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-hidden-mobile {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-hidden-tablet {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-hidden-tablet-only {
+ display: none !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-hidden-touch {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-hidden-desktop {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-hidden-desktop-only {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-hidden-widescreen {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-hidden-widescreen-only {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-hidden-fullhd {
+ display: none !important;
+ }
+}
+
+.is-invisible {
+ visibility: hidden !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-invisible-mobile {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-invisible-tablet {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-invisible-tablet-only {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-invisible-touch {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-invisible-desktop {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-invisible-desktop-only {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-invisible-widescreen {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-invisible-widescreen-only {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-invisible-fullhd {
+ visibility: hidden !important;
+ }
+}
+
+/* Bulma Layout */
+.hero {
+ align-items: stretch;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.hero .navbar {
+ background: none;
+}
+
+.hero .tabs ul {
+ border-bottom: none;
+}
+
+.hero.is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-white strong {
+ color: inherit;
+}
+
+.hero.is-white .title {
+ color: #0a0a0a;
+}
+
+.hero.is-white .subtitle {
+ color: rgba(10, 10, 10, 0.9);
+}
+
+.hero.is-white .subtitle a:not(.button),
+.hero.is-white .subtitle strong {
+ color: #0a0a0a;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-white .navbar-menu {
+ background-color: white;
+ }
+}
+
+.hero.is-white .navbar-item,
+.hero.is-white .navbar-link {
+ color: rgba(10, 10, 10, 0.7);
+}
+
+.hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active,
+.hero.is-white .navbar-link:hover,
+.hero.is-white .navbar-link.is-active {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+}
+
+.hero.is-white .tabs a {
+ color: #0a0a0a;
+ opacity: 0.9;
+}
+
+.hero.is-white .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-white .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a {
+ color: #0a0a0a;
+}
+
+.hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover {
+ background-color: #0a0a0a;
+ border-color: #0a0a0a;
+ color: white;
+}
+
+.hero.is-white.is-bold {
+ background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-white.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%);
+ }
+}
+
+.hero.is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-black strong {
+ color: inherit;
+}
+
+.hero.is-black .title {
+ color: white;
+}
+
+.hero.is-black .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-black .subtitle a:not(.button),
+.hero.is-black .subtitle strong {
+ color: white;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-black .navbar-menu {
+ background-color: #0a0a0a;
+ }
+}
+
+.hero.is-black .navbar-item,
+.hero.is-black .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active,
+.hero.is-black .navbar-link:hover,
+.hero.is-black .navbar-link.is-active {
+ background-color: black;
+ color: white;
+}
+
+.hero.is-black .tabs a {
+ color: white;
+ opacity: 0.9;
+}
+
+.hero.is-black .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-black .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a {
+ color: white;
+}
+
+.hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover {
+ background-color: white;
+ border-color: white;
+ color: #0a0a0a;
+}
+
+.hero.is-black.is-bold {
+ background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-black.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%);
+ }
+}
+
+.hero.is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-light strong {
+ color: inherit;
+}
+
+.hero.is-light .title {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light .subtitle {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.hero.is-light .subtitle a:not(.button),
+.hero.is-light .subtitle strong {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-light .navbar-menu {
+ background-color: whitesmoke;
+ }
+}
+
+.hero.is-light .navbar-item,
+.hero.is-light .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active,
+.hero.is-light .navbar-link:hover,
+.hero.is-light .navbar-link.is-active {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light .tabs a {
+ color: rgba(0, 0, 0, 0.7);
+ opacity: 0.9;
+}
+
+.hero.is-light .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-light .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.hero.is-light.is-bold {
+ background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-light.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%);
+ }
+}
+
+.hero.is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-dark strong {
+ color: inherit;
+}
+
+.hero.is-dark .title {
+ color: #fff;
+}
+
+.hero.is-dark .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-dark .subtitle a:not(.button),
+.hero.is-dark .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-dark .navbar-menu {
+ background-color: #363636;
+ }
+}
+
+.hero.is-dark .navbar-item,
+.hero.is-dark .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active,
+.hero.is-dark .navbar-link:hover,
+.hero.is-dark .navbar-link.is-active {
+ background-color: #292929;
+ color: #fff;
+}
+
+.hero.is-dark .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-dark .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-dark .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #363636;
+}
+
+.hero.is-dark.is-bold {
+ background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-dark.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%);
+ }
+}
+
+.hero.is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-primary strong {
+ color: inherit;
+}
+
+.hero.is-primary .title {
+ color: #fff;
+}
+
+.hero.is-primary .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-primary .subtitle a:not(.button),
+.hero.is-primary .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-primary .navbar-menu {
+ background-color: #00d1b2;
+ }
+}
+
+.hero.is-primary .navbar-item,
+.hero.is-primary .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active,
+.hero.is-primary .navbar-link:hover,
+.hero.is-primary .navbar-link.is-active {
+ background-color: #00b89c;
+ color: #fff;
+}
+
+.hero.is-primary .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-primary .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-primary .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #00d1b2;
+}
+
+.hero.is-primary.is-bold {
+ background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-primary.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%);
+ }
+}
+
+.hero.is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-link strong {
+ color: inherit;
+}
+
+.hero.is-link .title {
+ color: #fff;
+}
+
+.hero.is-link .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-link .subtitle a:not(.button),
+.hero.is-link .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-link .navbar-menu {
+ background-color: #3273dc;
+ }
+}
+
+.hero.is-link .navbar-item,
+.hero.is-link .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active,
+.hero.is-link .navbar-link:hover,
+.hero.is-link .navbar-link.is-active {
+ background-color: #2366d1;
+ color: #fff;
+}
+
+.hero.is-link .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-link .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-link .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #3273dc;
+}
+
+.hero.is-link.is-bold {
+ background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-link.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%);
+ }
+}
+
+.hero.is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-info strong {
+ color: inherit;
+}
+
+.hero.is-info .title {
+ color: #fff;
+}
+
+.hero.is-info .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-info .subtitle a:not(.button),
+.hero.is-info .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-info .navbar-menu {
+ background-color: #3298dc;
+ }
+}
+
+.hero.is-info .navbar-item,
+.hero.is-info .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active,
+.hero.is-info .navbar-link:hover,
+.hero.is-info .navbar-link.is-active {
+ background-color: #238cd1;
+ color: #fff;
+}
+
+.hero.is-info .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-info .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-info .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #3298dc;
+}
+
+.hero.is-info.is-bold {
+ background-image: linear-gradient(141deg, #159dc6 0%, #3298dc 71%, #4389e5 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-info.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #159dc6 0%, #3298dc 71%, #4389e5 100%);
+ }
+}
+
+.hero.is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-success strong {
+ color: inherit;
+}
+
+.hero.is-success .title {
+ color: #fff;
+}
+
+.hero.is-success .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-success .subtitle a:not(.button),
+.hero.is-success .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-success .navbar-menu {
+ background-color: #48c774;
+ }
+}
+
+.hero.is-success .navbar-item,
+.hero.is-success .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active,
+.hero.is-success .navbar-link:hover,
+.hero.is-success .navbar-link.is-active {
+ background-color: #3abb67;
+ color: #fff;
+}
+
+.hero.is-success .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-success .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-success .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #48c774;
+}
+
+.hero.is-success.is-bold {
+ background-image: linear-gradient(141deg, #29b342 0%, #48c774 71%, #56d296 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-success.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #29b342 0%, #48c774 71%, #56d296 100%);
+ }
+}
+
+.hero.is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-warning strong {
+ color: inherit;
+}
+
+.hero.is-warning .title {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning .subtitle {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.hero.is-warning .subtitle a:not(.button),
+.hero.is-warning .subtitle strong {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-warning .navbar-menu {
+ background-color: #ffdd57;
+ }
+}
+
+.hero.is-warning .navbar-item,
+.hero.is-warning .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active,
+.hero.is-warning .navbar-link:hover,
+.hero.is-warning .navbar-link.is-active {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning .tabs a {
+ color: rgba(0, 0, 0, 0.7);
+ opacity: 0.9;
+}
+
+.hero.is-warning .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-warning .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: rgba(0, 0, 0, 0.7);
+ color: #ffdd57;
+}
+
+.hero.is-warning.is-bold {
+ background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-warning.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%);
+ }
+}
+
+.hero.is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-danger strong {
+ color: inherit;
+}
+
+.hero.is-danger .title {
+ color: #fff;
+}
+
+.hero.is-danger .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-danger .subtitle a:not(.button),
+.hero.is-danger .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-danger .navbar-menu {
+ background-color: #f14668;
+ }
+}
+
+.hero.is-danger .navbar-item,
+.hero.is-danger .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active,
+.hero.is-danger .navbar-link:hover,
+.hero.is-danger .navbar-link.is-active {
+ background-color: #ef2e55;
+ color: #fff;
+}
+
+.hero.is-danger .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-danger .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-danger .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #f14668;
+}
+
+.hero.is-danger.is-bold {
+ background-image: linear-gradient(141deg, #fa0a62 0%, #f14668 71%, #f7595f 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-danger.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #fa0a62 0%, #f14668 71%, #f7595f 100%);
+ }
+}
+
+.hero.is-small .hero-body {
+ padding: 1.5rem;
+}
+
+@media screen and (min-width: 769px), print {
+ .hero.is-medium .hero-body {
+ padding: 9rem 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .hero.is-large .hero-body {
+ padding: 18rem 1.5rem;
+ }
+}
+
+.hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body {
+ align-items: center;
+ display: flex;
+}
+
+.hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.hero.is-halfheight {
+ min-height: 50vh;
+}
+
+.hero.is-fullheight {
+ min-height: 100vh;
+}
+
+.hero-video {
+ overflow: hidden;
+}
+
+.hero-video video {
+ left: 50%;
+ min-height: 100%;
+ min-width: 100%;
+ position: absolute;
+ top: 50%;
+ transform: translate3d(-50%, -50%, 0);
+}
+
+.hero-video.is-transparent {
+ opacity: 0.3;
+}
+
+@media screen and (max-width: 768px) {
+ .hero-video {
+ display: none;
+ }
+}
+
+.hero-buttons {
+ margin-top: 1.5rem;
+}
+
+@media screen and (max-width: 768px) {
+ .hero-buttons .button {
+ display: flex;
+ }
+ .hero-buttons .button:not(:last-child) {
+ margin-bottom: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .hero-buttons {
+ display: flex;
+ justify-content: center;
+ }
+ .hero-buttons .button:not(:last-child) {
+ margin-left: 1.5rem;
+ }
+}
+
+.hero-head,
+.hero-foot {
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.hero-body {
+ flex-grow: 1;
+ flex-shrink: 0;
+ padding: 3rem 1.5rem;
+}
+
+.section {
+ padding: 3rem 1.5rem;
+}
+
+@media screen and (min-width: 1024px) {
+ .section.is-medium {
+ padding: 9rem 1.5rem;
+ }
+ .section.is-large {
+ padding: 18rem 1.5rem;
+ }
+}
+
+.footer {
+ background-color: #fafafa;
+ padding: 3rem 1.5rem 6rem;
+}
+/*# sourceMappingURL=bulma-rtl.css.map */ \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css.map b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css.map
new file mode 100644
index 0000000..d00c76d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../bulma.sass","../sass/utilities/_all.sass","../sass/utilities/animations.sass","bulma-rtl.css","../sass/utilities/mixins.sass","../sass/utilities/initial-variables.sass","../sass/utilities/controls.sass","../sass/base/_all.sass","../sass/base/minireset.sass","../sass/base/generic.sass","../sass/utilities/derived-variables.sass","../sass/elements/_all.sass","../sass/elements/box.sass","../sass/elements/button.sass","../sass/utilities/functions.sass","../sass/elements/container.sass","../sass/elements/content.sass","../sass/elements/icon.sass","../sass/elements/image.sass","../sass/elements/notification.sass","../sass/elements/progress.sass","../sass/elements/table.sass","../sass/elements/tag.sass","../sass/elements/title.sass","../sass/elements/other.sass","../sass/form/_all.sass","../sass/form/shared.sass","../sass/form/input-textarea.sass","../sass/form/checkbox-radio.sass","../sass/form/select.sass","../sass/form/file.sass","../sass/form/tools.sass","../sass/components/_all.sass","../sass/components/breadcrumb.sass","../sass/components/card.sass","../sass/components/dropdown.sass","../sass/components/level.sass","../sass/components/media.sass","../sass/components/menu.sass","../sass/components/message.sass","../sass/components/modal.sass","../sass/components/navbar.sass","../sass/components/pagination.sass","../sass/components/panel.sass","../sass/components/tabs.sass","../sass/grid/_all.sass","../sass/grid/columns.sass","../sass/grid/tiles.sass","../sass/helpers/_all.sass","../sass/helpers/color.sass","../sass/helpers/flexbox.sass","../sass/helpers/float.sass","../sass/helpers/other.sass","../sass/helpers/overflow.sass","../sass/helpers/position.sass","../sass/helpers/spacing.sass","../sass/helpers/typography.sass","../sass/helpers/visibility.sass","../sass/layout/_all.sass","../sass/layout/hero.sass","../sass/layout/section.sass","../sass/layout/footer.sass"],"names":[],"mappings":"AACA,6DAAA;ACDA,oBAAA;ACAA;EACE;IACE,uBAAuB;ECGzB;EDFA;IACE,yBAAyB;ECI3B;AACF;ADTA;EACE;IACE,uBAAuB;ECGzB;EDFA;IACE,yBAAyB;ECI3B;AACF;;AC0JA;;;;EANE,2BAA2B;EAC3B,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AD7InB;;ACkKA;EAfE,6BAD8B;EAE9B,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,YAAY;EACZ,cAAc;EACd,eAAe;EACf,qBAAqB;EACrB,oBAAoB;EACpB,kBAAkB;EAClB,QAAQ;EACR,yBAAyB;EACzB,wBAAwB;EACxB,cAAc;AD/IhB;;ACqJE;;EACE,qBC3IkB;AFNtB;;ACwNA;EAhEE,qBAAqB;EACrB,wBAAwB;EACxB,uCClM2B;EDmM3B,YAAY;EACZ,uBC/HuB;EDgIvB,eAAe;EACf,oBAAoB;EACpB,qBAAqB;EACrB,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,WAAW;ADpJb;;ACqJE;EAEE,uBCzM2B;ED0M3B,WAAW;EACX,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,0DAA0D;EAC1D,+BAA+B;ADnJnC;;ACoJE;EACE,WAAW;EACX,UAAU;ADjJd;;ACkJE;EACE,WAAW;EACX,UAAU;AD/Id;;ACgJE;EAEE,uCCtOyB;AFwF7B;;AC+IE;EACE,uCCxOyB;AF4F7B;;AC8IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;AD3If;;AC4IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;ADzIf;;AC0IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;ADvIf;;ACwJA;EAXE,mDAA2C;UAA3C,2CAA2C;EAC3C,yBC7P4B;ED8P5B,uBCjMuB;EDkMvB,+BAA+B;EAC/B,6BAA6B;EAC7B,WAAW;EACX,cAAc;EACd,WAAW;EACX,kBAAkB;EAClB,UAAU;ADzIZ;;ACqJA;;;;;;;;;;;;;;;;;EANE,SADuB;EAEvB,OAFuB;EAGvB,kBAAkB;EAClB,QAJuB;EAKvB,MALuB;ADtHzB;;AGvHA;;;;;EA3BE,qBAAqB;EACrB,wBAAwB;EACxB,mBAAmB;EACnB,6BAA+C;EAC/C,kBDqDU;ECpDV,gBAAgB;EAChB,oBAAoB;EACpB,eDkBW;ECjBX,aAfoB;EAgBpB,2BAA2B;EAC3B,gBAhBuB;EAiBvB,iCAf+D;EAgB/D,gCAfkE;EAgBlE,iCAhBkE;EAiBlE,8BAlB+D;EAmB/D,kBAAkB;EAClB,mBAAmB;AH0JrB;;AGxJE;;;;;;;;;;;;;;;;;EAIE,aAAa;AHwKjB;;AGvKE;;;;;;;;;;;;;;;;EAEE,mBAAmB;AHwLvB;;AI7NA,eAAA;ACAA,0EAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;EAuBE,SAAS;EACT,UAAU;ALgOZ;;AK7NA;;;;;;EAME,eAAe;EACf,mBAAmB;ALgOrB;;AK7NA;EACE,gBAAgB;ALgOlB;;AK7NA;;;;EAIE,SAAS;ALgOX;;AK7NA;EACE,sBAAsB;ALgOxB;;AK9NA;EAII,mBAAmB;AL8NvB;;AK3NA;;EAEE,YAAY;EACZ,eAAe;AL8NjB;;AK3NA;EACE,SAAS;AL8NX;;AK3NA;EACE,yBAAyB;EACzB,iBAAiB;AL8NnB;;AK5NA;;EAEE,UAAU;AL+NZ;;AKjOA;;EAII,mBAAmB;ALkOvB;;AK9PA;EClBE,uBJjB6B;EIkB7B,eAhCc;EAiCd,kCAAkC;EAClC,mCAAmC;EACnC,gBAlCoB;EAmCpB,kBAhCsB;EAiCtB,kBAhCsB;EAiCtB,kCApCiC;EAqCjC,8BAAsB;KAAtB,2BAAsB;MAAtB,0BAAsB;UAAtB,sBAAsB;ANoRxB;;AMlRA;;;;;;;EAOE,cAAc;ANqRhB;;AMnRA;;;;;;EAME,oLJ7ByL;AFmT3L;;AMpRA;;EAEE,6BAA6B;EAC7B,4BAA4B;EAC5B,sBJlC0B;AFyT5B;;AMrRA;EACE,cJ3D4B;EI4D5B,cA1DkB;EA2DlB,gBJ3BiB;EI4BjB,gBA1DoB;ANkVtB;;AMpRA;EACE,cJpDgC;EIqDhC,eAAe;EACf,qBAAqB;ANuRvB;;AM1RA;EAKI,mBAAmB;ANyRvB;;AM9RA;EAOI,cJ1E0B;AFqW9B;;AMzRA;EACE,4BJtE4B;EIuE5B,cCpBsB;EDqBtB,kBArEiB;EAsEjB,mBAvEkB;EAwElB,4BAzEgC;ANqWlC;;AM1RA;EACE,4BJ7E4B;EI8E5B,YAAY;EACZ,cAAc;EACd,WAxEa;EAyEb,gBAxEkB;ANqWpB;;AM3RA;EACE,YAAY;EACZ,eAAe;AN8RjB;;AM5RA;;EAEE,wBAAwB;AN+R1B;;AM7RA;EACE,kBAvFuB;ANuXzB;;AM9RA;EACE,mBAAmB;EACnB,oBAAoB;ANiStB;;AM/RA;EACE,cJ1G4B;EI2G5B,gBJrEe;AFuWjB;;AM9RA;EACE,YAAY;ANiSd;;AM/RA;EL1DE,iCAAiC;EK4DjC,4BJ7G4B;EI8G5B,cJpH4B;EIqH5B,kBAjGqB;EAkGrB,gBAAgB;EAChB,uBAlG0B;EAmG1B,gBAAgB;EAChB,iBAAiB;ANkSnB;;AM1SA;EAUI,6BAA6B;EAC7B,mBAAmB;EACnB,cAvGoB;EAwGpB,UAAU;ANoSd;;AMlSA;;EAGI,mBAAmB;ANoSvB;;AMvSA;;EAKM,mBAAmB;ANuSzB;;AM5SA;EAOI,cJxI0B;AFib9B;;AQvbA,mBAAA;ACSA;EAEE,uBPI6B;EOH7B,kBP0DgB;EOzDhB,0FPX2B;EOY3B,cPP4B;EOQ5B,cAAc;EACd,gBAZmB;AT6brB;;AS/aA;EAGI,yEPC8B;AF+alC;;ASnbA;EAKI,oEPD8B;AFmblC;;AUzZA;EAGE,uBRpC6B;EQqC7B,qBR1C4B;EQ2C5B,iBPlDwB;EOmDxB,cRhD4B;EQiD5B,eAAe;EAGf,uBAAuB;EACvB,iCApD6D;EAqD7D,iBApD6B;EAqD7B,kBArD6B;EAsD7B,8BAvD6D;EAwD7D,kBAAkB;EAClB,mBAAmB;AVwZrB;;AUxaA;EAkBI,cAAc;AV0ZlB;;AU5aA;EAwBM,aAAa;EACb,YAAY;AVwZlB;;AUjbA;ET8FI,gCSnEwG;ETmExG,mBSlEgE;AV0ZpE;;AUtbA;ET8FI,oBShEgE;ETgEhE,+BS/DwG;AV4Z5G;;AU3bA;EAiCM,+BAAmF;EACnF,gCAAoF;AV8Z1F;;AUhcA;EAsCI,qBR7E0B;EQ8E1B,cRjF0B;AF+e9B;;AUrcA;EA0CI,qBRpE8B;EQqE9B,cRrF0B;AFof9B;;AU1cA;EA6CM,kDRvE4B;AFwelC;;AU9cA;EAgDI,qBRzF0B;EQ0F1B,cR3F0B;AF6f9B;;AUndA;EAoDI,6BAA6B;EAC7B,yBAAyB;EACzB,cR/F0B;EQgG1B,0BAjF8B;AVoflC;;AU1dA;EA4DM,4BR/FwB;EQgGxB,cRvGwB;AFygB9B;;AU/dA;EAgEM,yBCH2B;EDI3B,cR3GwB;AF8gB9B;;AUpeA;;EAoEM,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;AVqatB;;AU3eA;EA2EM,uBR5GyB;EQ6GzB,yBAAyB;EACzB,cR3HuB;AF+hB7B;;AUjfA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,cRhIqB;AFqiB7B;;AUvfA;EAqFQ,yBAAyB;EACzB,cRpIqB;AF0iB7B;;AU5fA;EAwFU,mDRzHqB;AFiiB/B;;AUhgBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,cR3IqB;AFojB7B;;AUtgBA;;EAgGQ,uBRjIuB;EQkIvB,yBAAyB;EACzB,gBAAgB;AV2axB;;AU7gBA;EAoGQ,yBRlJqB;EQmJrB,YRtIuB;AFmjB/B;;AUlhBA;EAwGU,uBC3CuB;AXydjC;;AUthBA;;EA2GU,yBRzJmB;EQ0JnB,yBAAyB;EACzB,gBAAgB;EAChB,YR/IqB;AF+jB/B;;AU9hBA;EAiHU,gEAA4E;AVibtF;;AUliBA;EAmHQ,6BAA6B;EAC7B,mBRrJuB;EQsJvB,YRtJuB;AFykB/B;;AUxiBA;EA0HU,uBR3JqB;EQ4JrB,mBR5JqB;EQ6JrB,cR1KmB;AF4lB7B;;AU9iBA;EA+HY,4DAA8D;AVmb1E;;AUljBA;EAqIc,gEAA4E;AVib1F;;AUtjBA;;EAwIU,6BAA6B;EAC7B,mBR1KqB;EQ2KrB,gBAAgB;EAChB,YR5KqB;AF+lB/B;;AU9jBA;EA6IQ,6BAA6B;EAC7B,qBR5LqB;EQ6LrB,cR7LqB;AFknB7B;;AUpkBA;EAoJU,yBRlMmB;EQmMnB,YRtLqB;AF0mB/B;;AUzkBA;EA4Jc,4DAA8D;AVib5E;;AU7kBA;;EA+JU,6BAA6B;EAC7B,qBR9MmB;EQ+MnB,gBAAgB;EAChB,cRhNmB;AFmoB7B;;AUrlBA;EA2EM,yBRzHuB;EQ0HvB,yBAAyB;EACzB,YR9GyB;AF4nB/B;;AU3lBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,YRnHuB;AFkoB/B;;AUjmBA;EAqFQ,yBAAyB;EACzB,YRvHuB;AFuoB/B;;AUtmBA;EAwFU,gDRtImB;AFwpB7B;;AU1mBA;EA2FQ,uBC9ByB;ED+BzB,yBAAyB;EACzB,YR9HuB;AFipB/B;;AUhnBA;;EAgGQ,yBR9IqB;EQ+IrB,yBAAyB;EACzB,gBAAgB;AVqhBxB;;AUvnBA;EAoGQ,uBRrIuB;EQsIvB,cRnJqB;AF0qB7B;;AU5nBA;EAwGU,yBC3CuB;AXmkBjC;;AUhoBA;;EA2GU,uBR5IqB;EQ6IrB,yBAAyB;EACzB,gBAAgB;EAChB,cR5JmB;AFsrB7B;;AUxoBA;EAiHU,4DAA4E;AV2hBtF;;AU5oBA;EAmHQ,6BAA6B;EAC7B,qBRlKqB;EQmKrB,cRnKqB;AFgsB7B;;AUlpBA;EA0HU,yBRxKmB;EQyKnB,qBRzKmB;EQ0KnB,YR7JqB;AFyrB/B;;AUxpBA;EA+HY,gEAA8D;AV6hB1E;;AU5pBA;EAqIc,4DAA4E;AV2hB1F;;AUhqBA;;EAwIU,6BAA6B;EAC7B,qBRvLmB;EQwLnB,gBAAgB;EAChB,cRzLmB;AFstB7B;;AUxqBA;EA6IQ,6BAA6B;EAC7B,mBR/KuB;EQgLvB,YRhLuB;AF+sB/B;;AU9qBA;EAoJU,uBRrLqB;EQsLrB,cRnMmB;AFiuB7B;;AUnrBA;EA4Jc,gEAA8D;AV2hB5E;;AUvrBA;;EA+JU,6BAA6B;EAC7B,mBRjMqB;EQkMrB,gBAAgB;EAChB,YRnMqB;AFguB/B;;AU/rBA;EA2EM,4BR9GwB;EQ+GxB,yBAAyB;EACzB,yBC7Ce;AXqqBrB;;AUrsBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,yBClDa;AX2qBrB;;AU3sBA;EAqFQ,yBAAyB;EACzB,yBCtDa;AXgrBrB;;AUhtBA;EAwFU,mDR3HoB;AFuvB9B;;AUptBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,yBC7Da;AX0rBrB;;AU1tBA;;EAgGQ,4BRnIsB;EQoItB,yBAAyB;EACzB,gBAAgB;AV+nBxB;;AUjuBA;EAoGQ,oCCpEa;EDqEb,iBRxIsB;AFywB9B;;AUtuBA;EAwGU,oCC3CuB;AX6qBjC;;AU1uBA;;EA2GU,oCC3EW;ED4EX,yBAAyB;EACzB,gBAAgB;EAChB,iBRjJoB;AFqxB9B;;AUlvBA;EAiHU,sFAA4E;AVqoBtF;;AUtvBA;EAmHQ,6BAA6B;EAC7B,wBRvJsB;EQwJtB,iBRxJsB;AF+xB9B;;AU5vBA;EA0HU,4BR7JoB;EQ8JpB,wBR9JoB;EQ+JpB,yBC5FW;AXkuBrB;;AUlwBA;EA+HY,sEAA8D;AVuoB1E;;AUtwBA;EAqIc,sFAA4E;AVqoB1F;;AU1wBA;;EAwIU,6BAA6B;EAC7B,wBR5KoB;EQ6KpB,gBAAgB;EAChB,iBR9KoB;AFqzB9B;;AUlxBA;EA6IQ,6BAA6B;EAC7B,gCC9Ga;ED+Gb,yBC/Ga;AXwvBrB;;AUxxBA;EAoJU,oCCpHW;EDqHX,iBRxLoB;AFg0B9B;;AU7xBA;EA4Jc,sEAA8D;AVqoB5E;;AUjyBA;;EA+JU,6BAA6B;EAC7B,gCChIW;EDiIX,gBAAgB;EAChB,yBClIW;AXywBrB;;AUzyBA;EA2EM,yBRrHwB;EQsHxB,yBAAyB;EACzB,WC3CU;AX6wBhB;;AU/yBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXmxBhB;;AUrzBA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXwxBhB;;AU1zBA;EAwFU,gDRlIoB;AFw2B9B;;AU9zBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXkyBhB;;AUp0BA;;EAgGQ,yBR1IsB;EQ2ItB,yBAAyB;EACzB,gBAAgB;AVyuBxB;;AU30BA;EAoGQ,sBClEQ;EDmER,cR/IsB;AF03B9B;;AUh1BA;EAwGU,yBC3CuB;AXuxBjC;;AUp1BA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRxJoB;AFs4B9B;;AU51BA;EAiHU,0DAA4E;AV+uBtF;;AUh2BA;EAmHQ,6BAA6B;EAC7B,qBR9JsB;EQ+JtB,cR/JsB;AFg5B9B;;AUt2BA;EA0HU,yBRpKoB;EQqKpB,qBRrKoB;EQsKpB,WC1FM;AX00BhB;;AU52BA;EA+HY,gEAA8D;AVivB1E;;AUh3BA;EAqIc,0DAA4E;AV+uB1F;;AUp3BA;;EAwIU,6BAA6B;EAC7B,qBRnLoB;EQoLpB,gBAAgB;EAChB,cRrLoB;AFs6B9B;;AU53BA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXg2BhB;;AUl4BA;EAoJU,sBClHM;EDmHN,cR/LoB;AFi7B9B;;AUv4BA;EA4Jc,gEAA8D;AV+uB5E;;AU34BA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXi3BhB;;AUn5BA;EA2EM,yBRvG4B;EQwG5B,yBAAyB;EACzB,WC3CU;AXu3BhB;;AUz5BA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AX63BhB;;AU/5BA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXk4BhB;;AUp6BA;EAwFU,iDRpHwB;AFo8BlC;;AUx6BA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AX44BhB;;AU96BA;;EAgGQ,yBR5H0B;EQ6H1B,yBAAyB;EACzB,gBAAgB;AVm1BxB;;AUr7BA;EAoGQ,sBClEQ;EDmER,cRjI0B;AFs9BlC;;AU17BA;EAwGU,yBC3CuB;AXi4BjC;;AU97BA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cR1IwB;AFk+BlC;;AUt8BA;EAiHU,0DAA4E;AVy1BtF;;AU18BA;EAmHQ,6BAA6B;EAC7B,qBRhJ0B;EQiJ1B,cRjJ0B;AF4+BlC;;AUh9BA;EA0HU,yBRtJwB;EQuJxB,qBRvJwB;EQwJxB,WC1FM;AXo7BhB;;AUt9BA;EA+HY,gEAA8D;AV21B1E;;AU19BA;EAqIc,0DAA4E;AVy1B1F;;AU99BA;;EAwIU,6BAA6B;EAC7B,qBRrKwB;EQsKxB,gBAAgB;EAChB,cRvKwB;AFkgClC;;AUt+BA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AX08BhB;;AU5+BA;EAoJU,sBClHM;EDmHN,cRjLwB;AF6gClC;;AUj/BA;EA4Jc,gEAA8D;AVy1B5E;;AUr/BA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AX29BhB;;AU7/BA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXg9BrE;;AUlgCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXs9BrE;;AUxgCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AX49BrE;;AU9gCA;EA2EM,yBRrG4B;EQsG5B,yBAAyB;EACzB,WC3CU;AXk/BhB;;AUphCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXw/BhB;;AU1hCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AX6/BhB;;AU/hCA;EAwFU,kDRlHwB;AF6jClC;;AUniCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXugChB;;AUziCA;;EAgGQ,yBR1H0B;EQ2H1B,yBAAyB;EACzB,gBAAgB;AV88BxB;;AUhjCA;EAoGQ,sBClEQ;EDmER,cR/H0B;AF+kClC;;AUrjCA;EAwGU,yBC3CuB;AX4/BjC;;AUzjCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRxIwB;AF2lClC;;AUjkCA;EAiHU,0DAA4E;AVo9BtF;;AUrkCA;EAmHQ,6BAA6B;EAC7B,qBR9I0B;EQ+I1B,cR/I0B;AFqmClC;;AU3kCA;EA0HU,yBRpJwB;EQqJxB,qBRrJwB;EQsJxB,WC1FM;AX+iChB;;AUjlCA;EA+HY,gEAA8D;AVs9B1E;;AUrlCA;EAqIc,0DAA4E;AVo9B1F;;AUzlCA;;EAwIU,6BAA6B;EAC7B,qBRnKwB;EQoKxB,gBAAgB;EAChB,cRrKwB;AF2nClC;;AUjmCA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXqkChB;;AUvmCA;EAoJU,sBClHM;EDmHN,cR/KwB;AFsoClC;;AU5mCA;EA4Jc,gEAA8D;AVo9B5E;;AUhnCA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXslChB;;AUxnCA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AX2kCrE;;AU7nCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXilCrE;;AUnoCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXulCrE;;AUzoCA;EA2EM,yBRtG4B;EQuG5B,yBAAyB;EACzB,WC3CU;AX6mChB;;AU/oCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXmnChB;;AUrpCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXwnChB;;AU1pCA;EAwFU,kDRnHwB;AFyrClC;;AU9pCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXkoChB;;AUpqCA;;EAgGQ,yBR3H0B;EQ4H1B,yBAAyB;EACzB,gBAAgB;AVykCxB;;AU3qCA;EAoGQ,sBClEQ;EDmER,cRhI0B;AF2sClC;;AUhrCA;EAwGU,yBC3CuB;AXunCjC;;AUprCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRzIwB;AFutClC;;AU5rCA;EAiHU,0DAA4E;AV+kCtF;;AUhsCA;EAmHQ,6BAA6B;EAC7B,qBR/I0B;EQgJ1B,cRhJ0B;AFiuClC;;AUtsCA;EA0HU,yBRrJwB;EQsJxB,qBRtJwB;EQuJxB,WC1FM;AX0qChB;;AU5sCA;EA+HY,gEAA8D;AVilC1E;;AUhtCA;EAqIc,0DAA4E;AV+kC1F;;AUptCA;;EAwIU,6BAA6B;EAC7B,qBRpKwB;EQqKxB,gBAAgB;EAChB,cRtKwB;AFuvClC;;AU5tCA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXgsChB;;AUluCA;EAoJU,sBClHM;EDmHN,cRhLwB;AFkwClC;;AUvuCA;EA4Jc,gEAA8D;AV+kC5E;;AU3uCA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXitChB;;AUnvCA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXssCrE;;AUxvCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AX4sCrE;;AU9vCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXktCrE;;AUpwCA;EA2EM,yBRxG4B;EQyG5B,yBAAyB;EACzB,WC3CU;AXwuChB;;AU1wCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AX8uChB;;AUhxCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXmvChB;;AUrxCA;EAwFU,kDRrHwB;AFszClC;;AUzxCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AX6vChB;;AU/xCA;;EAgGQ,yBR7H0B;EQ8H1B,yBAAyB;EACzB,gBAAgB;AVosCxB;;AUtyCA;EAoGQ,sBClEQ;EDmER,cRlI0B;AFw0ClC;;AU3yCA;EAwGU,yBC3CuB;AXkvCjC;;AU/yCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cR3IwB;AFo1ClC;;AUvzCA;EAiHU,0DAA4E;AV0sCtF;;AU3zCA;EAmHQ,6BAA6B;EAC7B,qBRjJ0B;EQkJ1B,cRlJ0B;AF81ClC;;AUj0CA;EA0HU,yBRvJwB;EQwJxB,qBRxJwB;EQyJxB,WC1FM;AXqyChB;;AUv0CA;EA+HY,gEAA8D;AV4sC1E;;AU30CA;EAqIc,0DAA4E;AV0sC1F;;AU/0CA;;EAwIU,6BAA6B;EAC7B,qBRtKwB;EQuKxB,gBAAgB;EAChB,cRxKwB;AFo3ClC;;AUv1CA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AX2zChB;;AU71CA;EAoJU,sBClHM;EDmHN,cRlLwB;AF+3ClC;;AUl2CA;EA4Jc,gEAA8D;AV0sC5E;;AUt2CA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AX40ChB;;AU92CA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXi0CrE;;AUn3CA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXu0CrE;;AUz3CA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AX60CrE;;AU/3CA;EA2EM,yBRzG4B;EQ0G5B,yBAAyB;EACzB,yBC7Ce;AXq2CrB;;AUr4CA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,yBClDa;AX22CrB;;AU34CA;EAqFQ,yBAAyB;EACzB,yBCtDa;AXg3CrB;;AUh5CA;EAwFU,kDRtHwB;AFk7ClC;;AUp5CA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,yBC7Da;AX03CrB;;AU15CA;;EAgGQ,yBR9H0B;EQ+H1B,yBAAyB;EACzB,gBAAgB;AV+zCxB;;AUj6CA;EAoGQ,oCCpEa;EDqEb,cRnI0B;AFo8ClC;;AUt6CA;EAwGU,oCC3CuB;AX62CjC;;AU16CA;;EA2GU,oCC3EW;ED4EX,yBAAyB;EACzB,gBAAgB;EAChB,cR5IwB;AFg9ClC;;AUl7CA;EAiHU,sFAA4E;AVq0CtF;;AUt7CA;EAmHQ,6BAA6B;EAC7B,qBRlJ0B;EQmJ1B,cRnJ0B;AF09ClC;;AU57CA;EA0HU,yBRxJwB;EQyJxB,qBRzJwB;EQ0JxB,yBC5FW;AXk6CrB;;AUl8CA;EA+HY,gEAA8D;AVu0C1E;;AUt8CA;EAqIc,sFAA4E;AVq0C1F;;AU18CA;;EAwIU,6BAA6B;EAC7B,qBRvKwB;EQwKxB,gBAAgB;EAChB,cRzKwB;AFg/ClC;;AUl9CA;EA6IQ,6BAA6B;EAC7B,gCC9Ga;ED+Gb,yBC/Ga;AXw7CrB;;AUx9CA;EAoJU,oCCpHW;EDqHX,cRnLwB;AF2/ClC;;AU79CA;EA4Jc,gEAA8D;AVq0C5E;;AUj+CA;;EA+JU,6BAA6B;EAC7B,gCChIW;EDiIX,gBAAgB;EAChB,yBClIW;AXy8CrB;;AUz+CA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AX47CrE;;AU9+CA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXk8CrE;;AUp/CA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXw8CrE;;AU1/CA;EA2EM,yBRnG2B;EQoG3B,yBAAyB;EACzB,WC3CU;AX89ChB;;AUhgDA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXo+ChB;;AUtgDA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXy+ChB;;AU3gDA;EAwFU,kDRhHuB;AFuiDjC;;AU/gDA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXm/ChB;;AUrhDA;;EAgGQ,yBRxHyB;EQyHzB,yBAAyB;EACzB,gBAAgB;AV07CxB;;AU5hDA;EAoGQ,sBClEQ;EDmER,cR7HyB;AFyjDjC;;AUjiDA;EAwGU,yBC3CuB;AXw+CjC;;AUriDA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRtIuB;AFqkDjC;;AU7iDA;EAiHU,0DAA4E;AVg8CtF;;AUjjDA;EAmHQ,6BAA6B;EAC7B,qBR5IyB;EQ6IzB,cR7IyB;AF+kDjC;;AUvjDA;EA0HU,yBRlJuB;EQmJvB,qBRnJuB;EQoJvB,WC1FM;AX2hDhB;;AU7jDA;EA+HY,gEAA8D;AVk8C1E;;AUjkDA;EAqIc,0DAA4E;AVg8C1F;;AUrkDA;;EAwIU,6BAA6B;EAC7B,qBRjKuB;EQkKvB,gBAAgB;EAChB,cRnKuB;AFqmDjC;;AU7kDA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXijDhB;;AUnlDA;EAoJU,sBClHM;EDmHN,cR7KuB;AFgnDjC;;AUxlDA;EA4Jc,gEAA8D;AVg8C5E;;AU5lDA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXkkDhB;;AUpmDA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXujDrE;;AUzmDA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AX6jDrE;;AU/mDA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXmkDrE;;AUrnDA;EATE,kBR6BgB;EQ5BhB,kBRFc;AFooDhB;;AU1nDA;EANE,eRLW;AFyoDb;;AU9nDA;EAJE,kBRRc;AF8oDhB;;AUloDA;EAFE,iBRXa;AFmpDf;;AUtoDA;;EAgMI,uBRjO2B;EQkO3B,qBRvO0B;EQwO1B,gBAtNyB;EAuNzB,YAtNyB;AViqD7B;;AU9oDA;EAqMI,aAAa;EACb,WAAW;AV68Cf;;AUnpDA;EAwMI,6BAA6B;EAC7B,oBAAoB;AV+8CxB;;AUxpDA;ETvCE,kBAAkB;EAKhB,2BAAiC;EACjC,0BAAgC;ES8O9B,6BAA6B;AVk9CnC;;AU/pDA;EA+MI,4BRlP0B;EQmP1B,qBRtP0B;EQuP1B,cRzP0B;EQ0P1B,gBAAgB;EAChB,oBAAoB;AVo9CxB;;AUvqDA;EAqNI,uBR9LqB;EQ+LrB,gCAA0D;EAC1D,iCAA2D;AVs9C/D;;AUp9CA;EACE,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,2BAA2B;AVu9C7B;;AU39CA;EAMI,qBAAqB;AVy9CzB;;AU/9CA;ET3HI,mBSmIwC;AV29C5C;;AUn+CA;EAUI,sBAAsB;AV69C1B;;AUv+CA;EAYI,mBAAmB;AV+9CvB;;AU3+CA;EAlOE,kBR6BgB;EQ5BhB,kBRFc;AFmtDhB;;AUh/CA;EA7NE,kBRRc;AFytDhB;;AUp/CA;EA3NE,iBRXa;AF8tDf;;AUx/CA;EA0BQ,4BAA4B;EAC5B,yBAAyB;AVk+CjC;;AU7/CA;EA6BQ,6BAA6B;EAC7B,0BAA0B;ETzJ9B,iBS0JwC;AVo+C5C;;AUngDA;ET3HI,cS4JqC;AVs+CzC;;AUvgDA;EAoCQ,UAAU;AVu+ClB;;AU3gDA;EA0CQ,UAAU;AVq+ClB;;AU/gDA;EA4CU,UAAU;AVu+CpB;;AUnhDA;EA8CQ,YAAY;EACZ,cAAc;AVy+CtB;;AUxhDA;EAiDI,uBAAuB;AV2+C3B;;AU5hDA;EAoDQ,oBAAoB;EACpB,qBAAqB;AV4+C7B;;AUjiDA;EAuDI,yBAAyB;AV8+C7B;;AUriDA;EA0DQ,oBAAoB;EACpB,qBAAqB;AV++C7B;;AYhzDA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,WAAW;AZmzDb;;AYvzDA;EAMI,0BAA0B;EAC1B,kBV2CM;EU1CN,mBV0CM;EUzCN,WAAW;AZqzDf;;AChuDE;EW9FF;IAWI,gBAAuC;EZwzDzC;AACF;;AC5tDI;EWxGJ;IAcM,iBAAqE;EZ2zDzE;AACF;;ACntDI;EWvHJ;IAiBM,iBAAiE;EZ8zDrE;AACF;;ACnuDI;EW7GJ;IAoBM,iBAAqE;EZi0DzE;AACF;;AC1tDI;EW5HJ;IAuBM,iBAAiE;EZo0DrE;AACF;;Aa50DA;EAII,kBAAkB;Ab40DtB;;Aah1DA;;;;;;;EAcM,kBAAkB;Ab40DxB;;Aa11DA;;;;;;EAqBI,cXlC0B;EWmC1B,gBXEiB;EWDjB,kBAxC+B;Abs3DnC;;Aar2DA;EAyBI,cAAc;EACd,oBAAoB;Abg1DxB;;Aa12DA;EA4BM,eAAe;Abk1DrB;;Aa92DA;EA8BI,iBAAiB;EACjB,uBAAuB;Abo1D3B;;Aan3DA;EAiCM,oBAAoB;Abs1D1B;;Aav3DA;EAmCI,gBAAgB;EAChB,uBAAuB;Abw1D3B;;Aa53DA;EAsCM,oBAAoB;Ab01D1B;;Aah4DA;EAwCI,iBAAiB;EACjB,oBAAoB;Ab41DxB;;Aar4DA;EA2CI,kBAAkB;EAClB,uBAAuB;Ab81D3B;;Aa14DA;EA8CI,cAAc;EACd,kBAAkB;Abg2DtB;;Aa/4DA;EAiDI,4BXvD0B;EDiI1B,+BCpI0B;EW4D1B,qBAhEqC;Abk6DzC;;Aar5DA;EAqDI,4BAA4B;EZsE5B,iBYrEmC;EACnC,eAAe;Abo2DnB;;Aa35DA;EAyDM,wBAAwB;Abs2D9B;;Aa/5DA;EA2DQ,4BAA4B;Abw2DpC;;Aan6DA;EA6DQ,4BAA4B;Ab02DpC;;Aav6DA;EA+DQ,4BAA4B;Ab42DpC;;Aa36DA;EAiEQ,4BAA4B;Ab82DpC;;Aa/6DA;EAmEI,wBAAwB;EZwDxB,iBYvDmC;EACnC,eAAe;Abg3DnB;;Aar7DA;EAuEM,uBAAuB;EACvB,iBAAiB;Abk3DvB;;Aa17DA;EA0EQ,uBAAuB;Abo3D/B;;Aa97DA;EZ2HI,iBY/CmC;Abs3DvC;;Aal8DA;EA8EI,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;Abw3DtB;;Aax8DA;EAkFM,eAAe;Ab03DrB;;Aa58DA;EAoFM,kBAAkB;Ab43DxB;;Aah9DA;EAsFM,qBAAqB;Ab83D3B;;Aap9DA;EAwFM,kBAAkB;Abg4DxB;;Aax9DA;EZ2CE,iCAAiC;EYgD/B,gBAAgB;EAChB,qBAvG8B;EAwG9B,gBAAgB;EAChB,iBAAiB;Abk4DrB;;Aah+DA;;EAiGI,cAAc;Abo4DlB;;Aar+DA;EAmGI,WAAW;Abs4Df;;Aaz+DA;;EAsGM,yBX/GwB;EWgHxB,qBA/GmC;EAgHnC,qBA/GmC;EAgHnC,mBAAmB;Abw4DzB;;Aaj/DA;EA2GM,cXxHwB;AFkgE9B;;Aar/DA;EA6GQ,mBAAmB;Ab44D3B;;Aaz/DA;;EAiHQ,qBAtHsC;EAuHtC,cX/HsB;AF4gE9B;;Aa//DA;;EAsHQ,qBAzHsC;EA0HtC,cXpIsB;AFkhE9B;;AargEA;;EA6HY,sBAAsB;Ab64DlC;;Aa1gEA;EAgIM,aAAa;Ab84DnB;;Aa9gEA;EAmII,kBXhHY;AF+/DhB;;AalhEA;EAqII,kBXpHY;AFqgEhB;;AathEA;EAuII,iBXvHW;AF0gEf;;AcxiEA;EACE,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,cATsB;EAUtB,aAVsB;AdqjExB;;AchjEA;EAQI,YAZwB;EAaxB,WAbwB;AdyjE5B;;AcrjEA;EAWI,YAdyB;EAezB,WAfyB;Ad6jE7B;;Ac1jEA;EAcI,YAhBwB;EAiBxB,WAjBwB;AdikE5B;;AelkEA;EACE,cAAc;EACd,kBAAkB;AfqkEpB;;AevkEA;EAII,cAAc;EACd,YAAY;EACZ,WAAW;AfukEf;;Ae7kEA;EAQM,uBb6DmB;AF4gEzB;;AejlEA;EAUI,WAAW;Af2kEf;;AerlEA;;;;;;;;;;;;;;;;;EA+BM,YAAY;EACZ,WAAW;Af0kEjB;;Ae1mEA;EAmCI,iBAAiB;Af2kErB;;Ae9mEA;EAqCI,gBAAgB;Af6kEpB;;AelnEA;EAuCI,gBAAgB;Af+kEpB;;AetnEA;EAyCI,qBAAqB;AfilEzB;;Ae1nEA;EA2CI,gBAAgB;AfmlEpB;;Ae9nEA;EA6CI,mBAAmB;AfqlEvB;;AeloEA;EA+CI,gBAAgB;AfulEpB;;AetoEA;EAiDI,qBAAqB;AfylEzB;;Ae1oEA;EAmDI,iBAAiB;Af2lErB;;Ae9oEA;EAqDI,sBAAsB;Af6lE1B;;AelpEA;EAuDI,iBAAiB;Af+lErB;;AetpEA;EAyDI,sBAAsB;AfimE1B;;Ae1pEA;EA2DI,sBAAsB;AfmmE1B;;Ae9pEA;EA6DI,iBAAiB;AfqmErB;;AelqEA;EA+DI,iBAAiB;AfumErB;;AetqEA;EAmEM,YAAwB;EACxB,WAAuB;AfumE7B;;Ae3qEA;EAmEM,YAAwB;EACxB,WAAuB;Af4mE7B;;AehrEA;EAmEM,YAAwB;EACxB,WAAuB;AfinE7B;;AerrEA;EAmEM,YAAwB;EACxB,WAAuB;AfsnE7B;;Ae1rEA;EAmEM,YAAwB;EACxB,WAAuB;Af2nE7B;;Ae/rEA;EAmEM,YAAwB;EACxB,WAAuB;AfgoE7B;;AepsEA;EAmEM,aAAwB;EACxB,YAAuB;AfqoE7B;;AgBlsEA;EAEE,4BdE4B;EcD5B,kBdyDU;EcxDV,kBAAkB;EAIhB,sCAZoD;AhB6sExD;;AgBzsEA;EAUI,mBAAmB;EACnB,0BAA0B;AhBmsE9B;;AgB9sEA;EAaI,mBAAmB;AhBqsEvB;;AgBltEA;;EAgBI,iBdV2B;AFitE/B;;AgBvtEA;EAkBI,uBAAuB;AhBysE3B;;AgB3tEA;Ef6II,YezH4B;EAC5B,kBAAkB;EAClB,WAAW;AhB2sEf;;AgBjuEA;;;EA0BI,mBAAmB;AhB6sEvB;;AgBvuEA;EAgCM,uBd1ByB;Ec2BzB,cdxCuB;AFmvE7B;;AgB5uEA;EAgCM,yBdvCuB;EcwCvB,Yd3ByB;AF2uE/B;;AgBjvEA;EAgCM,4Bd5BwB;Ec6BxB,yBLsCe;AX+qErB;;AgBtvEA;EAgCM,yBdnCwB;EcoCxB,WLwCU;AXkrEhB;;AgB3vEA;EAgCM,yBdrB4B;EcsB5B,WLwCU;AXurEhB;;AgBhwEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX4qErE;;AgBrwEA;EAgCM,yBdnB4B;EcoB5B,WLwCU;AXisEhB;;AgB1wEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXsrErE;;AgB/wEA;EAgCM,yBdpB4B;EcqB5B,WLwCU;AX2sEhB;;AgBpxEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXgsErE;;AgBzxEA;EAgCM,yBdtB4B;EcuB5B,WLwCU;AXqtEhB;;AgB9xEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX0sErE;;AgBnyEA;EAgCM,yBdvB4B;EcwB5B,yBLsCe;AXiuErB;;AgBxyEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXotErE;;AgB7yEA;EAgCM,yBdjB2B;EckB3B,WLwCU;AXyuEhB;;AgBlzEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX8tErE;;AiBxzEA;EAEE,qBAAqB;EACrB,wBAAwB;EACxB,YAAY;EACZ,uBf0DuB;EezDvB,cAAc;EACd,YfsBW;EerBX,gBAAgB;EAChB,UAAU;EACV,WAAW;AjB0zEb;;AiBp0EA;EAYI,yBfT2B;AFq0E/B;;AiBx0EA;EAcI,yBff0B;AF60E9B;;AiB50EA;EAgBI,yBfjB0B;AFi1E9B;;AiBh1EA;EAkBI,yBfnB0B;EeoB1B,YAAY;AjBk0EhB;;AiBr1EA;EAyBQ,uBflBuB;AFk1E/B;;AiBz1EA;EA2BQ,uBfpBuB;AFs1E/B;;AiB71EA;EA6BQ,uBftBuB;AF01E/B;;AiBj2EA;EA+BQ,mEAA2F;AjBs0EnG;;AiBr2EA;EAyBQ,yBf/BqB;AF+2E7B;;AiBz2EA;EA2BQ,yBfjCqB;AFm3E7B;;AiB72EA;EA6BQ,yBfnCqB;AFu3E7B;;AiBj3EA;EA+BQ,qEAA2F;AjBs1EnG;;AiBr3EA;EAyBQ,4BfpBsB;AFo3E9B;;AiBz3EA;EA2BQ,4BftBsB;AFw3E9B;;AiB73EA;EA6BQ,4BfxBsB;AF43E9B;;AiBj4EA;EA+BQ,wEAA2F;AjBs2EnG;;AiBr4EA;EAyBQ,yBf3BsB;AF24E9B;;AiBz4EA;EA2BQ,yBf7BsB;AF+4E9B;;AiB74EA;EA6BQ,yBf/BsB;AFm5E9B;;AiBj5EA;EA+BQ,qEAA2F;AjBs3EnG;;AiBr5EA;EAyBQ,yBfb0B;AF64ElC;;AiBz5EA;EA2BQ,yBff0B;AFi5ElC;;AiB75EA;EA6BQ,yBfjB0B;AFq5ElC;;AiBj6EA;EA+BQ,qEAA2F;AjBs4EnG;;AiBr6EA;EAyBQ,yBfX0B;AF25ElC;;AiBz6EA;EA2BQ,yBfb0B;AF+5ElC;;AiB76EA;EA6BQ,yBff0B;AFm6ElC;;AiBj7EA;EA+BQ,qEAA2F;AjBs5EnG;;AiBr7EA;EAyBQ,yBfZ0B;AF46ElC;;AiBz7EA;EA2BQ,yBfd0B;AFg7ElC;;AiB77EA;EA6BQ,yBfhB0B;AFo7ElC;;AiBj8EA;EA+BQ,qEAA2F;AjBs6EnG;;AiBr8EA;EAyBQ,yBfd0B;AF87ElC;;AiBz8EA;EA2BQ,yBfhB0B;AFk8ElC;;AiB78EA;EA6BQ,yBflB0B;AFs8ElC;;AiBj9EA;EA+BQ,qEAA2F;AjBs7EnG;;AiBr9EA;EAyBQ,yBff0B;AF+8ElC;;AiBz9EA;EA2BQ,yBfjB0B;AFm9ElC;;AiB79EA;EA6BQ,yBfnB0B;AFu9ElC;;AiBj+EA;EA+BQ,qEAA2F;AjBs8EnG;;AiBr+EA;EAyBQ,yBfTyB;AFy9EjC;;AiBz+EA;EA2BQ,yBfXyB;AF69EjC;;AiB7+EA;EA6BQ,yBfbyB;AFi+EjC;;AiBj/EA;EA+BQ,qEAA2F;AjBs9EnG;;AiBr/EA;EAkCI,gCAtCkC;UAsClC,wBAtCkC;EAuClC,2CAAmC;UAAnC,mCAAmC;EACnC,yCAAiC;UAAjC,iCAAiC;EACjC,yCAAiC;UAAjC,iCAAiC;EACjC,yBfnC2B;EeoC3B,qEAA0F;EAC1F,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;AjBu9E9B;;AiBjgFA;EA4CM,6BAA6B;AjBy9EnC;;AiBrgFA;EA8CM,6BAA6B;AjB29EnC;;AiBzgFA;EAgDM,oBAAoB;AjB69E1B;;AiB7gFA;EAoDI,eftBY;AFm/EhB;;AiBjhFA;EAsDI,ef1BY;AFy/EhB;;AiBrhFA;EAwDI,cf7BW;AF8/Ef;;AiB/9EA;EACE;IACE,2BAA2B;EjBk+E7B;EiBj+EA;IACE,4BAA4B;EjBm+E9B;AACF;;AiBx+EA;EACE;IACE,2BAA2B;EjBk+E7B;EiBj+EA;IACE,4BAA4B;EjBm+E9B;AACF;;AkB/gFA;EAEE,uBhBd6B;EgBe7B,chBxB4B;AFyiF9B;;AkBphFA;;EAMI,yBhBvB0B;EgBwB1B,qBA9B6B;EA+B7B,qBA9B6B;EA+B7B,mBAAmB;AlBmhFvB;;AkB5hFA;;EAeQ,uBhB3BuB;EgB4BvB,mBhB5BuB;EgB6BvB,chB1CqB;AF4jF7B;;AkBniFA;;EAeQ,yBhBxCqB;EgByCrB,qBhBzCqB;EgB0CrB,YhB7BuB;AFsjF/B;;AkB1iFA;;EAeQ,4BhB7BsB;EgB8BtB,wBhB9BsB;EgB+BtB,yBPoCa;AX4/ErB;;AkBjjFA;;EAeQ,yBhBpCsB;EgBqCtB,qBhBrCsB;EgBsCtB,WPsCQ;AXigFhB;;AkBxjFA;;EAeQ,yBhBtB0B;EgBuB1B,qBhBvB0B;EgBwB1B,WPsCQ;AXwgFhB;;AkB/jFA;;EAeQ,yBhBpB0B;EgBqB1B,qBhBrB0B;EgBsB1B,WPsCQ;AX+gFhB;;AkBtkFA;;EAeQ,yBhBrB0B;EgBsB1B,qBhBtB0B;EgBuB1B,WPsCQ;AXshFhB;;AkB7kFA;;EAeQ,yBhBvB0B;EgBwB1B,qBhBxB0B;EgByB1B,WPsCQ;AX6hFhB;;AkBplFA;;EAeQ,yBhBxB0B;EgByB1B,qBhBzB0B;EgB0B1B,yBPoCa;AXsiFrB;;AkB3lFA;;EAeQ,yBhBlByB;EgBmBzB,qBhBnByB;EgBoBzB,WPsCQ;AX2iFhB;;AkBlmFA;;EAoBM,mBAAmB;EACnB,SAAS;AlBmlFf;;AkBxmFA;;EAuBM,yBhB9B4B;EgB+B5B,WP+BU;AXujFhB;;AkB9mFA;;;;EA2BQ,mBAAmB;AlB0lF3B;;AkBrnFA;;EA6BM,sBAAsB;AlB6lF5B;;AkB1nFA;EA+BI,chBpD0B;AFmpF9B;;AkB9nFA;EAiCM,mBAAmB;AlBimFzB;;AkBloFA;EAoCM,yBhB3C4B;EgB4C5B,WPkBU;AXglFhB;;AkBvoFA;;EAwCQ,mBAAmB;AlBomF3B;;AkB5oFA;;EA2CQ,kBPYQ;EOXR,mBAAmB;AlBsmF3B;;AkBlpFA;EA8CI,6BA5DqC;AlBoqFzC;;AkBtpFA;;EAiDM,qBApEgC;EAqEhC,chBvEwB;AFirF9B;;AkB5pFA;EAoDI,6BAhEqC;AlB4qFzC;;AkBhqFA;;EAuDM,qBAxEgC;EAyEhC,chB7EwB;AF2rF9B;;AkBtqFA;EA0DI,6BAvEqC;AlBurFzC;;AkB1qFA;;EA+DU,sBAAsB;AlBgnFhC;;AkB/qFA;;EAoEM,iBAAiB;AlBgnFvB;;AkBprFA;;EAyEU,wBAAwB;AlBgnFlC;;AkBzrFA;EA2EI,WAAW;AlBknFf;;AkB7rFA;EAgFU,yBhB7FoB;AF8sF9B;;AkBjsFA;EAqFY,yBhBlGkB;AFktF9B;;AkBrsFA;EAuFc,4BhBrGgB;AFutF9B;;AkBzsFA;;EA2FM,qBAAqB;AlBmnF3B;;AkB9sFA;EAgGU,yBhB7GoB;AF+tF9B;;AkBhnFA;EjB/DE,iCAAiC;EiBkEjC,cAAc;EACd,kBAAkB;EAClB,eAAe;AlBknFjB;;AmB7uFA;EACE,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,2BAA2B;AnBgvF7B;;AmBpvFA;EAMI,qBAAqB;AnBkvFzB;;AmBxvFA;ElBuII,mBkB/HwC;AnBovF5C;;AmB5vFA;EAUI,sBAAsB;AnBsvF1B;;AmBhwFA;EAYI,mBAAmB;AnBwvFvB;;AmBpwFA;EAgBM,ejBcO;AF0uFb;;AmBxwFA;EAmBM,kBjBUU;AF+uFhB;;AmB5wFA;EAqBI,uBAAuB;AnB2vF3B;;AmBhxFA;EAuBM,qBAAqB;EACrB,oBAAoB;AnB6vF1B;;AmBrxFA;EA0BI,yBAAyB;AnB+vF7B;;AmBzxFA;EA6BQ,mBAAmB;AnBgwF3B;;AmB7xFA;EA+BQ,eAAe;AnBkwFvB;;AmBjyFA;ElBuII,ckBrGmC;AnBmwFvC;;AmBryFA;ElBuII,ekBnGqC;EAK/B,0BAA0B;EAC1B,6BAA6B;AnBiwFvC;;AmB3yFA;EAgDU,yBAAyB;EACzB,4BAA4B;AnB+vFtC;;AmB7vFA;EACE,mBAAmB;EACnB,4BjB/C4B;EiBgD5B,kBjBQU;EiBPV,cjBvD4B;EiBwD5B,oBAAoB;EACpB,kBjB1Bc;EiB2Bd,WAAW;EACX,uBAAuB;EACvB,gBAAgB;EAChB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;AnBgwFrB;;AmB5wFA;ElBoFI,qBkBtEuC;ElBsEvC,sBkBrEyC;AnBkwF7C;;AmBjxFA;EAqBM,uBjBhEyB;EiBiEzB,cjB9EuB;AF80F7B;;AmBtxFA;EAqBM,yBjB7EuB;EiB8EvB,YjBjEyB;AFs0F/B;;AmB3xFA;EAqBM,4BjBlEwB;EiBmExB,yBRAe;AX0wFrB;;AmBhyFA;EAqBM,yBjBzEwB;EiB0ExB,WREU;AX6wFhB;;AmBryFA;EAqBM,yBjB3D4B;EiB4D5B,WREU;AXkxFhB;;AmB1yFA;EA4BU,yBRGsC;EQFtC,cRW2D;AXuwFrE;;AmB/yFA;EAqBM,yBjBzD4B;EiB0D5B,WREU;AX4xFhB;;AmBpzFA;EA4BU,yBRGsC;EQFtC,cRW2D;AXixFrE;;AmBzzFA;EAqBM,yBjB1D4B;EiB2D5B,WREU;AXsyFhB;;AmB9zFA;EA4BU,yBRGsC;EQFtC,cRW2D;AX2xFrE;;AmBn0FA;EAqBM,yBjB5D4B;EiB6D5B,WREU;AXgzFhB;;AmBx0FA;EA4BU,yBRGsC;EQFtC,cRW2D;AXqyFrE;;AmB70FA;EAqBM,yBjB7D4B;EiB8D5B,yBRAe;AX4zFrB;;AmBl1FA;EA4BU,yBRGsC;EQFtC,cRW2D;AX+yFrE;;AmBv1FA;EAqBM,yBjBvD2B;EiBwD3B,WREU;AXo0FhB;;AmB51FA;EA4BU,yBRGsC;EQFtC,cRW2D;AXyzFrE;;AmBj2FA;EAgCI,kBjBpDY;AFy3FhB;;AmBr2FA;EAkCI,ejBvDS;AF83Fb;;AmBz2FA;EAoCI,kBjB1DY;AFm4FhB;;AmB72FA;ElBoFI,sBkB7C0C;ElB6C1C,qBkB5C0C;AnB00F9C;;AmBl3FA;ElBoFI,sBkB1C0C;ElB0C1C,qBkBzC0C;AnB40F9C;;AmBv3FA;ElBoFI,sBkBvC0C;ElBuC1C,qBkBtC0C;AnB80F9C;;AmB53FA;ElBoFI,iBkB3ImB;EAyGnB,UAAU;EACV,kBAAkB;EAClB,UAAU;AnB+0Fd;;AmBn4FA;EAuDM,8BAA8B;EAC9B,WAAW;EACX,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,0DAA0D;EAC1D,+BAA+B;AnBg1FrC;;AmB94FA;EAgEM,WAAW;EACX,UAAU;AnBk1FhB;;AmBn5FA;EAmEM,WAAW;EACX,UAAU;AnBo1FhB;;AmBx5FA;EAuEM,yBAAmD;AnBq1FzD;;AmB55FA;EAyEM,yBAAoD;AnBu1F1D;;AmBh6FA;EA2EI,uBjB9DqB;AFu5FzB;;AmBv1FA;EAEI,0BAA0B;AnBy1F9B;;AoB/8FA;;EAGE,sBAAsB;ApBi9FxB;;AoBp9FA;;;;EAMI,oBAAoB;ApBq9FxB;;AoB39FA;;EAQI,iBApBmB;ApB4+FvB;;AoBh+FA;;EAUI,iBArBmB;ApBg/FvB;;AoBr+FA;;EAYI,sBAAsB;ApB89F1B;;AoB59FA;EACE,clB5B4B;EkB+B5B,elBHW;EkBIX,gBlBKmB;EkBJnB,kBAnCuB;ApBggGzB;;AoBn+FA;EAQI,cApCwB;EAqCxB,oBApCyB;ApBmgG7B;;AoBx+FA;EAWI,oBAAoB;ApBi+FxB;;AoB5+FA;EAaI,oBA7B+B;ApBggGnC;;AoBh/FA;EAkBM,elBnBO;AFq/Fb;;AoBp/FA;EAkBM,iBlBlBS;AFw/Ff;;AoBx/FA;EAkBM,elBjBO;AF2/Fb;;AoB5/FA;EAkBM,iBlBhBS;AF8/Ff;;AoBhgGA;EAkBM,kBlBfU;AFigGhB;;AoBpgGA;EAkBM,elBdO;AFogGb;;AoBxgGA;EAkBM,kBlBbU;AFugGhB;;AoBx/FA;EACE,clB/C4B;EkBkD5B,kBlBrBc;EkBsBd,gBlBjBiB;EkBkBjB,iBA7CyB;ApBsiG3B;;AoB//FA;EAQI,clBvD0B;EkBwD1B,gBlBnBiB;AF8gGrB;;AoBpgGA;EAWI,oBA/C+B;ApB4iGnC;;AoBxgGA;EAgBM,elBrCO;AFiiGb;;AoB5gGA;EAgBM,iBlBpCS;AFoiGf;;AoBhhGA;EAgBM,elBnCO;AFuiGb;;AoBphGA;EAgBM,iBlBlCS;AF0iGf;;AoBxhGA;EAgBM,kBlBjCU;AF6iGhB;;AoB5hGA;EAgBM,elBhCO;AFgjGb;;AoBhiGA;EAgBM,kBlB/BU;AFmjGhB;;AqBnlGA;EACE,cAAc;EACd,eAAe;EACf,mBAAmB;EACnB,kBAAkB;EAClB,yBAAyB;ArBslG3B;;AqBplGA;EAEE,gBnB0BiB;EmBzBjB,eAAe;EACf,gBAAgB;EAChB,UAAU;ArBslGZ;;AqB3lGA;EAOI,cAAc;EACd,eAAe;ArBwlGnB;;AqBnlGA;EACE,mBAAmB;EACnB,4BnBf4B;EmBgB5B,uBnB0CuB;EmBzCvB,oBAAoB;EACpB,kBnBKc;EmBJd,WAAW;EACX,uBAAuB;EACvB,oBAAoB;EACpB,gBAAgB;EAChB,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;ArBslGrB;;AsB5nGA,eAAA;ACuDA;EAxBE,uBrBhB6B;EqBiB7B,qBrBtB4B;EqBuB5B,kBrBoCU;EqBnCV,crB5B4B;AF8nG9B;;ACjkGI;EsB/BA,4BrB9B0B;AFkoG9B;;ACrkGI;EsB/BA,4BrB9B0B;AFsoG9B;;ACzkGI;EsB/BA,4BrB9B0B;AF0oG9B;;AC7kGI;EsB/BA,4BrB9B0B;AF8oG9B;;AuB/mGE;EAEE,qBrB9B0B;AF+oG9B;;AuBhnGE;EAIE,qBrBtB8B;EqBuB9B,kDrBvB8B;AFuoGlC;;AuB/mGE;;;;;EAEE,4BrBnC0B;EqBoC1B,wBrBpC0B;EqBqC1B,gBAAgB;EAChB,crB3C0B;AFgqG9B;;ACrmGI;;;;;EsBdE,+BrB7CwB;AFwqG9B;;AC7mGI;;;;;EsBdE,+BrB7CwB;AFgrG9B;;ACrnGI;;;;;EsBdE,+BrB7CwB;AFwrG9B;;AC7nGI;;;;;EsBdE,+BrB7CwB;AFgsG9B;;AwBlsGA;EAEE,2DtBN2B;EsBO3B,eAAe;EACf,WAAW;AxBosGb;;AwBnsGE;EACE,gBAAgB;AxBssGpB;;AwBlsGI;EACE,mBtBFyB;AFusG/B;;AwBtsGK;EAMG,mDtBPuB;AF2sG/B;;AwB1sGI;EACE,qBtBfuB;AF4tG7B;;AwB9sGK;EAMG,gDtBpBqB;AFguG7B;;AwBltGI;EACE,wBtBJwB;AFytG9B;;AwBttGK;EAMG,mDtBTsB;AF6tG9B;;AwB1tGI;EACE,qBtBXwB;AFwuG9B;;AwB9tGK;EAMG,gDtBhBsB;AF4uG9B;;AwBluGI;EACE,qBtBG4B;AFkuGlC;;AwBtuGK;EAMG,iDtBF0B;AFsuGlC;;AwB1uGI;EACE,qBtBK4B;AFwuGlC;;AwB9uGK;EAMG,kDtBA0B;AF4uGlC;;AwBlvGI;EACE,qBtBI4B;AFivGlC;;AwBtvGK;EAMG,kDtBD0B;AFqvGlC;;AwB1vGI;EACE,qBtBE4B;AF2vGlC;;AwB9vGK;EAMG,kDtBH0B;AF+vGlC;;AwBlwGI;EACE,qBtBC4B;AFowGlC;;AwBtwGK;EAMG,kDtBJ0B;AFwwGlC;;AwB1wGI;EACE,qBtBO2B;AFswGjC;;AwB9wGK;EAMG,kDtBEyB;AF0wGjC;;AwB1wGE;ErBoBA,kBDwBgB;ECvBhB,kBDPc;AFiwGhB;;AwB7wGE;ErBqBA,kBDXc;AFuwGhB;;AwB/wGE;ErBqBA,iBDda;AF4wGf;;AwBhxGE;EACE,cAAc;EACd,WAAW;AxBmxGf;;AwBlxGE;EACE,eAAe;EACf,WAAW;AxBqxGf;;AwBnxGA;EAGI,uBtB8BqB;EsB7BrB,gDAA4D;EAC5D,iDAA6D;AxBoxGjE;;AwBzxGA;EAOI,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;AxBsxGpB;;AwBpxGA;EAEE,cAAc;EACd,eAAe;EACf,eAAe;EACf,2BrB/CkE;EqBgDlE,gBAAgB;AxBsxGlB;;AwB5xGA;EAQI,gBA1DsB;EA2DtB,eA1DqB;AxBk1GzB;;AwBjyGA;EAWI,eAAe;AxB0xGnB;;AwBryGA;EAcI,YAAY;AxB2xGhB;;AyB51GA;EACE,eAAe;EACf,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;AzB+1GpB;;AyB91GE;EACE,eAAe;AzBi2GnB;;AyBh2GE;EACE,cvBF0B;AFq2G9B;;AyBl2GE;;;;;EAGE,cvBJ0B;EuBK1B,mBAAmB;AzBu2GvB;;AyBl2GA;ExB4HI,mBwBzHqC;AzBm2GzC;;A0Bt3GA;EACE,qBAAqB;EACrB,eAAe;EACf,kBAAkB;EAClB,mBAAmB;A1By3GrB;;A0B73GA;EAMI,avBHkB;AH83GtB;;A0Bj4GA;EAUM,qBxBU4B;EDgI9B,ayBzI+B;EAC7B,UAAU;A1B23GhB;;A0Bv4GA;EAeM,uBxBsDmB;EDuErB,kByB5HsC;A1B43G1C;;A0B54GA;EAmBI,eAAe;EACf,cAAc;EACd,cAAc;EACd,eAAe;EACf,aAAa;A1B63GjB;;A0Bp5GA;EAyBM,aAAa;A1B+3GnB;;A0Bx5GA;;EA4BM,wBxBjBwB;AFk5G9B;;A0B75GA;EzB4II,mByB9GwC;A1Bm4G5C;;A0Bj6GA;EAgCM,YAAY;EACZ,UAAU;A1Bq4GhB;;A0Bt6GA;EAmCQ,kBAAkB;A1Bu4G1B;;A0B16GA;EAuCM,qBxBnCwB;AF06G9B;;A0B96GA;EA6CQ,mBxBhCuB;AFq6G/B;;A0Bl7GA;EA+CQ,mBxBlCuB;AFy6G/B;;A0Bt7GA;EAkDU,qBfyDuB;AX+0GjC;;A0B17GA;EAuDU,mDxB1CqB;AFi7G/B;;A0B97GA;EA6CQ,qBxB7CqB;AFk8G7B;;A0Bl8GA;EA+CQ,qBxB/CqB;AFs8G7B;;A0Bt8GA;EAkDU,mBfyDuB;AX+1GjC;;A0B18GA;EAuDU,gDxBvDmB;AF88G7B;;A0B98GA;EA6CQ,wBxBlCsB;AFu8G9B;;A0Bl9GA;EA+CQ,wBxBpCsB;AF28G9B;;A0Bt9GA;EAkDU,qBfyDuB;AX+2GjC;;A0B19GA;EAuDU,mDxB5CoB;AFm9G9B;;A0B99GA;EA6CQ,qBxBzCsB;AF89G9B;;A0Bl+GA;EA+CQ,qBxB3CsB;AFk+G9B;;A0Bt+GA;EAkDU,qBfyDuB;AX+3GjC;;A0B1+GA;EAuDU,gDxBnDoB;AF0+G9B;;A0B9+GA;EA6CQ,qBxB3B0B;AFg+GlC;;A0Bl/GA;EA+CQ,qBxB7B0B;AFo+GlC;;A0Bt/GA;EAkDU,qBfyDuB;AX+4GjC;;A0B1/GA;EAuDU,iDxBrCwB;AF4+GlC;;A0B9/GA;EA6CQ,qBxBzB0B;AF8+GlC;;A0BlgHA;EA+CQ,qBxB3B0B;AFk/GlC;;A0BtgHA;EAkDU,qBfyDuB;AX+5GjC;;A0B1gHA;EAuDU,kDxBnCwB;AF0/GlC;;A0B9gHA;EA6CQ,qBxB1B0B;AF+/GlC;;A0BlhHA;EA+CQ,qBxB5B0B;AFmgHlC;;A0BthHA;EAkDU,qBfyDuB;AX+6GjC;;A0B1hHA;EAuDU,kDxBpCwB;AF2gHlC;;A0B9hHA;EA6CQ,qBxB5B0B;AFihHlC;;A0BliHA;EA+CQ,qBxB9B0B;AFqhHlC;;A0BtiHA;EAkDU,qBfyDuB;AX+7GjC;;A0B1iHA;EAuDU,kDxBtCwB;AF6hHlC;;A0B9iHA;EA6CQ,qBxB7B0B;AFkiHlC;;A0BljHA;EA+CQ,qBxB/B0B;AFsiHlC;;A0BtjHA;EAkDU,qBfyDuB;AX+8GjC;;A0B1jHA;EAuDU,kDxBvCwB;AF8iHlC;;A0B9jHA;EA6CQ,qBxBvByB;AF4iHjC;;A0BlkHA;EA+CQ,qBxBzByB;AFgjHjC;;A0BtkHA;EAkDU,qBfyDuB;AX+9GjC;;A0B1kHA;EAuDU,kDxBjCuB;AFwjHjC;;A0B9kHA;EvB0CE,kBDwBgB;ECvBhB,kBDPc;AF+iHhB;;A0BnlHA;EvB6CE,kBDXc;AFqjHhB;;A0BvlHA;EvB+CE,iBDda;AF0jHf;;A0B3lHA;EAkEM,qBxB5DwB;AFylH9B;;A0B/lHA;EAoEI,WAAW;A1B+hHf;;A0BnmHA;EAsEM,WAAW;A1BiiHjB;;A0BvmHA;EA0EM,aAAa;EACb,kBAAkB;EzByEpB,ayBxE+B;EAC7B,YAAY;EACZ,eAAe;A1BiiHrB;;A0B/mHA;EAgFM,kBxB5CU;AF+kHhB;;A0BnnHA;EAkFM,kBxBhDU;AFqlHhB;;A0BvnHA;EAoFM,iBxBnDS;AF0lHf;;A2B9mHA;EAEE,oBAAoB;EACpB,aAAa;EACb,2BAA2B;EAC3B,kBAAkB;A3BgnHpB;;A2BrnHA;EAYQ,uBzBZuB;EyBavB,yBAAyB;EACzB,czB3BqB;AFwoH7B;;A2B3nHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,czBjCmB;AF8oH7B;;A2BjoHA;EAwBU,yBAAyB;EACzB,+CzBzBqB;EyB0BrB,czBvCmB;AFopH7B;;A2BvoHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,czB7CmB;AF0pH7B;;A2B7oHA;EAYQ,yBzBzBqB;EyB0BrB,yBAAyB;EACzB,YzBduB;AFmpH/B;;A2BnpHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,YzBpBqB;AFypH/B;;A2BzpHA;EAwBU,yBAAyB;EACzB,4CzBtCmB;EyBuCnB,YzB1BqB;AF+pH/B;;A2B/pHA;EA8BU,uBhBgEuB;EgB/DvB,yBAAyB;EACzB,YzBhCqB;AFqqH/B;;A2BrqHA;EAYQ,4BzBdsB;EyBetB,yBAAyB;EACzB,yBhBmDa;AX0mHrB;;A2B3qHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,yBhB6CW;AXgnHrB;;A2BjrHA;EAwBU,yBAAyB;EACzB,+CzB3BoB;EyB4BpB,yBhBuCW;AXsnHrB;;A2BvrHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,yBhBiCW;AX4nHrB;;A2B7rHA;EAYQ,yBzBrBsB;EyBsBtB,yBAAyB;EACzB,WhBqDQ;AXgoHhB;;A2BnsHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsoHhB;;A2BzsHA;EAwBU,yBAAyB;EACzB,4CzBlCoB;EyBmCpB,WhByCM;AX4oHhB;;A2B/sHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkpHhB;;A2BrtHA;EAYQ,yBzBP0B;EyBQ1B,yBAAyB;EACzB,WhBqDQ;AXwpHhB;;A2B3tHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AX8pHhB;;A2BjuHA;EAwBU,yBAAyB;EACzB,6CzBpBwB;EyBqBxB,WhByCM;AXoqHhB;;A2BvuHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AX0qHhB;;A2B7uHA;EAYQ,yBzBL0B;EyBM1B,yBAAyB;EACzB,WhBqDQ;AXgrHhB;;A2BnvHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsrHhB;;A2BzvHA;EAwBU,yBAAyB;EACzB,8CzBlBwB;EyBmBxB,WhByCM;AX4rHhB;;A2B/vHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXksHhB;;A2BrwHA;EAYQ,yBzBN0B;EyBO1B,yBAAyB;EACzB,WhBqDQ;AXwsHhB;;A2B3wHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AX8sHhB;;A2BjxHA;EAwBU,yBAAyB;EACzB,8CzBnBwB;EyBoBxB,WhByCM;AXotHhB;;A2BvxHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AX0tHhB;;A2B7xHA;EAYQ,yBzBR0B;EyBS1B,yBAAyB;EACzB,WhBqDQ;AXguHhB;;A2BnyHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsuHhB;;A2BzyHA;EAwBU,yBAAyB;EACzB,8CzBrBwB;EyBsBxB,WhByCM;AX4uHhB;;A2B/yHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkvHhB;;A2BrzHA;EAYQ,yBzBT0B;EyBU1B,yBAAyB;EACzB,yBhBmDa;AX0vHrB;;A2B3zHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,yBhB6CW;AXgwHrB;;A2Bj0HA;EAwBU,yBAAyB;EACzB,8CzBtBwB;EyBuBxB,yBhBuCW;AXswHrB;;A2Bv0HA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,yBhBiCW;AX4wHrB;;A2B70HA;EAYQ,yBzBHyB;EyBIzB,yBAAyB;EACzB,WhBqDQ;AXgxHhB;;A2Bn1HA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsxHhB;;A2Bz1HA;EAwBU,yBAAyB;EACzB,8CzBhBuB;EyBiBvB,WhByCM;AX4xHhB;;A2B/1HA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkyHhB;;A2Br2HA;EAmCI,kBzBZY;AFk1HhB;;A2Bz2HA;EAqCI,kBzBhBY;AFw1HhB;;A2B72HA;EAwCQ,eAAe;A3By0HvB;;A2Bj3HA;EA0CI,iBzBtBW;AFi2Hf;;A2Br3HA;EA6CQ,eAAe;A3B40HvB;;A2Bz3HA;EAiDM,6BAA6B;EAC7B,0BAA0B;A3B40HhC;;A2B93HA;EAoDM,4BAA4B;EAC5B,yBAAyB;A3B80H/B;;A2Bn4HA;EAwDQ,kBzBFI;AFi1HZ;;A2Bv4HA;EA0DQ,aAAa;A3Bi1HrB;;A2B34HA;EA6DM,sBAAsB;A3Bk1H5B;;A2B/4HA;EA+DM,sBAAsB;EACtB,YAAY;EACZ,gBAAgB;A3Bo1HtB;;A2Br5HA;EAmEM,uBAAuB;A3Bs1H7B;;A2Bz5HA;EAqEM,aAAa;EACb,YAAY;A3Bw1HlB;;A2B95HA;EAwEQ,eAAe;A3B01HvB;;A2Bl6HA;EA2EQ,eAAe;A3B21HvB;;A2Bt6HA;EA8EQ,eAAe;A3B41HvB;;A2B16HA;EAiFQ,eAAe;A3B61HvB;;A2B96HA;EAoFQ,0BAA4C;A3B81HpD;;A2Bl7HA;EAsFQ,0BzBhCI;EyBiCJ,uBAAuB;A3Bg2H/B;;A2Bv7HA;EAyFI,uBAAuB;A3Bk2H3B;;A2B37HA;EA4FM,WAAW;A3Bm2HjB;;A2B/7HA;EA8FM,YAAY;EACZ,eAAe;A3Bq2HrB;;A2Bp8HA;EAiGI,yBAAyB;A3Bu2H7B;;A2Bx8HA;EAmGM,0BAA4C;A3By2HlD;;A2B58HA;EAqGM,0BzB/CM;EyBgDN,2BAA2B;EAC3B,SAAS;A3B22Hf;;A2Bz2HA;EACE,oBAAoB;EACpB,aAAa;EACb,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,kBAAkB;A3B42HpB;;A2Bl3HA;EASM,yBhBpB2B;EgBqB3B,czB5HwB;AFy+H9B;;A2Bv3HA;EAYM,qBhBvB2B;AXs4HjC;;A2B33HA;EAeM,yBhB1B2B;EgB2B3B,czBlIwB;AFk/H9B;;A2Bh4HA;EAkBM,qBhB7B2B;AX+4HjC;;A2Bh3HA;EACE,YAAY;EACZ,OAAO;EACP,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,WAAW;A3Bm3Hb;;A2Bj3HA;;EAGE,qBzB9I4B;EyB+I5B,kBzBpFU;EyBqFV,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;A3Bm3HrB;;A2Bj3HA;EACE,4BzBnJ4B;EyBoJ5B,czB1J4B;AF8gI9B;;A2Bl3HA;EACE,qBzB1J4B;EyB2J5B,mBA5J4B;EA6J5B,2BA5JoC;EA6JpC,cAAc;EACd,eA7JwB;EA8JxB,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;A3Bq3HzB;;A2Bn3HA;EACE,mBAAmB;EACnB,aAAa;EACb,WAAW;EACX,uBAAuB;E1BnCrB,kB0BoCmC;EACrC,UAAU;A3Bs3HZ;;A2B53HA;EAQI,eAAe;A3Bw3HnB;;A4BtiIA;EACE,c1BF4B;E0BG5B,cAAc;EACd,e1B2BW;E0B1BX,gB1BiCe;AFwgIjB;;A4B7iIA;EAMI,oBAAoB;A5B2iIxB;;A4BjjIA;EASI,kB1BsBY;AFshIhB;;A4BrjIA;EAWI,kB1BkBY;AF4hIhB;;A4BzjIA;EAaI,iB1BeW;AFiiIf;;A4B9iIA;EACE,cAAc;EACd,kB1Bcc;E0Bbd,mBAAmB;A5BijIrB;;A4BpjIA;EAOM,Y1BdyB;AF+jI/B;;A4BxjIA;EAOM,c1B3BuB;AFglI7B;;A4B5jIA;EAOM,iB1BhBwB;AFykI9B;;A4BhkIA;EAOM,c1BvBwB;AFolI9B;;A4BpkIA;EAOM,c1BT4B;AF0kIlC;;A4BxkIA;EAOM,c1BP4B;AF4kIlC;;A4B5kIA;EAOM,c1BR4B;AFilIlC;;A4BhlIA;EAOM,c1BV4B;AFulIlC;;A4BplIA;EAOM,c1BX4B;AF4lIlC;;A4BxlIA;EAOM,c1BL2B;AF0lIjC;;A4BjlIA;EAEI,sBAAsB;A5BmlI1B;;A4BrlIA;EAKI,aAAa;EACb,2BAA2B;A5BolI/B;;A4B1lIA;E3B6GI,iB2BpGwC;A5BqlI5C;;A4B9lIA;;;EAcU,gBAAgB;A5BslI1B;;A4BpmIA;;;EAuBY,4BAA4B;EAC5B,yBAAyB;A5BmlIrC;;A4B3mIA;;;EAiCY,6BAA6B;EAC7B,0BAA0B;A5BglItC;;A4BlnIA;;;;;EAyCY,UAAU;A5BilItB;;A4B1nIA;;;;;;;;;EA8CY,UAAU;A5BwlItB;;A4BtoIA;;;;;;;;;EAgDc,UAAU;A5BkmIxB;;A4BlpIA;EAkDQ,YAAY;EACZ,cAAc;A5BomItB;;A4BvpIA;EAqDM,uBAAuB;A5BsmI7B;;A4B3pIA;EAuDM,yBAAyB;A5BwmI/B;;A4B/pIA;EA0DQ,YAAY;EACZ,cAAc;A5BymItB;;A4BpqIA;EA6DI,aAAa;EACb,2BAA2B;A5B2mI/B;;A4BzqIA;EAgEM,cAAc;A5B6mIpB;;A4B7qIA;EAkEQ,gBAAgB;E3B2CpB,oB2B1C2C;A5B+mI/C;;A4BlrIA;EAqEQ,YAAY;EACZ,cAAc;A5BinItB;;A4BvrIA;EAwEM,uBAAuB;A5BmnI7B;;A4B3rIA;EA0EM,yBAAyB;A5BqnI/B;;A4B/rIA;EA4EM,eAAe;A5BunIrB;;A4BnsIA;EAgFU,sBAAsB;A5BunIhC;;A4BvsIA;EAkFQ,uBAAuB;A5BynI/B;;A4B3sIA;EAoFQ,gBAAgB;A5B2nIxB;;AC3pIE;E2BpDF;IAuFM,aAAa;E5B6nIjB;AACF;;A4B5nIA;EAEI,kBAAkB;A5B8nItB;;ACzqIE;E2ByCF;IAII,qBAAqB;E5BioIvB;AACF;;AC3qIE;E2BqCF;IAMI,aAAa;IACb,YAAY;IACZ,cAAc;I3BYd,mB2BXsC;IACtC,iBAAiB;E5BqoInB;E4B/oIF;IAYM,kB1BhGU;I0BiGV,oBAAoB;E5BsoIxB;E4BnpIF;IAeM,oBAAoB;E5BuoIxB;E4BtpIF;IAiBM,kB1BvGU;I0BwGV,oBAAoB;E5BwoIxB;E4B1pIF;IAoBM,iB1B3GS;I0B4GT,oBAAoB;E5ByoIxB;AACF;;A4BxoIA;EAEI,gBAAgB;A5B0oIpB;;ACxsIE;E2B4DF;IAII,aAAa;IACb,aAAa;IACb,YAAY;IACZ,cAAc;E5B6oIhB;E4BppIF;IASM,gBAAgB;E5B8oIpB;E4BvpIF;IAWM,cAAc;E5B+oIlB;E4B1pIF;IAaQ,YAAY;E5BgpIlB;E4B7pIF;I3BHI,oB2BkB2C;E5BipI7C;AACF;;A4BhpIA;EACE,sBAAsB;EACtB,WAAW;EACX,e1BhIW;E0BiIX,kBAAkB;EAClB,mBAAmB;A5BmpIrB;;A4BxpIA;;;EAaU,c1BxKoB;AFyzI9B;;A4B9pIA;;;EAeQ,kB1B3IQ;AFgyIhB;;A4BpqIA;;;EAiBQ,kB1B/IQ;AFwyIhB;;A4B1qIA;;;EAmBQ,iB1BlJO;AF+yIf;;A4BhrIA;EAqBM,c1B7KwB;E0B8KxB,azBnLgB;EyBoLhB,oBAAoB;EACpB,kBAAkB;EAClB,MAAM;EACN,YzBvLgB;EyBwLhB,UAAU;A5B+pIhB;;A4B1rIA;;EA+BM,mBzB5LgB;AH41ItB;;A4B/rIA;EAiCM,OAAO;A5BkqIb;;A4BnsIA;;EAqCM,oBzBlMgB;AHq2ItB;;A4BxsIA;EAuCM,QAAQ;A5BqqId;;A4B5sIA;EA2CM,6BAA6B;E3BvD/B,a2BwD+B;EAC7B,YAAY;EACZ,UAAU;A5BqqIhB;;A4BntIA;EAgDM,kB1B5KU;AFm1IhB;;A4BvtIA;EAkDM,kB1BhLU;AFy1IhB;;A4B3tIA;EAoDM,iB1BnLS;AF81If;;A6Bj4IA,qBAAA;ACSA;EAGE,e5ByBW;E4BxBX,mBAAmB;A9B03IrB;;A8B93IA;EAMI,mBAAmB;EACnB,c5BM8B;E4BL9B,aAAa;EACb,uBAAuB;EACvB,iBAduC;A9B04I3C;;A8Bt4IA;EAYM,c5BfwB;AF64I9B;;A8B14IA;EAcI,mBAAmB;EACnB,aAAa;A9Bg4IjB;;A8B/4IA;E7BqII,gB6BpHoC;A9Bk4IxC;;A8Bn5IA;EAoBQ,c5BvBsB;E4BwBtB,eAAe;EACf,oBAAoB;A9Bm4I5B;;A8Bz5IA;EAwBM,c5BxBwB;E4ByBxB,iBAAiB;A9Bq4IvB;;A8B95IA;;EA4BI,uBAAuB;EACvB,aAAa;EACb,eAAe;EACf,2BAA2B;A9Bu4I/B;;A8Bt6IA;E7BqII,kB6BnGuC;A9Bw4I3C;;A8B16IA;E7BqII,mB6BjGuC;A9B04I3C;;A8B96IA;;EAyCM,uBAAuB;A9B04I7B;;A8Bn7IA;;EA6CM,yBAAyB;A9B24I/B;;A8Bx7IA;EAgDI,kB5BnBY;AF+5IhB;;A8B57IA;EAkDI,kB5BvBY;AFq6IhB;;A8Bh8IA;EAoDI,iB5B1BW;AF06If;;A8Bp8IA;EAwDM,iBAAiB;A9Bg5IvB;;A8Bx8IA;EA2DM,iBAAiB;A9Bi5IvB;;A8B58IA;EA8DM,iBAAiB;A9Bk5IvB;;A8Bh9IA;EAiEM,iBAAiB;A9Bm5IvB;;A+Bx8IA;EACE,uB7BP6B;E6BQ7B,sBApBmB;EAqBnB,0F7BtB2B;E6BuB3B,c7BlB4B;E6BmB5B,eAAe;EACf,gBAvBoB;EAwBpB,kBAAkB;A/B28IpB;;A+Bz8IA;EACE,6BAzBwC;EA0BxC,oBAAoB;EACpB,kD7B/B2B;E6BgC3B,aAAa;A/B48If;;A+B18IA;EACE,mBAAmB;EACnB,c7BhC4B;E6BiC5B,aAAa;EACb,YAAY;EACZ,gB7BGe;E6BFf,qBAlCgC;A/B++IlC;;A+Bn9IA;EAQI,uBAAuB;A/B+8I3B;;A+B78IA;EACE,mBAAmB;EACnB,eAAe;EACf,aAAa;EACb,uBAAuB;EACvB,qBA3CgC;A/B2/IlC;;A+B98IA;EACE,cAAc;EACd,kBAAkB;A/Bi9IpB;;A+B/8IA;EACE,6BA9CyC;EA+CzC,eA9C2B;A/BggJ7B;;A+Bh9IA;EACE,6BA/CwC;EAgDxC,6B7BpD6B;E6BqD7B,oBAAoB;EACpB,aAAa;A/Bm9If;;A+Bj9IA;EACE,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,YAAY;EACZ,cAAc;EACd,uBAAuB;EACvB,gBAzD2B;A/B6gJ7B;;A+B39IA;E9B2EI,8BCnI2B;AFuhJ/B;;A+Bl9IA;EAEI,qB7BlCkB;AFs/ItB;;AgCnhJA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,mBAAmB;AhCshJrB;;AgCzhJA;EAOM,cAAc;AhCshJpB;;AgC7hJA;EAUM,UAAU;EACV,QAAQ;AhCuhJd;;AgCliJA;EAcM,YAAY;EACZ,mBA9BuB;EA+BvB,oBAAoB;EACpB,SAAS;AhCwhJf;;AgCthJA;EACE,aAAa;E/B+GX,Q+B9GqB;EACvB,gBAzC6B;EA0C7B,gBAtC2B;EAuC3B,kBAAkB;EAClB,SAAS;EACT,WApCqB;AhC6jJvB;;AgCvhJA;EACE,uB9BjC6B;E8BkC7B,kB9BoBU;E8BnBV,0F9BhD2B;E8BiD3B,sBA9CsC;EA+CtC,mBA9CmC;AhCwkJrC;;AgB5jJgB;EgBqCd,c9BhD4B;E8BiD5B,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;AhC2hJpB;;AgCzhJA;;E/BgFI,kB+B9EmC;EACrC,mBAAmB;EACnB,mBAAmB;EACnB,WAAW;AhC4hJb;;AgCjiJA;;EAOI,4B9BxD0B;E8ByD1B,c9BpEyB;AFmmJ7B;;AgCviJA;;EAUI,yB9BlD8B;E8BmD9B,WrBSY;AXyhJhB;;AgChiJA;EACE,yB9BjE6B;E8BkE7B,YAAY;EACZ,cAAc;EACd,WAAW;EACX,gBAAgB;AhCmiJlB;;AiCjnJA;EAEE,mBAAmB;EACnB,8BAA8B;AjCmnJhC;;AiCtnJA;EAKI,kB/B8DQ;AFujJZ;;AiC1nJA;EAOI,qBAAqB;EACrB,mBAAmB;AjCunJvB;;AiC/nJA;EAWI,aAAa;AjCwnJjB;;AiCnoJA;;EAcM,aAAa;AjC0nJnB;;AiCxoJA;EAgBM,aAAa;AjC4nJnB;;AiC5oJA;EAmBQ,gBAAgB;EhCyHpB,oBgC9IqC;AjCmpJzC;;AiCjpJA;EAsBQ,YAAY;AjC+nJpB;;AClkJE;EgCnFF;IAyBI,aAAa;EjCioJf;EiC1pJF;IA4BQ,YAAY;EjCioJlB;AACF;;AiChoJA;EACE,mBAAmB;EACnB,aAAa;EACb,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,uBAAuB;AjCmoJzB;;AiCzoJA;;EASI,gBAAgB;AjCqoJpB;;AC7lJE;EgCjDF;IAaM,sBA7CmC;EjCmrJvC;AACF;;AiCroJA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,cAAc;AjCwoJhB;;AiC5oJA;;EAQM,YAAY;AjCyoJlB;;AC3mJE;EgCtCF;;IhC+FI,oBgC9IqC;EjCssJvC;AACF;;AiC1oJA;EACE,mBAAmB;EACnB,2BAA2B;AjC6oJ7B;;AC3nJE;EgCpBF;IAMM,kBAAkB;EjC8oJtB;AACF;;AC7nJE;EgCxBF;IAQI,aAAa;EjCkpJf;AACF;;AiCjpJA;EACE,mBAAmB;EACnB,yBAAyB;AjCopJ3B;;ACxoJE;EgCdF;IAKI,aAAa;EjCspJf;AACF;;AkC/tJA;EACE,uBAAuB;EACvB,aAAa;EACb,mBAAmB;AlCkuJrB;;AkCruJA;EAKI,sBAAsB;AlCouJ1B;;AkCzuJA;EAOI,8ChCD0B;EgCE1B,aAAa;EACb,oBAAoB;AlCsuJxB;;AkC/uJA;;EAYM,qBAAqB;AlCwuJ3B;;AkCpvJA;EAcM,mBAAmB;AlC0uJzB;;AkCxvJA;EAgBQ,kBAAkB;AlC4uJ1B;;AkC5vJA;EAkBI,8ChCZ0B;EgCa1B,gBAtBgB;EAuBhB,iBAvBgB;AlCqwJpB;;AkClwJA;EAwBM,kBA1BsB;EA2BtB,mBA3BsB;AlCywJ5B;;AkC5uJA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,cAAc;AlC+uJhB;;AkC7uJA;EjCyGI,iBiC7IgB;AlCqxJpB;;AkC9uJA;EjCsGI,kBiC7IgB;AlCyxJpB;;AkC/uJA;EACE,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,mBAAmB;AlCkvJrB;;AChtJE;EiCtCF;IAQI,gBAAgB;ElCmvJlB;AACF;;AmCrxJA;EACE,ejCkBW;AFswJb;;AmCzxJA;EAII,kBjCgBY;AFywJhB;;AmC7xJA;EAMI,kBjCYY;AF+wJhB;;AmCjyJA;EAQI,iBjCSW;AFoxJf;;AmC3xJA;EACE,iBArB0B;AnCmzJ5B;;AmC/xJA;EAGI,kBjCqCc;EiCpCd,cjCzB0B;EiC0B1B,cAAc;EACd,qBAzBiC;AnCyzJrC;;AmCtyJA;EAQM,4BjCvBwB;EiCwBxB,cjC/BwB;AFi0J9B;;AmC3yJA;EAYM,yBjClB4B;EiCmB5B,WxByCU;AX0vJhB;;AmChzJA;ElCkHI,+BCpI0B;EiCmCxB,cAnC0B;ElCoI5B,qBkCnIkC;AnCu0JtC;;AmClyJA;EACE,cjCzC4B;EiC0C5B,iBApC2B;EAqC3B,qBApC+B;EAqC/B,yBAAyB;AnCqyJ3B;;AmCzyJA;EAMI,eAtCoB;AnC60JxB;;AmC7yJA;EAQI,kBAxCoB;AnCi1JxB;;AoC50JA;EAEE,4BlCV4B;EkCW5B,kBlC6CU;EkC5CV,elCYW;AFk0Jb;;AoCl1JA;EAMI,mBAAmB;ApCg1JvB;;AoCt1JA;EAQI,mBAAmB;EACnB,0BAA0B;ApCk1J9B;;AoC31JA;EAYI,kBlCKY;AF80JhB;;AoC/1JA;EAcI,kBlCCY;AFo1JhB;;AoCn2JA;EAgBI,iBlCFW;AFy1Jf;;AoCv2JA;EAsCM,uBAH+C;ApCw0JrD;;AoC32JA;EAwCQ,uBlC9CuB;EkC+CvB,clC5DqB;AFm4J7B;;AoCh3JA;EA2CQ,mBlCjDuB;AF03J/B;;AoCp3JA;EAsCM,yBAH+C;ApCq1JrD;;AoCx3JA;EAwCQ,yBlC3DqB;EkC4DrB,YlC/CuB;AFm4J/B;;AoC73JA;EA2CQ,qBlC9DqB;AFo5J7B;;AoCj4JA;EAsCM,yBAH+C;ApCk2JrD;;AoCr4JA;EAwCQ,4BlChDsB;EkCiDtB,yBzBkBa;AX+0JrB;;AoC14JA;EA2CQ,wBlCnDsB;AFs5J9B;;AoC94JA;EAsCM,yBAH+C;ApC+2JrD;;AoCl5JA;EAwCQ,yBlCvDsB;EkCwDtB,WzBoBQ;AX01JhB;;AoCv5JA;EA2CQ,qBlC1DsB;AF06J9B;;AoC35JA;EAsCM,yBzB8B0C;AX21JhD;;AoC/5JA;EAwCQ,yBlCzC0B;EkC0C1B,WzBoBQ;AXu2JhB;;AoCp6JA;EA2CQ,qBlC5C0B;EkC6C1B,czBiC6D;AX41JrE;;AoCz6JA;EAsCM,yBzB8B0C;AXy2JhD;;AoC76JA;EAwCQ,yBlCvC0B;EkCwC1B,WzBoBQ;AXq3JhB;;AoCl7JA;EA2CQ,qBlC1C0B;EkC2C1B,czBiC6D;AX02JrE;;AoCv7JA;EAsCM,yBzB8B0C;AXu3JhD;;AoC37JA;EAwCQ,yBlCxC0B;EkCyC1B,WzBoBQ;AXm4JhB;;AoCh8JA;EA2CQ,qBlC3C0B;EkC4C1B,czBiC6D;AXw3JrE;;AoCr8JA;EAsCM,yBzB8B0C;AXq4JhD;;AoCz8JA;EAwCQ,yBlC1C0B;EkC2C1B,WzBoBQ;AXi5JhB;;AoC98JA;EA2CQ,qBlC7C0B;EkC8C1B,czBiC6D;AXs4JrE;;AoCn9JA;EAsCM,yBzB8B0C;AXm5JhD;;AoCv9JA;EAwCQ,yBlC3C0B;EkC4C1B,yBzBkBa;AXi6JrB;;AoC59JA;EA2CQ,qBlC9C0B;EkC+C1B,czBiC6D;AXo5JrE;;AoCj+JA;EAsCM,yBzB8B0C;AXi6JhD;;AoCr+JA;EAwCQ,yBlCrCyB;EkCsCzB,WzBoBQ;AX66JhB;;AoC1+JA;EA2CQ,qBlCxCyB;EkCyCzB,czBiC6D;AXk6JrE;;AoCj8JA;EACE,mBAAmB;EACnB,yBlC9D4B;EkC+D5B,0BAAgE;EAChE,WzBWc;EyBVd,aAAa;EACb,gBlC7Be;EkC8Bf,8BAA8B;EAC9B,iBAAiB;EACjB,mBAtEiC;EAuEjC,kBAAkB;ApCo8JpB;;AoC98JA;EAYI,YAAY;EACZ,cAAc;EnC8Dd,oBmC7DsC;ApCs8J1C;;AoCp9JA;EAgBI,eAjEgC;EAkEhC,yBAAyB;EACzB,0BAA0B;ApCw8J9B;;AoCt8JA;EACE,qBlC9E4B;EkC+E5B,kBlCpBU;EkCqBV,mBAAmB;EACnB,uBAjFmC;EAkFnC,clCrF4B;EkCsF5B,qBAjFiC;ApC0hKnC;;AoC/8JA;;EASI,uBlCjF2B;AF4hK/B;;AoCp9JA;EAWI,6BAlFgD;ApC+hKpD;;AqC/gKA;EAEE,mBAAmB;EACnB,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,gBAAgB;EAChB,eAAe;EACf,WAxCU;ArCyjKZ;;AqCzhKA;EAWI,aAAa;ArCkhKjB;;AqChhKA;EAEE,wCnC7C2B;AF+jK7B;;AqChhKA;;EAEE,cA9CgC;EA+ChC,+BAA0D;EAC1D,cAAc;EACd,kBAAkB;EAClB,WAAW;ArCmhKb;;ACjgKE;EoCxBF;;IASI,cAAc;IACd,8BAA0D;IAC1D,YAxDuB;ErC8kKzB;AACF;;AqCrhKA;EAEE,gBAAgB;EAChB,YAxD2B;EAyD3B,eAAe;EpCoFb,UoC5IoB;EA0DtB,SAzDoB;EA0DpB,WA5D2B;ArCmlK7B;;AqCrhKA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAAgD;EAChD,gBAAgB;EAChB,uBAAuB;ArCwhKzB;;AqCthKA;;EAEE,mBAAmB;EACnB,4BnCpE4B;EmCqE5B,aAAa;EACb,cAAc;EACd,2BAA2B;EAC3B,aApE4B;EAqE5B,kBAAkB;ArCyhKpB;;AqCvhKA;EACE,gCnC/E4B;EmCgF5B,2BnCpBgB;EmCqBhB,4BnCrBgB;AF+iKlB;;AqCxhKA;EACE,cnCxF4B;EmCyF5B,YAAY;EACZ,cAAc;EACd,iBnC9Da;EmC+Db,cA7E8B;ArCwmKhC;;AqCzhKA;EACE,8BnC/BgB;EmCgChB,+BnChCgB;EmCiChB,6BnC7F4B;AFynK9B;;AqC/hKA;EpC0CI,kBoCpCuC;ArC6hK3C;;AqC3hKA;EpC9CE,iCAAiC;EoCgDjC,uBnC/F6B;EmCgG7B,YAAY;EACZ,cAAc;EACd,cAAc;EACd,aAtF4B;ArConK9B;;AsCxlKA;EACE,uBpC1C6B;EoC2C7B,mBAvDqB;EAwDrB,kBAAkB;EAClB,WAtDW;AtCipKb;;AsC/lKA;EASM,uBpClDyB;EoCmDzB,cpChEuB;AF0pK7B;;AsCpmKA;;EAcU,cpCpEmB;AF+pK7B;;AsCzmKA;;;;EAoBY,yB3BiCqB;E2BhCrB,cpC3EiB;AFuqK7B;;AsCjnKA;EAwBY,qBpC9EiB;AF2qK7B;;AsCrnKA;EA0BQ,cpChFqB;AF+qK7B;;ACxmKE;EqCjBF;;;;IAgCY,cpCtFiB;EFurK3B;EsCjoKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,cpC7Fe;EFosK3B;EsC9oKF;;IA0Cc,qBpChGe;EFwsK3B;EsClpKF;;;IA8CU,yB3BOuB;I2BNvB,cpCrGmB;EF8sK3B;EsCxpKF;IAmDc,uBpC5FiB;IoC6FjB,cpC1Ge;EFktK3B;AACF;;AsC7pKA;EASM,yBpC/DuB;EoCgEvB,YpCnDyB;AF2sK/B;;AsClqKA;;EAcU,YpCvDqB;AFgtK/B;;AsCvqKA;;;;EAoBY,uB3BiCqB;E2BhCrB,YpC9DmB;AFwtK/B;;AsC/qKA;EAwBY,mBpCjEmB;AF4tK/B;;AsCnrKA;EA0BQ,YpCnEuB;AFguK/B;;ACtqKE;EqCjBF;;;;IAgCY,YpCzEmB;EFwuK7B;EsC/rKF;;;;;;;;;;IAsCc,uB3BemB;I2BdnB,YpChFiB;EFqvK7B;EsC5sKF;;IA0Cc,mBpCnFiB;EFyvK7B;EsChtKF;;;IA8CU,uB3BOuB;I2BNvB,YpCxFqB;EF+vK7B;EsCttKF;IAmDc,yBpCzGe;IoC0Gf,YpC7FiB;EFmwK7B;AACF;;AsC3tKA;EASM,4BpCpDwB;EoCqDxB,yB3Bce;AXwsKrB;;AsChuKA;;EAcU,yB3BUW;AX6sKrB;;AsCruKA;;;;EAoBY,yB3BiCqB;E2BhCrB,yB3BGS;AXqtKrB;;AsC7uKA;EAwBY,gC3BAS;AXytKrB;;AsCjvKA;EA0BQ,yB3BFa;AX6tKrB;;ACpuKE;EqCjBF;;;;IAgCY,yB3BRS;EXquKnB;EsC7vKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,yB3BfO;EXkvKnB;EsC1wKF;;IA0Cc,gC3BlBO;EXsvKnB;EsC9wKF;;;IA8CU,yB3BOuB;I2BNvB,yB3BvBW;EX4vKnB;EsCpxKF;IAmDc,4BpC9FgB;IoC+FhB,yB3B5BO;EXgwKnB;AACF;;AsCzxKA;EASM,yBpC3DwB;EoC4DxB,W3BgBU;AXowKhB;;AsC9xKA;;EAcU,W3BYM;AXywKhB;;AsCnyKA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXixKhB;;AsC3yKA;EAwBY,kB3BEI;AXqxKhB;;AsC/yKA;EA0BQ,W3BAQ;AXyxKhB;;AClyKE;EqCjBF;;;;IAgCY,W3BNI;EXiyKd;EsC3zKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX8yKd;EsCx0KF;;IA0Cc,kB3BhBE;EXkzKd;EsC50KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXwzKd;EsCl1KF;IAmDc,yBpCrGgB;IoCsGhB,W3B1BE;EX4zKd;AACF;;AsCv1KA;EASM,yBpC7C4B;EoC8C5B,W3BgBU;AXk0KhB;;AsC51KA;;EAcU,W3BYM;AXu0KhB;;AsCj2KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX+0KhB;;AsCz2KA;EAwBY,kB3BEI;AXm1KhB;;AsC72KA;EA0BQ,W3BAQ;AXu1KhB;;ACh2KE;EqCjBF;;;;IAgCY,W3BNI;EX+1Kd;EsCz3KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX42Kd;EsCt4KF;;IA0Cc,kB3BhBE;EXg3Kd;EsC14KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXs3Kd;EsCh5KF;IAmDc,yBpCvFoB;IoCwFpB,W3B1BE;EX03Kd;AACF;;AsCr5KA;EASM,yBpC3C4B;EoC4C5B,W3BgBU;AXg4KhB;;AsC15KA;;EAcU,W3BYM;AXq4KhB;;AsC/5KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX64KhB;;AsCv6KA;EAwBY,kB3BEI;AXi5KhB;;AsC36KA;EA0BQ,W3BAQ;AXq5KhB;;AC95KE;EqCjBF;;;;IAgCY,W3BNI;EX65Kd;EsCv7KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX06Kd;EsCp8KF;;IA0Cc,kB3BhBE;EX86Kd;EsCx8KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXo7Kd;EsC98KF;IAmDc,yBpCrFoB;IoCsFpB,W3B1BE;EXw7Kd;AACF;;AsCn9KA;EASM,yBpC5C4B;EoC6C5B,W3BgBU;AX87KhB;;AsCx9KA;;EAcU,W3BYM;AXm8KhB;;AsC79KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX28KhB;;AsCr+KA;EAwBY,kB3BEI;AX+8KhB;;AsCz+KA;EA0BQ,W3BAQ;AXm9KhB;;AC59KE;EqCjBF;;;;IAgCY,W3BNI;EX29Kd;EsCr/KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXw+Kd;EsClgLF;;IA0Cc,kB3BhBE;EX4+Kd;EsCtgLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXk/Kd;EsC5gLF;IAmDc,yBpCtFoB;IoCuFpB,W3B1BE;EXs/Kd;AACF;;AsCjhLA;EASM,yBpC9C4B;EoC+C5B,W3BgBU;AX4/KhB;;AsCthLA;;EAcU,W3BYM;AXigLhB;;AsC3hLA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXygLhB;;AsCniLA;EAwBY,kB3BEI;AX6gLhB;;AsCviLA;EA0BQ,W3BAQ;AXihLhB;;AC1hLE;EqCjBF;;;;IAgCY,W3BNI;EXyhLd;EsCnjLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXsiLd;EsChkLF;;IA0Cc,kB3BhBE;EX0iLd;EsCpkLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXgjLd;EsC1kLF;IAmDc,yBpCxFoB;IoCyFpB,W3B1BE;EXojLd;AACF;;AsC/kLA;EASM,yBpC/C4B;EoCgD5B,yB3Bce;AX4jLrB;;AsCplLA;;EAcU,yB3BUW;AXikLrB;;AsCzlLA;;;;EAoBY,yB3BiCqB;E2BhCrB,yB3BGS;AXykLrB;;AsCjmLA;EAwBY,gC3BAS;AX6kLrB;;AsCrmLA;EA0BQ,yB3BFa;AXilLrB;;ACxlLE;EqCjBF;;;;IAgCY,yB3BRS;EXylLnB;EsCjnLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,yB3BfO;EXsmLnB;EsC9nLF;;IA0Cc,gC3BlBO;EX0mLnB;EsCloLF;;;IA8CU,yB3BOuB;I2BNvB,yB3BvBW;EXgnLnB;EsCxoLF;IAmDc,yBpCzFoB;IoC0FpB,yB3B5BO;EXonLnB;AACF;;AsC7oLA;EASM,yBpCzC2B;EoC0C3B,W3BgBU;AXwnLhB;;AsClpLA;;EAcU,W3BYM;AX6nLhB;;AsCvpLA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXqoLhB;;AsC/pLA;EAwBY,kB3BEI;AXyoLhB;;AsCnqLA;EA0BQ,W3BAQ;AX6oLhB;;ACtpLE;EqCjBF;;;;IAgCY,W3BNI;EXqpLd;EsC/qLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXkqLd;EsC5rLF;;IA0Cc,kB3BhBE;EXsqLd;EsChsLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EX4qLd;EsCtsLF;IAmDc,yBpCnFmB;IoCoFnB,W3B1BE;EXgrLd;AACF;;AsC3sLA;EAsDI,oBAAoB;EACpB,aAAa;EACb,mBA7GmB;EA8GnB,WAAW;AtCypLf;;AsCltLA;EA2DI,gCpCtG0B;AFiwL9B;;AsCttLA;EALE,OAAO;EACP,eAAe;EACf,QAAQ;EACR,WA/CiB;AtC8wLnB;;AsC7tLA;EAgEI,SAAS;AtCiqLb;;AsCjuLA;EAkEM,iCpC7GwB;AFgxL9B;;AsCruLA;EAoEI,MAAM;AtCqqLV;;AsCnqLA;;EAGI,oBA9HmB;AtCmyLvB;;AsCxqLA;;EAKI,uBAhImB;AtCwyLvB;;AsCtqLA;;EAEE,oBAAoB;EACpB,aAAa;EACb,cAAc;EACd,mBAvIqB;AtCgzLvB;;AsCvqLA;EAIM,6BAA6B;AtCuqLnC;;AsCrqLA;ErCpFE,iCAAiC;EqCsFjC,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AtCwqLpB;;AsCtqLA;EACE,cpClJ4B;EDoB5B,eAAe;EACf,cAAc;EACd,eqC1BqB;ErC2BrB,kBAAkB;EAClB,cqC5BqB;ErC2InB,kBqCakC;AtC6qLtC;;ACxyLE;EACE,8BAA8B;EAC9B,cAAc;EACd,WAAW;EACX,qBAAqB;EACrB,kBAAkB;EAClB,wBAAwB;EACxB,yBCiCQ;EDhCR,yDAAyD;EACzD,oCC0Ba;EDzBb,WAAW;AD2yLf;;AC1yLI;EACE,oBAAoB;AD6yL1B;;AC5yLI;EACE,oBAAoB;AD+yL1B;;AC9yLI;EACE,oBAAoB;ADizL1B;;AChzLE;EACE,qCAAiC;ADmzLrC;;AC/yLM;EACE,wCAAwC;ADkzLhD;;ACjzLM;EACE,UAAU;ADozLlB;;ACnzLM;EACE,0CAA0C;ADszLlD;;AsCptLA;EACE,aAAa;AtCutLf;;AsCrtLA;;EAEE,cpC3J4B;EoC4J5B,cAAc;EACd,gBAAgB;EAChB,uBAAuB;EACvB,kBAAkB;AtCwtLpB;;AsC9tLA;;EASM,qBAAqB;EACrB,sBAAsB;AtC0tL5B;;AsCxtLA;;EAEE,eAAe;AtC2tLjB;;AsC7tLA;;;;;EAOI,yBpCrK0B;EoCsK1B,cpC9J8B;AF43LlC;;AsC5tLA;EACE,YAAY;EACZ,cAAc;AtC+tLhB;;AsCjuLA;EAII,mBA5KgC;AtC64LpC;;AsCruLA;EAMI,UAAU;AtCmuLd;;AsCzuLA;EAQI,YAAY;EACZ,cAAc;AtCquLlB;;AsC9uLA;EAWI,oCAAoC;EACpC,mBA/LmB;EAgMnB,kCAAkC;AtCuuLtC;;AsCpvLA;EAgBM,6BApLyC;EAqLzC,4BpCjL4B;AFy5LlC;;AsCzvLA;EAmBM,6BApL0C;EAqL1C,4BpCpL4B;EoCqL5B,0BApLuC;EAqLvC,wBApLqC;EAqLrC,cpCvL4B;EoCwL5B,kCAAwE;AtC0uL9E;;AsCxuLA;EACE,YAAY;EACZ,cAAc;AtC2uLhB;;AsCzuLA;ErCtEI,mBqCuEoC;AtC4uLxC;;AsC7uLA;EAII,qBpClM8B;EoCmM9B,oBAAoB;ErCnEpB,aqCoE6B;AtC6uLjC;;AsC3uLA;EACE,mBAAmB;EACnB,sBAAsB;EACtB,mBAAmB;AtC8uLrB;;AsCjvLA;EAKI,oBAAoB;EACpB,qBAAqB;AtCgvLzB;;AsC9uLA;EACE,4BpCxN4B;EoCyN5B,YAAY;EACZ,aAAa;EACb,WA9LyB;EA+LzB,gBAAgB;AtCivLlB;;AC74LE;EqCrBF;IAqLI,cAAc;EtCkvLhB;EsCjvLA;;IAGI,mBAAmB;IACnB,aAAa;EtCkvLjB;EsCjvLA;IAEI,aAAa;EtCkvLjB;EsC10LF;IA0FI,uBpCxO2B;IoCyO3B,4CpCtPyB;IoCuPzB,iBAAiB;EtCmvLnB;EsCtvLA;IAKI,cAAc;EtCovLlB;EsClvLA;IA1MA,OAAO;IACP,eAAe;IACf,QAAQ;IACR,WA/CiB;EtC8+LjB;EsCxvLA;IAKI,SAAS;EtCsvLb;EsC3vLA;IAOM,4CpClQqB;EFy/L3B;EsC9vLA;IASI,MAAM;EtCwvLV;EsCjwLA;IrC/LA,iCAAiC;IqC6M3B,iCAA2C;IAC3C,cAAc;EtCuvLpB;EsCtvLA;;IAGI,oBA7QiB;EtCogMrB;EsC1vLA;;IAKI,uBA/QiB;EtCwgMrB;AACF;;ACn8LE;EqC4MA;;;;IAIE,oBAAoB;IACpB,aAAa;EtC2vLf;EsC79LF;IAoOI,mBAzRmB;EtCqhMrB;EsC7vLA;IAGI,kBAzR0B;EtCshM9B;EsChwLA;;IAMM,mBAAmB;EtC8vLzB;EsCpwLA;;IASM,kBpC/NI;EF89LV;EsCxwLA;;;;IAgBQ,wCAAwC;EtC8vLhD;EsC9wLA;IAuBU,wCAAwC;EtC0vLlD;EsCjxLA;IA4BU,4BpC1SkB;IoC2SlB,cpCtTiB;EF8iM3B;EsCrxLA;IA+BU,4BpC7SkB;IoC8SlB,cpCrSsB;EF8hMhC;EsC55LF;IAqKI,aAAa;EtC0vLf;EsCv5LF;;IAgKI,mBAAmB;IACnB,aAAa;EtC2vLf;EsCt4LF;IA8IM,oBAAoB;EtC2vLxB;EsC7vLA;IAKM,oDAAoD;EtC2vL1D;EsChwLA;IAOM,gCpC/TsB;IoCgUtB,0BAAkE;IAClE,gBAAgB;IAChB,YAAY;IACZ,4CpC3UqB;IoC4UrB,SAAS;EtC4vLf;EsCxwLA;IAkBM,cAAc;EtCyvLpB;EsCxvLM;IAEE,UAAU;IACV,oBAAoB;IACpB,wBAAwB;EtCyvLhC;EsCr7LF;IA8LI,YAAY;IACZ,cAAc;EtC0vLhB;EsCzvLA;IACE,2BAA2B;IrChN3B,iBqCiNoC;EtC2vLtC;EsC1vLA;IACE,yBAAyB;IrCnNzB,kBqCoNoC;EtC4vLtC;EsCl4LF;IAwII,uBpCrV2B;IoCsV3B,8BpC/Rc;IoCgSd,+BpChSc;IoCiSd,6BpC7V0B;IoC8V1B,2CpCtWyB;IoCuWzB,aAAa;IACb,mBAAmB;IrCpNnB,QqCqNuB;IACvB,eAAe;IACf,kBAAkB;IAClB,SAAS;IACT,WAhVkB;EtC6kMpB;EsCh5LF;IAqJM,sBAAsB;IACtB,mBAAmB;EtC8vLvB;EsC7wLA;IrCrNE,kBqCsOuC;EtC+vLzC;EsChxLA;IAoBM,4BpC1WsB;IoC2WtB,cpCtXqB;EFqnM3B;EsCpxLA;IAuBM,4BpC7WsB;IoC8WtB,cpCrW0B;EFqmMhC;EsC/vLE;IAEE,kBpCxTY;IoCyTZ,gBAAgB;IAChB,4EpC9XuB;IoC+XvB,cAAc;IACd,UAAU;IACV,oBAAoB;IACpB,wBAA8C;IAC9C,2BAA2B;IAC3B,yBpC9TM;IoC+TN,uCAAuC;EtCgwL3C;EsCpyLA;IAsCI,UAAU;IACV,QAAQ;EtCiwLZ;EsCv6LF;IAwKI,cAAc;EtCkwLhB;EsCjwLA;;IrC/PE,sBqCkQyC;EtCkwL3C;EsCrwLA;;IrC/PE,qBqCoQyC;EtCowL3C;EsClwLA;IAjWA,OAAO;IACP,eAAe;IACf,QAAQ;IACR,WA/CiB;EtCqpMjB;EsCxwLA;IAKI,SAAS;EtCswLb;EsC3wLA;IAOM,4CpCzZqB;EFgqM3B;EsC9wLA;IASI,MAAM;EtCwwLV;EsCvwLA;;IAGI,oBA9ZiB;EtCsqMrB;EsC3wLA;;IAKI,uBAhaiB;EtC0qMrB;EsC/wLA;;IAOI,oBAA4D;EtC4wLhE;EsCnxLA;;IASI,uBAA+D;EtC8wLnE;EsC5wLA;;IAGI,cpC1auB;EFurM3B;EsChxLA;;IAKI,6BAja2C;EtCgrM/C;EsC9wLA;IAKM,yBpCtasB;EFkrM5B;AACF;;AsCzwLA;EAEI,iCAA2C;AtC2wL/C;;AuCtqMA;EAEE,erCIW;EqCHX,gBAhC0B;AvCwsM5B;;AuC3qMA;EAMI,kBrCCY;AFwqMhB;;AuC/qMA;EAQI,kBrCHY;AF8qMhB;;AuCnrMA;EAUI,iBrCNW;AFmrMf;;AuCvrMA;;EAcM,iBAAiB;EACjB,kBAAkB;EAClB,uBrCwBmB;AFspMzB;;AuC9rMA;EAkBM,uBrCsBmB;AF0pMzB;;AuC9qMA;;EAEE,mBAAmB;EACnB,aAAa;EACb,uBAAuB;EACvB,kBAAkB;AvCirMpB;;AuC/qMA;;;;EAME,cA3D6B;EA4D7B,uBAAuB;EACvB,eA5D8B;EA6D9B,mBA5DkC;EA6DlC,oBA5DmC;EA6DnC,kBAAkB;AvCgrMpB;;AuC9qMA;;;EAGE,qBrChE4B;EqCiE5B,crCrE4B;EqCsE5B,gBpCvEoB;AHwvMtB;;AuCtrMA;;;EAOI,qBrCrE0B;EqCsE1B,crCzE0B;AF8vM9B;;AuC7rMA;;;EAUI,qBrC3D8B;AFovMlC;;AuCnsMA;;;EAYI,iDrCjFyB;AF8wM7B;;AuCzsMA;;;EAcI,yBrC3E0B;EqC4E1B,qBrC5E0B;EqC6E1B,gBAAgB;EAChB,crChF0B;EqCiF1B,YAAY;AvCisMhB;;AuC/rMA;;EAEE,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;AvCksMrB;;AuChsMA;EAEI,yBrC7E8B;EqC8E9B,qBrC9E8B;EqC+E9B,W5BnBY;AXqtMhB;;AuChsMA;EACE,crC/F4B;EqCgG5B,oBAAoB;AvCmsMtB;;AuCjsMA;EACE,eAAe;AvCosMjB;;AC/tME;EsClDF;IAiFI,eAAe;EvCqsMjB;EuC1tMF;;IAwBI,YAAY;IACZ,cAAc;EvCssMhB;EuCrsMA;IAEI,YAAY;IACZ,cAAc;EvCssMlB;AACF;;AC1uME;EsCsBF;IAiBI,YAAY;IACZ,cAAc;IACd,2BAA2B;IAC3B,QAAQ;EvCwsMV;EuCvsMA;IACE,QAAQ;EvCysMV;EuCxsMA;IACE,QAAQ;EvC0sMV;EuC9yMF;IAsGI,8BAA8B;EvC2sMhC;EuC5sMA;IAIM,QAAQ;EvC2sMd;EuC/sMA;IAMM,uBAAuB;IACvB,QAAQ;EvC4sMd;EuCntMA;IASM,QAAQ;EvC6sMd;EuCttMA;IAYM,QAAQ;EvC6sMd;EuCztMA;IAcM,QAAQ;EvC8sMd;EuC5tMA;IAgBM,yBAAyB;IACzB,QAAQ;EvC+sMd;AACF;;AwCv0MA;EACE,kBtCuCgB;EsCtChB,0FtC9B2B;EsC+B3B,etCIW;AFs0Mb;;AwC70MA;EAKI,qBtCakB;AF+zMtB;;AwCj1MA;EAYQ,uBtC3BuB;EsC4BvB,ctCzCqB;AFk3M7B;;AwCt1MA;EAeQ,0BtC9BuB;AFy2M/B;;AwC11MA;EAiBQ,YtChCuB;AF62M/B;;AwC91MA;EAYQ,yBtCxCqB;EsCyCrB,YtC5BuB;AFk3M/B;;AwCn2MA;EAeQ,4BtC3CqB;AFm4M7B;;AwCv2MA;EAiBQ,ctC7CqB;AFu4M7B;;AwC32MA;EAYQ,4BtC7BsB;EsC8BtB,yB7BqCa;AX8zMrB;;AwCh3MA;EAeQ,+BtChCsB;AFq4M9B;;AwCp3MA;EAiBQ,iBtClCsB;AFy4M9B;;AwCx3MA;EAYQ,yBtCpCsB;EsCqCtB,W7BuCQ;AXy0MhB;;AwC73MA;EAeQ,4BtCvCsB;AFy5M9B;;AwCj4MA;EAiBQ,ctCzCsB;AF65M9B;;AwCr4MA;EAYQ,yBtCtB0B;EsCuB1B,W7BuCQ;AXs1MhB;;AwC14MA;EAeQ,4BtCzB0B;AFw5MlC;;AwC94MA;EAiBQ,ctC3B0B;AF45MlC;;AwCl5MA;EAYQ,yBtCpB0B;EsCqB1B,W7BuCQ;AXm2MhB;;AwCv5MA;EAeQ,4BtCvB0B;AFm6MlC;;AwC35MA;EAiBQ,ctCzB0B;AFu6MlC;;AwC/5MA;EAYQ,yBtCrB0B;EsCsB1B,W7BuCQ;AXg3MhB;;AwCp6MA;EAeQ,4BtCxB0B;AFi7MlC;;AwCx6MA;EAiBQ,ctC1B0B;AFq7MlC;;AwC56MA;EAYQ,yBtCvB0B;EsCwB1B,W7BuCQ;AX63MhB;;AwCj7MA;EAeQ,4BtC1B0B;AFg8MlC;;AwCr7MA;EAiBQ,ctC5B0B;AFo8MlC;;AwCz7MA;EAYQ,yBtCxB0B;EsCyB1B,yB7BqCa;AX44MrB;;AwC97MA;EAeQ,4BtC3B0B;AF88MlC;;AwCl8MA;EAiBQ,ctC7B0B;AFk9MlC;;AwCt8MA;EAYQ,yBtClByB;EsCmBzB,W7BuCQ;AXu5MhB;;AwC38MA;EAeQ,4BtCrByB;AFq9MjC;;AwC/8MA;EAiBQ,ctCvByB;AFy9MjC;;AwCh8MA;;EAGI,gCtCzC2B;AF2+M/B;;AwCh8MA;EACE,yBtC5C6B;EsC6C7B,0BAA8C;EAC9C,ctCnD4B;EsCoD5B,iBAhDyB;EAiDzB,gBtCfe;EsCgBf,iBArD8B;EAsD9B,mBArDgC;AxCw/MlC;;AwCj8MA;EACE,qBAAqB;EACrB,aAAa;EACb,kBArD4B;EAsD5B,uBAAuB;AxCo8MzB;;AwCx8MA;EAMI,gCtC3D0B;EsC4D1B,mBAAmB;EACnB,cAAc;AxCs8MlB;;AwC98MA;EAWM,4BtCnEwB;EsCoExB,ctCrEwB;AF4gN9B;;AwCr8MA;EAEI,ctCxE0B;AF+gN9B;;AwCz8MA;EAIM,ctC3D4B;AFogNlC;;AwCv8MA;EACE,mBAAmB;EACnB,ctC/E4B;EsCgF5B,aAAa;EACb,2BAA2B;EAC3B,qBAAqB;AxC08MvB;;AwC/8MA;EvC2DI,mBuCpDsC;AxC48M1C;;AwCn9MA;EASI,YAAY;EACZ,cAAc;EACd,WAAW;AxC88Mf;;AwCz9MA;EAaI,eAAe;AxCg9MnB;;AwC79MA;EAeI,0BtC5E8B;EsC6E9B,ctC7F0B;AF+iN9B;;AwCl+MA;EAkBM,ctC/E4B;AFmiNlC;;AwCt+MA;EAoBI,8BtCjCc;EsCkCd,+BtClCc;AFw/MlB;;AwCp9MA;;EAEE,eAAe;AxCu9MjB;;AwCz9MA;;EAII,4BtCjG0B;AF2jN9B;;AwCx9MA;EvC9FE,qBAAqB;EACrB,euC8FgB;EvC7FhB,WuC6FqB;EvC5FrB,gBuC4FqB;EvC3FrB,kBAAkB;EAClB,mBAAmB;EACnB,UuCyFqB;EACrB,ctC1G4B;EDsI1B,mBuC3BoC;AxCi+MxC;;AwCp+MA;EAKI,kBAAkB;EAClB,oBAAoB;AxCm+MxB;;AyC7jNA;ExCkCE,iCAAiC;EwC9BjC,oBAAoB;EACpB,aAAa;EACb,evCGW;EuCFX,8BAA8B;EAC9B,gBAAgB;EAChB,gBAAgB;EAChB,mBAAmB;AzC8jNrB;;AyCxkNA;EAYI,mBAAmB;EACnB,4BvC/B0B;EuCgC1B,0BAzC4B;EA0C5B,wBAzC0B;EA0C1B,cvCrC0B;EuCsC1B,aAAa;EACb,uBAAuB;EACvB,mBAA6C;EAC7C,kBAxCyB;EAyCzB,mBAAmB;AzCgkNvB;;AyCrlNA;EAuBM,4BvC7CwB;EuC8CxB,cvC9CwB;AFgnN9B;;AyC1lNA;EA0BI,cAAc;AzCokNlB;;AyC9lNA;EA6BQ,4BvCnC0B;EuCoC1B,cvCpC0B;AFymNlC;;AyCnmNA;EAgCI,mBAAmB;EACnB,4BvCnD0B;EuCoD1B,0BA7D4B;EA8D5B,wBA7D0B;EA8D1B,aAAa;EACb,YAAY;EACZ,cAAc;EACd,2BAA2B;AzCukN/B;;AyC9mNA;EAyCM,qBAAqB;AzCykN3B;;AyClnNA;EA2CM,UAAU;EACV,uBAAuB;EACvB,oBAAoB;EACpB,qBAAqB;AzC2kN3B;;AyCznNA;EAgDM,yBAAyB;EACzB,oBAAoB;AzC6kN1B;;AyC9nNA;ExCkHI,kBwC9DuC;AzC8kN3C;;AyCloNA;ExCkHI,mBwC5DuC;AzCglN3C;;AyCtoNA;EA0DM,uBAAuB;AzCglN7B;;AyC1oNA;EA6DM,yBAAyB;AzCilN/B;;AyC9oNA;EAiEM,6BAA6B;EAI3B,0BvC5BI;AF0mNZ;;AyCnpNA;EAuEQ,4BvCtFsB;EuCuFtB,4BvC1FsB;AF0qN9B;;AyCxpNA;EA4EU,uBvCzFqB;EuC0FrB,qBvC/FoB;EuCgGpB,2CAA2E;AzCglNrF;;AyC9pNA;EAiFM,YAAY;EACZ,cAAc;AzCilNpB;;AyCnqNA;EAqFM,qBvCvGwB;EuCwGxB,mBA/F+B;EAgG/B,iBA/F6B;EAgG7B,gBAAgB;EAChB,kBAAkB;AzCklNxB;;AyC3qNA;EA2FQ,4BvC1GsB;EuC2GtB,qBvC/GsB;EuCgHtB,UAAU;AzColNlB;;AyCjrNA;ExCkHI,kBwClBuE;AzCqlN3E;;AyCrrNA;EAsGU,4BvC7DE;EuC8DF,+BvC9DE;AFipNZ;;AyC1rNA;EA6GU,2BvCpEE;EuCqEF,8BvCrEE;AFspNZ;;AyC/rNA;EAiHU,yBvCvHwB;EuCwHxB,qBvCxHwB;EuCyHxB,W9B7DM;E8B8DN,UAAU;AzCklNpB;;AyCtsNA;EAsHM,mBAAmB;AzColNzB;;AyC1sNA;EA+HY,oCvCpFa;EuCqFb,iCvCrFa;EuCsFb,qBAAqB;AzC+kNjC;;AyChtNA;EAwIY,mCvC7Fa;EuC8Fb,gCvC9Fa;EuC+Fb,oBAAoB;AzC4kNhC;;AyCttNA;EA6II,kBvCnIY;AFgtNhB;;AyC1tNA;EA+II,kBvCvIY;AFstNhB;;AyC9tNA;EAiJI,iBvC1IW;AF2tNf;;A0C9vNA,eAAA;ACEA;EACE,cAAc;EACd,aAAa;EACb,YAAY;EACZ,cAAc;EACd,gBAPkB;A3CuwNpB;;A2C/vNE;EACE,UAAU;A3CkwNd;;A2CjwNE;EACE,UAAU;EACV,WAAW;A3CowNf;;A2CnwNE;EACE,UAAU;EACV,UAAU;A3CswNd;;A2CrwNE;EACE,UAAU;EACV,eAAe;A3CwwNnB;;A2CvwNE;EACE,UAAU;EACV,UAAU;A3C0wNd;;A2CzwNE;EACE,UAAU;EACV,eAAe;A3C4wNnB;;A2C3wNE;EACE,UAAU;EACV,UAAU;A3C8wNd;;A2C7wNE;EACE,UAAU;EACV,UAAU;A3CgxNd;;A2C/wNE;EACE,UAAU;EACV,UAAU;A3CkxNd;;A2CjxNE;EACE,UAAU;EACV,UAAU;A3CoxNd;;A2CnxNE;EACE,UAAU;EACV,UAAU;A3CsxNd;;A2CrxNE;EACE,gBAAgB;A3CwxNpB;;A2CvxNE;EACE,qBAAqB;A3C0xNzB;;A2CzxNE;EACE,gBAAgB;A3C4xNpB;;A2C3xNE;EACE,qBAAqB;A3C8xNzB;;A2C7xNE;EACE,gBAAgB;A3CgyNpB;;A2C/xNE;EACE,gBAAgB;A3CkyNpB;;A2CjyNE;EACE,gBAAgB;A3CoyNpB;;A2CnyNE;EACE,gBAAgB;A3CsyNpB;;A2CryNE;EACE,gBAAgB;A3CwyNpB;;A2CtyNI;EACE,UAAU;EACV,SAA0B;A3CyyNhC;;A2CxyNI;EACE,eAAgC;A3C2yNtC;;A2C/yNI;EACE,UAAU;EACV,eAA0B;A3CkzNhC;;A2CjzNI;EACE,qBAAgC;A3CozNtC;;A2CxzNI;EACE,UAAU;EACV,gBAA0B;A3C2zNhC;;A2C1zNI;EACE,sBAAgC;A3C6zNtC;;A2Cj0NI;EACE,UAAU;EACV,UAA0B;A3Co0NhC;;A2Cn0NI;EACE,gBAAgC;A3Cs0NtC;;A2C10NI;EACE,UAAU;EACV,gBAA0B;A3C60NhC;;A2C50NI;EACE,sBAAgC;A3C+0NtC;;A2Cn1NI;EACE,UAAU;EACV,gBAA0B;A3Cs1NhC;;A2Cr1NI;EACE,sBAAgC;A3Cw1NtC;;A2C51NI;EACE,UAAU;EACV,UAA0B;A3C+1NhC;;A2C91NI;EACE,gBAAgC;A3Ci2NtC;;A2Cr2NI;EACE,UAAU;EACV,gBAA0B;A3Cw2NhC;;A2Cv2NI;EACE,sBAAgC;A3C02NtC;;A2C92NI;EACE,UAAU;EACV,gBAA0B;A3Ci3NhC;;A2Ch3NI;EACE,sBAAgC;A3Cm3NtC;;A2Cv3NI;EACE,UAAU;EACV,UAA0B;A3C03NhC;;A2Cz3NI;EACE,gBAAgC;A3C43NtC;;A2Ch4NI;EACE,UAAU;EACV,gBAA0B;A3Cm4NhC;;A2Cl4NI;EACE,sBAAgC;A3Cq4NtC;;A2Cz4NI;EACE,UAAU;EACV,gBAA0B;A3C44NhC;;A2C34NI;EACE,sBAAgC;A3C84NtC;;A2Cl5NI;EACE,UAAU;EACV,WAA0B;A3Cq5NhC;;A2Cp5NI;EACE,iBAAgC;A3Cu5NtC;;ACr4NE;E0C/EF;IAgEM,UAAU;E3Cy5Nd;E2Cz9NF;IAkEM,UAAU;IACV,WAAW;E3C05Nf;E2C79NF;IAqEM,UAAU;IACV,UAAU;E3C25Nd;E2Cj+NF;IAwEM,UAAU;IACV,eAAe;E3C45NnB;E2Cr+NF;IA2EM,UAAU;IACV,UAAU;E3C65Nd;E2Cz+NF;IA8EM,UAAU;IACV,eAAe;E3C85NnB;E2C7+NF;IAiFM,UAAU;IACV,UAAU;E3C+5Nd;E2Cj/NF;IAoFM,UAAU;IACV,UAAU;E3Cg6Nd;E2Cr/NF;IAuFM,UAAU;IACV,UAAU;E3Ci6Nd;E2Cz/NF;IA0FM,UAAU;IACV,UAAU;E3Ck6Nd;E2C7/NF;IA6FM,UAAU;IACV,UAAU;E3Cm6Nd;E2CjgOF;IAgGM,gBAAgB;E3Co6NpB;E2CpgOF;IAkGM,qBAAqB;E3Cq6NzB;E2CvgOF;IAoGM,gBAAgB;E3Cs6NpB;E2C1gOF;IAsGM,qBAAqB;E3Cu6NzB;E2C7gOF;IAwGM,gBAAgB;E3Cw6NpB;E2ChhOF;IA0GM,gBAAgB;E3Cy6NpB;E2CnhOF;IA4GM,gBAAgB;E3C06NpB;E2CthOF;IA8GM,gBAAgB;E3C26NpB;E2CzhOF;IAgHM,gBAAgB;E3C46NpB;E2C5hOF;IAmHQ,UAAU;IACV,SAA0B;E3C46NhC;E2ChiOF;IAsHQ,eAAgC;E3C66NtC;E2CniOF;IAmHQ,UAAU;IACV,eAA0B;E3Cm7NhC;E2CviOF;IAsHQ,qBAAgC;E3Co7NtC;E2C1iOF;IAmHQ,UAAU;IACV,gBAA0B;E3C07NhC;E2C9iOF;IAsHQ,sBAAgC;E3C27NtC;E2CjjOF;IAmHQ,UAAU;IACV,UAA0B;E3Ci8NhC;E2CrjOF;IAsHQ,gBAAgC;E3Ck8NtC;E2CxjOF;IAmHQ,UAAU;IACV,gBAA0B;E3Cw8NhC;E2C5jOF;IAsHQ,sBAAgC;E3Cy8NtC;E2C/jOF;IAmHQ,UAAU;IACV,gBAA0B;E3C+8NhC;E2CnkOF;IAsHQ,sBAAgC;E3Cg9NtC;E2CtkOF;IAmHQ,UAAU;IACV,UAA0B;E3Cs9NhC;E2C1kOF;IAsHQ,gBAAgC;E3Cu9NtC;E2C7kOF;IAmHQ,UAAU;IACV,gBAA0B;E3C69NhC;E2CjlOF;IAsHQ,sBAAgC;E3C89NtC;E2CplOF;IAmHQ,UAAU;IACV,gBAA0B;E3Co+NhC;E2CxlOF;IAsHQ,sBAAgC;E3Cq+NtC;E2C3lOF;IAmHQ,UAAU;IACV,UAA0B;E3C2+NhC;E2C/lOF;IAsHQ,gBAAgC;E3C4+NtC;E2ClmOF;IAmHQ,UAAU;IACV,gBAA0B;E3Ck/NhC;E2CtmOF;IAsHQ,sBAAgC;E3Cm/NtC;E2CzmOF;IAmHQ,UAAU;IACV,gBAA0B;E3Cy/NhC;E2C7mOF;IAsHQ,sBAAgC;E3C0/NtC;E2ChnOF;IAmHQ,UAAU;IACV,WAA0B;E3CggOhC;E2CpnOF;IAsHQ,iBAAgC;E3CigOtC;AACF;;ACriOE;E0CnFF;IA0HM,UAAU;E3CmgOd;E2C7nOF;IA6HM,UAAU;IACV,WAAW;E3CmgOf;E2CjoOF;IAiIM,UAAU;IACV,UAAU;E3CmgOd;E2CroOF;IAqIM,UAAU;IACV,eAAe;E3CmgOnB;E2CzoOF;IAyIM,UAAU;IACV,UAAU;E3CmgOd;E2C7oOF;IA6IM,UAAU;IACV,eAAe;E3CmgOnB;E2CjpOF;IAiJM,UAAU;IACV,UAAU;E3CmgOd;E2CrpOF;IAqJM,UAAU;IACV,UAAU;E3CmgOd;E2CzpOF;IAyJM,UAAU;IACV,UAAU;E3CmgOd;E2C7pOF;IA6JM,UAAU;IACV,UAAU;E3CmgOd;E2CjqOF;IAiKM,UAAU;IACV,UAAU;E3CmgOd;E2CrqOF;IAqKM,gBAAgB;E3CmgOpB;E2CxqOF;IAwKM,qBAAqB;E3CmgOzB;E2C3qOF;IA2KM,gBAAgB;E3CmgOpB;E2C9qOF;IA8KM,qBAAqB;E3CmgOzB;E2CjrOF;IAiLM,gBAAgB;E3CmgOpB;E2CprOF;IAoLM,gBAAgB;E3CmgOpB;E2CvrOF;IAuLM,gBAAgB;E3CmgOpB;E2C1rOF;IA0LM,gBAAgB;E3CmgOpB;E2C7rOF;IA6LM,gBAAgB;E3CmgOpB;E2ChsOF;IAiMQ,UAAU;IACV,SAA0B;E3CkgOhC;E2CpsOF;IAqMQ,eAAgC;E3CkgOtC;E2CvsOF;IAiMQ,UAAU;IACV,eAA0B;E3CygOhC;E2C3sOF;IAqMQ,qBAAgC;E3CygOtC;E2C9sOF;IAiMQ,UAAU;IACV,gBAA0B;E3CghOhC;E2CltOF;IAqMQ,sBAAgC;E3CghOtC;E2CrtOF;IAiMQ,UAAU;IACV,UAA0B;E3CuhOhC;E2CztOF;IAqMQ,gBAAgC;E3CuhOtC;E2C5tOF;IAiMQ,UAAU;IACV,gBAA0B;E3C8hOhC;E2ChuOF;IAqMQ,sBAAgC;E3C8hOtC;E2CnuOF;IAiMQ,UAAU;IACV,gBAA0B;E3CqiOhC;E2CvuOF;IAqMQ,sBAAgC;E3CqiOtC;E2C1uOF;IAiMQ,UAAU;IACV,UAA0B;E3C4iOhC;E2C9uOF;IAqMQ,gBAAgC;E3C4iOtC;E2CjvOF;IAiMQ,UAAU;IACV,gBAA0B;E3CmjOhC;E2CrvOF;IAqMQ,sBAAgC;E3CmjOtC;E2CxvOF;IAiMQ,UAAU;IACV,gBAA0B;E3C0jOhC;E2C5vOF;IAqMQ,sBAAgC;E3C0jOtC;E2C/vOF;IAiMQ,UAAU;IACV,UAA0B;E3CikOhC;E2CnwOF;IAqMQ,gBAAgC;E3CikOtC;E2CtwOF;IAiMQ,UAAU;IACV,gBAA0B;E3CwkOhC;E2C1wOF;IAqMQ,sBAAgC;E3CwkOtC;E2C7wOF;IAiMQ,UAAU;IACV,gBAA0B;E3C+kOhC;E2CjxOF;IAqMQ,sBAAgC;E3C+kOtC;E2CpxOF;IAiMQ,UAAU;IACV,WAA0B;E3CslOhC;E2CxxOF;IAqMQ,iBAAgC;E3CslOtC;AACF;;ACjsOE;E0C3FF;IAwMM,UAAU;E3CylOd;E2CjyOF;IA0MM,UAAU;IACV,WAAW;E3C0lOf;E2CryOF;IA6MM,UAAU;IACV,UAAU;E3C2lOd;E2CzyOF;IAgNM,UAAU;IACV,eAAe;E3C4lOnB;E2C7yOF;IAmNM,UAAU;IACV,UAAU;E3C6lOd;E2CjzOF;IAsNM,UAAU;IACV,eAAe;E3C8lOnB;E2CrzOF;IAyNM,UAAU;IACV,UAAU;E3C+lOd;E2CzzOF;IA4NM,UAAU;IACV,UAAU;E3CgmOd;E2C7zOF;IA+NM,UAAU;IACV,UAAU;E3CimOd;E2Cj0OF;IAkOM,UAAU;IACV,UAAU;E3CkmOd;E2Cr0OF;IAqOM,UAAU;IACV,UAAU;E3CmmOd;E2Cz0OF;IAwOM,gBAAgB;E3ComOpB;E2C50OF;IA0OM,qBAAqB;E3CqmOzB;E2C/0OF;IA4OM,gBAAgB;E3CsmOpB;E2Cl1OF;IA8OM,qBAAqB;E3CumOzB;E2Cr1OF;IAgPM,gBAAgB;E3CwmOpB;E2Cx1OF;IAkPM,gBAAgB;E3CymOpB;E2C31OF;IAoPM,gBAAgB;E3C0mOpB;E2C91OF;IAsPM,gBAAgB;E3C2mOpB;E2Cj2OF;IAwPM,gBAAgB;E3C4mOpB;E2Cp2OF;IA2PQ,UAAU;IACV,SAA0B;E3C4mOhC;E2Cx2OF;IA8PQ,eAAgC;E3C6mOtC;E2C32OF;IA2PQ,UAAU;IACV,eAA0B;E3CmnOhC;E2C/2OF;IA8PQ,qBAAgC;E3ConOtC;E2Cl3OF;IA2PQ,UAAU;IACV,gBAA0B;E3C0nOhC;E2Ct3OF;IA8PQ,sBAAgC;E3C2nOtC;E2Cz3OF;IA2PQ,UAAU;IACV,UAA0B;E3CioOhC;E2C73OF;IA8PQ,gBAAgC;E3CkoOtC;E2Ch4OF;IA2PQ,UAAU;IACV,gBAA0B;E3CwoOhC;E2Cp4OF;IA8PQ,sBAAgC;E3CyoOtC;E2Cv4OF;IA2PQ,UAAU;IACV,gBAA0B;E3C+oOhC;E2C34OF;IA8PQ,sBAAgC;E3CgpOtC;E2C94OF;IA2PQ,UAAU;IACV,UAA0B;E3CspOhC;E2Cl5OF;IA8PQ,gBAAgC;E3CupOtC;E2Cr5OF;IA2PQ,UAAU;IACV,gBAA0B;E3C6pOhC;E2Cz5OF;IA8PQ,sBAAgC;E3C8pOtC;E2C55OF;IA2PQ,UAAU;IACV,gBAA0B;E3CoqOhC;E2Ch6OF;IA8PQ,sBAAgC;E3CqqOtC;E2Cn6OF;IA2PQ,UAAU;IACV,UAA0B;E3C2qOhC;E2Cv6OF;IA8PQ,gBAAgC;E3C4qOtC;E2C16OF;IA2PQ,UAAU;IACV,gBAA0B;E3CkrOhC;E2C96OF;IA8PQ,sBAAgC;E3CmrOtC;E2Cj7OF;IA2PQ,UAAU;IACV,gBAA0B;E3CyrOhC;E2Cr7OF;IA8PQ,sBAAgC;E3C0rOtC;E2Cx7OF;IA2PQ,UAAU;IACV,WAA0B;E3CgsOhC;E2C57OF;IA8PQ,iBAAgC;E3CisOtC;AACF;;ACj2OE;E0C/FF;IAiQM,UAAU;E3CosOd;E2Cr8OF;IAmQM,UAAU;IACV,WAAW;E3CqsOf;E2Cz8OF;IAsQM,UAAU;IACV,UAAU;E3CssOd;E2C78OF;IAyQM,UAAU;IACV,eAAe;E3CusOnB;E2Cj9OF;IA4QM,UAAU;IACV,UAAU;E3CwsOd;E2Cr9OF;IA+QM,UAAU;IACV,eAAe;E3CysOnB;E2Cz9OF;IAkRM,UAAU;IACV,UAAU;E3C0sOd;E2C79OF;IAqRM,UAAU;IACV,UAAU;E3C2sOd;E2Cj+OF;IAwRM,UAAU;IACV,UAAU;E3C4sOd;E2Cr+OF;IA2RM,UAAU;IACV,UAAU;E3C6sOd;E2Cz+OF;IA8RM,UAAU;IACV,UAAU;E3C8sOd;E2C7+OF;IAiSM,gBAAgB;E3C+sOpB;E2Ch/OF;IAmSM,qBAAqB;E3CgtOzB;E2Cn/OF;IAqSM,gBAAgB;E3CitOpB;E2Ct/OF;IAuSM,qBAAqB;E3CktOzB;E2Cz/OF;IAySM,gBAAgB;E3CmtOpB;E2C5/OF;IA2SM,gBAAgB;E3CotOpB;E2C//OF;IA6SM,gBAAgB;E3CqtOpB;E2ClgPF;IA+SM,gBAAgB;E3CstOpB;E2CrgPF;IAiTM,gBAAgB;E3CutOpB;E2CxgPF;IAoTQ,UAAU;IACV,SAA0B;E3CutOhC;E2C5gPF;IAuTQ,eAAgC;E3CwtOtC;E2C/gPF;IAoTQ,UAAU;IACV,eAA0B;E3C8tOhC;E2CnhPF;IAuTQ,qBAAgC;E3C+tOtC;E2CthPF;IAoTQ,UAAU;IACV,gBAA0B;E3CquOhC;E2C1hPF;IAuTQ,sBAAgC;E3CsuOtC;E2C7hPF;IAoTQ,UAAU;IACV,UAA0B;E3C4uOhC;E2CjiPF;IAuTQ,gBAAgC;E3C6uOtC;E2CpiPF;IAoTQ,UAAU;IACV,gBAA0B;E3CmvOhC;E2CxiPF;IAuTQ,sBAAgC;E3CovOtC;E2C3iPF;IAoTQ,UAAU;IACV,gBAA0B;E3C0vOhC;E2C/iPF;IAuTQ,sBAAgC;E3C2vOtC;E2CljPF;IAoTQ,UAAU;IACV,UAA0B;E3CiwOhC;E2CtjPF;IAuTQ,gBAAgC;E3CkwOtC;E2CzjPF;IAoTQ,UAAU;IACV,gBAA0B;E3CwwOhC;E2C7jPF;IAuTQ,sBAAgC;E3CywOtC;E2ChkPF;IAoTQ,UAAU;IACV,gBAA0B;E3C+wOhC;E2CpkPF;IAuTQ,sBAAgC;E3CgxOtC;E2CvkPF;IAoTQ,UAAU;IACV,UAA0B;E3CsxOhC;E2C3kPF;IAuTQ,gBAAgC;E3CuxOtC;E2C9kPF;IAoTQ,UAAU;IACV,gBAA0B;E3C6xOhC;E2CllPF;IAuTQ,sBAAgC;E3C8xOtC;E2CrlPF;IAoTQ,UAAU;IACV,gBAA0B;E3CoyOhC;E2CzlPF;IAuTQ,sBAAgC;E3CqyOtC;E2C5lPF;IAoTQ,UAAU;IACV,WAA0B;E3C2yOhC;E2ChmPF;IAuTQ,iBAAgC;E3C4yOtC;AACF;;ACt/OI;E0C9GJ;IA0TM,UAAU;E3C+yOd;E2CzmPF;IA4TM,UAAU;IACV,WAAW;E3CgzOf;E2C7mPF;IA+TM,UAAU;IACV,UAAU;E3CizOd;E2CjnPF;IAkUM,UAAU;IACV,eAAe;E3CkzOnB;E2CrnPF;IAqUM,UAAU;IACV,UAAU;E3CmzOd;E2CznPF;IAwUM,UAAU;IACV,eAAe;E3CozOnB;E2C7nPF;IA2UM,UAAU;IACV,UAAU;E3CqzOd;E2CjoPF;IA8UM,UAAU;IACV,UAAU;E3CszOd;E2CroPF;IAiVM,UAAU;IACV,UAAU;E3CuzOd;E2CzoPF;IAoVM,UAAU;IACV,UAAU;E3CwzOd;E2C7oPF;IAuVM,UAAU;IACV,UAAU;E3CyzOd;E2CjpPF;IA0VM,gBAAgB;E3C0zOpB;E2CppPF;IA4VM,qBAAqB;E3C2zOzB;E2CvpPF;IA8VM,gBAAgB;E3C4zOpB;E2C1pPF;IAgWM,qBAAqB;E3C6zOzB;E2C7pPF;IAkWM,gBAAgB;E3C8zOpB;E2ChqPF;IAoWM,gBAAgB;E3C+zOpB;E2CnqPF;IAsWM,gBAAgB;E3Cg0OpB;E2CtqPF;IAwWM,gBAAgB;E3Ci0OpB;E2CzqPF;IA0WM,gBAAgB;E3Ck0OpB;E2C5qPF;IA6WQ,UAAU;IACV,SAA0B;E3Ck0OhC;E2ChrPF;IAgXQ,eAAgC;E3Cm0OtC;E2CnrPF;IA6WQ,UAAU;IACV,eAA0B;E3Cy0OhC;E2CvrPF;IAgXQ,qBAAgC;E3C00OtC;E2C1rPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cg1OhC;E2C9rPF;IAgXQ,sBAAgC;E3Ci1OtC;E2CjsPF;IA6WQ,UAAU;IACV,UAA0B;E3Cu1OhC;E2CrsPF;IAgXQ,gBAAgC;E3Cw1OtC;E2CxsPF;IA6WQ,UAAU;IACV,gBAA0B;E3C81OhC;E2C5sPF;IAgXQ,sBAAgC;E3C+1OtC;E2C/sPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cq2OhC;E2CntPF;IAgXQ,sBAAgC;E3Cs2OtC;E2CttPF;IA6WQ,UAAU;IACV,UAA0B;E3C42OhC;E2C1tPF;IAgXQ,gBAAgC;E3C62OtC;E2C7tPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cm3OhC;E2CjuPF;IAgXQ,sBAAgC;E3Co3OtC;E2CpuPF;IA6WQ,UAAU;IACV,gBAA0B;E3C03OhC;E2CxuPF;IAgXQ,sBAAgC;E3C23OtC;E2C3uPF;IA6WQ,UAAU;IACV,UAA0B;E3Ci4OhC;E2C/uPF;IAgXQ,gBAAgC;E3Ck4OtC;E2ClvPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cw4OhC;E2CtvPF;IAgXQ,sBAAgC;E3Cy4OtC;E2CzvPF;IA6WQ,UAAU;IACV,gBAA0B;E3C+4OhC;E2C7vPF;IAgXQ,sBAAgC;E3Cg5OtC;E2ChwPF;IA6WQ,UAAU;IACV,WAA0B;E3Cs5OhC;E2CpwPF;IAgXQ,iBAAgC;E3Cu5OtC;AACF;;AC3oPI;E0C7HJ;IAmXM,UAAU;E3C05Od;E2C7wPF;IAqXM,UAAU;IACV,WAAW;E3C25Of;E2CjxPF;IAwXM,UAAU;IACV,UAAU;E3C45Od;E2CrxPF;IA2XM,UAAU;IACV,eAAe;E3C65OnB;E2CzxPF;IA8XM,UAAU;IACV,UAAU;E3C85Od;E2C7xPF;IAiYM,UAAU;IACV,eAAe;E3C+5OnB;E2CjyPF;IAoYM,UAAU;IACV,UAAU;E3Cg6Od;E2CryPF;IAuYM,UAAU;IACV,UAAU;E3Ci6Od;E2CzyPF;IA0YM,UAAU;IACV,UAAU;E3Ck6Od;E2C7yPF;IA6YM,UAAU;IACV,UAAU;E3Cm6Od;E2CjzPF;IAgZM,UAAU;IACV,UAAU;E3Co6Od;E2CrzPF;IAmZM,gBAAgB;E3Cq6OpB;E2CxzPF;IAqZM,qBAAqB;E3Cs6OzB;E2C3zPF;IAuZM,gBAAgB;E3Cu6OpB;E2C9zPF;IAyZM,qBAAqB;E3Cw6OzB;E2Cj0PF;IA2ZM,gBAAgB;E3Cy6OpB;E2Cp0PF;IA6ZM,gBAAgB;E3C06OpB;E2Cv0PF;IA+ZM,gBAAgB;E3C26OpB;E2C10PF;IAiaM,gBAAgB;E3C46OpB;E2C70PF;IAmaM,gBAAgB;E3C66OpB;E2Ch1PF;IAsaQ,UAAU;IACV,SAA0B;E3C66OhC;E2Cp1PF;IAyaQ,eAAgC;E3C86OtC;E2Cv1PF;IAsaQ,UAAU;IACV,eAA0B;E3Co7OhC;E2C31PF;IAyaQ,qBAAgC;E3Cq7OtC;E2C91PF;IAsaQ,UAAU;IACV,gBAA0B;E3C27OhC;E2Cl2PF;IAyaQ,sBAAgC;E3C47OtC;E2Cr2PF;IAsaQ,UAAU;IACV,UAA0B;E3Ck8OhC;E2Cz2PF;IAyaQ,gBAAgC;E3Cm8OtC;E2C52PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cy8OhC;E2Ch3PF;IAyaQ,sBAAgC;E3C08OtC;E2Cn3PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cg9OhC;E2Cv3PF;IAyaQ,sBAAgC;E3Ci9OtC;E2C13PF;IAsaQ,UAAU;IACV,UAA0B;E3Cu9OhC;E2C93PF;IAyaQ,gBAAgC;E3Cw9OtC;E2Cj4PF;IAsaQ,UAAU;IACV,gBAA0B;E3C89OhC;E2Cr4PF;IAyaQ,sBAAgC;E3C+9OtC;E2Cx4PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cq+OhC;E2C54PF;IAyaQ,sBAAgC;E3Cs+OtC;E2C/4PF;IAsaQ,UAAU;IACV,UAA0B;E3C4+OhC;E2Cn5PF;IAyaQ,gBAAgC;E3C6+OtC;E2Ct5PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cm/OhC;E2C15PF;IAyaQ,sBAAgC;E3Co/OtC;E2C75PF;IAsaQ,UAAU;IACV,gBAA0B;E3C0/OhC;E2Cj6PF;IAyaQ,sBAAgC;E3C2/OtC;E2Cp6PF;IAsaQ,UAAU;IACV,WAA0B;E3CigPhC;E2Cx6PF;IAyaQ,iBAAgC;E3CkgPtC;AACF;;A2CjgPA;EACE,qBA9akB;EA+alB,sBA/akB;EAgblB,oBAhbkB;A3Co7PpB;;A2CvgPA;EAKI,uBAlbgB;A3Cw7PpB;;A2C3gPA;EAOI,qCAA4C;A3CwgPhD;;A2C/gPA;EAUI,uBAAuB;A3CygP3B;;A2CnhPA;EAYI,cAAc;EACd,eAAe;EACf,aAAa;A3C2gPjB;;A2CzhPA;EAgBM,SAAS;EACT,qBAAqB;A3C6gP3B;;A2C9hPA;EAmBM,qBAAqB;A3C+gP3B;;A2CliPA;EAqBM,gBAAgB;A3CihPtB;;A2CtiPA;EAuBI,aAAa;A3CmhPjB;;A2C1iPA;EAyBI,eAAe;A3CqhPnB;;A2C9iPA;EA2BI,mBAAmB;A3CuhPvB;;AC14PE;E0CwVF;IA+BM,aAAa;E3CwhPjB;AACF;;ACp4PE;E0C4UF;IAmCM,aAAa;E3C0hPjB;AACF;;A2CxhPE;EACE,oBAAY;EACZ,wCAAwC;EACxC,yCAAyC;A3C2hP7C;;A2C9hPE;EAKI,8BAA8B;EAC9B,+BAA+B;A3C6hPrC;;A2CniPE;EASM,iBAAY;A3C8hPpB;;ACz6PE;E0CkYA;IAYQ,iBAAY;E3CgiPpB;AACF;;AC36PE;E0C8XA;IAeQ,iBAAY;E3CmiPpB;AACF;;AC76PE;E0C0XA;IAkBQ,iBAAY;E3CsiPpB;AACF;;AC/6PE;E0CsXA;IAqBQ,iBAAY;E3CyiPpB;AACF;;ACj7PE;E0CkXA;IAwBQ,iBAAY;E3C4iPpB;AACF;;ACl7PI;E0C6WF;IA2BQ,iBAAY;E3C+iPpB;AACF;;AC96PI;E0CmWF;IA8BQ,iBAAY;E3CkjPpB;AACF;;AC/6PI;E0C8VF;IAiCQ,iBAAY;E3CqjPpB;AACF;;AC36PI;E0CoVF;IAoCQ,iBAAY;E3CwjPpB;AACF;;A2C7lPE;EASM,oBAAY;A3CwlPpB;;ACn+PE;E0CkYA;IAYQ,oBAAY;E3C0lPpB;AACF;;ACr+PE;E0C8XA;IAeQ,oBAAY;E3C6lPpB;AACF;;ACv+PE;E0C0XA;IAkBQ,oBAAY;E3CgmPpB;AACF;;ACz+PE;E0CsXA;IAqBQ,oBAAY;E3CmmPpB;AACF;;AC3+PE;E0CkXA;IAwBQ,oBAAY;E3CsmPpB;AACF;;AC5+PI;E0C6WF;IA2BQ,oBAAY;E3CymPpB;AACF;;ACx+PI;E0CmWF;IA8BQ,oBAAY;E3C4mPpB;AACF;;ACz+PI;E0C8VF;IAiCQ,oBAAY;E3C+mPpB;AACF;;ACr+PI;E0CoVF;IAoCQ,oBAAY;E3CknPpB;AACF;;A2CvpPE;EASM,mBAAY;A3CkpPpB;;AC7hQE;E0CkYA;IAYQ,mBAAY;E3CopPpB;AACF;;AC/hQE;E0C8XA;IAeQ,mBAAY;E3CupPpB;AACF;;ACjiQE;E0C0XA;IAkBQ,mBAAY;E3C0pPpB;AACF;;ACniQE;E0CsXA;IAqBQ,mBAAY;E3C6pPpB;AACF;;ACriQE;E0CkXA;IAwBQ,mBAAY;E3CgqPpB;AACF;;ACtiQI;E0C6WF;IA2BQ,mBAAY;E3CmqPpB;AACF;;ACliQI;E0CmWF;IA8BQ,mBAAY;E3CsqPpB;AACF;;ACniQI;E0C8VF;IAiCQ,mBAAY;E3CyqPpB;AACF;;AC/hQI;E0CoVF;IAoCQ,mBAAY;E3C4qPpB;AACF;;A2CjtPE;EASM,oBAAY;A3C4sPpB;;ACvlQE;E0CkYA;IAYQ,oBAAY;E3C8sPpB;AACF;;ACzlQE;E0C8XA;IAeQ,oBAAY;E3CitPpB;AACF;;AC3lQE;E0C0XA;IAkBQ,oBAAY;E3CotPpB;AACF;;AC7lQE;E0CsXA;IAqBQ,oBAAY;E3CutPpB;AACF;;AC/lQE;E0CkXA;IAwBQ,oBAAY;E3C0tPpB;AACF;;AChmQI;E0C6WF;IA2BQ,oBAAY;E3C6tPpB;AACF;;AC5lQI;E0CmWF;IA8BQ,oBAAY;E3CguPpB;AACF;;AC7lQI;E0C8VF;IAiCQ,oBAAY;E3CmuPpB;AACF;;ACzlQI;E0CoVF;IAoCQ,oBAAY;E3CsuPpB;AACF;;A2C3wPE;EASM,iBAAY;A3CswPpB;;ACjpQE;E0CkYA;IAYQ,iBAAY;E3CwwPpB;AACF;;ACnpQE;E0C8XA;IAeQ,iBAAY;E3C2wPpB;AACF;;ACrpQE;E0C0XA;IAkBQ,iBAAY;E3C8wPpB;AACF;;ACvpQE;E0CsXA;IAqBQ,iBAAY;E3CixPpB;AACF;;ACzpQE;E0CkXA;IAwBQ,iBAAY;E3CoxPpB;AACF;;AC1pQI;E0C6WF;IA2BQ,iBAAY;E3CuxPpB;AACF;;ACtpQI;E0CmWF;IA8BQ,iBAAY;E3C0xPpB;AACF;;ACvpQI;E0C8VF;IAiCQ,iBAAY;E3C6xPpB;AACF;;ACnpQI;E0CoVF;IAoCQ,iBAAY;E3CgyPpB;AACF;;A2Cr0PE;EASM,oBAAY;A3Cg0PpB;;AC3sQE;E0CkYA;IAYQ,oBAAY;E3Ck0PpB;AACF;;AC7sQE;E0C8XA;IAeQ,oBAAY;E3Cq0PpB;AACF;;AC/sQE;E0C0XA;IAkBQ,oBAAY;E3Cw0PpB;AACF;;ACjtQE;E0CsXA;IAqBQ,oBAAY;E3C20PpB;AACF;;ACntQE;E0CkXA;IAwBQ,oBAAY;E3C80PpB;AACF;;ACptQI;E0C6WF;IA2BQ,oBAAY;E3Ci1PpB;AACF;;AChtQI;E0CmWF;IA8BQ,oBAAY;E3Co1PpB;AACF;;ACjtQI;E0C8VF;IAiCQ,oBAAY;E3Cu1PpB;AACF;;AC7sQI;E0CoVF;IAoCQ,oBAAY;E3C01PpB;AACF;;A2C/3PE;EASM,mBAAY;A3C03PpB;;ACrwQE;E0CkYA;IAYQ,mBAAY;E3C43PpB;AACF;;ACvwQE;E0C8XA;IAeQ,mBAAY;E3C+3PpB;AACF;;ACzwQE;E0C0XA;IAkBQ,mBAAY;E3Ck4PpB;AACF;;AC3wQE;E0CsXA;IAqBQ,mBAAY;E3Cq4PpB;AACF;;AC7wQE;E0CkXA;IAwBQ,mBAAY;E3Cw4PpB;AACF;;AC9wQI;E0C6WF;IA2BQ,mBAAY;E3C24PpB;AACF;;AC1wQI;E0CmWF;IA8BQ,mBAAY;E3C84PpB;AACF;;AC3wQI;E0C8VF;IAiCQ,mBAAY;E3Ci5PpB;AACF;;ACvwQI;E0CoVF;IAoCQ,mBAAY;E3Co5PpB;AACF;;A2Cz7PE;EASM,oBAAY;A3Co7PpB;;AC/zQE;E0CkYA;IAYQ,oBAAY;E3Cs7PpB;AACF;;ACj0QE;E0C8XA;IAeQ,oBAAY;E3Cy7PpB;AACF;;ACn0QE;E0C0XA;IAkBQ,oBAAY;E3C47PpB;AACF;;ACr0QE;E0CsXA;IAqBQ,oBAAY;E3C+7PpB;AACF;;ACv0QE;E0CkXA;IAwBQ,oBAAY;E3Ck8PpB;AACF;;ACx0QI;E0C6WF;IA2BQ,oBAAY;E3Cq8PpB;AACF;;ACp0QI;E0CmWF;IA8BQ,oBAAY;E3Cw8PpB;AACF;;ACr0QI;E0C8VF;IAiCQ,oBAAY;E3C28PpB;AACF;;ACj0QI;E0CoVF;IAoCQ,oBAAY;E3C88PpB;AACF;;A2Cn/PE;EASM,iBAAY;A3C8+PpB;;ACz3QE;E0CkYA;IAYQ,iBAAY;E3Cg/PpB;AACF;;AC33QE;E0C8XA;IAeQ,iBAAY;E3Cm/PpB;AACF;;AC73QE;E0C0XA;IAkBQ,iBAAY;E3Cs/PpB;AACF;;AC/3QE;E0CsXA;IAqBQ,iBAAY;E3Cy/PpB;AACF;;ACj4QE;E0CkXA;IAwBQ,iBAAY;E3C4/PpB;AACF;;ACl4QI;E0C6WF;IA2BQ,iBAAY;E3C+/PpB;AACF;;AC93QI;E0CmWF;IA8BQ,iBAAY;E3CkgQpB;AACF;;AC/3QI;E0C8VF;IAiCQ,iBAAY;E3CqgQpB;AACF;;AC33QI;E0CoVF;IAoCQ,iBAAY;E3CwgQpB;AACF;;A4C9/QA;EACE,oBAAoB;EACpB,cAAc;EACd,aAAa;EACb,YAAY;EACZ,cAAc;EACd,+BAAuB;EAAvB,4BAAuB;EAAvB,uBAAuB;A5CigRzB;;A4CvgRA;EASI,qBAA+B;EAC/B,sBAAgC;EAChC,oBAA8B;A5CkgRlC;;A4C7gRA;EAaM,uBAAiC;A5CogRvC;;A4CjhRA;EAeM,sBAjBgB;A5CuhRtB;;A4CrhRA;EAiBI,oBAAoB;A5CwgRxB;;A4CzhRA;EAmBI,gBArBkB;A5C+hRtB;;A4C7hRA;EAqBI,sBAAsB;A5C4gR1B;;A4CjiRA;EAuBM,gCAAgC;A5C8gRtC;;ACl9QE;E2CnFF;IA2BM,aAAa;E5C+gRjB;E4C1iRF;IA8BQ,UAAU;IACV,eAAuB;E5C+gR7B;E4C9iRF;IA8BQ,UAAU;IACV,gBAAuB;E5CmhR7B;E4CljRF;IA8BQ,UAAU;IACV,UAAuB;E5CuhR7B;E4CtjRF;IA8BQ,UAAU;IACV,gBAAuB;E5C2hR7B;E4C1jRF;IA8BQ,UAAU;IACV,gBAAuB;E5C+hR7B;E4C9jRF;IA8BQ,UAAU;IACV,UAAuB;E5CmiR7B;E4ClkRF;IA8BQ,UAAU;IACV,gBAAuB;E5CuiR7B;E4CtkRF;IA8BQ,UAAU;IACV,gBAAuB;E5C2iR7B;E4C1kRF;IA8BQ,UAAU;IACV,UAAuB;E5C+iR7B;E4C9kRF;IA8BQ,UAAU;IACV,gBAAuB;E5CmjR7B;E4CllRF;IA8BQ,UAAU;IACV,gBAAuB;E5CujR7B;E4CtlRF;IA8BQ,UAAU;IACV,WAAuB;E5C2jR7B;AACF;;A6C7lRA,kBAAA;ACEE;EACE,uBAAwB;A9C+lR5B;;A8C9lRE;EAGI,yBAA0C;A9C+lRhD;;A8C9lRE;EACE,kCAAmC;A9CimRvC;;A8CxmRE;EACE,yBAAwB;A9C2mR5B;;A8C1mRE;EAGI,uBAA0C;A9C2mRhD;;A8C1mRE;EACE,oCAAmC;A9C6mRvC;;A8CpnRE;EACE,4BAAwB;A9CunR5B;;A8CtnRE;EAGI,yBAA0C;A9CunRhD;;A8CtnRE;EACE,uCAAmC;A9CynRvC;;A8ChoRE;EACE,yBAAwB;A9CmoR5B;;A8CloRE;EAGI,yBAA0C;A9CmoRhD;;A8CloRE;EACE,oCAAmC;A9CqoRvC;;A8C5oRE;EACE,yBAAwB;A9C+oR5B;;A8C9oRE;EAGI,yBAA0C;A9C+oRhD;;A8C9oRE;EACE,oCAAmC;A9CipRvC;;A8C5oRI;EACE,yBAA8B;A9C+oRpC;;A8C9oRI;EAGI,yBAAgD;A9C+oRxD;;A8C9oRI;EACE,oCAAyC;A9CipR/C;;A8C/oRI;EACE,yBAA6B;A9CkpRnC;;A8CjpRI;EAGI,yBAAgD;A9CkpRxD;;A8CjpRI;EACE,oCAAwC;A9CopR9C;;A8ChrRE;EACE,yBAAwB;A9CmrR5B;;A8ClrRE;EAGI,yBAA0C;A9CmrRhD;;A8ClrRE;EACE,oCAAmC;A9CqrRvC;;A8ChrRI;EACE,yBAA8B;A9CmrRpC;;A8ClrRI;EAGI,yBAAgD;A9CmrRxD;;A8ClrRI;EACE,oCAAyC;A9CqrR/C;;A8CnrRI;EACE,yBAA6B;A9CsrRnC;;A8CrrRI;EAGI,yBAAgD;A9CsrRxD;;A8CrrRI;EACE,oCAAwC;A9CwrR9C;;A8CptRE;EACE,yBAAwB;A9CutR5B;;A8CttRE;EAGI,yBAA0C;A9CutRhD;;A8CttRE;EACE,oCAAmC;A9CytRvC;;A8CptRI;EACE,yBAA8B;A9CutRpC;;A8CttRI;EAGI,yBAAgD;A9CutRxD;;A8CttRI;EACE,oCAAyC;A9CytR/C;;A8CvtRI;EACE,yBAA6B;A9C0tRnC;;A8CztRI;EAGI,yBAAgD;A9C0tRxD;;A8CztRI;EACE,oCAAwC;A9C4tR9C;;A8CxvRE;EACE,yBAAwB;A9C2vR5B;;A8C1vRE;EAGI,yBAA0C;A9C2vRhD;;A8C1vRE;EACE,oCAAmC;A9C6vRvC;;A8CxvRI;EACE,yBAA8B;A9C2vRpC;;A8C1vRI;EAGI,yBAAgD;A9C2vRxD;;A8C1vRI;EACE,oCAAyC;A9C6vR/C;;A8C3vRI;EACE,yBAA6B;A9C8vRnC;;A8C7vRI;EAGI,yBAAgD;A9C8vRxD;;A8C7vRI;EACE,oCAAwC;A9CgwR9C;;A8C5xRE;EACE,yBAAwB;A9C+xR5B;;A8C9xRE;EAGI,yBAA0C;A9C+xRhD;;A8C9xRE;EACE,oCAAmC;A9CiyRvC;;A8C5xRI;EACE,yBAA8B;A9C+xRpC;;A8C9xRI;EAGI,yBAAgD;A9C+xRxD;;A8C9xRI;EACE,oCAAyC;A9CiyR/C;;A8C/xRI;EACE,yBAA6B;A9CkyRnC;;A8CjyRI;EAGI,yBAAgD;A9CkyRxD;;A8CjyRI;EACE,oCAAwC;A9CoyR9C;;A8Ch0RE;EACE,yBAAwB;A9Cm0R5B;;A8Cl0RE;EAGI,yBAA0C;A9Cm0RhD;;A8Cl0RE;EACE,oCAAmC;A9Cq0RvC;;A8Ch0RI;EACE,yBAA8B;A9Cm0RpC;;A8Cl0RI;EAGI,yBAAgD;A9Cm0RxD;;A8Cl0RI;EACE,oCAAyC;A9Cq0R/C;;A8Cn0RI;EACE,yBAA6B;A9Cs0RnC;;A8Cr0RI;EAGI,yBAAgD;A9Cs0RxD;;A8Cr0RI;EACE,oCAAwC;A9Cw0R9C;;A8Cr0RE;EACE,yBAAwB;A9Cw0R5B;;A8Cv0RE;EACE,oCAAmC;A9C00RvC;;A8C70RE;EACE,yBAAwB;A9Cg1R5B;;A8C/0RE;EACE,oCAAmC;A9Ck1RvC;;A8Cr1RE;EACE,yBAAwB;A9Cw1R5B;;A8Cv1RE;EACE,oCAAmC;A9C01RvC;;A8C71RE;EACE,yBAAwB;A9Cg2R5B;;A8C/1RE;EACE,oCAAmC;A9Ck2RvC;;A8Cr2RE;EACE,yBAAwB;A9Cw2R5B;;A8Cv2RE;EACE,oCAAmC;A9C02RvC;;A8C72RE;EACE,yBAAwB;A9Cg3R5B;;A8C/2RE;EACE,oCAAmC;A9Ck3RvC;;A8Cr3RE;EACE,yBAAwB;A9Cw3R5B;;A8Cv3RE;EACE,oCAAmC;A9C03RvC;;A8C73RE;EACE,4BAAwB;A9Cg4R5B;;A8C/3RE;EACE,uCAAmC;A9Ck4RvC;;A8Cr4RE;EACE,yBAAwB;A9Cw4R5B;;A8Cv4RE;EACE,oCAAmC;A9C04RvC;;A+C56RE;EACE,8BAAiC;A/C+6RrC;;A+Ch7RE;EACE,sCAAiC;A/Cm7RrC;;A+Cp7RE;EACE,iCAAiC;A/Cu7RrC;;A+Cx7RE;EACE,yCAAiC;A/C27RrC;;A+Cv7RE;EACE,4BAA4B;A/C07RhC;;A+C37RE;EACE,0BAA4B;A/C87RhC;;A+C/7RE;EACE,kCAA4B;A/Ck8RhC;;A+C97RE;EACE,sCAAkC;A/Ci8RtC;;A+Cl8RE;EACE,oCAAkC;A/Cq8RtC;;A+Ct8RE;EACE,kCAAkC;A/Cy8RtC;;A+C18RE;EACE,yCAAkC;A/C68RtC;;A+C98RE;EACE,wCAAkC;A/Ci9RtC;;A+Cl9RE;EACE,wCAAkC;A/Cq9RtC;;A+Ct9RE;EACE,iCAAkC;A/Cy9RtC;;A+C19RE;EACE,+BAAkC;A/C69RtC;;A+C99RE;EACE,gCAAkC;A/Ci+RtC;;A+Cl+RE;EACE,iCAAkC;A/Cq+RtC;;A+Cj+RE;EACE,oCAAgC;A/Co+RpC;;A+Cr+RE;EACE,kCAAgC;A/Cw+RpC;;A+Cz+RE;EACE,gCAAgC;A/C4+RpC;;A+C7+RE;EACE,uCAAgC;A/Cg/RpC;;A+Cj/RE;EACE,sCAAgC;A/Co/RpC;;A+Cr/RE;EACE,sCAAgC;A/Cw/RpC;;A+Cz/RE;EACE,iCAAgC;A/C4/RpC;;A+C7/RE;EACE,+BAAgC;A/CggSpC;;A+CjgSE;EACE,6BAAgC;A/CogSpC;;A+CrgSE;EACE,kCAAgC;A/CwgSpC;;A+CpgSE;EACE,+BAA8B;A/CugSlC;;A+CxgSE;EACE,kCAA8B;A/C2gSlC;;A+C5gSE;EACE,gCAA8B;A/C+gSlC;;A+ChhSE;EACE,8BAA8B;A/CmhSlC;;A+CphSE;EACE,gCAA8B;A/CuhSlC;;A+CxhSE;EACE,6BAA8B;A/C2hSlC;;A+C5hSE;EACE,2BAA8B;A/C+hSlC;;A+ChiSE;EACE,kCAA8B;A/CmiSlC;;A+CpiSE;EACE,gCAA8B;A/CuiSlC;;A+CniSE;EACE,2BAA6B;A/CsiSjC;;A+CviSE;EACE,iCAA6B;A/C0iSjC;;A+C3iSE;EACE,+BAA6B;A/C8iSjC;;A+C/iSE;EACE,6BAA6B;A/CkjSjC;;A+CnjSE;EACE,+BAA6B;A/CsjSjC;;A+CvjSE;EACE,8BAA6B;A/C0jSjC;;A+CrjSI;EACE,uBAAqC;A/CwjS3C;;A+CzjSI;EACE,uBAAqC;A/C4jS3C;;A+C7jSI;EACE,uBAAqC;A/CgkS3C;;A+CjkSI;EACE,uBAAqC;A/CokS3C;;A+CrkSI;EACE,uBAAqC;A/CwkS3C;;A+CzkSI;EACE,uBAAqC;A/C4kS3C;;A+C7kSI;EACE,yBAAqC;A/CglS3C;;A+CjlSI;EACE,yBAAqC;A/ColS3C;;A+CrlSI;EACE,yBAAqC;A/CwlS3C;;A+CzlSI;EACE,yBAAqC;A/C4lS3C;;A+C7lSI;EACE,yBAAqC;A/CgmS3C;;A+CjmSI;EACE,yBAAqC;A/ComS3C;;ACnoSE;EACE,WAAW;EACX,YAAY;EACZ,cAAc;ADsoSlB;;AgDzoSA;EACE,sBAAsB;AhD4oSxB;;AgD1oSA;EACE,uBAAuB;AhD6oSzB;;AiDppSA;EACE,2BAA2B;AjDupS7B;;AiDrpSA;EACE,2BAA2B;AjDwpS7B;;AiDtpSA;EACE,0BAA0B;AjDypS5B;;AkDhqSA;EACE,2BAA2B;AlDmqS7B;;AmDjqSA;EACE,6BAA6B;AnDoqS/B;;AoDxqSA;EACE,oBAAoB;ApD2qStB;;AoDzqSA;EACE,qBAAqB;ApD4qSvB;;AoDjqSI;EACE,oBAA+B;ApDoqSrC;;AoDjqSM;EACE,wBAA8C;ApDoqStD;;AoDrqSM;EACE,0BAA8C;ApDwqStD;;AoDzqSM;EACE,2BAA8C;ApD4qStD;;AoD7qSM;EACE,yBAA8C;ApDgrStD;;AoD7qSM;EACE,yBAAyC;EACzC,0BAA2C;ApDgrSnD;;AoD7qSM;EACE,wBAAuC;EACvC,2BAA6C;ApDgrSrD;;AoD/rSI;EACE,0BAA+B;ApDksSrC;;AoD/rSM;EACE,8BAA8C;ApDksStD;;AoDnsSM;EACE,gCAA8C;ApDssStD;;AoDvsSM;EACE,iCAA8C;ApD0sStD;;AoD3sSM;EACE,+BAA8C;ApD8sStD;;AoD3sSM;EACE,+BAAyC;EACzC,gCAA2C;ApD8sSnD;;AoD3sSM;EACE,8BAAuC;EACvC,iCAA6C;ApD8sSrD;;AoD7tSI;EACE,yBAA+B;ApDguSrC;;AoD7tSM;EACE,6BAA8C;ApDguStD;;AoDjuSM;EACE,+BAA8C;ApDouStD;;AoDruSM;EACE,gCAA8C;ApDwuStD;;AoDzuSM;EACE,8BAA8C;ApD4uStD;;AoDzuSM;EACE,8BAAyC;EACzC,+BAA2C;ApD4uSnD;;AoDzuSM;EACE,6BAAuC;EACvC,gCAA6C;ApD4uSrD;;AoD3vSI;EACE,0BAA+B;ApD8vSrC;;AoD3vSM;EACE,8BAA8C;ApD8vStD;;AoD/vSM;EACE,gCAA8C;ApDkwStD;;AoDnwSM;EACE,iCAA8C;ApDswStD;;AoDvwSM;EACE,+BAA8C;ApD0wStD;;AoDvwSM;EACE,+BAAyC;EACzC,gCAA2C;ApD0wSnD;;AoDvwSM;EACE,8BAAuC;EACvC,iCAA6C;ApD0wSrD;;AoDzxSI;EACE,uBAA+B;ApD4xSrC;;AoDzxSM;EACE,2BAA8C;ApD4xStD;;AoD7xSM;EACE,6BAA8C;ApDgyStD;;AoDjySM;EACE,8BAA8C;ApDoyStD;;AoDrySM;EACE,4BAA8C;ApDwyStD;;AoDrySM;EACE,4BAAyC;EACzC,6BAA2C;ApDwySnD;;AoDrySM;EACE,2BAAuC;EACvC,8BAA6C;ApDwySrD;;AoDvzSI;EACE,yBAA+B;ApD0zSrC;;AoDvzSM;EACE,6BAA8C;ApD0zStD;;AoD3zSM;EACE,+BAA8C;ApD8zStD;;AoD/zSM;EACE,gCAA8C;ApDk0StD;;AoDn0SM;EACE,8BAA8C;ApDs0StD;;AoDn0SM;EACE,8BAAyC;EACzC,+BAA2C;ApDs0SnD;;AoDn0SM;EACE,6BAAuC;EACvC,gCAA6C;ApDs0SrD;;AoDr1SI;EACE,uBAA+B;ApDw1SrC;;AoDr1SM;EACE,2BAA8C;ApDw1StD;;AoDz1SM;EACE,6BAA8C;ApD41StD;;AoD71SM;EACE,8BAA8C;ApDg2StD;;AoDj2SM;EACE,4BAA8C;ApDo2StD;;AoDj2SM;EACE,4BAAyC;EACzC,6BAA2C;ApDo2SnD;;AoDj2SM;EACE,2BAAuC;EACvC,8BAA6C;ApDo2SrD;;AoDn3SI;EACE,qBAA+B;ApDs3SrC;;AoDn3SM;EACE,yBAA8C;ApDs3StD;;AoDv3SM;EACE,2BAA8C;ApD03StD;;AoD33SM;EACE,4BAA8C;ApD83StD;;AoD/3SM;EACE,0BAA8C;ApDk4StD;;AoD/3SM;EACE,0BAAyC;EACzC,2BAA2C;ApDk4SnD;;AoD/3SM;EACE,yBAAuC;EACvC,4BAA6C;ApDk4SrD;;AoDj5SI;EACE,2BAA+B;ApDo5SrC;;AoDj5SM;EACE,+BAA8C;ApDo5StD;;AoDr5SM;EACE,iCAA8C;ApDw5StD;;AoDz5SM;EACE,kCAA8C;ApD45StD;;AoD75SM;EACE,gCAA8C;ApDg6StD;;AoD75SM;EACE,gCAAyC;EACzC,iCAA2C;ApDg6SnD;;AoD75SM;EACE,+BAAuC;EACvC,kCAA6C;ApDg6SrD;;AoD/6SI;EACE,0BAA+B;ApDk7SrC;;AoD/6SM;EACE,8BAA8C;ApDk7StD;;AoDn7SM;EACE,gCAA8C;ApDs7StD;;AoDv7SM;EACE,iCAA8C;ApD07StD;;AoD37SM;EACE,+BAA8C;ApD87StD;;AoD37SM;EACE,+BAAyC;EACzC,gCAA2C;ApD87SnD;;AoD37SM;EACE,8BAAuC;EACvC,iCAA6C;ApD87SrD;;AoD78SI;EACE,2BAA+B;ApDg9SrC;;AoD78SM;EACE,+BAA8C;ApDg9StD;;AoDj9SM;EACE,iCAA8C;ApDo9StD;;AoDr9SM;EACE,kCAA8C;ApDw9StD;;AoDz9SM;EACE,gCAA8C;ApD49StD;;AoDz9SM;EACE,gCAAyC;EACzC,iCAA2C;ApD49SnD;;AoDz9SM;EACE,+BAAuC;EACvC,kCAA6C;ApD49SrD;;AoD3+SI;EACE,wBAA+B;ApD8+SrC;;AoD3+SM;EACE,4BAA8C;ApD8+StD;;AoD/+SM;EACE,8BAA8C;ApDk/StD;;AoDn/SM;EACE,+BAA8C;ApDs/StD;;AoDv/SM;EACE,6BAA8C;ApD0/StD;;AoDv/SM;EACE,6BAAyC;EACzC,8BAA2C;ApD0/SnD;;AoDv/SM;EACE,4BAAuC;EACvC,+BAA6C;ApD0/SrD;;AoDzgTI;EACE,0BAA+B;ApD4gTrC;;AoDzgTM;EACE,8BAA8C;ApD4gTtD;;AoD7gTM;EACE,gCAA8C;ApDghTtD;;AoDjhTM;EACE,iCAA8C;ApDohTtD;;AoDrhTM;EACE,+BAA8C;ApDwhTtD;;AoDrhTM;EACE,+BAAyC;EACzC,gCAA2C;ApDwhTnD;;AoDrhTM;EACE,8BAAuC;EACvC,iCAA6C;ApDwhTrD;;AoDviTI;EACE,wBAA+B;ApD0iTrC;;AoDviTM;EACE,4BAA8C;ApD0iTtD;;AoD3iTM;EACE,8BAA8C;ApD8iTtD;;AoD/iTM;EACE,+BAA8C;ApDkjTtD;;AoDnjTM;EACE,6BAA8C;ApDsjTtD;;AoDnjTM;EACE,6BAAyC;EACzC,8BAA2C;ApDsjTnD;;AoDnjTM;EACE,4BAAuC;EACvC,+BAA6C;ApDsjTrD;;AqDjlTI;EACE,0BAA2B;ArDolTjC;;AqDrlTI;EACE,4BAA2B;ArDwlTjC;;AqDzlTI;EACE,0BAA2B;ArD4lTjC;;AqD7lTI;EACE,4BAA2B;ArDgmTjC;;AqDjmTI;EACE,6BAA2B;ArDomTjC;;AqDrmTI;EACE,0BAA2B;ArDwmTjC;;AqDzmTI;EACE,6BAA2B;ArD4mTjC;;AC/hTE;EoD9EE;IACE,0BAA2B;ErDinT/B;EqDlnTE;IACE,4BAA2B;ErDonT/B;EqDrnTE;IACE,0BAA2B;ErDunT/B;EqDxnTE;IACE,4BAA2B;ErD0nT/B;EqD3nTE;IACE,6BAA2B;ErD6nT/B;EqD9nTE;IACE,0BAA2B;ErDgoT/B;EqDjoTE;IACE,6BAA2B;ErDmoT/B;AACF;;ACnjTE;EoDlFE;IACE,0BAA2B;ErDyoT/B;EqD1oTE;IACE,4BAA2B;ErD4oT/B;EqD7oTE;IACE,0BAA2B;ErD+oT/B;EqDhpTE;IACE,4BAA2B;ErDkpT/B;EqDnpTE;IACE,6BAA2B;ErDqpT/B;EqDtpTE;IACE,0BAA2B;ErDwpT/B;EqDzpTE;IACE,6BAA2B;ErD2pT/B;AACF;;ACnkTE;EoD1FE;IACE,0BAA2B;ErDiqT/B;EqDlqTE;IACE,4BAA2B;ErDoqT/B;EqDrqTE;IACE,0BAA2B;ErDuqT/B;EqDxqTE;IACE,4BAA2B;ErD0qT/B;EqD3qTE;IACE,6BAA2B;ErD6qT/B;EqD9qTE;IACE,0BAA2B;ErDgrT/B;EqDjrTE;IACE,6BAA2B;ErDmrT/B;AACF;;ACvlTE;EoD9FE;IACE,0BAA2B;ErDyrT/B;EqD1rTE;IACE,4BAA2B;ErD4rT/B;EqD7rTE;IACE,0BAA2B;ErD+rT/B;EqDhsTE;IACE,4BAA2B;ErDksT/B;EqDnsTE;IACE,6BAA2B;ErDqsT/B;EqDtsTE;IACE,0BAA2B;ErDwsT/B;EqDzsTE;IACE,6BAA2B;ErD2sT/B;AACF;;AChmTI;EoD7GA;IACE,0BAA2B;ErDitT/B;EqDltTE;IACE,4BAA2B;ErDotT/B;EqDrtTE;IACE,0BAA2B;ErDutT/B;EqDxtTE;IACE,4BAA2B;ErD0tT/B;EqD3tTE;IACE,6BAA2B;ErD6tT/B;EqD9tTE;IACE,0BAA2B;ErDguT/B;EqDjuTE;IACE,6BAA2B;ErDmuT/B;AACF;;ACzmTI;EoD5HA;IACE,0BAA2B;ErDyuT/B;EqD1uTE;IACE,4BAA2B;ErD4uT/B;EqD7uTE;IACE,0BAA2B;ErD+uT/B;EqDhvTE;IACE,4BAA2B;ErDkvT/B;EqDnvTE;IACE,6BAA2B;ErDqvT/B;EqDtvTE;IACE,0BAA2B;ErDwvT/B;EqDzvTE;IACE,6BAA2B;ErD2vT/B;AACF;;AqDnuTE;EACE,6BAAqC;ArDsuTzC;;AqDvuTE;EACE,8BAAqC;ArD0uTzC;;AqD3uTE;EACE,2BAAqC;ArD8uTzC;;AqD/uTE;EACE,4BAAqC;ArDkvTzC;;AC/rTE;EoD/CE;IACE,6BAAqC;ErDkvTzC;AACF;;ACjsTE;EoDhDE;IACE,6BAAqC;ErDqvTzC;AACF;;ACnsTE;EoDjDE;IACE,6BAAqC;ErDwvTzC;AACF;;ACrsTE;EoDlDE;IACE,6BAAqC;ErD2vTzC;AACF;;ACvsTE;EoDnDE;IACE,6BAAqC;ErD8vTzC;AACF;;ACxsTI;EoDrDA;IACE,6BAAqC;ErDiwTzC;AACF;;ACpsTI;EoD5DA;IACE,6BAAqC;ErDowTzC;AACF;;ACrsTI;EoD9DA;IACE,6BAAqC;ErDuwTzC;AACF;;ACjsTI;EoDrEA;IACE,6BAAqC;ErD0wTzC;AACF;;ACrvTE;EoD/CE;IACE,8BAAqC;ErDwyTzC;AACF;;ACvvTE;EoDhDE;IACE,8BAAqC;ErD2yTzC;AACF;;ACzvTE;EoDjDE;IACE,8BAAqC;ErD8yTzC;AACF;;AC3vTE;EoDlDE;IACE,8BAAqC;ErDizTzC;AACF;;AC7vTE;EoDnDE;IACE,8BAAqC;ErDozTzC;AACF;;AC9vTI;EoDrDA;IACE,8BAAqC;ErDuzTzC;AACF;;AC1vTI;EoD5DA;IACE,8BAAqC;ErD0zTzC;AACF;;AC3vTI;EoD9DA;IACE,8BAAqC;ErD6zTzC;AACF;;ACvvTI;EoDrEA;IACE,8BAAqC;ErDg0TzC;AACF;;AC3yTE;EoD/CE;IACE,2BAAqC;ErD81TzC;AACF;;AC7yTE;EoDhDE;IACE,2BAAqC;ErDi2TzC;AACF;;AC/yTE;EoDjDE;IACE,2BAAqC;ErDo2TzC;AACF;;ACjzTE;EoDlDE;IACE,2BAAqC;ErDu2TzC;AACF;;ACnzTE;EoDnDE;IACE,2BAAqC;ErD02TzC;AACF;;ACpzTI;EoDrDA;IACE,2BAAqC;ErD62TzC;AACF;;AChzTI;EoD5DA;IACE,2BAAqC;ErDg3TzC;AACF;;ACjzTI;EoD9DA;IACE,2BAAqC;ErDm3TzC;AACF;;AC7yTI;EoDrEA;IACE,2BAAqC;ErDs3TzC;AACF;;ACj2TE;EoD/CE;IACE,4BAAqC;ErDo5TzC;AACF;;ACn2TE;EoDhDE;IACE,4BAAqC;ErDu5TzC;AACF;;ACr2TE;EoDjDE;IACE,4BAAqC;ErD05TzC;AACF;;ACv2TE;EoDlDE;IACE,4BAAqC;ErD65TzC;AACF;;ACz2TE;EoDnDE;IACE,4BAAqC;ErDg6TzC;AACF;;AC12TI;EoDrDA;IACE,4BAAqC;ErDm6TzC;AACF;;ACt2TI;EoD5DA;IACE,4BAAqC;ErDs6TzC;AACF;;ACv2TI;EoD9DA;IACE,4BAAqC;ErDy6TzC;AACF;;ACn2TI;EoDrEA;IACE,4BAAqC;ErD46TzC;AACF;;AqD36TA;EACE,qCAAqC;ArD86TvC;;AqD56TA;EACE,oCAAoC;ArD+6TtC;;AqD76TA;EACE,oCAAoC;ArDg7TtC;;AqD96TA;EACE,6BAA6B;ArDi7T/B;;AqD/6TA;EACE,2BAAqC;ArDk7TvC;;AqDj7TA;EACE,2BAAsC;ArDo7TxC;;AqDn7TA;EACE,2BAAsC;ArDs7TxC;;AqDr7TA;EACE,2BAAwC;ArDw7T1C;;AqDv7TA;EACE,2BAAoC;ArD07TtC;;AqDx7TA;EACE,+LAAuC;ArD27TzC;;AqDz7TA;EACE,+LAAyC;ArD47T3C;;AqD17TA;EACE,+LAA0C;ArD67T5C;;AqD37TA;EACE,iCAAyC;ArD87T3C;;AqD57TA;EACE,iCAAoC;ArD+7TtC;;AsD3hUE;EACE,yBAA+B;AtD8hUnC;;ACn9TE;EqDzEE;IACE,yBAA+B;EtDgiUnC;AACF;;ACr9TE;EqD1EE;IACE,yBAA+B;EtDmiUnC;AACF;;ACv9TE;EqD3EE;IACE,yBAA+B;EtDsiUnC;AACF;;ACz9TE;EqD5EE;IACE,yBAA+B;EtDyiUnC;AACF;;AC39TE;EqD7EE;IACE,yBAA+B;EtD4iUnC;AACF;;AC59TI;EqD/EA;IACE,yBAA+B;EtD+iUnC;AACF;;ACx9TI;EqDtFA;IACE,yBAA+B;EtDkjUnC;AACF;;ACz9TI;EqDxFA;IACE,yBAA+B;EtDqjUnC;AACF;;ACr9TI;EqD/FA;IACE,yBAA+B;EtDwjUnC;AACF;;AsDrlUE;EACE,wBAA+B;AtDwlUnC;;AC7gUE;EqDzEE;IACE,wBAA+B;EtD0lUnC;AACF;;AC/gUE;EqD1EE;IACE,wBAA+B;EtD6lUnC;AACF;;ACjhUE;EqD3EE;IACE,wBAA+B;EtDgmUnC;AACF;;ACnhUE;EqD5EE;IACE,wBAA+B;EtDmmUnC;AACF;;ACrhUE;EqD7EE;IACE,wBAA+B;EtDsmUnC;AACF;;ACthUI;EqD/EA;IACE,wBAA+B;EtDymUnC;AACF;;AClhUI;EqDtFA;IACE,wBAA+B;EtD4mUnC;AACF;;ACnhUI;EqDxFA;IACE,wBAA+B;EtD+mUnC;AACF;;AC/gUI;EqD/FA;IACE,wBAA+B;EtDknUnC;AACF;;AsD/oUE;EACE,0BAA+B;AtDkpUnC;;ACvkUE;EqDzEE;IACE,0BAA+B;EtDopUnC;AACF;;ACzkUE;EqD1EE;IACE,0BAA+B;EtDupUnC;AACF;;AC3kUE;EqD3EE;IACE,0BAA+B;EtD0pUnC;AACF;;AC7kUE;EqD5EE;IACE,0BAA+B;EtD6pUnC;AACF;;AC/kUE;EqD7EE;IACE,0BAA+B;EtDgqUnC;AACF;;AChlUI;EqD/EA;IACE,0BAA+B;EtDmqUnC;AACF;;AC5kUI;EqDtFA;IACE,0BAA+B;EtDsqUnC;AACF;;AC7kUI;EqDxFA;IACE,0BAA+B;EtDyqUnC;AACF;;ACzkUI;EqD/FA;IACE,0BAA+B;EtD4qUnC;AACF;;AsDzsUE;EACE,gCAA+B;AtD4sUnC;;ACjoUE;EqDzEE;IACE,gCAA+B;EtD8sUnC;AACF;;ACnoUE;EqD1EE;IACE,gCAA+B;EtDitUnC;AACF;;ACroUE;EqD3EE;IACE,gCAA+B;EtDotUnC;AACF;;ACvoUE;EqD5EE;IACE,gCAA+B;EtDutUnC;AACF;;ACzoUE;EqD7EE;IACE,gCAA+B;EtD0tUnC;AACF;;AC1oUI;EqD/EA;IACE,gCAA+B;EtD6tUnC;AACF;;ACtoUI;EqDtFA;IACE,gCAA+B;EtDguUnC;AACF;;ACvoUI;EqDxFA;IACE,gCAA+B;EtDmuUnC;AACF;;ACnoUI;EqD/FA;IACE,gCAA+B;EtDsuUnC;AACF;;AsDnwUE;EACE,+BAA+B;AtDswUnC;;AC3rUE;EqDzEE;IACE,+BAA+B;EtDwwUnC;AACF;;AC7rUE;EqD1EE;IACE,+BAA+B;EtD2wUnC;AACF;;AC/rUE;EqD3EE;IACE,+BAA+B;EtD8wUnC;AACF;;ACjsUE;EqD5EE;IACE,+BAA+B;EtDixUnC;AACF;;ACnsUE;EqD7EE;IACE,+BAA+B;EtDoxUnC;AACF;;ACpsUI;EqD/EA;IACE,+BAA+B;EtDuxUnC;AACF;;AChsUI;EqDtFA;IACE,+BAA+B;EtD0xUnC;AACF;;ACjsUI;EqDxFA;IACE,+BAA+B;EtD6xUnC;AACF;;AC7rUI;EqD/FA;IACE,+BAA+B;EtDgyUnC;AACF;;AsD/xUA;EACE,wBAAwB;AtDkyU1B;;AsDhyUA;EACE,uBAAuB;EACvB,iCAAiC;EACjC,yBAAyB;EACzB,2BAA2B;EAC3B,qBAAqB;EACrB,6BAA6B;EAC7B,8BAA8B;EAC9B,wBAAwB;AtDmyU1B;;AChwUE;EqDhCA;IACE,wBAAwB;EtDoyU1B;AACF;;AClwUE;EqDhCA;IACE,wBAAwB;EtDsyU1B;AACF;;ACpwUE;EqDhCA;IACE,wBAAwB;EtDwyU1B;AACF;;ACtwUE;EqDhCA;IACE,wBAAwB;EtD0yU1B;AACF;;ACxwUE;EqDhCA;IACE,wBAAwB;EtD4yU1B;AACF;;ACzwUI;EqDjCF;IACE,wBAAwB;EtD8yU1B;AACF;;ACrwUI;EqDvCF;IACE,wBAAwB;EtDgzU1B;AACF;;ACtwUI;EqDxCF;IACE,wBAAwB;EtDkzU1B;AACF;;AClwUI;EqD9CF;IACE,wBAAwB;EtDozU1B;AACF;;AsDnzUA;EACE,6BAA6B;AtDszU/B;;AC1zUE;EqDOA;IACE,6BAA6B;EtDuzU/B;AACF;;AC5zUE;EqDOA;IACE,6BAA6B;EtDyzU/B;AACF;;AC9zUE;EqDOA;IACE,6BAA6B;EtD2zU/B;AACF;;ACh0UE;EqDOA;IACE,6BAA6B;EtD6zU/B;AACF;;ACl0UE;EqDOA;IACE,6BAA6B;EtD+zU/B;AACF;;ACn0UI;EqDMF;IACE,6BAA6B;EtDi0U/B;AACF;;AC/zUI;EqDAF;IACE,6BAA6B;EtDm0U/B;AACF;;ACh0UI;EqDDF;IACE,6BAA6B;EtDq0U/B;AACF;;AC5zUI;EqDPF;IACE,6BAA6B;EtDu0U/B;AACF;;AuDj8UA,iBAAA;ACQA;EACE,oBAAoB;EACpB,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AxD67UhC;;AwDj8UA;EAMI,gBAAgB;AxD+7UpB;;AwDr8UA;EASM,mBAAmB;AxDg8UzB;;AwDz8UA;EAeM,uBtDRyB;EsDSzB,ctDtBuB;AFo9U7B;;AwD98UA;;EAmBQ,cAAc;AxDg8UtB;;AwDn9UA;EAqBQ,ctD3BqB;AF69U7B;;AwDv9UA;EAuBQ,4BtD7BqB;AFi+U7B;;AwD39UA;;EA0BU,ctDhCmB;AFs+U7B;;AC34UE;EuDrFF;IA6BU,uBtDtBqB;EF89U7B;AACF;;AwDt+UA;;EAgCQ,4BtDtCqB;AFi/U7B;;AwD3+UA;;;EAqCU,yB7CgEuB;E6C/DvB,ctD5CmB;AFw/U7B;;AwDl/UA;EAyCU,ctD/CmB;EsDgDnB,YAAY;AxD68UtB;;AwDv/UA;EA4CY,UAAU;AxD+8UtB;;AwD3/UA;EA+CY,UAAU;AxDg9UtB;;AwD//UA;EAmDY,ctDzDiB;AFygV7B;;AwDngVA;EAqDc,uCtD3De;AF6gV7B;;AwDvgVA;EAyDc,yBtD/De;EsDgEf,qBtDhEe;EsDiEf,YtDpDiB;AFsgV/B;;AwD7gVA;EAiEU,4EAAyG;AxDg9UnH;;ACx8UE;EuDzEF;IAoEc,4EAAyG;ExDk9UrH;AACF;;AwDvhVA;EAeM,yBtDrBuB;EsDsBvB,YtDTyB;AFqhV/B;;AwD5hVA;;EAmBQ,cAAc;AxD8gVtB;;AwDjiVA;EAqBQ,YtDduB;AF8hV/B;;AwDriVA;EAuBQ,+BtDhBuB;AFkiV/B;;AwDziVA;;EA0BU,YtDnBqB;AFuiV/B;;ACz9UE;EuDrFF;IA6BU,yBtDnCmB;EFyjV3B;AACF;;AwDpjVA;;EAgCQ,+BtDzBuB;AFkjV/B;;AwDzjVA;;;EAqCU,uB7CgEuB;E6C/DvB,YtD/BqB;AFyjV/B;;AwDhkVA;EAyCU,YtDlCqB;EsDmCrB,YAAY;AxD2hVtB;;AwDrkVA;EA4CY,UAAU;AxD6hVtB;;AwDzkVA;EA+CY,UAAU;AxD8hVtB;;AwD7kVA;EAmDY,YtD5CmB;AF0kV/B;;AwDjlVA;EAqDc,uCtD3De;AF2lV7B;;AwDrlVA;EAyDc,uBtDlDiB;EsDmDjB,mBtDnDiB;EsDoDjB,ctDjEe;AFimV7B;;AwD3lVA;EAiEU,8EAAyG;AxD8hVnH;;ACthVE;EuDzEF;IAoEc,8EAAyG;ExDgiVrH;AACF;;AwDrmVA;EAeM,4BtDVwB;EsDWxB,yB7CwDe;AXkiVrB;;AwD1mVA;;EAmBQ,cAAc;AxD4lVtB;;AwD/mVA;EAqBQ,yB7CmDa;AX2iVrB;;AwDnnVA;EAuBQ,yB7CiDa;AX+iVrB;;AwDvnVA;;EA0BU,yB7C8CW;AXojVrB;;ACviVE;EuDrFF;IA6BU,4BtDxBoB;EF4nV5B;AACF;;AwDloVA;;EAgCQ,yB7CwCa;AX+jVrB;;AwDvoVA;;;EAqCU,yB7CgEuB;E6C/DvB,yB7CkCW;AXskVrB;;AwD9oVA;EAyCU,yB7C+BW;E6C9BX,YAAY;AxDymVtB;;AwDnpVA;EA4CY,UAAU;AxD2mVtB;;AwDvpVA;EA+CY,UAAU;AxD4mVtB;;AwD3pVA;EAmDY,yB7CqBS;AXulVrB;;AwD/pVA;EAqDc,uCtD3De;AFyqV7B;;AwDnqVA;EAyDc,oC7CeO;E6CdP,gC7CcO;E6CbP,iBtDtDgB;AFoqV9B;;AwDzqVA;EAiEU,iFAAyG;AxD4mVnH;;ACpmVE;EuDzEF;IAoEc,iFAAyG;ExD8mVrH;AACF;;AwDnrVA;EAeM,yBtDjBwB;EsDkBxB,W7C0DU;AX8mVhB;;AwDxrVA;;EAmBQ,cAAc;AxD0qVtB;;AwD7rVA;EAqBQ,W7CqDQ;AXunVhB;;AwDjsVA;EAuBQ,+B7CmDQ;AX2nVhB;;AwDrsVA;;EA0BU,W7CgDM;AXgoVhB;;ACrnVE;EuDrFF;IA6BU,yBtD/BoB;EFitV5B;AACF;;AwDhtVA;;EAgCQ,+B7C0CQ;AX2oVhB;;AwDrtVA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXkpVhB;;AwD5tVA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDurVtB;;AwDjuVA;EA4CY,UAAU;AxDyrVtB;;AwDruVA;EA+CY,UAAU;AxD0rVtB;;AwDzuVA;EAmDY,W7CuBI;AXmqVhB;;AwD7uVA;EAqDc,uCtD3De;AFuvV7B;;AwDjvVA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD7DgB;AFyvV9B;;AwDvvVA;EAiEU,gFAAyG;AxD0rVnH;;AClrVE;EuDzEF;IAoEc,gFAAyG;ExD4rVrH;AACF;;AwDjwVA;EAeM,yBtDH4B;EsDI5B,W7C0DU;AX4rVhB;;AwDtwVA;;EAmBQ,cAAc;AxDwvVtB;;AwD3wVA;EAqBQ,W7CqDQ;AXqsVhB;;AwD/wVA;EAuBQ,+B7CmDQ;AXysVhB;;AwDnxVA;;EA0BU,W7CgDM;AX8sVhB;;ACnsVE;EuDrFF;IA6BU,yBtDjBwB;EFixVhC;AACF;;AwD9xVA;;EAgCQ,+B7C0CQ;AXytVhB;;AwDnyVA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXguVhB;;AwD1yVA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDqwVtB;;AwD/yVA;EA4CY,UAAU;AxDuwVtB;;AwDnzVA;EA+CY,UAAU;AxDwwVtB;;AwDvzVA;EAmDY,W7CuBI;AXivVhB;;AwD3zVA;EAqDc,uCtD3De;AFq0V7B;;AwD/zVA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD/CoB;AFyzVlC;;AwDr0VA;EAiEU,gFAAyG;AxDwwVnH;;AChwVE;EuDzEF;IAoEc,gFAAyG;ExD0wVrH;AACF;;AwD/0VA;EAeM,yBtDD4B;EsDE5B,W7C0DU;AX0wVhB;;AwDp1VA;;EAmBQ,cAAc;AxDs0VtB;;AwDz1VA;EAqBQ,W7CqDQ;AXmxVhB;;AwD71VA;EAuBQ,+B7CmDQ;AXuxVhB;;AwDj2VA;;EA0BU,W7CgDM;AX4xVhB;;ACjxVE;EuDrFF;IA6BU,yBtDfwB;EF61VhC;AACF;;AwD52VA;;EAgCQ,+B7C0CQ;AXuyVhB;;AwDj3VA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX8yVhB;;AwDx3VA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDm1VtB;;AwD73VA;EA4CY,UAAU;AxDq1VtB;;AwDj4VA;EA+CY,UAAU;AxDs1VtB;;AwDr4VA;EAmDY,W7CuBI;AX+zVhB;;AwDz4VA;EAqDc,uCtD3De;AFm5V7B;;AwD74VA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD7CoB;AFq4VlC;;AwDn5VA;EAiEU,gFAAyG;AxDs1VnH;;AC90VE;EuDzEF;IAoEc,gFAAyG;ExDw1VrH;AACF;;AwD75VA;EAeM,yBtDF4B;EsDG5B,W7C0DU;AXw1VhB;;AwDl6VA;;EAmBQ,cAAc;AxDo5VtB;;AwDv6VA;EAqBQ,W7CqDQ;AXi2VhB;;AwD36VA;EAuBQ,+B7CmDQ;AXq2VhB;;AwD/6VA;;EA0BU,W7CgDM;AX02VhB;;AC/1VE;EuDrFF;IA6BU,yBtDhBwB;EF46VhC;AACF;;AwD17VA;;EAgCQ,+B7C0CQ;AXq3VhB;;AwD/7VA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX43VhB;;AwDt8VA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDi6VtB;;AwD38VA;EA4CY,UAAU;AxDm6VtB;;AwD/8VA;EA+CY,UAAU;AxDo6VtB;;AwDn9VA;EAmDY,W7CuBI;AX64VhB;;AwDv9VA;EAqDc,uCtD3De;AFi+V7B;;AwD39VA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD9CoB;AFo9VlC;;AwDj+VA;EAiEU,gFAAyG;AxDo6VnH;;AC55VE;EuDzEF;IAoEc,gFAAyG;ExDs6VrH;AACF;;AwD3+VA;EAeM,yBtDJ4B;EsDK5B,W7C0DU;AXs6VhB;;AwDh/VA;;EAmBQ,cAAc;AxDk+VtB;;AwDr/VA;EAqBQ,W7CqDQ;AX+6VhB;;AwDz/VA;EAuBQ,+B7CmDQ;AXm7VhB;;AwD7/VA;;EA0BU,W7CgDM;AXw7VhB;;AC76VE;EuDrFF;IA6BU,yBtDlBwB;EF4/VhC;AACF;;AwDxgWA;;EAgCQ,+B7C0CQ;AXm8VhB;;AwD7gWA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX08VhB;;AwDphWA;EAyCU,W7CiCM;E6ChCN,YAAY;AxD++VtB;;AwDzhWA;EA4CY,UAAU;AxDi/VtB;;AwD7hWA;EA+CY,UAAU;AxDk/VtB;;AwDjiWA;EAmDY,W7CuBI;AX29VhB;;AwDriWA;EAqDc,uCtD3De;AF+iW7B;;AwDziWA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctDhDoB;AFoiWlC;;AwD/iWA;EAiEU,gFAAyG;AxDk/VnH;;AC1+VE;EuDzEF;IAoEc,gFAAyG;ExDo/VrH;AACF;;AwDzjWA;EAeM,yBtDL4B;EsDM5B,yB7CwDe;AXs/VrB;;AwD9jWA;;EAmBQ,cAAc;AxDgjWtB;;AwDnkWA;EAqBQ,yB7CmDa;AX+/VrB;;AwDvkWA;EAuBQ,yB7CiDa;AXmgWrB;;AwD3kWA;;EA0BU,yB7C8CW;AXwgWrB;;AC3/VE;EuDrFF;IA6BU,yBtDnBwB;EF2kWhC;AACF;;AwDtlWA;;EAgCQ,yB7CwCa;AXmhWrB;;AwD3lWA;;;EAqCU,yB7CgEuB;E6C/DvB,yB7CkCW;AX0hWrB;;AwDlmWA;EAyCU,yB7C+BW;E6C9BX,YAAY;AxD6jWtB;;AwDvmWA;EA4CY,UAAU;AxD+jWtB;;AwD3mWA;EA+CY,UAAU;AxDgkWtB;;AwD/mWA;EAmDY,yB7CqBS;AX2iWrB;;AwDnnWA;EAqDc,uCtD3De;AF6nW7B;;AwDvnWA;EAyDc,oC7CeO;E6CdP,gC7CcO;E6CbP,ctDjDoB;AFmnWlC;;AwD7nWA;EAiEU,gFAAyG;AxDgkWnH;;ACxjWE;EuDzEF;IAoEc,gFAAyG;ExDkkWrH;AACF;;AwDvoWA;EAeM,yBtDC2B;EsDA3B,W7C0DU;AXkkWhB;;AwD5oWA;;EAmBQ,cAAc;AxD8nWtB;;AwDjpWA;EAqBQ,W7CqDQ;AX2kWhB;;AwDrpWA;EAuBQ,+B7CmDQ;AX+kWhB;;AwDzpWA;;EA0BU,W7CgDM;AXolWhB;;ACzkWE;EuDrFF;IA6BU,yBtDbuB;EFmpW/B;AACF;;AwDpqWA;;EAgCQ,+B7C0CQ;AX+lWhB;;AwDzqWA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXsmWhB;;AwDhrWA;EAyCU,W7CiCM;E6ChCN,YAAY;AxD2oWtB;;AwDrrWA;EA4CY,UAAU;AxD6oWtB;;AwDzrWA;EA+CY,UAAU;AxD8oWtB;;AwD7rWA;EAmDY,W7CuBI;AXunWhB;;AwDjsWA;EAqDc,uCtD3De;AF2sW7B;;AwDrsWA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD3CmB;AF2rWjC;;AwD3sWA;EAiEU,gFAAyG;AxD8oWnH;;ACtoWE;EuDzEF;IAoEc,gFAAyG;ExDgpWrH;AACF;;AwDrtWA;EAwEM,eA/E0B;AxDguWhC;;AC5oWE;EuD7EF;IA4EQ,oBAlF8B;ExDouWpC;AACF;;AClpWE;EuD7EF;IAgFQ,qBArF8B;ExDyuWpC;AACF;;AwDruWA;EAqFM,mBAAmB;EACnB,aAAa;AxDopWnB;;AwD1uWA;EAwFQ,YAAY;EACZ,cAAc;AxDspWtB;;AwD/uWA;EA2FI,gBAAgB;AxDwpWpB;;AwDnvWA;EA6FI,iBAAiB;AxD0pWrB;;AwDtpWA;EAEE,gBAAgB;AxDwpWlB;;AwD1pWA;EAII,SAAS;EACT,gBAAgB;EAChB,eAAe;EACf,kBAAkB;EAClB,QAAQ;EACR,qCAAqC;AxD0pWzC;;AwDnqWA;EAYI,YAAY;AxD2pWhB;;AC/rWE;EuDwBF;IAeI,aAAa;ExD6pWf;AACF;;AwD5pWA;EACE,kBAAkB;AxD+pWpB;;ACzsWE;EuDyCF;IAKM,aAAa;ExDgqWjB;EwDrqWF;IAOQ,sBAAsB;ExDiqW5B;AACF;;AC9sWE;EuDqCF;IASI,aAAa;IACb,uBAAuB;ExDqqWzB;EwD/qWF;IvDoBI,mBuDRwC;ExDsqW1C;AACF;;AwDnqWA;;EAEE,YAAY;EACZ,cAAc;AxDsqWhB;;AwDpqWA;EACE,YAAY;EACZ,cAAc;EACd,oBAlJ6B;AxDyzW/B;;AyDrzWA;EACE,oBAL2B;AzD6zW7B;;AC5tWE;EwD7FF;IAMM,oBAT8B;EzDi0WlC;EyD9zWF;IAQM,qBAV8B;EzDm0WlC;AACF;;A0Dl0WA;EACE,yBxDS4B;EwDR5B,yBAJ+B;A1Dy0WjC","file":"bulma-rtl.css"} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.min.css b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.min.css
new file mode 100644
index 0000000..3ace0cc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma-rtl.min.css
@@ -0,0 +1 @@
+/*! bulma.io v0.9.1 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-right:calc(-.5em - 1px);margin-left:.25em}.button .icon:last-child:not(:first-child){margin-right:.25em;margin-left:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-left:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-left:-1px}.buttons.has-addons .button:last-child{margin-left:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-right:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-right:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-right:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-right:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 1.5rem 1.25rem 2.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{left:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-left:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-left:0}.tags.has-addons .tag:not(:first-child){margin-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.tags.has-addons .tag:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-right:.25rem;margin-left:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-right:-.375em;margin-left:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-right:.1875em;margin-left:-.375em}.tag:not(body) .icon:first-child:last-child{margin-right:-.375em;margin-left:-.375em}.tag:not(body).is-delete{margin-right:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox input[disabled],.checkbox[disabled],.radio input[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-right:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;left:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-right:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-left:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;left:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-left:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-left:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-left:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-left:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-left:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;left:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-right:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-left:.5em}.breadcrumb .icon:last-child{margin-right:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;overflow:hidden;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-left:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;right:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-left:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-left:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-left:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-left:1rem}.media-right{margin-right:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-right:1px solid #dbdbdb;margin:.75em;padding-right:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-right:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;left:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-left:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-right:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-left:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;left:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-left:auto}.navbar-end{justify-content:flex-end;margin-right:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;right:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-left:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-right:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-left:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-left:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-left:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-left:.5em}.tabs .icon:last-child{margin-right:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:0 0 4px 4px}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-right:-1px}.tabs.is-toggle li:first-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li:last-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-link-light{color:#eef3fc!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c2d5f5!important}.has-background-link-light{background-color:#eef3fc!important}.has-text-link-dark{color:#2160c4!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#3b79de!important}.has-background-link-dark{background-color:#2160c4!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-info-light{color:#eef6fc!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c2e0f5!important}.has-background-info-light{background-color:#eef6fc!important}.has-text-info-dark{color:#1d72aa!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#248fd6!important}.has-background-info-dark{background-color:#1d72aa!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-success-light{color:#effaf3!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eed6!important}.has-background-success-light{background-color:#effaf3!important}.has-text-success-dark{color:#257942!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a058!important}.has-background-success-dark{background-color:#257942!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-warning-light{color:#fffbeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#fff1b8!important}.has-background-warning-light{background-color:#fffbeb!important}.has-text-warning-dark{color:#947600!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79f00!important}.has-background-warning-dark{background-color:#947600!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-left:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css
new file mode 100644
index 0000000..a78430b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css
@@ -0,0 +1,11624 @@
+/*! bulma.io v0.9.1 | MIT License | github.com/jgthms/bulma */
+/* Bulma Utilities */
+@-webkit-keyframes spinAround {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(359deg);
+ }
+}
+@keyframes spinAround {
+ from {
+ transform: rotate(0deg);
+ }
+ to {
+ transform: rotate(359deg);
+ }
+}
+
+.delete, .modal-close, .button, .file, .breadcrumb, .pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis, .tabs, .is-unselectable {
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.select:not(.is-multiple):not(.is-loading)::after, .navbar-link:not(.is-arrowless)::after {
+ border: 3px solid transparent;
+ border-radius: 2px;
+ border-right: 0;
+ border-top: 0;
+ content: " ";
+ display: block;
+ height: 0.625em;
+ margin-top: -0.4375em;
+ pointer-events: none;
+ position: absolute;
+ top: 50%;
+ transform: rotate(-45deg);
+ transform-origin: center;
+ width: 0.625em;
+}
+
+.box:not(:last-child), .content:not(:last-child), .notification:not(:last-child), .progress:not(:last-child), .table:not(:last-child), .table-container:not(:last-child), .title:not(:last-child),
+.subtitle:not(:last-child), .block:not(:last-child), .highlight:not(:last-child), .breadcrumb:not(:last-child), .level:not(:last-child), .message:not(:last-child), .pagination:not(:last-child), .tabs:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.delete, .modal-close {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ background-color: rgba(10, 10, 10, 0.2);
+ border: none;
+ border-radius: 290486px;
+ cursor: pointer;
+ pointer-events: auto;
+ display: inline-block;
+ flex-grow: 0;
+ flex-shrink: 0;
+ font-size: 0;
+ height: 20px;
+ max-height: 20px;
+ max-width: 20px;
+ min-height: 20px;
+ min-width: 20px;
+ outline: none;
+ position: relative;
+ vertical-align: top;
+ width: 20px;
+}
+
+.delete::before, .modal-close::before, .delete::after, .modal-close::after {
+ background-color: white;
+ content: "";
+ display: block;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ transform-origin: center center;
+}
+
+.delete::before, .modal-close::before {
+ height: 2px;
+ width: 50%;
+}
+
+.delete::after, .modal-close::after {
+ height: 50%;
+ width: 2px;
+}
+
+.delete:hover, .modal-close:hover, .delete:focus, .modal-close:focus {
+ background-color: rgba(10, 10, 10, 0.3);
+}
+
+.delete:active, .modal-close:active {
+ background-color: rgba(10, 10, 10, 0.4);
+}
+
+.is-small.delete, .is-small.modal-close {
+ height: 16px;
+ max-height: 16px;
+ max-width: 16px;
+ min-height: 16px;
+ min-width: 16px;
+ width: 16px;
+}
+
+.is-medium.delete, .is-medium.modal-close {
+ height: 24px;
+ max-height: 24px;
+ max-width: 24px;
+ min-height: 24px;
+ min-width: 24px;
+ width: 24px;
+}
+
+.is-large.delete, .is-large.modal-close {
+ height: 32px;
+ max-height: 32px;
+ max-width: 32px;
+ min-height: 32px;
+ min-width: 32px;
+ width: 32px;
+}
+
+.button.is-loading::after, .loader, .select.is-loading::after, .control.is-loading::after {
+ -webkit-animation: spinAround 500ms infinite linear;
+ animation: spinAround 500ms infinite linear;
+ border: 2px solid #dbdbdb;
+ border-radius: 290486px;
+ border-right-color: transparent;
+ border-top-color: transparent;
+ content: "";
+ display: block;
+ height: 1em;
+ position: relative;
+ width: 1em;
+}
+
+.image.is-square img,
+.image.is-square .has-ratio, .image.is-1by1 img,
+.image.is-1by1 .has-ratio, .image.is-5by4 img,
+.image.is-5by4 .has-ratio, .image.is-4by3 img,
+.image.is-4by3 .has-ratio, .image.is-3by2 img,
+.image.is-3by2 .has-ratio, .image.is-5by3 img,
+.image.is-5by3 .has-ratio, .image.is-16by9 img,
+.image.is-16by9 .has-ratio, .image.is-2by1 img,
+.image.is-2by1 .has-ratio, .image.is-3by1 img,
+.image.is-3by1 .has-ratio, .image.is-4by5 img,
+.image.is-4by5 .has-ratio, .image.is-3by4 img,
+.image.is-3by4 .has-ratio, .image.is-2by3 img,
+.image.is-2by3 .has-ratio, .image.is-3by5 img,
+.image.is-3by5 .has-ratio, .image.is-9by16 img,
+.image.is-9by16 .has-ratio, .image.is-1by2 img,
+.image.is-1by2 .has-ratio, .image.is-1by3 img,
+.image.is-1by3 .has-ratio, .modal, .modal-background, .is-overlay, .hero-video {
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.button, .input, .textarea, .select select, .file-cta,
+.file-name, .pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ align-items: center;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ box-shadow: none;
+ display: inline-flex;
+ font-size: 1rem;
+ height: 2.5em;
+ justify-content: flex-start;
+ line-height: 1.5;
+ padding-bottom: calc(0.5em - 1px);
+ padding-left: calc(0.75em - 1px);
+ padding-right: calc(0.75em - 1px);
+ padding-top: calc(0.5em - 1px);
+ position: relative;
+ vertical-align: top;
+}
+
+.button:focus, .input:focus, .textarea:focus, .select select:focus, .file-cta:focus,
+.file-name:focus, .pagination-previous:focus,
+.pagination-next:focus,
+.pagination-link:focus,
+.pagination-ellipsis:focus, .is-focused.button, .is-focused.input, .is-focused.textarea, .select select.is-focused, .is-focused.file-cta,
+.is-focused.file-name, .is-focused.pagination-previous,
+.is-focused.pagination-next,
+.is-focused.pagination-link,
+.is-focused.pagination-ellipsis, .button:active, .input:active, .textarea:active, .select select:active, .file-cta:active,
+.file-name:active, .pagination-previous:active,
+.pagination-next:active,
+.pagination-link:active,
+.pagination-ellipsis:active, .is-active.button, .is-active.input, .is-active.textarea, .select select.is-active, .is-active.file-cta,
+.is-active.file-name, .is-active.pagination-previous,
+.is-active.pagination-next,
+.is-active.pagination-link,
+.is-active.pagination-ellipsis {
+ outline: none;
+}
+
+.button[disabled], .input[disabled], .textarea[disabled], .select select[disabled], .file-cta[disabled],
+.file-name[disabled], .pagination-previous[disabled],
+.pagination-next[disabled],
+.pagination-link[disabled],
+.pagination-ellipsis[disabled],
+fieldset[disabled] .button,
+fieldset[disabled] .input,
+fieldset[disabled] .textarea,
+fieldset[disabled] .select select,
+.select fieldset[disabled] select,
+fieldset[disabled] .file-cta,
+fieldset[disabled] .file-name,
+fieldset[disabled] .pagination-previous,
+fieldset[disabled] .pagination-next,
+fieldset[disabled] .pagination-link,
+fieldset[disabled] .pagination-ellipsis {
+ cursor: not-allowed;
+}
+
+/* Bulma Base */
+/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */
+html,
+body,
+p,
+ol,
+ul,
+li,
+dl,
+dt,
+dd,
+blockquote,
+figure,
+fieldset,
+legend,
+textarea,
+pre,
+iframe,
+hr,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 0;
+ padding: 0;
+}
+
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-size: 100%;
+ font-weight: normal;
+}
+
+ul {
+ list-style: none;
+}
+
+button,
+input,
+select,
+textarea {
+ margin: 0;
+}
+
+html {
+ box-sizing: border-box;
+}
+
+*, *::before, *::after {
+ box-sizing: inherit;
+}
+
+img,
+video {
+ height: auto;
+ max-width: 100%;
+}
+
+iframe {
+ border: 0;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
+
+td:not([align]),
+th:not([align]) {
+ text-align: inherit;
+}
+
+html {
+ background-color: white;
+ font-size: 16px;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ min-width: 300px;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ text-rendering: optimizeLegibility;
+ -webkit-text-size-adjust: 100%;
+ -moz-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+ text-size-adjust: 100%;
+}
+
+article,
+aside,
+figure,
+footer,
+header,
+hgroup,
+section {
+ display: block;
+}
+
+body,
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;
+}
+
+code,
+pre {
+ -moz-osx-font-smoothing: auto;
+ -webkit-font-smoothing: auto;
+ font-family: monospace;
+}
+
+body {
+ color: #4a4a4a;
+ font-size: 1em;
+ font-weight: 400;
+ line-height: 1.5;
+}
+
+a {
+ color: #3273dc;
+ cursor: pointer;
+ text-decoration: none;
+}
+
+a strong {
+ color: currentColor;
+}
+
+a:hover {
+ color: #363636;
+}
+
+code {
+ background-color: whitesmoke;
+ color: #da1039;
+ font-size: 0.875em;
+ font-weight: normal;
+ padding: 0.25em 0.5em 0.25em;
+}
+
+hr {
+ background-color: whitesmoke;
+ border: none;
+ display: block;
+ height: 2px;
+ margin: 1.5rem 0;
+}
+
+img {
+ height: auto;
+ max-width: 100%;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ vertical-align: baseline;
+}
+
+small {
+ font-size: 0.875em;
+}
+
+span {
+ font-style: inherit;
+ font-weight: inherit;
+}
+
+strong {
+ color: #363636;
+ font-weight: 700;
+}
+
+fieldset {
+ border: none;
+}
+
+pre {
+ -webkit-overflow-scrolling: touch;
+ background-color: whitesmoke;
+ color: #4a4a4a;
+ font-size: 0.875em;
+ overflow-x: auto;
+ padding: 1.25rem 1.5rem;
+ white-space: pre;
+ word-wrap: normal;
+}
+
+pre code {
+ background-color: transparent;
+ color: currentColor;
+ font-size: 1em;
+ padding: 0;
+}
+
+table td,
+table th {
+ vertical-align: top;
+}
+
+table td:not([align]),
+table th:not([align]) {
+ text-align: inherit;
+}
+
+table th {
+ color: #363636;
+}
+
+/* Bulma Elements */
+.box {
+ background-color: white;
+ border-radius: 6px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ color: #4a4a4a;
+ display: block;
+ padding: 1.25rem;
+}
+
+a.box:hover, a.box:focus {
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0 0 1px #3273dc;
+}
+
+a.box:active {
+ box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2), 0 0 0 1px #3273dc;
+}
+
+.button {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-width: 1px;
+ color: #363636;
+ cursor: pointer;
+ justify-content: center;
+ padding-bottom: calc(0.5em - 1px);
+ padding-left: 1em;
+ padding-right: 1em;
+ padding-top: calc(0.5em - 1px);
+ text-align: center;
+ white-space: nowrap;
+}
+
+.button strong {
+ color: inherit;
+}
+
+.button .icon, .button .icon.is-small, .button .icon.is-medium, .button .icon.is-large {
+ height: 1.5em;
+ width: 1.5em;
+}
+
+.button .icon:first-child:not(:last-child) {
+ margin-left: calc(-0.5em - 1px);
+ margin-right: 0.25em;
+}
+
+.button .icon:last-child:not(:first-child) {
+ margin-left: 0.25em;
+ margin-right: calc(-0.5em - 1px);
+}
+
+.button .icon:first-child:last-child {
+ margin-left: calc(-0.5em - 1px);
+ margin-right: calc(-0.5em - 1px);
+}
+
+.button:hover, .button.is-hovered {
+ border-color: #b5b5b5;
+ color: #363636;
+}
+
+.button:focus, .button.is-focused {
+ border-color: #3273dc;
+ color: #363636;
+}
+
+.button:focus:not(:active), .button.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.button:active, .button.is-active {
+ border-color: #4a4a4a;
+ color: #363636;
+}
+
+.button.is-text {
+ background-color: transparent;
+ border-color: transparent;
+ color: #4a4a4a;
+ text-decoration: underline;
+}
+
+.button.is-text:hover, .button.is-text.is-hovered, .button.is-text:focus, .button.is-text.is-focused {
+ background-color: whitesmoke;
+ color: #363636;
+}
+
+.button.is-text:active, .button.is-text.is-active {
+ background-color: #e8e8e8;
+ color: #363636;
+}
+
+.button.is-text[disabled],
+fieldset[disabled] .button.is-text {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-white {
+ background-color: white;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white:hover, .button.is-white.is-hovered {
+ background-color: #f9f9f9;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white:focus, .button.is-white.is-focused {
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white:focus:not(:active), .button.is-white.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25);
+}
+
+.button.is-white:active, .button.is-white.is-active {
+ background-color: #f2f2f2;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.button.is-white[disabled],
+fieldset[disabled] .button.is-white {
+ background-color: white;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-white.is-inverted {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-white.is-inverted:hover, .button.is-white.is-inverted.is-hovered {
+ background-color: black;
+}
+
+.button.is-white.is-inverted[disabled],
+fieldset[disabled] .button.is-white.is-inverted {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-white.is-loading::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-white.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ color: white;
+}
+
+.button.is-white.is-outlined:hover, .button.is-white.is-outlined.is-hovered, .button.is-white.is-outlined:focus, .button.is-white.is-outlined.is-focused {
+ background-color: white;
+ border-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-white.is-outlined.is-loading::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-white.is-outlined.is-loading:hover::after, .button.is-white.is-outlined.is-loading.is-hovered::after, .button.is-white.is-outlined.is-loading:focus::after, .button.is-white.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-white.is-outlined[disabled],
+fieldset[disabled] .button.is-white.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-white.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ color: #0a0a0a;
+}
+
+.button.is-white.is-inverted.is-outlined:hover, .button.is-white.is-inverted.is-outlined.is-hovered, .button.is-white.is-inverted.is-outlined:focus, .button.is-white.is-inverted.is-outlined.is-focused {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-white.is-inverted.is-outlined.is-loading:hover::after, .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-white.is-inverted.is-outlined.is-loading:focus::after, .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-white.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-white.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ box-shadow: none;
+ color: #0a0a0a;
+}
+
+.button.is-black {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black:hover, .button.is-black.is-hovered {
+ background-color: #040404;
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black:focus, .button.is-black.is-focused {
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black:focus:not(:active), .button.is-black.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25);
+}
+
+.button.is-black:active, .button.is-black.is-active {
+ background-color: black;
+ border-color: transparent;
+ color: white;
+}
+
+.button.is-black[disabled],
+fieldset[disabled] .button.is-black {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-black.is-inverted {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted:hover, .button.is-black.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-black.is-inverted[disabled],
+fieldset[disabled] .button.is-black.is-inverted {
+ background-color: white;
+ border-color: transparent;
+ box-shadow: none;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-loading::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-black.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-outlined:hover, .button.is-black.is-outlined.is-hovered, .button.is-black.is-outlined:focus, .button.is-black.is-outlined.is-focused {
+ background-color: #0a0a0a;
+ border-color: #0a0a0a;
+ color: white;
+}
+
+.button.is-black.is-outlined.is-loading::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-black.is-outlined.is-loading:hover::after, .button.is-black.is-outlined.is-loading.is-hovered::after, .button.is-black.is-outlined.is-loading:focus::after, .button.is-black.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent white white !important;
+}
+
+.button.is-black.is-outlined[disabled],
+fieldset[disabled] .button.is-black.is-outlined {
+ background-color: transparent;
+ border-color: #0a0a0a;
+ box-shadow: none;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ color: white;
+}
+
+.button.is-black.is-inverted.is-outlined:hover, .button.is-black.is-inverted.is-outlined.is-hovered, .button.is-black.is-inverted.is-outlined:focus, .button.is-black.is-inverted.is-outlined.is-focused {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.button.is-black.is-inverted.is-outlined.is-loading:hover::after, .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-black.is-inverted.is-outlined.is-loading:focus::after, .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #0a0a0a #0a0a0a !important;
+}
+
+.button.is-black.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-black.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: white;
+ box-shadow: none;
+ color: white;
+}
+
+.button.is-light {
+ background-color: whitesmoke;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:hover, .button.is-light.is-hovered {
+ background-color: #eeeeee;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:focus, .button.is-light.is-focused {
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light:focus:not(:active), .button.is-light.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.button.is-light:active, .button.is-light.is-active {
+ background-color: #e8e8e8;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light[disabled],
+fieldset[disabled] .button.is-light {
+ background-color: whitesmoke;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-light.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted:hover, .button.is-light.is-inverted.is-hovered {
+ background-color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-inverted[disabled],
+fieldset[disabled] .button.is-light.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: transparent;
+ box-shadow: none;
+ color: whitesmoke;
+}
+
+.button.is-light.is-loading::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-light.is-outlined {
+ background-color: transparent;
+ border-color: whitesmoke;
+ color: whitesmoke;
+}
+
+.button.is-light.is-outlined:hover, .button.is-light.is-outlined.is-hovered, .button.is-light.is-outlined:focus, .button.is-light.is-outlined.is-focused {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-outlined.is-loading::after {
+ border-color: transparent transparent whitesmoke whitesmoke !important;
+}
+
+.button.is-light.is-outlined.is-loading:hover::after, .button.is-light.is-outlined.is-loading.is-hovered::after, .button.is-light.is-outlined.is-loading:focus::after, .button.is-light.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-light.is-outlined[disabled],
+fieldset[disabled] .button.is-light.is-outlined {
+ background-color: transparent;
+ border-color: whitesmoke;
+ box-shadow: none;
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-light.is-inverted.is-outlined:hover, .button.is-light.is-inverted.is-outlined.is-hovered, .button.is-light.is-inverted.is-outlined:focus, .button.is-light.is-inverted.is-outlined.is-focused {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.button.is-light.is-inverted.is-outlined.is-loading:hover::after, .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-light.is-inverted.is-outlined.is-loading:focus::after, .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent whitesmoke whitesmoke !important;
+}
+
+.button.is-light.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-light.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-dark {
+ background-color: #363636;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:hover, .button.is-dark.is-hovered {
+ background-color: #2f2f2f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:focus, .button.is-dark.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark:focus:not(:active), .button.is-dark.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.button.is-dark:active, .button.is-dark.is-active {
+ background-color: #292929;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-dark[disabled],
+fieldset[disabled] .button.is-dark {
+ background-color: #363636;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-dark.is-inverted {
+ background-color: #fff;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted:hover, .button.is-dark.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-dark.is-inverted[disabled],
+fieldset[disabled] .button.is-dark.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #363636;
+}
+
+.button.is-dark.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-dark.is-outlined {
+ background-color: transparent;
+ border-color: #363636;
+ color: #363636;
+}
+
+.button.is-dark.is-outlined:hover, .button.is-dark.is-outlined.is-hovered, .button.is-dark.is-outlined:focus, .button.is-dark.is-outlined.is-focused {
+ background-color: #363636;
+ border-color: #363636;
+ color: #fff;
+}
+
+.button.is-dark.is-outlined.is-loading::after {
+ border-color: transparent transparent #363636 #363636 !important;
+}
+
+.button.is-dark.is-outlined.is-loading:hover::after, .button.is-dark.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-outlined.is-loading:focus::after, .button.is-dark.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-dark.is-outlined[disabled],
+fieldset[disabled] .button.is-dark.is-outlined {
+ background-color: transparent;
+ border-color: #363636;
+ box-shadow: none;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-dark.is-inverted.is-outlined:hover, .button.is-dark.is-inverted.is-outlined.is-hovered, .button.is-dark.is-inverted.is-outlined:focus, .button.is-dark.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #363636;
+}
+
+.button.is-dark.is-inverted.is-outlined.is-loading:hover::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-dark.is-inverted.is-outlined.is-loading:focus::after, .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #363636 #363636 !important;
+}
+
+.button.is-dark.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-dark.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-primary {
+ background-color: #00d1b2;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:hover, .button.is-primary.is-hovered {
+ background-color: #00c4a7;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:focus, .button.is-primary.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary:focus:not(:active), .button.is-primary.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25);
+}
+
+.button.is-primary:active, .button.is-primary.is-active {
+ background-color: #00b89c;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-primary[disabled],
+fieldset[disabled] .button.is-primary {
+ background-color: #00d1b2;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-primary.is-inverted {
+ background-color: #fff;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-inverted:hover, .button.is-primary.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-primary.is-inverted[disabled],
+fieldset[disabled] .button.is-primary.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-primary.is-outlined {
+ background-color: transparent;
+ border-color: #00d1b2;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-outlined:hover, .button.is-primary.is-outlined.is-hovered, .button.is-primary.is-outlined:focus, .button.is-primary.is-outlined.is-focused {
+ background-color: #00d1b2;
+ border-color: #00d1b2;
+ color: #fff;
+}
+
+.button.is-primary.is-outlined.is-loading::after {
+ border-color: transparent transparent #00d1b2 #00d1b2 !important;
+}
+
+.button.is-primary.is-outlined.is-loading:hover::after, .button.is-primary.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-outlined.is-loading:focus::after, .button.is-primary.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-primary.is-outlined[disabled],
+fieldset[disabled] .button.is-primary.is-outlined {
+ background-color: transparent;
+ border-color: #00d1b2;
+ box-shadow: none;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-primary.is-inverted.is-outlined:hover, .button.is-primary.is-inverted.is-outlined.is-hovered, .button.is-primary.is-inverted.is-outlined:focus, .button.is-primary.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #00d1b2;
+}
+
+.button.is-primary.is-inverted.is-outlined.is-loading:hover::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-primary.is-inverted.is-outlined.is-loading:focus::after, .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #00d1b2 #00d1b2 !important;
+}
+
+.button.is-primary.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-primary.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-primary.is-light {
+ background-color: #ebfffc;
+ color: #00947e;
+}
+
+.button.is-primary.is-light:hover, .button.is-primary.is-light.is-hovered {
+ background-color: #defffa;
+ border-color: transparent;
+ color: #00947e;
+}
+
+.button.is-primary.is-light:active, .button.is-primary.is-light.is-active {
+ background-color: #d1fff8;
+ border-color: transparent;
+ color: #00947e;
+}
+
+.button.is-link {
+ background-color: #3273dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link:hover, .button.is-link.is-hovered {
+ background-color: #276cda;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link:focus, .button.is-link.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link:focus:not(:active), .button.is-link.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.button.is-link:active, .button.is-link.is-active {
+ background-color: #2366d1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-link[disabled],
+fieldset[disabled] .button.is-link {
+ background-color: #3273dc;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-link.is-inverted {
+ background-color: #fff;
+ color: #3273dc;
+}
+
+.button.is-link.is-inverted:hover, .button.is-link.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-link.is-inverted[disabled],
+fieldset[disabled] .button.is-link.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #3273dc;
+}
+
+.button.is-link.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-link.is-outlined {
+ background-color: transparent;
+ border-color: #3273dc;
+ color: #3273dc;
+}
+
+.button.is-link.is-outlined:hover, .button.is-link.is-outlined.is-hovered, .button.is-link.is-outlined:focus, .button.is-link.is-outlined.is-focused {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+}
+
+.button.is-link.is-outlined.is-loading::after {
+ border-color: transparent transparent #3273dc #3273dc !important;
+}
+
+.button.is-link.is-outlined.is-loading:hover::after, .button.is-link.is-outlined.is-loading.is-hovered::after, .button.is-link.is-outlined.is-loading:focus::after, .button.is-link.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-link.is-outlined[disabled],
+fieldset[disabled] .button.is-link.is-outlined {
+ background-color: transparent;
+ border-color: #3273dc;
+ box-shadow: none;
+ color: #3273dc;
+}
+
+.button.is-link.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-link.is-inverted.is-outlined:hover, .button.is-link.is-inverted.is-outlined.is-hovered, .button.is-link.is-inverted.is-outlined:focus, .button.is-link.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #3273dc;
+}
+
+.button.is-link.is-inverted.is-outlined.is-loading:hover::after, .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-link.is-inverted.is-outlined.is-loading:focus::after, .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #3273dc #3273dc !important;
+}
+
+.button.is-link.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-link.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-link.is-light {
+ background-color: #eef3fc;
+ color: #2160c4;
+}
+
+.button.is-link.is-light:hover, .button.is-link.is-light.is-hovered {
+ background-color: #e3ecfa;
+ border-color: transparent;
+ color: #2160c4;
+}
+
+.button.is-link.is-light:active, .button.is-link.is-light.is-active {
+ background-color: #d8e4f8;
+ border-color: transparent;
+ color: #2160c4;
+}
+
+.button.is-info {
+ background-color: #3298dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info:hover, .button.is-info.is-hovered {
+ background-color: #2793da;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info:focus, .button.is-info.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info:focus:not(:active), .button.is-info.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25);
+}
+
+.button.is-info:active, .button.is-info.is-active {
+ background-color: #238cd1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-info[disabled],
+fieldset[disabled] .button.is-info {
+ background-color: #3298dc;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-info.is-inverted {
+ background-color: #fff;
+ color: #3298dc;
+}
+
+.button.is-info.is-inverted:hover, .button.is-info.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-info.is-inverted[disabled],
+fieldset[disabled] .button.is-info.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #3298dc;
+}
+
+.button.is-info.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-info.is-outlined {
+ background-color: transparent;
+ border-color: #3298dc;
+ color: #3298dc;
+}
+
+.button.is-info.is-outlined:hover, .button.is-info.is-outlined.is-hovered, .button.is-info.is-outlined:focus, .button.is-info.is-outlined.is-focused {
+ background-color: #3298dc;
+ border-color: #3298dc;
+ color: #fff;
+}
+
+.button.is-info.is-outlined.is-loading::after {
+ border-color: transparent transparent #3298dc #3298dc !important;
+}
+
+.button.is-info.is-outlined.is-loading:hover::after, .button.is-info.is-outlined.is-loading.is-hovered::after, .button.is-info.is-outlined.is-loading:focus::after, .button.is-info.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-info.is-outlined[disabled],
+fieldset[disabled] .button.is-info.is-outlined {
+ background-color: transparent;
+ border-color: #3298dc;
+ box-shadow: none;
+ color: #3298dc;
+}
+
+.button.is-info.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-info.is-inverted.is-outlined:hover, .button.is-info.is-inverted.is-outlined.is-hovered, .button.is-info.is-inverted.is-outlined:focus, .button.is-info.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #3298dc;
+}
+
+.button.is-info.is-inverted.is-outlined.is-loading:hover::after, .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-info.is-inverted.is-outlined.is-loading:focus::after, .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #3298dc #3298dc !important;
+}
+
+.button.is-info.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-info.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-info.is-light {
+ background-color: #eef6fc;
+ color: #1d72aa;
+}
+
+.button.is-info.is-light:hover, .button.is-info.is-light.is-hovered {
+ background-color: #e3f1fa;
+ border-color: transparent;
+ color: #1d72aa;
+}
+
+.button.is-info.is-light:active, .button.is-info.is-light.is-active {
+ background-color: #d8ebf8;
+ border-color: transparent;
+ color: #1d72aa;
+}
+
+.button.is-success {
+ background-color: #48c774;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success:hover, .button.is-success.is-hovered {
+ background-color: #3ec46d;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success:focus, .button.is-success.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success:focus:not(:active), .button.is-success.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25);
+}
+
+.button.is-success:active, .button.is-success.is-active {
+ background-color: #3abb67;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-success[disabled],
+fieldset[disabled] .button.is-success {
+ background-color: #48c774;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-success.is-inverted {
+ background-color: #fff;
+ color: #48c774;
+}
+
+.button.is-success.is-inverted:hover, .button.is-success.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-success.is-inverted[disabled],
+fieldset[disabled] .button.is-success.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #48c774;
+}
+
+.button.is-success.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-success.is-outlined {
+ background-color: transparent;
+ border-color: #48c774;
+ color: #48c774;
+}
+
+.button.is-success.is-outlined:hover, .button.is-success.is-outlined.is-hovered, .button.is-success.is-outlined:focus, .button.is-success.is-outlined.is-focused {
+ background-color: #48c774;
+ border-color: #48c774;
+ color: #fff;
+}
+
+.button.is-success.is-outlined.is-loading::after {
+ border-color: transparent transparent #48c774 #48c774 !important;
+}
+
+.button.is-success.is-outlined.is-loading:hover::after, .button.is-success.is-outlined.is-loading.is-hovered::after, .button.is-success.is-outlined.is-loading:focus::after, .button.is-success.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-success.is-outlined[disabled],
+fieldset[disabled] .button.is-success.is-outlined {
+ background-color: transparent;
+ border-color: #48c774;
+ box-shadow: none;
+ color: #48c774;
+}
+
+.button.is-success.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-success.is-inverted.is-outlined:hover, .button.is-success.is-inverted.is-outlined.is-hovered, .button.is-success.is-inverted.is-outlined:focus, .button.is-success.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #48c774;
+}
+
+.button.is-success.is-inverted.is-outlined.is-loading:hover::after, .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-success.is-inverted.is-outlined.is-loading:focus::after, .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #48c774 #48c774 !important;
+}
+
+.button.is-success.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-success.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-success.is-light {
+ background-color: #effaf3;
+ color: #257942;
+}
+
+.button.is-success.is-light:hover, .button.is-success.is-light.is-hovered {
+ background-color: #e6f7ec;
+ border-color: transparent;
+ color: #257942;
+}
+
+.button.is-success.is-light:active, .button.is-success.is-light.is-active {
+ background-color: #dcf4e4;
+ border-color: transparent;
+ color: #257942;
+}
+
+.button.is-warning {
+ background-color: #ffdd57;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning:hover, .button.is-warning.is-hovered {
+ background-color: #ffdb4a;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning:focus, .button.is-warning.is-focused {
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning:focus:not(:active), .button.is-warning.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25);
+}
+
+.button.is-warning:active, .button.is-warning.is-active {
+ background-color: #ffd83d;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning[disabled],
+fieldset[disabled] .button.is-warning {
+ background-color: #ffdd57;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-warning.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: #ffdd57;
+}
+
+.button.is-warning.is-inverted:hover, .button.is-warning.is-inverted.is-hovered {
+ background-color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-inverted[disabled],
+fieldset[disabled] .button.is-warning.is-inverted {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: transparent;
+ box-shadow: none;
+ color: #ffdd57;
+}
+
+.button.is-warning.is-loading::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-warning.is-outlined {
+ background-color: transparent;
+ border-color: #ffdd57;
+ color: #ffdd57;
+}
+
+.button.is-warning.is-outlined:hover, .button.is-warning.is-outlined.is-hovered, .button.is-warning.is-outlined:focus, .button.is-warning.is-outlined.is-focused {
+ background-color: #ffdd57;
+ border-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-outlined.is-loading::after {
+ border-color: transparent transparent #ffdd57 #ffdd57 !important;
+}
+
+.button.is-warning.is-outlined.is-loading:hover::after, .button.is-warning.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-outlined.is-loading:focus::after, .button.is-warning.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent rgba(0, 0, 0, 0.7) rgba(0, 0, 0, 0.7) !important;
+}
+
+.button.is-warning.is-outlined[disabled],
+fieldset[disabled] .button.is-warning.is-outlined {
+ background-color: transparent;
+ border-color: #ffdd57;
+ box-shadow: none;
+ color: #ffdd57;
+}
+
+.button.is-warning.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-inverted.is-outlined:hover, .button.is-warning.is-inverted.is-outlined.is-hovered, .button.is-warning.is-inverted.is-outlined:focus, .button.is-warning.is-inverted.is-outlined.is-focused {
+ background-color: rgba(0, 0, 0, 0.7);
+ color: #ffdd57;
+}
+
+.button.is-warning.is-inverted.is-outlined.is-loading:hover::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-warning.is-inverted.is-outlined.is-loading:focus::after, .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #ffdd57 #ffdd57 !important;
+}
+
+.button.is-warning.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-warning.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: rgba(0, 0, 0, 0.7);
+ box-shadow: none;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.button.is-warning.is-light {
+ background-color: #fffbeb;
+ color: #947600;
+}
+
+.button.is-warning.is-light:hover, .button.is-warning.is-light.is-hovered {
+ background-color: #fff8de;
+ border-color: transparent;
+ color: #947600;
+}
+
+.button.is-warning.is-light:active, .button.is-warning.is-light.is-active {
+ background-color: #fff6d1;
+ border-color: transparent;
+ color: #947600;
+}
+
+.button.is-danger {
+ background-color: #f14668;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger:hover, .button.is-danger.is-hovered {
+ background-color: #f03a5f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger:focus, .button.is-danger.is-focused {
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger:focus:not(:active), .button.is-danger.is-focused:not(:active) {
+ box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25);
+}
+
+.button.is-danger:active, .button.is-danger.is-active {
+ background-color: #ef2e55;
+ border-color: transparent;
+ color: #fff;
+}
+
+.button.is-danger[disabled],
+fieldset[disabled] .button.is-danger {
+ background-color: #f14668;
+ border-color: transparent;
+ box-shadow: none;
+}
+
+.button.is-danger.is-inverted {
+ background-color: #fff;
+ color: #f14668;
+}
+
+.button.is-danger.is-inverted:hover, .button.is-danger.is-inverted.is-hovered {
+ background-color: #f2f2f2;
+}
+
+.button.is-danger.is-inverted[disabled],
+fieldset[disabled] .button.is-danger.is-inverted {
+ background-color: #fff;
+ border-color: transparent;
+ box-shadow: none;
+ color: #f14668;
+}
+
+.button.is-danger.is-loading::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-danger.is-outlined {
+ background-color: transparent;
+ border-color: #f14668;
+ color: #f14668;
+}
+
+.button.is-danger.is-outlined:hover, .button.is-danger.is-outlined.is-hovered, .button.is-danger.is-outlined:focus, .button.is-danger.is-outlined.is-focused {
+ background-color: #f14668;
+ border-color: #f14668;
+ color: #fff;
+}
+
+.button.is-danger.is-outlined.is-loading::after {
+ border-color: transparent transparent #f14668 #f14668 !important;
+}
+
+.button.is-danger.is-outlined.is-loading:hover::after, .button.is-danger.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-outlined.is-loading:focus::after, .button.is-danger.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #fff #fff !important;
+}
+
+.button.is-danger.is-outlined[disabled],
+fieldset[disabled] .button.is-danger.is-outlined {
+ background-color: transparent;
+ border-color: #f14668;
+ box-shadow: none;
+ color: #f14668;
+}
+
+.button.is-danger.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ color: #fff;
+}
+
+.button.is-danger.is-inverted.is-outlined:hover, .button.is-danger.is-inverted.is-outlined.is-hovered, .button.is-danger.is-inverted.is-outlined:focus, .button.is-danger.is-inverted.is-outlined.is-focused {
+ background-color: #fff;
+ color: #f14668;
+}
+
+.button.is-danger.is-inverted.is-outlined.is-loading:hover::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after, .button.is-danger.is-inverted.is-outlined.is-loading:focus::after, .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after {
+ border-color: transparent transparent #f14668 #f14668 !important;
+}
+
+.button.is-danger.is-inverted.is-outlined[disabled],
+fieldset[disabled] .button.is-danger.is-inverted.is-outlined {
+ background-color: transparent;
+ border-color: #fff;
+ box-shadow: none;
+ color: #fff;
+}
+
+.button.is-danger.is-light {
+ background-color: #feecf0;
+ color: #cc0f35;
+}
+
+.button.is-danger.is-light:hover, .button.is-danger.is-light.is-hovered {
+ background-color: #fde0e6;
+ border-color: transparent;
+ color: #cc0f35;
+}
+
+.button.is-danger.is-light:active, .button.is-danger.is-light.is-active {
+ background-color: #fcd4dc;
+ border-color: transparent;
+ color: #cc0f35;
+}
+
+.button.is-small {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.button.is-normal {
+ font-size: 1rem;
+}
+
+.button.is-medium {
+ font-size: 1.25rem;
+}
+
+.button.is-large {
+ font-size: 1.5rem;
+}
+
+.button[disabled],
+fieldset[disabled] .button {
+ background-color: white;
+ border-color: #dbdbdb;
+ box-shadow: none;
+ opacity: 0.5;
+}
+
+.button.is-fullwidth {
+ display: flex;
+ width: 100%;
+}
+
+.button.is-loading {
+ color: transparent !important;
+ pointer-events: none;
+}
+
+.button.is-loading::after {
+ position: absolute;
+ left: calc(50% - (1em / 2));
+ top: calc(50% - (1em / 2));
+ position: absolute !important;
+}
+
+.button.is-static {
+ background-color: whitesmoke;
+ border-color: #dbdbdb;
+ color: #7a7a7a;
+ box-shadow: none;
+ pointer-events: none;
+}
+
+.button.is-rounded {
+ border-radius: 290486px;
+ padding-left: calc(1em + 0.25em);
+ padding-right: calc(1em + 0.25em);
+}
+
+.buttons {
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.buttons .button {
+ margin-bottom: 0.5rem;
+}
+
+.buttons .button:not(:last-child):not(.is-fullwidth) {
+ margin-right: 0.5rem;
+}
+
+.buttons:last-child {
+ margin-bottom: -0.5rem;
+}
+
+.buttons:not(:last-child) {
+ margin-bottom: 1rem;
+}
+
+.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large) {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large) {
+ font-size: 1.25rem;
+}
+
+.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium) {
+ font-size: 1.5rem;
+}
+
+.buttons.has-addons .button:not(:first-child) {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.buttons.has-addons .button:not(:last-child) {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+ margin-right: -1px;
+}
+
+.buttons.has-addons .button:last-child {
+ margin-right: 0;
+}
+
+.buttons.has-addons .button:hover, .buttons.has-addons .button.is-hovered {
+ z-index: 2;
+}
+
+.buttons.has-addons .button:focus, .buttons.has-addons .button.is-focused, .buttons.has-addons .button:active, .buttons.has-addons .button.is-active, .buttons.has-addons .button.is-selected {
+ z-index: 3;
+}
+
+.buttons.has-addons .button:focus:hover, .buttons.has-addons .button.is-focused:hover, .buttons.has-addons .button:active:hover, .buttons.has-addons .button.is-active:hover, .buttons.has-addons .button.is-selected:hover {
+ z-index: 4;
+}
+
+.buttons.has-addons .button.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.buttons.is-centered {
+ justify-content: center;
+}
+
+.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth) {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+}
+
+.buttons.is-right {
+ justify-content: flex-end;
+}
+
+.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth) {
+ margin-left: 0.25rem;
+ margin-right: 0.25rem;
+}
+
+.container {
+ flex-grow: 1;
+ margin: 0 auto;
+ position: relative;
+ width: auto;
+}
+
+.container.is-fluid {
+ max-width: none !important;
+ padding-left: 32px;
+ padding-right: 32px;
+ width: 100%;
+}
+
+@media screen and (min-width: 1024px) {
+ .container {
+ max-width: 960px;
+ }
+}
+
+@media screen and (max-width: 1215px) {
+ .container.is-widescreen:not(.is-max-desktop) {
+ max-width: 1152px;
+ }
+}
+
+@media screen and (max-width: 1407px) {
+ .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen) {
+ max-width: 1344px;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .container:not(.is-max-desktop) {
+ max-width: 1152px;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .container:not(.is-max-desktop):not(.is-max-widescreen) {
+ max-width: 1344px;
+ }
+}
+
+.content li + li {
+ margin-top: 0.25em;
+}
+
+.content p:not(:last-child),
+.content dl:not(:last-child),
+.content ol:not(:last-child),
+.content ul:not(:last-child),
+.content blockquote:not(:last-child),
+.content pre:not(:last-child),
+.content table:not(:last-child) {
+ margin-bottom: 1em;
+}
+
+.content h1,
+.content h2,
+.content h3,
+.content h4,
+.content h5,
+.content h6 {
+ color: #363636;
+ font-weight: 600;
+ line-height: 1.125;
+}
+
+.content h1 {
+ font-size: 2em;
+ margin-bottom: 0.5em;
+}
+
+.content h1:not(:first-child) {
+ margin-top: 1em;
+}
+
+.content h2 {
+ font-size: 1.75em;
+ margin-bottom: 0.5714em;
+}
+
+.content h2:not(:first-child) {
+ margin-top: 1.1428em;
+}
+
+.content h3 {
+ font-size: 1.5em;
+ margin-bottom: 0.6666em;
+}
+
+.content h3:not(:first-child) {
+ margin-top: 1.3333em;
+}
+
+.content h4 {
+ font-size: 1.25em;
+ margin-bottom: 0.8em;
+}
+
+.content h5 {
+ font-size: 1.125em;
+ margin-bottom: 0.8888em;
+}
+
+.content h6 {
+ font-size: 1em;
+ margin-bottom: 1em;
+}
+
+.content blockquote {
+ background-color: whitesmoke;
+ border-left: 5px solid #dbdbdb;
+ padding: 1.25em 1.5em;
+}
+
+.content ol {
+ list-style-position: outside;
+ margin-left: 2em;
+ margin-top: 1em;
+}
+
+.content ol:not([type]) {
+ list-style-type: decimal;
+}
+
+.content ol:not([type]).is-lower-alpha {
+ list-style-type: lower-alpha;
+}
+
+.content ol:not([type]).is-lower-roman {
+ list-style-type: lower-roman;
+}
+
+.content ol:not([type]).is-upper-alpha {
+ list-style-type: upper-alpha;
+}
+
+.content ol:not([type]).is-upper-roman {
+ list-style-type: upper-roman;
+}
+
+.content ul {
+ list-style: disc outside;
+ margin-left: 2em;
+ margin-top: 1em;
+}
+
+.content ul ul {
+ list-style-type: circle;
+ margin-top: 0.5em;
+}
+
+.content ul ul ul {
+ list-style-type: square;
+}
+
+.content dd {
+ margin-left: 2em;
+}
+
+.content figure {
+ margin-left: 2em;
+ margin-right: 2em;
+ text-align: center;
+}
+
+.content figure:not(:first-child) {
+ margin-top: 2em;
+}
+
+.content figure:not(:last-child) {
+ margin-bottom: 2em;
+}
+
+.content figure img {
+ display: inline-block;
+}
+
+.content figure figcaption {
+ font-style: italic;
+}
+
+.content pre {
+ -webkit-overflow-scrolling: touch;
+ overflow-x: auto;
+ padding: 1.25em 1.5em;
+ white-space: pre;
+ word-wrap: normal;
+}
+
+.content sup,
+.content sub {
+ font-size: 75%;
+}
+
+.content table {
+ width: 100%;
+}
+
+.content table td,
+.content table th {
+ border: 1px solid #dbdbdb;
+ border-width: 0 0 1px;
+ padding: 0.5em 0.75em;
+ vertical-align: top;
+}
+
+.content table th {
+ color: #363636;
+}
+
+.content table th:not([align]) {
+ text-align: inherit;
+}
+
+.content table thead td,
+.content table thead th {
+ border-width: 0 0 2px;
+ color: #363636;
+}
+
+.content table tfoot td,
+.content table tfoot th {
+ border-width: 2px 0 0;
+ color: #363636;
+}
+
+.content table tbody tr:last-child td,
+.content table tbody tr:last-child th {
+ border-bottom-width: 0;
+}
+
+.content .tabs li + li {
+ margin-top: 0;
+}
+
+.content.is-small {
+ font-size: 0.75rem;
+}
+
+.content.is-medium {
+ font-size: 1.25rem;
+}
+
+.content.is-large {
+ font-size: 1.5rem;
+}
+
+.icon {
+ align-items: center;
+ display: inline-flex;
+ justify-content: center;
+ height: 1.5rem;
+ width: 1.5rem;
+}
+
+.icon.is-small {
+ height: 1rem;
+ width: 1rem;
+}
+
+.icon.is-medium {
+ height: 2rem;
+ width: 2rem;
+}
+
+.icon.is-large {
+ height: 3rem;
+ width: 3rem;
+}
+
+.image {
+ display: block;
+ position: relative;
+}
+
+.image img {
+ display: block;
+ height: auto;
+ width: 100%;
+}
+
+.image img.is-rounded {
+ border-radius: 290486px;
+}
+
+.image.is-fullwidth {
+ width: 100%;
+}
+
+.image.is-square img,
+.image.is-square .has-ratio, .image.is-1by1 img,
+.image.is-1by1 .has-ratio, .image.is-5by4 img,
+.image.is-5by4 .has-ratio, .image.is-4by3 img,
+.image.is-4by3 .has-ratio, .image.is-3by2 img,
+.image.is-3by2 .has-ratio, .image.is-5by3 img,
+.image.is-5by3 .has-ratio, .image.is-16by9 img,
+.image.is-16by9 .has-ratio, .image.is-2by1 img,
+.image.is-2by1 .has-ratio, .image.is-3by1 img,
+.image.is-3by1 .has-ratio, .image.is-4by5 img,
+.image.is-4by5 .has-ratio, .image.is-3by4 img,
+.image.is-3by4 .has-ratio, .image.is-2by3 img,
+.image.is-2by3 .has-ratio, .image.is-3by5 img,
+.image.is-3by5 .has-ratio, .image.is-9by16 img,
+.image.is-9by16 .has-ratio, .image.is-1by2 img,
+.image.is-1by2 .has-ratio, .image.is-1by3 img,
+.image.is-1by3 .has-ratio {
+ height: 100%;
+ width: 100%;
+}
+
+.image.is-square, .image.is-1by1 {
+ padding-top: 100%;
+}
+
+.image.is-5by4 {
+ padding-top: 80%;
+}
+
+.image.is-4by3 {
+ padding-top: 75%;
+}
+
+.image.is-3by2 {
+ padding-top: 66.6666%;
+}
+
+.image.is-5by3 {
+ padding-top: 60%;
+}
+
+.image.is-16by9 {
+ padding-top: 56.25%;
+}
+
+.image.is-2by1 {
+ padding-top: 50%;
+}
+
+.image.is-3by1 {
+ padding-top: 33.3333%;
+}
+
+.image.is-4by5 {
+ padding-top: 125%;
+}
+
+.image.is-3by4 {
+ padding-top: 133.3333%;
+}
+
+.image.is-2by3 {
+ padding-top: 150%;
+}
+
+.image.is-3by5 {
+ padding-top: 166.6666%;
+}
+
+.image.is-9by16 {
+ padding-top: 177.7777%;
+}
+
+.image.is-1by2 {
+ padding-top: 200%;
+}
+
+.image.is-1by3 {
+ padding-top: 300%;
+}
+
+.image.is-16x16 {
+ height: 16px;
+ width: 16px;
+}
+
+.image.is-24x24 {
+ height: 24px;
+ width: 24px;
+}
+
+.image.is-32x32 {
+ height: 32px;
+ width: 32px;
+}
+
+.image.is-48x48 {
+ height: 48px;
+ width: 48px;
+}
+
+.image.is-64x64 {
+ height: 64px;
+ width: 64px;
+}
+
+.image.is-96x96 {
+ height: 96px;
+ width: 96px;
+}
+
+.image.is-128x128 {
+ height: 128px;
+ width: 128px;
+}
+
+.notification {
+ background-color: whitesmoke;
+ border-radius: 4px;
+ position: relative;
+ padding: 1.25rem 2.5rem 1.25rem 1.5rem;
+}
+
+.notification a:not(.button):not(.dropdown-item) {
+ color: currentColor;
+ text-decoration: underline;
+}
+
+.notification strong {
+ color: currentColor;
+}
+
+.notification code,
+.notification pre {
+ background: white;
+}
+
+.notification pre code {
+ background: transparent;
+}
+
+.notification > .delete {
+ right: 0.5rem;
+ position: absolute;
+ top: 0.5rem;
+}
+
+.notification .title,
+.notification .subtitle,
+.notification .content {
+ color: currentColor;
+}
+
+.notification.is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.notification.is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.notification.is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.notification.is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.notification.is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.notification.is-primary.is-light {
+ background-color: #ebfffc;
+ color: #00947e;
+}
+
+.notification.is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.notification.is-link.is-light {
+ background-color: #eef3fc;
+ color: #2160c4;
+}
+
+.notification.is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.notification.is-info.is-light {
+ background-color: #eef6fc;
+ color: #1d72aa;
+}
+
+.notification.is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.notification.is-success.is-light {
+ background-color: #effaf3;
+ color: #257942;
+}
+
+.notification.is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.notification.is-warning.is-light {
+ background-color: #fffbeb;
+ color: #947600;
+}
+
+.notification.is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.notification.is-danger.is-light {
+ background-color: #feecf0;
+ color: #cc0f35;
+}
+
+.progress {
+ -moz-appearance: none;
+ -webkit-appearance: none;
+ border: none;
+ border-radius: 290486px;
+ display: block;
+ height: 1rem;
+ overflow: hidden;
+ padding: 0;
+ width: 100%;
+}
+
+.progress::-webkit-progress-bar {
+ background-color: #ededed;
+}
+
+.progress::-webkit-progress-value {
+ background-color: #4a4a4a;
+}
+
+.progress::-moz-progress-bar {
+ background-color: #4a4a4a;
+}
+
+.progress::-ms-fill {
+ background-color: #4a4a4a;
+ border: none;
+}
+
+.progress.is-white::-webkit-progress-value {
+ background-color: white;
+}
+
+.progress.is-white::-moz-progress-bar {
+ background-color: white;
+}
+
+.progress.is-white::-ms-fill {
+ background-color: white;
+}
+
+.progress.is-white:indeterminate {
+ background-image: linear-gradient(to right, white 30%, #ededed 30%);
+}
+
+.progress.is-black::-webkit-progress-value {
+ background-color: #0a0a0a;
+}
+
+.progress.is-black::-moz-progress-bar {
+ background-color: #0a0a0a;
+}
+
+.progress.is-black::-ms-fill {
+ background-color: #0a0a0a;
+}
+
+.progress.is-black:indeterminate {
+ background-image: linear-gradient(to right, #0a0a0a 30%, #ededed 30%);
+}
+
+.progress.is-light::-webkit-progress-value {
+ background-color: whitesmoke;
+}
+
+.progress.is-light::-moz-progress-bar {
+ background-color: whitesmoke;
+}
+
+.progress.is-light::-ms-fill {
+ background-color: whitesmoke;
+}
+
+.progress.is-light:indeterminate {
+ background-image: linear-gradient(to right, whitesmoke 30%, #ededed 30%);
+}
+
+.progress.is-dark::-webkit-progress-value {
+ background-color: #363636;
+}
+
+.progress.is-dark::-moz-progress-bar {
+ background-color: #363636;
+}
+
+.progress.is-dark::-ms-fill {
+ background-color: #363636;
+}
+
+.progress.is-dark:indeterminate {
+ background-image: linear-gradient(to right, #363636 30%, #ededed 30%);
+}
+
+.progress.is-primary::-webkit-progress-value {
+ background-color: #00d1b2;
+}
+
+.progress.is-primary::-moz-progress-bar {
+ background-color: #00d1b2;
+}
+
+.progress.is-primary::-ms-fill {
+ background-color: #00d1b2;
+}
+
+.progress.is-primary:indeterminate {
+ background-image: linear-gradient(to right, #00d1b2 30%, #ededed 30%);
+}
+
+.progress.is-link::-webkit-progress-value {
+ background-color: #3273dc;
+}
+
+.progress.is-link::-moz-progress-bar {
+ background-color: #3273dc;
+}
+
+.progress.is-link::-ms-fill {
+ background-color: #3273dc;
+}
+
+.progress.is-link:indeterminate {
+ background-image: linear-gradient(to right, #3273dc 30%, #ededed 30%);
+}
+
+.progress.is-info::-webkit-progress-value {
+ background-color: #3298dc;
+}
+
+.progress.is-info::-moz-progress-bar {
+ background-color: #3298dc;
+}
+
+.progress.is-info::-ms-fill {
+ background-color: #3298dc;
+}
+
+.progress.is-info:indeterminate {
+ background-image: linear-gradient(to right, #3298dc 30%, #ededed 30%);
+}
+
+.progress.is-success::-webkit-progress-value {
+ background-color: #48c774;
+}
+
+.progress.is-success::-moz-progress-bar {
+ background-color: #48c774;
+}
+
+.progress.is-success::-ms-fill {
+ background-color: #48c774;
+}
+
+.progress.is-success:indeterminate {
+ background-image: linear-gradient(to right, #48c774 30%, #ededed 30%);
+}
+
+.progress.is-warning::-webkit-progress-value {
+ background-color: #ffdd57;
+}
+
+.progress.is-warning::-moz-progress-bar {
+ background-color: #ffdd57;
+}
+
+.progress.is-warning::-ms-fill {
+ background-color: #ffdd57;
+}
+
+.progress.is-warning:indeterminate {
+ background-image: linear-gradient(to right, #ffdd57 30%, #ededed 30%);
+}
+
+.progress.is-danger::-webkit-progress-value {
+ background-color: #f14668;
+}
+
+.progress.is-danger::-moz-progress-bar {
+ background-color: #f14668;
+}
+
+.progress.is-danger::-ms-fill {
+ background-color: #f14668;
+}
+
+.progress.is-danger:indeterminate {
+ background-image: linear-gradient(to right, #f14668 30%, #ededed 30%);
+}
+
+.progress:indeterminate {
+ -webkit-animation-duration: 1.5s;
+ animation-duration: 1.5s;
+ -webkit-animation-iteration-count: infinite;
+ animation-iteration-count: infinite;
+ -webkit-animation-name: moveIndeterminate;
+ animation-name: moveIndeterminate;
+ -webkit-animation-timing-function: linear;
+ animation-timing-function: linear;
+ background-color: #ededed;
+ background-image: linear-gradient(to right, #4a4a4a 30%, #ededed 30%);
+ background-position: top left;
+ background-repeat: no-repeat;
+ background-size: 150% 150%;
+}
+
+.progress:indeterminate::-webkit-progress-bar {
+ background-color: transparent;
+}
+
+.progress:indeterminate::-moz-progress-bar {
+ background-color: transparent;
+}
+
+.progress:indeterminate::-ms-fill {
+ animation-name: none;
+}
+
+.progress.is-small {
+ height: 0.75rem;
+}
+
+.progress.is-medium {
+ height: 1.25rem;
+}
+
+.progress.is-large {
+ height: 1.5rem;
+}
+
+@-webkit-keyframes moveIndeterminate {
+ from {
+ background-position: 200% 0;
+ }
+ to {
+ background-position: -200% 0;
+ }
+}
+
+@keyframes moveIndeterminate {
+ from {
+ background-position: 200% 0;
+ }
+ to {
+ background-position: -200% 0;
+ }
+}
+
+.table {
+ background-color: white;
+ color: #363636;
+}
+
+.table td,
+.table th {
+ border: 1px solid #dbdbdb;
+ border-width: 0 0 1px;
+ padding: 0.5em 0.75em;
+ vertical-align: top;
+}
+
+.table td.is-white,
+.table th.is-white {
+ background-color: white;
+ border-color: white;
+ color: #0a0a0a;
+}
+
+.table td.is-black,
+.table th.is-black {
+ background-color: #0a0a0a;
+ border-color: #0a0a0a;
+ color: white;
+}
+
+.table td.is-light,
+.table th.is-light {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.table td.is-dark,
+.table th.is-dark {
+ background-color: #363636;
+ border-color: #363636;
+ color: #fff;
+}
+
+.table td.is-primary,
+.table th.is-primary {
+ background-color: #00d1b2;
+ border-color: #00d1b2;
+ color: #fff;
+}
+
+.table td.is-link,
+.table th.is-link {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+}
+
+.table td.is-info,
+.table th.is-info {
+ background-color: #3298dc;
+ border-color: #3298dc;
+ color: #fff;
+}
+
+.table td.is-success,
+.table th.is-success {
+ background-color: #48c774;
+ border-color: #48c774;
+ color: #fff;
+}
+
+.table td.is-warning,
+.table th.is-warning {
+ background-color: #ffdd57;
+ border-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.table td.is-danger,
+.table th.is-danger {
+ background-color: #f14668;
+ border-color: #f14668;
+ color: #fff;
+}
+
+.table td.is-narrow,
+.table th.is-narrow {
+ white-space: nowrap;
+ width: 1%;
+}
+
+.table td.is-selected,
+.table th.is-selected {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.table td.is-selected a,
+.table td.is-selected strong,
+.table th.is-selected a,
+.table th.is-selected strong {
+ color: currentColor;
+}
+
+.table td.is-vcentered,
+.table th.is-vcentered {
+ vertical-align: middle;
+}
+
+.table th {
+ color: #363636;
+}
+
+.table th:not([align]) {
+ text-align: inherit;
+}
+
+.table tr.is-selected {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.table tr.is-selected a,
+.table tr.is-selected strong {
+ color: currentColor;
+}
+
+.table tr.is-selected td,
+.table tr.is-selected th {
+ border-color: #fff;
+ color: currentColor;
+}
+
+.table thead {
+ background-color: transparent;
+}
+
+.table thead td,
+.table thead th {
+ border-width: 0 0 2px;
+ color: #363636;
+}
+
+.table tfoot {
+ background-color: transparent;
+}
+
+.table tfoot td,
+.table tfoot th {
+ border-width: 2px 0 0;
+ color: #363636;
+}
+
+.table tbody {
+ background-color: transparent;
+}
+
+.table tbody tr:last-child td,
+.table tbody tr:last-child th {
+ border-bottom-width: 0;
+}
+
+.table.is-bordered td,
+.table.is-bordered th {
+ border-width: 1px;
+}
+
+.table.is-bordered tr:last-child td,
+.table.is-bordered tr:last-child th {
+ border-bottom-width: 1px;
+}
+
+.table.is-fullwidth {
+ width: 100%;
+}
+
+.table.is-hoverable tbody tr:not(.is-selected):hover {
+ background-color: #fafafa;
+}
+
+.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover {
+ background-color: #fafafa;
+}
+
+.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even) {
+ background-color: whitesmoke;
+}
+
+.table.is-narrow td,
+.table.is-narrow th {
+ padding: 0.25em 0.5em;
+}
+
+.table.is-striped tbody tr:not(.is-selected):nth-child(even) {
+ background-color: #fafafa;
+}
+
+.table-container {
+ -webkit-overflow-scrolling: touch;
+ overflow: auto;
+ overflow-y: hidden;
+ max-width: 100%;
+}
+
+.tags {
+ align-items: center;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.tags .tag {
+ margin-bottom: 0.5rem;
+}
+
+.tags .tag:not(:last-child) {
+ margin-right: 0.5rem;
+}
+
+.tags:last-child {
+ margin-bottom: -0.5rem;
+}
+
+.tags:not(:last-child) {
+ margin-bottom: 1rem;
+}
+
+.tags.are-medium .tag:not(.is-normal):not(.is-large) {
+ font-size: 1rem;
+}
+
+.tags.are-large .tag:not(.is-normal):not(.is-medium) {
+ font-size: 1.25rem;
+}
+
+.tags.is-centered {
+ justify-content: center;
+}
+
+.tags.is-centered .tag {
+ margin-right: 0.25rem;
+ margin-left: 0.25rem;
+}
+
+.tags.is-right {
+ justify-content: flex-end;
+}
+
+.tags.is-right .tag:not(:first-child) {
+ margin-left: 0.5rem;
+}
+
+.tags.is-right .tag:not(:last-child) {
+ margin-right: 0;
+}
+
+.tags.has-addons .tag {
+ margin-right: 0;
+}
+
+.tags.has-addons .tag:not(:first-child) {
+ margin-left: 0;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+
+.tags.has-addons .tag:not(:last-child) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.tag:not(body) {
+ align-items: center;
+ background-color: whitesmoke;
+ border-radius: 4px;
+ color: #4a4a4a;
+ display: inline-flex;
+ font-size: 0.75rem;
+ height: 2em;
+ justify-content: center;
+ line-height: 1.5;
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+ white-space: nowrap;
+}
+
+.tag:not(body) .delete {
+ margin-left: 0.25rem;
+ margin-right: -0.375rem;
+}
+
+.tag:not(body).is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.tag:not(body).is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.tag:not(body).is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.tag:not(body).is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.tag:not(body).is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.tag:not(body).is-primary.is-light {
+ background-color: #ebfffc;
+ color: #00947e;
+}
+
+.tag:not(body).is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.tag:not(body).is-link.is-light {
+ background-color: #eef3fc;
+ color: #2160c4;
+}
+
+.tag:not(body).is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.tag:not(body).is-info.is-light {
+ background-color: #eef6fc;
+ color: #1d72aa;
+}
+
+.tag:not(body).is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.tag:not(body).is-success.is-light {
+ background-color: #effaf3;
+ color: #257942;
+}
+
+.tag:not(body).is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.tag:not(body).is-warning.is-light {
+ background-color: #fffbeb;
+ color: #947600;
+}
+
+.tag:not(body).is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.tag:not(body).is-danger.is-light {
+ background-color: #feecf0;
+ color: #cc0f35;
+}
+
+.tag:not(body).is-normal {
+ font-size: 0.75rem;
+}
+
+.tag:not(body).is-medium {
+ font-size: 1rem;
+}
+
+.tag:not(body).is-large {
+ font-size: 1.25rem;
+}
+
+.tag:not(body) .icon:first-child:not(:last-child) {
+ margin-left: -0.375em;
+ margin-right: 0.1875em;
+}
+
+.tag:not(body) .icon:last-child:not(:first-child) {
+ margin-left: 0.1875em;
+ margin-right: -0.375em;
+}
+
+.tag:not(body) .icon:first-child:last-child {
+ margin-left: -0.375em;
+ margin-right: -0.375em;
+}
+
+.tag:not(body).is-delete {
+ margin-left: 1px;
+ padding: 0;
+ position: relative;
+ width: 2em;
+}
+
+.tag:not(body).is-delete::before, .tag:not(body).is-delete::after {
+ background-color: currentColor;
+ content: "";
+ display: block;
+ left: 50%;
+ position: absolute;
+ top: 50%;
+ transform: translateX(-50%) translateY(-50%) rotate(45deg);
+ transform-origin: center center;
+}
+
+.tag:not(body).is-delete::before {
+ height: 1px;
+ width: 50%;
+}
+
+.tag:not(body).is-delete::after {
+ height: 50%;
+ width: 1px;
+}
+
+.tag:not(body).is-delete:hover, .tag:not(body).is-delete:focus {
+ background-color: #e8e8e8;
+}
+
+.tag:not(body).is-delete:active {
+ background-color: #dbdbdb;
+}
+
+.tag:not(body).is-rounded {
+ border-radius: 290486px;
+}
+
+a.tag:hover {
+ text-decoration: underline;
+}
+
+.title,
+.subtitle {
+ word-break: break-word;
+}
+
+.title em,
+.title span,
+.subtitle em,
+.subtitle span {
+ font-weight: inherit;
+}
+
+.title sub,
+.subtitle sub {
+ font-size: 0.75em;
+}
+
+.title sup,
+.subtitle sup {
+ font-size: 0.75em;
+}
+
+.title .tag,
+.subtitle .tag {
+ vertical-align: middle;
+}
+
+.title {
+ color: #363636;
+ font-size: 2rem;
+ font-weight: 600;
+ line-height: 1.125;
+}
+
+.title strong {
+ color: inherit;
+ font-weight: inherit;
+}
+
+.title + .highlight {
+ margin-top: -0.75rem;
+}
+
+.title:not(.is-spaced) + .subtitle {
+ margin-top: -1.25rem;
+}
+
+.title.is-1 {
+ font-size: 3rem;
+}
+
+.title.is-2 {
+ font-size: 2.5rem;
+}
+
+.title.is-3 {
+ font-size: 2rem;
+}
+
+.title.is-4 {
+ font-size: 1.5rem;
+}
+
+.title.is-5 {
+ font-size: 1.25rem;
+}
+
+.title.is-6 {
+ font-size: 1rem;
+}
+
+.title.is-7 {
+ font-size: 0.75rem;
+}
+
+.subtitle {
+ color: #4a4a4a;
+ font-size: 1.25rem;
+ font-weight: 400;
+ line-height: 1.25;
+}
+
+.subtitle strong {
+ color: #363636;
+ font-weight: 600;
+}
+
+.subtitle:not(.is-spaced) + .title {
+ margin-top: -1.25rem;
+}
+
+.subtitle.is-1 {
+ font-size: 3rem;
+}
+
+.subtitle.is-2 {
+ font-size: 2.5rem;
+}
+
+.subtitle.is-3 {
+ font-size: 2rem;
+}
+
+.subtitle.is-4 {
+ font-size: 1.5rem;
+}
+
+.subtitle.is-5 {
+ font-size: 1.25rem;
+}
+
+.subtitle.is-6 {
+ font-size: 1rem;
+}
+
+.subtitle.is-7 {
+ font-size: 0.75rem;
+}
+
+.heading {
+ display: block;
+ font-size: 11px;
+ letter-spacing: 1px;
+ margin-bottom: 5px;
+ text-transform: uppercase;
+}
+
+.highlight {
+ font-weight: 400;
+ max-width: 100%;
+ overflow: hidden;
+ padding: 0;
+}
+
+.highlight pre {
+ overflow: auto;
+ max-width: 100%;
+}
+
+.number {
+ align-items: center;
+ background-color: whitesmoke;
+ border-radius: 290486px;
+ display: inline-flex;
+ font-size: 1.25rem;
+ height: 2em;
+ justify-content: center;
+ margin-right: 1.5rem;
+ min-width: 2.5em;
+ padding: 0.25rem 0.5rem;
+ text-align: center;
+ vertical-align: top;
+}
+
+/* Bulma Form */
+.input, .textarea, .select select {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-radius: 4px;
+ color: #363636;
+}
+
+.input::-moz-placeholder, .textarea::-moz-placeholder, .select select::-moz-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input::-webkit-input-placeholder, .textarea::-webkit-input-placeholder, .select select::-webkit-input-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input:-moz-placeholder, .textarea:-moz-placeholder, .select select:-moz-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input:-ms-input-placeholder, .textarea:-ms-input-placeholder, .select select:-ms-input-placeholder {
+ color: rgba(54, 54, 54, 0.3);
+}
+
+.input:hover, .textarea:hover, .select select:hover, .is-hovered.input, .is-hovered.textarea, .select select.is-hovered {
+ border-color: #b5b5b5;
+}
+
+.input:focus, .textarea:focus, .select select:focus, .is-focused.input, .is-focused.textarea, .select select.is-focused, .input:active, .textarea:active, .select select:active, .is-active.input, .is-active.textarea, .select select.is-active {
+ border-color: #3273dc;
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.input[disabled], .textarea[disabled], .select select[disabled],
+fieldset[disabled] .input,
+fieldset[disabled] .textarea,
+fieldset[disabled] .select select,
+.select fieldset[disabled] select {
+ background-color: whitesmoke;
+ border-color: whitesmoke;
+ box-shadow: none;
+ color: #7a7a7a;
+}
+
+.input[disabled]::-moz-placeholder, .textarea[disabled]::-moz-placeholder, .select select[disabled]::-moz-placeholder,
+fieldset[disabled] .input::-moz-placeholder,
+fieldset[disabled] .textarea::-moz-placeholder,
+fieldset[disabled] .select select::-moz-placeholder,
+.select fieldset[disabled] select::-moz-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input[disabled]::-webkit-input-placeholder, .textarea[disabled]::-webkit-input-placeholder, .select select[disabled]::-webkit-input-placeholder,
+fieldset[disabled] .input::-webkit-input-placeholder,
+fieldset[disabled] .textarea::-webkit-input-placeholder,
+fieldset[disabled] .select select::-webkit-input-placeholder,
+.select fieldset[disabled] select::-webkit-input-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input[disabled]:-moz-placeholder, .textarea[disabled]:-moz-placeholder, .select select[disabled]:-moz-placeholder,
+fieldset[disabled] .input:-moz-placeholder,
+fieldset[disabled] .textarea:-moz-placeholder,
+fieldset[disabled] .select select:-moz-placeholder,
+.select fieldset[disabled] select:-moz-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input[disabled]:-ms-input-placeholder, .textarea[disabled]:-ms-input-placeholder, .select select[disabled]:-ms-input-placeholder,
+fieldset[disabled] .input:-ms-input-placeholder,
+fieldset[disabled] .textarea:-ms-input-placeholder,
+fieldset[disabled] .select select:-ms-input-placeholder,
+.select fieldset[disabled] select:-ms-input-placeholder {
+ color: rgba(122, 122, 122, 0.3);
+}
+
+.input, .textarea {
+ box-shadow: inset 0 0.0625em 0.125em rgba(10, 10, 10, 0.05);
+ max-width: 100%;
+ width: 100%;
+}
+
+.input[readonly], .textarea[readonly] {
+ box-shadow: none;
+}
+
+.is-white.input, .is-white.textarea {
+ border-color: white;
+}
+
+.is-white.input:focus, .is-white.textarea:focus, .is-white.is-focused.input, .is-white.is-focused.textarea, .is-white.input:active, .is-white.textarea:active, .is-white.is-active.input, .is-white.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25);
+}
+
+.is-black.input, .is-black.textarea {
+ border-color: #0a0a0a;
+}
+
+.is-black.input:focus, .is-black.textarea:focus, .is-black.is-focused.input, .is-black.is-focused.textarea, .is-black.input:active, .is-black.textarea:active, .is-black.is-active.input, .is-black.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25);
+}
+
+.is-light.input, .is-light.textarea {
+ border-color: whitesmoke;
+}
+
+.is-light.input:focus, .is-light.textarea:focus, .is-light.is-focused.input, .is-light.is-focused.textarea, .is-light.input:active, .is-light.textarea:active, .is-light.is-active.input, .is-light.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.is-dark.input, .is-dark.textarea {
+ border-color: #363636;
+}
+
+.is-dark.input:focus, .is-dark.textarea:focus, .is-dark.is-focused.input, .is-dark.is-focused.textarea, .is-dark.input:active, .is-dark.textarea:active, .is-dark.is-active.input, .is-dark.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.is-primary.input, .is-primary.textarea {
+ border-color: #00d1b2;
+}
+
+.is-primary.input:focus, .is-primary.textarea:focus, .is-primary.is-focused.input, .is-primary.is-focused.textarea, .is-primary.input:active, .is-primary.textarea:active, .is-primary.is-active.input, .is-primary.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25);
+}
+
+.is-link.input, .is-link.textarea {
+ border-color: #3273dc;
+}
+
+.is-link.input:focus, .is-link.textarea:focus, .is-link.is-focused.input, .is-link.is-focused.textarea, .is-link.input:active, .is-link.textarea:active, .is-link.is-active.input, .is-link.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.is-info.input, .is-info.textarea {
+ border-color: #3298dc;
+}
+
+.is-info.input:focus, .is-info.textarea:focus, .is-info.is-focused.input, .is-info.is-focused.textarea, .is-info.input:active, .is-info.textarea:active, .is-info.is-active.input, .is-info.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25);
+}
+
+.is-success.input, .is-success.textarea {
+ border-color: #48c774;
+}
+
+.is-success.input:focus, .is-success.textarea:focus, .is-success.is-focused.input, .is-success.is-focused.textarea, .is-success.input:active, .is-success.textarea:active, .is-success.is-active.input, .is-success.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25);
+}
+
+.is-warning.input, .is-warning.textarea {
+ border-color: #ffdd57;
+}
+
+.is-warning.input:focus, .is-warning.textarea:focus, .is-warning.is-focused.input, .is-warning.is-focused.textarea, .is-warning.input:active, .is-warning.textarea:active, .is-warning.is-active.input, .is-warning.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25);
+}
+
+.is-danger.input, .is-danger.textarea {
+ border-color: #f14668;
+}
+
+.is-danger.input:focus, .is-danger.textarea:focus, .is-danger.is-focused.input, .is-danger.is-focused.textarea, .is-danger.input:active, .is-danger.textarea:active, .is-danger.is-active.input, .is-danger.is-active.textarea {
+ box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25);
+}
+
+.is-small.input, .is-small.textarea {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.is-medium.input, .is-medium.textarea {
+ font-size: 1.25rem;
+}
+
+.is-large.input, .is-large.textarea {
+ font-size: 1.5rem;
+}
+
+.is-fullwidth.input, .is-fullwidth.textarea {
+ display: block;
+ width: 100%;
+}
+
+.is-inline.input, .is-inline.textarea {
+ display: inline;
+ width: auto;
+}
+
+.input.is-rounded {
+ border-radius: 290486px;
+ padding-left: calc(calc(0.75em - 1px) + 0.375em);
+ padding-right: calc(calc(0.75em - 1px) + 0.375em);
+}
+
+.input.is-static {
+ background-color: transparent;
+ border-color: transparent;
+ box-shadow: none;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+.textarea {
+ display: block;
+ max-width: 100%;
+ min-width: 100%;
+ padding: calc(0.75em - 1px);
+ resize: vertical;
+}
+
+.textarea:not([rows]) {
+ max-height: 40em;
+ min-height: 8em;
+}
+
+.textarea[rows] {
+ height: initial;
+}
+
+.textarea.has-fixed-size {
+ resize: none;
+}
+
+.checkbox, .radio {
+ cursor: pointer;
+ display: inline-block;
+ line-height: 1.25;
+ position: relative;
+}
+
+.checkbox input, .radio input {
+ cursor: pointer;
+}
+
+.checkbox:hover, .radio:hover {
+ color: #363636;
+}
+
+.checkbox[disabled], .radio[disabled],
+fieldset[disabled] .checkbox,
+fieldset[disabled] .radio,
+.checkbox input[disabled],
+.radio input[disabled] {
+ color: #7a7a7a;
+ cursor: not-allowed;
+}
+
+.radio + .radio {
+ margin-left: 0.5em;
+}
+
+.select {
+ display: inline-block;
+ max-width: 100%;
+ position: relative;
+ vertical-align: top;
+}
+
+.select:not(.is-multiple) {
+ height: 2.5em;
+}
+
+.select:not(.is-multiple):not(.is-loading)::after {
+ border-color: #3273dc;
+ right: 1.125em;
+ z-index: 4;
+}
+
+.select.is-rounded select {
+ border-radius: 290486px;
+ padding-left: 1em;
+}
+
+.select select {
+ cursor: pointer;
+ display: block;
+ font-size: 1em;
+ max-width: 100%;
+ outline: none;
+}
+
+.select select::-ms-expand {
+ display: none;
+}
+
+.select select[disabled]:hover,
+fieldset[disabled] .select select:hover {
+ border-color: whitesmoke;
+}
+
+.select select:not([multiple]) {
+ padding-right: 2.5em;
+}
+
+.select select[multiple] {
+ height: auto;
+ padding: 0;
+}
+
+.select select[multiple] option {
+ padding: 0.5em 1em;
+}
+
+.select:not(.is-multiple):not(.is-loading):hover::after {
+ border-color: #363636;
+}
+
+.select.is-white:not(:hover)::after {
+ border-color: white;
+}
+
+.select.is-white select {
+ border-color: white;
+}
+
+.select.is-white select:hover, .select.is-white select.is-hovered {
+ border-color: #f2f2f2;
+}
+
+.select.is-white select:focus, .select.is-white select.is-focused, .select.is-white select:active, .select.is-white select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(255, 255, 255, 0.25);
+}
+
+.select.is-black:not(:hover)::after {
+ border-color: #0a0a0a;
+}
+
+.select.is-black select {
+ border-color: #0a0a0a;
+}
+
+.select.is-black select:hover, .select.is-black select.is-hovered {
+ border-color: black;
+}
+
+.select.is-black select:focus, .select.is-black select.is-focused, .select.is-black select:active, .select.is-black select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(10, 10, 10, 0.25);
+}
+
+.select.is-light:not(:hover)::after {
+ border-color: whitesmoke;
+}
+
+.select.is-light select {
+ border-color: whitesmoke;
+}
+
+.select.is-light select:hover, .select.is-light select.is-hovered {
+ border-color: #e8e8e8;
+}
+
+.select.is-light select:focus, .select.is-light select.is-focused, .select.is-light select:active, .select.is-light select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(245, 245, 245, 0.25);
+}
+
+.select.is-dark:not(:hover)::after {
+ border-color: #363636;
+}
+
+.select.is-dark select {
+ border-color: #363636;
+}
+
+.select.is-dark select:hover, .select.is-dark select.is-hovered {
+ border-color: #292929;
+}
+
+.select.is-dark select:focus, .select.is-dark select.is-focused, .select.is-dark select:active, .select.is-dark select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(54, 54, 54, 0.25);
+}
+
+.select.is-primary:not(:hover)::after {
+ border-color: #00d1b2;
+}
+
+.select.is-primary select {
+ border-color: #00d1b2;
+}
+
+.select.is-primary select:hover, .select.is-primary select.is-hovered {
+ border-color: #00b89c;
+}
+
+.select.is-primary select:focus, .select.is-primary select.is-focused, .select.is-primary select:active, .select.is-primary select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(0, 209, 178, 0.25);
+}
+
+.select.is-link:not(:hover)::after {
+ border-color: #3273dc;
+}
+
+.select.is-link select {
+ border-color: #3273dc;
+}
+
+.select.is-link select:hover, .select.is-link select.is-hovered {
+ border-color: #2366d1;
+}
+
+.select.is-link select:focus, .select.is-link select.is-focused, .select.is-link select:active, .select.is-link select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25);
+}
+
+.select.is-info:not(:hover)::after {
+ border-color: #3298dc;
+}
+
+.select.is-info select {
+ border-color: #3298dc;
+}
+
+.select.is-info select:hover, .select.is-info select.is-hovered {
+ border-color: #238cd1;
+}
+
+.select.is-info select:focus, .select.is-info select.is-focused, .select.is-info select:active, .select.is-info select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(50, 152, 220, 0.25);
+}
+
+.select.is-success:not(:hover)::after {
+ border-color: #48c774;
+}
+
+.select.is-success select {
+ border-color: #48c774;
+}
+
+.select.is-success select:hover, .select.is-success select.is-hovered {
+ border-color: #3abb67;
+}
+
+.select.is-success select:focus, .select.is-success select.is-focused, .select.is-success select:active, .select.is-success select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(72, 199, 116, 0.25);
+}
+
+.select.is-warning:not(:hover)::after {
+ border-color: #ffdd57;
+}
+
+.select.is-warning select {
+ border-color: #ffdd57;
+}
+
+.select.is-warning select:hover, .select.is-warning select.is-hovered {
+ border-color: #ffd83d;
+}
+
+.select.is-warning select:focus, .select.is-warning select.is-focused, .select.is-warning select:active, .select.is-warning select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(255, 221, 87, 0.25);
+}
+
+.select.is-danger:not(:hover)::after {
+ border-color: #f14668;
+}
+
+.select.is-danger select {
+ border-color: #f14668;
+}
+
+.select.is-danger select:hover, .select.is-danger select.is-hovered {
+ border-color: #ef2e55;
+}
+
+.select.is-danger select:focus, .select.is-danger select.is-focused, .select.is-danger select:active, .select.is-danger select.is-active {
+ box-shadow: 0 0 0 0.125em rgba(241, 70, 104, 0.25);
+}
+
+.select.is-small {
+ border-radius: 2px;
+ font-size: 0.75rem;
+}
+
+.select.is-medium {
+ font-size: 1.25rem;
+}
+
+.select.is-large {
+ font-size: 1.5rem;
+}
+
+.select.is-disabled::after {
+ border-color: #7a7a7a;
+}
+
+.select.is-fullwidth {
+ width: 100%;
+}
+
+.select.is-fullwidth select {
+ width: 100%;
+}
+
+.select.is-loading::after {
+ margin-top: 0;
+ position: absolute;
+ right: 0.625em;
+ top: 0.625em;
+ transform: none;
+}
+
+.select.is-loading.is-small:after {
+ font-size: 0.75rem;
+}
+
+.select.is-loading.is-medium:after {
+ font-size: 1.25rem;
+}
+
+.select.is-loading.is-large:after {
+ font-size: 1.5rem;
+}
+
+.file {
+ align-items: stretch;
+ display: flex;
+ justify-content: flex-start;
+ position: relative;
+}
+
+.file.is-white .file-cta {
+ background-color: white;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.file.is-white:hover .file-cta, .file.is-white.is-hovered .file-cta {
+ background-color: #f9f9f9;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.file.is-white:focus .file-cta, .file.is-white.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(255, 255, 255, 0.25);
+ color: #0a0a0a;
+}
+
+.file.is-white:active .file-cta, .file.is-white.is-active .file-cta {
+ background-color: #f2f2f2;
+ border-color: transparent;
+ color: #0a0a0a;
+}
+
+.file.is-black .file-cta {
+ background-color: #0a0a0a;
+ border-color: transparent;
+ color: white;
+}
+
+.file.is-black:hover .file-cta, .file.is-black.is-hovered .file-cta {
+ background-color: #040404;
+ border-color: transparent;
+ color: white;
+}
+
+.file.is-black:focus .file-cta, .file.is-black.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(10, 10, 10, 0.25);
+ color: white;
+}
+
+.file.is-black:active .file-cta, .file.is-black.is-active .file-cta {
+ background-color: black;
+ border-color: transparent;
+ color: white;
+}
+
+.file.is-light .file-cta {
+ background-color: whitesmoke;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-light:hover .file-cta, .file.is-light.is-hovered .file-cta {
+ background-color: #eeeeee;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-light:focus .file-cta, .file.is-light.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(245, 245, 245, 0.25);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-light:active .file-cta, .file.is-light.is-active .file-cta {
+ background-color: #e8e8e8;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-dark .file-cta {
+ background-color: #363636;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-dark:hover .file-cta, .file.is-dark.is-hovered .file-cta {
+ background-color: #2f2f2f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-dark:focus .file-cta, .file.is-dark.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(54, 54, 54, 0.25);
+ color: #fff;
+}
+
+.file.is-dark:active .file-cta, .file.is-dark.is-active .file-cta {
+ background-color: #292929;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-primary .file-cta {
+ background-color: #00d1b2;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-primary:hover .file-cta, .file.is-primary.is-hovered .file-cta {
+ background-color: #00c4a7;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-primary:focus .file-cta, .file.is-primary.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(0, 209, 178, 0.25);
+ color: #fff;
+}
+
+.file.is-primary:active .file-cta, .file.is-primary.is-active .file-cta {
+ background-color: #00b89c;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-link .file-cta {
+ background-color: #3273dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-link:hover .file-cta, .file.is-link.is-hovered .file-cta {
+ background-color: #276cda;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-link:focus .file-cta, .file.is-link.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(50, 115, 220, 0.25);
+ color: #fff;
+}
+
+.file.is-link:active .file-cta, .file.is-link.is-active .file-cta {
+ background-color: #2366d1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-info .file-cta {
+ background-color: #3298dc;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-info:hover .file-cta, .file.is-info.is-hovered .file-cta {
+ background-color: #2793da;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-info:focus .file-cta, .file.is-info.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(50, 152, 220, 0.25);
+ color: #fff;
+}
+
+.file.is-info:active .file-cta, .file.is-info.is-active .file-cta {
+ background-color: #238cd1;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-success .file-cta {
+ background-color: #48c774;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-success:hover .file-cta, .file.is-success.is-hovered .file-cta {
+ background-color: #3ec46d;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-success:focus .file-cta, .file.is-success.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(72, 199, 116, 0.25);
+ color: #fff;
+}
+
+.file.is-success:active .file-cta, .file.is-success.is-active .file-cta {
+ background-color: #3abb67;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-warning .file-cta {
+ background-color: #ffdd57;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-warning:hover .file-cta, .file.is-warning.is-hovered .file-cta {
+ background-color: #ffdb4a;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-warning:focus .file-cta, .file.is-warning.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(255, 221, 87, 0.25);
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-warning:active .file-cta, .file.is-warning.is-active .file-cta {
+ background-color: #ffd83d;
+ border-color: transparent;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.file.is-danger .file-cta {
+ background-color: #f14668;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-danger:hover .file-cta, .file.is-danger.is-hovered .file-cta {
+ background-color: #f03a5f;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-danger:focus .file-cta, .file.is-danger.is-focused .file-cta {
+ border-color: transparent;
+ box-shadow: 0 0 0.5em rgba(241, 70, 104, 0.25);
+ color: #fff;
+}
+
+.file.is-danger:active .file-cta, .file.is-danger.is-active .file-cta {
+ background-color: #ef2e55;
+ border-color: transparent;
+ color: #fff;
+}
+
+.file.is-small {
+ font-size: 0.75rem;
+}
+
+.file.is-medium {
+ font-size: 1.25rem;
+}
+
+.file.is-medium .file-icon .fa {
+ font-size: 21px;
+}
+
+.file.is-large {
+ font-size: 1.5rem;
+}
+
+.file.is-large .file-icon .fa {
+ font-size: 28px;
+}
+
+.file.has-name .file-cta {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.file.has-name .file-name {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.file.has-name.is-empty .file-cta {
+ border-radius: 4px;
+}
+
+.file.has-name.is-empty .file-name {
+ display: none;
+}
+
+.file.is-boxed .file-label {
+ flex-direction: column;
+}
+
+.file.is-boxed .file-cta {
+ flex-direction: column;
+ height: auto;
+ padding: 1em 3em;
+}
+
+.file.is-boxed .file-name {
+ border-width: 0 1px 1px;
+}
+
+.file.is-boxed .file-icon {
+ height: 1.5em;
+ width: 1.5em;
+}
+
+.file.is-boxed .file-icon .fa {
+ font-size: 21px;
+}
+
+.file.is-boxed.is-small .file-icon .fa {
+ font-size: 14px;
+}
+
+.file.is-boxed.is-medium .file-icon .fa {
+ font-size: 28px;
+}
+
+.file.is-boxed.is-large .file-icon .fa {
+ font-size: 35px;
+}
+
+.file.is-boxed.has-name .file-cta {
+ border-radius: 4px 4px 0 0;
+}
+
+.file.is-boxed.has-name .file-name {
+ border-radius: 0 0 4px 4px;
+ border-width: 0 1px 1px;
+}
+
+.file.is-centered {
+ justify-content: center;
+}
+
+.file.is-fullwidth .file-label {
+ width: 100%;
+}
+
+.file.is-fullwidth .file-name {
+ flex-grow: 1;
+ max-width: none;
+}
+
+.file.is-right {
+ justify-content: flex-end;
+}
+
+.file.is-right .file-cta {
+ border-radius: 0 4px 4px 0;
+}
+
+.file.is-right .file-name {
+ border-radius: 4px 0 0 4px;
+ border-width: 1px 0 1px 1px;
+ order: -1;
+}
+
+.file-label {
+ align-items: stretch;
+ display: flex;
+ cursor: pointer;
+ justify-content: flex-start;
+ overflow: hidden;
+ position: relative;
+}
+
+.file-label:hover .file-cta {
+ background-color: #eeeeee;
+ color: #363636;
+}
+
+.file-label:hover .file-name {
+ border-color: #d5d5d5;
+}
+
+.file-label:active .file-cta {
+ background-color: #e8e8e8;
+ color: #363636;
+}
+
+.file-label:active .file-name {
+ border-color: #cfcfcf;
+}
+
+.file-input {
+ height: 100%;
+ left: 0;
+ opacity: 0;
+ outline: none;
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+
+.file-cta,
+.file-name {
+ border-color: #dbdbdb;
+ border-radius: 4px;
+ font-size: 1em;
+ padding-left: 1em;
+ padding-right: 1em;
+ white-space: nowrap;
+}
+
+.file-cta {
+ background-color: whitesmoke;
+ color: #4a4a4a;
+}
+
+.file-name {
+ border-color: #dbdbdb;
+ border-style: solid;
+ border-width: 1px 1px 1px 0;
+ display: block;
+ max-width: 16em;
+ overflow: hidden;
+ text-align: inherit;
+ text-overflow: ellipsis;
+}
+
+.file-icon {
+ align-items: center;
+ display: flex;
+ height: 1em;
+ justify-content: center;
+ margin-right: 0.5em;
+ width: 1em;
+}
+
+.file-icon .fa {
+ font-size: 14px;
+}
+
+.label {
+ color: #363636;
+ display: block;
+ font-size: 1rem;
+ font-weight: 700;
+}
+
+.label:not(:last-child) {
+ margin-bottom: 0.5em;
+}
+
+.label.is-small {
+ font-size: 0.75rem;
+}
+
+.label.is-medium {
+ font-size: 1.25rem;
+}
+
+.label.is-large {
+ font-size: 1.5rem;
+}
+
+.help {
+ display: block;
+ font-size: 0.75rem;
+ margin-top: 0.25rem;
+}
+
+.help.is-white {
+ color: white;
+}
+
+.help.is-black {
+ color: #0a0a0a;
+}
+
+.help.is-light {
+ color: whitesmoke;
+}
+
+.help.is-dark {
+ color: #363636;
+}
+
+.help.is-primary {
+ color: #00d1b2;
+}
+
+.help.is-link {
+ color: #3273dc;
+}
+
+.help.is-info {
+ color: #3298dc;
+}
+
+.help.is-success {
+ color: #48c774;
+}
+
+.help.is-warning {
+ color: #ffdd57;
+}
+
+.help.is-danger {
+ color: #f14668;
+}
+
+.field:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.field.has-addons {
+ display: flex;
+ justify-content: flex-start;
+}
+
+.field.has-addons .control:not(:last-child) {
+ margin-right: -1px;
+}
+
+.field.has-addons .control:not(:first-child):not(:last-child) .button,
+.field.has-addons .control:not(:first-child):not(:last-child) .input,
+.field.has-addons .control:not(:first-child):not(:last-child) .select select {
+ border-radius: 0;
+}
+
+.field.has-addons .control:first-child:not(:only-child) .button,
+.field.has-addons .control:first-child:not(:only-child) .input,
+.field.has-addons .control:first-child:not(:only-child) .select select {
+ border-bottom-right-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.field.has-addons .control:last-child:not(:only-child) .button,
+.field.has-addons .control:last-child:not(:only-child) .input,
+.field.has-addons .control:last-child:not(:only-child) .select select {
+ border-bottom-left-radius: 0;
+ border-top-left-radius: 0;
+}
+
+.field.has-addons .control .button:not([disabled]):hover, .field.has-addons .control .button:not([disabled]).is-hovered,
+.field.has-addons .control .input:not([disabled]):hover,
+.field.has-addons .control .input:not([disabled]).is-hovered,
+.field.has-addons .control .select select:not([disabled]):hover,
+.field.has-addons .control .select select:not([disabled]).is-hovered {
+ z-index: 2;
+}
+
+.field.has-addons .control .button:not([disabled]):focus, .field.has-addons .control .button:not([disabled]).is-focused, .field.has-addons .control .button:not([disabled]):active, .field.has-addons .control .button:not([disabled]).is-active,
+.field.has-addons .control .input:not([disabled]):focus,
+.field.has-addons .control .input:not([disabled]).is-focused,
+.field.has-addons .control .input:not([disabled]):active,
+.field.has-addons .control .input:not([disabled]).is-active,
+.field.has-addons .control .select select:not([disabled]):focus,
+.field.has-addons .control .select select:not([disabled]).is-focused,
+.field.has-addons .control .select select:not([disabled]):active,
+.field.has-addons .control .select select:not([disabled]).is-active {
+ z-index: 3;
+}
+
+.field.has-addons .control .button:not([disabled]):focus:hover, .field.has-addons .control .button:not([disabled]).is-focused:hover, .field.has-addons .control .button:not([disabled]):active:hover, .field.has-addons .control .button:not([disabled]).is-active:hover,
+.field.has-addons .control .input:not([disabled]):focus:hover,
+.field.has-addons .control .input:not([disabled]).is-focused:hover,
+.field.has-addons .control .input:not([disabled]):active:hover,
+.field.has-addons .control .input:not([disabled]).is-active:hover,
+.field.has-addons .control .select select:not([disabled]):focus:hover,
+.field.has-addons .control .select select:not([disabled]).is-focused:hover,
+.field.has-addons .control .select select:not([disabled]):active:hover,
+.field.has-addons .control .select select:not([disabled]).is-active:hover {
+ z-index: 4;
+}
+
+.field.has-addons .control.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.field.has-addons.has-addons-centered {
+ justify-content: center;
+}
+
+.field.has-addons.has-addons-right {
+ justify-content: flex-end;
+}
+
+.field.has-addons.has-addons-fullwidth .control {
+ flex-grow: 1;
+ flex-shrink: 0;
+}
+
+.field.is-grouped {
+ display: flex;
+ justify-content: flex-start;
+}
+
+.field.is-grouped > .control {
+ flex-shrink: 0;
+}
+
+.field.is-grouped > .control:not(:last-child) {
+ margin-bottom: 0;
+ margin-right: 0.75rem;
+}
+
+.field.is-grouped > .control.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.field.is-grouped.is-grouped-centered {
+ justify-content: center;
+}
+
+.field.is-grouped.is-grouped-right {
+ justify-content: flex-end;
+}
+
+.field.is-grouped.is-grouped-multiline {
+ flex-wrap: wrap;
+}
+
+.field.is-grouped.is-grouped-multiline > .control:last-child, .field.is-grouped.is-grouped-multiline > .control:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.field.is-grouped.is-grouped-multiline:last-child {
+ margin-bottom: -0.75rem;
+}
+
+.field.is-grouped.is-grouped-multiline:not(:last-child) {
+ margin-bottom: 0;
+}
+
+@media screen and (min-width: 769px), print {
+ .field.is-horizontal {
+ display: flex;
+ }
+}
+
+.field-label .label {
+ font-size: inherit;
+}
+
+@media screen and (max-width: 768px) {
+ .field-label {
+ margin-bottom: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .field-label {
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ margin-right: 1.5rem;
+ text-align: right;
+ }
+ .field-label.is-small {
+ font-size: 0.75rem;
+ padding-top: 0.375em;
+ }
+ .field-label.is-normal {
+ padding-top: 0.375em;
+ }
+ .field-label.is-medium {
+ font-size: 1.25rem;
+ padding-top: 0.375em;
+ }
+ .field-label.is-large {
+ font-size: 1.5rem;
+ padding-top: 0.375em;
+ }
+}
+
+.field-body .field .field {
+ margin-bottom: 0;
+}
+
+@media screen and (min-width: 769px), print {
+ .field-body {
+ display: flex;
+ flex-basis: 0;
+ flex-grow: 5;
+ flex-shrink: 1;
+ }
+ .field-body .field {
+ margin-bottom: 0;
+ }
+ .field-body > .field {
+ flex-shrink: 1;
+ }
+ .field-body > .field:not(.is-narrow) {
+ flex-grow: 1;
+ }
+ .field-body > .field:not(:last-child) {
+ margin-right: 0.75rem;
+ }
+}
+
+.control {
+ box-sizing: border-box;
+ clear: both;
+ font-size: 1rem;
+ position: relative;
+ text-align: inherit;
+}
+
+.control.has-icons-left .input:focus ~ .icon,
+.control.has-icons-left .select:focus ~ .icon, .control.has-icons-right .input:focus ~ .icon,
+.control.has-icons-right .select:focus ~ .icon {
+ color: #4a4a4a;
+}
+
+.control.has-icons-left .input.is-small ~ .icon,
+.control.has-icons-left .select.is-small ~ .icon, .control.has-icons-right .input.is-small ~ .icon,
+.control.has-icons-right .select.is-small ~ .icon {
+ font-size: 0.75rem;
+}
+
+.control.has-icons-left .input.is-medium ~ .icon,
+.control.has-icons-left .select.is-medium ~ .icon, .control.has-icons-right .input.is-medium ~ .icon,
+.control.has-icons-right .select.is-medium ~ .icon {
+ font-size: 1.25rem;
+}
+
+.control.has-icons-left .input.is-large ~ .icon,
+.control.has-icons-left .select.is-large ~ .icon, .control.has-icons-right .input.is-large ~ .icon,
+.control.has-icons-right .select.is-large ~ .icon {
+ font-size: 1.5rem;
+}
+
+.control.has-icons-left .icon, .control.has-icons-right .icon {
+ color: #dbdbdb;
+ height: 2.5em;
+ pointer-events: none;
+ position: absolute;
+ top: 0;
+ width: 2.5em;
+ z-index: 4;
+}
+
+.control.has-icons-left .input,
+.control.has-icons-left .select select {
+ padding-left: 2.5em;
+}
+
+.control.has-icons-left .icon.is-left {
+ left: 0;
+}
+
+.control.has-icons-right .input,
+.control.has-icons-right .select select {
+ padding-right: 2.5em;
+}
+
+.control.has-icons-right .icon.is-right {
+ right: 0;
+}
+
+.control.is-loading::after {
+ position: absolute !important;
+ right: 0.625em;
+ top: 0.625em;
+ z-index: 4;
+}
+
+.control.is-loading.is-small:after {
+ font-size: 0.75rem;
+}
+
+.control.is-loading.is-medium:after {
+ font-size: 1.25rem;
+}
+
+.control.is-loading.is-large:after {
+ font-size: 1.5rem;
+}
+
+/* Bulma Components */
+.breadcrumb {
+ font-size: 1rem;
+ white-space: nowrap;
+}
+
+.breadcrumb a {
+ align-items: center;
+ color: #3273dc;
+ display: flex;
+ justify-content: center;
+ padding: 0 0.75em;
+}
+
+.breadcrumb a:hover {
+ color: #363636;
+}
+
+.breadcrumb li {
+ align-items: center;
+ display: flex;
+}
+
+.breadcrumb li:first-child a {
+ padding-left: 0;
+}
+
+.breadcrumb li.is-active a {
+ color: #363636;
+ cursor: default;
+ pointer-events: none;
+}
+
+.breadcrumb li + li::before {
+ color: #b5b5b5;
+ content: "\0002f";
+}
+
+.breadcrumb ul,
+.breadcrumb ol {
+ align-items: flex-start;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-start;
+}
+
+.breadcrumb .icon:first-child {
+ margin-right: 0.5em;
+}
+
+.breadcrumb .icon:last-child {
+ margin-left: 0.5em;
+}
+
+.breadcrumb.is-centered ol,
+.breadcrumb.is-centered ul {
+ justify-content: center;
+}
+
+.breadcrumb.is-right ol,
+.breadcrumb.is-right ul {
+ justify-content: flex-end;
+}
+
+.breadcrumb.is-small {
+ font-size: 0.75rem;
+}
+
+.breadcrumb.is-medium {
+ font-size: 1.25rem;
+}
+
+.breadcrumb.is-large {
+ font-size: 1.5rem;
+}
+
+.breadcrumb.has-arrow-separator li + li::before {
+ content: "\02192";
+}
+
+.breadcrumb.has-bullet-separator li + li::before {
+ content: "\02022";
+}
+
+.breadcrumb.has-dot-separator li + li::before {
+ content: "\000b7";
+}
+
+.breadcrumb.has-succeeds-separator li + li::before {
+ content: "\0227B";
+}
+
+.card {
+ background-color: white;
+ border-radius: 0.25rem;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ color: #4a4a4a;
+ max-width: 100%;
+ overflow: hidden;
+ position: relative;
+}
+
+.card-header {
+ background-color: transparent;
+ align-items: stretch;
+ box-shadow: 0 0.125em 0.25em rgba(10, 10, 10, 0.1);
+ display: flex;
+}
+
+.card-header-title {
+ align-items: center;
+ color: #363636;
+ display: flex;
+ flex-grow: 1;
+ font-weight: 700;
+ padding: 0.75rem 1rem;
+}
+
+.card-header-title.is-centered {
+ justify-content: center;
+}
+
+.card-header-icon {
+ align-items: center;
+ cursor: pointer;
+ display: flex;
+ justify-content: center;
+ padding: 0.75rem 1rem;
+}
+
+.card-image {
+ display: block;
+ position: relative;
+}
+
+.card-content {
+ background-color: transparent;
+ padding: 1.5rem;
+}
+
+.card-footer {
+ background-color: transparent;
+ border-top: 1px solid #ededed;
+ align-items: stretch;
+ display: flex;
+}
+
+.card-footer-item {
+ align-items: center;
+ display: flex;
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 0;
+ justify-content: center;
+ padding: 0.75rem;
+}
+
+.card-footer-item:not(:last-child) {
+ border-right: 1px solid #ededed;
+}
+
+.card .media:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.dropdown {
+ display: inline-flex;
+ position: relative;
+ vertical-align: top;
+}
+
+.dropdown.is-active .dropdown-menu, .dropdown.is-hoverable:hover .dropdown-menu {
+ display: block;
+}
+
+.dropdown.is-right .dropdown-menu {
+ left: auto;
+ right: 0;
+}
+
+.dropdown.is-up .dropdown-menu {
+ bottom: 100%;
+ padding-bottom: 4px;
+ padding-top: initial;
+ top: auto;
+}
+
+.dropdown-menu {
+ display: none;
+ left: 0;
+ min-width: 12rem;
+ padding-top: 4px;
+ position: absolute;
+ top: 100%;
+ z-index: 20;
+}
+
+.dropdown-content {
+ background-color: white;
+ border-radius: 4px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ padding-bottom: 0.5rem;
+ padding-top: 0.5rem;
+}
+
+.dropdown-item {
+ color: #4a4a4a;
+ display: block;
+ font-size: 0.875rem;
+ line-height: 1.5;
+ padding: 0.375rem 1rem;
+ position: relative;
+}
+
+a.dropdown-item,
+button.dropdown-item {
+ padding-right: 3rem;
+ text-align: inherit;
+ white-space: nowrap;
+ width: 100%;
+}
+
+a.dropdown-item:hover,
+button.dropdown-item:hover {
+ background-color: whitesmoke;
+ color: #0a0a0a;
+}
+
+a.dropdown-item.is-active,
+button.dropdown-item.is-active {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.dropdown-divider {
+ background-color: #ededed;
+ border: none;
+ display: block;
+ height: 1px;
+ margin: 0.5rem 0;
+}
+
+.level {
+ align-items: center;
+ justify-content: space-between;
+}
+
+.level code {
+ border-radius: 4px;
+}
+
+.level img {
+ display: inline-block;
+ vertical-align: top;
+}
+
+.level.is-mobile {
+ display: flex;
+}
+
+.level.is-mobile .level-left,
+.level.is-mobile .level-right {
+ display: flex;
+}
+
+.level.is-mobile .level-left + .level-right {
+ margin-top: 0;
+}
+
+.level.is-mobile .level-item:not(:last-child) {
+ margin-bottom: 0;
+ margin-right: 0.75rem;
+}
+
+.level.is-mobile .level-item:not(.is-narrow) {
+ flex-grow: 1;
+}
+
+@media screen and (min-width: 769px), print {
+ .level {
+ display: flex;
+ }
+ .level > .level-item:not(.is-narrow) {
+ flex-grow: 1;
+ }
+}
+
+.level-item {
+ align-items: center;
+ display: flex;
+ flex-basis: auto;
+ flex-grow: 0;
+ flex-shrink: 0;
+ justify-content: center;
+}
+
+.level-item .title,
+.level-item .subtitle {
+ margin-bottom: 0;
+}
+
+@media screen and (max-width: 768px) {
+ .level-item:not(:last-child) {
+ margin-bottom: 0.75rem;
+ }
+}
+
+.level-left,
+.level-right {
+ flex-basis: auto;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.level-left .level-item.is-flexible,
+.level-right .level-item.is-flexible {
+ flex-grow: 1;
+}
+
+@media screen and (min-width: 769px), print {
+ .level-left .level-item:not(:last-child),
+ .level-right .level-item:not(:last-child) {
+ margin-right: 0.75rem;
+ }
+}
+
+.level-left {
+ align-items: center;
+ justify-content: flex-start;
+}
+
+@media screen and (max-width: 768px) {
+ .level-left + .level-right {
+ margin-top: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .level-left {
+ display: flex;
+ }
+}
+
+.level-right {
+ align-items: center;
+ justify-content: flex-end;
+}
+
+@media screen and (min-width: 769px), print {
+ .level-right {
+ display: flex;
+ }
+}
+
+.media {
+ align-items: flex-start;
+ display: flex;
+ text-align: inherit;
+}
+
+.media .content:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.media .media {
+ border-top: 1px solid rgba(219, 219, 219, 0.5);
+ display: flex;
+ padding-top: 0.75rem;
+}
+
+.media .media .content:not(:last-child),
+.media .media .control:not(:last-child) {
+ margin-bottom: 0.5rem;
+}
+
+.media .media .media {
+ padding-top: 0.5rem;
+}
+
+.media .media .media + .media {
+ margin-top: 0.5rem;
+}
+
+.media + .media {
+ border-top: 1px solid rgba(219, 219, 219, 0.5);
+ margin-top: 1rem;
+ padding-top: 1rem;
+}
+
+.media.is-large + .media {
+ margin-top: 1.5rem;
+ padding-top: 1.5rem;
+}
+
+.media-left,
+.media-right {
+ flex-basis: auto;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.media-left {
+ margin-right: 1rem;
+}
+
+.media-right {
+ margin-left: 1rem;
+}
+
+.media-content {
+ flex-basis: auto;
+ flex-grow: 1;
+ flex-shrink: 1;
+ text-align: inherit;
+}
+
+@media screen and (max-width: 768px) {
+ .media-content {
+ overflow-x: auto;
+ }
+}
+
+.menu {
+ font-size: 1rem;
+}
+
+.menu.is-small {
+ font-size: 0.75rem;
+}
+
+.menu.is-medium {
+ font-size: 1.25rem;
+}
+
+.menu.is-large {
+ font-size: 1.5rem;
+}
+
+.menu-list {
+ line-height: 1.25;
+}
+
+.menu-list a {
+ border-radius: 2px;
+ color: #4a4a4a;
+ display: block;
+ padding: 0.5em 0.75em;
+}
+
+.menu-list a:hover {
+ background-color: whitesmoke;
+ color: #363636;
+}
+
+.menu-list a.is-active {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.menu-list li ul {
+ border-left: 1px solid #dbdbdb;
+ margin: 0.75em;
+ padding-left: 0.75em;
+}
+
+.menu-label {
+ color: #7a7a7a;
+ font-size: 0.75em;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+}
+
+.menu-label:not(:first-child) {
+ margin-top: 1em;
+}
+
+.menu-label:not(:last-child) {
+ margin-bottom: 1em;
+}
+
+.message {
+ background-color: whitesmoke;
+ border-radius: 4px;
+ font-size: 1rem;
+}
+
+.message strong {
+ color: currentColor;
+}
+
+.message a:not(.button):not(.tag):not(.dropdown-item) {
+ color: currentColor;
+ text-decoration: underline;
+}
+
+.message.is-small {
+ font-size: 0.75rem;
+}
+
+.message.is-medium {
+ font-size: 1.25rem;
+}
+
+.message.is-large {
+ font-size: 1.5rem;
+}
+
+.message.is-white {
+ background-color: white;
+}
+
+.message.is-white .message-header {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.message.is-white .message-body {
+ border-color: white;
+}
+
+.message.is-black {
+ background-color: #fafafa;
+}
+
+.message.is-black .message-header {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.message.is-black .message-body {
+ border-color: #0a0a0a;
+}
+
+.message.is-light {
+ background-color: #fafafa;
+}
+
+.message.is-light .message-header {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.message.is-light .message-body {
+ border-color: whitesmoke;
+}
+
+.message.is-dark {
+ background-color: #fafafa;
+}
+
+.message.is-dark .message-header {
+ background-color: #363636;
+ color: #fff;
+}
+
+.message.is-dark .message-body {
+ border-color: #363636;
+}
+
+.message.is-primary {
+ background-color: #ebfffc;
+}
+
+.message.is-primary .message-header {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.message.is-primary .message-body {
+ border-color: #00d1b2;
+ color: #00947e;
+}
+
+.message.is-link {
+ background-color: #eef3fc;
+}
+
+.message.is-link .message-header {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.message.is-link .message-body {
+ border-color: #3273dc;
+ color: #2160c4;
+}
+
+.message.is-info {
+ background-color: #eef6fc;
+}
+
+.message.is-info .message-header {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.message.is-info .message-body {
+ border-color: #3298dc;
+ color: #1d72aa;
+}
+
+.message.is-success {
+ background-color: #effaf3;
+}
+
+.message.is-success .message-header {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.message.is-success .message-body {
+ border-color: #48c774;
+ color: #257942;
+}
+
+.message.is-warning {
+ background-color: #fffbeb;
+}
+
+.message.is-warning .message-header {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.message.is-warning .message-body {
+ border-color: #ffdd57;
+ color: #947600;
+}
+
+.message.is-danger {
+ background-color: #feecf0;
+}
+
+.message.is-danger .message-header {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.message.is-danger .message-body {
+ border-color: #f14668;
+ color: #cc0f35;
+}
+
+.message-header {
+ align-items: center;
+ background-color: #4a4a4a;
+ border-radius: 4px 4px 0 0;
+ color: #fff;
+ display: flex;
+ font-weight: 700;
+ justify-content: space-between;
+ line-height: 1.25;
+ padding: 0.75em 1em;
+ position: relative;
+}
+
+.message-header .delete {
+ flex-grow: 0;
+ flex-shrink: 0;
+ margin-left: 0.75em;
+}
+
+.message-header + .message-body {
+ border-width: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+
+.message-body {
+ border-color: #dbdbdb;
+ border-radius: 4px;
+ border-style: solid;
+ border-width: 0 0 0 4px;
+ color: #4a4a4a;
+ padding: 1.25em 1.5em;
+}
+
+.message-body code,
+.message-body pre {
+ background-color: white;
+}
+
+.message-body pre code {
+ background-color: transparent;
+}
+
+.modal {
+ align-items: center;
+ display: none;
+ flex-direction: column;
+ justify-content: center;
+ overflow: hidden;
+ position: fixed;
+ z-index: 40;
+}
+
+.modal.is-active {
+ display: flex;
+}
+
+.modal-background {
+ background-color: rgba(10, 10, 10, 0.86);
+}
+
+.modal-content,
+.modal-card {
+ margin: 0 20px;
+ max-height: calc(100vh - 160px);
+ overflow: auto;
+ position: relative;
+ width: 100%;
+}
+
+@media screen and (min-width: 769px) {
+ .modal-content,
+ .modal-card {
+ margin: 0 auto;
+ max-height: calc(100vh - 40px);
+ width: 640px;
+ }
+}
+
+.modal-close {
+ background: none;
+ height: 40px;
+ position: fixed;
+ right: 20px;
+ top: 20px;
+ width: 40px;
+}
+
+.modal-card {
+ display: flex;
+ flex-direction: column;
+ max-height: calc(100vh - 40px);
+ overflow: hidden;
+ -ms-overflow-y: visible;
+}
+
+.modal-card-head,
+.modal-card-foot {
+ align-items: center;
+ background-color: whitesmoke;
+ display: flex;
+ flex-shrink: 0;
+ justify-content: flex-start;
+ padding: 20px;
+ position: relative;
+}
+
+.modal-card-head {
+ border-bottom: 1px solid #dbdbdb;
+ border-top-left-radius: 6px;
+ border-top-right-radius: 6px;
+}
+
+.modal-card-title {
+ color: #363636;
+ flex-grow: 1;
+ flex-shrink: 0;
+ font-size: 1.5rem;
+ line-height: 1;
+}
+
+.modal-card-foot {
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-top: 1px solid #dbdbdb;
+}
+
+.modal-card-foot .button:not(:last-child) {
+ margin-right: 0.5em;
+}
+
+.modal-card-body {
+ -webkit-overflow-scrolling: touch;
+ background-color: white;
+ flex-grow: 1;
+ flex-shrink: 1;
+ overflow: auto;
+ padding: 20px;
+}
+
+.navbar {
+ background-color: white;
+ min-height: 3.25rem;
+ position: relative;
+ z-index: 30;
+}
+
+.navbar.is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-brand > .navbar-item,
+.navbar.is-white .navbar-brand .navbar-link {
+ color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-brand > a.navbar-item:focus, .navbar.is-white .navbar-brand > a.navbar-item:hover, .navbar.is-white .navbar-brand > a.navbar-item.is-active,
+.navbar.is-white .navbar-brand .navbar-link:focus,
+.navbar.is-white .navbar-brand .navbar-link:hover,
+.navbar.is-white .navbar-brand .navbar-link.is-active {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-brand .navbar-link::after {
+ border-color: #0a0a0a;
+}
+
+.navbar.is-white .navbar-burger {
+ color: #0a0a0a;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-white .navbar-start > .navbar-item,
+ .navbar.is-white .navbar-start .navbar-link,
+ .navbar.is-white .navbar-end > .navbar-item,
+ .navbar.is-white .navbar-end .navbar-link {
+ color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-start > a.navbar-item:focus, .navbar.is-white .navbar-start > a.navbar-item:hover, .navbar.is-white .navbar-start > a.navbar-item.is-active,
+ .navbar.is-white .navbar-start .navbar-link:focus,
+ .navbar.is-white .navbar-start .navbar-link:hover,
+ .navbar.is-white .navbar-start .navbar-link.is-active,
+ .navbar.is-white .navbar-end > a.navbar-item:focus,
+ .navbar.is-white .navbar-end > a.navbar-item:hover,
+ .navbar.is-white .navbar-end > a.navbar-item.is-active,
+ .navbar.is-white .navbar-end .navbar-link:focus,
+ .navbar.is-white .navbar-end .navbar-link:hover,
+ .navbar.is-white .navbar-end .navbar-link.is-active {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-start .navbar-link::after,
+ .navbar.is-white .navbar-end .navbar-link::after {
+ border-color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+ }
+ .navbar.is-white .navbar-dropdown a.navbar-item.is-active {
+ background-color: white;
+ color: #0a0a0a;
+ }
+}
+
+.navbar.is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.navbar.is-black .navbar-brand > .navbar-item,
+.navbar.is-black .navbar-brand .navbar-link {
+ color: white;
+}
+
+.navbar.is-black .navbar-brand > a.navbar-item:focus, .navbar.is-black .navbar-brand > a.navbar-item:hover, .navbar.is-black .navbar-brand > a.navbar-item.is-active,
+.navbar.is-black .navbar-brand .navbar-link:focus,
+.navbar.is-black .navbar-brand .navbar-link:hover,
+.navbar.is-black .navbar-brand .navbar-link.is-active {
+ background-color: black;
+ color: white;
+}
+
+.navbar.is-black .navbar-brand .navbar-link::after {
+ border-color: white;
+}
+
+.navbar.is-black .navbar-burger {
+ color: white;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-black .navbar-start > .navbar-item,
+ .navbar.is-black .navbar-start .navbar-link,
+ .navbar.is-black .navbar-end > .navbar-item,
+ .navbar.is-black .navbar-end .navbar-link {
+ color: white;
+ }
+ .navbar.is-black .navbar-start > a.navbar-item:focus, .navbar.is-black .navbar-start > a.navbar-item:hover, .navbar.is-black .navbar-start > a.navbar-item.is-active,
+ .navbar.is-black .navbar-start .navbar-link:focus,
+ .navbar.is-black .navbar-start .navbar-link:hover,
+ .navbar.is-black .navbar-start .navbar-link.is-active,
+ .navbar.is-black .navbar-end > a.navbar-item:focus,
+ .navbar.is-black .navbar-end > a.navbar-item:hover,
+ .navbar.is-black .navbar-end > a.navbar-item.is-active,
+ .navbar.is-black .navbar-end .navbar-link:focus,
+ .navbar.is-black .navbar-end .navbar-link:hover,
+ .navbar.is-black .navbar-end .navbar-link.is-active {
+ background-color: black;
+ color: white;
+ }
+ .navbar.is-black .navbar-start .navbar-link::after,
+ .navbar.is-black .navbar-end .navbar-link::after {
+ border-color: white;
+ }
+ .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: black;
+ color: white;
+ }
+ .navbar.is-black .navbar-dropdown a.navbar-item.is-active {
+ background-color: #0a0a0a;
+ color: white;
+ }
+}
+
+.navbar.is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-brand > .navbar-item,
+.navbar.is-light .navbar-brand .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-brand > a.navbar-item:focus, .navbar.is-light .navbar-brand > a.navbar-item:hover, .navbar.is-light .navbar-brand > a.navbar-item.is-active,
+.navbar.is-light .navbar-brand .navbar-link:focus,
+.navbar.is-light .navbar-brand .navbar-link:hover,
+.navbar.is-light .navbar-brand .navbar-link.is-active {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-brand .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-light .navbar-burger {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-light .navbar-start > .navbar-item,
+ .navbar.is-light .navbar-start .navbar-link,
+ .navbar.is-light .navbar-end > .navbar-item,
+ .navbar.is-light .navbar-end .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-start > a.navbar-item:focus, .navbar.is-light .navbar-start > a.navbar-item:hover, .navbar.is-light .navbar-start > a.navbar-item.is-active,
+ .navbar.is-light .navbar-start .navbar-link:focus,
+ .navbar.is-light .navbar-start .navbar-link:hover,
+ .navbar.is-light .navbar-start .navbar-link.is-active,
+ .navbar.is-light .navbar-end > a.navbar-item:focus,
+ .navbar.is-light .navbar-end > a.navbar-item:hover,
+ .navbar.is-light .navbar-end > a.navbar-item.is-active,
+ .navbar.is-light .navbar-end .navbar-link:focus,
+ .navbar.is-light .navbar-end .navbar-link:hover,
+ .navbar.is-light .navbar-end .navbar-link.is-active {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-start .navbar-link::after,
+ .navbar.is-light .navbar-end .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-light .navbar-dropdown a.navbar-item.is-active {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+ }
+}
+
+.navbar.is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.navbar.is-dark .navbar-brand > .navbar-item,
+.navbar.is-dark .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-dark .navbar-brand > a.navbar-item:focus, .navbar.is-dark .navbar-brand > a.navbar-item:hover, .navbar.is-dark .navbar-brand > a.navbar-item.is-active,
+.navbar.is-dark .navbar-brand .navbar-link:focus,
+.navbar.is-dark .navbar-brand .navbar-link:hover,
+.navbar.is-dark .navbar-brand .navbar-link.is-active {
+ background-color: #292929;
+ color: #fff;
+}
+
+.navbar.is-dark .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-dark .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-dark .navbar-start > .navbar-item,
+ .navbar.is-dark .navbar-start .navbar-link,
+ .navbar.is-dark .navbar-end > .navbar-item,
+ .navbar.is-dark .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-dark .navbar-start > a.navbar-item:focus, .navbar.is-dark .navbar-start > a.navbar-item:hover, .navbar.is-dark .navbar-start > a.navbar-item.is-active,
+ .navbar.is-dark .navbar-start .navbar-link:focus,
+ .navbar.is-dark .navbar-start .navbar-link:hover,
+ .navbar.is-dark .navbar-start .navbar-link.is-active,
+ .navbar.is-dark .navbar-end > a.navbar-item:focus,
+ .navbar.is-dark .navbar-end > a.navbar-item:hover,
+ .navbar.is-dark .navbar-end > a.navbar-item.is-active,
+ .navbar.is-dark .navbar-end .navbar-link:focus,
+ .navbar.is-dark .navbar-end .navbar-link:hover,
+ .navbar.is-dark .navbar-end .navbar-link.is-active {
+ background-color: #292929;
+ color: #fff;
+ }
+ .navbar.is-dark .navbar-start .navbar-link::after,
+ .navbar.is-dark .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #292929;
+ color: #fff;
+ }
+ .navbar.is-dark .navbar-dropdown a.navbar-item.is-active {
+ background-color: #363636;
+ color: #fff;
+ }
+}
+
+.navbar.is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.navbar.is-primary .navbar-brand > .navbar-item,
+.navbar.is-primary .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-primary .navbar-brand > a.navbar-item:focus, .navbar.is-primary .navbar-brand > a.navbar-item:hover, .navbar.is-primary .navbar-brand > a.navbar-item.is-active,
+.navbar.is-primary .navbar-brand .navbar-link:focus,
+.navbar.is-primary .navbar-brand .navbar-link:hover,
+.navbar.is-primary .navbar-brand .navbar-link.is-active {
+ background-color: #00b89c;
+ color: #fff;
+}
+
+.navbar.is-primary .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-primary .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-primary .navbar-start > .navbar-item,
+ .navbar.is-primary .navbar-start .navbar-link,
+ .navbar.is-primary .navbar-end > .navbar-item,
+ .navbar.is-primary .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-primary .navbar-start > a.navbar-item:focus, .navbar.is-primary .navbar-start > a.navbar-item:hover, .navbar.is-primary .navbar-start > a.navbar-item.is-active,
+ .navbar.is-primary .navbar-start .navbar-link:focus,
+ .navbar.is-primary .navbar-start .navbar-link:hover,
+ .navbar.is-primary .navbar-start .navbar-link.is-active,
+ .navbar.is-primary .navbar-end > a.navbar-item:focus,
+ .navbar.is-primary .navbar-end > a.navbar-item:hover,
+ .navbar.is-primary .navbar-end > a.navbar-item.is-active,
+ .navbar.is-primary .navbar-end .navbar-link:focus,
+ .navbar.is-primary .navbar-end .navbar-link:hover,
+ .navbar.is-primary .navbar-end .navbar-link.is-active {
+ background-color: #00b89c;
+ color: #fff;
+ }
+ .navbar.is-primary .navbar-start .navbar-link::after,
+ .navbar.is-primary .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #00b89c;
+ color: #fff;
+ }
+ .navbar.is-primary .navbar-dropdown a.navbar-item.is-active {
+ background-color: #00d1b2;
+ color: #fff;
+ }
+}
+
+.navbar.is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.navbar.is-link .navbar-brand > .navbar-item,
+.navbar.is-link .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-link .navbar-brand > a.navbar-item:focus, .navbar.is-link .navbar-brand > a.navbar-item:hover, .navbar.is-link .navbar-brand > a.navbar-item.is-active,
+.navbar.is-link .navbar-brand .navbar-link:focus,
+.navbar.is-link .navbar-brand .navbar-link:hover,
+.navbar.is-link .navbar-brand .navbar-link.is-active {
+ background-color: #2366d1;
+ color: #fff;
+}
+
+.navbar.is-link .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-link .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-link .navbar-start > .navbar-item,
+ .navbar.is-link .navbar-start .navbar-link,
+ .navbar.is-link .navbar-end > .navbar-item,
+ .navbar.is-link .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-link .navbar-start > a.navbar-item:focus, .navbar.is-link .navbar-start > a.navbar-item:hover, .navbar.is-link .navbar-start > a.navbar-item.is-active,
+ .navbar.is-link .navbar-start .navbar-link:focus,
+ .navbar.is-link .navbar-start .navbar-link:hover,
+ .navbar.is-link .navbar-start .navbar-link.is-active,
+ .navbar.is-link .navbar-end > a.navbar-item:focus,
+ .navbar.is-link .navbar-end > a.navbar-item:hover,
+ .navbar.is-link .navbar-end > a.navbar-item.is-active,
+ .navbar.is-link .navbar-end .navbar-link:focus,
+ .navbar.is-link .navbar-end .navbar-link:hover,
+ .navbar.is-link .navbar-end .navbar-link.is-active {
+ background-color: #2366d1;
+ color: #fff;
+ }
+ .navbar.is-link .navbar-start .navbar-link::after,
+ .navbar.is-link .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #2366d1;
+ color: #fff;
+ }
+ .navbar.is-link .navbar-dropdown a.navbar-item.is-active {
+ background-color: #3273dc;
+ color: #fff;
+ }
+}
+
+.navbar.is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.navbar.is-info .navbar-brand > .navbar-item,
+.navbar.is-info .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-info .navbar-brand > a.navbar-item:focus, .navbar.is-info .navbar-brand > a.navbar-item:hover, .navbar.is-info .navbar-brand > a.navbar-item.is-active,
+.navbar.is-info .navbar-brand .navbar-link:focus,
+.navbar.is-info .navbar-brand .navbar-link:hover,
+.navbar.is-info .navbar-brand .navbar-link.is-active {
+ background-color: #238cd1;
+ color: #fff;
+}
+
+.navbar.is-info .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-info .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-info .navbar-start > .navbar-item,
+ .navbar.is-info .navbar-start .navbar-link,
+ .navbar.is-info .navbar-end > .navbar-item,
+ .navbar.is-info .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-info .navbar-start > a.navbar-item:focus, .navbar.is-info .navbar-start > a.navbar-item:hover, .navbar.is-info .navbar-start > a.navbar-item.is-active,
+ .navbar.is-info .navbar-start .navbar-link:focus,
+ .navbar.is-info .navbar-start .navbar-link:hover,
+ .navbar.is-info .navbar-start .navbar-link.is-active,
+ .navbar.is-info .navbar-end > a.navbar-item:focus,
+ .navbar.is-info .navbar-end > a.navbar-item:hover,
+ .navbar.is-info .navbar-end > a.navbar-item.is-active,
+ .navbar.is-info .navbar-end .navbar-link:focus,
+ .navbar.is-info .navbar-end .navbar-link:hover,
+ .navbar.is-info .navbar-end .navbar-link.is-active {
+ background-color: #238cd1;
+ color: #fff;
+ }
+ .navbar.is-info .navbar-start .navbar-link::after,
+ .navbar.is-info .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #238cd1;
+ color: #fff;
+ }
+ .navbar.is-info .navbar-dropdown a.navbar-item.is-active {
+ background-color: #3298dc;
+ color: #fff;
+ }
+}
+
+.navbar.is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.navbar.is-success .navbar-brand > .navbar-item,
+.navbar.is-success .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-success .navbar-brand > a.navbar-item:focus, .navbar.is-success .navbar-brand > a.navbar-item:hover, .navbar.is-success .navbar-brand > a.navbar-item.is-active,
+.navbar.is-success .navbar-brand .navbar-link:focus,
+.navbar.is-success .navbar-brand .navbar-link:hover,
+.navbar.is-success .navbar-brand .navbar-link.is-active {
+ background-color: #3abb67;
+ color: #fff;
+}
+
+.navbar.is-success .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-success .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-success .navbar-start > .navbar-item,
+ .navbar.is-success .navbar-start .navbar-link,
+ .navbar.is-success .navbar-end > .navbar-item,
+ .navbar.is-success .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-success .navbar-start > a.navbar-item:focus, .navbar.is-success .navbar-start > a.navbar-item:hover, .navbar.is-success .navbar-start > a.navbar-item.is-active,
+ .navbar.is-success .navbar-start .navbar-link:focus,
+ .navbar.is-success .navbar-start .navbar-link:hover,
+ .navbar.is-success .navbar-start .navbar-link.is-active,
+ .navbar.is-success .navbar-end > a.navbar-item:focus,
+ .navbar.is-success .navbar-end > a.navbar-item:hover,
+ .navbar.is-success .navbar-end > a.navbar-item.is-active,
+ .navbar.is-success .navbar-end .navbar-link:focus,
+ .navbar.is-success .navbar-end .navbar-link:hover,
+ .navbar.is-success .navbar-end .navbar-link.is-active {
+ background-color: #3abb67;
+ color: #fff;
+ }
+ .navbar.is-success .navbar-start .navbar-link::after,
+ .navbar.is-success .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #3abb67;
+ color: #fff;
+ }
+ .navbar.is-success .navbar-dropdown a.navbar-item.is-active {
+ background-color: #48c774;
+ color: #fff;
+ }
+}
+
+.navbar.is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-brand > .navbar-item,
+.navbar.is-warning .navbar-brand .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-brand > a.navbar-item:focus, .navbar.is-warning .navbar-brand > a.navbar-item:hover, .navbar.is-warning .navbar-brand > a.navbar-item.is-active,
+.navbar.is-warning .navbar-brand .navbar-link:focus,
+.navbar.is-warning .navbar-brand .navbar-link:hover,
+.navbar.is-warning .navbar-brand .navbar-link.is-active {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-brand .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+}
+
+.navbar.is-warning .navbar-burger {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-warning .navbar-start > .navbar-item,
+ .navbar.is-warning .navbar-start .navbar-link,
+ .navbar.is-warning .navbar-end > .navbar-item,
+ .navbar.is-warning .navbar-end .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-start > a.navbar-item:focus, .navbar.is-warning .navbar-start > a.navbar-item:hover, .navbar.is-warning .navbar-start > a.navbar-item.is-active,
+ .navbar.is-warning .navbar-start .navbar-link:focus,
+ .navbar.is-warning .navbar-start .navbar-link:hover,
+ .navbar.is-warning .navbar-start .navbar-link.is-active,
+ .navbar.is-warning .navbar-end > a.navbar-item:focus,
+ .navbar.is-warning .navbar-end > a.navbar-item:hover,
+ .navbar.is-warning .navbar-end > a.navbar-item.is-active,
+ .navbar.is-warning .navbar-end .navbar-link:focus,
+ .navbar.is-warning .navbar-end .navbar-link:hover,
+ .navbar.is-warning .navbar-end .navbar-link.is-active {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-start .navbar-link::after,
+ .navbar.is-warning .navbar-end .navbar-link::after {
+ border-color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+ }
+ .navbar.is-warning .navbar-dropdown a.navbar-item.is-active {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+ }
+}
+
+.navbar.is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.navbar.is-danger .navbar-brand > .navbar-item,
+.navbar.is-danger .navbar-brand .navbar-link {
+ color: #fff;
+}
+
+.navbar.is-danger .navbar-brand > a.navbar-item:focus, .navbar.is-danger .navbar-brand > a.navbar-item:hover, .navbar.is-danger .navbar-brand > a.navbar-item.is-active,
+.navbar.is-danger .navbar-brand .navbar-link:focus,
+.navbar.is-danger .navbar-brand .navbar-link:hover,
+.navbar.is-danger .navbar-brand .navbar-link.is-active {
+ background-color: #ef2e55;
+ color: #fff;
+}
+
+.navbar.is-danger .navbar-brand .navbar-link::after {
+ border-color: #fff;
+}
+
+.navbar.is-danger .navbar-burger {
+ color: #fff;
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar.is-danger .navbar-start > .navbar-item,
+ .navbar.is-danger .navbar-start .navbar-link,
+ .navbar.is-danger .navbar-end > .navbar-item,
+ .navbar.is-danger .navbar-end .navbar-link {
+ color: #fff;
+ }
+ .navbar.is-danger .navbar-start > a.navbar-item:focus, .navbar.is-danger .navbar-start > a.navbar-item:hover, .navbar.is-danger .navbar-start > a.navbar-item.is-active,
+ .navbar.is-danger .navbar-start .navbar-link:focus,
+ .navbar.is-danger .navbar-start .navbar-link:hover,
+ .navbar.is-danger .navbar-start .navbar-link.is-active,
+ .navbar.is-danger .navbar-end > a.navbar-item:focus,
+ .navbar.is-danger .navbar-end > a.navbar-item:hover,
+ .navbar.is-danger .navbar-end > a.navbar-item.is-active,
+ .navbar.is-danger .navbar-end .navbar-link:focus,
+ .navbar.is-danger .navbar-end .navbar-link:hover,
+ .navbar.is-danger .navbar-end .navbar-link.is-active {
+ background-color: #ef2e55;
+ color: #fff;
+ }
+ .navbar.is-danger .navbar-start .navbar-link::after,
+ .navbar.is-danger .navbar-end .navbar-link::after {
+ border-color: #fff;
+ }
+ .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,
+ .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,
+ .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #ef2e55;
+ color: #fff;
+ }
+ .navbar.is-danger .navbar-dropdown a.navbar-item.is-active {
+ background-color: #f14668;
+ color: #fff;
+ }
+}
+
+.navbar > .container {
+ align-items: stretch;
+ display: flex;
+ min-height: 3.25rem;
+ width: 100%;
+}
+
+.navbar.has-shadow {
+ box-shadow: 0 2px 0 0 whitesmoke;
+}
+
+.navbar.is-fixed-bottom, .navbar.is-fixed-top {
+ left: 0;
+ position: fixed;
+ right: 0;
+ z-index: 30;
+}
+
+.navbar.is-fixed-bottom {
+ bottom: 0;
+}
+
+.navbar.is-fixed-bottom.has-shadow {
+ box-shadow: 0 -2px 0 0 whitesmoke;
+}
+
+.navbar.is-fixed-top {
+ top: 0;
+}
+
+html.has-navbar-fixed-top,
+body.has-navbar-fixed-top {
+ padding-top: 3.25rem;
+}
+
+html.has-navbar-fixed-bottom,
+body.has-navbar-fixed-bottom {
+ padding-bottom: 3.25rem;
+}
+
+.navbar-brand,
+.navbar-tabs {
+ align-items: stretch;
+ display: flex;
+ flex-shrink: 0;
+ min-height: 3.25rem;
+}
+
+.navbar-brand a.navbar-item:focus, .navbar-brand a.navbar-item:hover {
+ background-color: transparent;
+}
+
+.navbar-tabs {
+ -webkit-overflow-scrolling: touch;
+ max-width: 100vw;
+ overflow-x: auto;
+ overflow-y: hidden;
+}
+
+.navbar-burger {
+ color: #4a4a4a;
+ cursor: pointer;
+ display: block;
+ height: 3.25rem;
+ position: relative;
+ width: 3.25rem;
+ margin-left: auto;
+}
+
+.navbar-burger span {
+ background-color: currentColor;
+ display: block;
+ height: 1px;
+ left: calc(50% - 8px);
+ position: absolute;
+ transform-origin: center;
+ transition-duration: 86ms;
+ transition-property: background-color, opacity, transform;
+ transition-timing-function: ease-out;
+ width: 16px;
+}
+
+.navbar-burger span:nth-child(1) {
+ top: calc(50% - 6px);
+}
+
+.navbar-burger span:nth-child(2) {
+ top: calc(50% - 1px);
+}
+
+.navbar-burger span:nth-child(3) {
+ top: calc(50% + 4px);
+}
+
+.navbar-burger:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.navbar-burger.is-active span:nth-child(1) {
+ transform: translateY(5px) rotate(45deg);
+}
+
+.navbar-burger.is-active span:nth-child(2) {
+ opacity: 0;
+}
+
+.navbar-burger.is-active span:nth-child(3) {
+ transform: translateY(-5px) rotate(-45deg);
+}
+
+.navbar-menu {
+ display: none;
+}
+
+.navbar-item,
+.navbar-link {
+ color: #4a4a4a;
+ display: block;
+ line-height: 1.5;
+ padding: 0.5rem 0.75rem;
+ position: relative;
+}
+
+.navbar-item .icon:only-child,
+.navbar-link .icon:only-child {
+ margin-left: -0.25rem;
+ margin-right: -0.25rem;
+}
+
+a.navbar-item,
+.navbar-link {
+ cursor: pointer;
+}
+
+a.navbar-item:focus, a.navbar-item:focus-within, a.navbar-item:hover, a.navbar-item.is-active,
+.navbar-link:focus,
+.navbar-link:focus-within,
+.navbar-link:hover,
+.navbar-link.is-active {
+ background-color: #fafafa;
+ color: #3273dc;
+}
+
+.navbar-item {
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.navbar-item img {
+ max-height: 1.75rem;
+}
+
+.navbar-item.has-dropdown {
+ padding: 0;
+}
+
+.navbar-item.is-expanded {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.navbar-item.is-tab {
+ border-bottom: 1px solid transparent;
+ min-height: 3.25rem;
+ padding-bottom: calc(0.5rem - 1px);
+}
+
+.navbar-item.is-tab:focus, .navbar-item.is-tab:hover {
+ background-color: transparent;
+ border-bottom-color: #3273dc;
+}
+
+.navbar-item.is-tab.is-active {
+ background-color: transparent;
+ border-bottom-color: #3273dc;
+ border-bottom-style: solid;
+ border-bottom-width: 3px;
+ color: #3273dc;
+ padding-bottom: calc(0.5rem - 3px);
+}
+
+.navbar-content {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.navbar-link:not(.is-arrowless) {
+ padding-right: 2.5em;
+}
+
+.navbar-link:not(.is-arrowless)::after {
+ border-color: #3273dc;
+ margin-top: -0.375em;
+ right: 1.125em;
+}
+
+.navbar-dropdown {
+ font-size: 0.875rem;
+ padding-bottom: 0.5rem;
+ padding-top: 0.5rem;
+}
+
+.navbar-dropdown .navbar-item {
+ padding-left: 1.5rem;
+ padding-right: 1.5rem;
+}
+
+.navbar-divider {
+ background-color: whitesmoke;
+ border: none;
+ display: none;
+ height: 2px;
+ margin: 0.5rem 0;
+}
+
+@media screen and (max-width: 1023px) {
+ .navbar > .container {
+ display: block;
+ }
+ .navbar-brand .navbar-item,
+ .navbar-tabs .navbar-item {
+ align-items: center;
+ display: flex;
+ }
+ .navbar-link::after {
+ display: none;
+ }
+ .navbar-menu {
+ background-color: white;
+ box-shadow: 0 8px 16px rgba(10, 10, 10, 0.1);
+ padding: 0.5rem 0;
+ }
+ .navbar-menu.is-active {
+ display: block;
+ }
+ .navbar.is-fixed-bottom-touch, .navbar.is-fixed-top-touch {
+ left: 0;
+ position: fixed;
+ right: 0;
+ z-index: 30;
+ }
+ .navbar.is-fixed-bottom-touch {
+ bottom: 0;
+ }
+ .navbar.is-fixed-bottom-touch.has-shadow {
+ box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1);
+ }
+ .navbar.is-fixed-top-touch {
+ top: 0;
+ }
+ .navbar.is-fixed-top .navbar-menu, .navbar.is-fixed-top-touch .navbar-menu {
+ -webkit-overflow-scrolling: touch;
+ max-height: calc(100vh - 3.25rem);
+ overflow: auto;
+ }
+ html.has-navbar-fixed-top-touch,
+ body.has-navbar-fixed-top-touch {
+ padding-top: 3.25rem;
+ }
+ html.has-navbar-fixed-bottom-touch,
+ body.has-navbar-fixed-bottom-touch {
+ padding-bottom: 3.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .navbar,
+ .navbar-menu,
+ .navbar-start,
+ .navbar-end {
+ align-items: stretch;
+ display: flex;
+ }
+ .navbar {
+ min-height: 3.25rem;
+ }
+ .navbar.is-spaced {
+ padding: 1rem 2rem;
+ }
+ .navbar.is-spaced .navbar-start,
+ .navbar.is-spaced .navbar-end {
+ align-items: center;
+ }
+ .navbar.is-spaced a.navbar-item,
+ .navbar.is-spaced .navbar-link {
+ border-radius: 4px;
+ }
+ .navbar.is-transparent a.navbar-item:focus, .navbar.is-transparent a.navbar-item:hover, .navbar.is-transparent a.navbar-item.is-active,
+ .navbar.is-transparent .navbar-link:focus,
+ .navbar.is-transparent .navbar-link:hover,
+ .navbar.is-transparent .navbar-link.is-active {
+ background-color: transparent !important;
+ }
+ .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link, .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link {
+ background-color: transparent !important;
+ }
+ .navbar.is-transparent .navbar-dropdown a.navbar-item:focus, .navbar.is-transparent .navbar-dropdown a.navbar-item:hover {
+ background-color: whitesmoke;
+ color: #0a0a0a;
+ }
+ .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active {
+ background-color: whitesmoke;
+ color: #3273dc;
+ }
+ .navbar-burger {
+ display: none;
+ }
+ .navbar-item,
+ .navbar-link {
+ align-items: center;
+ display: flex;
+ }
+ .navbar-item.has-dropdown {
+ align-items: stretch;
+ }
+ .navbar-item.has-dropdown-up .navbar-link::after {
+ transform: rotate(135deg) translate(0.25em, -0.25em);
+ }
+ .navbar-item.has-dropdown-up .navbar-dropdown {
+ border-bottom: 2px solid #dbdbdb;
+ border-radius: 6px 6px 0 0;
+ border-top: none;
+ bottom: 100%;
+ box-shadow: 0 -8px 8px rgba(10, 10, 10, 0.1);
+ top: auto;
+ }
+ .navbar-item.is-active .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown {
+ display: block;
+ }
+ .navbar.is-spaced .navbar-item.is-active .navbar-dropdown, .navbar-item.is-active .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown, .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown, .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed, .navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown, .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed {
+ opacity: 1;
+ pointer-events: auto;
+ transform: translateY(0);
+ }
+ .navbar-menu {
+ flex-grow: 1;
+ flex-shrink: 0;
+ }
+ .navbar-start {
+ justify-content: flex-start;
+ margin-right: auto;
+ }
+ .navbar-end {
+ justify-content: flex-end;
+ margin-left: auto;
+ }
+ .navbar-dropdown {
+ background-color: white;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+ border-top: 2px solid #dbdbdb;
+ box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1);
+ display: none;
+ font-size: 0.875rem;
+ left: 0;
+ min-width: 100%;
+ position: absolute;
+ top: 100%;
+ z-index: 20;
+ }
+ .navbar-dropdown .navbar-item {
+ padding: 0.375rem 1rem;
+ white-space: nowrap;
+ }
+ .navbar-dropdown a.navbar-item {
+ padding-right: 3rem;
+ }
+ .navbar-dropdown a.navbar-item:focus, .navbar-dropdown a.navbar-item:hover {
+ background-color: whitesmoke;
+ color: #0a0a0a;
+ }
+ .navbar-dropdown a.navbar-item.is-active {
+ background-color: whitesmoke;
+ color: #3273dc;
+ }
+ .navbar.is-spaced .navbar-dropdown, .navbar-dropdown.is-boxed {
+ border-radius: 6px;
+ border-top: none;
+ box-shadow: 0 8px 8px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
+ display: block;
+ opacity: 0;
+ pointer-events: none;
+ top: calc(100% + (-4px));
+ transform: translateY(-5px);
+ transition-duration: 86ms;
+ transition-property: opacity, transform;
+ }
+ .navbar-dropdown.is-right {
+ left: auto;
+ right: 0;
+ }
+ .navbar-divider {
+ display: block;
+ }
+ .navbar > .container .navbar-brand,
+ .container > .navbar .navbar-brand {
+ margin-left: -0.75rem;
+ }
+ .navbar > .container .navbar-menu,
+ .container > .navbar .navbar-menu {
+ margin-right: -0.75rem;
+ }
+ .navbar.is-fixed-bottom-desktop, .navbar.is-fixed-top-desktop {
+ left: 0;
+ position: fixed;
+ right: 0;
+ z-index: 30;
+ }
+ .navbar.is-fixed-bottom-desktop {
+ bottom: 0;
+ }
+ .navbar.is-fixed-bottom-desktop.has-shadow {
+ box-shadow: 0 -2px 3px rgba(10, 10, 10, 0.1);
+ }
+ .navbar.is-fixed-top-desktop {
+ top: 0;
+ }
+ html.has-navbar-fixed-top-desktop,
+ body.has-navbar-fixed-top-desktop {
+ padding-top: 3.25rem;
+ }
+ html.has-navbar-fixed-bottom-desktop,
+ body.has-navbar-fixed-bottom-desktop {
+ padding-bottom: 3.25rem;
+ }
+ html.has-spaced-navbar-fixed-top,
+ body.has-spaced-navbar-fixed-top {
+ padding-top: 5.25rem;
+ }
+ html.has-spaced-navbar-fixed-bottom,
+ body.has-spaced-navbar-fixed-bottom {
+ padding-bottom: 5.25rem;
+ }
+ a.navbar-item.is-active,
+ .navbar-link.is-active {
+ color: #0a0a0a;
+ }
+ a.navbar-item.is-active:not(:focus):not(:hover),
+ .navbar-link.is-active:not(:focus):not(:hover) {
+ background-color: transparent;
+ }
+ .navbar-item.has-dropdown:focus .navbar-link, .navbar-item.has-dropdown:hover .navbar-link, .navbar-item.has-dropdown.is-active .navbar-link {
+ background-color: #fafafa;
+ }
+}
+
+.hero.is-fullheight-with-navbar {
+ min-height: calc(100vh - 3.25rem);
+}
+
+.pagination {
+ font-size: 1rem;
+ margin: -0.25rem;
+}
+
+.pagination.is-small {
+ font-size: 0.75rem;
+}
+
+.pagination.is-medium {
+ font-size: 1.25rem;
+}
+
+.pagination.is-large {
+ font-size: 1.5rem;
+}
+
+.pagination.is-rounded .pagination-previous,
+.pagination.is-rounded .pagination-next {
+ padding-left: 1em;
+ padding-right: 1em;
+ border-radius: 290486px;
+}
+
+.pagination.is-rounded .pagination-link {
+ border-radius: 290486px;
+}
+
+.pagination,
+.pagination-list {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ text-align: center;
+}
+
+.pagination-previous,
+.pagination-next,
+.pagination-link,
+.pagination-ellipsis {
+ font-size: 1em;
+ justify-content: center;
+ margin: 0.25rem;
+ padding-left: 0.5em;
+ padding-right: 0.5em;
+ text-align: center;
+}
+
+.pagination-previous,
+.pagination-next,
+.pagination-link {
+ border-color: #dbdbdb;
+ color: #363636;
+ min-width: 2.5em;
+}
+
+.pagination-previous:hover,
+.pagination-next:hover,
+.pagination-link:hover {
+ border-color: #b5b5b5;
+ color: #363636;
+}
+
+.pagination-previous:focus,
+.pagination-next:focus,
+.pagination-link:focus {
+ border-color: #3273dc;
+}
+
+.pagination-previous:active,
+.pagination-next:active,
+.pagination-link:active {
+ box-shadow: inset 0 1px 2px rgba(10, 10, 10, 0.2);
+}
+
+.pagination-previous[disabled],
+.pagination-next[disabled],
+.pagination-link[disabled] {
+ background-color: #dbdbdb;
+ border-color: #dbdbdb;
+ box-shadow: none;
+ color: #7a7a7a;
+ opacity: 0.5;
+}
+
+.pagination-previous,
+.pagination-next {
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+ white-space: nowrap;
+}
+
+.pagination-link.is-current {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+}
+
+.pagination-ellipsis {
+ color: #b5b5b5;
+ pointer-events: none;
+}
+
+.pagination-list {
+ flex-wrap: wrap;
+}
+
+@media screen and (max-width: 768px) {
+ .pagination {
+ flex-wrap: wrap;
+ }
+ .pagination-previous,
+ .pagination-next {
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ .pagination-list li {
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .pagination-list {
+ flex-grow: 1;
+ flex-shrink: 1;
+ justify-content: flex-start;
+ order: 1;
+ }
+ .pagination-previous {
+ order: 2;
+ }
+ .pagination-next {
+ order: 3;
+ }
+ .pagination {
+ justify-content: space-between;
+ }
+ .pagination.is-centered .pagination-previous {
+ order: 1;
+ }
+ .pagination.is-centered .pagination-list {
+ justify-content: center;
+ order: 2;
+ }
+ .pagination.is-centered .pagination-next {
+ order: 3;
+ }
+ .pagination.is-right .pagination-previous {
+ order: 1;
+ }
+ .pagination.is-right .pagination-next {
+ order: 2;
+ }
+ .pagination.is-right .pagination-list {
+ justify-content: flex-end;
+ order: 3;
+ }
+}
+
+.panel {
+ border-radius: 6px;
+ box-shadow: 0 0.5em 1em -0.125em rgba(10, 10, 10, 0.1), 0 0px 0 1px rgba(10, 10, 10, 0.02);
+ font-size: 1rem;
+}
+
+.panel:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.panel.is-white .panel-heading {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.panel.is-white .panel-tabs a.is-active {
+ border-bottom-color: white;
+}
+
+.panel.is-white .panel-block.is-active .panel-icon {
+ color: white;
+}
+
+.panel.is-black .panel-heading {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.panel.is-black .panel-tabs a.is-active {
+ border-bottom-color: #0a0a0a;
+}
+
+.panel.is-black .panel-block.is-active .panel-icon {
+ color: #0a0a0a;
+}
+
+.panel.is-light .panel-heading {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.panel.is-light .panel-tabs a.is-active {
+ border-bottom-color: whitesmoke;
+}
+
+.panel.is-light .panel-block.is-active .panel-icon {
+ color: whitesmoke;
+}
+
+.panel.is-dark .panel-heading {
+ background-color: #363636;
+ color: #fff;
+}
+
+.panel.is-dark .panel-tabs a.is-active {
+ border-bottom-color: #363636;
+}
+
+.panel.is-dark .panel-block.is-active .panel-icon {
+ color: #363636;
+}
+
+.panel.is-primary .panel-heading {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.panel.is-primary .panel-tabs a.is-active {
+ border-bottom-color: #00d1b2;
+}
+
+.panel.is-primary .panel-block.is-active .panel-icon {
+ color: #00d1b2;
+}
+
+.panel.is-link .panel-heading {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.panel.is-link .panel-tabs a.is-active {
+ border-bottom-color: #3273dc;
+}
+
+.panel.is-link .panel-block.is-active .panel-icon {
+ color: #3273dc;
+}
+
+.panel.is-info .panel-heading {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.panel.is-info .panel-tabs a.is-active {
+ border-bottom-color: #3298dc;
+}
+
+.panel.is-info .panel-block.is-active .panel-icon {
+ color: #3298dc;
+}
+
+.panel.is-success .panel-heading {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.panel.is-success .panel-tabs a.is-active {
+ border-bottom-color: #48c774;
+}
+
+.panel.is-success .panel-block.is-active .panel-icon {
+ color: #48c774;
+}
+
+.panel.is-warning .panel-heading {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.panel.is-warning .panel-tabs a.is-active {
+ border-bottom-color: #ffdd57;
+}
+
+.panel.is-warning .panel-block.is-active .panel-icon {
+ color: #ffdd57;
+}
+
+.panel.is-danger .panel-heading {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.panel.is-danger .panel-tabs a.is-active {
+ border-bottom-color: #f14668;
+}
+
+.panel.is-danger .panel-block.is-active .panel-icon {
+ color: #f14668;
+}
+
+.panel-tabs:not(:last-child),
+.panel-block:not(:last-child) {
+ border-bottom: 1px solid #ededed;
+}
+
+.panel-heading {
+ background-color: #ededed;
+ border-radius: 6px 6px 0 0;
+ color: #363636;
+ font-size: 1.25em;
+ font-weight: 700;
+ line-height: 1.25;
+ padding: 0.75em 1em;
+}
+
+.panel-tabs {
+ align-items: flex-end;
+ display: flex;
+ font-size: 0.875em;
+ justify-content: center;
+}
+
+.panel-tabs a {
+ border-bottom: 1px solid #dbdbdb;
+ margin-bottom: -1px;
+ padding: 0.5em;
+}
+
+.panel-tabs a.is-active {
+ border-bottom-color: #4a4a4a;
+ color: #363636;
+}
+
+.panel-list a {
+ color: #4a4a4a;
+}
+
+.panel-list a:hover {
+ color: #3273dc;
+}
+
+.panel-block {
+ align-items: center;
+ color: #363636;
+ display: flex;
+ justify-content: flex-start;
+ padding: 0.5em 0.75em;
+}
+
+.panel-block input[type="checkbox"] {
+ margin-right: 0.75em;
+}
+
+.panel-block > .control {
+ flex-grow: 1;
+ flex-shrink: 1;
+ width: 100%;
+}
+
+.panel-block.is-wrapped {
+ flex-wrap: wrap;
+}
+
+.panel-block.is-active {
+ border-left-color: #3273dc;
+ color: #363636;
+}
+
+.panel-block.is-active .panel-icon {
+ color: #3273dc;
+}
+
+.panel-block:last-child {
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+a.panel-block,
+label.panel-block {
+ cursor: pointer;
+}
+
+a.panel-block:hover,
+label.panel-block:hover {
+ background-color: whitesmoke;
+}
+
+.panel-icon {
+ display: inline-block;
+ font-size: 14px;
+ height: 1em;
+ line-height: 1em;
+ text-align: center;
+ vertical-align: top;
+ width: 1em;
+ color: #7a7a7a;
+ margin-right: 0.75em;
+}
+
+.panel-icon .fa {
+ font-size: inherit;
+ line-height: inherit;
+}
+
+.tabs {
+ -webkit-overflow-scrolling: touch;
+ align-items: stretch;
+ display: flex;
+ font-size: 1rem;
+ justify-content: space-between;
+ overflow: hidden;
+ overflow-x: auto;
+ white-space: nowrap;
+}
+
+.tabs a {
+ align-items: center;
+ border-bottom-color: #dbdbdb;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ color: #4a4a4a;
+ display: flex;
+ justify-content: center;
+ margin-bottom: -1px;
+ padding: 0.5em 1em;
+ vertical-align: top;
+}
+
+.tabs a:hover {
+ border-bottom-color: #363636;
+ color: #363636;
+}
+
+.tabs li {
+ display: block;
+}
+
+.tabs li.is-active a {
+ border-bottom-color: #3273dc;
+ color: #3273dc;
+}
+
+.tabs ul {
+ align-items: center;
+ border-bottom-color: #dbdbdb;
+ border-bottom-style: solid;
+ border-bottom-width: 1px;
+ display: flex;
+ flex-grow: 1;
+ flex-shrink: 0;
+ justify-content: flex-start;
+}
+
+.tabs ul.is-left {
+ padding-right: 0.75em;
+}
+
+.tabs ul.is-center {
+ flex: none;
+ justify-content: center;
+ padding-left: 0.75em;
+ padding-right: 0.75em;
+}
+
+.tabs ul.is-right {
+ justify-content: flex-end;
+ padding-left: 0.75em;
+}
+
+.tabs .icon:first-child {
+ margin-right: 0.5em;
+}
+
+.tabs .icon:last-child {
+ margin-left: 0.5em;
+}
+
+.tabs.is-centered ul {
+ justify-content: center;
+}
+
+.tabs.is-right ul {
+ justify-content: flex-end;
+}
+
+.tabs.is-boxed a {
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+
+.tabs.is-boxed a:hover {
+ background-color: whitesmoke;
+ border-bottom-color: #dbdbdb;
+}
+
+.tabs.is-boxed li.is-active a {
+ background-color: white;
+ border-color: #dbdbdb;
+ border-bottom-color: transparent !important;
+}
+
+.tabs.is-fullwidth li {
+ flex-grow: 1;
+ flex-shrink: 0;
+}
+
+.tabs.is-toggle a {
+ border-color: #dbdbdb;
+ border-style: solid;
+ border-width: 1px;
+ margin-bottom: 0;
+ position: relative;
+}
+
+.tabs.is-toggle a:hover {
+ background-color: whitesmoke;
+ border-color: #b5b5b5;
+ z-index: 2;
+}
+
+.tabs.is-toggle li + li {
+ margin-left: -1px;
+}
+
+.tabs.is-toggle li:first-child a {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+
+.tabs.is-toggle li:last-child a {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.tabs.is-toggle li.is-active a {
+ background-color: #3273dc;
+ border-color: #3273dc;
+ color: #fff;
+ z-index: 1;
+}
+
+.tabs.is-toggle ul {
+ border-bottom: none;
+}
+
+.tabs.is-toggle.is-toggle-rounded li:first-child a {
+ border-bottom-left-radius: 290486px;
+ border-top-left-radius: 290486px;
+ padding-left: 1.25em;
+}
+
+.tabs.is-toggle.is-toggle-rounded li:last-child a {
+ border-bottom-right-radius: 290486px;
+ border-top-right-radius: 290486px;
+ padding-right: 1.25em;
+}
+
+.tabs.is-small {
+ font-size: 0.75rem;
+}
+
+.tabs.is-medium {
+ font-size: 1.25rem;
+}
+
+.tabs.is-large {
+ font-size: 1.5rem;
+}
+
+/* Bulma Grid */
+.column {
+ display: block;
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 1;
+ padding: 0.75rem;
+}
+
+.columns.is-mobile > .column.is-narrow {
+ flex: none;
+}
+
+.columns.is-mobile > .column.is-full {
+ flex: none;
+ width: 100%;
+}
+
+.columns.is-mobile > .column.is-three-quarters {
+ flex: none;
+ width: 75%;
+}
+
+.columns.is-mobile > .column.is-two-thirds {
+ flex: none;
+ width: 66.6666%;
+}
+
+.columns.is-mobile > .column.is-half {
+ flex: none;
+ width: 50%;
+}
+
+.columns.is-mobile > .column.is-one-third {
+ flex: none;
+ width: 33.3333%;
+}
+
+.columns.is-mobile > .column.is-one-quarter {
+ flex: none;
+ width: 25%;
+}
+
+.columns.is-mobile > .column.is-one-fifth {
+ flex: none;
+ width: 20%;
+}
+
+.columns.is-mobile > .column.is-two-fifths {
+ flex: none;
+ width: 40%;
+}
+
+.columns.is-mobile > .column.is-three-fifths {
+ flex: none;
+ width: 60%;
+}
+
+.columns.is-mobile > .column.is-four-fifths {
+ flex: none;
+ width: 80%;
+}
+
+.columns.is-mobile > .column.is-offset-three-quarters {
+ margin-left: 75%;
+}
+
+.columns.is-mobile > .column.is-offset-two-thirds {
+ margin-left: 66.6666%;
+}
+
+.columns.is-mobile > .column.is-offset-half {
+ margin-left: 50%;
+}
+
+.columns.is-mobile > .column.is-offset-one-third {
+ margin-left: 33.3333%;
+}
+
+.columns.is-mobile > .column.is-offset-one-quarter {
+ margin-left: 25%;
+}
+
+.columns.is-mobile > .column.is-offset-one-fifth {
+ margin-left: 20%;
+}
+
+.columns.is-mobile > .column.is-offset-two-fifths {
+ margin-left: 40%;
+}
+
+.columns.is-mobile > .column.is-offset-three-fifths {
+ margin-left: 60%;
+}
+
+.columns.is-mobile > .column.is-offset-four-fifths {
+ margin-left: 80%;
+}
+
+.columns.is-mobile > .column.is-0 {
+ flex: none;
+ width: 0%;
+}
+
+.columns.is-mobile > .column.is-offset-0 {
+ margin-left: 0%;
+}
+
+.columns.is-mobile > .column.is-1 {
+ flex: none;
+ width: 8.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-1 {
+ margin-left: 8.33333%;
+}
+
+.columns.is-mobile > .column.is-2 {
+ flex: none;
+ width: 16.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-2 {
+ margin-left: 16.66667%;
+}
+
+.columns.is-mobile > .column.is-3 {
+ flex: none;
+ width: 25%;
+}
+
+.columns.is-mobile > .column.is-offset-3 {
+ margin-left: 25%;
+}
+
+.columns.is-mobile > .column.is-4 {
+ flex: none;
+ width: 33.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-4 {
+ margin-left: 33.33333%;
+}
+
+.columns.is-mobile > .column.is-5 {
+ flex: none;
+ width: 41.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-5 {
+ margin-left: 41.66667%;
+}
+
+.columns.is-mobile > .column.is-6 {
+ flex: none;
+ width: 50%;
+}
+
+.columns.is-mobile > .column.is-offset-6 {
+ margin-left: 50%;
+}
+
+.columns.is-mobile > .column.is-7 {
+ flex: none;
+ width: 58.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-7 {
+ margin-left: 58.33333%;
+}
+
+.columns.is-mobile > .column.is-8 {
+ flex: none;
+ width: 66.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-8 {
+ margin-left: 66.66667%;
+}
+
+.columns.is-mobile > .column.is-9 {
+ flex: none;
+ width: 75%;
+}
+
+.columns.is-mobile > .column.is-offset-9 {
+ margin-left: 75%;
+}
+
+.columns.is-mobile > .column.is-10 {
+ flex: none;
+ width: 83.33333%;
+}
+
+.columns.is-mobile > .column.is-offset-10 {
+ margin-left: 83.33333%;
+}
+
+.columns.is-mobile > .column.is-11 {
+ flex: none;
+ width: 91.66667%;
+}
+
+.columns.is-mobile > .column.is-offset-11 {
+ margin-left: 91.66667%;
+}
+
+.columns.is-mobile > .column.is-12 {
+ flex: none;
+ width: 100%;
+}
+
+.columns.is-mobile > .column.is-offset-12 {
+ margin-left: 100%;
+}
+
+@media screen and (max-width: 768px) {
+ .column.is-narrow-mobile {
+ flex: none;
+ }
+ .column.is-full-mobile {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-mobile {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-mobile {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-mobile {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-mobile {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-mobile {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-mobile {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-mobile {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-mobile {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-mobile {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-mobile {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-mobile {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-mobile {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-mobile {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-mobile {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-mobile {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-mobile {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-mobile {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-mobile {
+ margin-left: 80%;
+ }
+ .column.is-0-mobile {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-mobile {
+ margin-left: 0%;
+ }
+ .column.is-1-mobile {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-mobile {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-mobile {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-mobile {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-mobile {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-mobile {
+ margin-left: 25%;
+ }
+ .column.is-4-mobile {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-mobile {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-mobile {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-mobile {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-mobile {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-mobile {
+ margin-left: 50%;
+ }
+ .column.is-7-mobile {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-mobile {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-mobile {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-mobile {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-mobile {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-mobile {
+ margin-left: 75%;
+ }
+ .column.is-10-mobile {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-mobile {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-mobile {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-mobile {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-mobile {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-mobile {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .column.is-narrow, .column.is-narrow-tablet {
+ flex: none;
+ }
+ .column.is-full, .column.is-full-tablet {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters, .column.is-three-quarters-tablet {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds, .column.is-two-thirds-tablet {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half, .column.is-half-tablet {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third, .column.is-one-third-tablet {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter, .column.is-one-quarter-tablet {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth, .column.is-one-fifth-tablet {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths, .column.is-two-fifths-tablet {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths, .column.is-three-fifths-tablet {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths, .column.is-four-fifths-tablet {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters, .column.is-offset-three-quarters-tablet {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds, .column.is-offset-two-thirds-tablet {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half, .column.is-offset-half-tablet {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third, .column.is-offset-one-third-tablet {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter, .column.is-offset-one-quarter-tablet {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth, .column.is-offset-one-fifth-tablet {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths, .column.is-offset-two-fifths-tablet {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths, .column.is-offset-three-fifths-tablet {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths, .column.is-offset-four-fifths-tablet {
+ margin-left: 80%;
+ }
+ .column.is-0, .column.is-0-tablet {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0, .column.is-offset-0-tablet {
+ margin-left: 0%;
+ }
+ .column.is-1, .column.is-1-tablet {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1, .column.is-offset-1-tablet {
+ margin-left: 8.33333%;
+ }
+ .column.is-2, .column.is-2-tablet {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2, .column.is-offset-2-tablet {
+ margin-left: 16.66667%;
+ }
+ .column.is-3, .column.is-3-tablet {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3, .column.is-offset-3-tablet {
+ margin-left: 25%;
+ }
+ .column.is-4, .column.is-4-tablet {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4, .column.is-offset-4-tablet {
+ margin-left: 33.33333%;
+ }
+ .column.is-5, .column.is-5-tablet {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5, .column.is-offset-5-tablet {
+ margin-left: 41.66667%;
+ }
+ .column.is-6, .column.is-6-tablet {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6, .column.is-offset-6-tablet {
+ margin-left: 50%;
+ }
+ .column.is-7, .column.is-7-tablet {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7, .column.is-offset-7-tablet {
+ margin-left: 58.33333%;
+ }
+ .column.is-8, .column.is-8-tablet {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8, .column.is-offset-8-tablet {
+ margin-left: 66.66667%;
+ }
+ .column.is-9, .column.is-9-tablet {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9, .column.is-offset-9-tablet {
+ margin-left: 75%;
+ }
+ .column.is-10, .column.is-10-tablet {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10, .column.is-offset-10-tablet {
+ margin-left: 83.33333%;
+ }
+ .column.is-11, .column.is-11-tablet {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11, .column.is-offset-11-tablet {
+ margin-left: 91.66667%;
+ }
+ .column.is-12, .column.is-12-tablet {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12, .column.is-offset-12-tablet {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .column.is-narrow-touch {
+ flex: none;
+ }
+ .column.is-full-touch {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-touch {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-touch {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-touch {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-touch {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-touch {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-touch {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-touch {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-touch {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-touch {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-touch {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-touch {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-touch {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-touch {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-touch {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-touch {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-touch {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-touch {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-touch {
+ margin-left: 80%;
+ }
+ .column.is-0-touch {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-touch {
+ margin-left: 0%;
+ }
+ .column.is-1-touch {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-touch {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-touch {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-touch {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-touch {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-touch {
+ margin-left: 25%;
+ }
+ .column.is-4-touch {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-touch {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-touch {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-touch {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-touch {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-touch {
+ margin-left: 50%;
+ }
+ .column.is-7-touch {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-touch {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-touch {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-touch {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-touch {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-touch {
+ margin-left: 75%;
+ }
+ .column.is-10-touch {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-touch {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-touch {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-touch {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-touch {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-touch {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .column.is-narrow-desktop {
+ flex: none;
+ }
+ .column.is-full-desktop {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-desktop {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-desktop {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-desktop {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-desktop {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-desktop {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-desktop {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-desktop {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-desktop {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-desktop {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-desktop {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-desktop {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-desktop {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-desktop {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-desktop {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-desktop {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-desktop {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-desktop {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-desktop {
+ margin-left: 80%;
+ }
+ .column.is-0-desktop {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-desktop {
+ margin-left: 0%;
+ }
+ .column.is-1-desktop {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-desktop {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-desktop {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-desktop {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-desktop {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-desktop {
+ margin-left: 25%;
+ }
+ .column.is-4-desktop {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-desktop {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-desktop {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-desktop {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-desktop {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-desktop {
+ margin-left: 50%;
+ }
+ .column.is-7-desktop {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-desktop {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-desktop {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-desktop {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-desktop {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-desktop {
+ margin-left: 75%;
+ }
+ .column.is-10-desktop {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-desktop {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-desktop {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-desktop {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-desktop {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-desktop {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .column.is-narrow-widescreen {
+ flex: none;
+ }
+ .column.is-full-widescreen {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-widescreen {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-widescreen {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-widescreen {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-widescreen {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-widescreen {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-widescreen {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-widescreen {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-widescreen {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-widescreen {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-widescreen {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-widescreen {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-widescreen {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-widescreen {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-widescreen {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-widescreen {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-widescreen {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-widescreen {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-widescreen {
+ margin-left: 80%;
+ }
+ .column.is-0-widescreen {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-widescreen {
+ margin-left: 0%;
+ }
+ .column.is-1-widescreen {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-widescreen {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-widescreen {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-widescreen {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-widescreen {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-widescreen {
+ margin-left: 25%;
+ }
+ .column.is-4-widescreen {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-widescreen {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-widescreen {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-widescreen {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-widescreen {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-widescreen {
+ margin-left: 50%;
+ }
+ .column.is-7-widescreen {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-widescreen {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-widescreen {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-widescreen {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-widescreen {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-widescreen {
+ margin-left: 75%;
+ }
+ .column.is-10-widescreen {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-widescreen {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-widescreen {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-widescreen {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-widescreen {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-widescreen {
+ margin-left: 100%;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .column.is-narrow-fullhd {
+ flex: none;
+ }
+ .column.is-full-fullhd {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-three-quarters-fullhd {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-two-thirds-fullhd {
+ flex: none;
+ width: 66.6666%;
+ }
+ .column.is-half-fullhd {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-one-third-fullhd {
+ flex: none;
+ width: 33.3333%;
+ }
+ .column.is-one-quarter-fullhd {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-one-fifth-fullhd {
+ flex: none;
+ width: 20%;
+ }
+ .column.is-two-fifths-fullhd {
+ flex: none;
+ width: 40%;
+ }
+ .column.is-three-fifths-fullhd {
+ flex: none;
+ width: 60%;
+ }
+ .column.is-four-fifths-fullhd {
+ flex: none;
+ width: 80%;
+ }
+ .column.is-offset-three-quarters-fullhd {
+ margin-left: 75%;
+ }
+ .column.is-offset-two-thirds-fullhd {
+ margin-left: 66.6666%;
+ }
+ .column.is-offset-half-fullhd {
+ margin-left: 50%;
+ }
+ .column.is-offset-one-third-fullhd {
+ margin-left: 33.3333%;
+ }
+ .column.is-offset-one-quarter-fullhd {
+ margin-left: 25%;
+ }
+ .column.is-offset-one-fifth-fullhd {
+ margin-left: 20%;
+ }
+ .column.is-offset-two-fifths-fullhd {
+ margin-left: 40%;
+ }
+ .column.is-offset-three-fifths-fullhd {
+ margin-left: 60%;
+ }
+ .column.is-offset-four-fifths-fullhd {
+ margin-left: 80%;
+ }
+ .column.is-0-fullhd {
+ flex: none;
+ width: 0%;
+ }
+ .column.is-offset-0-fullhd {
+ margin-left: 0%;
+ }
+ .column.is-1-fullhd {
+ flex: none;
+ width: 8.33333%;
+ }
+ .column.is-offset-1-fullhd {
+ margin-left: 8.33333%;
+ }
+ .column.is-2-fullhd {
+ flex: none;
+ width: 16.66667%;
+ }
+ .column.is-offset-2-fullhd {
+ margin-left: 16.66667%;
+ }
+ .column.is-3-fullhd {
+ flex: none;
+ width: 25%;
+ }
+ .column.is-offset-3-fullhd {
+ margin-left: 25%;
+ }
+ .column.is-4-fullhd {
+ flex: none;
+ width: 33.33333%;
+ }
+ .column.is-offset-4-fullhd {
+ margin-left: 33.33333%;
+ }
+ .column.is-5-fullhd {
+ flex: none;
+ width: 41.66667%;
+ }
+ .column.is-offset-5-fullhd {
+ margin-left: 41.66667%;
+ }
+ .column.is-6-fullhd {
+ flex: none;
+ width: 50%;
+ }
+ .column.is-offset-6-fullhd {
+ margin-left: 50%;
+ }
+ .column.is-7-fullhd {
+ flex: none;
+ width: 58.33333%;
+ }
+ .column.is-offset-7-fullhd {
+ margin-left: 58.33333%;
+ }
+ .column.is-8-fullhd {
+ flex: none;
+ width: 66.66667%;
+ }
+ .column.is-offset-8-fullhd {
+ margin-left: 66.66667%;
+ }
+ .column.is-9-fullhd {
+ flex: none;
+ width: 75%;
+ }
+ .column.is-offset-9-fullhd {
+ margin-left: 75%;
+ }
+ .column.is-10-fullhd {
+ flex: none;
+ width: 83.33333%;
+ }
+ .column.is-offset-10-fullhd {
+ margin-left: 83.33333%;
+ }
+ .column.is-11-fullhd {
+ flex: none;
+ width: 91.66667%;
+ }
+ .column.is-offset-11-fullhd {
+ margin-left: 91.66667%;
+ }
+ .column.is-12-fullhd {
+ flex: none;
+ width: 100%;
+ }
+ .column.is-offset-12-fullhd {
+ margin-left: 100%;
+ }
+}
+
+.columns {
+ margin-left: -0.75rem;
+ margin-right: -0.75rem;
+ margin-top: -0.75rem;
+}
+
+.columns:last-child {
+ margin-bottom: -0.75rem;
+}
+
+.columns:not(:last-child) {
+ margin-bottom: calc(1.5rem - 0.75rem);
+}
+
+.columns.is-centered {
+ justify-content: center;
+}
+
+.columns.is-gapless {
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+}
+
+.columns.is-gapless > .column {
+ margin: 0;
+ padding: 0 !important;
+}
+
+.columns.is-gapless:not(:last-child) {
+ margin-bottom: 1.5rem;
+}
+
+.columns.is-gapless:last-child {
+ margin-bottom: 0;
+}
+
+.columns.is-mobile {
+ display: flex;
+}
+
+.columns.is-multiline {
+ flex-wrap: wrap;
+}
+
+.columns.is-vcentered {
+ align-items: center;
+}
+
+@media screen and (min-width: 769px), print {
+ .columns:not(.is-desktop) {
+ display: flex;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-desktop {
+ display: flex;
+ }
+}
+
+.columns.is-variable {
+ --columnGap: 0.75rem;
+ margin-left: calc(-1 * var(--columnGap));
+ margin-right: calc(-1 * var(--columnGap));
+}
+
+.columns.is-variable .column {
+ padding-left: var(--columnGap);
+ padding-right: var(--columnGap);
+}
+
+.columns.is-variable.is-0 {
+ --columnGap: 0rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-0-mobile {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-0-tablet {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-0-tablet-only {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-0-touch {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-0-desktop {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-0-desktop-only {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-0-widescreen {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-0-widescreen-only {
+ --columnGap: 0rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-0-fullhd {
+ --columnGap: 0rem;
+ }
+}
+
+.columns.is-variable.is-1 {
+ --columnGap: 0.25rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-1-mobile {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-1-tablet {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-1-tablet-only {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-1-touch {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-1-desktop {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-1-desktop-only {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-1-widescreen {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-1-widescreen-only {
+ --columnGap: 0.25rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-1-fullhd {
+ --columnGap: 0.25rem;
+ }
+}
+
+.columns.is-variable.is-2 {
+ --columnGap: 0.5rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-2-mobile {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-2-tablet {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-2-tablet-only {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-2-touch {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-2-desktop {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-2-desktop-only {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-2-widescreen {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-2-widescreen-only {
+ --columnGap: 0.5rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-2-fullhd {
+ --columnGap: 0.5rem;
+ }
+}
+
+.columns.is-variable.is-3 {
+ --columnGap: 0.75rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-3-mobile {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-3-tablet {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-3-tablet-only {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-3-touch {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-3-desktop {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-3-desktop-only {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-3-widescreen {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-3-widescreen-only {
+ --columnGap: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-3-fullhd {
+ --columnGap: 0.75rem;
+ }
+}
+
+.columns.is-variable.is-4 {
+ --columnGap: 1rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-4-mobile {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-4-tablet {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-4-tablet-only {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-4-touch {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-4-desktop {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-4-desktop-only {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-4-widescreen {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-4-widescreen-only {
+ --columnGap: 1rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-4-fullhd {
+ --columnGap: 1rem;
+ }
+}
+
+.columns.is-variable.is-5 {
+ --columnGap: 1.25rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-5-mobile {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-5-tablet {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-5-tablet-only {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-5-touch {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-5-desktop {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-5-desktop-only {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-5-widescreen {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-5-widescreen-only {
+ --columnGap: 1.25rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-5-fullhd {
+ --columnGap: 1.25rem;
+ }
+}
+
+.columns.is-variable.is-6 {
+ --columnGap: 1.5rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-6-mobile {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-6-tablet {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-6-tablet-only {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-6-touch {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-6-desktop {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-6-desktop-only {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-6-widescreen {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-6-widescreen-only {
+ --columnGap: 1.5rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-6-fullhd {
+ --columnGap: 1.5rem;
+ }
+}
+
+.columns.is-variable.is-7 {
+ --columnGap: 1.75rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-7-mobile {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-7-tablet {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-7-tablet-only {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-7-touch {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-7-desktop {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-7-desktop-only {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-7-widescreen {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-7-widescreen-only {
+ --columnGap: 1.75rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-7-fullhd {
+ --columnGap: 1.75rem;
+ }
+}
+
+.columns.is-variable.is-8 {
+ --columnGap: 2rem;
+}
+
+@media screen and (max-width: 768px) {
+ .columns.is-variable.is-8-mobile {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .columns.is-variable.is-8-tablet {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .columns.is-variable.is-8-tablet-only {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .columns.is-variable.is-8-touch {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .columns.is-variable.is-8-desktop {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .columns.is-variable.is-8-desktop-only {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .columns.is-variable.is-8-widescreen {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .columns.is-variable.is-8-widescreen-only {
+ --columnGap: 2rem;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .columns.is-variable.is-8-fullhd {
+ --columnGap: 2rem;
+ }
+}
+
+.tile {
+ align-items: stretch;
+ display: block;
+ flex-basis: 0;
+ flex-grow: 1;
+ flex-shrink: 1;
+ min-height: -webkit-min-content;
+ min-height: -moz-min-content;
+ min-height: min-content;
+}
+
+.tile.is-ancestor {
+ margin-left: -0.75rem;
+ margin-right: -0.75rem;
+ margin-top: -0.75rem;
+}
+
+.tile.is-ancestor:last-child {
+ margin-bottom: -0.75rem;
+}
+
+.tile.is-ancestor:not(:last-child) {
+ margin-bottom: 0.75rem;
+}
+
+.tile.is-child {
+ margin: 0 !important;
+}
+
+.tile.is-parent {
+ padding: 0.75rem;
+}
+
+.tile.is-vertical {
+ flex-direction: column;
+}
+
+.tile.is-vertical > .tile.is-child:not(:last-child) {
+ margin-bottom: 1.5rem !important;
+}
+
+@media screen and (min-width: 769px), print {
+ .tile:not(.is-child) {
+ display: flex;
+ }
+ .tile.is-1 {
+ flex: none;
+ width: 8.33333%;
+ }
+ .tile.is-2 {
+ flex: none;
+ width: 16.66667%;
+ }
+ .tile.is-3 {
+ flex: none;
+ width: 25%;
+ }
+ .tile.is-4 {
+ flex: none;
+ width: 33.33333%;
+ }
+ .tile.is-5 {
+ flex: none;
+ width: 41.66667%;
+ }
+ .tile.is-6 {
+ flex: none;
+ width: 50%;
+ }
+ .tile.is-7 {
+ flex: none;
+ width: 58.33333%;
+ }
+ .tile.is-8 {
+ flex: none;
+ width: 66.66667%;
+ }
+ .tile.is-9 {
+ flex: none;
+ width: 75%;
+ }
+ .tile.is-10 {
+ flex: none;
+ width: 83.33333%;
+ }
+ .tile.is-11 {
+ flex: none;
+ width: 91.66667%;
+ }
+ .tile.is-12 {
+ flex: none;
+ width: 100%;
+ }
+}
+
+/* Bulma Helpers */
+.has-text-white {
+ color: white !important;
+}
+
+a.has-text-white:hover, a.has-text-white:focus {
+ color: #e6e6e6 !important;
+}
+
+.has-background-white {
+ background-color: white !important;
+}
+
+.has-text-black {
+ color: #0a0a0a !important;
+}
+
+a.has-text-black:hover, a.has-text-black:focus {
+ color: black !important;
+}
+
+.has-background-black {
+ background-color: #0a0a0a !important;
+}
+
+.has-text-light {
+ color: whitesmoke !important;
+}
+
+a.has-text-light:hover, a.has-text-light:focus {
+ color: #dbdbdb !important;
+}
+
+.has-background-light {
+ background-color: whitesmoke !important;
+}
+
+.has-text-dark {
+ color: #363636 !important;
+}
+
+a.has-text-dark:hover, a.has-text-dark:focus {
+ color: #1c1c1c !important;
+}
+
+.has-background-dark {
+ background-color: #363636 !important;
+}
+
+.has-text-primary {
+ color: #00d1b2 !important;
+}
+
+a.has-text-primary:hover, a.has-text-primary:focus {
+ color: #009e86 !important;
+}
+
+.has-background-primary {
+ background-color: #00d1b2 !important;
+}
+
+.has-text-primary-light {
+ color: #ebfffc !important;
+}
+
+a.has-text-primary-light:hover, a.has-text-primary-light:focus {
+ color: #b8fff4 !important;
+}
+
+.has-background-primary-light {
+ background-color: #ebfffc !important;
+}
+
+.has-text-primary-dark {
+ color: #00947e !important;
+}
+
+a.has-text-primary-dark:hover, a.has-text-primary-dark:focus {
+ color: #00c7a9 !important;
+}
+
+.has-background-primary-dark {
+ background-color: #00947e !important;
+}
+
+.has-text-link {
+ color: #3273dc !important;
+}
+
+a.has-text-link:hover, a.has-text-link:focus {
+ color: #205bbc !important;
+}
+
+.has-background-link {
+ background-color: #3273dc !important;
+}
+
+.has-text-link-light {
+ color: #eef3fc !important;
+}
+
+a.has-text-link-light:hover, a.has-text-link-light:focus {
+ color: #c2d5f5 !important;
+}
+
+.has-background-link-light {
+ background-color: #eef3fc !important;
+}
+
+.has-text-link-dark {
+ color: #2160c4 !important;
+}
+
+a.has-text-link-dark:hover, a.has-text-link-dark:focus {
+ color: #3b79de !important;
+}
+
+.has-background-link-dark {
+ background-color: #2160c4 !important;
+}
+
+.has-text-info {
+ color: #3298dc !important;
+}
+
+a.has-text-info:hover, a.has-text-info:focus {
+ color: #207dbc !important;
+}
+
+.has-background-info {
+ background-color: #3298dc !important;
+}
+
+.has-text-info-light {
+ color: #eef6fc !important;
+}
+
+a.has-text-info-light:hover, a.has-text-info-light:focus {
+ color: #c2e0f5 !important;
+}
+
+.has-background-info-light {
+ background-color: #eef6fc !important;
+}
+
+.has-text-info-dark {
+ color: #1d72aa !important;
+}
+
+a.has-text-info-dark:hover, a.has-text-info-dark:focus {
+ color: #248fd6 !important;
+}
+
+.has-background-info-dark {
+ background-color: #1d72aa !important;
+}
+
+.has-text-success {
+ color: #48c774 !important;
+}
+
+a.has-text-success:hover, a.has-text-success:focus {
+ color: #34a85c !important;
+}
+
+.has-background-success {
+ background-color: #48c774 !important;
+}
+
+.has-text-success-light {
+ color: #effaf3 !important;
+}
+
+a.has-text-success-light:hover, a.has-text-success-light:focus {
+ color: #c8eed6 !important;
+}
+
+.has-background-success-light {
+ background-color: #effaf3 !important;
+}
+
+.has-text-success-dark {
+ color: #257942 !important;
+}
+
+a.has-text-success-dark:hover, a.has-text-success-dark:focus {
+ color: #31a058 !important;
+}
+
+.has-background-success-dark {
+ background-color: #257942 !important;
+}
+
+.has-text-warning {
+ color: #ffdd57 !important;
+}
+
+a.has-text-warning:hover, a.has-text-warning:focus {
+ color: #ffd324 !important;
+}
+
+.has-background-warning {
+ background-color: #ffdd57 !important;
+}
+
+.has-text-warning-light {
+ color: #fffbeb !important;
+}
+
+a.has-text-warning-light:hover, a.has-text-warning-light:focus {
+ color: #fff1b8 !important;
+}
+
+.has-background-warning-light {
+ background-color: #fffbeb !important;
+}
+
+.has-text-warning-dark {
+ color: #947600 !important;
+}
+
+a.has-text-warning-dark:hover, a.has-text-warning-dark:focus {
+ color: #c79f00 !important;
+}
+
+.has-background-warning-dark {
+ background-color: #947600 !important;
+}
+
+.has-text-danger {
+ color: #f14668 !important;
+}
+
+a.has-text-danger:hover, a.has-text-danger:focus {
+ color: #ee1742 !important;
+}
+
+.has-background-danger {
+ background-color: #f14668 !important;
+}
+
+.has-text-danger-light {
+ color: #feecf0 !important;
+}
+
+a.has-text-danger-light:hover, a.has-text-danger-light:focus {
+ color: #fabdc9 !important;
+}
+
+.has-background-danger-light {
+ background-color: #feecf0 !important;
+}
+
+.has-text-danger-dark {
+ color: #cc0f35 !important;
+}
+
+a.has-text-danger-dark:hover, a.has-text-danger-dark:focus {
+ color: #ee2049 !important;
+}
+
+.has-background-danger-dark {
+ background-color: #cc0f35 !important;
+}
+
+.has-text-black-bis {
+ color: #121212 !important;
+}
+
+.has-background-black-bis {
+ background-color: #121212 !important;
+}
+
+.has-text-black-ter {
+ color: #242424 !important;
+}
+
+.has-background-black-ter {
+ background-color: #242424 !important;
+}
+
+.has-text-grey-darker {
+ color: #363636 !important;
+}
+
+.has-background-grey-darker {
+ background-color: #363636 !important;
+}
+
+.has-text-grey-dark {
+ color: #4a4a4a !important;
+}
+
+.has-background-grey-dark {
+ background-color: #4a4a4a !important;
+}
+
+.has-text-grey {
+ color: #7a7a7a !important;
+}
+
+.has-background-grey {
+ background-color: #7a7a7a !important;
+}
+
+.has-text-grey-light {
+ color: #b5b5b5 !important;
+}
+
+.has-background-grey-light {
+ background-color: #b5b5b5 !important;
+}
+
+.has-text-grey-lighter {
+ color: #dbdbdb !important;
+}
+
+.has-background-grey-lighter {
+ background-color: #dbdbdb !important;
+}
+
+.has-text-white-ter {
+ color: whitesmoke !important;
+}
+
+.has-background-white-ter {
+ background-color: whitesmoke !important;
+}
+
+.has-text-white-bis {
+ color: #fafafa !important;
+}
+
+.has-background-white-bis {
+ background-color: #fafafa !important;
+}
+
+.is-flex-direction-row {
+ flex-direction: row !important;
+}
+
+.is-flex-direction-row-reverse {
+ flex-direction: row-reverse !important;
+}
+
+.is-flex-direction-column {
+ flex-direction: column !important;
+}
+
+.is-flex-direction-column-reverse {
+ flex-direction: column-reverse !important;
+}
+
+.is-flex-wrap-nowrap {
+ flex-wrap: nowrap !important;
+}
+
+.is-flex-wrap-wrap {
+ flex-wrap: wrap !important;
+}
+
+.is-flex-wrap-wrap-reverse {
+ flex-wrap: wrap-reverse !important;
+}
+
+.is-justify-content-flex-start {
+ justify-content: flex-start !important;
+}
+
+.is-justify-content-flex-end {
+ justify-content: flex-end !important;
+}
+
+.is-justify-content-center {
+ justify-content: center !important;
+}
+
+.is-justify-content-space-between {
+ justify-content: space-between !important;
+}
+
+.is-justify-content-space-around {
+ justify-content: space-around !important;
+}
+
+.is-justify-content-space-evenly {
+ justify-content: space-evenly !important;
+}
+
+.is-justify-content-start {
+ justify-content: start !important;
+}
+
+.is-justify-content-end {
+ justify-content: end !important;
+}
+
+.is-justify-content-left {
+ justify-content: left !important;
+}
+
+.is-justify-content-right {
+ justify-content: right !important;
+}
+
+.is-align-content-flex-start {
+ align-content: flex-start !important;
+}
+
+.is-align-content-flex-end {
+ align-content: flex-end !important;
+}
+
+.is-align-content-center {
+ align-content: center !important;
+}
+
+.is-align-content-space-between {
+ align-content: space-between !important;
+}
+
+.is-align-content-space-around {
+ align-content: space-around !important;
+}
+
+.is-align-content-space-evenly {
+ align-content: space-evenly !important;
+}
+
+.is-align-content-stretch {
+ align-content: stretch !important;
+}
+
+.is-align-content-start {
+ align-content: start !important;
+}
+
+.is-align-content-end {
+ align-content: end !important;
+}
+
+.is-align-content-baseline {
+ align-content: baseline !important;
+}
+
+.is-align-items-stretch {
+ align-items: stretch !important;
+}
+
+.is-align-items-flex-start {
+ align-items: flex-start !important;
+}
+
+.is-align-items-flex-end {
+ align-items: flex-end !important;
+}
+
+.is-align-items-center {
+ align-items: center !important;
+}
+
+.is-align-items-baseline {
+ align-items: baseline !important;
+}
+
+.is-align-items-start {
+ align-items: start !important;
+}
+
+.is-align-items-end {
+ align-items: end !important;
+}
+
+.is-align-items-self-start {
+ align-items: self-start !important;
+}
+
+.is-align-items-self-end {
+ align-items: self-end !important;
+}
+
+.is-align-self-auto {
+ align-self: auto !important;
+}
+
+.is-align-self-flex-start {
+ align-self: flex-start !important;
+}
+
+.is-align-self-flex-end {
+ align-self: flex-end !important;
+}
+
+.is-align-self-center {
+ align-self: center !important;
+}
+
+.is-align-self-baseline {
+ align-self: baseline !important;
+}
+
+.is-align-self-stretch {
+ align-self: stretch !important;
+}
+
+.is-flex-grow-0 {
+ flex-grow: 0 !important;
+}
+
+.is-flex-grow-1 {
+ flex-grow: 1 !important;
+}
+
+.is-flex-grow-2 {
+ flex-grow: 2 !important;
+}
+
+.is-flex-grow-3 {
+ flex-grow: 3 !important;
+}
+
+.is-flex-grow-4 {
+ flex-grow: 4 !important;
+}
+
+.is-flex-grow-5 {
+ flex-grow: 5 !important;
+}
+
+.is-flex-shrink-0 {
+ flex-shrink: 0 !important;
+}
+
+.is-flex-shrink-1 {
+ flex-shrink: 1 !important;
+}
+
+.is-flex-shrink-2 {
+ flex-shrink: 2 !important;
+}
+
+.is-flex-shrink-3 {
+ flex-shrink: 3 !important;
+}
+
+.is-flex-shrink-4 {
+ flex-shrink: 4 !important;
+}
+
+.is-flex-shrink-5 {
+ flex-shrink: 5 !important;
+}
+
+.is-clearfix::after {
+ clear: both;
+ content: " ";
+ display: table;
+}
+
+.is-pulled-left {
+ float: left !important;
+}
+
+.is-pulled-right {
+ float: right !important;
+}
+
+.is-radiusless {
+ border-radius: 0 !important;
+}
+
+.is-shadowless {
+ box-shadow: none !important;
+}
+
+.is-clickable {
+ cursor: pointer !important;
+}
+
+.is-clipped {
+ overflow: hidden !important;
+}
+
+.is-relative {
+ position: relative !important;
+}
+
+.is-marginless {
+ margin: 0 !important;
+}
+
+.is-paddingless {
+ padding: 0 !important;
+}
+
+.m-0 {
+ margin: 0 !important;
+}
+
+.mt-0 {
+ margin-top: 0 !important;
+}
+
+.mr-0 {
+ margin-right: 0 !important;
+}
+
+.mb-0 {
+ margin-bottom: 0 !important;
+}
+
+.ml-0 {
+ margin-left: 0 !important;
+}
+
+.mx-0 {
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+}
+
+.my-0 {
+ margin-top: 0 !important;
+ margin-bottom: 0 !important;
+}
+
+.m-1 {
+ margin: 0.25rem !important;
+}
+
+.mt-1 {
+ margin-top: 0.25rem !important;
+}
+
+.mr-1 {
+ margin-right: 0.25rem !important;
+}
+
+.mb-1 {
+ margin-bottom: 0.25rem !important;
+}
+
+.ml-1 {
+ margin-left: 0.25rem !important;
+}
+
+.mx-1 {
+ margin-left: 0.25rem !important;
+ margin-right: 0.25rem !important;
+}
+
+.my-1 {
+ margin-top: 0.25rem !important;
+ margin-bottom: 0.25rem !important;
+}
+
+.m-2 {
+ margin: 0.5rem !important;
+}
+
+.mt-2 {
+ margin-top: 0.5rem !important;
+}
+
+.mr-2 {
+ margin-right: 0.5rem !important;
+}
+
+.mb-2 {
+ margin-bottom: 0.5rem !important;
+}
+
+.ml-2 {
+ margin-left: 0.5rem !important;
+}
+
+.mx-2 {
+ margin-left: 0.5rem !important;
+ margin-right: 0.5rem !important;
+}
+
+.my-2 {
+ margin-top: 0.5rem !important;
+ margin-bottom: 0.5rem !important;
+}
+
+.m-3 {
+ margin: 0.75rem !important;
+}
+
+.mt-3 {
+ margin-top: 0.75rem !important;
+}
+
+.mr-3 {
+ margin-right: 0.75rem !important;
+}
+
+.mb-3 {
+ margin-bottom: 0.75rem !important;
+}
+
+.ml-3 {
+ margin-left: 0.75rem !important;
+}
+
+.mx-3 {
+ margin-left: 0.75rem !important;
+ margin-right: 0.75rem !important;
+}
+
+.my-3 {
+ margin-top: 0.75rem !important;
+ margin-bottom: 0.75rem !important;
+}
+
+.m-4 {
+ margin: 1rem !important;
+}
+
+.mt-4 {
+ margin-top: 1rem !important;
+}
+
+.mr-4 {
+ margin-right: 1rem !important;
+}
+
+.mb-4 {
+ margin-bottom: 1rem !important;
+}
+
+.ml-4 {
+ margin-left: 1rem !important;
+}
+
+.mx-4 {
+ margin-left: 1rem !important;
+ margin-right: 1rem !important;
+}
+
+.my-4 {
+ margin-top: 1rem !important;
+ margin-bottom: 1rem !important;
+}
+
+.m-5 {
+ margin: 1.5rem !important;
+}
+
+.mt-5 {
+ margin-top: 1.5rem !important;
+}
+
+.mr-5 {
+ margin-right: 1.5rem !important;
+}
+
+.mb-5 {
+ margin-bottom: 1.5rem !important;
+}
+
+.ml-5 {
+ margin-left: 1.5rem !important;
+}
+
+.mx-5 {
+ margin-left: 1.5rem !important;
+ margin-right: 1.5rem !important;
+}
+
+.my-5 {
+ margin-top: 1.5rem !important;
+ margin-bottom: 1.5rem !important;
+}
+
+.m-6 {
+ margin: 3rem !important;
+}
+
+.mt-6 {
+ margin-top: 3rem !important;
+}
+
+.mr-6 {
+ margin-right: 3rem !important;
+}
+
+.mb-6 {
+ margin-bottom: 3rem !important;
+}
+
+.ml-6 {
+ margin-left: 3rem !important;
+}
+
+.mx-6 {
+ margin-left: 3rem !important;
+ margin-right: 3rem !important;
+}
+
+.my-6 {
+ margin-top: 3rem !important;
+ margin-bottom: 3rem !important;
+}
+
+.p-0 {
+ padding: 0 !important;
+}
+
+.pt-0 {
+ padding-top: 0 !important;
+}
+
+.pr-0 {
+ padding-right: 0 !important;
+}
+
+.pb-0 {
+ padding-bottom: 0 !important;
+}
+
+.pl-0 {
+ padding-left: 0 !important;
+}
+
+.px-0 {
+ padding-left: 0 !important;
+ padding-right: 0 !important;
+}
+
+.py-0 {
+ padding-top: 0 !important;
+ padding-bottom: 0 !important;
+}
+
+.p-1 {
+ padding: 0.25rem !important;
+}
+
+.pt-1 {
+ padding-top: 0.25rem !important;
+}
+
+.pr-1 {
+ padding-right: 0.25rem !important;
+}
+
+.pb-1 {
+ padding-bottom: 0.25rem !important;
+}
+
+.pl-1 {
+ padding-left: 0.25rem !important;
+}
+
+.px-1 {
+ padding-left: 0.25rem !important;
+ padding-right: 0.25rem !important;
+}
+
+.py-1 {
+ padding-top: 0.25rem !important;
+ padding-bottom: 0.25rem !important;
+}
+
+.p-2 {
+ padding: 0.5rem !important;
+}
+
+.pt-2 {
+ padding-top: 0.5rem !important;
+}
+
+.pr-2 {
+ padding-right: 0.5rem !important;
+}
+
+.pb-2 {
+ padding-bottom: 0.5rem !important;
+}
+
+.pl-2 {
+ padding-left: 0.5rem !important;
+}
+
+.px-2 {
+ padding-left: 0.5rem !important;
+ padding-right: 0.5rem !important;
+}
+
+.py-2 {
+ padding-top: 0.5rem !important;
+ padding-bottom: 0.5rem !important;
+}
+
+.p-3 {
+ padding: 0.75rem !important;
+}
+
+.pt-3 {
+ padding-top: 0.75rem !important;
+}
+
+.pr-3 {
+ padding-right: 0.75rem !important;
+}
+
+.pb-3 {
+ padding-bottom: 0.75rem !important;
+}
+
+.pl-3 {
+ padding-left: 0.75rem !important;
+}
+
+.px-3 {
+ padding-left: 0.75rem !important;
+ padding-right: 0.75rem !important;
+}
+
+.py-3 {
+ padding-top: 0.75rem !important;
+ padding-bottom: 0.75rem !important;
+}
+
+.p-4 {
+ padding: 1rem !important;
+}
+
+.pt-4 {
+ padding-top: 1rem !important;
+}
+
+.pr-4 {
+ padding-right: 1rem !important;
+}
+
+.pb-4 {
+ padding-bottom: 1rem !important;
+}
+
+.pl-4 {
+ padding-left: 1rem !important;
+}
+
+.px-4 {
+ padding-left: 1rem !important;
+ padding-right: 1rem !important;
+}
+
+.py-4 {
+ padding-top: 1rem !important;
+ padding-bottom: 1rem !important;
+}
+
+.p-5 {
+ padding: 1.5rem !important;
+}
+
+.pt-5 {
+ padding-top: 1.5rem !important;
+}
+
+.pr-5 {
+ padding-right: 1.5rem !important;
+}
+
+.pb-5 {
+ padding-bottom: 1.5rem !important;
+}
+
+.pl-5 {
+ padding-left: 1.5rem !important;
+}
+
+.px-5 {
+ padding-left: 1.5rem !important;
+ padding-right: 1.5rem !important;
+}
+
+.py-5 {
+ padding-top: 1.5rem !important;
+ padding-bottom: 1.5rem !important;
+}
+
+.p-6 {
+ padding: 3rem !important;
+}
+
+.pt-6 {
+ padding-top: 3rem !important;
+}
+
+.pr-6 {
+ padding-right: 3rem !important;
+}
+
+.pb-6 {
+ padding-bottom: 3rem !important;
+}
+
+.pl-6 {
+ padding-left: 3rem !important;
+}
+
+.px-6 {
+ padding-left: 3rem !important;
+ padding-right: 3rem !important;
+}
+
+.py-6 {
+ padding-top: 3rem !important;
+ padding-bottom: 3rem !important;
+}
+
+.is-size-1 {
+ font-size: 3rem !important;
+}
+
+.is-size-2 {
+ font-size: 2.5rem !important;
+}
+
+.is-size-3 {
+ font-size: 2rem !important;
+}
+
+.is-size-4 {
+ font-size: 1.5rem !important;
+}
+
+.is-size-5 {
+ font-size: 1.25rem !important;
+}
+
+.is-size-6 {
+ font-size: 1rem !important;
+}
+
+.is-size-7 {
+ font-size: 0.75rem !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-size-1-mobile {
+ font-size: 3rem !important;
+ }
+ .is-size-2-mobile {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-mobile {
+ font-size: 2rem !important;
+ }
+ .is-size-4-mobile {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-mobile {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-mobile {
+ font-size: 1rem !important;
+ }
+ .is-size-7-mobile {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-size-1-tablet {
+ font-size: 3rem !important;
+ }
+ .is-size-2-tablet {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-tablet {
+ font-size: 2rem !important;
+ }
+ .is-size-4-tablet {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-tablet {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-tablet {
+ font-size: 1rem !important;
+ }
+ .is-size-7-tablet {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-size-1-touch {
+ font-size: 3rem !important;
+ }
+ .is-size-2-touch {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-touch {
+ font-size: 2rem !important;
+ }
+ .is-size-4-touch {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-touch {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-touch {
+ font-size: 1rem !important;
+ }
+ .is-size-7-touch {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-size-1-desktop {
+ font-size: 3rem !important;
+ }
+ .is-size-2-desktop {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-desktop {
+ font-size: 2rem !important;
+ }
+ .is-size-4-desktop {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-desktop {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-desktop {
+ font-size: 1rem !important;
+ }
+ .is-size-7-desktop {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-size-1-widescreen {
+ font-size: 3rem !important;
+ }
+ .is-size-2-widescreen {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-widescreen {
+ font-size: 2rem !important;
+ }
+ .is-size-4-widescreen {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-widescreen {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-widescreen {
+ font-size: 1rem !important;
+ }
+ .is-size-7-widescreen {
+ font-size: 0.75rem !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-size-1-fullhd {
+ font-size: 3rem !important;
+ }
+ .is-size-2-fullhd {
+ font-size: 2.5rem !important;
+ }
+ .is-size-3-fullhd {
+ font-size: 2rem !important;
+ }
+ .is-size-4-fullhd {
+ font-size: 1.5rem !important;
+ }
+ .is-size-5-fullhd {
+ font-size: 1.25rem !important;
+ }
+ .is-size-6-fullhd {
+ font-size: 1rem !important;
+ }
+ .is-size-7-fullhd {
+ font-size: 0.75rem !important;
+ }
+}
+
+.has-text-centered {
+ text-align: center !important;
+}
+
+.has-text-justified {
+ text-align: justify !important;
+}
+
+.has-text-left {
+ text-align: left !important;
+}
+
+.has-text-right {
+ text-align: right !important;
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-centered-mobile {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-centered-tablet {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-centered-tablet-only {
+ text-align: center !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-centered-touch {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-centered-desktop {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-centered-desktop-only {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-centered-widescreen {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-centered-widescreen-only {
+ text-align: center !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-centered-fullhd {
+ text-align: center !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-justified-mobile {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-justified-tablet {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-justified-tablet-only {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-justified-touch {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-justified-desktop {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-justified-desktop-only {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-justified-widescreen {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-justified-widescreen-only {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-justified-fullhd {
+ text-align: justify !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-left-mobile {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-left-tablet {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-left-tablet-only {
+ text-align: left !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-left-touch {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-left-desktop {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-left-desktop-only {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-left-widescreen {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-left-widescreen-only {
+ text-align: left !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-left-fullhd {
+ text-align: left !important;
+ }
+}
+
+@media screen and (max-width: 768px) {
+ .has-text-right-mobile {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .has-text-right-tablet {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .has-text-right-tablet-only {
+ text-align: right !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .has-text-right-touch {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .has-text-right-desktop {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .has-text-right-desktop-only {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .has-text-right-widescreen {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .has-text-right-widescreen-only {
+ text-align: right !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .has-text-right-fullhd {
+ text-align: right !important;
+ }
+}
+
+.is-capitalized {
+ text-transform: capitalize !important;
+}
+
+.is-lowercase {
+ text-transform: lowercase !important;
+}
+
+.is-uppercase {
+ text-transform: uppercase !important;
+}
+
+.is-italic {
+ font-style: italic !important;
+}
+
+.has-text-weight-light {
+ font-weight: 300 !important;
+}
+
+.has-text-weight-normal {
+ font-weight: 400 !important;
+}
+
+.has-text-weight-medium {
+ font-weight: 500 !important;
+}
+
+.has-text-weight-semibold {
+ font-weight: 600 !important;
+}
+
+.has-text-weight-bold {
+ font-weight: 700 !important;
+}
+
+.is-family-primary {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
+}
+
+.is-family-secondary {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
+}
+
+.is-family-sans-serif {
+ font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif !important;
+}
+
+.is-family-monospace {
+ font-family: monospace !important;
+}
+
+.is-family-code {
+ font-family: monospace !important;
+}
+
+.is-block {
+ display: block !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-block-mobile {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-block-tablet {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-block-tablet-only {
+ display: block !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-block-touch {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-block-desktop {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-block-desktop-only {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-block-widescreen {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-block-widescreen-only {
+ display: block !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-block-fullhd {
+ display: block !important;
+ }
+}
+
+.is-flex {
+ display: flex !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-flex-mobile {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-flex-tablet {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-flex-tablet-only {
+ display: flex !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-flex-touch {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-flex-desktop {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-flex-desktop-only {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-flex-widescreen {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-flex-widescreen-only {
+ display: flex !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-flex-fullhd {
+ display: flex !important;
+ }
+}
+
+.is-inline {
+ display: inline !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-inline-mobile {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-inline-tablet {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-inline-tablet-only {
+ display: inline !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-inline-touch {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-inline-desktop {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-inline-desktop-only {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-inline-widescreen {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-inline-widescreen-only {
+ display: inline !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-inline-fullhd {
+ display: inline !important;
+ }
+}
+
+.is-inline-block {
+ display: inline-block !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-inline-block-mobile {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-inline-block-tablet {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-inline-block-tablet-only {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-inline-block-touch {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-inline-block-desktop {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-inline-block-desktop-only {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-inline-block-widescreen {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-inline-block-widescreen-only {
+ display: inline-block !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-inline-block-fullhd {
+ display: inline-block !important;
+ }
+}
+
+.is-inline-flex {
+ display: inline-flex !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-inline-flex-mobile {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-inline-flex-tablet {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-inline-flex-tablet-only {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-inline-flex-touch {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-inline-flex-desktop {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-inline-flex-desktop-only {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-inline-flex-widescreen {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-inline-flex-widescreen-only {
+ display: inline-flex !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-inline-flex-fullhd {
+ display: inline-flex !important;
+ }
+}
+
+.is-hidden {
+ display: none !important;
+}
+
+.is-sr-only {
+ border: none !important;
+ clip: rect(0, 0, 0, 0) !important;
+ height: 0.01em !important;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: absolute !important;
+ white-space: nowrap !important;
+ width: 0.01em !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-hidden-mobile {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-hidden-tablet {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-hidden-tablet-only {
+ display: none !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-hidden-touch {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-hidden-desktop {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-hidden-desktop-only {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-hidden-widescreen {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-hidden-widescreen-only {
+ display: none !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-hidden-fullhd {
+ display: none !important;
+ }
+}
+
+.is-invisible {
+ visibility: hidden !important;
+}
+
+@media screen and (max-width: 768px) {
+ .is-invisible-mobile {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .is-invisible-tablet {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 769px) and (max-width: 1023px) {
+ .is-invisible-tablet-only {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (max-width: 1023px) {
+ .is-invisible-touch {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1024px) {
+ .is-invisible-desktop {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1024px) and (max-width: 1215px) {
+ .is-invisible-desktop-only {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1216px) {
+ .is-invisible-widescreen {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1216px) and (max-width: 1407px) {
+ .is-invisible-widescreen-only {
+ visibility: hidden !important;
+ }
+}
+
+@media screen and (min-width: 1408px) {
+ .is-invisible-fullhd {
+ visibility: hidden !important;
+ }
+}
+
+/* Bulma Layout */
+.hero {
+ align-items: stretch;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.hero .navbar {
+ background: none;
+}
+
+.hero .tabs ul {
+ border-bottom: none;
+}
+
+.hero.is-white {
+ background-color: white;
+ color: #0a0a0a;
+}
+
+.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-white strong {
+ color: inherit;
+}
+
+.hero.is-white .title {
+ color: #0a0a0a;
+}
+
+.hero.is-white .subtitle {
+ color: rgba(10, 10, 10, 0.9);
+}
+
+.hero.is-white .subtitle a:not(.button),
+.hero.is-white .subtitle strong {
+ color: #0a0a0a;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-white .navbar-menu {
+ background-color: white;
+ }
+}
+
+.hero.is-white .navbar-item,
+.hero.is-white .navbar-link {
+ color: rgba(10, 10, 10, 0.7);
+}
+
+.hero.is-white a.navbar-item:hover, .hero.is-white a.navbar-item.is-active,
+.hero.is-white .navbar-link:hover,
+.hero.is-white .navbar-link.is-active {
+ background-color: #f2f2f2;
+ color: #0a0a0a;
+}
+
+.hero.is-white .tabs a {
+ color: #0a0a0a;
+ opacity: 0.9;
+}
+
+.hero.is-white .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-white .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-white .tabs.is-boxed a, .hero.is-white .tabs.is-toggle a {
+ color: #0a0a0a;
+}
+
+.hero.is-white .tabs.is-boxed a:hover, .hero.is-white .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-white .tabs.is-boxed li.is-active a, .hero.is-white .tabs.is-boxed li.is-active a:hover, .hero.is-white .tabs.is-toggle li.is-active a, .hero.is-white .tabs.is-toggle li.is-active a:hover {
+ background-color: #0a0a0a;
+ border-color: #0a0a0a;
+ color: white;
+}
+
+.hero.is-white.is-bold {
+ background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-white.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #e6e6e6 0%, white 71%, white 100%);
+ }
+}
+
+.hero.is-black {
+ background-color: #0a0a0a;
+ color: white;
+}
+
+.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-black strong {
+ color: inherit;
+}
+
+.hero.is-black .title {
+ color: white;
+}
+
+.hero.is-black .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-black .subtitle a:not(.button),
+.hero.is-black .subtitle strong {
+ color: white;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-black .navbar-menu {
+ background-color: #0a0a0a;
+ }
+}
+
+.hero.is-black .navbar-item,
+.hero.is-black .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-black a.navbar-item:hover, .hero.is-black a.navbar-item.is-active,
+.hero.is-black .navbar-link:hover,
+.hero.is-black .navbar-link.is-active {
+ background-color: black;
+ color: white;
+}
+
+.hero.is-black .tabs a {
+ color: white;
+ opacity: 0.9;
+}
+
+.hero.is-black .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-black .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-black .tabs.is-boxed a, .hero.is-black .tabs.is-toggle a {
+ color: white;
+}
+
+.hero.is-black .tabs.is-boxed a:hover, .hero.is-black .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-black .tabs.is-boxed li.is-active a, .hero.is-black .tabs.is-boxed li.is-active a:hover, .hero.is-black .tabs.is-toggle li.is-active a, .hero.is-black .tabs.is-toggle li.is-active a:hover {
+ background-color: white;
+ border-color: white;
+ color: #0a0a0a;
+}
+
+.hero.is-black.is-bold {
+ background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-black.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, black 0%, #0a0a0a 71%, #181616 100%);
+ }
+}
+
+.hero.is-light {
+ background-color: whitesmoke;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-light strong {
+ color: inherit;
+}
+
+.hero.is-light .title {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light .subtitle {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.hero.is-light .subtitle a:not(.button),
+.hero.is-light .subtitle strong {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-light .navbar-menu {
+ background-color: whitesmoke;
+ }
+}
+
+.hero.is-light .navbar-item,
+.hero.is-light .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light a.navbar-item:hover, .hero.is-light a.navbar-item.is-active,
+.hero.is-light .navbar-link:hover,
+.hero.is-light .navbar-link.is-active {
+ background-color: #e8e8e8;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light .tabs a {
+ color: rgba(0, 0, 0, 0.7);
+ opacity: 0.9;
+}
+
+.hero.is-light .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-light .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-light .tabs.is-boxed a, .hero.is-light .tabs.is-toggle a {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-light .tabs.is-boxed a:hover, .hero.is-light .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-light .tabs.is-boxed li.is-active a, .hero.is-light .tabs.is-boxed li.is-active a:hover, .hero.is-light .tabs.is-toggle li.is-active a, .hero.is-light .tabs.is-toggle li.is-active a:hover {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: rgba(0, 0, 0, 0.7);
+ color: whitesmoke;
+}
+
+.hero.is-light.is-bold {
+ background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-light.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #dfd8d9 0%, whitesmoke 71%, white 100%);
+ }
+}
+
+.hero.is-dark {
+ background-color: #363636;
+ color: #fff;
+}
+
+.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-dark strong {
+ color: inherit;
+}
+
+.hero.is-dark .title {
+ color: #fff;
+}
+
+.hero.is-dark .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-dark .subtitle a:not(.button),
+.hero.is-dark .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-dark .navbar-menu {
+ background-color: #363636;
+ }
+}
+
+.hero.is-dark .navbar-item,
+.hero.is-dark .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-dark a.navbar-item:hover, .hero.is-dark a.navbar-item.is-active,
+.hero.is-dark .navbar-link:hover,
+.hero.is-dark .navbar-link.is-active {
+ background-color: #292929;
+ color: #fff;
+}
+
+.hero.is-dark .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-dark .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-dark .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-dark .tabs.is-boxed a, .hero.is-dark .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-dark .tabs.is-boxed a:hover, .hero.is-dark .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-dark .tabs.is-boxed li.is-active a, .hero.is-dark .tabs.is-boxed li.is-active a:hover, .hero.is-dark .tabs.is-toggle li.is-active a, .hero.is-dark .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #363636;
+}
+
+.hero.is-dark.is-bold {
+ background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-dark.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%);
+ }
+}
+
+.hero.is-primary {
+ background-color: #00d1b2;
+ color: #fff;
+}
+
+.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-primary strong {
+ color: inherit;
+}
+
+.hero.is-primary .title {
+ color: #fff;
+}
+
+.hero.is-primary .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-primary .subtitle a:not(.button),
+.hero.is-primary .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-primary .navbar-menu {
+ background-color: #00d1b2;
+ }
+}
+
+.hero.is-primary .navbar-item,
+.hero.is-primary .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-primary a.navbar-item:hover, .hero.is-primary a.navbar-item.is-active,
+.hero.is-primary .navbar-link:hover,
+.hero.is-primary .navbar-link.is-active {
+ background-color: #00b89c;
+ color: #fff;
+}
+
+.hero.is-primary .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-primary .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-primary .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-primary .tabs.is-boxed a, .hero.is-primary .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-primary .tabs.is-boxed a:hover, .hero.is-primary .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-primary .tabs.is-boxed li.is-active a, .hero.is-primary .tabs.is-boxed li.is-active a:hover, .hero.is-primary .tabs.is-toggle li.is-active a, .hero.is-primary .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #00d1b2;
+}
+
+.hero.is-primary.is-bold {
+ background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-primary.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #009e6c 0%, #00d1b2 71%, #00e7eb 100%);
+ }
+}
+
+.hero.is-link {
+ background-color: #3273dc;
+ color: #fff;
+}
+
+.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-link strong {
+ color: inherit;
+}
+
+.hero.is-link .title {
+ color: #fff;
+}
+
+.hero.is-link .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-link .subtitle a:not(.button),
+.hero.is-link .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-link .navbar-menu {
+ background-color: #3273dc;
+ }
+}
+
+.hero.is-link .navbar-item,
+.hero.is-link .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-link a.navbar-item:hover, .hero.is-link a.navbar-item.is-active,
+.hero.is-link .navbar-link:hover,
+.hero.is-link .navbar-link.is-active {
+ background-color: #2366d1;
+ color: #fff;
+}
+
+.hero.is-link .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-link .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-link .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-link .tabs.is-boxed a, .hero.is-link .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-link .tabs.is-boxed a:hover, .hero.is-link .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-link .tabs.is-boxed li.is-active a, .hero.is-link .tabs.is-boxed li.is-active a:hover, .hero.is-link .tabs.is-toggle li.is-active a, .hero.is-link .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #3273dc;
+}
+
+.hero.is-link.is-bold {
+ background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-link.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #1577c6 0%, #3273dc 71%, #4366e5 100%);
+ }
+}
+
+.hero.is-info {
+ background-color: #3298dc;
+ color: #fff;
+}
+
+.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-info strong {
+ color: inherit;
+}
+
+.hero.is-info .title {
+ color: #fff;
+}
+
+.hero.is-info .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-info .subtitle a:not(.button),
+.hero.is-info .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-info .navbar-menu {
+ background-color: #3298dc;
+ }
+}
+
+.hero.is-info .navbar-item,
+.hero.is-info .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-info a.navbar-item:hover, .hero.is-info a.navbar-item.is-active,
+.hero.is-info .navbar-link:hover,
+.hero.is-info .navbar-link.is-active {
+ background-color: #238cd1;
+ color: #fff;
+}
+
+.hero.is-info .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-info .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-info .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-info .tabs.is-boxed a, .hero.is-info .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-info .tabs.is-boxed a:hover, .hero.is-info .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-info .tabs.is-boxed li.is-active a, .hero.is-info .tabs.is-boxed li.is-active a:hover, .hero.is-info .tabs.is-toggle li.is-active a, .hero.is-info .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #3298dc;
+}
+
+.hero.is-info.is-bold {
+ background-image: linear-gradient(141deg, #159dc6 0%, #3298dc 71%, #4389e5 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-info.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #159dc6 0%, #3298dc 71%, #4389e5 100%);
+ }
+}
+
+.hero.is-success {
+ background-color: #48c774;
+ color: #fff;
+}
+
+.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-success strong {
+ color: inherit;
+}
+
+.hero.is-success .title {
+ color: #fff;
+}
+
+.hero.is-success .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-success .subtitle a:not(.button),
+.hero.is-success .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-success .navbar-menu {
+ background-color: #48c774;
+ }
+}
+
+.hero.is-success .navbar-item,
+.hero.is-success .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-success a.navbar-item:hover, .hero.is-success a.navbar-item.is-active,
+.hero.is-success .navbar-link:hover,
+.hero.is-success .navbar-link.is-active {
+ background-color: #3abb67;
+ color: #fff;
+}
+
+.hero.is-success .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-success .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-success .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-success .tabs.is-boxed a, .hero.is-success .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-success .tabs.is-boxed a:hover, .hero.is-success .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-success .tabs.is-boxed li.is-active a, .hero.is-success .tabs.is-boxed li.is-active a:hover, .hero.is-success .tabs.is-toggle li.is-active a, .hero.is-success .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #48c774;
+}
+
+.hero.is-success.is-bold {
+ background-image: linear-gradient(141deg, #29b342 0%, #48c774 71%, #56d296 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-success.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #29b342 0%, #48c774 71%, #56d296 100%);
+ }
+}
+
+.hero.is-warning {
+ background-color: #ffdd57;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-warning strong {
+ color: inherit;
+}
+
+.hero.is-warning .title {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning .subtitle {
+ color: rgba(0, 0, 0, 0.9);
+}
+
+.hero.is-warning .subtitle a:not(.button),
+.hero.is-warning .subtitle strong {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-warning .navbar-menu {
+ background-color: #ffdd57;
+ }
+}
+
+.hero.is-warning .navbar-item,
+.hero.is-warning .navbar-link {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning a.navbar-item:hover, .hero.is-warning a.navbar-item.is-active,
+.hero.is-warning .navbar-link:hover,
+.hero.is-warning .navbar-link.is-active {
+ background-color: #ffd83d;
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning .tabs a {
+ color: rgba(0, 0, 0, 0.7);
+ opacity: 0.9;
+}
+
+.hero.is-warning .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-warning .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-warning .tabs.is-boxed a, .hero.is-warning .tabs.is-toggle a {
+ color: rgba(0, 0, 0, 0.7);
+}
+
+.hero.is-warning .tabs.is-boxed a:hover, .hero.is-warning .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-warning .tabs.is-boxed li.is-active a, .hero.is-warning .tabs.is-boxed li.is-active a:hover, .hero.is-warning .tabs.is-toggle li.is-active a, .hero.is-warning .tabs.is-toggle li.is-active a:hover {
+ background-color: rgba(0, 0, 0, 0.7);
+ border-color: rgba(0, 0, 0, 0.7);
+ color: #ffdd57;
+}
+
+.hero.is-warning.is-bold {
+ background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-warning.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #ffaf24 0%, #ffdd57 71%, #fffa70 100%);
+ }
+}
+
+.hero.is-danger {
+ background-color: #f14668;
+ color: #fff;
+}
+
+.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),
+.hero.is-danger strong {
+ color: inherit;
+}
+
+.hero.is-danger .title {
+ color: #fff;
+}
+
+.hero.is-danger .subtitle {
+ color: rgba(255, 255, 255, 0.9);
+}
+
+.hero.is-danger .subtitle a:not(.button),
+.hero.is-danger .subtitle strong {
+ color: #fff;
+}
+
+@media screen and (max-width: 1023px) {
+ .hero.is-danger .navbar-menu {
+ background-color: #f14668;
+ }
+}
+
+.hero.is-danger .navbar-item,
+.hero.is-danger .navbar-link {
+ color: rgba(255, 255, 255, 0.7);
+}
+
+.hero.is-danger a.navbar-item:hover, .hero.is-danger a.navbar-item.is-active,
+.hero.is-danger .navbar-link:hover,
+.hero.is-danger .navbar-link.is-active {
+ background-color: #ef2e55;
+ color: #fff;
+}
+
+.hero.is-danger .tabs a {
+ color: #fff;
+ opacity: 0.9;
+}
+
+.hero.is-danger .tabs a:hover {
+ opacity: 1;
+}
+
+.hero.is-danger .tabs li.is-active a {
+ opacity: 1;
+}
+
+.hero.is-danger .tabs.is-boxed a, .hero.is-danger .tabs.is-toggle a {
+ color: #fff;
+}
+
+.hero.is-danger .tabs.is-boxed a:hover, .hero.is-danger .tabs.is-toggle a:hover {
+ background-color: rgba(10, 10, 10, 0.1);
+}
+
+.hero.is-danger .tabs.is-boxed li.is-active a, .hero.is-danger .tabs.is-boxed li.is-active a:hover, .hero.is-danger .tabs.is-toggle li.is-active a, .hero.is-danger .tabs.is-toggle li.is-active a:hover {
+ background-color: #fff;
+ border-color: #fff;
+ color: #f14668;
+}
+
+.hero.is-danger.is-bold {
+ background-image: linear-gradient(141deg, #fa0a62 0%, #f14668 71%, #f7595f 100%);
+}
+
+@media screen and (max-width: 768px) {
+ .hero.is-danger.is-bold .navbar-menu {
+ background-image: linear-gradient(141deg, #fa0a62 0%, #f14668 71%, #f7595f 100%);
+ }
+}
+
+.hero.is-small .hero-body {
+ padding: 1.5rem;
+}
+
+@media screen and (min-width: 769px), print {
+ .hero.is-medium .hero-body {
+ padding: 9rem 1.5rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .hero.is-large .hero-body {
+ padding: 18rem 1.5rem;
+ }
+}
+
+.hero.is-halfheight .hero-body, .hero.is-fullheight .hero-body, .hero.is-fullheight-with-navbar .hero-body {
+ align-items: center;
+ display: flex;
+}
+
+.hero.is-halfheight .hero-body > .container, .hero.is-fullheight .hero-body > .container, .hero.is-fullheight-with-navbar .hero-body > .container {
+ flex-grow: 1;
+ flex-shrink: 1;
+}
+
+.hero.is-halfheight {
+ min-height: 50vh;
+}
+
+.hero.is-fullheight {
+ min-height: 100vh;
+}
+
+.hero-video {
+ overflow: hidden;
+}
+
+.hero-video video {
+ left: 50%;
+ min-height: 100%;
+ min-width: 100%;
+ position: absolute;
+ top: 50%;
+ transform: translate3d(-50%, -50%, 0);
+}
+
+.hero-video.is-transparent {
+ opacity: 0.3;
+}
+
+@media screen and (max-width: 768px) {
+ .hero-video {
+ display: none;
+ }
+}
+
+.hero-buttons {
+ margin-top: 1.5rem;
+}
+
+@media screen and (max-width: 768px) {
+ .hero-buttons .button {
+ display: flex;
+ }
+ .hero-buttons .button:not(:last-child) {
+ margin-bottom: 0.75rem;
+ }
+}
+
+@media screen and (min-width: 769px), print {
+ .hero-buttons {
+ display: flex;
+ justify-content: center;
+ }
+ .hero-buttons .button:not(:last-child) {
+ margin-right: 1.5rem;
+ }
+}
+
+.hero-head,
+.hero-foot {
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.hero-body {
+ flex-grow: 1;
+ flex-shrink: 0;
+ padding: 3rem 1.5rem;
+}
+
+.section {
+ padding: 3rem 1.5rem;
+}
+
+@media screen and (min-width: 1024px) {
+ .section.is-medium {
+ padding: 9rem 1.5rem;
+ }
+ .section.is-large {
+ padding: 18rem 1.5rem;
+ }
+}
+
+.footer {
+ background-color: #fafafa;
+ padding: 3rem 1.5rem 6rem;
+}
+/*# sourceMappingURL=bulma.css.map */ \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css.map b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css.map
new file mode 100644
index 0000000..0546370
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["../bulma.sass","../sass/utilities/_all.sass","../sass/utilities/animations.sass","bulma.css","../sass/utilities/mixins.sass","../sass/utilities/initial-variables.sass","../sass/utilities/controls.sass","../sass/base/_all.sass","../sass/base/minireset.sass","../sass/base/generic.sass","../sass/utilities/derived-variables.sass","../sass/elements/_all.sass","../sass/elements/box.sass","../sass/elements/button.sass","../sass/utilities/functions.sass","../sass/elements/container.sass","../sass/elements/content.sass","../sass/elements/icon.sass","../sass/elements/image.sass","../sass/elements/notification.sass","../sass/elements/progress.sass","../sass/elements/table.sass","../sass/elements/tag.sass","../sass/elements/title.sass","../sass/elements/other.sass","../sass/form/_all.sass","../sass/form/shared.sass","../sass/form/input-textarea.sass","../sass/form/checkbox-radio.sass","../sass/form/select.sass","../sass/form/file.sass","../sass/form/tools.sass","../sass/components/_all.sass","../sass/components/breadcrumb.sass","../sass/components/card.sass","../sass/components/dropdown.sass","../sass/components/level.sass","../sass/components/media.sass","../sass/components/menu.sass","../sass/components/message.sass","../sass/components/modal.sass","../sass/components/navbar.sass","../sass/components/pagination.sass","../sass/components/panel.sass","../sass/components/tabs.sass","../sass/grid/_all.sass","../sass/grid/columns.sass","../sass/grid/tiles.sass","../sass/helpers/_all.sass","../sass/helpers/color.sass","../sass/helpers/flexbox.sass","../sass/helpers/float.sass","../sass/helpers/other.sass","../sass/helpers/overflow.sass","../sass/helpers/position.sass","../sass/helpers/spacing.sass","../sass/helpers/typography.sass","../sass/helpers/visibility.sass","../sass/layout/_all.sass","../sass/layout/hero.sass","../sass/layout/section.sass","../sass/layout/footer.sass"],"names":[],"mappings":"AACA,6DAAA;ACDA,oBAAA;ACAA;EACE;IACE,uBAAuB;ECGzB;EDFA;IACE,yBAAyB;ECI3B;AACF;ADTA;EACE;IACE,uBAAuB;ECGzB;EDFA;IACE,yBAAyB;ECI3B;AACF;;AC0JA;;;;EANE,2BAA2B;EAC3B,yBAAyB;EACzB,sBAAsB;EACtB,qBAAqB;EACrB,iBAAiB;AD7InB;;ACkKA;EAfE,6BAD8B;EAE9B,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,YAAY;EACZ,cAAc;EACd,eAAe;EACf,qBAAqB;EACrB,oBAAoB;EACpB,kBAAkB;EAClB,QAAQ;EACR,yBAAyB;EACzB,wBAAwB;EACxB,cAAc;AD/IhB;;ACqJE;;EACE,qBC3IkB;AFNtB;;ACwNA;EAhEE,qBAAqB;EACrB,wBAAwB;EACxB,uCClM2B;EDmM3B,YAAY;EACZ,uBC/HuB;EDgIvB,eAAe;EACf,oBAAoB;EACpB,qBAAqB;EACrB,YAAY;EACZ,cAAc;EACd,YAAY;EACZ,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,aAAa;EACb,kBAAkB;EAClB,mBAAmB;EACnB,WAAW;ADpJb;;ACqJE;EAEE,uBCzM2B;ED0M3B,WAAW;EACX,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,0DAA0D;EAC1D,+BAA+B;ADnJnC;;ACoJE;EACE,WAAW;EACX,UAAU;ADjJd;;ACkJE;EACE,WAAW;EACX,UAAU;AD/Id;;ACgJE;EAEE,uCCtOyB;AFwF7B;;AC+IE;EACE,uCCxOyB;AF4F7B;;AC8IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;AD3If;;AC4IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;ADzIf;;AC0IE;EACE,YAAY;EACZ,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,WAAW;ADvIf;;ACwJA;EAXE,mDAA2C;UAA3C,2CAA2C;EAC3C,yBC7P4B;ED8P5B,uBCjMuB;EDkMvB,+BAA+B;EAC/B,6BAA6B;EAC7B,WAAW;EACX,cAAc;EACd,WAAW;EACX,kBAAkB;EAClB,UAAU;ADzIZ;;ACqJA;;;;;;;;;;;;;;;;;EANE,SADuB;EAEvB,OAFuB;EAGvB,kBAAkB;EAClB,QAJuB;EAKvB,MALuB;ADtHzB;;AGvHA;;;;;EA3BE,qBAAqB;EACrB,wBAAwB;EACxB,mBAAmB;EACnB,6BAA+C;EAC/C,kBDqDU;ECpDV,gBAAgB;EAChB,oBAAoB;EACpB,eDkBW;ECjBX,aAfoB;EAgBpB,2BAA2B;EAC3B,gBAhBuB;EAiBvB,iCAf+D;EAgB/D,gCAfkE;EAgBlE,iCAhBkE;EAiBlE,8BAlB+D;EAmB/D,kBAAkB;EAClB,mBAAmB;AH0JrB;;AGxJE;;;;;;;;;;;;;;;;;EAIE,aAAa;AHwKjB;;AGvKE;;;;;;;;;;;;;;;;EAEE,mBAAmB;AHwLvB;;AI7NA,eAAA;ACAA,0EAAA;AAEA;;;;;;;;;;;;;;;;;;;;;;;EAuBE,SAAS;EACT,UAAU;ALgOZ;;AK7NA;;;;;;EAME,eAAe;EACf,mBAAmB;ALgOrB;;AK7NA;EACE,gBAAgB;ALgOlB;;AK7NA;;;;EAIE,SAAS;ALgOX;;AK7NA;EACE,sBAAsB;ALgOxB;;AK9NA;EAII,mBAAmB;AL8NvB;;AK3NA;;EAEE,YAAY;EACZ,eAAe;AL8NjB;;AK3NA;EACE,SAAS;AL8NX;;AK3NA;EACE,yBAAyB;EACzB,iBAAiB;AL8NnB;;AK5NA;;EAEE,UAAU;AL+NZ;;AKjOA;;EAII,mBAAmB;ALkOvB;;AK9PA;EClBE,uBJjB6B;EIkB7B,eAhCc;EAiCd,kCAAkC;EAClC,mCAAmC;EACnC,gBAlCoB;EAmCpB,kBAhCsB;EAiCtB,kBAhCsB;EAiCtB,kCApCiC;EAqCjC,8BAAsB;KAAtB,2BAAsB;MAAtB,0BAAsB;UAAtB,sBAAsB;ANoRxB;;AMlRA;;;;;;;EAOE,cAAc;ANqRhB;;AMnRA;;;;;;EAME,oLJ7ByL;AFmT3L;;AMpRA;;EAEE,6BAA6B;EAC7B,4BAA4B;EAC5B,sBJlC0B;AFyT5B;;AMrRA;EACE,cJ3D4B;EI4D5B,cA1DkB;EA2DlB,gBJ3BiB;EI4BjB,gBA1DoB;ANkVtB;;AMpRA;EACE,cJpDgC;EIqDhC,eAAe;EACf,qBAAqB;ANuRvB;;AM1RA;EAKI,mBAAmB;ANyRvB;;AM9RA;EAOI,cJ1E0B;AFqW9B;;AMzRA;EACE,4BJtE4B;EIuE5B,cCpBsB;EDqBtB,kBArEiB;EAsEjB,mBAvEkB;EAwElB,4BAzEgC;ANqWlC;;AM1RA;EACE,4BJ7E4B;EI8E5B,YAAY;EACZ,cAAc;EACd,WAxEa;EAyEb,gBAxEkB;ANqWpB;;AM3RA;EACE,YAAY;EACZ,eAAe;AN8RjB;;AM5RA;;EAEE,wBAAwB;AN+R1B;;AM7RA;EACE,kBAvFuB;ANuXzB;;AM9RA;EACE,mBAAmB;EACnB,oBAAoB;ANiStB;;AM/RA;EACE,cJ1G4B;EI2G5B,gBJrEe;AFuWjB;;AM9RA;EACE,YAAY;ANiSd;;AM/RA;EL1DE,iCAAiC;EK4DjC,4BJ7G4B;EI8G5B,cJpH4B;EIqH5B,kBAjGqB;EAkGrB,gBAAgB;EAChB,uBAlG0B;EAmG1B,gBAAgB;EAChB,iBAAiB;ANkSnB;;AM1SA;EAUI,6BAA6B;EAC7B,mBAAmB;EACnB,cAvGoB;EAwGpB,UAAU;ANoSd;;AMlSA;;EAGI,mBAAmB;ANoSvB;;AMvSA;;EAKM,mBAAmB;ANuSzB;;AM5SA;EAOI,cJxI0B;AFib9B;;AQvbA,mBAAA;ACSA;EAEE,uBPI6B;EOH7B,kBP0DgB;EOzDhB,0FPX2B;EOY3B,cPP4B;EOQ5B,cAAc;EACd,gBAZmB;AT6brB;;AS/aA;EAGI,yEPC8B;AF+alC;;ASnbA;EAKI,oEPD8B;AFmblC;;AUzZA;EAGE,uBRpC6B;EQqC7B,qBR1C4B;EQ2C5B,iBPlDwB;EOmDxB,cRhD4B;EQiD5B,eAAe;EAGf,uBAAuB;EACvB,iCApD6D;EAqD7D,iBApD6B;EAqD7B,kBArD6B;EAsD7B,8BAvD6D;EAwD7D,kBAAkB;EAClB,mBAAmB;AVwZrB;;AUxaA;EAkBI,cAAc;AV0ZlB;;AU5aA;EAwBM,aAAa;EACb,YAAY;AVwZlB;;AUjbA;ETgGI,+BSrEwG;ETqExG,oBSpEgE;AV0ZpE;;AUtbA;ETgGI,mBSlEgE;ETkEhE,gCSjEwG;AV4Z5G;;AU3bA;EAiCM,+BAAmF;EACnF,gCAAoF;AV8Z1F;;AUhcA;EAsCI,qBR7E0B;EQ8E1B,cRjF0B;AF+e9B;;AUrcA;EA0CI,qBRpE8B;EQqE9B,cRrF0B;AFof9B;;AU1cA;EA6CM,kDRvE4B;AFwelC;;AU9cA;EAgDI,qBRzF0B;EQ0F1B,cR3F0B;AF6f9B;;AUndA;EAoDI,6BAA6B;EAC7B,yBAAyB;EACzB,cR/F0B;EQgG1B,0BAjF8B;AVoflC;;AU1dA;EA4DM,4BR/FwB;EQgGxB,cRvGwB;AFygB9B;;AU/dA;EAgEM,yBCH2B;EDI3B,cR3GwB;AF8gB9B;;AUpeA;;EAoEM,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;AVqatB;;AU3eA;EA2EM,uBR5GyB;EQ6GzB,yBAAyB;EACzB,cR3HuB;AF+hB7B;;AUjfA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,cRhIqB;AFqiB7B;;AUvfA;EAqFQ,yBAAyB;EACzB,cRpIqB;AF0iB7B;;AU5fA;EAwFU,mDRzHqB;AFiiB/B;;AUhgBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,cR3IqB;AFojB7B;;AUtgBA;;EAgGQ,uBRjIuB;EQkIvB,yBAAyB;EACzB,gBAAgB;AV2axB;;AU7gBA;EAoGQ,yBRlJqB;EQmJrB,YRtIuB;AFmjB/B;;AUlhBA;EAwGU,uBC3CuB;AXydjC;;AUthBA;;EA2GU,yBRzJmB;EQ0JnB,yBAAyB;EACzB,gBAAgB;EAChB,YR/IqB;AF+jB/B;;AU9hBA;EAiHU,gEAA4E;AVibtF;;AUliBA;EAmHQ,6BAA6B;EAC7B,mBRrJuB;EQsJvB,YRtJuB;AFykB/B;;AUxiBA;EA0HU,uBR3JqB;EQ4JrB,mBR5JqB;EQ6JrB,cR1KmB;AF4lB7B;;AU9iBA;EA+HY,4DAA8D;AVmb1E;;AUljBA;EAqIc,gEAA4E;AVib1F;;AUtjBA;;EAwIU,6BAA6B;EAC7B,mBR1KqB;EQ2KrB,gBAAgB;EAChB,YR5KqB;AF+lB/B;;AU9jBA;EA6IQ,6BAA6B;EAC7B,qBR5LqB;EQ6LrB,cR7LqB;AFknB7B;;AUpkBA;EAoJU,yBRlMmB;EQmMnB,YRtLqB;AF0mB/B;;AUzkBA;EA4Jc,4DAA8D;AVib5E;;AU7kBA;;EA+JU,6BAA6B;EAC7B,qBR9MmB;EQ+MnB,gBAAgB;EAChB,cRhNmB;AFmoB7B;;AUrlBA;EA2EM,yBRzHuB;EQ0HvB,yBAAyB;EACzB,YR9GyB;AF4nB/B;;AU3lBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,YRnHuB;AFkoB/B;;AUjmBA;EAqFQ,yBAAyB;EACzB,YRvHuB;AFuoB/B;;AUtmBA;EAwFU,gDRtImB;AFwpB7B;;AU1mBA;EA2FQ,uBC9ByB;ED+BzB,yBAAyB;EACzB,YR9HuB;AFipB/B;;AUhnBA;;EAgGQ,yBR9IqB;EQ+IrB,yBAAyB;EACzB,gBAAgB;AVqhBxB;;AUvnBA;EAoGQ,uBRrIuB;EQsIvB,cRnJqB;AF0qB7B;;AU5nBA;EAwGU,yBC3CuB;AXmkBjC;;AUhoBA;;EA2GU,uBR5IqB;EQ6IrB,yBAAyB;EACzB,gBAAgB;EAChB,cR5JmB;AFsrB7B;;AUxoBA;EAiHU,4DAA4E;AV2hBtF;;AU5oBA;EAmHQ,6BAA6B;EAC7B,qBRlKqB;EQmKrB,cRnKqB;AFgsB7B;;AUlpBA;EA0HU,yBRxKmB;EQyKnB,qBRzKmB;EQ0KnB,YR7JqB;AFyrB/B;;AUxpBA;EA+HY,gEAA8D;AV6hB1E;;AU5pBA;EAqIc,4DAA4E;AV2hB1F;;AUhqBA;;EAwIU,6BAA6B;EAC7B,qBRvLmB;EQwLnB,gBAAgB;EAChB,cRzLmB;AFstB7B;;AUxqBA;EA6IQ,6BAA6B;EAC7B,mBR/KuB;EQgLvB,YRhLuB;AF+sB/B;;AU9qBA;EAoJU,uBRrLqB;EQsLrB,cRnMmB;AFiuB7B;;AUnrBA;EA4Jc,gEAA8D;AV2hB5E;;AUvrBA;;EA+JU,6BAA6B;EAC7B,mBRjMqB;EQkMrB,gBAAgB;EAChB,YRnMqB;AFguB/B;;AU/rBA;EA2EM,4BR9GwB;EQ+GxB,yBAAyB;EACzB,yBC7Ce;AXqqBrB;;AUrsBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,yBClDa;AX2qBrB;;AU3sBA;EAqFQ,yBAAyB;EACzB,yBCtDa;AXgrBrB;;AUhtBA;EAwFU,mDR3HoB;AFuvB9B;;AUptBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,yBC7Da;AX0rBrB;;AU1tBA;;EAgGQ,4BRnIsB;EQoItB,yBAAyB;EACzB,gBAAgB;AV+nBxB;;AUjuBA;EAoGQ,oCCpEa;EDqEb,iBRxIsB;AFywB9B;;AUtuBA;EAwGU,oCC3CuB;AX6qBjC;;AU1uBA;;EA2GU,oCC3EW;ED4EX,yBAAyB;EACzB,gBAAgB;EAChB,iBRjJoB;AFqxB9B;;AUlvBA;EAiHU,sFAA4E;AVqoBtF;;AUtvBA;EAmHQ,6BAA6B;EAC7B,wBRvJsB;EQwJtB,iBRxJsB;AF+xB9B;;AU5vBA;EA0HU,4BR7JoB;EQ8JpB,wBR9JoB;EQ+JpB,yBC5FW;AXkuBrB;;AUlwBA;EA+HY,sEAA8D;AVuoB1E;;AUtwBA;EAqIc,sFAA4E;AVqoB1F;;AU1wBA;;EAwIU,6BAA6B;EAC7B,wBR5KoB;EQ6KpB,gBAAgB;EAChB,iBR9KoB;AFqzB9B;;AUlxBA;EA6IQ,6BAA6B;EAC7B,gCC9Ga;ED+Gb,yBC/Ga;AXwvBrB;;AUxxBA;EAoJU,oCCpHW;EDqHX,iBRxLoB;AFg0B9B;;AU7xBA;EA4Jc,sEAA8D;AVqoB5E;;AUjyBA;;EA+JU,6BAA6B;EAC7B,gCChIW;EDiIX,gBAAgB;EAChB,yBClIW;AXywBrB;;AUzyBA;EA2EM,yBRrHwB;EQsHxB,yBAAyB;EACzB,WC3CU;AX6wBhB;;AU/yBA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXmxBhB;;AUrzBA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXwxBhB;;AU1zBA;EAwFU,gDRlIoB;AFw2B9B;;AU9zBA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXkyBhB;;AUp0BA;;EAgGQ,yBR1IsB;EQ2ItB,yBAAyB;EACzB,gBAAgB;AVyuBxB;;AU30BA;EAoGQ,sBClEQ;EDmER,cR/IsB;AF03B9B;;AUh1BA;EAwGU,yBC3CuB;AXuxBjC;;AUp1BA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRxJoB;AFs4B9B;;AU51BA;EAiHU,0DAA4E;AV+uBtF;;AUh2BA;EAmHQ,6BAA6B;EAC7B,qBR9JsB;EQ+JtB,cR/JsB;AFg5B9B;;AUt2BA;EA0HU,yBRpKoB;EQqKpB,qBRrKoB;EQsKpB,WC1FM;AX00BhB;;AU52BA;EA+HY,gEAA8D;AVivB1E;;AUh3BA;EAqIc,0DAA4E;AV+uB1F;;AUp3BA;;EAwIU,6BAA6B;EAC7B,qBRnLoB;EQoLpB,gBAAgB;EAChB,cRrLoB;AFs6B9B;;AU53BA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXg2BhB;;AUl4BA;EAoJU,sBClHM;EDmHN,cR/LoB;AFi7B9B;;AUv4BA;EA4Jc,gEAA8D;AV+uB5E;;AU34BA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXi3BhB;;AUn5BA;EA2EM,yBRvG4B;EQwG5B,yBAAyB;EACzB,WC3CU;AXu3BhB;;AUz5BA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AX63BhB;;AU/5BA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXk4BhB;;AUp6BA;EAwFU,iDRpHwB;AFo8BlC;;AUx6BA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AX44BhB;;AU96BA;;EAgGQ,yBR5H0B;EQ6H1B,yBAAyB;EACzB,gBAAgB;AVm1BxB;;AUr7BA;EAoGQ,sBClEQ;EDmER,cRjI0B;AFs9BlC;;AU17BA;EAwGU,yBC3CuB;AXi4BjC;;AU97BA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cR1IwB;AFk+BlC;;AUt8BA;EAiHU,0DAA4E;AVy1BtF;;AU18BA;EAmHQ,6BAA6B;EAC7B,qBRhJ0B;EQiJ1B,cRjJ0B;AF4+BlC;;AUh9BA;EA0HU,yBRtJwB;EQuJxB,qBRvJwB;EQwJxB,WC1FM;AXo7BhB;;AUt9BA;EA+HY,gEAA8D;AV21B1E;;AU19BA;EAqIc,0DAA4E;AVy1B1F;;AU99BA;;EAwIU,6BAA6B;EAC7B,qBRrKwB;EQsKxB,gBAAgB;EAChB,cRvKwB;AFkgClC;;AUt+BA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AX08BhB;;AU5+BA;EAoJU,sBClHM;EDmHN,cRjLwB;AF6gClC;;AUj/BA;EA4Jc,gEAA8D;AVy1B5E;;AUr/BA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AX29BhB;;AU7/BA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXg9BrE;;AUlgCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXs9BrE;;AUxgCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AX49BrE;;AU9gCA;EA2EM,yBRrG4B;EQsG5B,yBAAyB;EACzB,WC3CU;AXk/BhB;;AUphCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXw/BhB;;AU1hCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AX6/BhB;;AU/hCA;EAwFU,kDRlHwB;AF6jClC;;AUniCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXugChB;;AUziCA;;EAgGQ,yBR1H0B;EQ2H1B,yBAAyB;EACzB,gBAAgB;AV88BxB;;AUhjCA;EAoGQ,sBClEQ;EDmER,cR/H0B;AF+kClC;;AUrjCA;EAwGU,yBC3CuB;AX4/BjC;;AUzjCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRxIwB;AF2lClC;;AUjkCA;EAiHU,0DAA4E;AVo9BtF;;AUrkCA;EAmHQ,6BAA6B;EAC7B,qBR9I0B;EQ+I1B,cR/I0B;AFqmClC;;AU3kCA;EA0HU,yBRpJwB;EQqJxB,qBRrJwB;EQsJxB,WC1FM;AX+iChB;;AUjlCA;EA+HY,gEAA8D;AVs9B1E;;AUrlCA;EAqIc,0DAA4E;AVo9B1F;;AUzlCA;;EAwIU,6BAA6B;EAC7B,qBRnKwB;EQoKxB,gBAAgB;EAChB,cRrKwB;AF2nClC;;AUjmCA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXqkChB;;AUvmCA;EAoJU,sBClHM;EDmHN,cR/KwB;AFsoClC;;AU5mCA;EA4Jc,gEAA8D;AVo9B5E;;AUhnCA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXslChB;;AUxnCA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AX2kCrE;;AU7nCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXilCrE;;AUnoCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXulCrE;;AUzoCA;EA2EM,yBRtG4B;EQuG5B,yBAAyB;EACzB,WC3CU;AX6mChB;;AU/oCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXmnChB;;AUrpCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXwnChB;;AU1pCA;EAwFU,kDRnHwB;AFyrClC;;AU9pCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXkoChB;;AUpqCA;;EAgGQ,yBR3H0B;EQ4H1B,yBAAyB;EACzB,gBAAgB;AVykCxB;;AU3qCA;EAoGQ,sBClEQ;EDmER,cRhI0B;AF2sClC;;AUhrCA;EAwGU,yBC3CuB;AXunCjC;;AUprCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRzIwB;AFutClC;;AU5rCA;EAiHU,0DAA4E;AV+kCtF;;AUhsCA;EAmHQ,6BAA6B;EAC7B,qBR/I0B;EQgJ1B,cRhJ0B;AFiuClC;;AUtsCA;EA0HU,yBRrJwB;EQsJxB,qBRtJwB;EQuJxB,WC1FM;AX0qChB;;AU5sCA;EA+HY,gEAA8D;AVilC1E;;AUhtCA;EAqIc,0DAA4E;AV+kC1F;;AUptCA;;EAwIU,6BAA6B;EAC7B,qBRpKwB;EQqKxB,gBAAgB;EAChB,cRtKwB;AFuvClC;;AU5tCA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXgsChB;;AUluCA;EAoJU,sBClHM;EDmHN,cRhLwB;AFkwClC;;AUvuCA;EA4Jc,gEAA8D;AV+kC5E;;AU3uCA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXitChB;;AUnvCA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXssCrE;;AUxvCA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AX4sCrE;;AU9vCA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXktCrE;;AUpwCA;EA2EM,yBRxG4B;EQyG5B,yBAAyB;EACzB,WC3CU;AXwuChB;;AU1wCA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AX8uChB;;AUhxCA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXmvChB;;AUrxCA;EAwFU,kDRrHwB;AFszClC;;AUzxCA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AX6vChB;;AU/xCA;;EAgGQ,yBR7H0B;EQ8H1B,yBAAyB;EACzB,gBAAgB;AVosCxB;;AUtyCA;EAoGQ,sBClEQ;EDmER,cRlI0B;AFw0ClC;;AU3yCA;EAwGU,yBC3CuB;AXkvCjC;;AU/yCA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cR3IwB;AFo1ClC;;AUvzCA;EAiHU,0DAA4E;AV0sCtF;;AU3zCA;EAmHQ,6BAA6B;EAC7B,qBRjJ0B;EQkJ1B,cRlJ0B;AF81ClC;;AUj0CA;EA0HU,yBRvJwB;EQwJxB,qBRxJwB;EQyJxB,WC1FM;AXqyChB;;AUv0CA;EA+HY,gEAA8D;AV4sC1E;;AU30CA;EAqIc,0DAA4E;AV0sC1F;;AU/0CA;;EAwIU,6BAA6B;EAC7B,qBRtKwB;EQuKxB,gBAAgB;EAChB,cRxKwB;AFo3ClC;;AUv1CA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AX2zChB;;AU71CA;EAoJU,sBClHM;EDmHN,cRlLwB;AF+3ClC;;AUl2CA;EA4Jc,gEAA8D;AV0sC5E;;AUt2CA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AX40ChB;;AU92CA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXi0CrE;;AUn3CA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXu0CrE;;AUz3CA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AX60CrE;;AU/3CA;EA2EM,yBRzG4B;EQ0G5B,yBAAyB;EACzB,yBC7Ce;AXq2CrB;;AUr4CA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,yBClDa;AX22CrB;;AU34CA;EAqFQ,yBAAyB;EACzB,yBCtDa;AXg3CrB;;AUh5CA;EAwFU,kDRtHwB;AFk7ClC;;AUp5CA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,yBC7Da;AX03CrB;;AU15CA;;EAgGQ,yBR9H0B;EQ+H1B,yBAAyB;EACzB,gBAAgB;AV+zCxB;;AUj6CA;EAoGQ,oCCpEa;EDqEb,cRnI0B;AFo8ClC;;AUt6CA;EAwGU,oCC3CuB;AX62CjC;;AU16CA;;EA2GU,oCC3EW;ED4EX,yBAAyB;EACzB,gBAAgB;EAChB,cR5IwB;AFg9ClC;;AUl7CA;EAiHU,sFAA4E;AVq0CtF;;AUt7CA;EAmHQ,6BAA6B;EAC7B,qBRlJ0B;EQmJ1B,cRnJ0B;AF09ClC;;AU57CA;EA0HU,yBRxJwB;EQyJxB,qBRzJwB;EQ0JxB,yBC5FW;AXk6CrB;;AUl8CA;EA+HY,gEAA8D;AVu0C1E;;AUt8CA;EAqIc,sFAA4E;AVq0C1F;;AU18CA;;EAwIU,6BAA6B;EAC7B,qBRvKwB;EQwKxB,gBAAgB;EAChB,cRzKwB;AFg/ClC;;AUl9CA;EA6IQ,6BAA6B;EAC7B,gCC9Ga;ED+Gb,yBC/Ga;AXw7CrB;;AUx9CA;EAoJU,oCCpHW;EDqHX,cRnLwB;AF2/ClC;;AU79CA;EA4Jc,gEAA8D;AVq0C5E;;AUj+CA;;EA+JU,6BAA6B;EAC7B,gCChIW;EDiIX,gBAAgB;EAChB,yBClIW;AXy8CrB;;AUz+CA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AX47CrE;;AU9+CA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AXk8CrE;;AUp/CA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXw8CrE;;AU1/CA;EA2EM,yBRnG2B;EQoG3B,yBAAyB;EACzB,WC3CU;AX89ChB;;AUhgDA;EAgFQ,yBCnByB;EDoBzB,yBAAyB;EACzB,WChDQ;AXo+ChB;;AUtgDA;EAqFQ,yBAAyB;EACzB,WCpDQ;AXy+ChB;;AU3gDA;EAwFU,kDRhHuB;AFuiDjC;;AU/gDA;EA2FQ,yBC9ByB;ED+BzB,yBAAyB;EACzB,WC3DQ;AXm/ChB;;AUrhDA;;EAgGQ,yBRxHyB;EQyHzB,yBAAyB;EACzB,gBAAgB;AV07CxB;;AU5hDA;EAoGQ,sBClEQ;EDmER,cR7HyB;AFyjDjC;;AUjiDA;EAwGU,yBC3CuB;AXw+CjC;;AUriDA;;EA2GU,sBCzEM;ED0EN,yBAAyB;EACzB,gBAAgB;EAChB,cRtIuB;AFqkDjC;;AU7iDA;EAiHU,0DAA4E;AVg8CtF;;AUjjDA;EAmHQ,6BAA6B;EAC7B,qBR5IyB;EQ6IzB,cR7IyB;AF+kDjC;;AUvjDA;EA0HU,yBRlJuB;EQmJvB,qBRnJuB;EQoJvB,WC1FM;AX2hDhB;;AU7jDA;EA+HY,gEAA8D;AVk8C1E;;AUjkDA;EAqIc,0DAA4E;AVg8C1F;;AUrkDA;;EAwIU,6BAA6B;EAC7B,qBRjKuB;EQkKvB,gBAAgB;EAChB,cRnKuB;AFqmDjC;;AU7kDA;EA6IQ,6BAA6B;EAC7B,kBC5GQ;ED6GR,WC7GQ;AXijDhB;;AUnlDA;EAoJU,sBClHM;EDmHN,cR7KuB;AFgnDjC;;AUxlDA;EA4Jc,gEAA8D;AVg8C5E;;AU5lDA;;EA+JU,6BAA6B;EAC7B,kBC9HM;ED+HN,gBAAgB;EAChB,WChIM;AXkkDhB;;AUpmDA;EAwKU,yBC/HsC;EDgItC,cCvH2D;AXujDrE;;AUzmDA;EA4KY,yBC/GqB;EDgHrB,yBAAyB;EACzB,cC5HyD;AX6jDrE;;AU/mDA;EAiLY,yBCpHqB;EDqHrB,yBAAyB;EACzB,cCjIyD;AXmkDrE;;AUrnDA;EATE,kBR6BgB;EQ5BhB,kBRFc;AFooDhB;;AU1nDA;EANE,eRLW;AFyoDb;;AU9nDA;EAJE,kBRRc;AF8oDhB;;AUloDA;EAFE,iBRXa;AFmpDf;;AUtoDA;;EAgMI,uBRjO2B;EQkO3B,qBRvO0B;EQwO1B,gBAtNyB;EAuNzB,YAtNyB;AViqD7B;;AU9oDA;EAqMI,aAAa;EACb,WAAW;AV68Cf;;AUnpDA;EAwMI,6BAA6B;EAC7B,oBAAoB;AV+8CxB;;AUxpDA;ETvCE,kBAAkB;EAKhB,2BAAiC;EACjC,0BAAgC;ES8O9B,6BAA6B;AVk9CnC;;AU/pDA;EA+MI,4BRlP0B;EQmP1B,qBRtP0B;EQuP1B,cRzP0B;EQ0P1B,gBAAgB;EAChB,oBAAoB;AVo9CxB;;AUvqDA;EAqNI,uBR9LqB;EQ+LrB,gCAA0D;EAC1D,iCAA2D;AVs9C/D;;AUp9CA;EACE,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,2BAA2B;AVu9C7B;;AU39CA;EAMI,qBAAqB;AVy9CzB;;AU/9CA;ETzHI,oBSiIwC;AV29C5C;;AUn+CA;EAUI,sBAAsB;AV69C1B;;AUv+CA;EAYI,mBAAmB;AV+9CvB;;AU3+CA;EAlOE,kBR6BgB;EQ5BhB,kBRFc;AFmtDhB;;AUh/CA;EA7NE,kBRRc;AFytDhB;;AUp/CA;EA3NE,iBRXa;AF8tDf;;AUx/CA;EA0BQ,4BAA4B;EAC5B,yBAAyB;AVk+CjC;;AU7/CA;EA6BQ,6BAA6B;EAC7B,0BAA0B;ETvJ9B,kBSwJwC;AVo+C5C;;AUngDA;ETzHI,eS0JqC;AVs+CzC;;AUvgDA;EAoCQ,UAAU;AVu+ClB;;AU3gDA;EA0CQ,UAAU;AVq+ClB;;AU/gDA;EA4CU,UAAU;AVu+CpB;;AUnhDA;EA8CQ,YAAY;EACZ,cAAc;AVy+CtB;;AUxhDA;EAiDI,uBAAuB;AV2+C3B;;AU5hDA;EAoDQ,oBAAoB;EACpB,qBAAqB;AV4+C7B;;AUjiDA;EAuDI,yBAAyB;AV8+C7B;;AUriDA;EA0DQ,oBAAoB;EACpB,qBAAqB;AV++C7B;;AYhzDA;EACE,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,WAAW;AZmzDb;;AYvzDA;EAMI,0BAA0B;EAC1B,kBV2CM;EU1CN,mBV0CM;EUzCN,WAAW;AZqzDf;;AChuDE;EW9FF;IAWI,gBAAuC;EZwzDzC;AACF;;AC5tDI;EWxGJ;IAcM,iBAAqE;EZ2zDzE;AACF;;ACntDI;EWvHJ;IAiBM,iBAAiE;EZ8zDrE;AACF;;ACnuDI;EW7GJ;IAoBM,iBAAqE;EZi0DzE;AACF;;AC1tDI;EW5HJ;IAuBM,iBAAiE;EZo0DrE;AACF;;Aa50DA;EAII,kBAAkB;Ab40DtB;;Aah1DA;;;;;;;EAcM,kBAAkB;Ab40DxB;;Aa11DA;;;;;;EAqBI,cXlC0B;EWmC1B,gBXEiB;EWDjB,kBAxC+B;Abs3DnC;;Aar2DA;EAyBI,cAAc;EACd,oBAAoB;Abg1DxB;;Aa12DA;EA4BM,eAAe;Abk1DrB;;Aa92DA;EA8BI,iBAAiB;EACjB,uBAAuB;Abo1D3B;;Aan3DA;EAiCM,oBAAoB;Abs1D1B;;Aav3DA;EAmCI,gBAAgB;EAChB,uBAAuB;Abw1D3B;;Aa53DA;EAsCM,oBAAoB;Ab01D1B;;Aah4DA;EAwCI,iBAAiB;EACjB,oBAAoB;Ab41DxB;;Aar4DA;EA2CI,kBAAkB;EAClB,uBAAuB;Ab81D3B;;Aa14DA;EA8CI,cAAc;EACd,kBAAkB;Abg2DtB;;Aa/4DA;EAiDI,4BXvD0B;EDmI1B,8BCtI0B;EW4D1B,qBAhEqC;Abk6DzC;;Aar5DA;EAqDI,4BAA4B;EZwE5B,gBYvEmC;EACnC,eAAe;Abo2DnB;;Aa35DA;EAyDM,wBAAwB;Abs2D9B;;Aa/5DA;EA2DQ,4BAA4B;Abw2DpC;;Aan6DA;EA6DQ,4BAA4B;Ab02DpC;;Aav6DA;EA+DQ,4BAA4B;Ab42DpC;;Aa36DA;EAiEQ,4BAA4B;Ab82DpC;;Aa/6DA;EAmEI,wBAAwB;EZ0DxB,gBYzDmC;EACnC,eAAe;Abg3DnB;;Aar7DA;EAuEM,uBAAuB;EACvB,iBAAiB;Abk3DvB;;Aa17DA;EA0EQ,uBAAuB;Abo3D/B;;Aa97DA;EZ6HI,gBYjDmC;Abs3DvC;;Aal8DA;EA8EI,gBAAgB;EAChB,iBAAiB;EACjB,kBAAkB;Abw3DtB;;Aax8DA;EAkFM,eAAe;Ab03DrB;;Aa58DA;EAoFM,kBAAkB;Ab43DxB;;Aah9DA;EAsFM,qBAAqB;Ab83D3B;;Aap9DA;EAwFM,kBAAkB;Abg4DxB;;Aax9DA;EZ2CE,iCAAiC;EYgD/B,gBAAgB;EAChB,qBAvG8B;EAwG9B,gBAAgB;EAChB,iBAAiB;Abk4DrB;;Aah+DA;;EAiGI,cAAc;Abo4DlB;;Aar+DA;EAmGI,WAAW;Abs4Df;;Aaz+DA;;EAsGM,yBX/GwB;EWgHxB,qBA/GmC;EAgHnC,qBA/GmC;EAgHnC,mBAAmB;Abw4DzB;;Aaj/DA;EA2GM,cXxHwB;AFkgE9B;;Aar/DA;EA6GQ,mBAAmB;Ab44D3B;;Aaz/DA;;EAiHQ,qBAtHsC;EAuHtC,cX/HsB;AF4gE9B;;Aa//DA;;EAsHQ,qBAzHsC;EA0HtC,cXpIsB;AFkhE9B;;AargEA;;EA6HY,sBAAsB;Ab64DlC;;Aa1gEA;EAgIM,aAAa;Ab84DnB;;Aa9gEA;EAmII,kBXhHY;AF+/DhB;;AalhEA;EAqII,kBXpHY;AFqgEhB;;AathEA;EAuII,iBXvHW;AF0gEf;;AcxiEA;EACE,mBAAmB;EACnB,oBAAoB;EACpB,uBAAuB;EACvB,cATsB;EAUtB,aAVsB;AdqjExB;;AchjEA;EAQI,YAZwB;EAaxB,WAbwB;AdyjE5B;;AcrjEA;EAWI,YAdyB;EAezB,WAfyB;Ad6jE7B;;Ac1jEA;EAcI,YAhBwB;EAiBxB,WAjBwB;AdikE5B;;AelkEA;EACE,cAAc;EACd,kBAAkB;AfqkEpB;;AevkEA;EAII,cAAc;EACd,YAAY;EACZ,WAAW;AfukEf;;Ae7kEA;EAQM,uBb6DmB;AF4gEzB;;AejlEA;EAUI,WAAW;Af2kEf;;AerlEA;;;;;;;;;;;;;;;;;EA+BM,YAAY;EACZ,WAAW;Af0kEjB;;Ae1mEA;EAmCI,iBAAiB;Af2kErB;;Ae9mEA;EAqCI,gBAAgB;Af6kEpB;;AelnEA;EAuCI,gBAAgB;Af+kEpB;;AetnEA;EAyCI,qBAAqB;AfilEzB;;Ae1nEA;EA2CI,gBAAgB;AfmlEpB;;Ae9nEA;EA6CI,mBAAmB;AfqlEvB;;AeloEA;EA+CI,gBAAgB;AfulEpB;;AetoEA;EAiDI,qBAAqB;AfylEzB;;Ae1oEA;EAmDI,iBAAiB;Af2lErB;;Ae9oEA;EAqDI,sBAAsB;Af6lE1B;;AelpEA;EAuDI,iBAAiB;Af+lErB;;AetpEA;EAyDI,sBAAsB;AfimE1B;;Ae1pEA;EA2DI,sBAAsB;AfmmE1B;;Ae9pEA;EA6DI,iBAAiB;AfqmErB;;AelqEA;EA+DI,iBAAiB;AfumErB;;AetqEA;EAmEM,YAAwB;EACxB,WAAuB;AfumE7B;;Ae3qEA;EAmEM,YAAwB;EACxB,WAAuB;Af4mE7B;;AehrEA;EAmEM,YAAwB;EACxB,WAAuB;AfinE7B;;AerrEA;EAmEM,YAAwB;EACxB,WAAuB;AfsnE7B;;Ae1rEA;EAmEM,YAAwB;EACxB,WAAuB;Af2nE7B;;Ae/rEA;EAmEM,YAAwB;EACxB,WAAuB;AfgoE7B;;AepsEA;EAmEM,aAAwB;EACxB,YAAuB;AfqoE7B;;AgBlsEA;EAEE,4BdE4B;EcD5B,kBdyDU;EcxDV,kBAAkB;EAEhB,sCAXoD;AhB8sExD;;AgBzsEA;EAUI,mBAAmB;EACnB,0BAA0B;AhBmsE9B;;AgB9sEA;EAaI,mBAAmB;AhBqsEvB;;AgBltEA;;EAgBI,iBdV2B;AFitE/B;;AgBvtEA;EAkBI,uBAAuB;AhBysE3B;;AgB3tEA;Ef+II,ae3H4B;EAC5B,kBAAkB;EAClB,WAAW;AhB2sEf;;AgBjuEA;;;EA0BI,mBAAmB;AhB6sEvB;;AgBvuEA;EAgCM,uBd1ByB;Ec2BzB,cdxCuB;AFmvE7B;;AgB5uEA;EAgCM,yBdvCuB;EcwCvB,Yd3ByB;AF2uE/B;;AgBjvEA;EAgCM,4Bd5BwB;Ec6BxB,yBLsCe;AX+qErB;;AgBtvEA;EAgCM,yBdnCwB;EcoCxB,WLwCU;AXkrEhB;;AgB3vEA;EAgCM,yBdrB4B;EcsB5B,WLwCU;AXurEhB;;AgBhwEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX4qErE;;AgBrwEA;EAgCM,yBdnB4B;EcoB5B,WLwCU;AXisEhB;;AgB1wEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXsrErE;;AgB/wEA;EAgCM,yBdpB4B;EcqB5B,WLwCU;AX2sEhB;;AgBpxEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXgsErE;;AgBzxEA;EAgCM,yBdtB4B;EcuB5B,WLwCU;AXqtEhB;;AgB9xEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX0sErE;;AgBnyEA;EAgCM,yBdvB4B;EcwB5B,yBLsCe;AXiuErB;;AgBxyEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AXotErE;;AgB7yEA;EAgCM,yBdjB2B;EckB3B,WLwCU;AXyuEhB;;AgBlzEA;EAuCU,yBLyCsC;EKxCtC,cLiD2D;AX8tErE;;AiBxzEA;EAEE,qBAAqB;EACrB,wBAAwB;EACxB,YAAY;EACZ,uBf0DuB;EezDvB,cAAc;EACd,YfsBW;EerBX,gBAAgB;EAChB,UAAU;EACV,WAAW;AjB0zEb;;AiBp0EA;EAYI,yBfT2B;AFq0E/B;;AiBx0EA;EAcI,yBff0B;AF60E9B;;AiB50EA;EAgBI,yBfjB0B;AFi1E9B;;AiBh1EA;EAkBI,yBfnB0B;EeoB1B,YAAY;AjBk0EhB;;AiBr1EA;EAyBQ,uBflBuB;AFk1E/B;;AiBz1EA;EA2BQ,uBfpBuB;AFs1E/B;;AiB71EA;EA6BQ,uBftBuB;AF01E/B;;AiBj2EA;EA+BQ,mEAA2F;AjBs0EnG;;AiBr2EA;EAyBQ,yBf/BqB;AF+2E7B;;AiBz2EA;EA2BQ,yBfjCqB;AFm3E7B;;AiB72EA;EA6BQ,yBfnCqB;AFu3E7B;;AiBj3EA;EA+BQ,qEAA2F;AjBs1EnG;;AiBr3EA;EAyBQ,4BfpBsB;AFo3E9B;;AiBz3EA;EA2BQ,4BftBsB;AFw3E9B;;AiB73EA;EA6BQ,4BfxBsB;AF43E9B;;AiBj4EA;EA+BQ,wEAA2F;AjBs2EnG;;AiBr4EA;EAyBQ,yBf3BsB;AF24E9B;;AiBz4EA;EA2BQ,yBf7BsB;AF+4E9B;;AiB74EA;EA6BQ,yBf/BsB;AFm5E9B;;AiBj5EA;EA+BQ,qEAA2F;AjBs3EnG;;AiBr5EA;EAyBQ,yBfb0B;AF64ElC;;AiBz5EA;EA2BQ,yBff0B;AFi5ElC;;AiB75EA;EA6BQ,yBfjB0B;AFq5ElC;;AiBj6EA;EA+BQ,qEAA2F;AjBs4EnG;;AiBr6EA;EAyBQ,yBfX0B;AF25ElC;;AiBz6EA;EA2BQ,yBfb0B;AF+5ElC;;AiB76EA;EA6BQ,yBff0B;AFm6ElC;;AiBj7EA;EA+BQ,qEAA2F;AjBs5EnG;;AiBr7EA;EAyBQ,yBfZ0B;AF46ElC;;AiBz7EA;EA2BQ,yBfd0B;AFg7ElC;;AiB77EA;EA6BQ,yBfhB0B;AFo7ElC;;AiBj8EA;EA+BQ,qEAA2F;AjBs6EnG;;AiBr8EA;EAyBQ,yBfd0B;AF87ElC;;AiBz8EA;EA2BQ,yBfhB0B;AFk8ElC;;AiB78EA;EA6BQ,yBflB0B;AFs8ElC;;AiBj9EA;EA+BQ,qEAA2F;AjBs7EnG;;AiBr9EA;EAyBQ,yBff0B;AF+8ElC;;AiBz9EA;EA2BQ,yBfjB0B;AFm9ElC;;AiB79EA;EA6BQ,yBfnB0B;AFu9ElC;;AiBj+EA;EA+BQ,qEAA2F;AjBs8EnG;;AiBr+EA;EAyBQ,yBfTyB;AFy9EjC;;AiBz+EA;EA2BQ,yBfXyB;AF69EjC;;AiB7+EA;EA6BQ,yBfbyB;AFi+EjC;;AiBj/EA;EA+BQ,qEAA2F;AjBs9EnG;;AiBr/EA;EAkCI,gCAtCkC;UAsClC,wBAtCkC;EAuClC,2CAAmC;UAAnC,mCAAmC;EACnC,yCAAiC;UAAjC,iCAAiC;EACjC,yCAAiC;UAAjC,iCAAiC;EACjC,yBfnC2B;EeoC3B,qEAA0F;EAC1F,6BAA6B;EAC7B,4BAA4B;EAC5B,0BAA0B;AjBu9E9B;;AiBjgFA;EA4CM,6BAA6B;AjBy9EnC;;AiBrgFA;EA8CM,6BAA6B;AjB29EnC;;AiBzgFA;EAgDM,oBAAoB;AjB69E1B;;AiB7gFA;EAoDI,eftBY;AFm/EhB;;AiBjhFA;EAsDI,ef1BY;AFy/EhB;;AiBrhFA;EAwDI,cf7BW;AF8/Ef;;AiB/9EA;EACE;IACE,2BAA2B;EjBk+E7B;EiBj+EA;IACE,4BAA4B;EjBm+E9B;AACF;;AiBx+EA;EACE;IACE,2BAA2B;EjBk+E7B;EiBj+EA;IACE,4BAA4B;EjBm+E9B;AACF;;AkB/gFA;EAEE,uBhBd6B;EgBe7B,chBxB4B;AFyiF9B;;AkBphFA;;EAMI,yBhBvB0B;EgBwB1B,qBA9B6B;EA+B7B,qBA9B6B;EA+B7B,mBAAmB;AlBmhFvB;;AkB5hFA;;EAeQ,uBhB3BuB;EgB4BvB,mBhB5BuB;EgB6BvB,chB1CqB;AF4jF7B;;AkBniFA;;EAeQ,yBhBxCqB;EgByCrB,qBhBzCqB;EgB0CrB,YhB7BuB;AFsjF/B;;AkB1iFA;;EAeQ,4BhB7BsB;EgB8BtB,wBhB9BsB;EgB+BtB,yBPoCa;AX4/ErB;;AkBjjFA;;EAeQ,yBhBpCsB;EgBqCtB,qBhBrCsB;EgBsCtB,WPsCQ;AXigFhB;;AkBxjFA;;EAeQ,yBhBtB0B;EgBuB1B,qBhBvB0B;EgBwB1B,WPsCQ;AXwgFhB;;AkB/jFA;;EAeQ,yBhBpB0B;EgBqB1B,qBhBrB0B;EgBsB1B,WPsCQ;AX+gFhB;;AkBtkFA;;EAeQ,yBhBrB0B;EgBsB1B,qBhBtB0B;EgBuB1B,WPsCQ;AXshFhB;;AkB7kFA;;EAeQ,yBhBvB0B;EgBwB1B,qBhBxB0B;EgByB1B,WPsCQ;AX6hFhB;;AkBplFA;;EAeQ,yBhBxB0B;EgByB1B,qBhBzB0B;EgB0B1B,yBPoCa;AXsiFrB;;AkB3lFA;;EAeQ,yBhBlByB;EgBmBzB,qBhBnByB;EgBoBzB,WPsCQ;AX2iFhB;;AkBlmFA;;EAoBM,mBAAmB;EACnB,SAAS;AlBmlFf;;AkBxmFA;;EAuBM,yBhB9B4B;EgB+B5B,WP+BU;AXujFhB;;AkB9mFA;;;;EA2BQ,mBAAmB;AlB0lF3B;;AkBrnFA;;EA6BM,sBAAsB;AlB6lF5B;;AkB1nFA;EA+BI,chBpD0B;AFmpF9B;;AkB9nFA;EAiCM,mBAAmB;AlBimFzB;;AkBloFA;EAoCM,yBhB3C4B;EgB4C5B,WPkBU;AXglFhB;;AkBvoFA;;EAwCQ,mBAAmB;AlBomF3B;;AkB5oFA;;EA2CQ,kBPYQ;EOXR,mBAAmB;AlBsmF3B;;AkBlpFA;EA8CI,6BA5DqC;AlBoqFzC;;AkBtpFA;;EAiDM,qBApEgC;EAqEhC,chBvEwB;AFirF9B;;AkB5pFA;EAoDI,6BAhEqC;AlB4qFzC;;AkBhqFA;;EAuDM,qBAxEgC;EAyEhC,chB7EwB;AF2rF9B;;AkBtqFA;EA0DI,6BAvEqC;AlBurFzC;;AkB1qFA;;EA+DU,sBAAsB;AlBgnFhC;;AkB/qFA;;EAoEM,iBAAiB;AlBgnFvB;;AkBprFA;;EAyEU,wBAAwB;AlBgnFlC;;AkBzrFA;EA2EI,WAAW;AlBknFf;;AkB7rFA;EAgFU,yBhB7FoB;AF8sF9B;;AkBjsFA;EAqFY,yBhBlGkB;AFktF9B;;AkBrsFA;EAuFc,4BhBrGgB;AFutF9B;;AkBzsFA;;EA2FM,qBAAqB;AlBmnF3B;;AkB9sFA;EAgGU,yBhB7GoB;AF+tF9B;;AkBhnFA;EjB/DE,iCAAiC;EiBkEjC,cAAc;EACd,kBAAkB;EAClB,eAAe;AlBknFjB;;AmB7uFA;EACE,mBAAmB;EACnB,aAAa;EACb,eAAe;EACf,2BAA2B;AnBgvF7B;;AmBpvFA;EAMI,qBAAqB;AnBkvFzB;;AmBxvFA;ElByII,oBkBjIwC;AnBovF5C;;AmB5vFA;EAUI,sBAAsB;AnBsvF1B;;AmBhwFA;EAYI,mBAAmB;AnBwvFvB;;AmBpwFA;EAgBM,ejBcO;AF0uFb;;AmBxwFA;EAmBM,kBjBUU;AF+uFhB;;AmB5wFA;EAqBI,uBAAuB;AnB2vF3B;;AmBhxFA;EAuBM,qBAAqB;EACrB,oBAAoB;AnB6vF1B;;AmBrxFA;EA0BI,yBAAyB;AnB+vF7B;;AmBzxFA;EA6BQ,mBAAmB;AnBgwF3B;;AmB7xFA;EA+BQ,eAAe;AnBkwFvB;;AmBjyFA;ElByII,ekBvGmC;AnBmwFvC;;AmBryFA;ElByII,ckBrGqC;EAE/B,yBAAyB;EACzB,4BAA4B;AnBowFtC;;AmB3yFA;EA6CU,0BAA0B;EAC1B,6BAA6B;AnBkwFvC;;AmB7vFA;EACE,mBAAmB;EACnB,4BjB/C4B;EiBgD5B,kBjBQU;EiBPV,cjBvD4B;EiBwD5B,oBAAoB;EACpB,kBjB1Bc;EiB2Bd,WAAW;EACX,uBAAuB;EACvB,gBAAgB;EAChB,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;AnBgwFrB;;AmB5wFA;ElBsFI,oBkBxEuC;ElBwEvC,uBkBvEyC;AnBkwF7C;;AmBjxFA;EAqBM,uBjBhEyB;EiBiEzB,cjB9EuB;AF80F7B;;AmBtxFA;EAqBM,yBjB7EuB;EiB8EvB,YjBjEyB;AFs0F/B;;AmB3xFA;EAqBM,4BjBlEwB;EiBmExB,yBRAe;AX0wFrB;;AmBhyFA;EAqBM,yBjBzEwB;EiB0ExB,WREU;AX6wFhB;;AmBryFA;EAqBM,yBjB3D4B;EiB4D5B,WREU;AXkxFhB;;AmB1yFA;EA4BU,yBRGsC;EQFtC,cRW2D;AXuwFrE;;AmB/yFA;EAqBM,yBjBzD4B;EiB0D5B,WREU;AX4xFhB;;AmBpzFA;EA4BU,yBRGsC;EQFtC,cRW2D;AXixFrE;;AmBzzFA;EAqBM,yBjB1D4B;EiB2D5B,WREU;AXsyFhB;;AmB9zFA;EA4BU,yBRGsC;EQFtC,cRW2D;AX2xFrE;;AmBn0FA;EAqBM,yBjB5D4B;EiB6D5B,WREU;AXgzFhB;;AmBx0FA;EA4BU,yBRGsC;EQFtC,cRW2D;AXqyFrE;;AmB70FA;EAqBM,yBjB7D4B;EiB8D5B,yBRAe;AX4zFrB;;AmBl1FA;EA4BU,yBRGsC;EQFtC,cRW2D;AX+yFrE;;AmBv1FA;EAqBM,yBjBvD2B;EiBwD3B,WREU;AXo0FhB;;AmB51FA;EA4BU,yBRGsC;EQFtC,cRW2D;AXyzFrE;;AmBj2FA;EAgCI,kBjBpDY;AFy3FhB;;AmBr2FA;EAkCI,ejBvDS;AF83Fb;;AmBz2FA;EAoCI,kBjB1DY;AFm4FhB;;AmB72FA;ElBsFI,qBkB/C0C;ElB+C1C,sBkB9C0C;AnB00F9C;;AmBl3FA;ElBsFI,qBkB5C0C;ElB4C1C,sBkB3C0C;AnB40F9C;;AmBv3FA;ElBsFI,qBkBzC0C;ElByC1C,sBkBxC0C;AnB80F9C;;AmB53FA;ElBsFI,gBkB7ImB;EAyGnB,UAAU;EACV,kBAAkB;EAClB,UAAU;AnB+0Fd;;AmBn4FA;EAuDM,8BAA8B;EAC9B,WAAW;EACX,cAAc;EACd,SAAS;EACT,kBAAkB;EAClB,QAAQ;EACR,0DAA0D;EAC1D,+BAA+B;AnBg1FrC;;AmB94FA;EAgEM,WAAW;EACX,UAAU;AnBk1FhB;;AmBn5FA;EAmEM,WAAW;EACX,UAAU;AnBo1FhB;;AmBx5FA;EAuEM,yBAAmD;AnBq1FzD;;AmB55FA;EAyEM,yBAAoD;AnBu1F1D;;AmBh6FA;EA2EI,uBjB9DqB;AFu5FzB;;AmBv1FA;EAEI,0BAA0B;AnBy1F9B;;AoB/8FA;;EAGE,sBAAsB;ApBi9FxB;;AoBp9FA;;;;EAMI,oBAAoB;ApBq9FxB;;AoB39FA;;EAQI,iBApBmB;ApB4+FvB;;AoBh+FA;;EAUI,iBArBmB;ApBg/FvB;;AoBr+FA;;EAYI,sBAAsB;ApB89F1B;;AoB59FA;EACE,clB5B4B;EkB+B5B,elBHW;EkBIX,gBlBKmB;EkBJnB,kBAnCuB;ApBggGzB;;AoBn+FA;EAQI,cApCwB;EAqCxB,oBApCyB;ApBmgG7B;;AoBx+FA;EAWI,oBAAoB;ApBi+FxB;;AoB5+FA;EAaI,oBA7B+B;ApBggGnC;;AoBh/FA;EAkBM,elBnBO;AFq/Fb;;AoBp/FA;EAkBM,iBlBlBS;AFw/Ff;;AoBx/FA;EAkBM,elBjBO;AF2/Fb;;AoB5/FA;EAkBM,iBlBhBS;AF8/Ff;;AoBhgGA;EAkBM,kBlBfU;AFigGhB;;AoBpgGA;EAkBM,elBdO;AFogGb;;AoBxgGA;EAkBM,kBlBbU;AFugGhB;;AoBx/FA;EACE,clB/C4B;EkBkD5B,kBlBrBc;EkBsBd,gBlBjBiB;EkBkBjB,iBA7CyB;ApBsiG3B;;AoB//FA;EAQI,clBvD0B;EkBwD1B,gBlBnBiB;AF8gGrB;;AoBpgGA;EAWI,oBA/C+B;ApB4iGnC;;AoBxgGA;EAgBM,elBrCO;AFiiGb;;AoB5gGA;EAgBM,iBlBpCS;AFoiGf;;AoBhhGA;EAgBM,elBnCO;AFuiGb;;AoBphGA;EAgBM,iBlBlCS;AF0iGf;;AoBxhGA;EAgBM,kBlBjCU;AF6iGhB;;AoB5hGA;EAgBM,elBhCO;AFgjGb;;AoBhiGA;EAgBM,kBlB/BU;AFmjGhB;;AqBnlGA;EACE,cAAc;EACd,eAAe;EACf,mBAAmB;EACnB,kBAAkB;EAClB,yBAAyB;ArBslG3B;;AqBplGA;EAEE,gBnB0BiB;EmBzBjB,eAAe;EACf,gBAAgB;EAChB,UAAU;ArBslGZ;;AqB3lGA;EAOI,cAAc;EACd,eAAe;ArBwlGnB;;AqBnlGA;EACE,mBAAmB;EACnB,4BnBf4B;EmBgB5B,uBnB0CuB;EmBzCvB,oBAAoB;EACpB,kBnBKc;EmBJd,WAAW;EACX,uBAAuB;EACvB,oBAAoB;EACpB,gBAAgB;EAChB,uBAAuB;EACvB,kBAAkB;EAClB,mBAAmB;ArBslGrB;;AsB5nGA,eAAA;ACuDA;EAxBE,uBrBhB6B;EqBiB7B,qBrBtB4B;EqBuB5B,kBrBoCU;EqBnCV,crB5B4B;AF8nG9B;;ACjkGI;EsB/BA,4BrB9B0B;AFkoG9B;;ACrkGI;EsB/BA,4BrB9B0B;AFsoG9B;;ACzkGI;EsB/BA,4BrB9B0B;AF0oG9B;;AC7kGI;EsB/BA,4BrB9B0B;AF8oG9B;;AuB/mGE;EAEE,qBrB9B0B;AF+oG9B;;AuBhnGE;EAIE,qBrBtB8B;EqBuB9B,kDrBvB8B;AFuoGlC;;AuB/mGE;;;;;EAEE,4BrBnC0B;EqBoC1B,wBrBpC0B;EqBqC1B,gBAAgB;EAChB,crB3C0B;AFgqG9B;;ACrmGI;;;;;EsBdE,+BrB7CwB;AFwqG9B;;AC7mGI;;;;;EsBdE,+BrB7CwB;AFgrG9B;;ACrnGI;;;;;EsBdE,+BrB7CwB;AFwrG9B;;AC7nGI;;;;;EsBdE,+BrB7CwB;AFgsG9B;;AwBlsGA;EAEE,2DtBN2B;EsBO3B,eAAe;EACf,WAAW;AxBosGb;;AwBnsGE;EACE,gBAAgB;AxBssGpB;;AwBlsGI;EACE,mBtBFyB;AFusG/B;;AwBtsGK;EAMG,mDtBPuB;AF2sG/B;;AwB1sGI;EACE,qBtBfuB;AF4tG7B;;AwB9sGK;EAMG,gDtBpBqB;AFguG7B;;AwBltGI;EACE,wBtBJwB;AFytG9B;;AwBttGK;EAMG,mDtBTsB;AF6tG9B;;AwB1tGI;EACE,qBtBXwB;AFwuG9B;;AwB9tGK;EAMG,gDtBhBsB;AF4uG9B;;AwBluGI;EACE,qBtBG4B;AFkuGlC;;AwBtuGK;EAMG,iDtBF0B;AFsuGlC;;AwB1uGI;EACE,qBtBK4B;AFwuGlC;;AwB9uGK;EAMG,kDtBA0B;AF4uGlC;;AwBlvGI;EACE,qBtBI4B;AFivGlC;;AwBtvGK;EAMG,kDtBD0B;AFqvGlC;;AwB1vGI;EACE,qBtBE4B;AF2vGlC;;AwB9vGK;EAMG,kDtBH0B;AF+vGlC;;AwBlwGI;EACE,qBtBC4B;AFowGlC;;AwBtwGK;EAMG,kDtBJ0B;AFwwGlC;;AwB1wGI;EACE,qBtBO2B;AFswGjC;;AwB9wGK;EAMG,kDtBEyB;AF0wGjC;;AwB1wGE;ErBoBA,kBDwBgB;ECvBhB,kBDPc;AFiwGhB;;AwB7wGE;ErBqBA,kBDXc;AFuwGhB;;AwB/wGE;ErBqBA,iBDda;AF4wGf;;AwBhxGE;EACE,cAAc;EACd,WAAW;AxBmxGf;;AwBlxGE;EACE,eAAe;EACf,WAAW;AxBqxGf;;AwBnxGA;EAGI,uBtB8BqB;EsB7BrB,gDAA4D;EAC5D,iDAA6D;AxBoxGjE;;AwBzxGA;EAOI,6BAA6B;EAC7B,yBAAyB;EACzB,gBAAgB;EAChB,eAAe;EACf,gBAAgB;AxBsxGpB;;AwBpxGA;EAEE,cAAc;EACd,eAAe;EACf,eAAe;EACf,2BrB/CkE;EqBgDlE,gBAAgB;AxBsxGlB;;AwB5xGA;EAQI,gBA1DsB;EA2DtB,eA1DqB;AxBk1GzB;;AwBjyGA;EAWI,eAAe;AxB0xGnB;;AwBryGA;EAcI,YAAY;AxB2xGhB;;AyB51GA;EACE,eAAe;EACf,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;AzB+1GpB;;AyB91GE;EACE,eAAe;AzBi2GnB;;AyBh2GE;EACE,cvBF0B;AFq2G9B;;AyBl2GE;;;;;EAGE,cvBJ0B;EuBK1B,mBAAmB;AzBu2GvB;;AyBl2GA;ExB8HI,kBwB3HqC;AzBm2GzC;;A0Bt3GA;EACE,qBAAqB;EACrB,eAAe;EACf,kBAAkB;EAClB,mBAAmB;A1By3GrB;;A0B73GA;EAMI,avBHkB;AH83GtB;;A0Bj4GA;EAUM,qBxBU4B;EDkI9B,cyB3I+B;EAC7B,UAAU;A1B23GhB;;A0Bv4GA;EAeM,uBxBsDmB;EDyErB,iByB9HsC;A1B43G1C;;A0B54GA;EAmBI,eAAe;EACf,cAAc;EACd,cAAc;EACd,eAAe;EACf,aAAa;A1B63GjB;;A0Bp5GA;EAyBM,aAAa;A1B+3GnB;;A0Bx5GA;;EA4BM,wBxBjBwB;AFk5G9B;;A0B75GA;EzB8II,oByBhHwC;A1Bm4G5C;;A0Bj6GA;EAgCM,YAAY;EACZ,UAAU;A1Bq4GhB;;A0Bt6GA;EAmCQ,kBAAkB;A1Bu4G1B;;A0B16GA;EAuCM,qBxBnCwB;AF06G9B;;A0B96GA;EA6CQ,mBxBhCuB;AFq6G/B;;A0Bl7GA;EA+CQ,mBxBlCuB;AFy6G/B;;A0Bt7GA;EAkDU,qBfyDuB;AX+0GjC;;A0B17GA;EAuDU,mDxB1CqB;AFi7G/B;;A0B97GA;EA6CQ,qBxB7CqB;AFk8G7B;;A0Bl8GA;EA+CQ,qBxB/CqB;AFs8G7B;;A0Bt8GA;EAkDU,mBfyDuB;AX+1GjC;;A0B18GA;EAuDU,gDxBvDmB;AF88G7B;;A0B98GA;EA6CQ,wBxBlCsB;AFu8G9B;;A0Bl9GA;EA+CQ,wBxBpCsB;AF28G9B;;A0Bt9GA;EAkDU,qBfyDuB;AX+2GjC;;A0B19GA;EAuDU,mDxB5CoB;AFm9G9B;;A0B99GA;EA6CQ,qBxBzCsB;AF89G9B;;A0Bl+GA;EA+CQ,qBxB3CsB;AFk+G9B;;A0Bt+GA;EAkDU,qBfyDuB;AX+3GjC;;A0B1+GA;EAuDU,gDxBnDoB;AF0+G9B;;A0B9+GA;EA6CQ,qBxB3B0B;AFg+GlC;;A0Bl/GA;EA+CQ,qBxB7B0B;AFo+GlC;;A0Bt/GA;EAkDU,qBfyDuB;AX+4GjC;;A0B1/GA;EAuDU,iDxBrCwB;AF4+GlC;;A0B9/GA;EA6CQ,qBxBzB0B;AF8+GlC;;A0BlgHA;EA+CQ,qBxB3B0B;AFk/GlC;;A0BtgHA;EAkDU,qBfyDuB;AX+5GjC;;A0B1gHA;EAuDU,kDxBnCwB;AF0/GlC;;A0B9gHA;EA6CQ,qBxB1B0B;AF+/GlC;;A0BlhHA;EA+CQ,qBxB5B0B;AFmgHlC;;A0BthHA;EAkDU,qBfyDuB;AX+6GjC;;A0B1hHA;EAuDU,kDxBpCwB;AF2gHlC;;A0B9hHA;EA6CQ,qBxB5B0B;AFihHlC;;A0BliHA;EA+CQ,qBxB9B0B;AFqhHlC;;A0BtiHA;EAkDU,qBfyDuB;AX+7GjC;;A0B1iHA;EAuDU,kDxBtCwB;AF6hHlC;;A0B9iHA;EA6CQ,qBxB7B0B;AFkiHlC;;A0BljHA;EA+CQ,qBxB/B0B;AFsiHlC;;A0BtjHA;EAkDU,qBfyDuB;AX+8GjC;;A0B1jHA;EAuDU,kDxBvCwB;AF8iHlC;;A0B9jHA;EA6CQ,qBxBvByB;AF4iHjC;;A0BlkHA;EA+CQ,qBxBzByB;AFgjHjC;;A0BtkHA;EAkDU,qBfyDuB;AX+9GjC;;A0B1kHA;EAuDU,kDxBjCuB;AFwjHjC;;A0B9kHA;EvB0CE,kBDwBgB;ECvBhB,kBDPc;AF+iHhB;;A0BnlHA;EvB6CE,kBDXc;AFqjHhB;;A0BvlHA;EvB+CE,iBDda;AF0jHf;;A0B3lHA;EAkEM,qBxB5DwB;AFylH9B;;A0B/lHA;EAoEI,WAAW;A1B+hHf;;A0BnmHA;EAsEM,WAAW;A1BiiHjB;;A0BvmHA;EA0EM,aAAa;EACb,kBAAkB;EzB2EpB,cyB1E+B;EAC7B,YAAY;EACZ,eAAe;A1BiiHrB;;A0B/mHA;EAgFM,kBxB5CU;AF+kHhB;;A0BnnHA;EAkFM,kBxBhDU;AFqlHhB;;A0BvnHA;EAoFM,iBxBnDS;AF0lHf;;A2B9mHA;EAEE,oBAAoB;EACpB,aAAa;EACb,2BAA2B;EAC3B,kBAAkB;A3BgnHpB;;A2BrnHA;EAYQ,uBzBZuB;EyBavB,yBAAyB;EACzB,czB3BqB;AFwoH7B;;A2B3nHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,czBjCmB;AF8oH7B;;A2BjoHA;EAwBU,yBAAyB;EACzB,+CzBzBqB;EyB0BrB,czBvCmB;AFopH7B;;A2BvoHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,czB7CmB;AF0pH7B;;A2B7oHA;EAYQ,yBzBzBqB;EyB0BrB,yBAAyB;EACzB,YzBduB;AFmpH/B;;A2BnpHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,YzBpBqB;AFypH/B;;A2BzpHA;EAwBU,yBAAyB;EACzB,4CzBtCmB;EyBuCnB,YzB1BqB;AF+pH/B;;A2B/pHA;EA8BU,uBhBgEuB;EgB/DvB,yBAAyB;EACzB,YzBhCqB;AFqqH/B;;A2BrqHA;EAYQ,4BzBdsB;EyBetB,yBAAyB;EACzB,yBhBmDa;AX0mHrB;;A2B3qHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,yBhB6CW;AXgnHrB;;A2BjrHA;EAwBU,yBAAyB;EACzB,+CzB3BoB;EyB4BpB,yBhBuCW;AXsnHrB;;A2BvrHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,yBhBiCW;AX4nHrB;;A2B7rHA;EAYQ,yBzBrBsB;EyBsBtB,yBAAyB;EACzB,WhBqDQ;AXgoHhB;;A2BnsHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsoHhB;;A2BzsHA;EAwBU,yBAAyB;EACzB,4CzBlCoB;EyBmCpB,WhByCM;AX4oHhB;;A2B/sHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkpHhB;;A2BrtHA;EAYQ,yBzBP0B;EyBQ1B,yBAAyB;EACzB,WhBqDQ;AXwpHhB;;A2B3tHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AX8pHhB;;A2BjuHA;EAwBU,yBAAyB;EACzB,6CzBpBwB;EyBqBxB,WhByCM;AXoqHhB;;A2BvuHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AX0qHhB;;A2B7uHA;EAYQ,yBzBL0B;EyBM1B,yBAAyB;EACzB,WhBqDQ;AXgrHhB;;A2BnvHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsrHhB;;A2BzvHA;EAwBU,yBAAyB;EACzB,8CzBlBwB;EyBmBxB,WhByCM;AX4rHhB;;A2B/vHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXksHhB;;A2BrwHA;EAYQ,yBzBN0B;EyBO1B,yBAAyB;EACzB,WhBqDQ;AXwsHhB;;A2B3wHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AX8sHhB;;A2BjxHA;EAwBU,yBAAyB;EACzB,8CzBnBwB;EyBoBxB,WhByCM;AXotHhB;;A2BvxHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AX0tHhB;;A2B7xHA;EAYQ,yBzBR0B;EyBS1B,yBAAyB;EACzB,WhBqDQ;AXguHhB;;A2BnyHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsuHhB;;A2BzyHA;EAwBU,yBAAyB;EACzB,8CzBrBwB;EyBsBxB,WhByCM;AX4uHhB;;A2B/yHA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkvHhB;;A2BrzHA;EAYQ,yBzBT0B;EyBU1B,yBAAyB;EACzB,yBhBmDa;AX0vHrB;;A2B3zHA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,yBhB6CW;AXgwHrB;;A2Bj0HA;EAwBU,yBAAyB;EACzB,8CzBtBwB;EyBuBxB,yBhBuCW;AXswHrB;;A2Bv0HA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,yBhBiCW;AX4wHrB;;A2B70HA;EAYQ,yBzBHyB;EyBIzB,yBAAyB;EACzB,WhBqDQ;AXgxHhB;;A2Bn1HA;EAkBU,yBhB4EuB;EgB3EvB,yBAAyB;EACzB,WhB+CM;AXsxHhB;;A2Bz1HA;EAwBU,yBAAyB;EACzB,8CzBhBuB;EyBiBvB,WhByCM;AX4xHhB;;A2B/1HA;EA8BU,yBhBgEuB;EgB/DvB,yBAAyB;EACzB,WhBmCM;AXkyHhB;;A2Br2HA;EAmCI,kBzBZY;AFk1HhB;;A2Bz2HA;EAqCI,kBzBhBY;AFw1HhB;;A2B72HA;EAwCQ,eAAe;A3By0HvB;;A2Bj3HA;EA0CI,iBzBtBW;AFi2Hf;;A2Br3HA;EA6CQ,eAAe;A3B40HvB;;A2Bz3HA;EAiDM,6BAA6B;EAC7B,0BAA0B;A3B40HhC;;A2B93HA;EAoDM,4BAA4B;EAC5B,yBAAyB;A3B80H/B;;A2Bn4HA;EAwDQ,kBzBFI;AFi1HZ;;A2Bv4HA;EA0DQ,aAAa;A3Bi1HrB;;A2B34HA;EA6DM,sBAAsB;A3Bk1H5B;;A2B/4HA;EA+DM,sBAAsB;EACtB,YAAY;EACZ,gBAAgB;A3Bo1HtB;;A2Br5HA;EAmEM,uBAAuB;A3Bs1H7B;;A2Bz5HA;EAqEM,aAAa;EACb,YAAY;A3Bw1HlB;;A2B95HA;EAwEQ,eAAe;A3B01HvB;;A2Bl6HA;EA2EQ,eAAe;A3B21HvB;;A2Bt6HA;EA8EQ,eAAe;A3B41HvB;;A2B16HA;EAiFQ,eAAe;A3B61HvB;;A2B96HA;EAoFQ,0BAA4C;A3B81HpD;;A2Bl7HA;EAsFQ,0BzBhCI;EyBiCJ,uBAAuB;A3Bg2H/B;;A2Bv7HA;EAyFI,uBAAuB;A3Bk2H3B;;A2B37HA;EA4FM,WAAW;A3Bm2HjB;;A2B/7HA;EA8FM,YAAY;EACZ,eAAe;A3Bq2HrB;;A2Bp8HA;EAiGI,yBAAyB;A3Bu2H7B;;A2Bx8HA;EAmGM,0BAA4C;A3By2HlD;;A2B58HA;EAqGM,0BzB/CM;EyBgDN,2BAA2B;EAC3B,SAAS;A3B22Hf;;A2Bz2HA;EACE,oBAAoB;EACpB,aAAa;EACb,eAAe;EACf,2BAA2B;EAC3B,gBAAgB;EAChB,kBAAkB;A3B42HpB;;A2Bl3HA;EASM,yBhBpB2B;EgBqB3B,czB5HwB;AFy+H9B;;A2Bv3HA;EAYM,qBhBvB2B;AXs4HjC;;A2B33HA;EAeM,yBhB1B2B;EgB2B3B,czBlIwB;AFk/H9B;;A2Bh4HA;EAkBM,qBhB7B2B;AX+4HjC;;A2Bh3HA;EACE,YAAY;EACZ,OAAO;EACP,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,MAAM;EACN,WAAW;A3Bm3Hb;;A2Bj3HA;;EAGE,qBzB9I4B;EyB+I5B,kBzBpFU;EyBqFV,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,mBAAmB;A3Bm3HrB;;A2Bj3HA;EACE,4BzBnJ4B;EyBoJ5B,czB1J4B;AF8gI9B;;A2Bl3HA;EACE,qBzB1J4B;EyB2J5B,mBA5J4B;EA6J5B,2BA5JoC;EA6JpC,cAAc;EACd,eA7JwB;EA8JxB,gBAAgB;EAChB,mBAAmB;EACnB,uBAAuB;A3Bq3HzB;;A2Bn3HA;EACE,mBAAmB;EACnB,aAAa;EACb,WAAW;EACX,uBAAuB;E1BjCrB,mB0BkCmC;EACrC,UAAU;A3Bs3HZ;;A2B53HA;EAQI,eAAe;A3Bw3HnB;;A4BtiIA;EACE,c1BF4B;E0BG5B,cAAc;EACd,e1B2BW;E0B1BX,gB1BiCe;AFwgIjB;;A4B7iIA;EAMI,oBAAoB;A5B2iIxB;;A4BjjIA;EASI,kB1BsBY;AFshIhB;;A4BrjIA;EAWI,kB1BkBY;AF4hIhB;;A4BzjIA;EAaI,iB1BeW;AFiiIf;;A4B9iIA;EACE,cAAc;EACd,kB1Bcc;E0Bbd,mBAAmB;A5BijIrB;;A4BpjIA;EAOM,Y1BdyB;AF+jI/B;;A4BxjIA;EAOM,c1B3BuB;AFglI7B;;A4B5jIA;EAOM,iB1BhBwB;AFykI9B;;A4BhkIA;EAOM,c1BvBwB;AFolI9B;;A4BpkIA;EAOM,c1BT4B;AF0kIlC;;A4BxkIA;EAOM,c1BP4B;AF4kIlC;;A4B5kIA;EAOM,c1BR4B;AFilIlC;;A4BhlIA;EAOM,c1BV4B;AFulIlC;;A4BplIA;EAOM,c1BX4B;AF4lIlC;;A4BxlIA;EAOM,c1BL2B;AF0lIjC;;A4BjlIA;EAEI,sBAAsB;A5BmlI1B;;A4BrlIA;EAKI,aAAa;EACb,2BAA2B;A5BolI/B;;A4B1lIA;E3B+GI,kB2BtGwC;A5BqlI5C;;A4B9lIA;;;EAcU,gBAAgB;A5BslI1B;;A4BpmIA;;;EAoBY,6BAA6B;EAC7B,0BAA0B;A5BslItC;;A4B3mIA;;;EA8BY,4BAA4B;EAC5B,yBAAyB;A5BmlIrC;;A4BlnIA;;;;;EAyCY,UAAU;A5BilItB;;A4B1nIA;;;;;;;;;EA8CY,UAAU;A5BwlItB;;A4BtoIA;;;;;;;;;EAgDc,UAAU;A5BkmIxB;;A4BlpIA;EAkDQ,YAAY;EACZ,cAAc;A5BomItB;;A4BvpIA;EAqDM,uBAAuB;A5BsmI7B;;A4B3pIA;EAuDM,yBAAyB;A5BwmI/B;;A4B/pIA;EA0DQ,YAAY;EACZ,cAAc;A5BymItB;;A4BpqIA;EA6DI,aAAa;EACb,2BAA2B;A5B2mI/B;;A4BzqIA;EAgEM,cAAc;A5B6mIpB;;A4B7qIA;EAkEQ,gBAAgB;E3B6CpB,qB2B5C2C;A5B+mI/C;;A4BlrIA;EAqEQ,YAAY;EACZ,cAAc;A5BinItB;;A4BvrIA;EAwEM,uBAAuB;A5BmnI7B;;A4B3rIA;EA0EM,yBAAyB;A5BqnI/B;;A4B/rIA;EA4EM,eAAe;A5BunIrB;;A4BnsIA;EAgFU,sBAAsB;A5BunIhC;;A4BvsIA;EAkFQ,uBAAuB;A5BynI/B;;A4B3sIA;EAoFQ,gBAAgB;A5B2nIxB;;AC3pIE;E2BpDF;IAuFM,aAAa;E5B6nIjB;AACF;;A4B5nIA;EAEI,kBAAkB;A5B8nItB;;ACzqIE;E2ByCF;IAII,qBAAqB;E5BioIvB;AACF;;AC3qIE;E2BqCF;IAMI,aAAa;IACb,YAAY;IACZ,cAAc;I3Bcd,oB2BbsC;IACtC,iBAAiB;E5BqoInB;E4B/oIF;IAYM,kB1BhGU;I0BiGV,oBAAoB;E5BsoIxB;E4BnpIF;IAeM,oBAAoB;E5BuoIxB;E4BtpIF;IAiBM,kB1BvGU;I0BwGV,oBAAoB;E5BwoIxB;E4B1pIF;IAoBM,iB1B3GS;I0B4GT,oBAAoB;E5ByoIxB;AACF;;A4BxoIA;EAEI,gBAAgB;A5B0oIpB;;ACxsIE;E2B4DF;IAII,aAAa;IACb,aAAa;IACb,YAAY;IACZ,cAAc;E5B6oIhB;E4BppIF;IASM,gBAAgB;E5B8oIpB;E4BvpIF;IAWM,cAAc;E5B+oIlB;E4B1pIF;IAaQ,YAAY;E5BgpIlB;E4B7pIF;I3BDI,qB2BgB2C;E5BipI7C;AACF;;A4BhpIA;EACE,sBAAsB;EACtB,WAAW;EACX,e1BhIW;E0BiIX,kBAAkB;EAClB,mBAAmB;A5BmpIrB;;A4BxpIA;;;EAaU,c1BxKoB;AFyzI9B;;A4B9pIA;;;EAeQ,kB1B3IQ;AFgyIhB;;A4BpqIA;;;EAiBQ,kB1B/IQ;AFwyIhB;;A4B1qIA;;;EAmBQ,iB1BlJO;AF+yIf;;A4BhrIA;EAqBM,c1B7KwB;E0B8KxB,azBnLgB;EyBoLhB,oBAAoB;EACpB,kBAAkB;EAClB,MAAM;EACN,YzBvLgB;EyBwLhB,UAAU;A5B+pIhB;;A4B1rIA;;EA+BM,mBzB5LgB;AH41ItB;;A4B/rIA;EAiCM,OAAO;A5BkqIb;;A4BnsIA;;EAqCM,oBzBlMgB;AHq2ItB;;A4BxsIA;EAuCM,QAAQ;A5BqqId;;A4B5sIA;EA2CM,6BAA6B;E3BrD/B,c2BsD+B;EAC7B,YAAY;EACZ,UAAU;A5BqqIhB;;A4BntIA;EAgDM,kB1B5KU;AFm1IhB;;A4BvtIA;EAkDM,kB1BhLU;AFy1IhB;;A4B3tIA;EAoDM,iB1BnLS;AF81If;;A6Bj4IA,qBAAA;ACSA;EAGE,e5ByBW;E4BxBX,mBAAmB;A9B03IrB;;A8B93IA;EAMI,mBAAmB;EACnB,c5BM8B;E4BL9B,aAAa;EACb,uBAAuB;EACvB,iBAduC;A9B04I3C;;A8Bt4IA;EAYM,c5BfwB;AF64I9B;;A8B14IA;EAcI,mBAAmB;EACnB,aAAa;A9Bg4IjB;;A8B/4IA;E7BuII,e6BtHoC;A9Bk4IxC;;A8Bn5IA;EAoBQ,c5BvBsB;E4BwBtB,eAAe;EACf,oBAAoB;A9Bm4I5B;;A8Bz5IA;EAwBM,c5BxBwB;E4ByBxB,iBAAiB;A9Bq4IvB;;A8B95IA;;EA4BI,uBAAuB;EACvB,aAAa;EACb,eAAe;EACf,2BAA2B;A9Bu4I/B;;A8Bt6IA;E7BuII,mB6BrGuC;A9Bw4I3C;;A8B16IA;E7BuII,kB6BnGuC;A9B04I3C;;A8B96IA;;EAyCM,uBAAuB;A9B04I7B;;A8Bn7IA;;EA6CM,yBAAyB;A9B24I/B;;A8Bx7IA;EAgDI,kB5BnBY;AF+5IhB;;A8B57IA;EAkDI,kB5BvBY;AFq6IhB;;A8Bh8IA;EAoDI,iB5B1BW;AF06If;;A8Bp8IA;EAwDM,iBAAiB;A9Bg5IvB;;A8Bx8IA;EA2DM,iBAAiB;A9Bi5IvB;;A8B58IA;EA8DM,iBAAiB;A9Bk5IvB;;A8Bh9IA;EAiEM,iBAAiB;A9Bm5IvB;;A+Bx8IA;EACE,uB7BP6B;E6BQ7B,sBApBmB;EAqBnB,0F7BtB2B;E6BuB3B,c7BlB4B;E6BmB5B,eAAe;EACf,gBAvBoB;EAwBpB,kBAAkB;A/B28IpB;;A+Bz8IA;EACE,6BAzBwC;EA0BxC,oBAAoB;EACpB,kD7B/B2B;E6BgC3B,aAAa;A/B48If;;A+B18IA;EACE,mBAAmB;EACnB,c7BhC4B;E6BiC5B,aAAa;EACb,YAAY;EACZ,gB7BGe;E6BFf,qBAlCgC;A/B++IlC;;A+Bn9IA;EAQI,uBAAuB;A/B+8I3B;;A+B78IA;EACE,mBAAmB;EACnB,eAAe;EACf,aAAa;EACb,uBAAuB;EACvB,qBA3CgC;A/B2/IlC;;A+B98IA;EACE,cAAc;EACd,kBAAkB;A/Bi9IpB;;A+B/8IA;EACE,6BA9CyC;EA+CzC,eA9C2B;A/BggJ7B;;A+Bh9IA;EACE,6BA/CwC;EAgDxC,6B7BpD6B;E6BqD7B,oBAAoB;EACpB,aAAa;A/Bm9If;;A+Bj9IA;EACE,mBAAmB;EACnB,aAAa;EACb,aAAa;EACb,YAAY;EACZ,cAAc;EACd,uBAAuB;EACvB,gBAzD2B;A/B6gJ7B;;A+B39IA;E9B6EI,+BCrI2B;AFuhJ/B;;A+Bl9IA;EAEI,qB7BlCkB;AFs/ItB;;AgCnhJA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,mBAAmB;AhCshJrB;;AgCzhJA;EAOM,cAAc;AhCshJpB;;AgC7hJA;EAUM,UAAU;EACV,QAAQ;AhCuhJd;;AgCliJA;EAcM,YAAY;EACZ,mBA9BuB;EA+BvB,oBAAoB;EACpB,SAAS;AhCwhJf;;AgCthJA;EACE,aAAa;E/BiHX,O+BhHqB;EACvB,gBAzC6B;EA0C7B,gBAtC2B;EAuC3B,kBAAkB;EAClB,SAAS;EACT,WApCqB;AhC6jJvB;;AgCvhJA;EACE,uB9BjC6B;E8BkC7B,kB9BoBU;E8BnBV,0F9BhD2B;E8BiD3B,sBA9CsC;EA+CtC,mBA9CmC;AhCwkJrC;;AgB5jJgB;EgBqCd,c9BhD4B;E8BiD5B,cAAc;EACd,mBAAmB;EACnB,gBAAgB;EAChB,sBAAsB;EACtB,kBAAkB;AhC2hJpB;;AgCzhJA;;E/BkFI,mB+BhFmC;EACrC,mBAAmB;EACnB,mBAAmB;EACnB,WAAW;AhC4hJb;;AgCjiJA;;EAOI,4B9BxD0B;E8ByD1B,c9BpEyB;AFmmJ7B;;AgCviJA;;EAUI,yB9BlD8B;E8BmD9B,WrBSY;AXyhJhB;;AgChiJA;EACE,yB9BjE6B;E8BkE7B,YAAY;EACZ,cAAc;EACd,WAAW;EACX,gBAAgB;AhCmiJlB;;AiCjnJA;EAEE,mBAAmB;EACnB,8BAA8B;AjCmnJhC;;AiCtnJA;EAKI,kB/B8DQ;AFujJZ;;AiC1nJA;EAOI,qBAAqB;EACrB,mBAAmB;AjCunJvB;;AiC/nJA;EAWI,aAAa;AjCwnJjB;;AiCnoJA;;EAcM,aAAa;AjC0nJnB;;AiCxoJA;EAgBM,aAAa;AjC4nJnB;;AiC5oJA;EAmBQ,gBAAgB;EhC2HpB,qBgChJqC;AjCmpJzC;;AiCjpJA;EAsBQ,YAAY;AjC+nJpB;;AClkJE;EgCnFF;IAyBI,aAAa;EjCioJf;EiC1pJF;IA4BQ,YAAY;EjCioJlB;AACF;;AiChoJA;EACE,mBAAmB;EACnB,aAAa;EACb,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,uBAAuB;AjCmoJzB;;AiCzoJA;;EASI,gBAAgB;AjCqoJpB;;AC7lJE;EgCjDF;IAaM,sBA7CmC;EjCmrJvC;AACF;;AiCroJA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,cAAc;AjCwoJhB;;AiC5oJA;;EAQM,YAAY;AjCyoJlB;;AC3mJE;EgCtCF;;IhCiGI,qBgChJqC;EjCssJvC;AACF;;AiC1oJA;EACE,mBAAmB;EACnB,2BAA2B;AjC6oJ7B;;AC3nJE;EgCpBF;IAMM,kBAAkB;EjC8oJtB;AACF;;AC7nJE;EgCxBF;IAQI,aAAa;EjCkpJf;AACF;;AiCjpJA;EACE,mBAAmB;EACnB,yBAAyB;AjCopJ3B;;ACxoJE;EgCdF;IAKI,aAAa;EjCspJf;AACF;;AkC/tJA;EACE,uBAAuB;EACvB,aAAa;EACb,mBAAmB;AlCkuJrB;;AkCruJA;EAKI,sBAAsB;AlCouJ1B;;AkCzuJA;EAOI,8ChCD0B;EgCE1B,aAAa;EACb,oBAAoB;AlCsuJxB;;AkC/uJA;;EAYM,qBAAqB;AlCwuJ3B;;AkCpvJA;EAcM,mBAAmB;AlC0uJzB;;AkCxvJA;EAgBQ,kBAAkB;AlC4uJ1B;;AkC5vJA;EAkBI,8ChCZ0B;EgCa1B,gBAtBgB;EAuBhB,iBAvBgB;AlCqwJpB;;AkClwJA;EAwBM,kBA1BsB;EA2BtB,mBA3BsB;AlCywJ5B;;AkC5uJA;;EAEE,gBAAgB;EAChB,YAAY;EACZ,cAAc;AlC+uJhB;;AkC7uJA;EjC2GI,kBiC/IgB;AlCqxJpB;;AkC9uJA;EjCwGI,iBiC/IgB;AlCyxJpB;;AkC/uJA;EACE,gBAAgB;EAChB,YAAY;EACZ,cAAc;EACd,mBAAmB;AlCkvJrB;;AChtJE;EiCtCF;IAQI,gBAAgB;ElCmvJlB;AACF;;AmCrxJA;EACE,ejCkBW;AFswJb;;AmCzxJA;EAII,kBjCgBY;AFywJhB;;AmC7xJA;EAMI,kBjCYY;AF+wJhB;;AmCjyJA;EAQI,iBjCSW;AFoxJf;;AmC3xJA;EACE,iBArB0B;AnCmzJ5B;;AmC/xJA;EAGI,kBjCqCc;EiCpCd,cjCzB0B;EiC0B1B,cAAc;EACd,qBAzBiC;AnCyzJrC;;AmCtyJA;EAQM,4BjCvBwB;EiCwBxB,cjC/BwB;AFi0J9B;;AmC3yJA;EAYM,yBjClB4B;EiCmB5B,WxByCU;AX0vJhB;;AmChzJA;ElCoHI,8BCtI0B;EiCmCxB,cAnC0B;ElCsI5B,oBkCrIkC;AnCu0JtC;;AmClyJA;EACE,cjCzC4B;EiC0C5B,iBApC2B;EAqC3B,qBApC+B;EAqC/B,yBAAyB;AnCqyJ3B;;AmCzyJA;EAMI,eAtCoB;AnC60JxB;;AmC7yJA;EAQI,kBAxCoB;AnCi1JxB;;AoC50JA;EAEE,4BlCV4B;EkCW5B,kBlC6CU;EkC5CV,elCYW;AFk0Jb;;AoCl1JA;EAMI,mBAAmB;ApCg1JvB;;AoCt1JA;EAQI,mBAAmB;EACnB,0BAA0B;ApCk1J9B;;AoC31JA;EAYI,kBlCKY;AF80JhB;;AoC/1JA;EAcI,kBlCCY;AFo1JhB;;AoCn2JA;EAgBI,iBlCFW;AFy1Jf;;AoCv2JA;EAsCM,uBAH+C;ApCw0JrD;;AoC32JA;EAwCQ,uBlC9CuB;EkC+CvB,clC5DqB;AFm4J7B;;AoCh3JA;EA2CQ,mBlCjDuB;AF03J/B;;AoCp3JA;EAsCM,yBAH+C;ApCq1JrD;;AoCx3JA;EAwCQ,yBlC3DqB;EkC4DrB,YlC/CuB;AFm4J/B;;AoC73JA;EA2CQ,qBlC9DqB;AFo5J7B;;AoCj4JA;EAsCM,yBAH+C;ApCk2JrD;;AoCr4JA;EAwCQ,4BlChDsB;EkCiDtB,yBzBkBa;AX+0JrB;;AoC14JA;EA2CQ,wBlCnDsB;AFs5J9B;;AoC94JA;EAsCM,yBAH+C;ApC+2JrD;;AoCl5JA;EAwCQ,yBlCvDsB;EkCwDtB,WzBoBQ;AX01JhB;;AoCv5JA;EA2CQ,qBlC1DsB;AF06J9B;;AoC35JA;EAsCM,yBzB8B0C;AX21JhD;;AoC/5JA;EAwCQ,yBlCzC0B;EkC0C1B,WzBoBQ;AXu2JhB;;AoCp6JA;EA2CQ,qBlC5C0B;EkC6C1B,czBiC6D;AX41JrE;;AoCz6JA;EAsCM,yBzB8B0C;AXy2JhD;;AoC76JA;EAwCQ,yBlCvC0B;EkCwC1B,WzBoBQ;AXq3JhB;;AoCl7JA;EA2CQ,qBlC1C0B;EkC2C1B,czBiC6D;AX02JrE;;AoCv7JA;EAsCM,yBzB8B0C;AXu3JhD;;AoC37JA;EAwCQ,yBlCxC0B;EkCyC1B,WzBoBQ;AXm4JhB;;AoCh8JA;EA2CQ,qBlC3C0B;EkC4C1B,czBiC6D;AXw3JrE;;AoCr8JA;EAsCM,yBzB8B0C;AXq4JhD;;AoCz8JA;EAwCQ,yBlC1C0B;EkC2C1B,WzBoBQ;AXi5JhB;;AoC98JA;EA2CQ,qBlC7C0B;EkC8C1B,czBiC6D;AXs4JrE;;AoCn9JA;EAsCM,yBzB8B0C;AXm5JhD;;AoCv9JA;EAwCQ,yBlC3C0B;EkC4C1B,yBzBkBa;AXi6JrB;;AoC59JA;EA2CQ,qBlC9C0B;EkC+C1B,czBiC6D;AXo5JrE;;AoCj+JA;EAsCM,yBzB8B0C;AXi6JhD;;AoCr+JA;EAwCQ,yBlCrCyB;EkCsCzB,WzBoBQ;AX66JhB;;AoC1+JA;EA2CQ,qBlCxCyB;EkCyCzB,czBiC6D;AXk6JrE;;AoCj8JA;EACE,mBAAmB;EACnB,yBlC9D4B;EkC+D5B,0BAAgE;EAChE,WzBWc;EyBVd,aAAa;EACb,gBlC7Be;EkC8Bf,8BAA8B;EAC9B,iBAAiB;EACjB,mBAtEiC;EAuEjC,kBAAkB;ApCo8JpB;;AoC98JA;EAYI,YAAY;EACZ,cAAc;EnCgEd,mBmC/DsC;ApCs8J1C;;AoCp9JA;EAgBI,eAjEgC;EAkEhC,yBAAyB;EACzB,0BAA0B;ApCw8J9B;;AoCt8JA;EACE,qBlC9E4B;EkC+E5B,kBlCpBU;EkCqBV,mBAAmB;EACnB,uBAjFmC;EAkFnC,clCrF4B;EkCsF5B,qBAjFiC;ApC0hKnC;;AoC/8JA;;EASI,uBlCjF2B;AF4hK/B;;AoCp9JA;EAWI,6BAlFgD;ApC+hKpD;;AqC/gKA;EAEE,mBAAmB;EACnB,aAAa;EACb,sBAAsB;EACtB,uBAAuB;EACvB,gBAAgB;EAChB,eAAe;EACf,WAxCU;ArCyjKZ;;AqCzhKA;EAWI,aAAa;ArCkhKjB;;AqChhKA;EAEE,wCnC7C2B;AF+jK7B;;AqChhKA;;EAEE,cA9CgC;EA+ChC,+BAA0D;EAC1D,cAAc;EACd,kBAAkB;EAClB,WAAW;ArCmhKb;;ACjgKE;EoCxBF;;IASI,cAAc;IACd,8BAA0D;IAC1D,YAxDuB;ErC8kKzB;AACF;;AqCrhKA;EAEE,gBAAgB;EAChB,YAxD2B;EAyD3B,eAAe;EpCsFb,WoC9IoB;EA0DtB,SAzDoB;EA0DpB,WA5D2B;ArCmlK7B;;AqCrhKA;EACE,aAAa;EACb,sBAAsB;EACtB,8BAAgD;EAChD,gBAAgB;EAChB,uBAAuB;ArCwhKzB;;AqCthKA;;EAEE,mBAAmB;EACnB,4BnCpE4B;EmCqE5B,aAAa;EACb,cAAc;EACd,2BAA2B;EAC3B,aApE4B;EAqE5B,kBAAkB;ArCyhKpB;;AqCvhKA;EACE,gCnC/E4B;EmCgF5B,2BnCpBgB;EmCqBhB,4BnCrBgB;AF+iKlB;;AqCxhKA;EACE,cnCxF4B;EmCyF5B,YAAY;EACZ,cAAc;EACd,iBnC9Da;EmC+Db,cA7E8B;ArCwmKhC;;AqCzhKA;EACE,8BnC/BgB;EmCgChB,+BnChCgB;EmCiChB,6BnC7F4B;AFynK9B;;AqC/hKA;EpC4CI,mBoCtCuC;ArC6hK3C;;AqC3hKA;EpC9CE,iCAAiC;EoCgDjC,uBnC/F6B;EmCgG7B,YAAY;EACZ,cAAc;EACd,cAAc;EACd,aAtF4B;ArConK9B;;AsCxlKA;EACE,uBpC1C6B;EoC2C7B,mBAvDqB;EAwDrB,kBAAkB;EAClB,WAtDW;AtCipKb;;AsC/lKA;EASM,uBpClDyB;EoCmDzB,cpChEuB;AF0pK7B;;AsCpmKA;;EAcU,cpCpEmB;AF+pK7B;;AsCzmKA;;;;EAoBY,yB3BiCqB;E2BhCrB,cpC3EiB;AFuqK7B;;AsCjnKA;EAwBY,qBpC9EiB;AF2qK7B;;AsCrnKA;EA0BQ,cpChFqB;AF+qK7B;;ACxmKE;EqCjBF;;;;IAgCY,cpCtFiB;EFurK3B;EsCjoKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,cpC7Fe;EFosK3B;EsC9oKF;;IA0Cc,qBpChGe;EFwsK3B;EsClpKF;;;IA8CU,yB3BOuB;I2BNvB,cpCrGmB;EF8sK3B;EsCxpKF;IAmDc,uBpC5FiB;IoC6FjB,cpC1Ge;EFktK3B;AACF;;AsC7pKA;EASM,yBpC/DuB;EoCgEvB,YpCnDyB;AF2sK/B;;AsClqKA;;EAcU,YpCvDqB;AFgtK/B;;AsCvqKA;;;;EAoBY,uB3BiCqB;E2BhCrB,YpC9DmB;AFwtK/B;;AsC/qKA;EAwBY,mBpCjEmB;AF4tK/B;;AsCnrKA;EA0BQ,YpCnEuB;AFguK/B;;ACtqKE;EqCjBF;;;;IAgCY,YpCzEmB;EFwuK7B;EsC/rKF;;;;;;;;;;IAsCc,uB3BemB;I2BdnB,YpChFiB;EFqvK7B;EsC5sKF;;IA0Cc,mBpCnFiB;EFyvK7B;EsChtKF;;;IA8CU,uB3BOuB;I2BNvB,YpCxFqB;EF+vK7B;EsCttKF;IAmDc,yBpCzGe;IoC0Gf,YpC7FiB;EFmwK7B;AACF;;AsC3tKA;EASM,4BpCpDwB;EoCqDxB,yB3Bce;AXwsKrB;;AsChuKA;;EAcU,yB3BUW;AX6sKrB;;AsCruKA;;;;EAoBY,yB3BiCqB;E2BhCrB,yB3BGS;AXqtKrB;;AsC7uKA;EAwBY,gC3BAS;AXytKrB;;AsCjvKA;EA0BQ,yB3BFa;AX6tKrB;;ACpuKE;EqCjBF;;;;IAgCY,yB3BRS;EXquKnB;EsC7vKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,yB3BfO;EXkvKnB;EsC1wKF;;IA0Cc,gC3BlBO;EXsvKnB;EsC9wKF;;;IA8CU,yB3BOuB;I2BNvB,yB3BvBW;EX4vKnB;EsCpxKF;IAmDc,4BpC9FgB;IoC+FhB,yB3B5BO;EXgwKnB;AACF;;AsCzxKA;EASM,yBpC3DwB;EoC4DxB,W3BgBU;AXowKhB;;AsC9xKA;;EAcU,W3BYM;AXywKhB;;AsCnyKA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXixKhB;;AsC3yKA;EAwBY,kB3BEI;AXqxKhB;;AsC/yKA;EA0BQ,W3BAQ;AXyxKhB;;AClyKE;EqCjBF;;;;IAgCY,W3BNI;EXiyKd;EsC3zKF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX8yKd;EsCx0KF;;IA0Cc,kB3BhBE;EXkzKd;EsC50KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXwzKd;EsCl1KF;IAmDc,yBpCrGgB;IoCsGhB,W3B1BE;EX4zKd;AACF;;AsCv1KA;EASM,yBpC7C4B;EoC8C5B,W3BgBU;AXk0KhB;;AsC51KA;;EAcU,W3BYM;AXu0KhB;;AsCj2KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX+0KhB;;AsCz2KA;EAwBY,kB3BEI;AXm1KhB;;AsC72KA;EA0BQ,W3BAQ;AXu1KhB;;ACh2KE;EqCjBF;;;;IAgCY,W3BNI;EX+1Kd;EsCz3KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX42Kd;EsCt4KF;;IA0Cc,kB3BhBE;EXg3Kd;EsC14KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXs3Kd;EsCh5KF;IAmDc,yBpCvFoB;IoCwFpB,W3B1BE;EX03Kd;AACF;;AsCr5KA;EASM,yBpC3C4B;EoC4C5B,W3BgBU;AXg4KhB;;AsC15KA;;EAcU,W3BYM;AXq4KhB;;AsC/5KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX64KhB;;AsCv6KA;EAwBY,kB3BEI;AXi5KhB;;AsC36KA;EA0BQ,W3BAQ;AXq5KhB;;AC95KE;EqCjBF;;;;IAgCY,W3BNI;EX65Kd;EsCv7KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EX06Kd;EsCp8KF;;IA0Cc,kB3BhBE;EX86Kd;EsCx8KF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXo7Kd;EsC98KF;IAmDc,yBpCrFoB;IoCsFpB,W3B1BE;EXw7Kd;AACF;;AsCn9KA;EASM,yBpC5C4B;EoC6C5B,W3BgBU;AX87KhB;;AsCx9KA;;EAcU,W3BYM;AXm8KhB;;AsC79KA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AX28KhB;;AsCr+KA;EAwBY,kB3BEI;AX+8KhB;;AsCz+KA;EA0BQ,W3BAQ;AXm9KhB;;AC59KE;EqCjBF;;;;IAgCY,W3BNI;EX29Kd;EsCr/KF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXw+Kd;EsClgLF;;IA0Cc,kB3BhBE;EX4+Kd;EsCtgLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXk/Kd;EsC5gLF;IAmDc,yBpCtFoB;IoCuFpB,W3B1BE;EXs/Kd;AACF;;AsCjhLA;EASM,yBpC9C4B;EoC+C5B,W3BgBU;AX4/KhB;;AsCthLA;;EAcU,W3BYM;AXigLhB;;AsC3hLA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXygLhB;;AsCniLA;EAwBY,kB3BEI;AX6gLhB;;AsCviLA;EA0BQ,W3BAQ;AXihLhB;;AC1hLE;EqCjBF;;;;IAgCY,W3BNI;EXyhLd;EsCnjLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXsiLd;EsChkLF;;IA0Cc,kB3BhBE;EX0iLd;EsCpkLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EXgjLd;EsC1kLF;IAmDc,yBpCxFoB;IoCyFpB,W3B1BE;EXojLd;AACF;;AsC/kLA;EASM,yBpC/C4B;EoCgD5B,yB3Bce;AX4jLrB;;AsCplLA;;EAcU,yB3BUW;AXikLrB;;AsCzlLA;;;;EAoBY,yB3BiCqB;E2BhCrB,yB3BGS;AXykLrB;;AsCjmLA;EAwBY,gC3BAS;AX6kLrB;;AsCrmLA;EA0BQ,yB3BFa;AXilLrB;;ACxlLE;EqCjBF;;;;IAgCY,yB3BRS;EXylLnB;EsCjnLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,yB3BfO;EXsmLnB;EsC9nLF;;IA0Cc,gC3BlBO;EX0mLnB;EsCloLF;;;IA8CU,yB3BOuB;I2BNvB,yB3BvBW;EXgnLnB;EsCxoLF;IAmDc,yBpCzFoB;IoC0FpB,yB3B5BO;EXonLnB;AACF;;AsC7oLA;EASM,yBpCzC2B;EoC0C3B,W3BgBU;AXwnLhB;;AsClpLA;;EAcU,W3BYM;AX6nLhB;;AsCvpLA;;;;EAoBY,yB3BiCqB;E2BhCrB,W3BKI;AXqoLhB;;AsC/pLA;EAwBY,kB3BEI;AXyoLhB;;AsCnqLA;EA0BQ,W3BAQ;AX6oLhB;;ACtpLE;EqCjBF;;;;IAgCY,W3BNI;EXqpLd;EsC/qLF;;;;;;;;;;IAsCc,yB3BemB;I2BdnB,W3BbE;EXkqLd;EsC5rLF;;IA0Cc,kB3BhBE;EXsqLd;EsChsLF;;;IA8CU,yB3BOuB;I2BNvB,W3BrBM;EX4qLd;EsCtsLF;IAmDc,yBpCnFmB;IoCoFnB,W3B1BE;EXgrLd;AACF;;AsC3sLA;EAsDI,oBAAoB;EACpB,aAAa;EACb,mBA7GmB;EA8GnB,WAAW;AtCypLf;;AsCltLA;EA2DI,gCpCtG0B;AFiwL9B;;AsCttLA;EALE,OAAO;EACP,eAAe;EACf,QAAQ;EACR,WA/CiB;AtC8wLnB;;AsC7tLA;EAgEI,SAAS;AtCiqLb;;AsCjuLA;EAkEM,iCpC7GwB;AFgxL9B;;AsCruLA;EAoEI,MAAM;AtCqqLV;;AsCnqLA;;EAGI,oBA9HmB;AtCmyLvB;;AsCxqLA;;EAKI,uBAhImB;AtCwyLvB;;AsCtqLA;;EAEE,oBAAoB;EACpB,aAAa;EACb,cAAc;EACd,mBAvIqB;AtCgzLvB;;AsCvqLA;EAIM,6BAA6B;AtCuqLnC;;AsCrqLA;ErCpFE,iCAAiC;EqCsFjC,gBAAgB;EAChB,gBAAgB;EAChB,kBAAkB;AtCwqLpB;;AsCtqLA;EACE,cpClJ4B;EDoB5B,eAAe;EACf,cAAc;EACd,eqC1BqB;ErC2BrB,kBAAkB;EAClB,cqC5BqB;ErC6InB,iBqCWkC;AtC6qLtC;;ACxyLE;EACE,8BAA8B;EAC9B,cAAc;EACd,WAAW;EACX,qBAAqB;EACrB,kBAAkB;EAClB,wBAAwB;EACxB,yBCiCQ;EDhCR,yDAAyD;EACzD,oCC0Ba;EDzBb,WAAW;AD2yLf;;AC1yLI;EACE,oBAAoB;AD6yL1B;;AC5yLI;EACE,oBAAoB;AD+yL1B;;AC9yLI;EACE,oBAAoB;ADizL1B;;AChzLE;EACE,qCAAiC;ADmzLrC;;AC/yLM;EACE,wCAAwC;ADkzLhD;;ACjzLM;EACE,UAAU;ADozLlB;;ACnzLM;EACE,0CAA0C;ADszLlD;;AsCptLA;EACE,aAAa;AtCutLf;;AsCrtLA;;EAEE,cpC3J4B;EoC4J5B,cAAc;EACd,gBAAgB;EAChB,uBAAuB;EACvB,kBAAkB;AtCwtLpB;;AsC9tLA;;EASM,qBAAqB;EACrB,sBAAsB;AtC0tL5B;;AsCxtLA;;EAEE,eAAe;AtC2tLjB;;AsC7tLA;;;;;EAOI,yBpCrK0B;EoCsK1B,cpC9J8B;AF43LlC;;AsC5tLA;EACE,YAAY;EACZ,cAAc;AtC+tLhB;;AsCjuLA;EAII,mBA5KgC;AtC64LpC;;AsCruLA;EAMI,UAAU;AtCmuLd;;AsCzuLA;EAQI,YAAY;EACZ,cAAc;AtCquLlB;;AsC9uLA;EAWI,oCAAoC;EACpC,mBA/LmB;EAgMnB,kCAAkC;AtCuuLtC;;AsCpvLA;EAgBM,6BApLyC;EAqLzC,4BpCjL4B;AFy5LlC;;AsCzvLA;EAmBM,6BApL0C;EAqL1C,4BpCpL4B;EoCqL5B,0BApLuC;EAqLvC,wBApLqC;EAqLrC,cpCvL4B;EoCwL5B,kCAAwE;AtC0uL9E;;AsCxuLA;EACE,YAAY;EACZ,cAAc;AtC2uLhB;;AsCzuLA;ErCpEI,oBqCqEoC;AtC4uLxC;;AsC7uLA;EAII,qBpClM8B;EoCmM9B,oBAAoB;ErCjEpB,cqCkE6B;AtC6uLjC;;AsC3uLA;EACE,mBAAmB;EACnB,sBAAsB;EACtB,mBAAmB;AtC8uLrB;;AsCjvLA;EAKI,oBAAoB;EACpB,qBAAqB;AtCgvLzB;;AsC9uLA;EACE,4BpCxN4B;EoCyN5B,YAAY;EACZ,aAAa;EACb,WA9LyB;EA+LzB,gBAAgB;AtCivLlB;;AC74LE;EqCrBF;IAqLI,cAAc;EtCkvLhB;EsCjvLA;;IAGI,mBAAmB;IACnB,aAAa;EtCkvLjB;EsCjvLA;IAEI,aAAa;EtCkvLjB;EsC10LF;IA0FI,uBpCxO2B;IoCyO3B,4CpCtPyB;IoCuPzB,iBAAiB;EtCmvLnB;EsCtvLA;IAKI,cAAc;EtCovLlB;EsClvLA;IA1MA,OAAO;IACP,eAAe;IACf,QAAQ;IACR,WA/CiB;EtC8+LjB;EsCxvLA;IAKI,SAAS;EtCsvLb;EsC3vLA;IAOM,4CpClQqB;EFy/L3B;EsC9vLA;IASI,MAAM;EtCwvLV;EsCjwLA;IrC/LA,iCAAiC;IqC6M3B,iCAA2C;IAC3C,cAAc;EtCuvLpB;EsCtvLA;;IAGI,oBA7QiB;EtCogMrB;EsC1vLA;;IAKI,uBA/QiB;EtCwgMrB;AACF;;ACn8LE;EqC4MA;;;;IAIE,oBAAoB;IACpB,aAAa;EtC2vLf;EsC79LF;IAoOI,mBAzRmB;EtCqhMrB;EsC7vLA;IAGI,kBAzR0B;EtCshM9B;EsChwLA;;IAMM,mBAAmB;EtC8vLzB;EsCpwLA;;IASM,kBpC/NI;EF89LV;EsCxwLA;;;;IAgBQ,wCAAwC;EtC8vLhD;EsC9wLA;IAuBU,wCAAwC;EtC0vLlD;EsCjxLA;IA4BU,4BpC1SkB;IoC2SlB,cpCtTiB;EF8iM3B;EsCrxLA;IA+BU,4BpC7SkB;IoC8SlB,cpCrSsB;EF8hMhC;EsC55LF;IAqKI,aAAa;EtC0vLf;EsCv5LF;;IAgKI,mBAAmB;IACnB,aAAa;EtC2vLf;EsCt4LF;IA8IM,oBAAoB;EtC2vLxB;EsC7vLA;IAKM,oDAAoD;EtC2vL1D;EsChwLA;IAOM,gCpC/TsB;IoCgUtB,0BAAkE;IAClE,gBAAgB;IAChB,YAAY;IACZ,4CpC3UqB;IoC4UrB,SAAS;EtC4vLf;EsCxwLA;IAkBM,cAAc;EtCyvLpB;EsCxvLM;IAEE,UAAU;IACV,oBAAoB;IACpB,wBAAwB;EtCyvLhC;EsCr7LF;IA8LI,YAAY;IACZ,cAAc;EtC0vLhB;EsCzvLA;IACE,2BAA2B;IrC9M3B,kBqC+MoC;EtC2vLtC;EsC1vLA;IACE,yBAAyB;IrCjNzB,iBqCkNoC;EtC4vLtC;EsCl4LF;IAwII,uBpCrV2B;IoCsV3B,8BpC/Rc;IoCgSd,+BpChSc;IoCiSd,6BpC7V0B;IoC8V1B,2CpCtWyB;IoCuWzB,aAAa;IACb,mBAAmB;IrClNnB,OqCmNuB;IACvB,eAAe;IACf,kBAAkB;IAClB,SAAS;IACT,WAhVkB;EtC6kMpB;EsCh5LF;IAqJM,sBAAsB;IACtB,mBAAmB;EtC8vLvB;EsC7wLA;IrCnNE,mBqCoOuC;EtC+vLzC;EsChxLA;IAoBM,4BpC1WsB;IoC2WtB,cpCtXqB;EFqnM3B;EsCpxLA;IAuBM,4BpC7WsB;IoC8WtB,cpCrW0B;EFqmMhC;EsC/vLE;IAEE,kBpCxTY;IoCyTZ,gBAAgB;IAChB,4EpC9XuB;IoC+XvB,cAAc;IACd,UAAU;IACV,oBAAoB;IACpB,wBAA8C;IAC9C,2BAA2B;IAC3B,yBpC9TM;IoC+TN,uCAAuC;EtCgwL3C;EsCpyLA;IAsCI,UAAU;IACV,QAAQ;EtCiwLZ;EsCv6LF;IAwKI,cAAc;EtCkwLhB;EsCjwLA;;IrC7PE,qBqCgQyC;EtCkwL3C;EsCrwLA;;IrC7PE,sBqCkQyC;EtCowL3C;EsClwLA;IAjWA,OAAO;IACP,eAAe;IACf,QAAQ;IACR,WA/CiB;EtCqpMjB;EsCxwLA;IAKI,SAAS;EtCswLb;EsC3wLA;IAOM,4CpCzZqB;EFgqM3B;EsC9wLA;IASI,MAAM;EtCwwLV;EsCvwLA;;IAGI,oBA9ZiB;EtCsqMrB;EsC3wLA;;IAKI,uBAhaiB;EtC0qMrB;EsC/wLA;;IAOI,oBAA4D;EtC4wLhE;EsCnxLA;;IASI,uBAA+D;EtC8wLnE;EsC5wLA;;IAGI,cpC1auB;EFurM3B;EsChxLA;;IAKI,6BAja2C;EtCgrM/C;EsC9wLA;IAKM,yBpCtasB;EFkrM5B;AACF;;AsCzwLA;EAEI,iCAA2C;AtC2wL/C;;AuCtqMA;EAEE,erCIW;EqCHX,gBAhC0B;AvCwsM5B;;AuC3qMA;EAMI,kBrCCY;AFwqMhB;;AuC/qMA;EAQI,kBrCHY;AF8qMhB;;AuCnrMA;EAUI,iBrCNW;AFmrMf;;AuCvrMA;;EAcM,iBAAiB;EACjB,kBAAkB;EAClB,uBrCwBmB;AFspMzB;;AuC9rMA;EAkBM,uBrCsBmB;AF0pMzB;;AuC9qMA;;EAEE,mBAAmB;EACnB,aAAa;EACb,uBAAuB;EACvB,kBAAkB;AvCirMpB;;AuC/qMA;;;;EAME,cA3D6B;EA4D7B,uBAAuB;EACvB,eA5D8B;EA6D9B,mBA5DkC;EA6DlC,oBA5DmC;EA6DnC,kBAAkB;AvCgrMpB;;AuC9qMA;;;EAGE,qBrChE4B;EqCiE5B,crCrE4B;EqCsE5B,gBpCvEoB;AHwvMtB;;AuCtrMA;;;EAOI,qBrCrE0B;EqCsE1B,crCzE0B;AF8vM9B;;AuC7rMA;;;EAUI,qBrC3D8B;AFovMlC;;AuCnsMA;;;EAYI,iDrCjFyB;AF8wM7B;;AuCzsMA;;;EAcI,yBrC3E0B;EqC4E1B,qBrC5E0B;EqC6E1B,gBAAgB;EAChB,crChF0B;EqCiF1B,YAAY;AvCisMhB;;AuC/rMA;;EAEE,oBAAoB;EACpB,qBAAqB;EACrB,mBAAmB;AvCksMrB;;AuChsMA;EAEI,yBrC7E8B;EqC8E9B,qBrC9E8B;EqC+E9B,W5BnBY;AXqtMhB;;AuChsMA;EACE,crC/F4B;EqCgG5B,oBAAoB;AvCmsMtB;;AuCjsMA;EACE,eAAe;AvCosMjB;;AC/tME;EsClDF;IAiFI,eAAe;EvCqsMjB;EuC1tMF;;IAwBI,YAAY;IACZ,cAAc;EvCssMhB;EuCrsMA;IAEI,YAAY;IACZ,cAAc;EvCssMlB;AACF;;AC1uME;EsCsBF;IAiBI,YAAY;IACZ,cAAc;IACd,2BAA2B;IAC3B,QAAQ;EvCwsMV;EuCvsMA;IACE,QAAQ;EvCysMV;EuCxsMA;IACE,QAAQ;EvC0sMV;EuC9yMF;IAsGI,8BAA8B;EvC2sMhC;EuC5sMA;IAIM,QAAQ;EvC2sMd;EuC/sMA;IAMM,uBAAuB;IACvB,QAAQ;EvC4sMd;EuCntMA;IASM,QAAQ;EvC6sMd;EuCttMA;IAYM,QAAQ;EvC6sMd;EuCztMA;IAcM,QAAQ;EvC8sMd;EuC5tMA;IAgBM,yBAAyB;IACzB,QAAQ;EvC+sMd;AACF;;AwCv0MA;EACE,kBtCuCgB;EsCtChB,0FtC9B2B;EsC+B3B,etCIW;AFs0Mb;;AwC70MA;EAKI,qBtCakB;AF+zMtB;;AwCj1MA;EAYQ,uBtC3BuB;EsC4BvB,ctCzCqB;AFk3M7B;;AwCt1MA;EAeQ,0BtC9BuB;AFy2M/B;;AwC11MA;EAiBQ,YtChCuB;AF62M/B;;AwC91MA;EAYQ,yBtCxCqB;EsCyCrB,YtC5BuB;AFk3M/B;;AwCn2MA;EAeQ,4BtC3CqB;AFm4M7B;;AwCv2MA;EAiBQ,ctC7CqB;AFu4M7B;;AwC32MA;EAYQ,4BtC7BsB;EsC8BtB,yB7BqCa;AX8zMrB;;AwCh3MA;EAeQ,+BtChCsB;AFq4M9B;;AwCp3MA;EAiBQ,iBtClCsB;AFy4M9B;;AwCx3MA;EAYQ,yBtCpCsB;EsCqCtB,W7BuCQ;AXy0MhB;;AwC73MA;EAeQ,4BtCvCsB;AFy5M9B;;AwCj4MA;EAiBQ,ctCzCsB;AF65M9B;;AwCr4MA;EAYQ,yBtCtB0B;EsCuB1B,W7BuCQ;AXs1MhB;;AwC14MA;EAeQ,4BtCzB0B;AFw5MlC;;AwC94MA;EAiBQ,ctC3B0B;AF45MlC;;AwCl5MA;EAYQ,yBtCpB0B;EsCqB1B,W7BuCQ;AXm2MhB;;AwCv5MA;EAeQ,4BtCvB0B;AFm6MlC;;AwC35MA;EAiBQ,ctCzB0B;AFu6MlC;;AwC/5MA;EAYQ,yBtCrB0B;EsCsB1B,W7BuCQ;AXg3MhB;;AwCp6MA;EAeQ,4BtCxB0B;AFi7MlC;;AwCx6MA;EAiBQ,ctC1B0B;AFq7MlC;;AwC56MA;EAYQ,yBtCvB0B;EsCwB1B,W7BuCQ;AX63MhB;;AwCj7MA;EAeQ,4BtC1B0B;AFg8MlC;;AwCr7MA;EAiBQ,ctC5B0B;AFo8MlC;;AwCz7MA;EAYQ,yBtCxB0B;EsCyB1B,yB7BqCa;AX44MrB;;AwC97MA;EAeQ,4BtC3B0B;AF88MlC;;AwCl8MA;EAiBQ,ctC7B0B;AFk9MlC;;AwCt8MA;EAYQ,yBtClByB;EsCmBzB,W7BuCQ;AXu5MhB;;AwC38MA;EAeQ,4BtCrByB;AFq9MjC;;AwC/8MA;EAiBQ,ctCvByB;AFy9MjC;;AwCh8MA;;EAGI,gCtCzC2B;AF2+M/B;;AwCh8MA;EACE,yBtC5C6B;EsC6C7B,0BAA8C;EAC9C,ctCnD4B;EsCoD5B,iBAhDyB;EAiDzB,gBtCfe;EsCgBf,iBArD8B;EAsD9B,mBArDgC;AxCw/MlC;;AwCj8MA;EACE,qBAAqB;EACrB,aAAa;EACb,kBArD4B;EAsD5B,uBAAuB;AxCo8MzB;;AwCx8MA;EAMI,gCtC3D0B;EsC4D1B,mBAAmB;EACnB,cAAc;AxCs8MlB;;AwC98MA;EAWM,4BtCnEwB;EsCoExB,ctCrEwB;AF4gN9B;;AwCr8MA;EAEI,ctCxE0B;AF+gN9B;;AwCz8MA;EAIM,ctC3D4B;AFogNlC;;AwCv8MA;EACE,mBAAmB;EACnB,ctC/E4B;EsCgF5B,aAAa;EACb,2BAA2B;EAC3B,qBAAqB;AxC08MvB;;AwC/8MA;EvC6DI,oBuCtDsC;AxC48M1C;;AwCn9MA;EASI,YAAY;EACZ,cAAc;EACd,WAAW;AxC88Mf;;AwCz9MA;EAaI,eAAe;AxCg9MnB;;AwC79MA;EAeI,0BtC5E8B;EsC6E9B,ctC7F0B;AF+iN9B;;AwCl+MA;EAkBM,ctC/E4B;AFmiNlC;;AwCt+MA;EAoBI,8BtCjCc;EsCkCd,+BtClCc;AFw/MlB;;AwCp9MA;;EAEE,eAAe;AxCu9MjB;;AwCz9MA;;EAII,4BtCjG0B;AF2jN9B;;AwCx9MA;EvC9FE,qBAAqB;EACrB,euC8FgB;EvC7FhB,WuC6FqB;EvC5FrB,gBuC4FqB;EvC3FrB,kBAAkB;EAClB,mBAAmB;EACnB,UuCyFqB;EACrB,ctC1G4B;EDwI1B,oBuC7BoC;AxCi+MxC;;AwCp+MA;EAKI,kBAAkB;EAClB,oBAAoB;AxCm+MxB;;AyC7jNA;ExCkCE,iCAAiC;EwC9BjC,oBAAoB;EACpB,aAAa;EACb,evCGW;EuCFX,8BAA8B;EAC9B,gBAAgB;EAChB,gBAAgB;EAChB,mBAAmB;AzC8jNrB;;AyCxkNA;EAYI,mBAAmB;EACnB,4BvC/B0B;EuCgC1B,0BAzC4B;EA0C5B,wBAzC0B;EA0C1B,cvCrC0B;EuCsC1B,aAAa;EACb,uBAAuB;EACvB,mBAA6C;EAC7C,kBAxCyB;EAyCzB,mBAAmB;AzCgkNvB;;AyCrlNA;EAuBM,4BvC7CwB;EuC8CxB,cvC9CwB;AFgnN9B;;AyC1lNA;EA0BI,cAAc;AzCokNlB;;AyC9lNA;EA6BQ,4BvCnC0B;EuCoC1B,cvCpC0B;AFymNlC;;AyCnmNA;EAgCI,mBAAmB;EACnB,4BvCnD0B;EuCoD1B,0BA7D4B;EA8D5B,wBA7D0B;EA8D1B,aAAa;EACb,YAAY;EACZ,cAAc;EACd,2BAA2B;AzCukN/B;;AyC9mNA;EAyCM,qBAAqB;AzCykN3B;;AyClnNA;EA2CM,UAAU;EACV,uBAAuB;EACvB,oBAAoB;EACpB,qBAAqB;AzC2kN3B;;AyCznNA;EAgDM,yBAAyB;EACzB,oBAAoB;AzC6kN1B;;AyC9nNA;ExCoHI,mBwChEuC;AzC8kN3C;;AyCloNA;ExCoHI,kBwC9DuC;AzCglN3C;;AyCtoNA;EA0DM,uBAAuB;AzCglN7B;;AyC1oNA;EA6DM,yBAAyB;AzCilN/B;;AyC9oNA;EAiEM,6BAA6B;EAE3B,0BAAkE;AzCglN1E;;AyCnpNA;EAuEQ,4BvCtFsB;EuCuFtB,4BvC1FsB;AF0qN9B;;AyCxpNA;EA4EU,uBvCzFqB;EuC0FrB,qBvC/FoB;EuCgGpB,2CAA2E;AzCglNrF;;AyC9pNA;EAiFM,YAAY;EACZ,cAAc;AzCilNpB;;AyCnqNA;EAqFM,qBvCvGwB;EuCwGxB,mBA/F+B;EAgG/B,iBA/F6B;EAgG7B,gBAAgB;EAChB,kBAAkB;AzCklNxB;;AyC3qNA;EA2FQ,4BvC1GsB;EuC2GtB,qBvC/GsB;EuCgHtB,UAAU;AzColNlB;;AyCjrNA;ExCoHI,iBwCpBuE;AzCqlN3E;;AyCrrNA;EAmGU,2BvC1DE;EuC2DF,8BvC3DE;AFipNZ;;AyC1rNA;EA0GU,4BvCjEE;EuCkEF,+BvClEE;AFspNZ;;AyC/rNA;EAiHU,yBvCvHwB;EuCwHxB,qBvCxHwB;EuCyHxB,W9B7DM;E8B8DN,UAAU;AzCklNpB;;AyCtsNA;EAsHM,mBAAmB;AzColNzB;;AyC1sNA;EA2HY,mCvChFa;EuCiFb,gCvCjFa;EuCkFb,oBAAoB;AzCmlNhC;;AyChtNA;EAoIY,oCvCzFa;EuC0Fb,iCvC1Fa;EuC2Fb,qBAAqB;AzCglNjC;;AyCttNA;EA6II,kBvCnIY;AFgtNhB;;AyC1tNA;EA+II,kBvCvIY;AFstNhB;;AyC9tNA;EAiJI,iBvC1IW;AF2tNf;;A0C9vNA,eAAA;ACEA;EACE,cAAc;EACd,aAAa;EACb,YAAY;EACZ,cAAc;EACd,gBAPkB;A3CuwNpB;;A2C/vNE;EACE,UAAU;A3CkwNd;;A2CjwNE;EACE,UAAU;EACV,WAAW;A3CowNf;;A2CnwNE;EACE,UAAU;EACV,UAAU;A3CswNd;;A2CrwNE;EACE,UAAU;EACV,eAAe;A3CwwNnB;;A2CvwNE;EACE,UAAU;EACV,UAAU;A3C0wNd;;A2CzwNE;EACE,UAAU;EACV,eAAe;A3C4wNnB;;A2C3wNE;EACE,UAAU;EACV,UAAU;A3C8wNd;;A2C7wNE;EACE,UAAU;EACV,UAAU;A3CgxNd;;A2C/wNE;EACE,UAAU;EACV,UAAU;A3CkxNd;;A2CjxNE;EACE,UAAU;EACV,UAAU;A3CoxNd;;A2CnxNE;EACE,UAAU;EACV,UAAU;A3CsxNd;;A2CrxNE;EACE,gBAAgB;A3CwxNpB;;A2CvxNE;EACE,qBAAqB;A3C0xNzB;;A2CzxNE;EACE,gBAAgB;A3C4xNpB;;A2C3xNE;EACE,qBAAqB;A3C8xNzB;;A2C7xNE;EACE,gBAAgB;A3CgyNpB;;A2C/xNE;EACE,gBAAgB;A3CkyNpB;;A2CjyNE;EACE,gBAAgB;A3CoyNpB;;A2CnyNE;EACE,gBAAgB;A3CsyNpB;;A2CryNE;EACE,gBAAgB;A3CwyNpB;;A2CtyNI;EACE,UAAU;EACV,SAA0B;A3CyyNhC;;A2CxyNI;EACE,eAAgC;A3C2yNtC;;A2C/yNI;EACE,UAAU;EACV,eAA0B;A3CkzNhC;;A2CjzNI;EACE,qBAAgC;A3CozNtC;;A2CxzNI;EACE,UAAU;EACV,gBAA0B;A3C2zNhC;;A2C1zNI;EACE,sBAAgC;A3C6zNtC;;A2Cj0NI;EACE,UAAU;EACV,UAA0B;A3Co0NhC;;A2Cn0NI;EACE,gBAAgC;A3Cs0NtC;;A2C10NI;EACE,UAAU;EACV,gBAA0B;A3C60NhC;;A2C50NI;EACE,sBAAgC;A3C+0NtC;;A2Cn1NI;EACE,UAAU;EACV,gBAA0B;A3Cs1NhC;;A2Cr1NI;EACE,sBAAgC;A3Cw1NtC;;A2C51NI;EACE,UAAU;EACV,UAA0B;A3C+1NhC;;A2C91NI;EACE,gBAAgC;A3Ci2NtC;;A2Cr2NI;EACE,UAAU;EACV,gBAA0B;A3Cw2NhC;;A2Cv2NI;EACE,sBAAgC;A3C02NtC;;A2C92NI;EACE,UAAU;EACV,gBAA0B;A3Ci3NhC;;A2Ch3NI;EACE,sBAAgC;A3Cm3NtC;;A2Cv3NI;EACE,UAAU;EACV,UAA0B;A3C03NhC;;A2Cz3NI;EACE,gBAAgC;A3C43NtC;;A2Ch4NI;EACE,UAAU;EACV,gBAA0B;A3Cm4NhC;;A2Cl4NI;EACE,sBAAgC;A3Cq4NtC;;A2Cz4NI;EACE,UAAU;EACV,gBAA0B;A3C44NhC;;A2C34NI;EACE,sBAAgC;A3C84NtC;;A2Cl5NI;EACE,UAAU;EACV,WAA0B;A3Cq5NhC;;A2Cp5NI;EACE,iBAAgC;A3Cu5NtC;;ACr4NE;E0C/EF;IAgEM,UAAU;E3Cy5Nd;E2Cz9NF;IAkEM,UAAU;IACV,WAAW;E3C05Nf;E2C79NF;IAqEM,UAAU;IACV,UAAU;E3C25Nd;E2Cj+NF;IAwEM,UAAU;IACV,eAAe;E3C45NnB;E2Cr+NF;IA2EM,UAAU;IACV,UAAU;E3C65Nd;E2Cz+NF;IA8EM,UAAU;IACV,eAAe;E3C85NnB;E2C7+NF;IAiFM,UAAU;IACV,UAAU;E3C+5Nd;E2Cj/NF;IAoFM,UAAU;IACV,UAAU;E3Cg6Nd;E2Cr/NF;IAuFM,UAAU;IACV,UAAU;E3Ci6Nd;E2Cz/NF;IA0FM,UAAU;IACV,UAAU;E3Ck6Nd;E2C7/NF;IA6FM,UAAU;IACV,UAAU;E3Cm6Nd;E2CjgOF;IAgGM,gBAAgB;E3Co6NpB;E2CpgOF;IAkGM,qBAAqB;E3Cq6NzB;E2CvgOF;IAoGM,gBAAgB;E3Cs6NpB;E2C1gOF;IAsGM,qBAAqB;E3Cu6NzB;E2C7gOF;IAwGM,gBAAgB;E3Cw6NpB;E2ChhOF;IA0GM,gBAAgB;E3Cy6NpB;E2CnhOF;IA4GM,gBAAgB;E3C06NpB;E2CthOF;IA8GM,gBAAgB;E3C26NpB;E2CzhOF;IAgHM,gBAAgB;E3C46NpB;E2C5hOF;IAmHQ,UAAU;IACV,SAA0B;E3C46NhC;E2ChiOF;IAsHQ,eAAgC;E3C66NtC;E2CniOF;IAmHQ,UAAU;IACV,eAA0B;E3Cm7NhC;E2CviOF;IAsHQ,qBAAgC;E3Co7NtC;E2C1iOF;IAmHQ,UAAU;IACV,gBAA0B;E3C07NhC;E2C9iOF;IAsHQ,sBAAgC;E3C27NtC;E2CjjOF;IAmHQ,UAAU;IACV,UAA0B;E3Ci8NhC;E2CrjOF;IAsHQ,gBAAgC;E3Ck8NtC;E2CxjOF;IAmHQ,UAAU;IACV,gBAA0B;E3Cw8NhC;E2C5jOF;IAsHQ,sBAAgC;E3Cy8NtC;E2C/jOF;IAmHQ,UAAU;IACV,gBAA0B;E3C+8NhC;E2CnkOF;IAsHQ,sBAAgC;E3Cg9NtC;E2CtkOF;IAmHQ,UAAU;IACV,UAA0B;E3Cs9NhC;E2C1kOF;IAsHQ,gBAAgC;E3Cu9NtC;E2C7kOF;IAmHQ,UAAU;IACV,gBAA0B;E3C69NhC;E2CjlOF;IAsHQ,sBAAgC;E3C89NtC;E2CplOF;IAmHQ,UAAU;IACV,gBAA0B;E3Co+NhC;E2CxlOF;IAsHQ,sBAAgC;E3Cq+NtC;E2C3lOF;IAmHQ,UAAU;IACV,UAA0B;E3C2+NhC;E2C/lOF;IAsHQ,gBAAgC;E3C4+NtC;E2ClmOF;IAmHQ,UAAU;IACV,gBAA0B;E3Ck/NhC;E2CtmOF;IAsHQ,sBAAgC;E3Cm/NtC;E2CzmOF;IAmHQ,UAAU;IACV,gBAA0B;E3Cy/NhC;E2C7mOF;IAsHQ,sBAAgC;E3C0/NtC;E2ChnOF;IAmHQ,UAAU;IACV,WAA0B;E3CggOhC;E2CpnOF;IAsHQ,iBAAgC;E3CigOtC;AACF;;ACriOE;E0CnFF;IA0HM,UAAU;E3CmgOd;E2C7nOF;IA6HM,UAAU;IACV,WAAW;E3CmgOf;E2CjoOF;IAiIM,UAAU;IACV,UAAU;E3CmgOd;E2CroOF;IAqIM,UAAU;IACV,eAAe;E3CmgOnB;E2CzoOF;IAyIM,UAAU;IACV,UAAU;E3CmgOd;E2C7oOF;IA6IM,UAAU;IACV,eAAe;E3CmgOnB;E2CjpOF;IAiJM,UAAU;IACV,UAAU;E3CmgOd;E2CrpOF;IAqJM,UAAU;IACV,UAAU;E3CmgOd;E2CzpOF;IAyJM,UAAU;IACV,UAAU;E3CmgOd;E2C7pOF;IA6JM,UAAU;IACV,UAAU;E3CmgOd;E2CjqOF;IAiKM,UAAU;IACV,UAAU;E3CmgOd;E2CrqOF;IAqKM,gBAAgB;E3CmgOpB;E2CxqOF;IAwKM,qBAAqB;E3CmgOzB;E2C3qOF;IA2KM,gBAAgB;E3CmgOpB;E2C9qOF;IA8KM,qBAAqB;E3CmgOzB;E2CjrOF;IAiLM,gBAAgB;E3CmgOpB;E2CprOF;IAoLM,gBAAgB;E3CmgOpB;E2CvrOF;IAuLM,gBAAgB;E3CmgOpB;E2C1rOF;IA0LM,gBAAgB;E3CmgOpB;E2C7rOF;IA6LM,gBAAgB;E3CmgOpB;E2ChsOF;IAiMQ,UAAU;IACV,SAA0B;E3CkgOhC;E2CpsOF;IAqMQ,eAAgC;E3CkgOtC;E2CvsOF;IAiMQ,UAAU;IACV,eAA0B;E3CygOhC;E2C3sOF;IAqMQ,qBAAgC;E3CygOtC;E2C9sOF;IAiMQ,UAAU;IACV,gBAA0B;E3CghOhC;E2CltOF;IAqMQ,sBAAgC;E3CghOtC;E2CrtOF;IAiMQ,UAAU;IACV,UAA0B;E3CuhOhC;E2CztOF;IAqMQ,gBAAgC;E3CuhOtC;E2C5tOF;IAiMQ,UAAU;IACV,gBAA0B;E3C8hOhC;E2ChuOF;IAqMQ,sBAAgC;E3C8hOtC;E2CnuOF;IAiMQ,UAAU;IACV,gBAA0B;E3CqiOhC;E2CvuOF;IAqMQ,sBAAgC;E3CqiOtC;E2C1uOF;IAiMQ,UAAU;IACV,UAA0B;E3C4iOhC;E2C9uOF;IAqMQ,gBAAgC;E3C4iOtC;E2CjvOF;IAiMQ,UAAU;IACV,gBAA0B;E3CmjOhC;E2CrvOF;IAqMQ,sBAAgC;E3CmjOtC;E2CxvOF;IAiMQ,UAAU;IACV,gBAA0B;E3C0jOhC;E2C5vOF;IAqMQ,sBAAgC;E3C0jOtC;E2C/vOF;IAiMQ,UAAU;IACV,UAA0B;E3CikOhC;E2CnwOF;IAqMQ,gBAAgC;E3CikOtC;E2CtwOF;IAiMQ,UAAU;IACV,gBAA0B;E3CwkOhC;E2C1wOF;IAqMQ,sBAAgC;E3CwkOtC;E2C7wOF;IAiMQ,UAAU;IACV,gBAA0B;E3C+kOhC;E2CjxOF;IAqMQ,sBAAgC;E3C+kOtC;E2CpxOF;IAiMQ,UAAU;IACV,WAA0B;E3CslOhC;E2CxxOF;IAqMQ,iBAAgC;E3CslOtC;AACF;;ACjsOE;E0C3FF;IAwMM,UAAU;E3CylOd;E2CjyOF;IA0MM,UAAU;IACV,WAAW;E3C0lOf;E2CryOF;IA6MM,UAAU;IACV,UAAU;E3C2lOd;E2CzyOF;IAgNM,UAAU;IACV,eAAe;E3C4lOnB;E2C7yOF;IAmNM,UAAU;IACV,UAAU;E3C6lOd;E2CjzOF;IAsNM,UAAU;IACV,eAAe;E3C8lOnB;E2CrzOF;IAyNM,UAAU;IACV,UAAU;E3C+lOd;E2CzzOF;IA4NM,UAAU;IACV,UAAU;E3CgmOd;E2C7zOF;IA+NM,UAAU;IACV,UAAU;E3CimOd;E2Cj0OF;IAkOM,UAAU;IACV,UAAU;E3CkmOd;E2Cr0OF;IAqOM,UAAU;IACV,UAAU;E3CmmOd;E2Cz0OF;IAwOM,gBAAgB;E3ComOpB;E2C50OF;IA0OM,qBAAqB;E3CqmOzB;E2C/0OF;IA4OM,gBAAgB;E3CsmOpB;E2Cl1OF;IA8OM,qBAAqB;E3CumOzB;E2Cr1OF;IAgPM,gBAAgB;E3CwmOpB;E2Cx1OF;IAkPM,gBAAgB;E3CymOpB;E2C31OF;IAoPM,gBAAgB;E3C0mOpB;E2C91OF;IAsPM,gBAAgB;E3C2mOpB;E2Cj2OF;IAwPM,gBAAgB;E3C4mOpB;E2Cp2OF;IA2PQ,UAAU;IACV,SAA0B;E3C4mOhC;E2Cx2OF;IA8PQ,eAAgC;E3C6mOtC;E2C32OF;IA2PQ,UAAU;IACV,eAA0B;E3CmnOhC;E2C/2OF;IA8PQ,qBAAgC;E3ConOtC;E2Cl3OF;IA2PQ,UAAU;IACV,gBAA0B;E3C0nOhC;E2Ct3OF;IA8PQ,sBAAgC;E3C2nOtC;E2Cz3OF;IA2PQ,UAAU;IACV,UAA0B;E3CioOhC;E2C73OF;IA8PQ,gBAAgC;E3CkoOtC;E2Ch4OF;IA2PQ,UAAU;IACV,gBAA0B;E3CwoOhC;E2Cp4OF;IA8PQ,sBAAgC;E3CyoOtC;E2Cv4OF;IA2PQ,UAAU;IACV,gBAA0B;E3C+oOhC;E2C34OF;IA8PQ,sBAAgC;E3CgpOtC;E2C94OF;IA2PQ,UAAU;IACV,UAA0B;E3CspOhC;E2Cl5OF;IA8PQ,gBAAgC;E3CupOtC;E2Cr5OF;IA2PQ,UAAU;IACV,gBAA0B;E3C6pOhC;E2Cz5OF;IA8PQ,sBAAgC;E3C8pOtC;E2C55OF;IA2PQ,UAAU;IACV,gBAA0B;E3CoqOhC;E2Ch6OF;IA8PQ,sBAAgC;E3CqqOtC;E2Cn6OF;IA2PQ,UAAU;IACV,UAA0B;E3C2qOhC;E2Cv6OF;IA8PQ,gBAAgC;E3C4qOtC;E2C16OF;IA2PQ,UAAU;IACV,gBAA0B;E3CkrOhC;E2C96OF;IA8PQ,sBAAgC;E3CmrOtC;E2Cj7OF;IA2PQ,UAAU;IACV,gBAA0B;E3CyrOhC;E2Cr7OF;IA8PQ,sBAAgC;E3C0rOtC;E2Cx7OF;IA2PQ,UAAU;IACV,WAA0B;E3CgsOhC;E2C57OF;IA8PQ,iBAAgC;E3CisOtC;AACF;;ACj2OE;E0C/FF;IAiQM,UAAU;E3CosOd;E2Cr8OF;IAmQM,UAAU;IACV,WAAW;E3CqsOf;E2Cz8OF;IAsQM,UAAU;IACV,UAAU;E3CssOd;E2C78OF;IAyQM,UAAU;IACV,eAAe;E3CusOnB;E2Cj9OF;IA4QM,UAAU;IACV,UAAU;E3CwsOd;E2Cr9OF;IA+QM,UAAU;IACV,eAAe;E3CysOnB;E2Cz9OF;IAkRM,UAAU;IACV,UAAU;E3C0sOd;E2C79OF;IAqRM,UAAU;IACV,UAAU;E3C2sOd;E2Cj+OF;IAwRM,UAAU;IACV,UAAU;E3C4sOd;E2Cr+OF;IA2RM,UAAU;IACV,UAAU;E3C6sOd;E2Cz+OF;IA8RM,UAAU;IACV,UAAU;E3C8sOd;E2C7+OF;IAiSM,gBAAgB;E3C+sOpB;E2Ch/OF;IAmSM,qBAAqB;E3CgtOzB;E2Cn/OF;IAqSM,gBAAgB;E3CitOpB;E2Ct/OF;IAuSM,qBAAqB;E3CktOzB;E2Cz/OF;IAySM,gBAAgB;E3CmtOpB;E2C5/OF;IA2SM,gBAAgB;E3CotOpB;E2C//OF;IA6SM,gBAAgB;E3CqtOpB;E2ClgPF;IA+SM,gBAAgB;E3CstOpB;E2CrgPF;IAiTM,gBAAgB;E3CutOpB;E2CxgPF;IAoTQ,UAAU;IACV,SAA0B;E3CutOhC;E2C5gPF;IAuTQ,eAAgC;E3CwtOtC;E2C/gPF;IAoTQ,UAAU;IACV,eAA0B;E3C8tOhC;E2CnhPF;IAuTQ,qBAAgC;E3C+tOtC;E2CthPF;IAoTQ,UAAU;IACV,gBAA0B;E3CquOhC;E2C1hPF;IAuTQ,sBAAgC;E3CsuOtC;E2C7hPF;IAoTQ,UAAU;IACV,UAA0B;E3C4uOhC;E2CjiPF;IAuTQ,gBAAgC;E3C6uOtC;E2CpiPF;IAoTQ,UAAU;IACV,gBAA0B;E3CmvOhC;E2CxiPF;IAuTQ,sBAAgC;E3CovOtC;E2C3iPF;IAoTQ,UAAU;IACV,gBAA0B;E3C0vOhC;E2C/iPF;IAuTQ,sBAAgC;E3C2vOtC;E2CljPF;IAoTQ,UAAU;IACV,UAA0B;E3CiwOhC;E2CtjPF;IAuTQ,gBAAgC;E3CkwOtC;E2CzjPF;IAoTQ,UAAU;IACV,gBAA0B;E3CwwOhC;E2C7jPF;IAuTQ,sBAAgC;E3CywOtC;E2ChkPF;IAoTQ,UAAU;IACV,gBAA0B;E3C+wOhC;E2CpkPF;IAuTQ,sBAAgC;E3CgxOtC;E2CvkPF;IAoTQ,UAAU;IACV,UAA0B;E3CsxOhC;E2C3kPF;IAuTQ,gBAAgC;E3CuxOtC;E2C9kPF;IAoTQ,UAAU;IACV,gBAA0B;E3C6xOhC;E2CllPF;IAuTQ,sBAAgC;E3C8xOtC;E2CrlPF;IAoTQ,UAAU;IACV,gBAA0B;E3CoyOhC;E2CzlPF;IAuTQ,sBAAgC;E3CqyOtC;E2C5lPF;IAoTQ,UAAU;IACV,WAA0B;E3C2yOhC;E2ChmPF;IAuTQ,iBAAgC;E3C4yOtC;AACF;;ACt/OI;E0C9GJ;IA0TM,UAAU;E3C+yOd;E2CzmPF;IA4TM,UAAU;IACV,WAAW;E3CgzOf;E2C7mPF;IA+TM,UAAU;IACV,UAAU;E3CizOd;E2CjnPF;IAkUM,UAAU;IACV,eAAe;E3CkzOnB;E2CrnPF;IAqUM,UAAU;IACV,UAAU;E3CmzOd;E2CznPF;IAwUM,UAAU;IACV,eAAe;E3CozOnB;E2C7nPF;IA2UM,UAAU;IACV,UAAU;E3CqzOd;E2CjoPF;IA8UM,UAAU;IACV,UAAU;E3CszOd;E2CroPF;IAiVM,UAAU;IACV,UAAU;E3CuzOd;E2CzoPF;IAoVM,UAAU;IACV,UAAU;E3CwzOd;E2C7oPF;IAuVM,UAAU;IACV,UAAU;E3CyzOd;E2CjpPF;IA0VM,gBAAgB;E3C0zOpB;E2CppPF;IA4VM,qBAAqB;E3C2zOzB;E2CvpPF;IA8VM,gBAAgB;E3C4zOpB;E2C1pPF;IAgWM,qBAAqB;E3C6zOzB;E2C7pPF;IAkWM,gBAAgB;E3C8zOpB;E2ChqPF;IAoWM,gBAAgB;E3C+zOpB;E2CnqPF;IAsWM,gBAAgB;E3Cg0OpB;E2CtqPF;IAwWM,gBAAgB;E3Ci0OpB;E2CzqPF;IA0WM,gBAAgB;E3Ck0OpB;E2C5qPF;IA6WQ,UAAU;IACV,SAA0B;E3Ck0OhC;E2ChrPF;IAgXQ,eAAgC;E3Cm0OtC;E2CnrPF;IA6WQ,UAAU;IACV,eAA0B;E3Cy0OhC;E2CvrPF;IAgXQ,qBAAgC;E3C00OtC;E2C1rPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cg1OhC;E2C9rPF;IAgXQ,sBAAgC;E3Ci1OtC;E2CjsPF;IA6WQ,UAAU;IACV,UAA0B;E3Cu1OhC;E2CrsPF;IAgXQ,gBAAgC;E3Cw1OtC;E2CxsPF;IA6WQ,UAAU;IACV,gBAA0B;E3C81OhC;E2C5sPF;IAgXQ,sBAAgC;E3C+1OtC;E2C/sPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cq2OhC;E2CntPF;IAgXQ,sBAAgC;E3Cs2OtC;E2CttPF;IA6WQ,UAAU;IACV,UAA0B;E3C42OhC;E2C1tPF;IAgXQ,gBAAgC;E3C62OtC;E2C7tPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cm3OhC;E2CjuPF;IAgXQ,sBAAgC;E3Co3OtC;E2CpuPF;IA6WQ,UAAU;IACV,gBAA0B;E3C03OhC;E2CxuPF;IAgXQ,sBAAgC;E3C23OtC;E2C3uPF;IA6WQ,UAAU;IACV,UAA0B;E3Ci4OhC;E2C/uPF;IAgXQ,gBAAgC;E3Ck4OtC;E2ClvPF;IA6WQ,UAAU;IACV,gBAA0B;E3Cw4OhC;E2CtvPF;IAgXQ,sBAAgC;E3Cy4OtC;E2CzvPF;IA6WQ,UAAU;IACV,gBAA0B;E3C+4OhC;E2C7vPF;IAgXQ,sBAAgC;E3Cg5OtC;E2ChwPF;IA6WQ,UAAU;IACV,WAA0B;E3Cs5OhC;E2CpwPF;IAgXQ,iBAAgC;E3Cu5OtC;AACF;;AC3oPI;E0C7HJ;IAmXM,UAAU;E3C05Od;E2C7wPF;IAqXM,UAAU;IACV,WAAW;E3C25Of;E2CjxPF;IAwXM,UAAU;IACV,UAAU;E3C45Od;E2CrxPF;IA2XM,UAAU;IACV,eAAe;E3C65OnB;E2CzxPF;IA8XM,UAAU;IACV,UAAU;E3C85Od;E2C7xPF;IAiYM,UAAU;IACV,eAAe;E3C+5OnB;E2CjyPF;IAoYM,UAAU;IACV,UAAU;E3Cg6Od;E2CryPF;IAuYM,UAAU;IACV,UAAU;E3Ci6Od;E2CzyPF;IA0YM,UAAU;IACV,UAAU;E3Ck6Od;E2C7yPF;IA6YM,UAAU;IACV,UAAU;E3Cm6Od;E2CjzPF;IAgZM,UAAU;IACV,UAAU;E3Co6Od;E2CrzPF;IAmZM,gBAAgB;E3Cq6OpB;E2CxzPF;IAqZM,qBAAqB;E3Cs6OzB;E2C3zPF;IAuZM,gBAAgB;E3Cu6OpB;E2C9zPF;IAyZM,qBAAqB;E3Cw6OzB;E2Cj0PF;IA2ZM,gBAAgB;E3Cy6OpB;E2Cp0PF;IA6ZM,gBAAgB;E3C06OpB;E2Cv0PF;IA+ZM,gBAAgB;E3C26OpB;E2C10PF;IAiaM,gBAAgB;E3C46OpB;E2C70PF;IAmaM,gBAAgB;E3C66OpB;E2Ch1PF;IAsaQ,UAAU;IACV,SAA0B;E3C66OhC;E2Cp1PF;IAyaQ,eAAgC;E3C86OtC;E2Cv1PF;IAsaQ,UAAU;IACV,eAA0B;E3Co7OhC;E2C31PF;IAyaQ,qBAAgC;E3Cq7OtC;E2C91PF;IAsaQ,UAAU;IACV,gBAA0B;E3C27OhC;E2Cl2PF;IAyaQ,sBAAgC;E3C47OtC;E2Cr2PF;IAsaQ,UAAU;IACV,UAA0B;E3Ck8OhC;E2Cz2PF;IAyaQ,gBAAgC;E3Cm8OtC;E2C52PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cy8OhC;E2Ch3PF;IAyaQ,sBAAgC;E3C08OtC;E2Cn3PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cg9OhC;E2Cv3PF;IAyaQ,sBAAgC;E3Ci9OtC;E2C13PF;IAsaQ,UAAU;IACV,UAA0B;E3Cu9OhC;E2C93PF;IAyaQ,gBAAgC;E3Cw9OtC;E2Cj4PF;IAsaQ,UAAU;IACV,gBAA0B;E3C89OhC;E2Cr4PF;IAyaQ,sBAAgC;E3C+9OtC;E2Cx4PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cq+OhC;E2C54PF;IAyaQ,sBAAgC;E3Cs+OtC;E2C/4PF;IAsaQ,UAAU;IACV,UAA0B;E3C4+OhC;E2Cn5PF;IAyaQ,gBAAgC;E3C6+OtC;E2Ct5PF;IAsaQ,UAAU;IACV,gBAA0B;E3Cm/OhC;E2C15PF;IAyaQ,sBAAgC;E3Co/OtC;E2C75PF;IAsaQ,UAAU;IACV,gBAA0B;E3C0/OhC;E2Cj6PF;IAyaQ,sBAAgC;E3C2/OtC;E2Cp6PF;IAsaQ,UAAU;IACV,WAA0B;E3CigPhC;E2Cx6PF;IAyaQ,iBAAgC;E3CkgPtC;AACF;;A2CjgPA;EACE,qBA9akB;EA+alB,sBA/akB;EAgblB,oBAhbkB;A3Co7PpB;;A2CvgPA;EAKI,uBAlbgB;A3Cw7PpB;;A2C3gPA;EAOI,qCAA4C;A3CwgPhD;;A2C/gPA;EAUI,uBAAuB;A3CygP3B;;A2CnhPA;EAYI,cAAc;EACd,eAAe;EACf,aAAa;A3C2gPjB;;A2CzhPA;EAgBM,SAAS;EACT,qBAAqB;A3C6gP3B;;A2C9hPA;EAmBM,qBAAqB;A3C+gP3B;;A2CliPA;EAqBM,gBAAgB;A3CihPtB;;A2CtiPA;EAuBI,aAAa;A3CmhPjB;;A2C1iPA;EAyBI,eAAe;A3CqhPnB;;A2C9iPA;EA2BI,mBAAmB;A3CuhPvB;;AC14PE;E0CwVF;IA+BM,aAAa;E3CwhPjB;AACF;;ACp4PE;E0C4UF;IAmCM,aAAa;E3C0hPjB;AACF;;A2CxhPE;EACE,oBAAY;EACZ,wCAAwC;EACxC,yCAAyC;A3C2hP7C;;A2C9hPE;EAKI,8BAA8B;EAC9B,+BAA+B;A3C6hPrC;;A2CniPE;EASM,iBAAY;A3C8hPpB;;ACz6PE;E0CkYA;IAYQ,iBAAY;E3CgiPpB;AACF;;AC36PE;E0C8XA;IAeQ,iBAAY;E3CmiPpB;AACF;;AC76PE;E0C0XA;IAkBQ,iBAAY;E3CsiPpB;AACF;;AC/6PE;E0CsXA;IAqBQ,iBAAY;E3CyiPpB;AACF;;ACj7PE;E0CkXA;IAwBQ,iBAAY;E3C4iPpB;AACF;;ACl7PI;E0C6WF;IA2BQ,iBAAY;E3C+iPpB;AACF;;AC96PI;E0CmWF;IA8BQ,iBAAY;E3CkjPpB;AACF;;AC/6PI;E0C8VF;IAiCQ,iBAAY;E3CqjPpB;AACF;;AC36PI;E0CoVF;IAoCQ,iBAAY;E3CwjPpB;AACF;;A2C7lPE;EASM,oBAAY;A3CwlPpB;;ACn+PE;E0CkYA;IAYQ,oBAAY;E3C0lPpB;AACF;;ACr+PE;E0C8XA;IAeQ,oBAAY;E3C6lPpB;AACF;;ACv+PE;E0C0XA;IAkBQ,oBAAY;E3CgmPpB;AACF;;ACz+PE;E0CsXA;IAqBQ,oBAAY;E3CmmPpB;AACF;;AC3+PE;E0CkXA;IAwBQ,oBAAY;E3CsmPpB;AACF;;AC5+PI;E0C6WF;IA2BQ,oBAAY;E3CymPpB;AACF;;ACx+PI;E0CmWF;IA8BQ,oBAAY;E3C4mPpB;AACF;;ACz+PI;E0C8VF;IAiCQ,oBAAY;E3C+mPpB;AACF;;ACr+PI;E0CoVF;IAoCQ,oBAAY;E3CknPpB;AACF;;A2CvpPE;EASM,mBAAY;A3CkpPpB;;AC7hQE;E0CkYA;IAYQ,mBAAY;E3CopPpB;AACF;;AC/hQE;E0C8XA;IAeQ,mBAAY;E3CupPpB;AACF;;ACjiQE;E0C0XA;IAkBQ,mBAAY;E3C0pPpB;AACF;;ACniQE;E0CsXA;IAqBQ,mBAAY;E3C6pPpB;AACF;;ACriQE;E0CkXA;IAwBQ,mBAAY;E3CgqPpB;AACF;;ACtiQI;E0C6WF;IA2BQ,mBAAY;E3CmqPpB;AACF;;ACliQI;E0CmWF;IA8BQ,mBAAY;E3CsqPpB;AACF;;ACniQI;E0C8VF;IAiCQ,mBAAY;E3CyqPpB;AACF;;AC/hQI;E0CoVF;IAoCQ,mBAAY;E3C4qPpB;AACF;;A2CjtPE;EASM,oBAAY;A3C4sPpB;;ACvlQE;E0CkYA;IAYQ,oBAAY;E3C8sPpB;AACF;;ACzlQE;E0C8XA;IAeQ,oBAAY;E3CitPpB;AACF;;AC3lQE;E0C0XA;IAkBQ,oBAAY;E3CotPpB;AACF;;AC7lQE;E0CsXA;IAqBQ,oBAAY;E3CutPpB;AACF;;AC/lQE;E0CkXA;IAwBQ,oBAAY;E3C0tPpB;AACF;;AChmQI;E0C6WF;IA2BQ,oBAAY;E3C6tPpB;AACF;;AC5lQI;E0CmWF;IA8BQ,oBAAY;E3CguPpB;AACF;;AC7lQI;E0C8VF;IAiCQ,oBAAY;E3CmuPpB;AACF;;ACzlQI;E0CoVF;IAoCQ,oBAAY;E3CsuPpB;AACF;;A2C3wPE;EASM,iBAAY;A3CswPpB;;ACjpQE;E0CkYA;IAYQ,iBAAY;E3CwwPpB;AACF;;ACnpQE;E0C8XA;IAeQ,iBAAY;E3C2wPpB;AACF;;ACrpQE;E0C0XA;IAkBQ,iBAAY;E3C8wPpB;AACF;;ACvpQE;E0CsXA;IAqBQ,iBAAY;E3CixPpB;AACF;;ACzpQE;E0CkXA;IAwBQ,iBAAY;E3CoxPpB;AACF;;AC1pQI;E0C6WF;IA2BQ,iBAAY;E3CuxPpB;AACF;;ACtpQI;E0CmWF;IA8BQ,iBAAY;E3C0xPpB;AACF;;ACvpQI;E0C8VF;IAiCQ,iBAAY;E3C6xPpB;AACF;;ACnpQI;E0CoVF;IAoCQ,iBAAY;E3CgyPpB;AACF;;A2Cr0PE;EASM,oBAAY;A3Cg0PpB;;AC3sQE;E0CkYA;IAYQ,oBAAY;E3Ck0PpB;AACF;;AC7sQE;E0C8XA;IAeQ,oBAAY;E3Cq0PpB;AACF;;AC/sQE;E0C0XA;IAkBQ,oBAAY;E3Cw0PpB;AACF;;ACjtQE;E0CsXA;IAqBQ,oBAAY;E3C20PpB;AACF;;ACntQE;E0CkXA;IAwBQ,oBAAY;E3C80PpB;AACF;;ACptQI;E0C6WF;IA2BQ,oBAAY;E3Ci1PpB;AACF;;AChtQI;E0CmWF;IA8BQ,oBAAY;E3Co1PpB;AACF;;ACjtQI;E0C8VF;IAiCQ,oBAAY;E3Cu1PpB;AACF;;AC7sQI;E0CoVF;IAoCQ,oBAAY;E3C01PpB;AACF;;A2C/3PE;EASM,mBAAY;A3C03PpB;;ACrwQE;E0CkYA;IAYQ,mBAAY;E3C43PpB;AACF;;ACvwQE;E0C8XA;IAeQ,mBAAY;E3C+3PpB;AACF;;ACzwQE;E0C0XA;IAkBQ,mBAAY;E3Ck4PpB;AACF;;AC3wQE;E0CsXA;IAqBQ,mBAAY;E3Cq4PpB;AACF;;AC7wQE;E0CkXA;IAwBQ,mBAAY;E3Cw4PpB;AACF;;AC9wQI;E0C6WF;IA2BQ,mBAAY;E3C24PpB;AACF;;AC1wQI;E0CmWF;IA8BQ,mBAAY;E3C84PpB;AACF;;AC3wQI;E0C8VF;IAiCQ,mBAAY;E3Ci5PpB;AACF;;ACvwQI;E0CoVF;IAoCQ,mBAAY;E3Co5PpB;AACF;;A2Cz7PE;EASM,oBAAY;A3Co7PpB;;AC/zQE;E0CkYA;IAYQ,oBAAY;E3Cs7PpB;AACF;;ACj0QE;E0C8XA;IAeQ,oBAAY;E3Cy7PpB;AACF;;ACn0QE;E0C0XA;IAkBQ,oBAAY;E3C47PpB;AACF;;ACr0QE;E0CsXA;IAqBQ,oBAAY;E3C+7PpB;AACF;;ACv0QE;E0CkXA;IAwBQ,oBAAY;E3Ck8PpB;AACF;;ACx0QI;E0C6WF;IA2BQ,oBAAY;E3Cq8PpB;AACF;;ACp0QI;E0CmWF;IA8BQ,oBAAY;E3Cw8PpB;AACF;;ACr0QI;E0C8VF;IAiCQ,oBAAY;E3C28PpB;AACF;;ACj0QI;E0CoVF;IAoCQ,oBAAY;E3C88PpB;AACF;;A2Cn/PE;EASM,iBAAY;A3C8+PpB;;ACz3QE;E0CkYA;IAYQ,iBAAY;E3Cg/PpB;AACF;;AC33QE;E0C8XA;IAeQ,iBAAY;E3Cm/PpB;AACF;;AC73QE;E0C0XA;IAkBQ,iBAAY;E3Cs/PpB;AACF;;AC/3QE;E0CsXA;IAqBQ,iBAAY;E3Cy/PpB;AACF;;ACj4QE;E0CkXA;IAwBQ,iBAAY;E3C4/PpB;AACF;;ACl4QI;E0C6WF;IA2BQ,iBAAY;E3C+/PpB;AACF;;AC93QI;E0CmWF;IA8BQ,iBAAY;E3CkgQpB;AACF;;AC/3QI;E0C8VF;IAiCQ,iBAAY;E3CqgQpB;AACF;;AC33QI;E0CoVF;IAoCQ,iBAAY;E3CwgQpB;AACF;;A4C9/QA;EACE,oBAAoB;EACpB,cAAc;EACd,aAAa;EACb,YAAY;EACZ,cAAc;EACd,+BAAuB;EAAvB,4BAAuB;EAAvB,uBAAuB;A5CigRzB;;A4CvgRA;EASI,qBAA+B;EAC/B,sBAAgC;EAChC,oBAA8B;A5CkgRlC;;A4C7gRA;EAaM,uBAAiC;A5CogRvC;;A4CjhRA;EAeM,sBAjBgB;A5CuhRtB;;A4CrhRA;EAiBI,oBAAoB;A5CwgRxB;;A4CzhRA;EAmBI,gBArBkB;A5C+hRtB;;A4C7hRA;EAqBI,sBAAsB;A5C4gR1B;;A4CjiRA;EAuBM,gCAAgC;A5C8gRtC;;ACl9QE;E2CnFF;IA2BM,aAAa;E5C+gRjB;E4C1iRF;IA8BQ,UAAU;IACV,eAAuB;E5C+gR7B;E4C9iRF;IA8BQ,UAAU;IACV,gBAAuB;E5CmhR7B;E4CljRF;IA8BQ,UAAU;IACV,UAAuB;E5CuhR7B;E4CtjRF;IA8BQ,UAAU;IACV,gBAAuB;E5C2hR7B;E4C1jRF;IA8BQ,UAAU;IACV,gBAAuB;E5C+hR7B;E4C9jRF;IA8BQ,UAAU;IACV,UAAuB;E5CmiR7B;E4ClkRF;IA8BQ,UAAU;IACV,gBAAuB;E5CuiR7B;E4CtkRF;IA8BQ,UAAU;IACV,gBAAuB;E5C2iR7B;E4C1kRF;IA8BQ,UAAU;IACV,UAAuB;E5C+iR7B;E4C9kRF;IA8BQ,UAAU;IACV,gBAAuB;E5CmjR7B;E4CllRF;IA8BQ,UAAU;IACV,gBAAuB;E5CujR7B;E4CtlRF;IA8BQ,UAAU;IACV,WAAuB;E5C2jR7B;AACF;;A6C7lRA,kBAAA;ACEE;EACE,uBAAwB;A9C+lR5B;;A8C9lRE;EAGI,yBAA0C;A9C+lRhD;;A8C9lRE;EACE,kCAAmC;A9CimRvC;;A8CxmRE;EACE,yBAAwB;A9C2mR5B;;A8C1mRE;EAGI,uBAA0C;A9C2mRhD;;A8C1mRE;EACE,oCAAmC;A9C6mRvC;;A8CpnRE;EACE,4BAAwB;A9CunR5B;;A8CtnRE;EAGI,yBAA0C;A9CunRhD;;A8CtnRE;EACE,uCAAmC;A9CynRvC;;A8ChoRE;EACE,yBAAwB;A9CmoR5B;;A8CloRE;EAGI,yBAA0C;A9CmoRhD;;A8CloRE;EACE,oCAAmC;A9CqoRvC;;A8C5oRE;EACE,yBAAwB;A9C+oR5B;;A8C9oRE;EAGI,yBAA0C;A9C+oRhD;;A8C9oRE;EACE,oCAAmC;A9CipRvC;;A8C5oRI;EACE,yBAA8B;A9C+oRpC;;A8C9oRI;EAGI,yBAAgD;A9C+oRxD;;A8C9oRI;EACE,oCAAyC;A9CipR/C;;A8C/oRI;EACE,yBAA6B;A9CkpRnC;;A8CjpRI;EAGI,yBAAgD;A9CkpRxD;;A8CjpRI;EACE,oCAAwC;A9CopR9C;;A8ChrRE;EACE,yBAAwB;A9CmrR5B;;A8ClrRE;EAGI,yBAA0C;A9CmrRhD;;A8ClrRE;EACE,oCAAmC;A9CqrRvC;;A8ChrRI;EACE,yBAA8B;A9CmrRpC;;A8ClrRI;EAGI,yBAAgD;A9CmrRxD;;A8ClrRI;EACE,oCAAyC;A9CqrR/C;;A8CnrRI;EACE,yBAA6B;A9CsrRnC;;A8CrrRI;EAGI,yBAAgD;A9CsrRxD;;A8CrrRI;EACE,oCAAwC;A9CwrR9C;;A8CptRE;EACE,yBAAwB;A9CutR5B;;A8CttRE;EAGI,yBAA0C;A9CutRhD;;A8CttRE;EACE,oCAAmC;A9CytRvC;;A8CptRI;EACE,yBAA8B;A9CutRpC;;A8CttRI;EAGI,yBAAgD;A9CutRxD;;A8CttRI;EACE,oCAAyC;A9CytR/C;;A8CvtRI;EACE,yBAA6B;A9C0tRnC;;A8CztRI;EAGI,yBAAgD;A9C0tRxD;;A8CztRI;EACE,oCAAwC;A9C4tR9C;;A8CxvRE;EACE,yBAAwB;A9C2vR5B;;A8C1vRE;EAGI,yBAA0C;A9C2vRhD;;A8C1vRE;EACE,oCAAmC;A9C6vRvC;;A8CxvRI;EACE,yBAA8B;A9C2vRpC;;A8C1vRI;EAGI,yBAAgD;A9C2vRxD;;A8C1vRI;EACE,oCAAyC;A9C6vR/C;;A8C3vRI;EACE,yBAA6B;A9C8vRnC;;A8C7vRI;EAGI,yBAAgD;A9C8vRxD;;A8C7vRI;EACE,oCAAwC;A9CgwR9C;;A8C5xRE;EACE,yBAAwB;A9C+xR5B;;A8C9xRE;EAGI,yBAA0C;A9C+xRhD;;A8C9xRE;EACE,oCAAmC;A9CiyRvC;;A8C5xRI;EACE,yBAA8B;A9C+xRpC;;A8C9xRI;EAGI,yBAAgD;A9C+xRxD;;A8C9xRI;EACE,oCAAyC;A9CiyR/C;;A8C/xRI;EACE,yBAA6B;A9CkyRnC;;A8CjyRI;EAGI,yBAAgD;A9CkyRxD;;A8CjyRI;EACE,oCAAwC;A9CoyR9C;;A8Ch0RE;EACE,yBAAwB;A9Cm0R5B;;A8Cl0RE;EAGI,yBAA0C;A9Cm0RhD;;A8Cl0RE;EACE,oCAAmC;A9Cq0RvC;;A8Ch0RI;EACE,yBAA8B;A9Cm0RpC;;A8Cl0RI;EAGI,yBAAgD;A9Cm0RxD;;A8Cl0RI;EACE,oCAAyC;A9Cq0R/C;;A8Cn0RI;EACE,yBAA6B;A9Cs0RnC;;A8Cr0RI;EAGI,yBAAgD;A9Cs0RxD;;A8Cr0RI;EACE,oCAAwC;A9Cw0R9C;;A8Cr0RE;EACE,yBAAwB;A9Cw0R5B;;A8Cv0RE;EACE,oCAAmC;A9C00RvC;;A8C70RE;EACE,yBAAwB;A9Cg1R5B;;A8C/0RE;EACE,oCAAmC;A9Ck1RvC;;A8Cr1RE;EACE,yBAAwB;A9Cw1R5B;;A8Cv1RE;EACE,oCAAmC;A9C01RvC;;A8C71RE;EACE,yBAAwB;A9Cg2R5B;;A8C/1RE;EACE,oCAAmC;A9Ck2RvC;;A8Cr2RE;EACE,yBAAwB;A9Cw2R5B;;A8Cv2RE;EACE,oCAAmC;A9C02RvC;;A8C72RE;EACE,yBAAwB;A9Cg3R5B;;A8C/2RE;EACE,oCAAmC;A9Ck3RvC;;A8Cr3RE;EACE,yBAAwB;A9Cw3R5B;;A8Cv3RE;EACE,oCAAmC;A9C03RvC;;A8C73RE;EACE,4BAAwB;A9Cg4R5B;;A8C/3RE;EACE,uCAAmC;A9Ck4RvC;;A8Cr4RE;EACE,yBAAwB;A9Cw4R5B;;A8Cv4RE;EACE,oCAAmC;A9C04RvC;;A+C56RE;EACE,8BAAiC;A/C+6RrC;;A+Ch7RE;EACE,sCAAiC;A/Cm7RrC;;A+Cp7RE;EACE,iCAAiC;A/Cu7RrC;;A+Cx7RE;EACE,yCAAiC;A/C27RrC;;A+Cv7RE;EACE,4BAA4B;A/C07RhC;;A+C37RE;EACE,0BAA4B;A/C87RhC;;A+C/7RE;EACE,kCAA4B;A/Ck8RhC;;A+C97RE;EACE,sCAAkC;A/Ci8RtC;;A+Cl8RE;EACE,oCAAkC;A/Cq8RtC;;A+Ct8RE;EACE,kCAAkC;A/Cy8RtC;;A+C18RE;EACE,yCAAkC;A/C68RtC;;A+C98RE;EACE,wCAAkC;A/Ci9RtC;;A+Cl9RE;EACE,wCAAkC;A/Cq9RtC;;A+Ct9RE;EACE,iCAAkC;A/Cy9RtC;;A+C19RE;EACE,+BAAkC;A/C69RtC;;A+C99RE;EACE,gCAAkC;A/Ci+RtC;;A+Cl+RE;EACE,iCAAkC;A/Cq+RtC;;A+Cj+RE;EACE,oCAAgC;A/Co+RpC;;A+Cr+RE;EACE,kCAAgC;A/Cw+RpC;;A+Cz+RE;EACE,gCAAgC;A/C4+RpC;;A+C7+RE;EACE,uCAAgC;A/Cg/RpC;;A+Cj/RE;EACE,sCAAgC;A/Co/RpC;;A+Cr/RE;EACE,sCAAgC;A/Cw/RpC;;A+Cz/RE;EACE,iCAAgC;A/C4/RpC;;A+C7/RE;EACE,+BAAgC;A/CggSpC;;A+CjgSE;EACE,6BAAgC;A/CogSpC;;A+CrgSE;EACE,kCAAgC;A/CwgSpC;;A+CpgSE;EACE,+BAA8B;A/CugSlC;;A+CxgSE;EACE,kCAA8B;A/C2gSlC;;A+C5gSE;EACE,gCAA8B;A/C+gSlC;;A+ChhSE;EACE,8BAA8B;A/CmhSlC;;A+CphSE;EACE,gCAA8B;A/CuhSlC;;A+CxhSE;EACE,6BAA8B;A/C2hSlC;;A+C5hSE;EACE,2BAA8B;A/C+hSlC;;A+ChiSE;EACE,kCAA8B;A/CmiSlC;;A+CpiSE;EACE,gCAA8B;A/CuiSlC;;A+CniSE;EACE,2BAA6B;A/CsiSjC;;A+CviSE;EACE,iCAA6B;A/C0iSjC;;A+C3iSE;EACE,+BAA6B;A/C8iSjC;;A+C/iSE;EACE,6BAA6B;A/CkjSjC;;A+CnjSE;EACE,+BAA6B;A/CsjSjC;;A+CvjSE;EACE,8BAA6B;A/C0jSjC;;A+CrjSI;EACE,uBAAqC;A/CwjS3C;;A+CzjSI;EACE,uBAAqC;A/C4jS3C;;A+C7jSI;EACE,uBAAqC;A/CgkS3C;;A+CjkSI;EACE,uBAAqC;A/CokS3C;;A+CrkSI;EACE,uBAAqC;A/CwkS3C;;A+CzkSI;EACE,uBAAqC;A/C4kS3C;;A+C7kSI;EACE,yBAAqC;A/CglS3C;;A+CjlSI;EACE,yBAAqC;A/ColS3C;;A+CrlSI;EACE,yBAAqC;A/CwlS3C;;A+CzlSI;EACE,yBAAqC;A/C4lS3C;;A+C7lSI;EACE,yBAAqC;A/CgmS3C;;A+CjmSI;EACE,yBAAqC;A/ComS3C;;ACnoSE;EACE,WAAW;EACX,YAAY;EACZ,cAAc;ADsoSlB;;AgDzoSA;EACE,sBAAsB;AhD4oSxB;;AgD1oSA;EACE,uBAAuB;AhD6oSzB;;AiDppSA;EACE,2BAA2B;AjDupS7B;;AiDrpSA;EACE,2BAA2B;AjDwpS7B;;AiDtpSA;EACE,0BAA0B;AjDypS5B;;AkDhqSA;EACE,2BAA2B;AlDmqS7B;;AmDjqSA;EACE,6BAA6B;AnDoqS/B;;AoDxqSA;EACE,oBAAoB;ApD2qStB;;AoDzqSA;EACE,qBAAqB;ApD4qSvB;;AoDjqSI;EACE,oBAA+B;ApDoqSrC;;AoDjqSM;EACE,wBAA8C;ApDoqStD;;AoDrqSM;EACE,0BAA8C;ApDwqStD;;AoDzqSM;EACE,2BAA8C;ApD4qStD;;AoD7qSM;EACE,yBAA8C;ApDgrStD;;AoD7qSM;EACE,yBAAyC;EACzC,0BAA2C;ApDgrSnD;;AoD7qSM;EACE,wBAAuC;EACvC,2BAA6C;ApDgrSrD;;AoD/rSI;EACE,0BAA+B;ApDksSrC;;AoD/rSM;EACE,8BAA8C;ApDksStD;;AoDnsSM;EACE,gCAA8C;ApDssStD;;AoDvsSM;EACE,iCAA8C;ApD0sStD;;AoD3sSM;EACE,+BAA8C;ApD8sStD;;AoD3sSM;EACE,+BAAyC;EACzC,gCAA2C;ApD8sSnD;;AoD3sSM;EACE,8BAAuC;EACvC,iCAA6C;ApD8sSrD;;AoD7tSI;EACE,yBAA+B;ApDguSrC;;AoD7tSM;EACE,6BAA8C;ApDguStD;;AoDjuSM;EACE,+BAA8C;ApDouStD;;AoDruSM;EACE,gCAA8C;ApDwuStD;;AoDzuSM;EACE,8BAA8C;ApD4uStD;;AoDzuSM;EACE,8BAAyC;EACzC,+BAA2C;ApD4uSnD;;AoDzuSM;EACE,6BAAuC;EACvC,gCAA6C;ApD4uSrD;;AoD3vSI;EACE,0BAA+B;ApD8vSrC;;AoD3vSM;EACE,8BAA8C;ApD8vStD;;AoD/vSM;EACE,gCAA8C;ApDkwStD;;AoDnwSM;EACE,iCAA8C;ApDswStD;;AoDvwSM;EACE,+BAA8C;ApD0wStD;;AoDvwSM;EACE,+BAAyC;EACzC,gCAA2C;ApD0wSnD;;AoDvwSM;EACE,8BAAuC;EACvC,iCAA6C;ApD0wSrD;;AoDzxSI;EACE,uBAA+B;ApD4xSrC;;AoDzxSM;EACE,2BAA8C;ApD4xStD;;AoD7xSM;EACE,6BAA8C;ApDgyStD;;AoDjySM;EACE,8BAA8C;ApDoyStD;;AoDrySM;EACE,4BAA8C;ApDwyStD;;AoDrySM;EACE,4BAAyC;EACzC,6BAA2C;ApDwySnD;;AoDrySM;EACE,2BAAuC;EACvC,8BAA6C;ApDwySrD;;AoDvzSI;EACE,yBAA+B;ApD0zSrC;;AoDvzSM;EACE,6BAA8C;ApD0zStD;;AoD3zSM;EACE,+BAA8C;ApD8zStD;;AoD/zSM;EACE,gCAA8C;ApDk0StD;;AoDn0SM;EACE,8BAA8C;ApDs0StD;;AoDn0SM;EACE,8BAAyC;EACzC,+BAA2C;ApDs0SnD;;AoDn0SM;EACE,6BAAuC;EACvC,gCAA6C;ApDs0SrD;;AoDr1SI;EACE,uBAA+B;ApDw1SrC;;AoDr1SM;EACE,2BAA8C;ApDw1StD;;AoDz1SM;EACE,6BAA8C;ApD41StD;;AoD71SM;EACE,8BAA8C;ApDg2StD;;AoDj2SM;EACE,4BAA8C;ApDo2StD;;AoDj2SM;EACE,4BAAyC;EACzC,6BAA2C;ApDo2SnD;;AoDj2SM;EACE,2BAAuC;EACvC,8BAA6C;ApDo2SrD;;AoDn3SI;EACE,qBAA+B;ApDs3SrC;;AoDn3SM;EACE,yBAA8C;ApDs3StD;;AoDv3SM;EACE,2BAA8C;ApD03StD;;AoD33SM;EACE,4BAA8C;ApD83StD;;AoD/3SM;EACE,0BAA8C;ApDk4StD;;AoD/3SM;EACE,0BAAyC;EACzC,2BAA2C;ApDk4SnD;;AoD/3SM;EACE,yBAAuC;EACvC,4BAA6C;ApDk4SrD;;AoDj5SI;EACE,2BAA+B;ApDo5SrC;;AoDj5SM;EACE,+BAA8C;ApDo5StD;;AoDr5SM;EACE,iCAA8C;ApDw5StD;;AoDz5SM;EACE,kCAA8C;ApD45StD;;AoD75SM;EACE,gCAA8C;ApDg6StD;;AoD75SM;EACE,gCAAyC;EACzC,iCAA2C;ApDg6SnD;;AoD75SM;EACE,+BAAuC;EACvC,kCAA6C;ApDg6SrD;;AoD/6SI;EACE,0BAA+B;ApDk7SrC;;AoD/6SM;EACE,8BAA8C;ApDk7StD;;AoDn7SM;EACE,gCAA8C;ApDs7StD;;AoDv7SM;EACE,iCAA8C;ApD07StD;;AoD37SM;EACE,+BAA8C;ApD87StD;;AoD37SM;EACE,+BAAyC;EACzC,gCAA2C;ApD87SnD;;AoD37SM;EACE,8BAAuC;EACvC,iCAA6C;ApD87SrD;;AoD78SI;EACE,2BAA+B;ApDg9SrC;;AoD78SM;EACE,+BAA8C;ApDg9StD;;AoDj9SM;EACE,iCAA8C;ApDo9StD;;AoDr9SM;EACE,kCAA8C;ApDw9StD;;AoDz9SM;EACE,gCAA8C;ApD49StD;;AoDz9SM;EACE,gCAAyC;EACzC,iCAA2C;ApD49SnD;;AoDz9SM;EACE,+BAAuC;EACvC,kCAA6C;ApD49SrD;;AoD3+SI;EACE,wBAA+B;ApD8+SrC;;AoD3+SM;EACE,4BAA8C;ApD8+StD;;AoD/+SM;EACE,8BAA8C;ApDk/StD;;AoDn/SM;EACE,+BAA8C;ApDs/StD;;AoDv/SM;EACE,6BAA8C;ApD0/StD;;AoDv/SM;EACE,6BAAyC;EACzC,8BAA2C;ApD0/SnD;;AoDv/SM;EACE,4BAAuC;EACvC,+BAA6C;ApD0/SrD;;AoDzgTI;EACE,0BAA+B;ApD4gTrC;;AoDzgTM;EACE,8BAA8C;ApD4gTtD;;AoD7gTM;EACE,gCAA8C;ApDghTtD;;AoDjhTM;EACE,iCAA8C;ApDohTtD;;AoDrhTM;EACE,+BAA8C;ApDwhTtD;;AoDrhTM;EACE,+BAAyC;EACzC,gCAA2C;ApDwhTnD;;AoDrhTM;EACE,8BAAuC;EACvC,iCAA6C;ApDwhTrD;;AoDviTI;EACE,wBAA+B;ApD0iTrC;;AoDviTM;EACE,4BAA8C;ApD0iTtD;;AoD3iTM;EACE,8BAA8C;ApD8iTtD;;AoD/iTM;EACE,+BAA8C;ApDkjTtD;;AoDnjTM;EACE,6BAA8C;ApDsjTtD;;AoDnjTM;EACE,6BAAyC;EACzC,8BAA2C;ApDsjTnD;;AoDnjTM;EACE,4BAAuC;EACvC,+BAA6C;ApDsjTrD;;AqDjlTI;EACE,0BAA2B;ArDolTjC;;AqDrlTI;EACE,4BAA2B;ArDwlTjC;;AqDzlTI;EACE,0BAA2B;ArD4lTjC;;AqD7lTI;EACE,4BAA2B;ArDgmTjC;;AqDjmTI;EACE,6BAA2B;ArDomTjC;;AqDrmTI;EACE,0BAA2B;ArDwmTjC;;AqDzmTI;EACE,6BAA2B;ArD4mTjC;;AC/hTE;EoD9EE;IACE,0BAA2B;ErDinT/B;EqDlnTE;IACE,4BAA2B;ErDonT/B;EqDrnTE;IACE,0BAA2B;ErDunT/B;EqDxnTE;IACE,4BAA2B;ErD0nT/B;EqD3nTE;IACE,6BAA2B;ErD6nT/B;EqD9nTE;IACE,0BAA2B;ErDgoT/B;EqDjoTE;IACE,6BAA2B;ErDmoT/B;AACF;;ACnjTE;EoDlFE;IACE,0BAA2B;ErDyoT/B;EqD1oTE;IACE,4BAA2B;ErD4oT/B;EqD7oTE;IACE,0BAA2B;ErD+oT/B;EqDhpTE;IACE,4BAA2B;ErDkpT/B;EqDnpTE;IACE,6BAA2B;ErDqpT/B;EqDtpTE;IACE,0BAA2B;ErDwpT/B;EqDzpTE;IACE,6BAA2B;ErD2pT/B;AACF;;ACnkTE;EoD1FE;IACE,0BAA2B;ErDiqT/B;EqDlqTE;IACE,4BAA2B;ErDoqT/B;EqDrqTE;IACE,0BAA2B;ErDuqT/B;EqDxqTE;IACE,4BAA2B;ErD0qT/B;EqD3qTE;IACE,6BAA2B;ErD6qT/B;EqD9qTE;IACE,0BAA2B;ErDgrT/B;EqDjrTE;IACE,6BAA2B;ErDmrT/B;AACF;;ACvlTE;EoD9FE;IACE,0BAA2B;ErDyrT/B;EqD1rTE;IACE,4BAA2B;ErD4rT/B;EqD7rTE;IACE,0BAA2B;ErD+rT/B;EqDhsTE;IACE,4BAA2B;ErDksT/B;EqDnsTE;IACE,6BAA2B;ErDqsT/B;EqDtsTE;IACE,0BAA2B;ErDwsT/B;EqDzsTE;IACE,6BAA2B;ErD2sT/B;AACF;;AChmTI;EoD7GA;IACE,0BAA2B;ErDitT/B;EqDltTE;IACE,4BAA2B;ErDotT/B;EqDrtTE;IACE,0BAA2B;ErDutT/B;EqDxtTE;IACE,4BAA2B;ErD0tT/B;EqD3tTE;IACE,6BAA2B;ErD6tT/B;EqD9tTE;IACE,0BAA2B;ErDguT/B;EqDjuTE;IACE,6BAA2B;ErDmuT/B;AACF;;ACzmTI;EoD5HA;IACE,0BAA2B;ErDyuT/B;EqD1uTE;IACE,4BAA2B;ErD4uT/B;EqD7uTE;IACE,0BAA2B;ErD+uT/B;EqDhvTE;IACE,4BAA2B;ErDkvT/B;EqDnvTE;IACE,6BAA2B;ErDqvT/B;EqDtvTE;IACE,0BAA2B;ErDwvT/B;EqDzvTE;IACE,6BAA2B;ErD2vT/B;AACF;;AqDnuTE;EACE,6BAAqC;ArDsuTzC;;AqDvuTE;EACE,8BAAqC;ArD0uTzC;;AqD3uTE;EACE,2BAAqC;ArD8uTzC;;AqD/uTE;EACE,4BAAqC;ArDkvTzC;;AC/rTE;EoD/CE;IACE,6BAAqC;ErDkvTzC;AACF;;ACjsTE;EoDhDE;IACE,6BAAqC;ErDqvTzC;AACF;;ACnsTE;EoDjDE;IACE,6BAAqC;ErDwvTzC;AACF;;ACrsTE;EoDlDE;IACE,6BAAqC;ErD2vTzC;AACF;;ACvsTE;EoDnDE;IACE,6BAAqC;ErD8vTzC;AACF;;ACxsTI;EoDrDA;IACE,6BAAqC;ErDiwTzC;AACF;;ACpsTI;EoD5DA;IACE,6BAAqC;ErDowTzC;AACF;;ACrsTI;EoD9DA;IACE,6BAAqC;ErDuwTzC;AACF;;ACjsTI;EoDrEA;IACE,6BAAqC;ErD0wTzC;AACF;;ACrvTE;EoD/CE;IACE,8BAAqC;ErDwyTzC;AACF;;ACvvTE;EoDhDE;IACE,8BAAqC;ErD2yTzC;AACF;;ACzvTE;EoDjDE;IACE,8BAAqC;ErD8yTzC;AACF;;AC3vTE;EoDlDE;IACE,8BAAqC;ErDizTzC;AACF;;AC7vTE;EoDnDE;IACE,8BAAqC;ErDozTzC;AACF;;AC9vTI;EoDrDA;IACE,8BAAqC;ErDuzTzC;AACF;;AC1vTI;EoD5DA;IACE,8BAAqC;ErD0zTzC;AACF;;AC3vTI;EoD9DA;IACE,8BAAqC;ErD6zTzC;AACF;;ACvvTI;EoDrEA;IACE,8BAAqC;ErDg0TzC;AACF;;AC3yTE;EoD/CE;IACE,2BAAqC;ErD81TzC;AACF;;AC7yTE;EoDhDE;IACE,2BAAqC;ErDi2TzC;AACF;;AC/yTE;EoDjDE;IACE,2BAAqC;ErDo2TzC;AACF;;ACjzTE;EoDlDE;IACE,2BAAqC;ErDu2TzC;AACF;;ACnzTE;EoDnDE;IACE,2BAAqC;ErD02TzC;AACF;;ACpzTI;EoDrDA;IACE,2BAAqC;ErD62TzC;AACF;;AChzTI;EoD5DA;IACE,2BAAqC;ErDg3TzC;AACF;;ACjzTI;EoD9DA;IACE,2BAAqC;ErDm3TzC;AACF;;AC7yTI;EoDrEA;IACE,2BAAqC;ErDs3TzC;AACF;;ACj2TE;EoD/CE;IACE,4BAAqC;ErDo5TzC;AACF;;ACn2TE;EoDhDE;IACE,4BAAqC;ErDu5TzC;AACF;;ACr2TE;EoDjDE;IACE,4BAAqC;ErD05TzC;AACF;;ACv2TE;EoDlDE;IACE,4BAAqC;ErD65TzC;AACF;;ACz2TE;EoDnDE;IACE,4BAAqC;ErDg6TzC;AACF;;AC12TI;EoDrDA;IACE,4BAAqC;ErDm6TzC;AACF;;ACt2TI;EoD5DA;IACE,4BAAqC;ErDs6TzC;AACF;;ACv2TI;EoD9DA;IACE,4BAAqC;ErDy6TzC;AACF;;ACn2TI;EoDrEA;IACE,4BAAqC;ErD46TzC;AACF;;AqD36TA;EACE,qCAAqC;ArD86TvC;;AqD56TA;EACE,oCAAoC;ArD+6TtC;;AqD76TA;EACE,oCAAoC;ArDg7TtC;;AqD96TA;EACE,6BAA6B;ArDi7T/B;;AqD/6TA;EACE,2BAAqC;ArDk7TvC;;AqDj7TA;EACE,2BAAsC;ArDo7TxC;;AqDn7TA;EACE,2BAAsC;ArDs7TxC;;AqDr7TA;EACE,2BAAwC;ArDw7T1C;;AqDv7TA;EACE,2BAAoC;ArD07TtC;;AqDx7TA;EACE,+LAAuC;ArD27TzC;;AqDz7TA;EACE,+LAAyC;ArD47T3C;;AqD17TA;EACE,+LAA0C;ArD67T5C;;AqD37TA;EACE,iCAAyC;ArD87T3C;;AqD57TA;EACE,iCAAoC;ArD+7TtC;;AsD3hUE;EACE,yBAA+B;AtD8hUnC;;ACn9TE;EqDzEE;IACE,yBAA+B;EtDgiUnC;AACF;;ACr9TE;EqD1EE;IACE,yBAA+B;EtDmiUnC;AACF;;ACv9TE;EqD3EE;IACE,yBAA+B;EtDsiUnC;AACF;;ACz9TE;EqD5EE;IACE,yBAA+B;EtDyiUnC;AACF;;AC39TE;EqD7EE;IACE,yBAA+B;EtD4iUnC;AACF;;AC59TI;EqD/EA;IACE,yBAA+B;EtD+iUnC;AACF;;ACx9TI;EqDtFA;IACE,yBAA+B;EtDkjUnC;AACF;;ACz9TI;EqDxFA;IACE,yBAA+B;EtDqjUnC;AACF;;ACr9TI;EqD/FA;IACE,yBAA+B;EtDwjUnC;AACF;;AsDrlUE;EACE,wBAA+B;AtDwlUnC;;AC7gUE;EqDzEE;IACE,wBAA+B;EtD0lUnC;AACF;;AC/gUE;EqD1EE;IACE,wBAA+B;EtD6lUnC;AACF;;ACjhUE;EqD3EE;IACE,wBAA+B;EtDgmUnC;AACF;;ACnhUE;EqD5EE;IACE,wBAA+B;EtDmmUnC;AACF;;ACrhUE;EqD7EE;IACE,wBAA+B;EtDsmUnC;AACF;;ACthUI;EqD/EA;IACE,wBAA+B;EtDymUnC;AACF;;AClhUI;EqDtFA;IACE,wBAA+B;EtD4mUnC;AACF;;ACnhUI;EqDxFA;IACE,wBAA+B;EtD+mUnC;AACF;;AC/gUI;EqD/FA;IACE,wBAA+B;EtDknUnC;AACF;;AsD/oUE;EACE,0BAA+B;AtDkpUnC;;ACvkUE;EqDzEE;IACE,0BAA+B;EtDopUnC;AACF;;ACzkUE;EqD1EE;IACE,0BAA+B;EtDupUnC;AACF;;AC3kUE;EqD3EE;IACE,0BAA+B;EtD0pUnC;AACF;;AC7kUE;EqD5EE;IACE,0BAA+B;EtD6pUnC;AACF;;AC/kUE;EqD7EE;IACE,0BAA+B;EtDgqUnC;AACF;;AChlUI;EqD/EA;IACE,0BAA+B;EtDmqUnC;AACF;;AC5kUI;EqDtFA;IACE,0BAA+B;EtDsqUnC;AACF;;AC7kUI;EqDxFA;IACE,0BAA+B;EtDyqUnC;AACF;;ACzkUI;EqD/FA;IACE,0BAA+B;EtD4qUnC;AACF;;AsDzsUE;EACE,gCAA+B;AtD4sUnC;;ACjoUE;EqDzEE;IACE,gCAA+B;EtD8sUnC;AACF;;ACnoUE;EqD1EE;IACE,gCAA+B;EtDitUnC;AACF;;ACroUE;EqD3EE;IACE,gCAA+B;EtDotUnC;AACF;;ACvoUE;EqD5EE;IACE,gCAA+B;EtDutUnC;AACF;;ACzoUE;EqD7EE;IACE,gCAA+B;EtD0tUnC;AACF;;AC1oUI;EqD/EA;IACE,gCAA+B;EtD6tUnC;AACF;;ACtoUI;EqDtFA;IACE,gCAA+B;EtDguUnC;AACF;;ACvoUI;EqDxFA;IACE,gCAA+B;EtDmuUnC;AACF;;ACnoUI;EqD/FA;IACE,gCAA+B;EtDsuUnC;AACF;;AsDnwUE;EACE,+BAA+B;AtDswUnC;;AC3rUE;EqDzEE;IACE,+BAA+B;EtDwwUnC;AACF;;AC7rUE;EqD1EE;IACE,+BAA+B;EtD2wUnC;AACF;;AC/rUE;EqD3EE;IACE,+BAA+B;EtD8wUnC;AACF;;ACjsUE;EqD5EE;IACE,+BAA+B;EtDixUnC;AACF;;ACnsUE;EqD7EE;IACE,+BAA+B;EtDoxUnC;AACF;;ACpsUI;EqD/EA;IACE,+BAA+B;EtDuxUnC;AACF;;AChsUI;EqDtFA;IACE,+BAA+B;EtD0xUnC;AACF;;ACjsUI;EqDxFA;IACE,+BAA+B;EtD6xUnC;AACF;;AC7rUI;EqD/FA;IACE,+BAA+B;EtDgyUnC;AACF;;AsD/xUA;EACE,wBAAwB;AtDkyU1B;;AsDhyUA;EACE,uBAAuB;EACvB,iCAAiC;EACjC,yBAAyB;EACzB,2BAA2B;EAC3B,qBAAqB;EACrB,6BAA6B;EAC7B,8BAA8B;EAC9B,wBAAwB;AtDmyU1B;;AChwUE;EqDhCA;IACE,wBAAwB;EtDoyU1B;AACF;;AClwUE;EqDhCA;IACE,wBAAwB;EtDsyU1B;AACF;;ACpwUE;EqDhCA;IACE,wBAAwB;EtDwyU1B;AACF;;ACtwUE;EqDhCA;IACE,wBAAwB;EtD0yU1B;AACF;;ACxwUE;EqDhCA;IACE,wBAAwB;EtD4yU1B;AACF;;ACzwUI;EqDjCF;IACE,wBAAwB;EtD8yU1B;AACF;;ACrwUI;EqDvCF;IACE,wBAAwB;EtDgzU1B;AACF;;ACtwUI;EqDxCF;IACE,wBAAwB;EtDkzU1B;AACF;;AClwUI;EqD9CF;IACE,wBAAwB;EtDozU1B;AACF;;AsDnzUA;EACE,6BAA6B;AtDszU/B;;AC1zUE;EqDOA;IACE,6BAA6B;EtDuzU/B;AACF;;AC5zUE;EqDOA;IACE,6BAA6B;EtDyzU/B;AACF;;AC9zUE;EqDOA;IACE,6BAA6B;EtD2zU/B;AACF;;ACh0UE;EqDOA;IACE,6BAA6B;EtD6zU/B;AACF;;ACl0UE;EqDOA;IACE,6BAA6B;EtD+zU/B;AACF;;ACn0UI;EqDMF;IACE,6BAA6B;EtDi0U/B;AACF;;AC/zUI;EqDAF;IACE,6BAA6B;EtDm0U/B;AACF;;ACh0UI;EqDDF;IACE,6BAA6B;EtDq0U/B;AACF;;AC5zUI;EqDPF;IACE,6BAA6B;EtDu0U/B;AACF;;AuDj8UA,iBAAA;ACQA;EACE,oBAAoB;EACpB,aAAa;EACb,sBAAsB;EACtB,8BAA8B;AxD67UhC;;AwDj8UA;EAMI,gBAAgB;AxD+7UpB;;AwDr8UA;EASM,mBAAmB;AxDg8UzB;;AwDz8UA;EAeM,uBtDRyB;EsDSzB,ctDtBuB;AFo9U7B;;AwD98UA;;EAmBQ,cAAc;AxDg8UtB;;AwDn9UA;EAqBQ,ctD3BqB;AF69U7B;;AwDv9UA;EAuBQ,4BtD7BqB;AFi+U7B;;AwD39UA;;EA0BU,ctDhCmB;AFs+U7B;;AC34UE;EuDrFF;IA6BU,uBtDtBqB;EF89U7B;AACF;;AwDt+UA;;EAgCQ,4BtDtCqB;AFi/U7B;;AwD3+UA;;;EAqCU,yB7CgEuB;E6C/DvB,ctD5CmB;AFw/U7B;;AwDl/UA;EAyCU,ctD/CmB;EsDgDnB,YAAY;AxD68UtB;;AwDv/UA;EA4CY,UAAU;AxD+8UtB;;AwD3/UA;EA+CY,UAAU;AxDg9UtB;;AwD//UA;EAmDY,ctDzDiB;AFygV7B;;AwDngVA;EAqDc,uCtD3De;AF6gV7B;;AwDvgVA;EAyDc,yBtD/De;EsDgEf,qBtDhEe;EsDiEf,YtDpDiB;AFsgV/B;;AwD7gVA;EAiEU,4EAAyG;AxDg9UnH;;ACx8UE;EuDzEF;IAoEc,4EAAyG;ExDk9UrH;AACF;;AwDvhVA;EAeM,yBtDrBuB;EsDsBvB,YtDTyB;AFqhV/B;;AwD5hVA;;EAmBQ,cAAc;AxD8gVtB;;AwDjiVA;EAqBQ,YtDduB;AF8hV/B;;AwDriVA;EAuBQ,+BtDhBuB;AFkiV/B;;AwDziVA;;EA0BU,YtDnBqB;AFuiV/B;;ACz9UE;EuDrFF;IA6BU,yBtDnCmB;EFyjV3B;AACF;;AwDpjVA;;EAgCQ,+BtDzBuB;AFkjV/B;;AwDzjVA;;;EAqCU,uB7CgEuB;E6C/DvB,YtD/BqB;AFyjV/B;;AwDhkVA;EAyCU,YtDlCqB;EsDmCrB,YAAY;AxD2hVtB;;AwDrkVA;EA4CY,UAAU;AxD6hVtB;;AwDzkVA;EA+CY,UAAU;AxD8hVtB;;AwD7kVA;EAmDY,YtD5CmB;AF0kV/B;;AwDjlVA;EAqDc,uCtD3De;AF2lV7B;;AwDrlVA;EAyDc,uBtDlDiB;EsDmDjB,mBtDnDiB;EsDoDjB,ctDjEe;AFimV7B;;AwD3lVA;EAiEU,8EAAyG;AxD8hVnH;;ACthVE;EuDzEF;IAoEc,8EAAyG;ExDgiVrH;AACF;;AwDrmVA;EAeM,4BtDVwB;EsDWxB,yB7CwDe;AXkiVrB;;AwD1mVA;;EAmBQ,cAAc;AxD4lVtB;;AwD/mVA;EAqBQ,yB7CmDa;AX2iVrB;;AwDnnVA;EAuBQ,yB7CiDa;AX+iVrB;;AwDvnVA;;EA0BU,yB7C8CW;AXojVrB;;ACviVE;EuDrFF;IA6BU,4BtDxBoB;EF4nV5B;AACF;;AwDloVA;;EAgCQ,yB7CwCa;AX+jVrB;;AwDvoVA;;;EAqCU,yB7CgEuB;E6C/DvB,yB7CkCW;AXskVrB;;AwD9oVA;EAyCU,yB7C+BW;E6C9BX,YAAY;AxDymVtB;;AwDnpVA;EA4CY,UAAU;AxD2mVtB;;AwDvpVA;EA+CY,UAAU;AxD4mVtB;;AwD3pVA;EAmDY,yB7CqBS;AXulVrB;;AwD/pVA;EAqDc,uCtD3De;AFyqV7B;;AwDnqVA;EAyDc,oC7CeO;E6CdP,gC7CcO;E6CbP,iBtDtDgB;AFoqV9B;;AwDzqVA;EAiEU,iFAAyG;AxD4mVnH;;ACpmVE;EuDzEF;IAoEc,iFAAyG;ExD8mVrH;AACF;;AwDnrVA;EAeM,yBtDjBwB;EsDkBxB,W7C0DU;AX8mVhB;;AwDxrVA;;EAmBQ,cAAc;AxD0qVtB;;AwD7rVA;EAqBQ,W7CqDQ;AXunVhB;;AwDjsVA;EAuBQ,+B7CmDQ;AX2nVhB;;AwDrsVA;;EA0BU,W7CgDM;AXgoVhB;;ACrnVE;EuDrFF;IA6BU,yBtD/BoB;EFitV5B;AACF;;AwDhtVA;;EAgCQ,+B7C0CQ;AX2oVhB;;AwDrtVA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXkpVhB;;AwD5tVA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDurVtB;;AwDjuVA;EA4CY,UAAU;AxDyrVtB;;AwDruVA;EA+CY,UAAU;AxD0rVtB;;AwDzuVA;EAmDY,W7CuBI;AXmqVhB;;AwD7uVA;EAqDc,uCtD3De;AFuvV7B;;AwDjvVA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD7DgB;AFyvV9B;;AwDvvVA;EAiEU,gFAAyG;AxD0rVnH;;AClrVE;EuDzEF;IAoEc,gFAAyG;ExD4rVrH;AACF;;AwDjwVA;EAeM,yBtDH4B;EsDI5B,W7C0DU;AX4rVhB;;AwDtwVA;;EAmBQ,cAAc;AxDwvVtB;;AwD3wVA;EAqBQ,W7CqDQ;AXqsVhB;;AwD/wVA;EAuBQ,+B7CmDQ;AXysVhB;;AwDnxVA;;EA0BU,W7CgDM;AX8sVhB;;ACnsVE;EuDrFF;IA6BU,yBtDjBwB;EFixVhC;AACF;;AwD9xVA;;EAgCQ,+B7C0CQ;AXytVhB;;AwDnyVA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXguVhB;;AwD1yVA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDqwVtB;;AwD/yVA;EA4CY,UAAU;AxDuwVtB;;AwDnzVA;EA+CY,UAAU;AxDwwVtB;;AwDvzVA;EAmDY,W7CuBI;AXivVhB;;AwD3zVA;EAqDc,uCtD3De;AFq0V7B;;AwD/zVA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD/CoB;AFyzVlC;;AwDr0VA;EAiEU,gFAAyG;AxDwwVnH;;AChwVE;EuDzEF;IAoEc,gFAAyG;ExD0wVrH;AACF;;AwD/0VA;EAeM,yBtDD4B;EsDE5B,W7C0DU;AX0wVhB;;AwDp1VA;;EAmBQ,cAAc;AxDs0VtB;;AwDz1VA;EAqBQ,W7CqDQ;AXmxVhB;;AwD71VA;EAuBQ,+B7CmDQ;AXuxVhB;;AwDj2VA;;EA0BU,W7CgDM;AX4xVhB;;ACjxVE;EuDrFF;IA6BU,yBtDfwB;EF61VhC;AACF;;AwD52VA;;EAgCQ,+B7C0CQ;AXuyVhB;;AwDj3VA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX8yVhB;;AwDx3VA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDm1VtB;;AwD73VA;EA4CY,UAAU;AxDq1VtB;;AwDj4VA;EA+CY,UAAU;AxDs1VtB;;AwDr4VA;EAmDY,W7CuBI;AX+zVhB;;AwDz4VA;EAqDc,uCtD3De;AFm5V7B;;AwD74VA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD7CoB;AFq4VlC;;AwDn5VA;EAiEU,gFAAyG;AxDs1VnH;;AC90VE;EuDzEF;IAoEc,gFAAyG;ExDw1VrH;AACF;;AwD75VA;EAeM,yBtDF4B;EsDG5B,W7C0DU;AXw1VhB;;AwDl6VA;;EAmBQ,cAAc;AxDo5VtB;;AwDv6VA;EAqBQ,W7CqDQ;AXi2VhB;;AwD36VA;EAuBQ,+B7CmDQ;AXq2VhB;;AwD/6VA;;EA0BU,W7CgDM;AX02VhB;;AC/1VE;EuDrFF;IA6BU,yBtDhBwB;EF46VhC;AACF;;AwD17VA;;EAgCQ,+B7C0CQ;AXq3VhB;;AwD/7VA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX43VhB;;AwDt8VA;EAyCU,W7CiCM;E6ChCN,YAAY;AxDi6VtB;;AwD38VA;EA4CY,UAAU;AxDm6VtB;;AwD/8VA;EA+CY,UAAU;AxDo6VtB;;AwDn9VA;EAmDY,W7CuBI;AX64VhB;;AwDv9VA;EAqDc,uCtD3De;AFi+V7B;;AwD39VA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD9CoB;AFo9VlC;;AwDj+VA;EAiEU,gFAAyG;AxDo6VnH;;AC55VE;EuDzEF;IAoEc,gFAAyG;ExDs6VrH;AACF;;AwD3+VA;EAeM,yBtDJ4B;EsDK5B,W7C0DU;AXs6VhB;;AwDh/VA;;EAmBQ,cAAc;AxDk+VtB;;AwDr/VA;EAqBQ,W7CqDQ;AX+6VhB;;AwDz/VA;EAuBQ,+B7CmDQ;AXm7VhB;;AwD7/VA;;EA0BU,W7CgDM;AXw7VhB;;AC76VE;EuDrFF;IA6BU,yBtDlBwB;EF4/VhC;AACF;;AwDxgWA;;EAgCQ,+B7C0CQ;AXm8VhB;;AwD7gWA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AX08VhB;;AwDphWA;EAyCU,W7CiCM;E6ChCN,YAAY;AxD++VtB;;AwDzhWA;EA4CY,UAAU;AxDi/VtB;;AwD7hWA;EA+CY,UAAU;AxDk/VtB;;AwDjiWA;EAmDY,W7CuBI;AX29VhB;;AwDriWA;EAqDc,uCtD3De;AF+iW7B;;AwDziWA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctDhDoB;AFoiWlC;;AwD/iWA;EAiEU,gFAAyG;AxDk/VnH;;AC1+VE;EuDzEF;IAoEc,gFAAyG;ExDo/VrH;AACF;;AwDzjWA;EAeM,yBtDL4B;EsDM5B,yB7CwDe;AXs/VrB;;AwD9jWA;;EAmBQ,cAAc;AxDgjWtB;;AwDnkWA;EAqBQ,yB7CmDa;AX+/VrB;;AwDvkWA;EAuBQ,yB7CiDa;AXmgWrB;;AwD3kWA;;EA0BU,yB7C8CW;AXwgWrB;;AC3/VE;EuDrFF;IA6BU,yBtDnBwB;EF2kWhC;AACF;;AwDtlWA;;EAgCQ,yB7CwCa;AXmhWrB;;AwD3lWA;;;EAqCU,yB7CgEuB;E6C/DvB,yB7CkCW;AX0hWrB;;AwDlmWA;EAyCU,yB7C+BW;E6C9BX,YAAY;AxD6jWtB;;AwDvmWA;EA4CY,UAAU;AxD+jWtB;;AwD3mWA;EA+CY,UAAU;AxDgkWtB;;AwD/mWA;EAmDY,yB7CqBS;AX2iWrB;;AwDnnWA;EAqDc,uCtD3De;AF6nW7B;;AwDvnWA;EAyDc,oC7CeO;E6CdP,gC7CcO;E6CbP,ctDjDoB;AFmnWlC;;AwD7nWA;EAiEU,gFAAyG;AxDgkWnH;;ACxjWE;EuDzEF;IAoEc,gFAAyG;ExDkkWrH;AACF;;AwDvoWA;EAeM,yBtDC2B;EsDA3B,W7C0DU;AXkkWhB;;AwD5oWA;;EAmBQ,cAAc;AxD8nWtB;;AwDjpWA;EAqBQ,W7CqDQ;AX2kWhB;;AwDrpWA;EAuBQ,+B7CmDQ;AX+kWhB;;AwDzpWA;;EA0BU,W7CgDM;AXolWhB;;ACzkWE;EuDrFF;IA6BU,yBtDbuB;EFmpW/B;AACF;;AwDpqWA;;EAgCQ,+B7C0CQ;AX+lWhB;;AwDzqWA;;;EAqCU,yB7CgEuB;E6C/DvB,W7CoCM;AXsmWhB;;AwDhrWA;EAyCU,W7CiCM;E6ChCN,YAAY;AxD2oWtB;;AwDrrWA;EA4CY,UAAU;AxD6oWtB;;AwDzrWA;EA+CY,UAAU;AxD8oWtB;;AwD7rWA;EAmDY,W7CuBI;AXunWhB;;AwDjsWA;EAqDc,uCtD3De;AF2sW7B;;AwDrsWA;EAyDc,sB7CiBE;E6ChBF,kB7CgBE;E6CfF,ctD3CmB;AF2rWjC;;AwD3sWA;EAiEU,gFAAyG;AxD8oWnH;;ACtoWE;EuDzEF;IAoEc,gFAAyG;ExDgpWrH;AACF;;AwDrtWA;EAwEM,eA/E0B;AxDguWhC;;AC5oWE;EuD7EF;IA4EQ,oBAlF8B;ExDouWpC;AACF;;AClpWE;EuD7EF;IAgFQ,qBArF8B;ExDyuWpC;AACF;;AwDruWA;EAqFM,mBAAmB;EACnB,aAAa;AxDopWnB;;AwD1uWA;EAwFQ,YAAY;EACZ,cAAc;AxDspWtB;;AwD/uWA;EA2FI,gBAAgB;AxDwpWpB;;AwDnvWA;EA6FI,iBAAiB;AxD0pWrB;;AwDtpWA;EAEE,gBAAgB;AxDwpWlB;;AwD1pWA;EAII,SAAS;EACT,gBAAgB;EAChB,eAAe;EACf,kBAAkB;EAClB,QAAQ;EACR,qCAAqC;AxD0pWzC;;AwDnqWA;EAYI,YAAY;AxD2pWhB;;AC/rWE;EuDwBF;IAeI,aAAa;ExD6pWf;AACF;;AwD5pWA;EACE,kBAAkB;AxD+pWpB;;ACzsWE;EuDyCF;IAKM,aAAa;ExDgqWjB;EwDrqWF;IAOQ,sBAAsB;ExDiqW5B;AACF;;AC9sWE;EuDqCF;IASI,aAAa;IACb,uBAAuB;ExDqqWzB;EwD/qWF;IvDsBI,oBuDVwC;ExDsqW1C;AACF;;AwDnqWA;;EAEE,YAAY;EACZ,cAAc;AxDsqWhB;;AwDpqWA;EACE,YAAY;EACZ,cAAc;EACd,oBAlJ6B;AxDyzW/B;;AyDrzWA;EACE,oBAL2B;AzD6zW7B;;AC5tWE;EwD7FF;IAMM,oBAT8B;EzDi0WlC;EyD9zWF;IAQM,qBAV8B;EzDm0WlC;AACF;;A0Dl0WA;EACE,yBxDS4B;EwDR5B,yBAJ+B;A1Dy0WjC","file":"bulma.css"} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.min.css b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.min.css
new file mode 100644
index 0000000..a807a31
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/lib/bulma/bulma.min.css
@@ -0,0 +1 @@
+/*! bulma.io v0.9.1 | MIT License | github.com/jgthms/bulma */@-webkit-keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}@keyframes spinAround{from{transform:rotate(0)}to{transform:rotate(359deg)}}.breadcrumb,.button,.delete,.file,.is-unselectable,.modal-close,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.tabs{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid transparent;border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:.625em;margin-top:-.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:.625em}.block:not(:last-child),.box:not(:last-child),.breadcrumb:not(:last-child),.content:not(:last-child),.highlight:not(:last-child),.level:not(:last-child),.message:not(:last-child),.notification:not(:last-child),.pagination:not(:last-child),.progress:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.tabs:not(:last-child),.title:not(:last-child){margin-bottom:1.5rem}.delete,.modal-close{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top;width:20px}.delete::after,.delete::before,.modal-close::after,.modal-close::before{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.delete::before,.modal-close::before{height:2px;width:50%}.delete::after,.modal-close::after{height:50%;width:2px}.delete:focus,.delete:hover,.modal-close:focus,.modal-close:hover{background-color:rgba(10,10,10,.3)}.delete:active,.modal-close:active{background-color:rgba(10,10,10,.4)}.is-small.delete,.is-small.modal-close{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.delete,.is-medium.modal-close{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.delete,.is-large.modal-close{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.button.is-loading::after,.control.is-loading::after,.loader,.select.is-loading::after{-webkit-animation:spinAround .5s infinite linear;animation:spinAround .5s infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img,.is-overlay,.modal,.modal-background{bottom:0;left:0;position:absolute;right:0;top:0}.button,.file-cta,.file-name,.input,.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous,.select select,.textarea{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(.5em - 1px);padding-left:calc(.75em - 1px);padding-right:calc(.75em - 1px);padding-top:calc(.5em - 1px);position:relative;vertical-align:top}.button:active,.button:focus,.file-cta:active,.file-cta:focus,.file-name:active,.file-name:focus,.input:active,.input:focus,.is-active.button,.is-active.file-cta,.is-active.file-name,.is-active.input,.is-active.pagination-ellipsis,.is-active.pagination-link,.is-active.pagination-next,.is-active.pagination-previous,.is-active.textarea,.is-focused.button,.is-focused.file-cta,.is-focused.file-name,.is-focused.input,.is-focused.pagination-ellipsis,.is-focused.pagination-link,.is-focused.pagination-next,.is-focused.pagination-previous,.is-focused.textarea,.pagination-ellipsis:active,.pagination-ellipsis:focus,.pagination-link:active,.pagination-link:focus,.pagination-next:active,.pagination-next:focus,.pagination-previous:active,.pagination-previous:focus,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{outline:0}.button[disabled],.file-cta[disabled],.file-name[disabled],.input[disabled],.pagination-ellipsis[disabled],.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .button,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .input,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-previous,fieldset[disabled] .select select,fieldset[disabled] .textarea{cursor:not-allowed}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */blockquote,body,dd,dl,dt,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,html,iframe,legend,li,ol,p,pre,textarea,ul{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:400}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,::after,::before{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:hidden;overflow-y:scroll;text-rendering:optimizeLegibility;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:monospace}body{color:#4a4a4a;font-size:1em;font-weight:400;line-height:1.5}a{color:#3273dc;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:#f5f5f5;color:#da1039;font-size:.875em;font-weight:400;padding:.25em .5em .25em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type=checkbox],input[type=radio]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#363636;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#4a4a4a;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#363636}.box{background-color:#fff;border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;display:block;padding:1.25rem}a.box:focus,a.box:hover{box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px #3273dc}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2),0 0 0 1px #3273dc}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-large,.button .icon.is-medium,.button .icon.is-small{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-.5em - 1px);margin-right:calc(-.5em - 1px)}.button.is-hovered,.button:hover{border-color:#b5b5b5;color:#363636}.button.is-focused,.button:focus{border-color:#3273dc;color:#363636}.button.is-focused:not(:active),.button:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-active,.button:active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#4a4a4a;text-decoration:underline}.button.is-text.is-focused,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text:hover{background-color:#f5f5f5;color:#363636}.button.is-text.is-active,.button.is-text:active{background-color:#e8e8e8;color:#363636}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white.is-hovered,.button.is-white:hover{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white.is-focused,.button.is-white:focus{border-color:transparent;color:#0a0a0a}.button.is-white.is-focused:not(:active),.button.is-white:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.button.is-white.is-active,.button.is-white:active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-hovered,.button.is-white.is-inverted:hover{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined.is-focused,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-outlined.is-loading.is-focused::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined.is-focused,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined:hover{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black.is-hovered,.button.is-black:hover{background-color:#040404;border-color:transparent;color:#fff}.button.is-black.is-focused,.button.is-black:focus{border-color:transparent;color:#fff}.button.is-black.is-focused:not(:active),.button.is-black:focus:not(:active){box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.button.is-black.is-active,.button.is-black:active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-hovered,.button.is-black.is-inverted:hover{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined.is-focused,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-outlined.is-loading.is-focused::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined.is-focused,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined:hover{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #0a0a0a #0a0a0a!important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-hovered,.button.is-light:hover{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused,.button.is-light:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light.is-focused:not(:active),.button.is-light:focus:not(:active){box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.button.is-light.is-active,.button.is-light:active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-hovered,.button.is-light.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined.is-focused,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-outlined.is-loading.is-focused::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-light.is-inverted.is-outlined.is-focused,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f5f5f5 #f5f5f5!important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-dark{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark.is-hovered,.button.is-dark:hover{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark.is-focused,.button.is-dark:focus{border-color:transparent;color:#fff}.button.is-dark.is-focused:not(:active),.button.is-dark:focus:not(:active){box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.button.is-dark.is-active,.button.is-dark:active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],fieldset[disabled] .button.is-dark{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-hovered,.button.is-dark.is-inverted:hover{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined.is-focused,.button.is-dark.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.button.is-dark.is-outlined:hover{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-outlined.is-loading.is-focused::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-dark.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined.is-focused,.button.is-dark.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined:hover{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #363636 #363636!important}.button.is-dark.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary{background-color:#00d1b2;border-color:transparent;color:#fff}.button.is-primary.is-hovered,.button.is-primary:hover{background-color:#00c4a7;border-color:transparent;color:#fff}.button.is-primary.is-focused,.button.is-primary:focus{border-color:transparent;color:#fff}.button.is-primary.is-focused:not(:active),.button.is-primary:focus:not(:active){box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.button.is-primary.is-active,.button.is-primary:active{background-color:#00b89c;border-color:transparent;color:#fff}.button.is-primary[disabled],fieldset[disabled] .button.is-primary{background-color:#00d1b2;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-hovered,.button.is-primary.is-inverted:hover{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],fieldset[disabled] .button.is-primary.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#00d1b2}.button.is-primary.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;color:#00d1b2}.button.is-primary.is-outlined.is-focused,.button.is-primary.is-outlined.is-hovered,.button.is-primary.is-outlined:focus,.button.is-primary.is-outlined:hover{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.button.is-primary.is-outlined.is-loading::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-outlined.is-loading.is-focused::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-outlined.is-loading:focus::after,.button.is-primary.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-primary.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-outlined{background-color:transparent;border-color:#00d1b2;box-shadow:none;color:#00d1b2}.button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined.is-focused,.button.is-primary.is-inverted.is-outlined.is-hovered,.button.is-primary.is-inverted.is-outlined:focus,.button.is-primary.is-inverted.is-outlined:hover{background-color:#fff;color:#00d1b2}.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #00d1b2 #00d1b2!important}.button.is-primary.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light{background-color:#ebfffc;color:#00947e}.button.is-primary.is-light.is-hovered,.button.is-primary.is-light:hover{background-color:#defffa;border-color:transparent;color:#00947e}.button.is-primary.is-light.is-active,.button.is-primary.is-light:active{background-color:#d1fff8;border-color:transparent;color:#00947e}.button.is-link{background-color:#3273dc;border-color:transparent;color:#fff}.button.is-link.is-hovered,.button.is-link:hover{background-color:#276cda;border-color:transparent;color:#fff}.button.is-link.is-focused,.button.is-link:focus{border-color:transparent;color:#fff}.button.is-link.is-focused:not(:active),.button.is-link:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.button.is-link.is-active,.button.is-link:active{background-color:#2366d1;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#3273dc;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-hovered,.button.is-link.is-inverted:hover{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3273dc}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;color:#3273dc}.button.is-link.is-outlined.is-focused,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined:hover{background-color:#3273dc;border-color:#3273dc;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-outlined.is-loading.is-focused::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#3273dc;box-shadow:none;color:#3273dc}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined.is-focused,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined:hover{background-color:#fff;color:#3273dc}.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3273dc #3273dc!important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eef3fc;color:#2160c4}.button.is-link.is-light.is-hovered,.button.is-link.is-light:hover{background-color:#e3ecfa;border-color:transparent;color:#2160c4}.button.is-link.is-light.is-active,.button.is-link.is-light:active{background-color:#d8e4f8;border-color:transparent;color:#2160c4}.button.is-info{background-color:#3298dc;border-color:transparent;color:#fff}.button.is-info.is-hovered,.button.is-info:hover{background-color:#2793da;border-color:transparent;color:#fff}.button.is-info.is-focused,.button.is-info:focus{border-color:transparent;color:#fff}.button.is-info.is-focused:not(:active),.button.is-info:focus:not(:active){box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.button.is-info.is-active,.button.is-info:active{background-color:#238cd1;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#3298dc;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-hovered,.button.is-info.is-inverted:hover{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#3298dc}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;color:#3298dc}.button.is-info.is-outlined.is-focused,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined:hover{background-color:#3298dc;border-color:#3298dc;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-outlined.is-loading.is-focused::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#3298dc;box-shadow:none;color:#3298dc}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined.is-focused,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined:hover{background-color:#fff;color:#3298dc}.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #3298dc #3298dc!important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.button.is-info.is-light.is-hovered,.button.is-info.is-light:hover{background-color:#e3f1fa;border-color:transparent;color:#1d72aa}.button.is-info.is-light.is-active,.button.is-info.is-light:active{background-color:#d8ebf8;border-color:transparent;color:#1d72aa}.button.is-success{background-color:#48c774;border-color:transparent;color:#fff}.button.is-success.is-hovered,.button.is-success:hover{background-color:#3ec46d;border-color:transparent;color:#fff}.button.is-success.is-focused,.button.is-success:focus{border-color:transparent;color:#fff}.button.is-success.is-focused:not(:active),.button.is-success:focus:not(:active){box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.button.is-success.is-active,.button.is-success:active{background-color:#3abb67;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#48c774;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-hovered,.button.is-success.is-inverted:hover{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#48c774}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined{background-color:transparent;border-color:#48c774;color:#48c774}.button.is-success.is-outlined.is-focused,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined:hover{background-color:#48c774;border-color:#48c774;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-outlined.is-loading.is-focused::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#48c774;box-shadow:none;color:#48c774}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined.is-focused,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined:hover{background-color:#fff;color:#48c774}.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #48c774 #48c774!important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#effaf3;color:#257942}.button.is-success.is-light.is-hovered,.button.is-success.is-light:hover{background-color:#e6f7ec;border-color:transparent;color:#257942}.button.is-success.is-light.is-active,.button.is-success.is-light:active{background-color:#dcf4e4;border-color:transparent;color:#257942}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-hovered,.button.is-warning:hover{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused,.button.is-warning:focus{border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning.is-focused:not(:active),.button.is-warning:focus:not(:active){box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.button.is-warning.is-active,.button.is-warning:active{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-hovered,.button.is-warning.is-inverted:hover{background-color:rgba(0,0,0,.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined.is-focused,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined:hover{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-outlined.is-loading.is-focused::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading:hover::after{border-color:transparent transparent rgba(0,0,0,.7) rgba(0,0,0,.7)!important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);color:rgba(0,0,0,.7)}.button.is-warning.is-inverted.is-outlined.is-focused,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined:hover{background-color:rgba(0,0,0,.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #ffdd57 #ffdd57!important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,.7);box-shadow:none;color:rgba(0,0,0,.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light.is-hovered,.button.is-warning.is-light:hover{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light.is-active,.button.is-warning.is-light:active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#f14668;border-color:transparent;color:#fff}.button.is-danger.is-hovered,.button.is-danger:hover{background-color:#f03a5f;border-color:transparent;color:#fff}.button.is-danger.is-focused,.button.is-danger:focus{border-color:transparent;color:#fff}.button.is-danger.is-focused:not(:active),.button.is-danger:focus:not(:active){box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.button.is-danger.is-active,.button.is-danger:active{background-color:#ef2e55;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#f14668;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-hovered,.button.is-danger.is-inverted:hover{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#f14668}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;color:#f14668}.button.is-danger.is-outlined.is-focused,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined:hover{background-color:#f14668;border-color:#f14668;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-outlined.is-loading.is-focused::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading:hover::after{border-color:transparent transparent #fff #fff!important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#f14668;box-shadow:none;color:#f14668}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined.is-focused,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined:hover{background-color:#fff;color:#f14668}.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading:hover::after{border-color:transparent transparent #f14668 #f14668!important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.button.is-danger.is-light.is-hovered,.button.is-danger.is-light:hover{background-color:#fde0e6;border-color:transparent;color:#cc0f35}.button.is-danger.is-light.is-active,.button.is-danger.is-light:active{background-color:#fcd4dc;border-color:transparent;color:#cc0f35}.button.is-small{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent!important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute!important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#7a7a7a;box-shadow:none;pointer-events:none}.button.is-rounded{border-radius:290486px;padding-left:calc(1em + .25em);padding-right:calc(1em + .25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button.is-hovered,.buttons.has-addons .button:hover{z-index:2}.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-focused,.buttons.has-addons .button.is-selected,.buttons.has-addons .button:active,.buttons.has-addons .button:focus{z-index:3}.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button.is-selected:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button:focus:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:.25rem;margin-right:.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none!important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width:1024px){.container{max-width:960px}}@media screen and (max-width:1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width:1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width:1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width:1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:.25em}.content blockquote:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content p:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child),.content ul:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#363636;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:.8em}.content h5{font-size:1.125em;margin-bottom:.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol:not([type]).is-lower-alpha{list-style-type:lower-alpha}.content ol:not([type]).is-lower-roman{list-style-type:lower-roman}.content ol:not([type]).is-upper-alpha{list-style-type:upper-alpha}.content ol:not([type]).is-upper-roman{list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:1.25em 1.5em;white-space:pre;word-wrap:normal}.content sub,.content sup{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.content table th{color:#363636}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#363636}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#363636}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image{display:block;position:relative}.image img{display:block;height:auto;width:100%}.image img.is-rounded{border-radius:290486px}.image.is-fullwidth{width:100%}.image.is-16by9 .has-ratio,.image.is-16by9 img,.image.is-1by1 .has-ratio,.image.is-1by1 img,.image.is-1by2 .has-ratio,.image.is-1by2 img,.image.is-1by3 .has-ratio,.image.is-1by3 img,.image.is-2by1 .has-ratio,.image.is-2by1 img,.image.is-2by3 .has-ratio,.image.is-2by3 img,.image.is-3by1 .has-ratio,.image.is-3by1 img,.image.is-3by2 .has-ratio,.image.is-3by2 img,.image.is-3by4 .has-ratio,.image.is-3by4 img,.image.is-3by5 .has-ratio,.image.is-3by5 img,.image.is-4by3 .has-ratio,.image.is-4by3 img,.image.is-4by5 .has-ratio,.image.is-4by5 img,.image.is-5by3 .has-ratio,.image.is-5by3 img,.image.is-5by4 .has-ratio,.image.is-5by4 img,.image.is-9by16 .has-ratio,.image.is-9by16 img,.image.is-square .has-ratio,.image.is-square img{height:100%;width:100%}.image.is-1by1,.image.is-square{padding-top:100%}.image.is-5by4{padding-top:80%}.image.is-4by3{padding-top:75%}.image.is-3by2{padding-top:66.6666%}.image.is-5by3{padding-top:60%}.image.is-16by9{padding-top:56.25%}.image.is-2by1{padding-top:50%}.image.is-3by1{padding-top:33.3333%}.image.is-4by5{padding-top:125%}.image.is-3by4{padding-top:133.3333%}.image.is-2by3{padding-top:150%}.image.is-3by5{padding-top:166.6666%}.image.is-9by16{padding-top:177.7777%}.image.is-1by2{padding-top:200%}.image.is-1by3{padding-top:300%}.image.is-16x16{height:16px;width:16px}.image.is-24x24{height:24px;width:24px}.image.is-32x32{height:32px;width:32px}.image.is-48x48{height:48px;width:48px}.image.is-64x64{height:64px;width:64px}.image.is-96x96{height:96px;width:96px}.image.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:0 0}.notification>.delete{right:.5rem;position:absolute;top:.5rem}.notification .content,.notification .subtitle,.notification .title{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.notification.is-dark{background-color:#363636;color:#fff}.notification.is-primary{background-color:#00d1b2;color:#fff}.notification.is-primary.is-light{background-color:#ebfffc;color:#00947e}.notification.is-link{background-color:#3273dc;color:#fff}.notification.is-link.is-light{background-color:#eef3fc;color:#2160c4}.notification.is-info{background-color:#3298dc;color:#fff}.notification.is-info.is-light{background-color:#eef6fc;color:#1d72aa}.notification.is-success{background-color:#48c774;color:#fff}.notification.is-success.is-light{background-color:#effaf3;color:#257942}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#f14668;color:#fff}.notification.is-danger.is-light{background-color:#feecf0;color:#cc0f35}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#4a4a4a}.progress::-moz-progress-bar{background-color:#4a4a4a}.progress::-ms-fill{background-color:#4a4a4a;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right,#fff 30%,#ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right,#0a0a0a 30%,#ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right,#f5f5f5 30%,#ededed 30%)}.progress.is-dark::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate{background-image:linear-gradient(to right,#363636 30%,#ededed 30%)}.progress.is-primary::-webkit-progress-value{background-color:#00d1b2}.progress.is-primary::-moz-progress-bar{background-color:#00d1b2}.progress.is-primary::-ms-fill{background-color:#00d1b2}.progress.is-primary:indeterminate{background-image:linear-gradient(to right,#00d1b2 30%,#ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#3273dc}.progress.is-link::-moz-progress-bar{background-color:#3273dc}.progress.is-link::-ms-fill{background-color:#3273dc}.progress.is-link:indeterminate{background-image:linear-gradient(to right,#3273dc 30%,#ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#3298dc}.progress.is-info::-moz-progress-bar{background-color:#3298dc}.progress.is-info::-ms-fill{background-color:#3298dc}.progress.is-info:indeterminate{background-image:linear-gradient(to right,#3298dc 30%,#ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#48c774}.progress.is-success::-moz-progress-bar{background-color:#48c774}.progress.is-success::-ms-fill{background-color:#48c774}.progress.is-success:indeterminate{background-image:linear-gradient(to right,#48c774 30%,#ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right,#ffdd57 30%,#ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#f14668}.progress.is-danger::-moz-progress-bar{background-color:#f14668}.progress.is-danger::-ms-fill{background-color:#f14668}.progress.is-danger:indeterminate{background-image:linear-gradient(to right,#f14668 30%,#ededed 30%)}.progress:indeterminate{-webkit-animation-duration:1.5s;animation-duration:1.5s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-name:moveIndeterminate;animation-name:moveIndeterminate;-webkit-animation-timing-function:linear;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right,#4a4a4a 30%,#ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@-webkit-keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:.5em .75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.table td.is-link,.table th.is-link{background-color:#3273dc;border-color:#3273dc;color:#fff}.table td.is-info,.table th.is-info{background-color:#3298dc;border-color:#3298dc;color:#fff}.table td.is-success,.table th.is-success{background-color:#48c774;border-color:#48c774;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,.7)}.table td.is-danger,.table th.is-danger{background-color:#f14668;border-color:#f14668;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#00d1b2;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#363636}.table th:not([align]){text-align:inherit}.table tr.is-selected{background-color:#00d1b2;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:transparent}.table thead td,.table thead th{border-width:0 0 2px;color:#363636}.table tfoot{background-color:transparent}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#363636}.table tbody{background-color:transparent}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:.25em .5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag{margin-bottom:.5rem}.tags .tag:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag{margin-right:.25rem;margin-left:.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child){margin-left:.5rem}.tags.is-right .tag:not(:last-child){margin-right:0}.tags.has-addons .tag{margin-right:0}.tags.has-addons .tag:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#4a4a4a;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:.75em;padding-right:.75em;white-space:nowrap}.tag:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag:not(body).is-white{background-color:#fff;color:#0a0a0a}.tag:not(body).is-black{background-color:#0a0a0a;color:#fff}.tag:not(body).is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.tag:not(body).is-dark{background-color:#363636;color:#fff}.tag:not(body).is-primary{background-color:#00d1b2;color:#fff}.tag:not(body).is-primary.is-light{background-color:#ebfffc;color:#00947e}.tag:not(body).is-link{background-color:#3273dc;color:#fff}.tag:not(body).is-link.is-light{background-color:#eef3fc;color:#2160c4}.tag:not(body).is-info{background-color:#3298dc;color:#fff}.tag:not(body).is-info.is-light{background-color:#eef6fc;color:#1d72aa}.tag:not(body).is-success{background-color:#48c774;color:#fff}.tag:not(body).is-success.is-light{background-color:#effaf3;color:#257942}.tag:not(body).is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.tag:not(body).is-warning.is-light{background-color:#fffbeb;color:#947600}.tag:not(body).is-danger{background-color:#f14668;color:#fff}.tag:not(body).is-danger.is-light{background-color:#feecf0;color:#cc0f35}.tag:not(body).is-normal{font-size:.75rem}.tag:not(body).is-medium{font-size:1rem}.tag:not(body).is-large{font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag:not(body).is-delete{margin-left:1px;padding:0;position:relative;width:2em}.tag:not(body).is-delete::after,.tag:not(body).is-delete::before{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag:not(body).is-delete::before{height:1px;width:50%}.tag:not(body).is-delete::after{height:50%;width:1px}.tag:not(body).is-delete:focus,.tag:not(body).is-delete:hover{background-color:#e8e8e8}.tag:not(body).is-delete:active{background-color:#dbdbdb}.tag:not(body).is-rounded{border-radius:290486px}a.tag:hover{text-decoration:underline}.subtitle,.title{word-break:break-word}.subtitle em,.subtitle span,.title em,.title span{font-weight:inherit}.subtitle sub,.title sub{font-size:.75em}.subtitle sup,.title sup{font-size:.75em}.subtitle .tag,.title .tag{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:.25rem .5rem;text-align:center;vertical-align:top}.input,.select select,.textarea{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.input::-moz-placeholder,.select select::-moz-placeholder,.textarea::-moz-placeholder{color:rgba(54,54,54,.3)}.input::-webkit-input-placeholder,.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder{color:rgba(54,54,54,.3)}.input:-moz-placeholder,.select select:-moz-placeholder,.textarea:-moz-placeholder{color:rgba(54,54,54,.3)}.input:-ms-input-placeholder,.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder{color:rgba(54,54,54,.3)}.input:hover,.is-hovered.input,.is-hovered.textarea,.select select.is-hovered,.select select:hover,.textarea:hover{border-color:#b5b5b5}.input:active,.input:focus,.is-active.input,.is-active.textarea,.is-focused.input,.is-focused.textarea,.select select.is-active,.select select.is-focused,.select select:active,.select select:focus,.textarea:active,.textarea:focus{border-color:#3273dc;box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.input[disabled],.select fieldset[disabled] select,.select select[disabled],.textarea[disabled],fieldset[disabled] .input,fieldset[disabled] .select select,fieldset[disabled] .textarea{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#7a7a7a}.input[disabled]::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder{color:rgba(122,122,122,.3)}.input[disabled]:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder{color:rgba(122,122,122,.3)}.input,.textarea{box-shadow:inset 0 .0625em .125em rgba(10,10,10,.05);max-width:100%;width:100%}.input[readonly],.textarea[readonly]{box-shadow:none}.is-white.input,.is-white.textarea{border-color:#fff}.is-white.input:active,.is-white.input:focus,.is-white.is-active.input,.is-white.is-active.textarea,.is-white.is-focused.input,.is-white.is-focused.textarea,.is-white.textarea:active,.is-white.textarea:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.is-black.input,.is-black.textarea{border-color:#0a0a0a}.is-black.input:active,.is-black.input:focus,.is-black.is-active.input,.is-black.is-active.textarea,.is-black.is-focused.input,.is-black.is-focused.textarea,.is-black.textarea:active,.is-black.textarea:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.is-light.input,.is-light.textarea{border-color:#f5f5f5}.is-light.input:active,.is-light.input:focus,.is-light.is-active.input,.is-light.is-active.textarea,.is-light.is-focused.input,.is-light.is-focused.textarea,.is-light.textarea:active,.is-light.textarea:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.is-dark.input,.is-dark.textarea{border-color:#363636}.is-dark.input:active,.is-dark.input:focus,.is-dark.is-active.input,.is-dark.is-active.textarea,.is-dark.is-focused.input,.is-dark.is-focused.textarea,.is-dark.textarea:active,.is-dark.textarea:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.is-primary.input,.is-primary.textarea{border-color:#00d1b2}.is-primary.input:active,.is-primary.input:focus,.is-primary.is-active.input,.is-primary.is-active.textarea,.is-primary.is-focused.input,.is-primary.is-focused.textarea,.is-primary.textarea:active,.is-primary.textarea:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.is-link.input,.is-link.textarea{border-color:#3273dc}.is-link.input:active,.is-link.input:focus,.is-link.is-active.input,.is-link.is-active.textarea,.is-link.is-focused.input,.is-link.is-focused.textarea,.is-link.textarea:active,.is-link.textarea:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.is-info.input,.is-info.textarea{border-color:#3298dc}.is-info.input:active,.is-info.input:focus,.is-info.is-active.input,.is-info.is-active.textarea,.is-info.is-focused.input,.is-info.is-focused.textarea,.is-info.textarea:active,.is-info.textarea:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.is-success.input,.is-success.textarea{border-color:#48c774}.is-success.input:active,.is-success.input:focus,.is-success.is-active.input,.is-success.is-active.textarea,.is-success.is-focused.input,.is-success.is-focused.textarea,.is-success.textarea:active,.is-success.textarea:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.is-warning.input,.is-warning.textarea{border-color:#ffdd57}.is-warning.input:active,.is-warning.input:focus,.is-warning.is-active.input,.is-warning.is-active.textarea,.is-warning.is-focused.input,.is-warning.is-focused.textarea,.is-warning.textarea:active,.is-warning.textarea:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.is-danger.input,.is-danger.textarea{border-color:#f14668}.is-danger.input:active,.is-danger.input:focus,.is-danger.is-active.input,.is-danger.is-active.textarea,.is-danger.is-focused.input,.is-danger.is-focused.textarea,.is-danger.textarea:active,.is-danger.textarea:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.is-small.input,.is-small.textarea{border-radius:2px;font-size:.75rem}.is-medium.input,.is-medium.textarea{font-size:1.25rem}.is-large.input,.is-large.textarea{font-size:1.5rem}.is-fullwidth.input,.is-fullwidth.textarea{display:block;width:100%}.is-inline.input,.is-inline.textarea{display:inline;width:auto}.input.is-rounded{border-radius:290486px;padding-left:calc(calc(.75em - 1px) + .375em);padding-right:calc(calc(.75em - 1px) + .375em)}.input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.checkbox,.radio{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.checkbox input,.radio input{cursor:pointer}.checkbox:hover,.radio:hover{color:#363636}.checkbox input[disabled],.checkbox[disabled],.radio input[disabled],.radio[disabled],fieldset[disabled] .checkbox,fieldset[disabled] .radio{color:#7a7a7a;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#3273dc;right:1.125em;z-index:4}.select.is-rounded select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:0}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select.is-hovered,.select.is-white select:hover{border-color:#f2f2f2}.select.is-white select.is-active,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select:focus{box-shadow:0 0 0 .125em rgba(255,255,255,.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select.is-hovered,.select.is-black select:hover{border-color:#000}.select.is-black select.is-active,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select:focus{box-shadow:0 0 0 .125em rgba(10,10,10,.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select.is-hovered,.select.is-light select:hover{border-color:#e8e8e8}.select.is-light select.is-active,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select:focus{box-shadow:0 0 0 .125em rgba(245,245,245,.25)}.select.is-dark:not(:hover)::after{border-color:#363636}.select.is-dark select{border-color:#363636}.select.is-dark select.is-hovered,.select.is-dark select:hover{border-color:#292929}.select.is-dark select.is-active,.select.is-dark select.is-focused,.select.is-dark select:active,.select.is-dark select:focus{box-shadow:0 0 0 .125em rgba(54,54,54,.25)}.select.is-primary:not(:hover)::after{border-color:#00d1b2}.select.is-primary select{border-color:#00d1b2}.select.is-primary select.is-hovered,.select.is-primary select:hover{border-color:#00b89c}.select.is-primary select.is-active,.select.is-primary select.is-focused,.select.is-primary select:active,.select.is-primary select:focus{box-shadow:0 0 0 .125em rgba(0,209,178,.25)}.select.is-link:not(:hover)::after{border-color:#3273dc}.select.is-link select{border-color:#3273dc}.select.is-link select.is-hovered,.select.is-link select:hover{border-color:#2366d1}.select.is-link select.is-active,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select:focus{box-shadow:0 0 0 .125em rgba(50,115,220,.25)}.select.is-info:not(:hover)::after{border-color:#3298dc}.select.is-info select{border-color:#3298dc}.select.is-info select.is-hovered,.select.is-info select:hover{border-color:#238cd1}.select.is-info select.is-active,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select:focus{box-shadow:0 0 0 .125em rgba(50,152,220,.25)}.select.is-success:not(:hover)::after{border-color:#48c774}.select.is-success select{border-color:#48c774}.select.is-success select.is-hovered,.select.is-success select:hover{border-color:#3abb67}.select.is-success select.is-active,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select:focus{box-shadow:0 0 0 .125em rgba(72,199,116,.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select.is-hovered,.select.is-warning select:hover{border-color:#ffd83d}.select.is-warning select.is-active,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select:focus{box-shadow:0 0 0 .125em rgba(255,221,87,.25)}.select.is-danger:not(:hover)::after{border-color:#f14668}.select.is-danger select{border-color:#f14668}.select.is-danger select.is-hovered,.select.is-danger select:hover{border-color:#ef2e55}.select.is-danger select.is-active,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select:focus{box-shadow:0 0 0 .125em rgba(241,70,104,.25)}.select.is-small{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#7a7a7a}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:.625em;transform:none}.select.is-loading.is-small:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white.is-hovered .file-cta,.file.is-white:hover .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white.is-focused .file-cta,.file.is-white:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,255,255,.25);color:#0a0a0a}.file.is-white.is-active .file-cta,.file.is-white:active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black.is-hovered .file-cta,.file.is-black:hover .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black.is-focused .file-cta,.file.is-black:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(10,10,10,.25);color:#fff}.file.is-black.is-active .file-cta,.file.is-black:active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-hovered .file-cta,.file.is-light:hover .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-light.is-focused .file-cta,.file.is-light:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(245,245,245,.25);color:rgba(0,0,0,.7)}.file.is-light.is-active .file-cta,.file.is-light:active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-dark .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark.is-hovered .file-cta,.file.is-dark:hover .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark.is-focused .file-cta,.file.is-dark:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(54,54,54,.25);color:#fff}.file.is-dark.is-active .file-cta,.file.is-dark:active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta{background-color:#00d1b2;border-color:transparent;color:#fff}.file.is-primary.is-hovered .file-cta,.file.is-primary:hover .file-cta{background-color:#00c4a7;border-color:transparent;color:#fff}.file.is-primary.is-focused .file-cta,.file.is-primary:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(0,209,178,.25);color:#fff}.file.is-primary.is-active .file-cta,.file.is-primary:active .file-cta{background-color:#00b89c;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#3273dc;border-color:transparent;color:#fff}.file.is-link.is-hovered .file-cta,.file.is-link:hover .file-cta{background-color:#276cda;border-color:transparent;color:#fff}.file.is-link.is-focused .file-cta,.file.is-link:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,115,220,.25);color:#fff}.file.is-link.is-active .file-cta,.file.is-link:active .file-cta{background-color:#2366d1;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#3298dc;border-color:transparent;color:#fff}.file.is-info.is-hovered .file-cta,.file.is-info:hover .file-cta{background-color:#2793da;border-color:transparent;color:#fff}.file.is-info.is-focused .file-cta,.file.is-info:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(50,152,220,.25);color:#fff}.file.is-info.is-active .file-cta,.file.is-info:active .file-cta{background-color:#238cd1;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#48c774;border-color:transparent;color:#fff}.file.is-success.is-hovered .file-cta,.file.is-success:hover .file-cta{background-color:#3ec46d;border-color:transparent;color:#fff}.file.is-success.is-focused .file-cta,.file.is-success:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(72,199,116,.25);color:#fff}.file.is-success.is-active .file-cta,.file.is-success:active .file-cta{background-color:#3abb67;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-hovered .file-cta,.file.is-warning:hover .file-cta{background-color:#ffdb4a;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-warning.is-focused .file-cta,.file.is-warning:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(255,221,87,.25);color:rgba(0,0,0,.7)}.file.is-warning.is-active .file-cta,.file.is-warning:active .file-cta{background-color:#ffd83d;border-color:transparent;color:rgba(0,0,0,.7)}.file.is-danger .file-cta{background-color:#f14668;border-color:transparent;color:#fff}.file.is-danger.is-hovered .file-cta,.file.is-danger:hover .file-cta{background-color:#f03a5f;border-color:transparent;color:#fff}.file.is-danger.is-focused .file-cta,.file.is-danger:focus .file-cta{border-color:transparent;box-shadow:0 0 .5em rgba(241,70,104,.25);color:#fff}.file.is-danger.is-active .file-cta,.file.is-danger:active .file-cta{background-color:#ef2e55;border-color:transparent;color:#fff}.file.is-small{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:0;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:.5em}.label.is-small{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark{color:#363636}.help.is-primary{color:#00d1b2}.help.is-link{color:#3273dc}.help.is-info{color:#3298dc}.help.is-success{color:#48c774}.help.is-warning{color:#ffdd57}.help.is-danger{color:#f14668}.field:not(:last-child){margin-bottom:.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]).is-hovered,.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .input:not([disabled]).is-hovered,.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]).is-hovered,.field.has-addons .control .select select:not([disabled]):hover{z-index:2}.field.has-addons .control .button:not([disabled]).is-active,.field.has-addons .control .button:not([disabled]).is-focused,.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .input:not([disabled]).is-active,.field.has-addons .control .input:not([disabled]).is-focused,.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control .select select:not([disabled]).is-active,.field.has-addons .control .select select:not([disabled]).is-focused,.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select:not([disabled]):focus{z-index:3}.field.has-addons .control .button:not([disabled]).is-active:hover,.field.has-addons .control .button:not([disabled]).is-focused:hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .input:not([disabled]).is-active:hover,.field.has-addons .control .input:not([disabled]).is-focused:hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control .select select:not([disabled]).is-active:hover,.field.has-addons .control .select select:not([disabled]).is-focused:hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select:not([disabled]):focus:hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width:769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width:768px){.field-label{margin-bottom:.5rem}}@media screen and (min-width:769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small{font-size:.75rem;padding-top:.375em}.field-label.is-normal{padding-top:.375em}.field-label.is-medium{font-size:1.25rem;padding-top:.375em}.field-label.is-large{font-size:1.5rem;padding-top:.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width:769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#4a4a4a}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute!important;right:.625em;top:.625em;z-index:4}.control.is-loading.is-small:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#3273dc;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#363636;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ol,.breadcrumb ul{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);color:#4a4a4a;max-width:100%;overflow:hidden;position:relative}.card-header{background-color:transparent;align-items:stretch;box-shadow:0 .125em .25em rgba(10,10,10,.1);display:flex}.card-header-title{align-items:center;color:#363636;display:flex;flex-grow:1;font-weight:700;padding:.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem 1rem}.card-image{display:block;position:relative}.card-content{background-color:transparent;padding:1.5rem}.card-footer{background-color:transparent;border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:.875rem;line-height:1.5;padding:.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#3273dc;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width:769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .subtitle,.level-item .title{margin-bottom:0}@media screen and (max-width:768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width:769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width:768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width:769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width:769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width:768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#4a4a4a;display:block;padding:.5em .75em}.menu-list a:hover{background-color:#f5f5f5;color:#363636}.menu-list a.is-active{background-color:#3273dc;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#7a7a7a;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark{background-color:#fafafa}.message.is-dark .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body{border-color:#363636}.message.is-primary{background-color:#ebfffc}.message.is-primary .message-header{background-color:#00d1b2;color:#fff}.message.is-primary .message-body{border-color:#00d1b2;color:#00947e}.message.is-link{background-color:#eef3fc}.message.is-link .message-header{background-color:#3273dc;color:#fff}.message.is-link .message-body{border-color:#3273dc;color:#2160c4}.message.is-info{background-color:#eef6fc}.message.is-info .message-header{background-color:#3298dc;color:#fff}.message.is-info .message-body{border-color:#3298dc;color:#1d72aa}.message.is-success{background-color:#effaf3}.message.is-success .message-header{background-color:#48c774;color:#fff}.message.is-success .message-body{border-color:#48c774;color:#257942}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#feecf0}.message.is-danger .message-header{background-color:#f14668;color:#fff}.message.is-danger .message-body{border-color:#f14668;color:#cc0f35}.message-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#4a4a4a;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:transparent}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,.86)}.modal-card,.modal-content{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width:769px){.modal-card,.modal-content{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:0 0;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-foot,.modal-card-head{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#363636;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link,.navbar.is-white .navbar-brand>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width:1024px){.navbar.is-white .navbar-end .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-start>.navbar-item{color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-end .navbar-link::after,.navbar.is-white .navbar-start .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand .navbar-link,.navbar.is-black .navbar-brand>.navbar-item{color:#fff}.navbar.is-black .navbar-brand .navbar-link.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-black .navbar-end .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-start>.navbar-item{color:#fff}.navbar.is-black .navbar-end .navbar-link.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover{background-color:#000;color:#fff}.navbar.is-black .navbar-end .navbar-link::after,.navbar.is-black .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link,.navbar.is-light .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-light .navbar-end .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-end .navbar-link::after,.navbar.is-light .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,.7)}}.navbar.is-dark{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand .navbar-link,.navbar.is-dark .navbar-brand>.navbar-item{color:#fff}.navbar.is-dark .navbar-brand .navbar-link.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-dark .navbar-end .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.navbar.is-dark .navbar-start>.navbar-item{color:#fff}.navbar.is-dark .navbar-end .navbar-link.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover{background-color:#292929;color:#fff}.navbar.is-dark .navbar-end .navbar-link::after,.navbar.is-dark .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary{background-color:#00d1b2;color:#fff}.navbar.is-primary .navbar-brand .navbar-link,.navbar.is-primary .navbar-brand>.navbar-item{color:#fff}.navbar.is-primary .navbar-brand .navbar-link.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-primary .navbar-end .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.navbar.is-primary .navbar-start>.navbar-item{color:#fff}.navbar.is-primary .navbar-end .navbar-link.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-end .navbar-link::after,.navbar.is-primary .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link{background-color:#00b89c;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active{background-color:#00d1b2;color:#fff}}.navbar.is-link{background-color:#3273dc;color:#fff}.navbar.is-link .navbar-brand .navbar-link,.navbar.is-link .navbar-brand>.navbar-item{color:#fff}.navbar.is-link .navbar-brand .navbar-link.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-link .navbar-end .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-start>.navbar-item{color:#fff}.navbar.is-link .navbar-end .navbar-link.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-end .navbar-link::after,.navbar.is-link .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link{background-color:#2366d1;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#3273dc;color:#fff}}.navbar.is-info{background-color:#3298dc;color:#fff}.navbar.is-info .navbar-brand .navbar-link,.navbar.is-info .navbar-brand>.navbar-item{color:#fff}.navbar.is-info .navbar-brand .navbar-link.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-info .navbar-end .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-start>.navbar-item{color:#fff}.navbar.is-info .navbar-end .navbar-link.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-end .navbar-link::after,.navbar.is-info .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link{background-color:#238cd1;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#3298dc;color:#fff}}.navbar.is-success{background-color:#48c774;color:#fff}.navbar.is-success .navbar-brand .navbar-link,.navbar.is-success .navbar-brand>.navbar-item{color:#fff}.navbar.is-success .navbar-brand .navbar-link.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-success .navbar-end .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-start>.navbar-item{color:#fff}.navbar.is-success .navbar-end .navbar-link.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-end .navbar-link::after,.navbar.is-success .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link{background-color:#3abb67;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#48c774;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link,.navbar.is-warning .navbar-brand>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,.7)}@media screen and (min-width:1024px){.navbar.is-warning .navbar-end .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-start>.navbar-item{color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-end .navbar-link::after,.navbar.is-warning .navbar-start .navbar-link::after{border-color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link{background-color:#ffd83d;color:rgba(0,0,0,.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,.7)}}.navbar.is-danger{background-color:#f14668;color:#fff}.navbar.is-danger .navbar-brand .navbar-link,.navbar.is-danger .navbar-brand>.navbar-item{color:#fff}.navbar.is-danger .navbar-brand .navbar-link.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width:1024px){.navbar.is-danger .navbar-end .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-start>.navbar-item{color:#fff}.navbar.is-danger .navbar-end .navbar-link.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-end .navbar-link::after,.navbar.is-danger .navbar-start .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link{background-color:#ef2e55;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#f14668;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}body.has-navbar-fixed-top,html.has-navbar-fixed-top{padding-top:3.25rem}body.has-navbar-fixed-bottom,html.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color,opacity,transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:.5rem .75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-.25rem;margin-right:-.25rem}.navbar-link,a.navbar-item{cursor:pointer}.navbar-link.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,a.navbar-item.is-active,a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover{background-color:#fafafa;color:#3273dc}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:transparent;border-bottom-color:#3273dc}.navbar-item.is-tab.is-active{background-color:transparent;border-bottom-color:#3273dc;border-bottom-style:solid;border-bottom-width:3px;color:#3273dc;padding-bottom:calc(.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#3273dc;margin-top:-.375em;right:1.125em}.navbar-dropdown{font-size:.875rem;padding-bottom:.5rem;padding-top:.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:.5rem 0}@media screen and (max-width:1023px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,.1);padding:.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}body.has-navbar-fixed-top-touch,html.has-navbar-fixed-top-touch{padding-top:3.25rem}body.has-navbar-fixed-bottom-touch,html.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width:1024px){.navbar,.navbar-end,.navbar-menu,.navbar-start{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-end,.navbar.is-spaced .navbar-start{align-items:center}.navbar.is-spaced .navbar-link,.navbar.is-spaced a.navbar-item{border-radius:4px}.navbar.is-transparent .navbar-link.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover{background-color:transparent!important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent!important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(.25em,-.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,.1);display:none;font-size:.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#3273dc}.navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-dropdown{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity,transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.container>.navbar .navbar-brand,.navbar>.container .navbar-brand{margin-left:-.75rem}.container>.navbar .navbar-menu,.navbar>.container .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,.1)}.navbar.is-fixed-top-desktop{top:0}body.has-navbar-fixed-top-desktop,html.has-navbar-fixed-top-desktop{padding-top:3.25rem}body.has-navbar-fixed-bottom-desktop,html.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}body.has-spaced-navbar-fixed-top,html.has-spaced-navbar-fixed-top{padding-top:5.25rem}body.has-spaced-navbar-fixed-bottom,html.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}.navbar-link.is-active,a.navbar-item.is-active{color:#0a0a0a}.navbar-link.is-active:not(:focus):not(:hover),a.navbar-item.is-active:not(:focus):not(:hover){background-color:transparent}.navbar-item.has-dropdown.is-active .navbar-link,.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-next,.pagination.is-rounded .pagination-previous{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-ellipsis,.pagination-link,.pagination-next,.pagination-previous{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-link,.pagination-next,.pagination-previous{border-color:#dbdbdb;color:#363636;min-width:2.5em}.pagination-link:hover,.pagination-next:hover,.pagination-previous:hover{border-color:#b5b5b5;color:#363636}.pagination-link:focus,.pagination-next:focus,.pagination-previous:focus{border-color:#3273dc}.pagination-link:active,.pagination-next:active,.pagination-previous:active{box-shadow:inset 0 1px 2px rgba(10,10,10,.2)}.pagination-link[disabled],.pagination-next[disabled],.pagination-previous[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#7a7a7a;opacity:.5}.pagination-next,.pagination-previous{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#3273dc;border-color:#3273dc;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width:768px){.pagination{flex-wrap:wrap}.pagination-next,.pagination-previous{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width:769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:0 .5em 1em -.125em rgba(10,10,10,.1),0 0 0 1px rgba(10,10,10,.02);font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading{background-color:#00d1b2;color:#fff}.panel.is-primary .panel-tabs a.is-active{border-bottom-color:#00d1b2}.panel.is-primary .panel-block.is-active .panel-icon{color:#00d1b2}.panel.is-link .panel-heading{background-color:#3273dc;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#3273dc}.panel.is-link .panel-block.is-active .panel-icon{color:#3273dc}.panel.is-info .panel-heading{background-color:#3298dc;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#3298dc}.panel.is-info .panel-block.is-active .panel-icon{color:#3298dc}.panel.is-success .panel-heading{background-color:#48c774;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#48c774}.panel.is-success .panel-block.is-active .panel-icon{color:#48c774}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#f14668;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#f14668}.panel.is-danger .panel-block.is-active .panel-icon{color:#f14668}.panel-block:not(:last-child),.panel-tabs:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#363636;font-size:1.25em;font-weight:700;line-height:1.25;padding:.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#4a4a4a}.panel-list a:hover{color:#3273dc}.panel-block{align-items:center;color:#363636;display:flex;justify-content:flex-start;padding:.5em .75em}.panel-block input[type=checkbox]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#3273dc;color:#363636}.panel-block.is-active .panel-icon{color:#3273dc}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#7a7a7a;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#4a4a4a;display:flex;justify-content:center;margin-bottom:-1px;padding:.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#363636;color:#363636}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#3273dc;color:#3273dc}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:.75em;padding-right:.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:transparent!important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#3273dc;border-color:#3273dc;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0}.columns.is-mobile>.column.is-1{flex:none;width:8.33333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333%}.columns.is-mobile>.column.is-2{flex:none;width:16.66667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333%}.columns.is-mobile>.column.is-5{flex:none;width:41.66667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333%}.columns.is-mobile>.column.is-8{flex:none;width:66.66667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333%}.columns.is-mobile>.column.is-11{flex:none;width:91.66667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width:768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0}.column.is-1-mobile{flex:none;width:8.33333%}.column.is-offset-1-mobile{margin-left:8.33333%}.column.is-2-mobile{flex:none;width:16.66667%}.column.is-offset-2-mobile{margin-left:16.66667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333%}.column.is-offset-4-mobile{margin-left:33.33333%}.column.is-5-mobile{flex:none;width:41.66667%}.column.is-offset-5-mobile{margin-left:41.66667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333%}.column.is-offset-7-mobile{margin-left:58.33333%}.column.is-8-mobile{flex:none;width:66.66667%}.column.is-offset-8-mobile{margin-left:66.66667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333%}.column.is-offset-10-mobile{margin-left:83.33333%}.column.is-11-mobile{flex:none;width:91.66667%}.column.is-offset-11-mobile{margin-left:91.66667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width:769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width:1023px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0}.column.is-1-touch{flex:none;width:8.33333%}.column.is-offset-1-touch{margin-left:8.33333%}.column.is-2-touch{flex:none;width:16.66667%}.column.is-offset-2-touch{margin-left:16.66667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333%}.column.is-offset-4-touch{margin-left:33.33333%}.column.is-5-touch{flex:none;width:41.66667%}.column.is-offset-5-touch{margin-left:41.66667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333%}.column.is-offset-7-touch{margin-left:58.33333%}.column.is-8-touch{flex:none;width:66.66667%}.column.is-offset-8-touch{margin-left:66.66667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333%}.column.is-offset-10-touch{margin-left:83.33333%}.column.is-11-touch{flex:none;width:91.66667%}.column.is-offset-11-touch{margin-left:91.66667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width:1024px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0}.column.is-1-desktop{flex:none;width:8.33333%}.column.is-offset-1-desktop{margin-left:8.33333%}.column.is-2-desktop{flex:none;width:16.66667%}.column.is-offset-2-desktop{margin-left:16.66667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333%}.column.is-offset-4-desktop{margin-left:33.33333%}.column.is-5-desktop{flex:none;width:41.66667%}.column.is-offset-5-desktop{margin-left:41.66667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333%}.column.is-offset-7-desktop{margin-left:58.33333%}.column.is-8-desktop{flex:none;width:66.66667%}.column.is-offset-8-desktop{margin-left:66.66667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333%}.column.is-offset-10-desktop{margin-left:83.33333%}.column.is-11-desktop{flex:none;width:91.66667%}.column.is-offset-11-desktop{margin-left:91.66667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width:1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0}.column.is-1-widescreen{flex:none;width:8.33333%}.column.is-offset-1-widescreen{margin-left:8.33333%}.column.is-2-widescreen{flex:none;width:16.66667%}.column.is-offset-2-widescreen{margin-left:16.66667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333%}.column.is-offset-4-widescreen{margin-left:33.33333%}.column.is-5-widescreen{flex:none;width:41.66667%}.column.is-offset-5-widescreen{margin-left:41.66667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333%}.column.is-offset-7-widescreen{margin-left:58.33333%}.column.is-8-widescreen{flex:none;width:66.66667%}.column.is-offset-8-widescreen{margin-left:66.66667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333%}.column.is-offset-10-widescreen{margin-left:83.33333%}.column.is-11-widescreen{flex:none;width:91.66667%}.column.is-offset-11-widescreen{margin-left:91.66667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width:1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0}.column.is-1-fullhd{flex:none;width:8.33333%}.column.is-offset-1-fullhd{margin-left:8.33333%}.column.is-2-fullhd{flex:none;width:16.66667%}.column.is-offset-2-fullhd{margin-left:16.66667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333%}.column.is-offset-4-fullhd{margin-left:33.33333%}.column.is-5-fullhd{flex:none;width:41.66667%}.column.is-offset-5-fullhd{margin-left:41.66667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333%}.column.is-offset-7-fullhd{margin-left:58.33333%}.column.is-8-fullhd{flex:none;width:66.66667%}.column.is-offset-8-fullhd{margin-left:66.66667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333%}.column.is-offset-10-fullhd{margin-left:83.33333%}.column.is-11-fullhd{flex:none;width:91.66667%}.column.is-offset-11-fullhd{margin-left:91.66667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0!important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width:769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width:1024px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap:0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap:0rem}@media screen and (max-width:768px){.columns.is-variable.is-0-mobile{--columnGap:0rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-0-tablet{--columnGap:0rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-0-tablet-only{--columnGap:0rem}}@media screen and (max-width:1023px){.columns.is-variable.is-0-touch{--columnGap:0rem}}@media screen and (min-width:1024px){.columns.is-variable.is-0-desktop{--columnGap:0rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-0-desktop-only{--columnGap:0rem}}@media screen and (min-width:1216px){.columns.is-variable.is-0-widescreen{--columnGap:0rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-0-widescreen-only{--columnGap:0rem}}@media screen and (min-width:1408px){.columns.is-variable.is-0-fullhd{--columnGap:0rem}}.columns.is-variable.is-1{--columnGap:0.25rem}@media screen and (max-width:768px){.columns.is-variable.is-1-mobile{--columnGap:0.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-1-tablet{--columnGap:0.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-1-tablet-only{--columnGap:0.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-1-touch{--columnGap:0.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-1-desktop{--columnGap:0.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-1-desktop-only{--columnGap:0.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-1-widescreen{--columnGap:0.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-1-widescreen-only{--columnGap:0.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-1-fullhd{--columnGap:0.25rem}}.columns.is-variable.is-2{--columnGap:0.5rem}@media screen and (max-width:768px){.columns.is-variable.is-2-mobile{--columnGap:0.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-2-tablet{--columnGap:0.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-2-tablet-only{--columnGap:0.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-2-touch{--columnGap:0.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-2-desktop{--columnGap:0.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-2-desktop-only{--columnGap:0.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-2-widescreen{--columnGap:0.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-2-widescreen-only{--columnGap:0.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-2-fullhd{--columnGap:0.5rem}}.columns.is-variable.is-3{--columnGap:0.75rem}@media screen and (max-width:768px){.columns.is-variable.is-3-mobile{--columnGap:0.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-3-tablet{--columnGap:0.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-3-tablet-only{--columnGap:0.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-3-touch{--columnGap:0.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-3-desktop{--columnGap:0.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-3-desktop-only{--columnGap:0.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-3-widescreen{--columnGap:0.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-3-widescreen-only{--columnGap:0.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-3-fullhd{--columnGap:0.75rem}}.columns.is-variable.is-4{--columnGap:1rem}@media screen and (max-width:768px){.columns.is-variable.is-4-mobile{--columnGap:1rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-4-tablet{--columnGap:1rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-4-tablet-only{--columnGap:1rem}}@media screen and (max-width:1023px){.columns.is-variable.is-4-touch{--columnGap:1rem}}@media screen and (min-width:1024px){.columns.is-variable.is-4-desktop{--columnGap:1rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-4-desktop-only{--columnGap:1rem}}@media screen and (min-width:1216px){.columns.is-variable.is-4-widescreen{--columnGap:1rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-4-widescreen-only{--columnGap:1rem}}@media screen and (min-width:1408px){.columns.is-variable.is-4-fullhd{--columnGap:1rem}}.columns.is-variable.is-5{--columnGap:1.25rem}@media screen and (max-width:768px){.columns.is-variable.is-5-mobile{--columnGap:1.25rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-5-tablet{--columnGap:1.25rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-5-tablet-only{--columnGap:1.25rem}}@media screen and (max-width:1023px){.columns.is-variable.is-5-touch{--columnGap:1.25rem}}@media screen and (min-width:1024px){.columns.is-variable.is-5-desktop{--columnGap:1.25rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-5-desktop-only{--columnGap:1.25rem}}@media screen and (min-width:1216px){.columns.is-variable.is-5-widescreen{--columnGap:1.25rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-5-widescreen-only{--columnGap:1.25rem}}@media screen and (min-width:1408px){.columns.is-variable.is-5-fullhd{--columnGap:1.25rem}}.columns.is-variable.is-6{--columnGap:1.5rem}@media screen and (max-width:768px){.columns.is-variable.is-6-mobile{--columnGap:1.5rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-6-tablet{--columnGap:1.5rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-6-tablet-only{--columnGap:1.5rem}}@media screen and (max-width:1023px){.columns.is-variable.is-6-touch{--columnGap:1.5rem}}@media screen and (min-width:1024px){.columns.is-variable.is-6-desktop{--columnGap:1.5rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-6-desktop-only{--columnGap:1.5rem}}@media screen and (min-width:1216px){.columns.is-variable.is-6-widescreen{--columnGap:1.5rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-6-widescreen-only{--columnGap:1.5rem}}@media screen and (min-width:1408px){.columns.is-variable.is-6-fullhd{--columnGap:1.5rem}}.columns.is-variable.is-7{--columnGap:1.75rem}@media screen and (max-width:768px){.columns.is-variable.is-7-mobile{--columnGap:1.75rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-7-tablet{--columnGap:1.75rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-7-tablet-only{--columnGap:1.75rem}}@media screen and (max-width:1023px){.columns.is-variable.is-7-touch{--columnGap:1.75rem}}@media screen and (min-width:1024px){.columns.is-variable.is-7-desktop{--columnGap:1.75rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-7-desktop-only{--columnGap:1.75rem}}@media screen and (min-width:1216px){.columns.is-variable.is-7-widescreen{--columnGap:1.75rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-7-widescreen-only{--columnGap:1.75rem}}@media screen and (min-width:1408px){.columns.is-variable.is-7-fullhd{--columnGap:1.75rem}}.columns.is-variable.is-8{--columnGap:2rem}@media screen and (max-width:768px){.columns.is-variable.is-8-mobile{--columnGap:2rem}}@media screen and (min-width:769px),print{.columns.is-variable.is-8-tablet{--columnGap:2rem}}@media screen and (min-width:769px) and (max-width:1023px){.columns.is-variable.is-8-tablet-only{--columnGap:2rem}}@media screen and (max-width:1023px){.columns.is-variable.is-8-touch{--columnGap:2rem}}@media screen and (min-width:1024px){.columns.is-variable.is-8-desktop{--columnGap:2rem}}@media screen and (min-width:1024px) and (max-width:1215px){.columns.is-variable.is-8-desktop-only{--columnGap:2rem}}@media screen and (min-width:1216px){.columns.is-variable.is-8-widescreen{--columnGap:2rem}}@media screen and (min-width:1216px) and (max-width:1407px){.columns.is-variable.is-8-widescreen-only{--columnGap:2rem}}@media screen and (min-width:1408px){.columns.is-variable.is-8-fullhd{--columnGap:2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:-webkit-min-content;min-height:-moz-min-content;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0!important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem!important}@media screen and (min-width:769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333%}.tile.is-2{flex:none;width:16.66667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333%}.tile.is-5{flex:none;width:41.66667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333%}.tile.is-8{flex:none;width:66.66667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333%}.tile.is-11{flex:none;width:91.66667%}.tile.is-12{flex:none;width:100%}}.has-text-white{color:#fff!important}a.has-text-white:focus,a.has-text-white:hover{color:#e6e6e6!important}.has-background-white{background-color:#fff!important}.has-text-black{color:#0a0a0a!important}a.has-text-black:focus,a.has-text-black:hover{color:#000!important}.has-background-black{background-color:#0a0a0a!important}.has-text-light{color:#f5f5f5!important}a.has-text-light:focus,a.has-text-light:hover{color:#dbdbdb!important}.has-background-light{background-color:#f5f5f5!important}.has-text-dark{color:#363636!important}a.has-text-dark:focus,a.has-text-dark:hover{color:#1c1c1c!important}.has-background-dark{background-color:#363636!important}.has-text-primary{color:#00d1b2!important}a.has-text-primary:focus,a.has-text-primary:hover{color:#009e86!important}.has-background-primary{background-color:#00d1b2!important}.has-text-primary-light{color:#ebfffc!important}a.has-text-primary-light:focus,a.has-text-primary-light:hover{color:#b8fff4!important}.has-background-primary-light{background-color:#ebfffc!important}.has-text-primary-dark{color:#00947e!important}a.has-text-primary-dark:focus,a.has-text-primary-dark:hover{color:#00c7a9!important}.has-background-primary-dark{background-color:#00947e!important}.has-text-link{color:#3273dc!important}a.has-text-link:focus,a.has-text-link:hover{color:#205bbc!important}.has-background-link{background-color:#3273dc!important}.has-text-link-light{color:#eef3fc!important}a.has-text-link-light:focus,a.has-text-link-light:hover{color:#c2d5f5!important}.has-background-link-light{background-color:#eef3fc!important}.has-text-link-dark{color:#2160c4!important}a.has-text-link-dark:focus,a.has-text-link-dark:hover{color:#3b79de!important}.has-background-link-dark{background-color:#2160c4!important}.has-text-info{color:#3298dc!important}a.has-text-info:focus,a.has-text-info:hover{color:#207dbc!important}.has-background-info{background-color:#3298dc!important}.has-text-info-light{color:#eef6fc!important}a.has-text-info-light:focus,a.has-text-info-light:hover{color:#c2e0f5!important}.has-background-info-light{background-color:#eef6fc!important}.has-text-info-dark{color:#1d72aa!important}a.has-text-info-dark:focus,a.has-text-info-dark:hover{color:#248fd6!important}.has-background-info-dark{background-color:#1d72aa!important}.has-text-success{color:#48c774!important}a.has-text-success:focus,a.has-text-success:hover{color:#34a85c!important}.has-background-success{background-color:#48c774!important}.has-text-success-light{color:#effaf3!important}a.has-text-success-light:focus,a.has-text-success-light:hover{color:#c8eed6!important}.has-background-success-light{background-color:#effaf3!important}.has-text-success-dark{color:#257942!important}a.has-text-success-dark:focus,a.has-text-success-dark:hover{color:#31a058!important}.has-background-success-dark{background-color:#257942!important}.has-text-warning{color:#ffdd57!important}a.has-text-warning:focus,a.has-text-warning:hover{color:#ffd324!important}.has-background-warning{background-color:#ffdd57!important}.has-text-warning-light{color:#fffbeb!important}a.has-text-warning-light:focus,a.has-text-warning-light:hover{color:#fff1b8!important}.has-background-warning-light{background-color:#fffbeb!important}.has-text-warning-dark{color:#947600!important}a.has-text-warning-dark:focus,a.has-text-warning-dark:hover{color:#c79f00!important}.has-background-warning-dark{background-color:#947600!important}.has-text-danger{color:#f14668!important}a.has-text-danger:focus,a.has-text-danger:hover{color:#ee1742!important}.has-background-danger{background-color:#f14668!important}.has-text-danger-light{color:#feecf0!important}a.has-text-danger-light:focus,a.has-text-danger-light:hover{color:#fabdc9!important}.has-background-danger-light{background-color:#feecf0!important}.has-text-danger-dark{color:#cc0f35!important}a.has-text-danger-dark:focus,a.has-text-danger-dark:hover{color:#ee2049!important}.has-background-danger-dark{background-color:#cc0f35!important}.has-text-black-bis{color:#121212!important}.has-background-black-bis{background-color:#121212!important}.has-text-black-ter{color:#242424!important}.has-background-black-ter{background-color:#242424!important}.has-text-grey-darker{color:#363636!important}.has-background-grey-darker{background-color:#363636!important}.has-text-grey-dark{color:#4a4a4a!important}.has-background-grey-dark{background-color:#4a4a4a!important}.has-text-grey{color:#7a7a7a!important}.has-background-grey{background-color:#7a7a7a!important}.has-text-grey-light{color:#b5b5b5!important}.has-background-grey-light{background-color:#b5b5b5!important}.has-text-grey-lighter{color:#dbdbdb!important}.has-background-grey-lighter{background-color:#dbdbdb!important}.has-text-white-ter{color:#f5f5f5!important}.has-background-white-ter{background-color:#f5f5f5!important}.has-text-white-bis{color:#fafafa!important}.has-background-white-bis{background-color:#fafafa!important}.is-flex-direction-row{flex-direction:row!important}.is-flex-direction-row-reverse{flex-direction:row-reverse!important}.is-flex-direction-column{flex-direction:column!important}.is-flex-direction-column-reverse{flex-direction:column-reverse!important}.is-flex-wrap-nowrap{flex-wrap:nowrap!important}.is-flex-wrap-wrap{flex-wrap:wrap!important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse!important}.is-justify-content-flex-start{justify-content:flex-start!important}.is-justify-content-flex-end{justify-content:flex-end!important}.is-justify-content-center{justify-content:center!important}.is-justify-content-space-between{justify-content:space-between!important}.is-justify-content-space-around{justify-content:space-around!important}.is-justify-content-space-evenly{justify-content:space-evenly!important}.is-justify-content-start{justify-content:start!important}.is-justify-content-end{justify-content:end!important}.is-justify-content-left{justify-content:left!important}.is-justify-content-right{justify-content:right!important}.is-align-content-flex-start{align-content:flex-start!important}.is-align-content-flex-end{align-content:flex-end!important}.is-align-content-center{align-content:center!important}.is-align-content-space-between{align-content:space-between!important}.is-align-content-space-around{align-content:space-around!important}.is-align-content-space-evenly{align-content:space-evenly!important}.is-align-content-stretch{align-content:stretch!important}.is-align-content-start{align-content:start!important}.is-align-content-end{align-content:end!important}.is-align-content-baseline{align-content:baseline!important}.is-align-items-stretch{align-items:stretch!important}.is-align-items-flex-start{align-items:flex-start!important}.is-align-items-flex-end{align-items:flex-end!important}.is-align-items-center{align-items:center!important}.is-align-items-baseline{align-items:baseline!important}.is-align-items-start{align-items:start!important}.is-align-items-end{align-items:end!important}.is-align-items-self-start{align-items:self-start!important}.is-align-items-self-end{align-items:self-end!important}.is-align-self-auto{align-self:auto!important}.is-align-self-flex-start{align-self:flex-start!important}.is-align-self-flex-end{align-self:flex-end!important}.is-align-self-center{align-self:center!important}.is-align-self-baseline{align-self:baseline!important}.is-align-self-stretch{align-self:stretch!important}.is-flex-grow-0{flex-grow:0!important}.is-flex-grow-1{flex-grow:1!important}.is-flex-grow-2{flex-grow:2!important}.is-flex-grow-3{flex-grow:3!important}.is-flex-grow-4{flex-grow:4!important}.is-flex-grow-5{flex-grow:5!important}.is-flex-shrink-0{flex-shrink:0!important}.is-flex-shrink-1{flex-shrink:1!important}.is-flex-shrink-2{flex-shrink:2!important}.is-flex-shrink-3{flex-shrink:3!important}.is-flex-shrink-4{flex-shrink:4!important}.is-flex-shrink-5{flex-shrink:5!important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left!important}.is-pulled-right{float:right!important}.is-radiusless{border-radius:0!important}.is-shadowless{box-shadow:none!important}.is-clickable{cursor:pointer!important}.is-clipped{overflow:hidden!important}.is-relative{position:relative!important}.is-marginless{margin:0!important}.is-paddingless{padding:0!important}.m-0{margin:0!important}.mt-0{margin-top:0!important}.mr-0{margin-right:0!important}.mb-0{margin-bottom:0!important}.ml-0{margin-left:0!important}.mx-0{margin-left:0!important;margin-right:0!important}.my-0{margin-top:0!important;margin-bottom:0!important}.m-1{margin:.25rem!important}.mt-1{margin-top:.25rem!important}.mr-1{margin-right:.25rem!important}.mb-1{margin-bottom:.25rem!important}.ml-1{margin-left:.25rem!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.m-2{margin:.5rem!important}.mt-2{margin-top:.5rem!important}.mr-2{margin-right:.5rem!important}.mb-2{margin-bottom:.5rem!important}.ml-2{margin-left:.5rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.m-3{margin:.75rem!important}.mt-3{margin-top:.75rem!important}.mr-3{margin-right:.75rem!important}.mb-3{margin-bottom:.75rem!important}.ml-3{margin-left:.75rem!important}.mx-3{margin-left:.75rem!important;margin-right:.75rem!important}.my-3{margin-top:.75rem!important;margin-bottom:.75rem!important}.m-4{margin:1rem!important}.mt-4{margin-top:1rem!important}.mr-4{margin-right:1rem!important}.mb-4{margin-bottom:1rem!important}.ml-4{margin-left:1rem!important}.mx-4{margin-left:1rem!important;margin-right:1rem!important}.my-4{margin-top:1rem!important;margin-bottom:1rem!important}.m-5{margin:1.5rem!important}.mt-5{margin-top:1.5rem!important}.mr-5{margin-right:1.5rem!important}.mb-5{margin-bottom:1.5rem!important}.ml-5{margin-left:1.5rem!important}.mx-5{margin-left:1.5rem!important;margin-right:1.5rem!important}.my-5{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.m-6{margin:3rem!important}.mt-6{margin-top:3rem!important}.mr-6{margin-right:3rem!important}.mb-6{margin-bottom:3rem!important}.ml-6{margin-left:3rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.my-6{margin-top:3rem!important;margin-bottom:3rem!important}.p-0{padding:0!important}.pt-0{padding-top:0!important}.pr-0{padding-right:0!important}.pb-0{padding-bottom:0!important}.pl-0{padding-left:0!important}.px-0{padding-left:0!important;padding-right:0!important}.py-0{padding-top:0!important;padding-bottom:0!important}.p-1{padding:.25rem!important}.pt-1{padding-top:.25rem!important}.pr-1{padding-right:.25rem!important}.pb-1{padding-bottom:.25rem!important}.pl-1{padding-left:.25rem!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.p-2{padding:.5rem!important}.pt-2{padding-top:.5rem!important}.pr-2{padding-right:.5rem!important}.pb-2{padding-bottom:.5rem!important}.pl-2{padding-left:.5rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.p-3{padding:.75rem!important}.pt-3{padding-top:.75rem!important}.pr-3{padding-right:.75rem!important}.pb-3{padding-bottom:.75rem!important}.pl-3{padding-left:.75rem!important}.px-3{padding-left:.75rem!important;padding-right:.75rem!important}.py-3{padding-top:.75rem!important;padding-bottom:.75rem!important}.p-4{padding:1rem!important}.pt-4{padding-top:1rem!important}.pr-4{padding-right:1rem!important}.pb-4{padding-bottom:1rem!important}.pl-4{padding-left:1rem!important}.px-4{padding-left:1rem!important;padding-right:1rem!important}.py-4{padding-top:1rem!important;padding-bottom:1rem!important}.p-5{padding:1.5rem!important}.pt-5{padding-top:1.5rem!important}.pr-5{padding-right:1.5rem!important}.pb-5{padding-bottom:1.5rem!important}.pl-5{padding-left:1.5rem!important}.px-5{padding-left:1.5rem!important;padding-right:1.5rem!important}.py-5{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.p-6{padding:3rem!important}.pt-6{padding-top:3rem!important}.pr-6{padding-right:3rem!important}.pb-6{padding-bottom:3rem!important}.pl-6{padding-left:3rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.py-6{padding-top:3rem!important;padding-bottom:3rem!important}.is-size-1{font-size:3rem!important}.is-size-2{font-size:2.5rem!important}.is-size-3{font-size:2rem!important}.is-size-4{font-size:1.5rem!important}.is-size-5{font-size:1.25rem!important}.is-size-6{font-size:1rem!important}.is-size-7{font-size:.75rem!important}@media screen and (max-width:768px){.is-size-1-mobile{font-size:3rem!important}.is-size-2-mobile{font-size:2.5rem!important}.is-size-3-mobile{font-size:2rem!important}.is-size-4-mobile{font-size:1.5rem!important}.is-size-5-mobile{font-size:1.25rem!important}.is-size-6-mobile{font-size:1rem!important}.is-size-7-mobile{font-size:.75rem!important}}@media screen and (min-width:769px),print{.is-size-1-tablet{font-size:3rem!important}.is-size-2-tablet{font-size:2.5rem!important}.is-size-3-tablet{font-size:2rem!important}.is-size-4-tablet{font-size:1.5rem!important}.is-size-5-tablet{font-size:1.25rem!important}.is-size-6-tablet{font-size:1rem!important}.is-size-7-tablet{font-size:.75rem!important}}@media screen and (max-width:1023px){.is-size-1-touch{font-size:3rem!important}.is-size-2-touch{font-size:2.5rem!important}.is-size-3-touch{font-size:2rem!important}.is-size-4-touch{font-size:1.5rem!important}.is-size-5-touch{font-size:1.25rem!important}.is-size-6-touch{font-size:1rem!important}.is-size-7-touch{font-size:.75rem!important}}@media screen and (min-width:1024px){.is-size-1-desktop{font-size:3rem!important}.is-size-2-desktop{font-size:2.5rem!important}.is-size-3-desktop{font-size:2rem!important}.is-size-4-desktop{font-size:1.5rem!important}.is-size-5-desktop{font-size:1.25rem!important}.is-size-6-desktop{font-size:1rem!important}.is-size-7-desktop{font-size:.75rem!important}}@media screen and (min-width:1216px){.is-size-1-widescreen{font-size:3rem!important}.is-size-2-widescreen{font-size:2.5rem!important}.is-size-3-widescreen{font-size:2rem!important}.is-size-4-widescreen{font-size:1.5rem!important}.is-size-5-widescreen{font-size:1.25rem!important}.is-size-6-widescreen{font-size:1rem!important}.is-size-7-widescreen{font-size:.75rem!important}}@media screen and (min-width:1408px){.is-size-1-fullhd{font-size:3rem!important}.is-size-2-fullhd{font-size:2.5rem!important}.is-size-3-fullhd{font-size:2rem!important}.is-size-4-fullhd{font-size:1.5rem!important}.is-size-5-fullhd{font-size:1.25rem!important}.is-size-6-fullhd{font-size:1rem!important}.is-size-7-fullhd{font-size:.75rem!important}}.has-text-centered{text-align:center!important}.has-text-justified{text-align:justify!important}.has-text-left{text-align:left!important}.has-text-right{text-align:right!important}@media screen and (max-width:768px){.has-text-centered-mobile{text-align:center!important}}@media screen and (min-width:769px),print{.has-text-centered-tablet{text-align:center!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-centered-tablet-only{text-align:center!important}}@media screen and (max-width:1023px){.has-text-centered-touch{text-align:center!important}}@media screen and (min-width:1024px){.has-text-centered-desktop{text-align:center!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-centered-desktop-only{text-align:center!important}}@media screen and (min-width:1216px){.has-text-centered-widescreen{text-align:center!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-centered-widescreen-only{text-align:center!important}}@media screen and (min-width:1408px){.has-text-centered-fullhd{text-align:center!important}}@media screen and (max-width:768px){.has-text-justified-mobile{text-align:justify!important}}@media screen and (min-width:769px),print{.has-text-justified-tablet{text-align:justify!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-justified-tablet-only{text-align:justify!important}}@media screen and (max-width:1023px){.has-text-justified-touch{text-align:justify!important}}@media screen and (min-width:1024px){.has-text-justified-desktop{text-align:justify!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-justified-desktop-only{text-align:justify!important}}@media screen and (min-width:1216px){.has-text-justified-widescreen{text-align:justify!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-justified-widescreen-only{text-align:justify!important}}@media screen and (min-width:1408px){.has-text-justified-fullhd{text-align:justify!important}}@media screen and (max-width:768px){.has-text-left-mobile{text-align:left!important}}@media screen and (min-width:769px),print{.has-text-left-tablet{text-align:left!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-left-tablet-only{text-align:left!important}}@media screen and (max-width:1023px){.has-text-left-touch{text-align:left!important}}@media screen and (min-width:1024px){.has-text-left-desktop{text-align:left!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-left-desktop-only{text-align:left!important}}@media screen and (min-width:1216px){.has-text-left-widescreen{text-align:left!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-left-widescreen-only{text-align:left!important}}@media screen and (min-width:1408px){.has-text-left-fullhd{text-align:left!important}}@media screen and (max-width:768px){.has-text-right-mobile{text-align:right!important}}@media screen and (min-width:769px),print{.has-text-right-tablet{text-align:right!important}}@media screen and (min-width:769px) and (max-width:1023px){.has-text-right-tablet-only{text-align:right!important}}@media screen and (max-width:1023px){.has-text-right-touch{text-align:right!important}}@media screen and (min-width:1024px){.has-text-right-desktop{text-align:right!important}}@media screen and (min-width:1024px) and (max-width:1215px){.has-text-right-desktop-only{text-align:right!important}}@media screen and (min-width:1216px){.has-text-right-widescreen{text-align:right!important}}@media screen and (min-width:1216px) and (max-width:1407px){.has-text-right-widescreen-only{text-align:right!important}}@media screen and (min-width:1408px){.has-text-right-fullhd{text-align:right!important}}.is-capitalized{text-transform:capitalize!important}.is-lowercase{text-transform:lowercase!important}.is-uppercase{text-transform:uppercase!important}.is-italic{font-style:italic!important}.has-text-weight-light{font-weight:300!important}.has-text-weight-normal{font-weight:400!important}.has-text-weight-medium{font-weight:500!important}.has-text-weight-semibold{font-weight:600!important}.has-text-weight-bold{font-weight:700!important}.is-family-primary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-secondary{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-sans-serif{font-family:BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif!important}.is-family-monospace{font-family:monospace!important}.is-family-code{font-family:monospace!important}.is-block{display:block!important}@media screen and (max-width:768px){.is-block-mobile{display:block!important}}@media screen and (min-width:769px),print{.is-block-tablet{display:block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-block-tablet-only{display:block!important}}@media screen and (max-width:1023px){.is-block-touch{display:block!important}}@media screen and (min-width:1024px){.is-block-desktop{display:block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-block-desktop-only{display:block!important}}@media screen and (min-width:1216px){.is-block-widescreen{display:block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-block-widescreen-only{display:block!important}}@media screen and (min-width:1408px){.is-block-fullhd{display:block!important}}.is-flex{display:flex!important}@media screen and (max-width:768px){.is-flex-mobile{display:flex!important}}@media screen and (min-width:769px),print{.is-flex-tablet{display:flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-flex-tablet-only{display:flex!important}}@media screen and (max-width:1023px){.is-flex-touch{display:flex!important}}@media screen and (min-width:1024px){.is-flex-desktop{display:flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-flex-desktop-only{display:flex!important}}@media screen and (min-width:1216px){.is-flex-widescreen{display:flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-flex-widescreen-only{display:flex!important}}@media screen and (min-width:1408px){.is-flex-fullhd{display:flex!important}}.is-inline{display:inline!important}@media screen and (max-width:768px){.is-inline-mobile{display:inline!important}}@media screen and (min-width:769px),print{.is-inline-tablet{display:inline!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-tablet-only{display:inline!important}}@media screen and (max-width:1023px){.is-inline-touch{display:inline!important}}@media screen and (min-width:1024px){.is-inline-desktop{display:inline!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-desktop-only{display:inline!important}}@media screen and (min-width:1216px){.is-inline-widescreen{display:inline!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-widescreen-only{display:inline!important}}@media screen and (min-width:1408px){.is-inline-fullhd{display:inline!important}}.is-inline-block{display:inline-block!important}@media screen and (max-width:768px){.is-inline-block-mobile{display:inline-block!important}}@media screen and (min-width:769px),print{.is-inline-block-tablet{display:inline-block!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-block-tablet-only{display:inline-block!important}}@media screen and (max-width:1023px){.is-inline-block-touch{display:inline-block!important}}@media screen and (min-width:1024px){.is-inline-block-desktop{display:inline-block!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-block-desktop-only{display:inline-block!important}}@media screen and (min-width:1216px){.is-inline-block-widescreen{display:inline-block!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-block-widescreen-only{display:inline-block!important}}@media screen and (min-width:1408px){.is-inline-block-fullhd{display:inline-block!important}}.is-inline-flex{display:inline-flex!important}@media screen and (max-width:768px){.is-inline-flex-mobile{display:inline-flex!important}}@media screen and (min-width:769px),print{.is-inline-flex-tablet{display:inline-flex!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-inline-flex-tablet-only{display:inline-flex!important}}@media screen and (max-width:1023px){.is-inline-flex-touch{display:inline-flex!important}}@media screen and (min-width:1024px){.is-inline-flex-desktop{display:inline-flex!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-inline-flex-desktop-only{display:inline-flex!important}}@media screen and (min-width:1216px){.is-inline-flex-widescreen{display:inline-flex!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-inline-flex-widescreen-only{display:inline-flex!important}}@media screen and (min-width:1408px){.is-inline-flex-fullhd{display:inline-flex!important}}.is-hidden{display:none!important}.is-sr-only{border:none!important;clip:rect(0,0,0,0)!important;height:.01em!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:.01em!important}@media screen and (max-width:768px){.is-hidden-mobile{display:none!important}}@media screen and (min-width:769px),print{.is-hidden-tablet{display:none!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-hidden-tablet-only{display:none!important}}@media screen and (max-width:1023px){.is-hidden-touch{display:none!important}}@media screen and (min-width:1024px){.is-hidden-desktop{display:none!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-hidden-desktop-only{display:none!important}}@media screen and (min-width:1216px){.is-hidden-widescreen{display:none!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-hidden-widescreen-only{display:none!important}}@media screen and (min-width:1408px){.is-hidden-fullhd{display:none!important}}.is-invisible{visibility:hidden!important}@media screen and (max-width:768px){.is-invisible-mobile{visibility:hidden!important}}@media screen and (min-width:769px),print{.is-invisible-tablet{visibility:hidden!important}}@media screen and (min-width:769px) and (max-width:1023px){.is-invisible-tablet-only{visibility:hidden!important}}@media screen and (max-width:1023px){.is-invisible-touch{visibility:hidden!important}}@media screen and (min-width:1024px){.is-invisible-desktop{visibility:hidden!important}}@media screen and (min-width:1024px) and (max-width:1215px){.is-invisible-desktop-only{visibility:hidden!important}}@media screen and (min-width:1216px){.is-invisible-widescreen{visibility:hidden!important}}@media screen and (min-width:1216px) and (max-width:1407px){.is-invisible-widescreen-only{visibility:hidden!important}}@media screen and (min-width:1408px){.is-invisible-fullhd{visibility:hidden!important}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:0 0}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width:1023px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,.7)}.hero.is-white .navbar-link.is-active,.hero.is-white .navbar-link:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white a.navbar-item:hover{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg,#e6e6e6 0,#fff 71%,#fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,.7)}.hero.is-black .navbar-link.is-active,.hero.is-black .navbar-link:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black a.navbar-item:hover{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}@media screen and (max-width:768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg,#000 0,#0a0a0a 71%,#181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,.7)}.hero.is-light .subtitle{color:rgba(0,0,0,.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,.7)}.hero.is-light .navbar-link.is-active,.hero.is-light .navbar-link:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light a.navbar-item:hover{background-color:#e8e8e8;color:rgba(0,0,0,.7)}.hero.is-light .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}@media screen and (max-width:768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg,#dfd8d9 0,#f5f5f5 71%,#fff 100%)}}.hero.is-dark{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong{color:inherit}.hero.is-dark .title{color:#fff}.hero.is-dark .subtitle{color:rgba(255,255,255,.9)}.hero.is-dark .subtitle a:not(.button),.hero.is-dark .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-dark .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.hero.is-dark .navbar-link{color:rgba(255,255,255,.7)}.hero.is-dark .navbar-link.is-active,.hero.is-dark .navbar-link:hover,.hero.is-dark a.navbar-item.is-active,.hero.is-dark a.navbar-item:hover{background-color:#292929;color:#fff}.hero.is-dark .tabs a{color:#fff;opacity:.9}.hero.is-dark .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}@media screen and (max-width:768px){.hero.is-dark.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1f191a 0,#363636 71%,#46403f 100%)}}.hero.is-primary{background-color:#00d1b2;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong{color:inherit}.hero.is-primary .title{color:#fff}.hero.is-primary .subtitle{color:rgba(255,255,255,.9)}.hero.is-primary .subtitle a:not(.button),.hero.is-primary .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-primary .navbar-menu{background-color:#00d1b2}}.hero.is-primary .navbar-item,.hero.is-primary .navbar-link{color:rgba(255,255,255,.7)}.hero.is-primary .navbar-link.is-active,.hero.is-primary .navbar-link:hover,.hero.is-primary a.navbar-item.is-active,.hero.is-primary a.navbar-item:hover{background-color:#00b89c;color:#fff}.hero.is-primary .tabs a{color:#fff;opacity:.9}.hero.is-primary .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#00d1b2}.hero.is-primary.is-bold{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}@media screen and (max-width:768px){.hero.is-primary.is-bold .navbar-menu{background-image:linear-gradient(141deg,#009e6c 0,#00d1b2 71%,#00e7eb 100%)}}.hero.is-link{background-color:#3273dc;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-link .navbar-menu{background-color:#3273dc}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,.7)}.hero.is-link .navbar-link.is-active,.hero.is-link .navbar-link:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link a.navbar-item:hover{background-color:#2366d1;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3273dc}.hero.is-link.is-bold{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}@media screen and (max-width:768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg,#1577c6 0,#3273dc 71%,#4366e5 100%)}}.hero.is-info{background-color:#3298dc;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-info .navbar-menu{background-color:#3298dc}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,.7)}.hero.is-info .navbar-link.is-active,.hero.is-info .navbar-link:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info a.navbar-item:hover{background-color:#238cd1;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#3298dc}.hero.is-info.is-bold{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}@media screen and (max-width:768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg,#159dc6 0,#3298dc 71%,#4389e5 100%)}}.hero.is-success{background-color:#48c774;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-success .navbar-menu{background-color:#48c774}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,.7)}.hero.is-success .navbar-link.is-active,.hero.is-success .navbar-link:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success a.navbar-item:hover{background-color:#3abb67;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#48c774}.hero.is-success.is-bold{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}@media screen and (max-width:768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg,#29b342 0,#48c774 71%,#56d296 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,.7)}@media screen and (max-width:1023px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,.7)}.hero.is-warning .navbar-link.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning a.navbar-item:hover{background-color:#ffd83d;color:rgba(0,0,0,.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,.7);opacity:.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,.7);border-color:rgba(0,0,0,.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}@media screen and (max-width:768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg,#ffaf24 0,#ffdd57 71%,#fffa70 100%)}}.hero.is-danger{background-color:#f14668;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width:1023px){.hero.is-danger .navbar-menu{background-color:#f14668}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,.7)}.hero.is-danger .navbar-link.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger a.navbar-item:hover{background-color:#ef2e55;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#f14668}.hero.is-danger.is-bold{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}@media screen and (max-width:768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg,#fa0a62 0,#f14668 71%,#f7595f 100%)}}.hero.is-small .hero-body{padding:1.5rem}@media screen and (min-width:769px),print{.hero.is-medium .hero-body{padding:9rem 1.5rem}}@media screen and (min-width:769px),print{.hero.is-large .hero-body{padding:18rem 1.5rem}}.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body,.hero.is-halfheight .hero-body{align-items:center;display:flex}.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container,.hero.is-halfheight .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.hero-video.is-transparent{opacity:.3}@media screen and (max-width:768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width:768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:.75rem}}@media screen and (min-width:769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-foot,.hero-head{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width:1024px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper.Website/settings.yml b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/settings.yml
new file mode 100644
index 0000000..6b730e2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper.Website/settings.yml
@@ -0,0 +1 @@
+LinkRoot: /CsvHelper
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ArrayHelper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ArrayHelper.cs
new file mode 100644
index 0000000..16b15db
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ArrayHelper.cs
@@ -0,0 +1,78 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Methods to help with arrays.
+ /// </summary>
+ public static class ArrayHelper
+ {
+ /// <summary>
+ /// Trims the characters off the start and end of the buffer
+ /// by updating the start and length arguments.
+ /// </summary>
+ /// <param name="buffer">The buffer.</param>
+ /// <param name="start">The start.</param>
+ /// <param name="length">The length.</param>
+ /// <param name="trimChars">The characters to trim.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static void Trim(char[] buffer, ref int start, ref int length, char[] trimChars)
+ {
+ // Trim start.
+ for (var i = start; i < start + length; i++)
+ {
+ var c = buffer[i];
+ if (!Contains(trimChars, c))
+ {
+ break;
+ }
+
+ start++;
+ length--;
+ }
+
+ // Trim end.
+ for (var i = start + length - 1; i > start; i--)
+ {
+ var c = buffer[i];
+ if (!Contains(trimChars, c))
+ {
+ break;
+ }
+
+ length--;
+ }
+ }
+
+ /// <summary>
+ /// Determines whether this given array contains the given character.
+ /// </summary>
+ /// <param name="array">The array to search.</param>
+ /// <param name="c">The character to look for.</param>
+ /// <returns>
+ /// <c>true</c> if the array contains the characters, otherwise <c>false</c>.
+ /// </returns>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool Contains(char[] array, in char c)
+ {
+ for (var i = 0; i < array.Length; i++)
+ {
+ if (array[i] == c)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/BadDataException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/BadDataException.cs
new file mode 100644
index 0000000..9aecd38
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/BadDataException.cs
@@ -0,0 +1,67 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents errors that occur due to bad data.
+ /// </summary>
+ [Serializable]
+ public class BadDataException : CsvHelperException
+ {
+ /// <summary>
+ /// The full field unedited.
+ /// </summary>
+ public readonly string Field;
+
+ /// <summary>
+ /// The full row unedited.
+ /// </summary>
+ public readonly string RawRecord;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BadDataException"/> class.
+ /// </summary>
+ /// <param name="field">The full field unedited.</param>
+ /// <param name="rawRecord">The full row unedited.</param>
+ /// <param name="context">The reading context.</param>
+ public BadDataException(string field, string rawRecord, CsvContext context) : base(context)
+ {
+ Field = field;
+ RawRecord = rawRecord;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BadDataException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="field">The full field unedited.</param>
+ /// <param name="rawRecord">The full row unedited.</param>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public BadDataException(string field, string rawRecord, CsvContext context, string message) : base(context, message)
+ {
+ Field = field;
+ RawRecord = rawRecord;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="BadDataException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="field">The full field unedited.</param>
+ /// <param name="rawRecord">The full row unedited.</param>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public BadDataException(string field, string rawRecord, CsvContext context, string message, Exception innerException) : base(context, message, innerException)
+ {
+ Field = field;
+ RawRecord = rawRecord;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/AllowCommentsAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/AllowCommentsAttribute.cs
new file mode 100644
index 0000000..1490cc9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/AllowCommentsAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating if comments are allowed.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class AllowCommentsAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets a value indicating if comments are allowed.
+ /// </summary>
+ public bool AllowComments { get; private set; }
+
+ /// <summary>
+ /// A value indicating if comments are allowed.
+ /// </summary>
+ /// <param name="allowComments">The value indicating id comments are allowed.</param>
+ public AllowCommentsAttribute(bool allowComments)
+ {
+ AllowComments = allowComments;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.AllowComments = AllowComments;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanFalseValuesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanFalseValuesAttribute.cs
new file mode 100644
index 0000000..b26315b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanFalseValuesAttribute.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The string values used to represent a boolean false when converting.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class BooleanFalseValuesAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the false values.
+ /// </summary>
+ public string[] FalseValues { get; private set; }
+
+ /// <summary>
+ /// The string values used to represent a boolean false when converting.
+ /// </summary>
+ /// <param name="falseValue">The false values.</param>
+ public BooleanFalseValuesAttribute(string falseValue)
+ {
+ FalseValues = new string[] { falseValue };
+ }
+
+ /// <summary>
+ /// The string values used to represent a boolean false when converting.
+ /// </summary>
+ /// <param name="falseValues">The false values.</param>
+ public BooleanFalseValuesAttribute(params string[] falseValues)
+ {
+ FalseValues = falseValues;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.BooleanFalseValues.Clear();
+ memberMap.Data.TypeConverterOptions.BooleanFalseValues.AddRange(FalseValues);
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.BooleanFalseValues.Clear();
+ parameterMap.Data.TypeConverterOptions.BooleanFalseValues.AddRange(FalseValues);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanTrueValuesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanTrueValuesAttribute.cs
new file mode 100644
index 0000000..3a9b591
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BooleanTrueValuesAttribute.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The string values used to represent a boolean true when converting.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class BooleanTrueValuesAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the true values.
+ /// </summary>
+ public string[] TrueValues { get; private set; }
+
+ /// <summary>
+ /// The string values used to represent a boolean true when converting.
+ /// </summary>
+ /// <param name="trueValue"></param>
+ public BooleanTrueValuesAttribute(string trueValue)
+ {
+ TrueValues = new string[] { trueValue };
+ }
+
+ /// <summary>
+ /// The string values used to represent a boolean true when converting.
+ /// </summary>
+ /// <param name="trueValues"></param>
+ public BooleanTrueValuesAttribute(params string[] trueValues)
+ {
+ TrueValues = trueValues;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.BooleanTrueValues.Clear();
+ memberMap.Data.TypeConverterOptions.BooleanTrueValues.AddRange(TrueValues);
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.BooleanTrueValues.Clear();
+ parameterMap.Data.TypeConverterOptions.BooleanTrueValues.AddRange(TrueValues);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BufferSizeAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BufferSizeAttribute.cs
new file mode 100644
index 0000000..f74e98e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/BufferSizeAttribute.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The size of the buffer used for parsing and writing CSV files.
+ /// Default is 0x1000.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class BufferSizeAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The buffer size.
+ /// </summary>
+ public int BufferSize { get; private set; }
+
+ /// <summary>
+ /// The size of the buffer used for parsing and writing CSV files.
+ /// </summary>
+ /// <param name="bufferSize"></param>
+ public BufferSizeAttribute(int bufferSize)
+ {
+ BufferSize = bufferSize;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.BufferSize = BufferSize;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CacheFieldsAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CacheFieldsAttribute.cs
new file mode 100644
index 0000000..1f6b859
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CacheFieldsAttribute.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Cache fields that are created when parsing.
+ /// Default is false.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class CacheFieldsAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Cache fields that are created when parsing.
+ /// </summary>
+ public bool CacheFields { get; private set; }
+
+ /// <summary>
+ /// Cache fields that are created when parsing.
+ /// </summary>
+ /// <param name="cacheFields"></param>
+ public CacheFieldsAttribute(bool cacheFields)
+ {
+ CacheFields = cacheFields;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.CacheFields = CacheFields;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CommentAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CommentAttribute.cs
new file mode 100644
index 0000000..c0c6124
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CommentAttribute.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The character used to denote a line that is commented out.
+ /// Default is #.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class CommentAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the character used to denote a line that is commented out.
+ /// </summary>
+ public char Comment { get; private set; }
+
+ /// <summary>
+ /// The character used to denote a line that is commented out.
+ /// </summary>
+ /// <param name="comment">The comment character.</param>
+ public CommentAttribute(char comment)
+ {
+ Comment = comment;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.Comment = Comment;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ConstantAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ConstantAttribute.cs
new file mode 100644
index 0000000..5dd2dc5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ConstantAttribute.cs
@@ -0,0 +1,47 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The constant value that will be used for every record when
+ /// reading and writing. This value will always be used no matter
+ /// what other mapping configurations are specified.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class ConstantAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the constant.
+ /// </summary>
+ public object Constant { get; private set; }
+
+ /// <summary>
+ /// The constant value that will be used for every record when
+ /// reading and writing. This value will always be used no matter
+ /// what other mapping configurations are specified.
+ /// </summary>
+ /// <param name="constant">The constant.</param>
+ public ConstantAttribute(object constant)
+ {
+ Constant = constant;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.Constant = Constant;
+ memberMap.Data.IsConstantSet = true;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.Constant = Constant;
+ parameterMap.Data.IsConstantSet = true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CountBytesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CountBytesAttribute.cs
new file mode 100644
index 0000000..165784e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CountBytesAttribute.cs
@@ -0,0 +1,45 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Text;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating whether the number of bytes should
+ /// be counted while parsing. Default is false. This will slow down parsing
+ /// because it needs to get the byte count of every char for the given encoding.
+ /// The <see cref="Encoding"/> needs to be set correctly for this to be accurate.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class CountBytesAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// A value indicating whether the number of bytes should
+ /// be counted while parsing. Default is false. This will slow down parsing
+ /// because it needs to get the byte count of every char for the given encoding.
+ /// The <see cref="Encoding"/> needs to be set correctly for this to be accurate.
+ /// </summary>
+ public bool CountBytes { get; private set; }
+
+ /// <summary>
+ /// A value indicating whether the number of bytes should
+ /// be counted while parsing. Default is false. This will slow down parsing
+ /// because it needs to get the byte count of every char for the given encoding.
+ /// The <see cref="Encoding"/> needs to be set correctly for this to be accurate.
+ /// </summary>
+ /// <param name="countBytes"></param>
+ public CountBytesAttribute(bool countBytes)
+ {
+ CountBytes = countBytes;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.CountBytes = CountBytes;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CultureInfoAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CultureInfoAttribute.cs
new file mode 100644
index 0000000..47940fb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/CultureInfoAttribute.cs
@@ -0,0 +1,46 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The <see cref="CultureInfo"/> used when type converting.
+ /// This will override the global <see cref="CsvConfiguration.CultureInfo"/>
+ /// setting. Or set the same if the attribute is specified on class level.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class CultureInfoAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the culture info.
+ /// </summary>
+ public CultureInfo CultureInfo { get; private set; }
+
+ /// <summary>
+ /// The <see cref="CultureInfo"/> used when type converting.
+ /// This will override the global <see cref="CsvConfiguration.CultureInfo"/>
+ /// setting. Or set the same if the attribute is specified on class level.
+ /// </summary>
+ /// <param name="culture">The culture.</param>
+ public CultureInfoAttribute(string culture)
+ {
+ CultureInfo = CultureInfo.GetCultureInfo(culture);
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.CultureInfo = CultureInfo;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.CultureInfo = CultureInfo;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DateTimeStylesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DateTimeStylesAttribute.cs
new file mode 100644
index 0000000..42fd789
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DateTimeStylesAttribute.cs
@@ -0,0 +1,44 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The <see cref="DateTimeStyles"/> to use when type converting.
+ /// This is used when doing any <see cref="DateTime"/> conversions.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class DateTimeStylesAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the date time styles.
+ /// </summary>
+ public DateTimeStyles DateTimeStyles { get; private set; }
+
+ /// <summary>
+ /// The <see cref="DateTimeStyles"/> to use when type converting.
+ /// This is used when doing any <see cref="DateTime"/> conversions.
+ /// </summary>
+ /// <param name="dateTimeStyles">The date time styles.</param>
+ public DateTimeStylesAttribute(DateTimeStyles dateTimeStyles)
+ {
+ DateTimeStyles = dateTimeStyles;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.DateTimeStyle = DateTimeStyles;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.DateTimeStyle = DateTimeStyles;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DefaultAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DefaultAttribute.cs
new file mode 100644
index 0000000..f2e4e46
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DefaultAttribute.cs
@@ -0,0 +1,45 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class DefaultAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the default value.
+ /// </summary>
+ public object Default { get; private set; }
+
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty.
+ /// </summary>
+ /// <param name="defaultValue">The default value</param>
+ public DefaultAttribute(object defaultValue)
+ {
+ Default = defaultValue;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.Default = Default;
+ memberMap.Data.IsDefaultSet = true;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.Default = Default;
+ parameterMap.Data.IsDefaultSet = true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DelimiterAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DelimiterAttribute.cs
new file mode 100644
index 0000000..b8b53f6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DelimiterAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The delimiter used to separate fields.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class DelimiterAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the delimiter.
+ /// </summary>
+ public string Delimiter { get; private set; }
+
+ /// <summary>
+ /// The delimiter used to separate fields.
+ /// </summary>
+ /// <param name="delimiter">The delimiter.</param>
+ public DelimiterAttribute(string delimiter)
+ {
+ Delimiter = delimiter;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.Delimiter = Delimiter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectColumnCountChangesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectColumnCountChangesAttribute.cs
new file mode 100644
index 0000000..f31aaf8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectColumnCountChangesAttribute.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating whether changes in the column
+ /// count should be detected. If true, a <see cref="BadDataException"/>
+ /// will be thrown if a different column count is detected.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class DetectColumnCountChangesAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// A value indicating whether changes in the column
+ /// count should be detected. If true, a <see cref="BadDataException"/>
+ /// will be thrown if a different column count is detected.
+ /// </summary>
+ public bool DetectColumnCountChanges { get; private set; }
+
+ /// <summary>
+ /// A value indicating whether changes in the column
+ /// count should be detected. If true, a <see cref="BadDataException"/>
+ /// will be thrown if a different column count is detected.
+ /// </summary>
+ public DetectColumnCountChangesAttribute(bool detectColumnCountChanges)
+ {
+ DetectColumnCountChanges = detectColumnCountChanges;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.DetectColumnCountChanges = DetectColumnCountChanges;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterAttribute.cs
new file mode 100644
index 0000000..2c7da45
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Detect the delimiter instead of using the delimiter from configuration.
+ /// Default is <c>false</c>.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class DetectDelimiterAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Detect the delimiter instead of using the delimiter from configuration.
+ /// </summary>
+ public bool DetectDelimiter { get; private set; }
+
+ /// <summary>
+ /// Detect the delimiter instead of using the delimiter from configuration.
+ /// </summary>
+ public DetectDelimiterAttribute(bool detectDelimiter)
+ {
+ DetectDelimiter = detectDelimiter;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.DetectDelimiter = DetectDelimiter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterValuesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterValuesAttribute.cs
new file mode 100644
index 0000000..af641df
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/DetectDelimiterValuesAttribute.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Text.RegularExpressions;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The possible delimiter values used when detecting the delimiter.
+ /// Default is [",", ";", "|", "\t"].
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class DetectDelimiterValuesAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The possible delimiter values used when detecting the delimiter.
+ /// </summary>
+ public string[] DetectDelimiterValues { get; private set; }
+
+ /// <summary>
+ /// The possible delimiter values used when detecting the delimiter.
+ /// </summary>
+ /// <param name="detectDelimiterValues">Whitespace separated list of values.</param>
+ public DetectDelimiterValuesAttribute(string detectDelimiterValues)
+ {
+ DetectDelimiterValues = Regex.Split(detectDelimiterValues, @"\s+");
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.DetectDelimiterValues = DetectDelimiterValues;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EncodingAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EncodingAttribute.cs
new file mode 100644
index 0000000..ee378ba
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EncodingAttribute.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Text;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The encoding used when counting bytes.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class EncodingAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the encoding used when counting bytes.
+ /// </summary>
+ public Encoding Encoding { get; private set; }
+
+ /// <summary>
+ /// The encoding used when counting bytes.
+ /// </summary>
+ /// <param name="encoding">The encoding.</param>
+ public EncodingAttribute(string encoding)
+ {
+ Encoding = Encoding.GetEncoding(encoding);
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.Encoding = Encoding;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EnumIgnoreCaseAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EnumIgnoreCaseAttribute.cs
new file mode 100644
index 0000000..c2b25c9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EnumIgnoreCaseAttribute.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Ignore case when parsing enums.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class EnumIgnoreCaseAttribute : Attribute, IMemberMapper, IMemberReferenceMapper, IParameterMapper
+ {
+ /// <inheritdoc/>
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.EnumIgnoreCase = true;
+ }
+
+ /// <inheritdoc/>
+ public void ApplyTo(MemberReferenceMap referenceMap)
+ {
+ foreach (var memberMap in referenceMap.Data.Mapping.MemberMaps)
+ {
+ ApplyTo(memberMap);
+ }
+ }
+
+ /// <inheritdoc/>
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.EnumIgnoreCase = true;
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EscapeAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EscapeAttribute.cs
new file mode 100644
index 0000000..0d20d50
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/EscapeAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The escape character used to escape a quote inside a field.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Class, AllowMultiple = false, Inherited = true )]
+ public class EscapeAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the escape character used to escape a quote inside a field.
+ /// </summary>
+ public char Escape { get; private set; }
+
+ /// <summary>
+ /// The escape character used to escape a quote inside a field.
+ /// </summary>
+ /// <param name="escape">The escape character.</param>
+ public EscapeAttribute( char escape )
+ {
+ Escape = escape;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.Escape = Escape;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ExceptionMessagesContainRawDataAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ExceptionMessagesContainRawDataAttribute.cs
new file mode 100644
index 0000000..2cb9608
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ExceptionMessagesContainRawDataAttribute.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating if exception messages contain raw CSV data.
+ /// <c>true</c> if exception contain raw CSV data, otherwise <c>false</c>.
+ /// Default is <c>true</c>.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class ExceptionMessagesContainRawDataAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// A value indicating if exception messages contain raw CSV data.
+ /// <c>true</c> if exception contain raw CSV data, otherwise <c>false</c>.
+ /// </summary>
+ public bool ExceptionMessagesContainRawData { get; private set; }
+
+ /// <summary>
+ /// A value indicating if exception messages contain raw CSV data.
+ /// <c>true</c> if exception contain raw CSV data, otherwise <c>false</c>.
+ /// </summary>
+ /// <param name="exceptionMessagesContainRawData"></param>
+ public ExceptionMessagesContainRawDataAttribute(bool exceptionMessagesContainRawData)
+ {
+ ExceptionMessagesContainRawData = exceptionMessagesContainRawData;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.ExceptionMessagesContainRawData = ExceptionMessagesContainRawData;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/FormatAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/FormatAttribute.cs
new file mode 100644
index 0000000..b42d8ed
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/FormatAttribute.cs
@@ -0,0 +1,50 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The string format to be used when type converting.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class FormatAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the formats.
+ /// </summary>
+ public string[] Formats { get; private set; }
+
+ /// <summary>
+ /// The string format to be used when type converting.
+ /// </summary>
+ /// <param name="format">The format.</param>
+ public FormatAttribute(string format)
+ {
+ Formats = new string[] { format };
+ }
+
+ /// <summary>
+ /// The string format to be used when type converting.
+ /// </summary>
+ /// <param name="formats">The formats.</param>
+ public FormatAttribute(params string[] formats)
+ {
+ Formats = formats;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.Formats = Formats;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.Formats = Formats;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HasHeaderRecordAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HasHeaderRecordAttribute.cs
new file mode 100644
index 0000000..b0d93ae
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HasHeaderRecordAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating if the CSV file has a header record.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Class, AllowMultiple = false, Inherited = true )]
+ public class HasHeaderRecordAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets a value indicating if the CSV file has a header record.
+ /// </summary>
+ public bool HasHeaderRecord { get; private set; }
+
+ /// <summary>
+ /// A value indicating if the CSV file has a header record.
+ /// </summary>
+ /// <param name="hasHeaderRecord">A value indicating if the CSV file has a header record.</param>
+ public HasHeaderRecordAttribute( bool hasHeaderRecord )
+ {
+ HasHeaderRecord = hasHeaderRecord;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.HasHeaderRecord = HasHeaderRecord;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HeaderPrefixAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HeaderPrefixAttribute.cs
new file mode 100644
index 0000000..4ae8227
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/HeaderPrefixAttribute.cs
@@ -0,0 +1,73 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference member.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class HeaderPrefixAttribute : Attribute, IMemberReferenceMapper, IParameterReferenceMapper
+ {
+ /// <summary>
+ /// Gets the prefix.
+ /// </summary>
+ public string? Prefix { get; private set; }
+
+ /// <summary>
+ /// Gets a value indicating if the prefix should inherit parent prefixes.
+ /// </summary>
+ public bool Inherit { get; private set; }
+
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference member.
+ /// </summary>
+ public HeaderPrefixAttribute() { }
+
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference member.
+ /// </summary>
+ /// <param name="prefix">The prefix.</param>
+ public HeaderPrefixAttribute(string prefix)
+ {
+ Prefix = prefix;
+ }
+
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference member.
+ /// </summary>
+ /// <param name="inherit">Inherits parent object prefixes.</param>
+ public HeaderPrefixAttribute(bool inherit)
+ {
+ Inherit = inherit;
+ }
+
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference member.
+ /// </summary>
+ /// <param name="prefix">The prefix.</param>
+ /// <param name="inherit">Inherits parent object prefixes.</param>
+ public HeaderPrefixAttribute(string prefix, bool inherit)
+ {
+ Prefix = prefix;
+ Inherit = inherit;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberReferenceMap referenceMap)
+ {
+ referenceMap.Data.Inherit = Inherit;
+ referenceMap.Data.Prefix = Prefix ?? referenceMap.Data.Member.Name + ".";
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterReferenceMap referenceMap)
+ {
+ referenceMap.Data.Inherit = Inherit;
+ referenceMap.Data.Prefix = Prefix ?? referenceMap.Data.Parameter.Name + ".";
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IClassMapper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IClassMapper.cs
new file mode 100644
index 0000000..d395ac9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IClassMapper.cs
@@ -0,0 +1,19 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Defines methods to enable pluggable configuration.
+ /// </summary>
+ public interface IClassMapper
+ {
+ /// <summary>
+ /// Applies configuration.
+ /// </summary>
+ /// <param name="configuration">The configuration to apply to.</param>
+ void ApplyTo(CsvConfiguration configuration);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberMapper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberMapper.cs
new file mode 100644
index 0000000..b8701f1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberMapper.cs
@@ -0,0 +1,20 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Defines methods to enable pluggable configuration of member mapping.
+ /// </summary>
+ public interface IMemberMapper
+ {
+ /// <summary>
+ /// Applies configuration to the given <see cref="MemberMap"/>.
+ /// </summary>
+ /// <param name="memberMap">The member map.</param>
+ void ApplyTo(MemberMap memberMap);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberReferenceMapper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberReferenceMapper.cs
new file mode 100644
index 0000000..c9c4d32
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IMemberReferenceMapper.cs
@@ -0,0 +1,20 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Defines methods to enable pluggable configuration of member reference mapping.
+ /// </summary>
+ public interface IMemberReferenceMapper
+ {
+ /// <summary>
+ /// Applies configuration to the given <see cref="MemberReferenceMap" />.
+ /// </summary>
+ /// <param name="referenceMap">The reference map.</param>
+ void ApplyTo(MemberReferenceMap referenceMap);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterMapper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterMapper.cs
new file mode 100644
index 0000000..0b5c289
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterMapper.cs
@@ -0,0 +1,24 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Defines methods to enable pluggable configuration of parameter mapping.
+ /// </summary>
+ public interface IParameterMapper
+ {
+ /// <summary>
+ /// Applies configuration to the given <see cref="ParameterMap"/>.
+ /// </summary>
+ /// <param name="parameterMap">The parameter map.</param>
+ void ApplyTo(ParameterMap parameterMap);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterReferenceMapper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterReferenceMapper.cs
new file mode 100644
index 0000000..ea4fc50
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IParameterReferenceMapper.cs
@@ -0,0 +1,24 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Defines methods to enable pluggable configuration of parameter reference mapping.
+ /// </summary>
+ public interface IParameterReferenceMapper
+ {
+ /// <summary>
+ /// Applies configuration to the given <see cref="ParameterReferenceMap" />.
+ /// </summary>
+ /// <param name="referenceMap">The reference map.</param>
+ void ApplyTo(ParameterReferenceMap referenceMap);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreAttribute.cs
new file mode 100644
index 0000000..41a199a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreAttribute.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Reflection;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Ignore the member when reading and writing.
+ /// If this member has already been mapped as a reference
+ /// member, either by a class map, or by automapping, calling
+ /// this method will not ignore all the child members down the
+ /// tree that have already been mapped.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class IgnoreAttribute : Attribute, IMemberMapper, IMemberReferenceMapper, IParameterMapper
+ {
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.Ignore = true;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberReferenceMap referenceMap)
+ {
+ foreach (var memberMap in referenceMap.Data.Mapping.MemberMaps)
+ {
+ ApplyTo(memberMap);
+ }
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.Ignore = true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBaseAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBaseAttribute.cs
new file mode 100644
index 0000000..066be2e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBaseAttribute.cs
@@ -0,0 +1,20 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Ignores base classes when auto mapping.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class IgnoreBaseAttribute : Attribute
+ {
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBlankLinesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBlankLinesAttribute.cs
new file mode 100644
index 0000000..c270568
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreBlankLinesAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating if blank lines should be ignored when reading.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Class, AllowMultiple = false, Inherited = true )]
+ public class IgnoreBlankLinesAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets a value indicating if blank lines should be ignored when reading.
+ /// </summary>
+ public bool IgnoreBlankLines { get; private set; }
+
+ /// <summary>
+ /// A value indicating if blank lines should be ignored when reading.
+ /// </summary>
+ /// <param name="ignoreBlankLines">The Ignore Blank Lines Flag.</param>
+ public IgnoreBlankLinesAttribute( bool ignoreBlankLines )
+ {
+ IgnoreBlankLines = ignoreBlankLines;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.IgnoreBlankLines = IgnoreBlankLines;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreReferencesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreReferencesAttribute.cs
new file mode 100644
index 0000000..05e7b0e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IgnoreReferencesAttribute.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Gets a value indicating whether references
+ /// should be ignored when auto mapping. <c>true</c> to ignore
+ /// references, otherwise <c>false</c>. Default is false.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class IgnoreReferencesAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets a value indicating whether references
+ /// should be ignored when auto mapping. <c>true</c> to ignore
+ /// references, otherwise <c>false</c>. Default is false.
+ /// </summary>
+ public bool IgnoreReferences { get; private set; }
+
+ /// <summary>
+ /// Gets a value indicating whether references
+ /// should be ignored when auto mapping. <c>true</c> to ignore
+ /// references, otherwise <c>false</c>. Default is false.
+ /// </summary>
+ /// <param name="ignoreReferences">Ignore references value.</param>
+ public IgnoreReferencesAttribute(bool ignoreReferences)
+ {
+ IgnoreReferences = ignoreReferences;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.IgnoreReferences = IgnoreReferences;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IncludePrivateMembersAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IncludePrivateMembersAttribute.cs
new file mode 100644
index 0000000..92c7c1b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IncludePrivateMembersAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating if private member should be read from and written to.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Class, AllowMultiple = false, Inherited = true )]
+ public class IncludePrivateMembersAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets a value indicating if private member should be read from and written to.
+ /// </summary>
+ public bool IncludePrivateMembers { get; private set; }
+
+ /// <summary>
+ /// A value indicating if private member should be read from and written to.
+ /// </summary>
+ /// <param name="includePrivateMembers">The Include Private Members Flag.</param>
+ public IncludePrivateMembersAttribute( bool includePrivateMembers )
+ {
+ IncludePrivateMembers = includePrivateMembers;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.IncludePrivateMembers = IncludePrivateMembers;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IndexAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IndexAttribute.cs
new file mode 100644
index 0000000..e469741
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/IndexAttribute.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// When reading, is used to get the field at
+ /// the given index. When writing, the fields
+ /// will be written in the order of the field
+ /// indexes.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true )]
+ public class IndexAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the index.
+ /// </summary>
+ public int Index { get; private set; }
+
+ /// <summary>
+ /// Gets the index end.
+ /// </summary>
+ public int IndexEnd { get; private set; }
+
+ /// <summary>
+ /// When reading, is used to get the field at
+ /// the given index. When writing, the fields
+ /// will be written in the order of the field
+ /// indexes.
+ /// </summary>
+ /// <param name="index">The index.</param>
+ /// <param name="indexEnd">The index end.</param>
+ public IndexAttribute( int index, int indexEnd = -1 )
+ {
+ Index = index;
+ IndexEnd = indexEnd;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.Index = Index;
+ memberMap.Data.IndexEnd = IndexEnd;
+ memberMap.Data.IsIndexSet = true;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.Index = Index;
+ parameterMap.Data.IsIndexSet = true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionCharactersAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionCharactersAttribute.cs
new file mode 100644
index 0000000..66f6964
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionCharactersAttribute.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Gets the characters that are used for injection attacks.
+ /// </summary>
+ public class InjectionCharactersAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the characters that are used for injection attacks.
+ /// Default is '=', '@', '+', '-', '\t', '\r'.
+ /// </summary>
+ public char[] InjectionCharacters { get; private set; }
+
+ /// <summary>
+ /// Gets the characters that are used for injection attacks.
+ /// </summary>
+ /// <param name="injectionCharacters"></param>
+ public InjectionCharactersAttribute(string injectionCharacters)
+ {
+ InjectionCharacters = Regex.Split(injectionCharacters, @"\s+").Select(s => s[0]).ToArray();
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.InjectionCharacters = InjectionCharacters;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionEscapeCharacterAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionEscapeCharacterAttribute.cs
new file mode 100644
index 0000000..1db163d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionEscapeCharacterAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The character used to escape a detected injection.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class InjectionEscapeCharacterAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The character used to escape a detected injection.
+ /// </summary>
+ public char InjectionEscapeCharacter { get; private set; }
+
+ /// <summary>
+ /// The character used to escape a detected injection.
+ /// </summary>
+ /// <param name="injectionEscapeCharacter"></param>
+ public InjectionEscapeCharacterAttribute(char injectionEscapeCharacter)
+ {
+ InjectionEscapeCharacter = injectionEscapeCharacter;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.InjectionEscapeCharacter = InjectionEscapeCharacter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionOptionsAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionOptionsAttribute.cs
new file mode 100644
index 0000000..db97300
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/InjectionOptionsAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The injection options.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class InjectionOptionsAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The injection options.
+ /// </summary>
+ public InjectionOptions InjectionOptions { get; private set; }
+
+ /// <summary>
+ /// The injection options.
+ /// </summary>
+ /// <param name="injectionOptions"></param>
+ public InjectionOptionsAttribute(InjectionOptions injectionOptions)
+ {
+ InjectionOptions = injectionOptions;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.InjectionOptions = InjectionOptions;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/LineBreakInQuotedFieldIsBadDataAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/LineBreakInQuotedFieldIsBadDataAttribute.cs
new file mode 100644
index 0000000..db95cbc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/LineBreakInQuotedFieldIsBadDataAttribute.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// A value indicating if a line break found in a quote field should
+ /// be considered bad data. <c>true</c> to consider a line break bad data, otherwise <c>false</c>.
+ /// Defaults to false.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class LineBreakInQuotedFieldIsBadDataAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// A value indicating if a line break found in a quote field should
+ /// be considered bad data. <c>true</c> to consider a line break bad data, otherwise <c>false</c>.
+ /// </summary>
+ public bool LineBreakInQuotedFieldIsBadData { get; private set; }
+
+ /// <summary>
+ /// A value indicating if a line break found in a quote field should
+ /// be considered bad data. <c>true</c> to consider a line break bad data, otherwise <c>false</c>.
+ /// </summary>
+ /// <param name="lineBreakInQuotedFieldIsBadData"></param>
+ public LineBreakInQuotedFieldIsBadDataAttribute(bool lineBreakInQuotedFieldIsBadData)
+ {
+ LineBreakInQuotedFieldIsBadData = lineBreakInQuotedFieldIsBadData;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.LineBreakInQuotedFieldIsBadData = LineBreakInQuotedFieldIsBadData;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MaxFieldSizeAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MaxFieldSizeAttribute.cs
new file mode 100644
index 0000000..1d5c837
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MaxFieldSizeAttribute.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Gets or sets the maximum size of a field.
+ /// Defaults to 0, indicating maximum field size is not checked.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class MaxFieldSizeAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets or sets the maximum size of a field.
+ /// </summary>
+ public double MaxFieldSize { get; private set; }
+
+ /// <summary>
+ /// Gets or sets the maximum size of a field.
+ /// </summary>
+ /// <param name="maxFieldSize"></param>
+ public MaxFieldSizeAttribute(double maxFieldSize)
+ {
+ MaxFieldSize = maxFieldSize;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.MaxFieldSize = MaxFieldSize;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MemberTypesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MemberTypesAttribute.cs
new file mode 100644
index 0000000..e07e86f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/MemberTypesAttribute.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The member types that are used when auto mapping.
+ /// MemberTypes are flags, so you can choose more than one.
+ /// Default is Properties.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class MemberTypesAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The member types that are used when auto mapping.
+ /// MemberTypes are flags, so you can choose more than one.
+ /// Default is Properties.
+ /// </summary>
+ public MemberTypes MemberTypes { get; private set; }
+
+ /// <summary>
+ /// The member types that are used when auto mapping.
+ /// MemberTypes are flags, so you can choose more than one.
+ /// Default is Properties.
+ /// </summary>
+ public MemberTypesAttribute(MemberTypes memberTypes)
+ {
+ MemberTypes = memberTypes;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.MemberTypes = MemberTypes;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ModeAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ModeAttribute.cs
new file mode 100644
index 0000000..448a543
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ModeAttribute.cs
@@ -0,0 +1,38 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The mode.
+ /// See <see cref="CsvMode"/> for more details.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class ModeAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The mode.
+ /// See <see cref="CsvMode"/> for more details.
+ /// </summary>
+ public CsvMode Mode { get; private set; }
+
+ /// <summary>
+ /// The mode.
+ /// See <see cref="CsvMode"/> for more details.
+ /// </summary>
+ /// <param name="mode"></param>
+ public ModeAttribute(CsvMode mode)
+ {
+ Mode = mode;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.Mode = Mode;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameAttribute.cs
new file mode 100644
index 0000000..f1220e4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameAttribute.cs
@@ -0,0 +1,77 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class NameAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the names.
+ /// </summary>
+ public string[] Names { get; private set; }
+
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ /// <param name="name">The name</param>
+ public NameAttribute(string name)
+ {
+ Names = new string[] { name };
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ /// <param name="names">The names.</param>
+ public NameAttribute(params string[] names)
+ {
+ if (names == null || names.Length == 0)
+ {
+ throw new ArgumentNullException(nameof(names));
+ }
+
+ Names = names;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.Names.Clear();
+ memberMap.Data.Names.AddRange(Names);
+ memberMap.Data.IsNameSet = true;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.Names.Clear();
+ parameterMap.Data.Names.AddRange(Names);
+ parameterMap.Data.IsNameSet = true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameIndexAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameIndexAttribute.cs
new file mode 100644
index 0000000..e3d1dfa
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NameIndexAttribute.cs
@@ -0,0 +1,45 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// When reading, is used to get the
+ /// index of the name used when there
+ /// are multiple names that are the same.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class NameIndexAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// The name index.
+ /// </summary>
+ public int NameIndex { get; private set; }
+
+ /// <summary>
+ /// When reading, is used to get the
+ /// index of the name used when there
+ /// are multiple names that are the same.
+ /// </summary>
+ /// <param name="nameIndex">The name index.</param>
+ public NameIndexAttribute(int nameIndex)
+ {
+ NameIndex = nameIndex;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.NameIndex = NameIndex;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.NameIndex = NameIndex;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NewLineAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NewLineAttribute.cs
new file mode 100644
index 0000000..a2bdbd2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NewLineAttribute.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The newline string to use. Default is \r\n (CRLF).
+ /// When writing, this value is always used.
+ /// When reading, this value is only used if explicitly set.
+ /// If not set, the parser uses one of \r\n, \r, or \n.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class NewLineAttribute : Attribute, IClassMapper
+ {
+ /// The newline string to use. Default is \r\n (CRLF).
+ /// When writing, this value is always used.
+ /// When reading, this value is only used if explicitly set.
+ /// If not set, the parser uses one of \r\n, \r, or \n.
+ public string NewLine { get; private set; }
+
+ /// The newline string to use. Default is \r\n (CRLF).
+ /// When writing, this value is always used.
+ /// When reading, this value is only used if explicitly set.
+ /// If not set, the parser uses one of \r\n, \r, or \n.
+ public NewLineAttribute(string newLine)
+ {
+ NewLine = newLine;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.NewLine = NewLine;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NullValuesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NullValuesAttribute.cs
new file mode 100644
index 0000000..8c87e28
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NullValuesAttribute.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class NullValuesAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the null values.
+ /// </summary>
+ public string[] NullValues { get; private set; }
+
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ /// <param name="nullValue">The null values.</param>
+ public NullValuesAttribute(string nullValue)
+ {
+ NullValues = new string[] { nullValue };
+ }
+
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ /// <param name="nullValues">The null values.</param>
+ public NullValuesAttribute(params string[] nullValues)
+ {
+ NullValues = nullValues;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.NullValues.Clear();
+ memberMap.Data.TypeConverterOptions.NullValues.AddRange(NullValues);
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.NullValues.Clear();
+ parameterMap.Data.TypeConverterOptions.NullValues.AddRange(NullValues);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NumberStylesAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NumberStylesAttribute.cs
new file mode 100644
index 0000000..1cd37fb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/NumberStylesAttribute.cs
@@ -0,0 +1,44 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The <see cref="NumberStyles"/> to use when type converting.
+ /// This is used when doing any number conversions.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class NumberStylesAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the number styles.
+ /// </summary>
+ public NumberStyles NumberStyles { get; private set; }
+
+ /// <summary>
+ /// The <see cref="NumberStyles"/> to use when type converting.
+ /// This is used when doing any number conversions.
+ /// </summary>
+ /// <param name="numberStyles">The number styles.</param>
+ public NumberStylesAttribute(NumberStyles numberStyles)
+ {
+ NumberStyles = numberStyles;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverterOptions.NumberStyles = NumberStyles;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverterOptions.NumberStyles = NumberStyles;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/OptionalAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/OptionalAttribute.cs
new file mode 100644
index 0000000..5348c85
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/OptionalAttribute.cs
@@ -0,0 +1,27 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Ignore the member when reading if no matching field name can be found.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class OptionalAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.IsOptional = true;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.IsOptional = true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ProcessFieldBufferSizeAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ProcessFieldBufferSizeAttribute.cs
new file mode 100644
index 0000000..81f6178
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/ProcessFieldBufferSizeAttribute.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The size of the buffer used when processing fields.
+ /// Default is 1024.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class ProcessFieldBufferSizeAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// The size of the buffer used when processing fields.
+ /// </summary>
+ public int ProcessFieldBufferSize { get; private set; }
+
+ /// <summary>
+ /// The size of the buffer used when processing fields.
+ /// </summary>
+ /// <param name="processFieldBufferSize"></param>
+ public ProcessFieldBufferSizeAttribute(int processFieldBufferSize)
+ {
+ ProcessFieldBufferSize = processFieldBufferSize;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.ProcessFieldBufferSize = ProcessFieldBufferSize;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/QuoteAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/QuoteAttribute.cs
new file mode 100644
index 0000000..93b5887
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/QuoteAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The character used to quote fields.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Class, AllowMultiple = false, Inherited = true )]
+ public class QuoteAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the character used to quote fields.
+ /// </summary>
+ public char Quote { get; private set; }
+
+ /// <summary>
+ /// The character used to quote fields.
+ /// </summary>
+ /// <param name="quote">The quote character.</param>
+ public QuoteAttribute( char quote )
+ {
+ Quote = quote;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.Quote = Quote;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TrimOptionsAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TrimOptionsAttribute.cs
new file mode 100644
index 0000000..1b2f645
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TrimOptionsAttribute.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// The fields trimming options.
+ /// </summary>
+ [AttributeUsage( AttributeTargets.Class, AllowMultiple = false, Inherited = true )]
+ public class TrimOptionsAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets the fields trimming options.
+ /// </summary>
+ public TrimOptions TrimOptions { get; private set; }
+
+ /// <summary>
+ /// The fields trimming options.
+ /// </summary>
+ /// <param name="trimOptions">The TrimOptions.</param>
+ public TrimOptionsAttribute( TrimOptions trimOptions )
+ {
+ TrimOptions = trimOptions;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.TrimOptions = TrimOptions;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TypeConverterAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TypeConverterAttribute.cs
new file mode 100644
index 0000000..f3900ec
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/TypeConverterAttribute.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.TypeConversion;
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = true)]
+ public class TypeConverterAttribute : Attribute, IMemberMapper, IParameterMapper
+ {
+ /// <summary>
+ /// Gets the type converter.
+ /// </summary>
+ public ITypeConverter TypeConverter { get; private set; }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <param name="typeConverterType">The type of the <see cref="ITypeConverter"/>.</param>
+ public TypeConverterAttribute(Type typeConverterType) : this(typeConverterType, new object[0]) { }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <param name="typeConverterType">The type of the <see cref="ITypeConverter"/>.</param>
+ /// <param name="constructorArgs">Type constructor arguments for the type converter.</param>
+ public TypeConverterAttribute(Type typeConverterType, params object[] constructorArgs)
+ {
+ if (typeConverterType == null)
+ {
+ throw new ArgumentNullException(nameof(typeConverterType));
+ }
+
+ TypeConverter = ObjectResolver.Current.Resolve(typeConverterType, constructorArgs) as ITypeConverter ?? throw new ArgumentException($"Type '{typeConverterType.FullName}' does not implement {nameof(ITypeConverter)}");
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(MemberMap memberMap)
+ {
+ memberMap.Data.TypeConverter = TypeConverter;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(ParameterMap parameterMap)
+ {
+ parameterMap.Data.TypeConverter = TypeConverter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/UseNewObjectForNullReferenceMembersAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/UseNewObjectForNullReferenceMembersAttribute.cs
new file mode 100644
index 0000000..6bfbf37
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/UseNewObjectForNullReferenceMembersAttribute.cs
@@ -0,0 +1,47 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Gets a value indicating that during writing if a new
+ /// object should be created when a reference member is null.
+ /// True to create a new object and use it's defaults for the
+ /// fields, or false to leave the fields empty for all the
+ /// reference member's member.
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class UseNewObjectForNullReferenceMembersAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Gets a value indicating that during writing if a new
+ /// object should be created when a reference member is null.
+ /// True to create a new object and use it's defaults for the
+ /// fields, or false to leave the fields empty for all the
+ /// reference member's member.
+ /// </summary>
+ public bool UseNewObjectForNullReferenceMembers { get; private set; }
+
+ /// <summary>
+ /// Gets a value indicating that during writing if a new
+ /// object should be created when a reference member is null.
+ /// True to create a new object and use it's defaults for the
+ /// fields, or false to leave the fields empty for all the
+ /// reference member's member.
+ /// </summary>
+ /// <param name="useNewObjectForNullReferenceMembers">The value.</param>
+ public UseNewObjectForNullReferenceMembersAttribute(bool useNewObjectForNullReferenceMembers)
+ {
+ UseNewObjectForNullReferenceMembers = useNewObjectForNullReferenceMembers;
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.UseNewObjectForNullReferenceMembers = UseNewObjectForNullReferenceMembers;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/WhiteSpaceCharsAttribute.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/WhiteSpaceCharsAttribute.cs
new file mode 100644
index 0000000..ef8f7cb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/Attributes/WhiteSpaceCharsAttribute.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq;
+using System.Text.RegularExpressions;
+
+namespace CsvHelper.Configuration.Attributes
+{
+ /// <summary>
+ /// Characters considered whitespace.
+ /// Used when trimming fields.
+ /// Default is [' '].
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
+ public class WhiteSpaceCharsAttribute : Attribute, IClassMapper
+ {
+ /// <summary>
+ /// Characters considered whitespace.
+ /// Used when trimming fields.
+ /// </summary>
+ public char[] WhiteSpaceChars { get; private set; }
+
+ /// <summary>
+ /// Characters considered whitespace.
+ /// Used when trimming fields.
+ /// </summary>
+ /// <param name="whiteSpaceChars"></param>
+ public WhiteSpaceCharsAttribute(string whiteSpaceChars)
+ {
+ WhiteSpaceChars = Regex.Split(whiteSpaceChars, @"\s").Select(s => s[0]).ToArray();
+ }
+
+ /// <inheritdoc />
+ public void ApplyTo(CsvConfiguration configuration)
+ {
+ configuration.WhiteSpaceChars = WhiteSpaceChars;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap.cs
new file mode 100644
index 0000000..b000693
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap.cs
@@ -0,0 +1,648 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+namespace CsvHelper.Configuration
+{
+ ///<summary>
+ /// Maps class members to CSV fields.
+ ///</summary>
+ public abstract class ClassMap
+ {
+ private static readonly List<Type> enumerableConverters = new List<Type>
+ {
+ typeof(ArrayConverter),
+ typeof(CollectionGenericConverter),
+ typeof(EnumerableConverter),
+ typeof(IDictionaryConverter),
+ typeof(IDictionaryGenericConverter),
+ typeof(IEnumerableConverter),
+ typeof(IEnumerableGenericConverter)
+ };
+
+ /// <summary>
+ /// The type of the class this map is for.
+ /// </summary>
+ public virtual Type ClassType { get; private set; }
+
+ /// <summary>
+ /// The class constructor parameter mappings.
+ /// </summary>
+ public virtual List<ParameterMap> ParameterMaps { get; } = new List<ParameterMap>();
+
+ /// <summary>
+ /// The class member mappings.
+ /// </summary>
+ public virtual MemberMapCollection MemberMaps { get; } = new MemberMapCollection();
+
+ /// <summary>
+ /// The class member reference mappings.
+ /// </summary>
+ public virtual MemberReferenceMapCollection ReferenceMaps { get; } = new MemberReferenceMapCollection();
+
+ /// <summary>
+ /// Allow only internal creation of CsvClassMap.
+ /// </summary>
+ /// <param name="classType">The type of the class this map is for.</param>
+ internal ClassMap(Type classType)
+ {
+ ClassType = classType;
+ }
+
+ /// <summary>
+ /// Maps a member to a CSV field.
+ /// </summary>
+ /// <param name="classType">The type of the class this map is for. This may not be the same type
+ /// as the member.DeclaringType or the current ClassType due to nested member mappings.</param>
+ /// <param name="member">The member to map.</param>
+ /// <param name="useExistingMap">If true, an existing map will be used if available.
+ /// If false, a new map is created for the same member.</param>
+ /// <returns>The member mapping.</returns>
+ public MemberMap Map(Type classType, MemberInfo member, bool useExistingMap = true)
+ {
+ if (useExistingMap)
+ {
+ var existingMap = MemberMaps.Find(member);
+ if (existingMap != null)
+ {
+ return existingMap;
+ }
+ }
+
+ var memberMap = MemberMap.CreateGeneric(classType, member);
+ memberMap.Data.Index = GetMaxIndex() + 1;
+ MemberMaps.Add(memberMap);
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// Maps a non-member to a CSV field. This allows for writing
+ /// data that isn't mapped to a class member.
+ /// </summary>
+ /// <returns>The member mapping.</returns>
+ public virtual MemberMap<object, object> Map()
+ {
+ var memberMap = new MemberMap<object, object>(null);
+ memberMap.Data.Index = GetMaxIndex() + 1;
+ MemberMaps.Add(memberMap);
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// Maps a member to another class map.
+ /// </summary>
+ /// <param name="classMapType">The type of the class map.</param>
+ /// <param name="member">The member.</param>
+ /// <param name="constructorArgs">Constructor arguments used to create the reference map.</param>
+ /// <returns>The reference mapping for the member.</returns>
+ public virtual MemberReferenceMap References(Type classMapType, MemberInfo member, params object[] constructorArgs)
+ {
+ if (!typeof(ClassMap).IsAssignableFrom(classMapType))
+ {
+ throw new InvalidOperationException($"Argument {nameof(classMapType)} is not a CsvClassMap.");
+ }
+
+ var existingMap = ReferenceMaps.Find(member);
+
+ if (existingMap != null)
+ {
+ return existingMap;
+ }
+
+ var map = (ClassMap)ObjectResolver.Current.Resolve(classMapType, constructorArgs);
+ map.ReIndex(GetMaxIndex() + 1);
+ var reference = new MemberReferenceMap(member, map);
+ ReferenceMaps.Add(reference);
+
+ return reference;
+ }
+
+ /// <summary>
+ /// Maps a constructor parameter to a CSV field.
+ /// </summary>
+ /// <param name="name">The name of the constructor parameter.</param>
+ public virtual ParameterMap Parameter(string name)
+ {
+ if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(nameof(name));
+
+ var args = new GetConstructorArgs(ClassType);
+
+ return Parameter(() => ConfigurationFunctions.GetConstructor(args), name);
+ }
+
+ /// <summary>
+ /// Maps a constructor parameter to a CSV field.
+ /// </summary>
+ /// <param name="getConstructor">A function that returns the <see cref="ConstructorInfo"/> for the constructor.</param>
+ /// <param name="name">The name of the constructor parameter.</param>
+ public virtual ParameterMap Parameter(Func<ConstructorInfo> getConstructor, string name)
+ {
+ if (getConstructor == null) throw new ArgumentNullException(nameof(getConstructor));
+ if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(nameof(name));
+
+ var constructor = getConstructor();
+ var parameters = constructor.GetParameters();
+ var parameter = parameters.SingleOrDefault(p => p.Name == name);
+ if (parameter == null)
+ {
+ throw new ConfigurationException($"Constructor {constructor.GetDefinition()} doesn't contain a paramter with name '{name}'.");
+ }
+
+ return Parameter(constructor, parameter);
+ }
+
+ /// <summary>
+ /// Maps a constructor parameter to a CSV field.
+ /// </summary>
+ /// <param name="constructor">The <see cref="ConstructorInfo"/> for the constructor.</param>
+ /// <param name="parameter">The <see cref="ParameterInfo"/> for the constructor parameter.</param>
+ public virtual ParameterMap Parameter(ConstructorInfo constructor, ParameterInfo parameter)
+ {
+ if (constructor == null) throw new ArgumentNullException(nameof(constructor));
+ if (parameter == null) throw new ArgumentNullException(nameof(parameter));
+
+ if (!constructor.GetParameters().Contains(parameter))
+ {
+ throw new ConfigurationException($"Constructor {constructor.GetDefinition()} doesn't contain parameter '{parameter.GetDefinition()}'.");
+ }
+
+ var parameterMap = new ParameterMap(parameter);
+ parameterMap.Data.Index = GetMaxIndex(isParameter: true) + 1;
+ ParameterMaps.Add(parameterMap);
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// Auto maps all members for the given type. If a member
+ /// is mapped again it will override the existing map.
+ /// </summary>
+ /// <param name="culture">The culture.</param>
+ public virtual void AutoMap(CultureInfo culture)
+ {
+ AutoMap(new CsvConfiguration(culture));
+ }
+
+ /// <summary>
+ /// Auto maps all members for the given type. If a member
+ /// is mapped again it will override the existing map.
+ /// </summary>
+ /// <param name="configuration">The configuration.</param>
+ public virtual void AutoMap(CsvConfiguration configuration)
+ {
+ AutoMap(new CsvContext(configuration));
+ }
+
+ /// <summary>
+ /// Auto maps all members for the given type. If a member
+ /// is mapped again it will override the existing map.
+ /// </summary>
+ /// <param name="context">The context.</param>
+ public virtual void AutoMap(CsvContext context)
+ {
+ var type = GetGenericType();
+ if (typeof(IEnumerable).IsAssignableFrom(type))
+ {
+ throw new ConfigurationException("Types that inherit IEnumerable cannot be auto mapped. " +
+ "Did you accidentally call GetRecord or WriteRecord which " +
+ "acts on a single record instead of calling GetRecords or " +
+ "WriteRecords which acts on a list of records?");
+ }
+
+ var mapParents = new LinkedList<Type>();
+ var args = new ShouldUseConstructorParametersArgs(type);
+ if (context.Configuration.ShouldUseConstructorParameters(args))
+ {
+ // This type doesn't have a parameterless constructor so we can't create an
+ // instance and set it's member. Constructor parameters need to be created
+ // instead. Writing only uses getters, so members will also be mapped
+ // for writing purposes.
+ AutoMapConstructorParameters(this, context, mapParents);
+ }
+
+ AutoMapMembers(this, context, mapParents);
+ }
+
+ /// <summary>
+ /// Get the largest index for the
+ /// members and references.
+ /// </summary>
+ /// <returns>The max index.</returns>
+ public virtual int GetMaxIndex(bool isParameter = false)
+ {
+ if (isParameter)
+ {
+ return ParameterMaps.Select(parameterMap => parameterMap.GetMaxIndex()).DefaultIfEmpty(-1).Max();
+ }
+
+ if (MemberMaps.Count == 0 && ReferenceMaps.Count == 0)
+ {
+ return -1;
+ }
+
+ var indexes = new List<int>();
+ if (MemberMaps.Count > 0)
+ {
+ indexes.Add(MemberMaps.Max(pm => pm.Data.Index));
+ }
+
+ if (ReferenceMaps.Count > 0)
+ {
+ indexes.AddRange(ReferenceMaps.Select(referenceMap => referenceMap.GetMaxIndex()));
+ }
+
+ return indexes.Max();
+ }
+
+ /// <summary>
+ /// Resets the indexes based on the given start index.
+ /// </summary>
+ /// <param name="indexStart">The index start.</param>
+ /// <returns>The last index + 1.</returns>
+ public virtual int ReIndex(int indexStart = 0)
+ {
+ foreach (var parameterMap in ParameterMaps)
+ {
+ parameterMap.Data.Index = indexStart + parameterMap.Data.Index;
+ }
+
+ foreach (var memberMap in MemberMaps)
+ {
+ if (!memberMap.Data.IsIndexSet)
+ {
+ memberMap.Data.Index = indexStart + memberMap.Data.Index;
+ }
+ }
+
+ foreach (var referenceMap in ReferenceMaps)
+ {
+ indexStart = referenceMap.Data.Mapping.ReIndex(indexStart);
+ }
+
+ return indexStart;
+ }
+
+ /// <summary>
+ /// Auto maps the given map and checks for circular references as it goes.
+ /// </summary>
+ /// <param name="map">The map to auto map.</param>
+ /// <param name="context">The context.</param>
+ /// <param name="mapParents">The list of parents for the map.</param>
+ /// <param name="indexStart">The index starting point.</param>
+ protected virtual void AutoMapMembers(ClassMap map, CsvContext context, LinkedList<Type> mapParents, int indexStart = 0)
+ {
+ var type = map.GetGenericType();
+
+ var flags = BindingFlags.Instance | BindingFlags.Public;
+ if (context.Configuration.IncludePrivateMembers)
+ {
+ flags = flags | BindingFlags.NonPublic;
+ }
+
+ var members = new List<MemberInfo>();
+ if ((context.Configuration.MemberTypes & MemberTypes.Properties) == MemberTypes.Properties)
+ {
+ // We need to go up the declaration tree and find the actual type the property
+ // exists on and use that PropertyInfo instead. This is so we can get the private
+ // set method for the property.
+ var properties = new List<PropertyInfo>();
+ foreach (var property in ReflectionHelper.GetUniqueProperties(type, flags))
+ {
+ if (properties.Any(p => p.Name == property.Name))
+ {
+ // Multiple properties could have the same name if a child class property
+ // is hiding a parent class property by using `new`. It's possible that
+ // the order of the properties returned
+ continue;
+ }
+
+ properties.Add(ReflectionHelper.GetDeclaringProperty(type, property, flags));
+ }
+
+ members.AddRange(properties);
+ }
+
+ if ((context.Configuration.MemberTypes & MemberTypes.Fields) == MemberTypes.Fields)
+ {
+ // We need to go up the declaration tree and find the actual type the field
+ // exists on and use that FieldInfo instead.
+ var fields = new List<MemberInfo>();
+ foreach (var field in ReflectionHelper.GetUniqueFields(type, flags))
+ {
+ if (fields.Any(p => p.Name == field.Name))
+ {
+ // Multiple fields could have the same name if a child class field
+ // is hiding a parent class field by using `new`. It's possible that
+ // the order of the fields returned
+ continue;
+ }
+
+ if (!field.GetCustomAttributes(typeof(CompilerGeneratedAttribute), false).Any())
+ {
+ fields.Add(ReflectionHelper.GetDeclaringField(type, field, flags));
+ }
+ }
+
+ members.AddRange(fields);
+ }
+
+ foreach (var member in members)
+ {
+ if (member.GetCustomAttribute<IgnoreAttribute>() != null)
+ {
+ // Ignore this member including its tree if it's a reference.
+ continue;
+ }
+
+ var typeConverterType = context.TypeConverterCache.GetConverter(member).GetType();
+
+ if (context.Configuration.HasHeaderRecord && enumerableConverters.Contains(typeConverterType))
+ {
+ // Enumerable converters can't write the header properly, so skip it.
+ continue;
+ }
+
+ var memberTypeInfo = member.MemberType().GetTypeInfo();
+ var isDefaultConverter = typeConverterType == typeof(DefaultTypeConverter);
+ if (isDefaultConverter)
+ {
+ // If the type is not one covered by our type converters
+ // and it has a parameterless constructor, create a
+ // reference map for it.
+
+ if (context.Configuration.IgnoreReferences)
+ {
+ continue;
+ }
+
+ if (CheckForCircularReference(member.MemberType(), mapParents))
+ {
+ continue;
+ }
+
+ mapParents.AddLast(type);
+ var refMapType = typeof(DefaultClassMap<>).MakeGenericType(member.MemberType());
+ var refMap = (ClassMap)ObjectResolver.Current.Resolve(refMapType);
+
+ if (memberTypeInfo.HasConstructor() && !memberTypeInfo.HasParameterlessConstructor() && !memberTypeInfo.IsUserDefinedStruct())
+ {
+ AutoMapConstructorParameters(refMap, context, mapParents, Math.Max(map.GetMaxIndex() + 1, indexStart));
+ }
+
+ // Need to use Max here for nested types.
+ AutoMapMembers(refMap, context, mapParents, Math.Max(map.GetMaxIndex() + 1, indexStart));
+ mapParents.Drop(mapParents.Find(type));
+
+ if (refMap.MemberMaps.Count > 0 || refMap.ReferenceMaps.Count > 0)
+ {
+ var referenceMap = new MemberReferenceMap(member, refMap);
+ if (context.Configuration.ReferenceHeaderPrefix != null)
+ {
+ var args = new ReferenceHeaderPrefixArgs(member.MemberType(), member.Name);
+ referenceMap.Data.Prefix = context.Configuration.ReferenceHeaderPrefix(args);
+ }
+
+ ApplyAttributes(referenceMap);
+
+ map.ReferenceMaps.Add(referenceMap);
+ }
+ }
+ else
+ {
+ // Only add the member map if it can be converted later on.
+ // If the member will use the default converter, don't add it because
+ // we don't want the .ToString() value to be used when auto mapping.
+
+ // Use the top of the map tree. This will maps that have been auto mapped
+ // to later on get a reference to a map by doing map.Map( m => m.A.B.C.Id )
+ // and it will return the correct parent map type of A instead of C.
+ var classType = mapParents.First?.Value ?? map.ClassType;
+ var memberMap = MemberMap.CreateGeneric(classType, member);
+
+ // Use global values as the starting point.
+ memberMap.Data.TypeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions(), context.TypeConverterOptionsCache.GetOptions(member.MemberType()), memberMap.Data.TypeConverterOptions);
+ memberMap.Data.Index = map.GetMaxIndex() + 1;
+
+ ApplyAttributes(memberMap);
+
+ map.MemberMaps.Add(memberMap);
+ }
+ }
+
+ map.ReIndex(indexStart);
+ }
+
+ /// <summary>
+ /// Auto maps the given map using constructor parameters.
+ /// </summary>
+ /// <param name="map">The map.</param>
+ /// <param name="context">The context.</param>
+ /// <param name="mapParents">The list of parents for the map.</param>
+ /// <param name="indexStart">The index starting point.</param>
+ protected virtual void AutoMapConstructorParameters(ClassMap map, CsvContext context, LinkedList<Type> mapParents, int indexStart = 0)
+ {
+ var type = map.GetGenericType();
+ var args = new GetConstructorArgs(map.ClassType);
+ var constructor = context.Configuration.GetConstructor(args);
+ var parameters = constructor.GetParameters();
+
+ foreach (var parameter in parameters)
+ {
+ var parameterMap = new ParameterMap(parameter);
+
+ if (parameter.GetCustomAttributes<IgnoreAttribute>(true).Any() || parameter.GetCustomAttributes<ConstantAttribute>(true).Any())
+ {
+ // If there is an IgnoreAttribute or ConstantAttribute, we still need to add a map because a constructor requires
+ // all parameters to be present. A default value will be used later on.
+
+ ApplyAttributes(parameterMap);
+ map.ParameterMaps.Add(parameterMap);
+ continue;
+ }
+
+ var typeConverterType = context.TypeConverterCache.GetConverter(parameter.ParameterType).GetType();
+ var memberTypeInfo = parameter.ParameterType.GetTypeInfo();
+ var isDefaultConverter = typeConverterType == typeof(DefaultTypeConverter);
+ if (isDefaultConverter && (memberTypeInfo.HasParameterlessConstructor() || memberTypeInfo.IsUserDefinedStruct()))
+ {
+ // If the type is not one covered by our type converters
+ // and it has a parameterless constructor, create a
+ // reference map for it.
+
+ if (context.Configuration.IgnoreReferences)
+ {
+ throw new InvalidOperationException($"Configuration '{nameof(CsvConfiguration.IgnoreReferences)}' can't be true " +
+ "when using types without a default constructor. Constructor parameters " +
+ "are used and all members including references must be used.");
+ }
+
+ if (CheckForCircularReference(parameter.ParameterType, mapParents))
+ {
+ throw new InvalidOperationException($"A circular reference was detected in constructor paramter '{parameter.Name}'." +
+ "Since all parameters must be supplied for a constructor, this parameter can't be skipped.");
+ }
+
+ mapParents.AddLast(type);
+ var refMapType = typeof(DefaultClassMap<>).MakeGenericType(parameter.ParameterType);
+ var refMap = (ClassMap)ObjectResolver.Current.Resolve(refMapType);
+ AutoMapMembers(refMap, context, mapParents, Math.Max(map.GetMaxIndex(isParameter: true) + 1, indexStart));
+ mapParents.Drop(mapParents.Find(type));
+
+ var referenceMap = new ParameterReferenceMap(parameter, refMap);
+ if (context.Configuration.ReferenceHeaderPrefix != null)
+ {
+ var referenceHeaderPrefix = new ReferenceHeaderPrefixArgs(memberTypeInfo.MemberType(), memberTypeInfo.Name);
+ referenceMap.Data.Prefix = context.Configuration.ReferenceHeaderPrefix(referenceHeaderPrefix);
+ }
+
+ ApplyAttributes(referenceMap);
+
+ parameterMap.ReferenceMap = referenceMap;
+ }
+ else if (isDefaultConverter && context.Configuration.ShouldUseConstructorParameters(new ShouldUseConstructorParametersArgs(parameter.ParameterType)))
+ {
+ // If the type is not one covered by our type converters
+ // and it should use contructor parameters, create a
+ // constructor map for it.
+
+ mapParents.AddLast(type);
+ var constructorMapType = typeof(DefaultClassMap<>).MakeGenericType(parameter.ParameterType);
+ var constructorMap = (ClassMap)ObjectResolver.Current.Resolve(constructorMapType);
+ // Need to use Max here for nested types.
+ AutoMapConstructorParameters(constructorMap, context, mapParents, Math.Max(map.GetMaxIndex(isParameter: true) + 1, indexStart));
+ mapParents.Drop(mapParents.Find(type));
+
+ parameterMap.ConstructorTypeMap = constructorMap;
+ }
+ else
+ {
+ parameterMap.Data.TypeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions(), context.TypeConverterOptionsCache.GetOptions(parameter.ParameterType), parameterMap.Data.TypeConverterOptions);
+ parameterMap.Data.Index = map.GetMaxIndex(isParameter: true) + 1;
+
+ ApplyAttributes(parameterMap);
+ }
+
+ map.ParameterMaps.Add(parameterMap);
+ }
+
+ map.ReIndex(indexStart);
+ }
+
+ /// <summary>
+ /// Checks for circular references.
+ /// </summary>
+ /// <param name="type">The type to check for.</param>
+ /// <param name="mapParents">The list of parents to check against.</param>
+ /// <returns>A value indicating if a circular reference was found.
+ /// True if a circular reference was found, otherwise false.</returns>
+ protected virtual bool CheckForCircularReference(Type type, LinkedList<Type> mapParents)
+ {
+ if (mapParents.Count == 0)
+ {
+ return false;
+ }
+
+ var node = mapParents.Last;
+ while (true)
+ {
+ if (node?.Value == type)
+ {
+ return true;
+ }
+
+ node = node?.Previous;
+ if (node == null)
+ {
+ break;
+ }
+ }
+
+ return false;
+ }
+
+ /// <summary>
+ /// Gets the generic type for this class map.
+ /// </summary>
+ protected virtual Type GetGenericType()
+ {
+ return GetType().GetTypeInfo().BaseType?.GetGenericArguments()[0] ?? throw new ConfigurationException();
+ }
+
+ /// <summary>
+ /// Applies attribute configurations to the map.
+ /// </summary>
+ /// <param name="parameterMap">The parameter map.</param>
+ protected virtual void ApplyAttributes(ParameterMap parameterMap)
+ {
+ var parameter = parameterMap.Data.Parameter;
+ var attributes = parameter.GetCustomAttributes().OfType<IParameterMapper>();
+
+ foreach (var attribute in attributes)
+ {
+ attribute.ApplyTo(parameterMap);
+ }
+ }
+
+ /// <summary>
+ /// Applies attribute configurations to the map.
+ /// </summary>
+ /// <param name="referenceMap">The parameter reference map.</param>
+ protected virtual void ApplyAttributes(ParameterReferenceMap referenceMap)
+ {
+ var parameter = referenceMap.Data.Parameter;
+ var attributes = parameter.GetCustomAttributes().OfType<IParameterReferenceMapper>();
+
+ foreach (var attribute in attributes)
+ {
+ attribute.ApplyTo(referenceMap);
+ }
+ }
+
+ /// <summary>
+ /// Applies attribute configurations to the map.
+ /// </summary>
+ /// <param name="memberMap">The member map.</param>
+ protected virtual void ApplyAttributes(MemberMap memberMap)
+ {
+ if (memberMap.Data.Member == null)
+ {
+ return;
+ }
+
+ var member = memberMap.Data.Member;
+ var attributes = member.GetCustomAttributes().OfType<IMemberMapper>();
+
+ foreach (var attribute in attributes)
+ {
+ attribute.ApplyTo(memberMap);
+ }
+ }
+
+ /// <summary>
+ /// Applies attribute configurations to the map.
+ /// </summary>
+ /// <param name="referenceMap">The member reference map.</param>
+ protected virtual void ApplyAttributes(MemberReferenceMap referenceMap)
+ {
+ var member = referenceMap.Data.Member;
+ var attributes = member.GetCustomAttributes().OfType<IMemberReferenceMapper>();
+
+ foreach (var attribute in attributes)
+ {
+ attribute.ApplyTo(referenceMap);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs
new file mode 100644
index 0000000..fbe2e6a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs
@@ -0,0 +1,432 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq.Expressions;
+using CsvHelper.TypeConversion;
+using System.Collections;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Has mapping capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ public interface IHasMap<TClass> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// Maps a member to a CSV field.
+ /// </summary>
+ /// <param name="expression">The member to map.</param>
+ /// <param name="useExistingMap">If true, an existing map will be used if available.
+ /// If false, a new map is created for the same member.</param>
+ /// <returns>The member mapping.</returns>
+ IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true);
+ }
+
+ /// <summary>
+ /// Options after a mapping call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasMapOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasTypeConverter<TClass, TMember>,
+ IHasIndex<TClass, TMember>,
+ IHasName<TClass, TMember>,
+ IHasOptional<TClass, TMember>,
+ IHasConvertUsing<TClass, TMember>,
+ IHasDefault<TClass, TMember>,
+ IHasConstant<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has type converter capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasTypeConverter<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <param name="typeConverter">The TypeConverter to use.</param>
+ IHasTypeConverterOptions<TClass, TMember> TypeConverter(ITypeConverter typeConverter);
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <typeparam name="TConverter">The <see cref="System.Type"/> of the
+ /// <see cref="TypeConverter"/> to use.</typeparam>
+ IHasTypeConverterOptions<TClass, TMember> TypeConverter<TConverter>() where TConverter : ITypeConverter;
+ }
+
+ /// <summary>
+ /// Options after a type converter call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasTypeConverterOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasDefault<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has index capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasIndex<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// When reading, is used to get the field at
+ /// the given index. When writing, the fields
+ /// will be written in the order of the field
+ /// indexes.
+ /// </summary>
+ /// <param name="index">The index of the CSV field.</param>
+ /// <param name="indexEnd">The end index used when mapping to an <see cref="IEnumerable"/> member.</param>
+ IHasIndexOptions<TClass, TMember> Index(int index, int indexEnd = -1);
+ }
+
+ /// <summary>
+ /// Options after an index call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasIndexOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasTypeConverter<TClass, TMember>,
+ IHasName<TClass, TMember>,
+ IHasDefault<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has optional capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasOptional<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// Ignore the member when reading if no matching field name can be found.
+ /// </summary>
+ IHasOptionalOptions<TClass, TMember> Optional();
+ }
+
+ /// <summary>
+ /// Options after an optional call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasOptionalOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasTypeConverter<TClass, TMember>,
+ IHasName<TClass, TMember>,
+ IHasDefault<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has name capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasName<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ /// <param name="names">The possible names of the CSV field.</param>
+ IHasNameOptions<TClass, TMember> Name(params string[] names);
+ }
+
+ /// <summary>
+ /// Options after a name call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasNameOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasTypeConverter<TClass, TMember>,
+ IHasNameIndex<TClass, TMember>,
+ IHasDefault<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has name index capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasNameIndex<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// When reading, is used to get the
+ /// index of the name used when there
+ /// are multiple names that are the same.
+ /// </summary>
+ /// <param name="index">The index of the name.</param>
+ IHasNameIndexOptions<TClass, TMember> NameIndex(int index);
+ }
+
+ /// <summary>
+ /// Options after a name index call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasNameIndexOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasTypeConverter<TClass, TMember>,
+ IHasDefault<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has convert using capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasConvertUsing<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// Specifies an expression to be used to convert data in the
+ /// row to the member.
+ /// </summary>
+ /// <param name="convertExpression">The convert expression.</param>
+ IHasMap<TClass> ConvertUsing(ConvertFromString<TMember> convertExpression);
+
+ /// <summary>
+ /// Specifies an expression to be used to convert the object
+ /// to a field.
+ /// </summary>
+ /// <param name="convertExpression">The convert expression.</param>
+ IHasMap<TClass> ConvertUsing(ConvertToString<TClass> convertExpression);
+ }
+
+ /// <summary>
+ /// Has default capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasDefault<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty.
+ /// </summary>
+ /// <param name="defaultValue">The default value.</param>
+ IHasDefaultOptions<TClass, TMember> Default(TMember defaultValue);
+
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty. This value is not type checked
+ /// and will use a <see cref="ITypeConverter"/> to convert
+ /// the field. This could potentially have runtime errors.
+ /// </summary>
+ /// <param name="defaultValue">The default value.</param>
+ IHasDefaultOptions<TClass, TMember> Default(string defaultValue);
+ }
+
+ /// <summary>
+ /// Options after a default call.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasDefaultOptions<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasValidate<TClass, TMember>
+ { }
+
+ /// <summary>
+ /// Has constant capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasConstant<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// The constant value that will be used for every record when
+ /// reading and writing. This value will always be used no matter
+ /// what other mapping configurations are specified.
+ /// </summary>
+ /// <param name="value">The constant value.</param>
+ IHasMap<TClass> Constant(TMember value);
+ }
+
+ /// <summary>
+ /// Has validate capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ /// <typeparam name="TMember">The member type.</typeparam>
+ public interface IHasValidate<TClass, TMember> : IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// The validate expression that will be called on every field when reading.
+ /// The expression should return true if the field is valid.
+ /// If false is returned, a <see cref="ValidationException"/>
+ /// will be thrown.
+ /// </summary>
+ /// <param name="validateExpression">The validation expression.</param>
+ IHasMap<TClass> Validate(Validate validateExpression);
+ }
+
+ /// <summary>
+ /// Has build capabilities.
+ /// </summary>
+ /// <typeparam name="TClass">The class type.</typeparam>
+ public interface IBuildableClass<TClass>
+ {
+ /// <summary>
+ /// Builds the <see cref="ClassMap{TClass}"/>.
+ /// </summary>
+ ClassMap<TClass> Build();
+ }
+
+ internal class ClassMapBuilder<TClass> : IHasMap<TClass>
+ {
+ private readonly ClassMap<TClass> map;
+
+ public ClassMapBuilder()
+ {
+ map = new BuilderClassMap<TClass>();
+ }
+
+ public IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true)
+ {
+ return new MemberMapBuilder<TClass, TMember>(map, map.Map(expression, useExistingMap));
+ }
+
+ public ClassMap<TClass> Build()
+ {
+ return map;
+ }
+
+ private class BuilderClassMap<T> : ClassMap<T> { }
+ }
+
+ internal class MemberMapBuilder<TClass, TMember> :
+ IHasMap<TClass>,
+ IHasMapOptions<TClass, TMember>,
+ IHasTypeConverter<TClass, TMember>,
+ IHasTypeConverterOptions<TClass, TMember>,
+ IHasIndex<TClass, TMember>,
+ IHasIndexOptions<TClass, TMember>,
+ IHasName<TClass, TMember>,
+ IHasNameOptions<TClass, TMember>,
+ IHasNameIndex<TClass, TMember>,
+ IHasNameIndexOptions<TClass, TMember>,
+ IHasOptional<TClass, TMember>,
+ IHasOptionalOptions<TClass, TMember>,
+ IHasConvertUsing<TClass, TMember>,
+ IHasDefault<TClass, TMember>,
+ IHasDefaultOptions<TClass, TMember>,
+ IHasConstant<TClass, TMember>,
+ IHasValidate<TClass, TMember>
+ {
+ private readonly ClassMap<TClass> classMap;
+ private readonly MemberMap<TClass, TMember> memberMap;
+
+ public MemberMapBuilder(ClassMap<TClass> classMap, MemberMap<TClass, TMember> memberMap)
+ {
+ this.classMap = classMap;
+ this.memberMap = memberMap;
+ }
+
+#pragma warning disable CS0693 // Type parameter has the same name as the type parameter from outer type
+ public IHasMapOptions<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true)
+ {
+ return new MemberMapBuilder<TClass, TMember>(classMap, classMap.Map(expression, useExistingMap));
+ }
+#pragma warning restore CS0693 // Type parameter has the same name as the type parameter from outer type
+
+ public IHasMap<TClass> ConvertUsing(ConvertFromString<TMember> convertExpression)
+ {
+ memberMap.Convert(convertExpression);
+ return this;
+ }
+
+ public IHasMap<TClass> ConvertUsing(ConvertToString<TClass> convertExpression)
+ {
+ memberMap.Convert(convertExpression);
+ return this;
+ }
+
+ public IHasDefaultOptions<TClass, TMember> Default(TMember defaultValue)
+ {
+ memberMap.Default(defaultValue);
+ return this;
+ }
+
+ public IHasDefaultOptions<TClass, TMember> Default(string defaultValue)
+ {
+ memberMap.Default(defaultValue);
+ return this;
+ }
+
+ public IHasIndexOptions<TClass, TMember> Index(int index, int indexEnd = -1)
+ {
+ memberMap.Index(index, indexEnd);
+ return this;
+ }
+
+ public IHasNameOptions<TClass, TMember> Name(params string[] names)
+ {
+ memberMap.Name(names);
+ return this;
+ }
+
+ public IHasNameIndexOptions<TClass, TMember> NameIndex(int index)
+ {
+ memberMap.NameIndex(index);
+ return this;
+ }
+
+ public IHasOptionalOptions<TClass, TMember> Optional()
+ {
+ memberMap.Optional();
+ return this;
+ }
+
+ public IHasTypeConverterOptions<TClass, TMember> TypeConverter(ITypeConverter typeConverter)
+ {
+ memberMap.TypeConverter(typeConverter);
+ return this;
+ }
+
+ public IHasTypeConverterOptions<TClass, TMember> TypeConverter<TConverter>() where TConverter : ITypeConverter
+ {
+ memberMap.TypeConverter<TConverter>();
+ return this;
+ }
+
+ public IHasMap<TClass> Constant(TMember value)
+ {
+ memberMap.Constant(value);
+ return this;
+ }
+
+ public IHasMap<TClass> Validate(Validate validateExpression)
+ {
+ memberMap.Validate(validateExpression);
+ return this;
+ }
+
+ public ClassMap<TClass> Build()
+ {
+ return classMap;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapCollection.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapCollection.cs
new file mode 100644
index 0000000..f66a284
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapCollection.cs
@@ -0,0 +1,188 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Collection that holds CsvClassMaps for record types.
+ /// </summary>
+ public class ClassMapCollection
+ {
+ private readonly Dictionary<Type, ClassMap> data = new Dictionary<Type, ClassMap>();
+ private readonly CsvContext context;
+
+ /// <summary>
+ /// Gets the <see cref="ClassMap"/> for the specified record type.
+ /// </summary>
+ /// <value>
+ /// The <see cref="ClassMap"/>.
+ /// </value>
+ /// <param name="type">The record type.</param>
+ /// <returns>The <see cref="ClassMap"/> for the specified record type.</returns>
+ public virtual ClassMap? this[Type type]
+ {
+ get
+ {
+ // Go up the inheritance tree to find the matching type.
+ // We can't use IsAssignableFrom because both a child
+ // and it's parent/grandparent/etc could be mapped.
+ var currentType = type;
+ while (true)
+ {
+ if (data.TryGetValue(currentType, out var map))
+ {
+ return map;
+ }
+
+ currentType = currentType.GetTypeInfo().BaseType;
+ if (currentType == null)
+ {
+ return null;
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Creates a new instance using the given configuration.
+ /// </summary>
+ /// <param name="context">The context.</param>
+ public ClassMapCollection(CsvContext context)
+ {
+ this.context = context;
+ }
+
+ /// <summary>
+ /// Finds the <see cref="ClassMap"/> for the specified record type.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <returns>The <see cref="ClassMap"/> for the specified record type.</returns>
+ public virtual ClassMap<T>? Find<T>()
+ {
+ return (ClassMap<T>?)this[typeof(T)];
+ }
+
+ /// <summary>
+ /// Adds the specified map for it's record type. If a map
+ /// already exists for the record type, the specified
+ /// map will replace it.
+ /// </summary>
+ /// <param name="map">The map.</param>
+ internal virtual void Add(ClassMap map)
+ {
+ SetMapDefaults(map);
+
+ var type = GetGenericCsvClassMapType(map.GetType()).GetGenericArguments().First();
+
+ data[type] = map;
+ }
+
+ /// <summary>
+ /// Removes the class map.
+ /// </summary>
+ /// <param name="classMapType">The class map type.</param>
+ internal virtual void Remove(Type classMapType)
+ {
+ if (!typeof(ClassMap).IsAssignableFrom(classMapType))
+ {
+ throw new ArgumentException("The class map type must inherit from CsvClassMap.");
+ }
+
+ var type = GetGenericCsvClassMapType(classMapType).GetGenericArguments().First();
+
+ data.Remove(type);
+ }
+
+ /// <summary>
+ /// Removes all maps.
+ /// </summary>
+ internal virtual void Clear()
+ {
+ data.Clear();
+ }
+
+ /// <summary>
+ /// Goes up the inheritance tree to find the type instance of CsvClassMap{}.
+ /// </summary>
+ /// <param name="type">The type to traverse.</param>
+ /// <returns>The type that is CsvClassMap{}.</returns>
+ private Type GetGenericCsvClassMapType(Type type)
+ {
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(ClassMap<>))
+ {
+ return type;
+ }
+
+ return GetGenericCsvClassMapType(type.GetTypeInfo().BaseType);
+ }
+
+ /// <summary>
+ /// Sets defaults for the mapping tree. The defaults used
+ /// to be set inside the classes, but this didn't allow for
+ /// the TypeConverter to be created from the Configuration's
+ /// TypeConverterFactory.
+ /// </summary>
+ /// <param name="map">The map to set defaults on.</param>
+ private void SetMapDefaults(ClassMap map)
+ {
+ foreach (var parameterMap in map.ParameterMaps)
+ {
+ if (parameterMap.ConstructorTypeMap != null)
+ {
+ SetMapDefaults(parameterMap.ConstructorTypeMap);
+ }
+ else if (parameterMap.ReferenceMap != null)
+ {
+ SetMapDefaults(parameterMap.ReferenceMap.Data.Mapping);
+ }
+ else
+ {
+ if (parameterMap.Data.TypeConverter == null)
+ {
+ parameterMap.Data.TypeConverter = context.TypeConverterCache.GetConverter(parameterMap.Data.Parameter.ParameterType);
+ }
+
+ if (parameterMap.Data.Names.Count == 0)
+ {
+ parameterMap.Data.Names.Add(parameterMap.Data.Parameter.Name);
+ }
+ }
+ }
+
+ foreach (var memberMap in map.MemberMaps)
+ {
+ if (memberMap.Data.Member == null)
+ {
+ continue;
+ }
+
+ if (memberMap.Data.TypeConverter == null && memberMap.Data.ReadingConvertExpression == null && memberMap.Data.WritingConvertExpression == null)
+ {
+ memberMap.Data.TypeConverter = context.TypeConverterCache.GetConverter(memberMap.Data.Member.MemberType());
+ }
+
+ if (memberMap.Data.Names.Count == 0)
+ {
+ memberMap.Data.Names.Add(memberMap.Data.Member.Name);
+ }
+ }
+
+ foreach (var referenceMap in map.ReferenceMaps)
+ {
+ SetMapDefaults(referenceMap.Data.Mapping);
+
+ if (context.Configuration.ReferenceHeaderPrefix != null)
+ {
+ var args = new ReferenceHeaderPrefixArgs(referenceMap.Data.Member.MemberType(), referenceMap.Data.Member.Name);
+ referenceMap.Data.Prefix = context.Configuration.ReferenceHeaderPrefix(args);
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap`1.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap`1.cs
new file mode 100644
index 0000000..d14c317
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMap`1.cs
@@ -0,0 +1,112 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Maps class members to CSV fields.
+ /// </summary>
+ /// <typeparam name="TClass">The <see cref="System.Type"/> of class to map.</typeparam>
+ public abstract class ClassMap<TClass> : ClassMap
+ {
+ /// <summary>
+ /// Creates an instance of <see cref="ClassMap{TClass}"/>.
+ /// </summary>
+ public ClassMap() : base(typeof(TClass)) { }
+
+ /// <summary>
+ /// Maps a member to a CSV field.
+ /// </summary>
+ /// <param name="expression">The member to map.</param>
+ /// <param name="useExistingMap">If true, an existing map will be used if available.
+ /// If false, a new map is created for the same member.</param>
+ /// <returns>The member mapping.</returns>
+ public virtual MemberMap<TClass, TMember> Map<TMember>(Expression<Func<TClass, TMember>> expression, bool useExistingMap = true)
+ {
+ var (classMap, member) = GetMemberMap(expression);
+ var memberMap = classMap.Map(typeof(TClass), member, useExistingMap); ;
+
+ return (MemberMap<TClass, TMember>)memberMap;
+ }
+
+ /// <summary>
+ /// Maps a member to a CSV field.
+ /// </summary>
+ /// <param name="expression">The member to map.</param>
+ /// <param name="useExistingMap">If true, an existing map will be used if available.
+ /// If false, a new map is created for the same member.</param>
+ /// <returns>The member mapping.</returns>
+ public virtual MemberMap Map<T>(Expression<Func<T, object>> expression, bool useExistingMap = true)
+ {
+ var (classMap, member) = GetMemberMap(expression);
+ var memberMap = classMap.Map(typeof(TClass), member, useExistingMap);
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// Meant for internal use only.
+ /// Maps a member to another class map. When this is used, accessing a property through
+ /// sub-property mapping later won't work. You can only use one or the other. When using
+ /// this, ConvertUsing will also not work.
+ /// </summary>
+ /// <typeparam name="TClassMap">The type of the class map.</typeparam>
+ /// <param name="expression">The expression.</param>
+ /// <param name="constructorArgs">Constructor arguments used to create the reference map.</param>
+ /// <returns>The reference mapping for the member.</returns>
+ public virtual MemberReferenceMap References<TClassMap>(Expression<Func<TClass, object>> expression, params object[] constructorArgs) where TClassMap : ClassMap
+ {
+ var member = ReflectionHelper.GetMember(expression);
+ return References(typeof(TClassMap), member, constructorArgs);
+ }
+
+ private (ClassMap, MemberInfo) GetMemberMap<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
+ {
+ var stack = ReflectionHelper.GetMembers(expression);
+ if (stack.Count == 0)
+ {
+ throw new InvalidOperationException($"No members were found in expression '{expression}'.");
+ }
+
+ ClassMap currentClassMap = this;
+ MemberInfo member;
+
+ if (stack.Count > 1)
+ {
+ // We need to add a reference map for every sub member.
+ while (stack.Count > 1)
+ {
+ member = stack.Pop();
+ Type mapType;
+ var property = member as PropertyInfo;
+ var field = member as FieldInfo;
+ if (property != null)
+ {
+ mapType = typeof(DefaultClassMap<>).MakeGenericType(property.PropertyType);
+ }
+ else if (field != null)
+ {
+ mapType = typeof(DefaultClassMap<>).MakeGenericType(field.FieldType);
+ }
+ else
+ {
+ throw new InvalidOperationException("The given expression was not a property or a field.");
+ }
+
+ var referenceMap = currentClassMap.References(mapType, member);
+ currentClassMap = referenceMap.Data.Mapping;
+ }
+ }
+
+ // Add the member map to the last reference map.
+ member = stack.Pop();
+
+ return (currentClassMap, member);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationException.cs
new file mode 100644
index 0000000..8a9bba1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationException.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Represents configuration errors that occur.
+ /// </summary>
+ [Serializable]
+ public class ConfigurationException : CsvHelperException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ConfigurationException"/> class.
+ /// </summary>
+ public ConfigurationException() { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ConfigurationException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ public ConfigurationException( string message ) : base( message ) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ConfigurationException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public ConfigurationException( string message, Exception innerException ) : base( message, innerException ) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationFunctions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationFunctions.cs
new file mode 100644
index 0000000..0cf7259
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ConfigurationFunctions.cs
@@ -0,0 +1,267 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Delegates;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Text.RegularExpressions;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>Holds the default callback methods for delegate members of <c>CsvHelper.Configuration.Configuration</c>.</summary>
+ public static class ConfigurationFunctions
+ {
+ private static readonly char[] lineEndingChars = new char[] { '\r', '\n' };
+
+ /// <summary>
+ /// Throws a <see cref="ValidationException"/> if <see name="HeaderValidatedArgs.InvalidHeaders"/> is not empty.
+ /// </summary>
+ public static void HeaderValidated(HeaderValidatedArgs args)
+ {
+ if (args.InvalidHeaders.Count() == 0)
+ {
+ return;
+ }
+
+ var errorMessage = new StringBuilder();
+ foreach (var invalidHeader in args.InvalidHeaders)
+ {
+ errorMessage.AppendLine($"Header with name '{string.Join("' or '", invalidHeader.Names)}'[{invalidHeader.Index}] was not found.");
+ }
+
+ if (args.Context.Reader.HeaderRecord != null)
+ {
+ foreach (var header in args.Context.Reader.HeaderRecord)
+ {
+ errorMessage.AppendLine($"Headers: '{string.Join("', '", args.Context.Reader.HeaderRecord)}'");
+ }
+ }
+
+ var messagePostfix =
+ $"If you are expecting some headers to be missing and want to ignore this validation, " +
+ $"set the configuration {nameof(HeaderValidated)} to null. You can also change the " +
+ $"functionality to do something else, like logging the issue.";
+ errorMessage.AppendLine(messagePostfix);
+
+ throw new HeaderValidationException(args.Context, args.InvalidHeaders, errorMessage.ToString());
+ }
+
+ /// <summary>
+ /// Throws a <c>MissingFieldException</c>.
+ /// </summary>
+ public static void MissingFieldFound(MissingFieldFoundArgs args)
+ {
+ var messagePostfix = $"You can ignore missing fields by setting {nameof(MissingFieldFound)} to null.";
+
+ // Get by index.
+
+ if (args.HeaderNames == null || args.HeaderNames.Length == 0)
+ {
+ throw new MissingFieldException(args.Context, $"Field at index '{args.Index}' does not exist. {messagePostfix}");
+ }
+
+ // Get by name.
+
+ var indexText = args.Index > 0 ? $" at field index '{args.Index}'" : string.Empty;
+
+ if (args.HeaderNames.Length == 1)
+ {
+ throw new MissingFieldException(args.Context, $"Field with name '{args.HeaderNames[0]}'{indexText} does not exist. {messagePostfix}");
+ }
+
+ throw new MissingFieldException(args.Context, $"Field containing names '{string.Join("' or '", args.HeaderNames)}'{indexText} does not exist. {messagePostfix}");
+ }
+
+ /// <summary>
+ /// Throws a <see cref="BadDataException"/>.
+ /// </summary>
+ public static void BadDataFound(BadDataFoundArgs args)
+ {
+ throw new BadDataException(args.Field, args.RawRecord, args.Context, $"You can ignore bad data by setting {nameof(BadDataFound)} to null.");
+ }
+
+ /// <summary>
+ /// Throws the given <see name="ReadingExceptionOccurredArgs.Exception"/>.
+ /// </summary>
+ public static bool ReadingExceptionOccurred(ReadingExceptionOccurredArgs args)
+ {
+ return true;
+ }
+
+ /// <summary>
+ /// Returns true if the field contains a <see cref="IWriterConfiguration.Quote"/>,
+ /// starts with a space, ends with a space, contains \r or \n, or contains
+ /// the <see cref="IWriterConfiguration.Delimiter"/>.
+ /// </summary>
+ /// <param name="args">The args.</param>
+ /// <returns><c>true</c> if the field should be quoted, otherwise <c>false</c>.</returns>
+ public static bool ShouldQuote(ShouldQuoteArgs args)
+ {
+ var config = args.Row.Configuration;
+
+ var shouldQuote = !string.IsNullOrEmpty(args.Field) &&
+ (
+ args.Field.Contains(config.Quote) // Contains quote
+ || args.Field[0] == ' ' // Starts with a space
+ || args.Field[args.Field.Length - 1] == ' ' // Ends with a space
+ || (config.Delimiter.Length > 0 && args.Field.Contains(config.Delimiter)) // Contains delimiter
+ || !config.IsNewLineSet && args.Field.IndexOfAny(lineEndingChars) > -1 // Contains line ending characters
+ || config.IsNewLineSet && args.Field.Contains(config.NewLine) // Contains newline
+ );
+
+ return shouldQuote;
+ }
+
+ /// <summary>
+ /// Returns the <see name="PrepareHeaderForMatchArgs.Header"/> as given.
+ /// </summary>
+ public static string PrepareHeaderForMatch(PrepareHeaderForMatchArgs args)
+ {
+ return args.Header;
+ }
+
+ /// <summary>
+ /// Returns <c>true</c> if <paramref name="args.ParameterType"/>:
+ /// 1. does not have a parameterless constructor
+ /// 2. has a constructor
+ /// 3. is not a value type
+ /// 4. is not a primitive
+ /// 5. is not an enum
+ /// 6. is not an interface
+ /// 7. TypeCode is an Object.
+ /// </summary>
+ public static bool ShouldUseConstructorParameters(ShouldUseConstructorParametersArgs args)
+ {
+ return !args.ParameterType.HasParameterlessConstructor()
+ && args.ParameterType.HasConstructor()
+ && !args.ParameterType.IsValueType
+ && !args.ParameterType.IsPrimitive
+ && !args.ParameterType.IsEnum
+ && !args.ParameterType.IsInterface
+ && Type.GetTypeCode(args.ParameterType) == TypeCode.Object;
+ }
+
+ /// <summary>
+ /// Returns the type's constructor with the most parameters.
+ /// If two constructors have the same number of parameters, then
+ /// there is no guarantee which one will be returned. If you have
+ /// that situation, you should probably implement this function yourself.
+ /// </summary>
+ public static ConstructorInfo GetConstructor(GetConstructorArgs args)
+ {
+ return args.ClassType.GetConstructorWithMostParameters();
+ }
+
+ /// <summary>
+ /// Returns the header name ran through <see cref="PrepareHeaderForMatch(PrepareHeaderForMatchArgs)"/>.
+ /// If no header exists, property names will be Field1, Field2, Field3, etc.
+ /// </summary>
+ /// <param name="args">The args.</param>
+ public static string GetDynamicPropertyName(GetDynamicPropertyNameArgs args)
+ {
+ if (args.Context.Reader.HeaderRecord == null)
+ {
+ return $"Field{args.FieldIndex + 1}";
+ }
+
+ var header = args.Context.Reader.HeaderRecord[args.FieldIndex];
+ var prepareHeaderForMatchArgs = new PrepareHeaderForMatchArgs(header, args.FieldIndex);
+ header = args.Context.Reader.Configuration.PrepareHeaderForMatch(prepareHeaderForMatchArgs);
+
+ return header;
+ }
+
+ /// <summary>
+ /// Detects the delimiter based on the given text.
+ /// Return the detected delimiter or null if one wasn't found.
+ /// </summary>
+ /// <param name="args">The args.</param>
+ public static string? GetDelimiter(GetDelimiterArgs args)
+ {
+ var text = args.Text;
+ var config = args.Configuration;
+
+ if (config.Mode == CsvMode.RFC4180)
+ {
+ // Remove text in between pairs of quotes.
+ text = Regex.Replace(text, $"{config.Quote}.*?{config.Quote}", string.Empty, RegexOptions.Singleline);
+ }
+ else if (config.Mode == CsvMode.Escape)
+ {
+ // Remove escaped characters.
+ text = Regex.Replace(text, $"({config.Escape}.)", string.Empty, RegexOptions.Singleline);
+ }
+
+ var newLine = config.NewLine;
+ if ((new[] { "\r\n", "\r", "\n" }).Contains(newLine))
+ {
+ newLine = "\r\n|\r|\n";
+ }
+
+ var lineDelimiterCounts = new List<Dictionary<string, int>>();
+ while (text.Length > 0)
+ {
+ // Since all escaped text has been removed, we can reliably read line by line.
+ var match = Regex.Match(text, newLine);
+ var line = match.Success ? text.Substring(0, match.Index + match.Length) : text;
+
+ var delimiterCounts = new Dictionary<string, int>();
+ foreach (var delimiter in config.DetectDelimiterValues)
+ {
+ // Escape regex special chars to use as regex pattern.
+ var pattern = Regex.Replace(delimiter, @"([.$^{\[(|)*+?\\])", "\\$1");
+ delimiterCounts[delimiter] = Regex.Matches(line, pattern).Count;
+ }
+
+ lineDelimiterCounts.Add(delimiterCounts);
+
+ text = match.Success ? text.Substring(match.Index + match.Length) : string.Empty;
+ }
+
+ if (lineDelimiterCounts.Count > 1)
+ {
+ // The last line isn't complete and can't be used to reliably detect a delimiter.
+ lineDelimiterCounts.Remove(lineDelimiterCounts.Last());
+ }
+
+ // Rank only the delimiters that appear on every line.
+ var delimiters =
+ (
+ from counts in lineDelimiterCounts
+ from count in counts
+ group count by count.Key into g
+ where g.All(x => x.Value > 0)
+ let sum = g.Sum(x => x.Value)
+ orderby sum descending
+ select new
+ {
+ Delimiter = g.Key,
+ Count = sum
+ }
+ ).ToList();
+
+ string? newDelimiter = null;
+ if (delimiters.Any(x => x.Delimiter == config.CultureInfo.TextInfo.ListSeparator) && lineDelimiterCounts.Count > 1)
+ {
+ // The culture's separator is on every line. Assume this is the delimiter.
+ newDelimiter = config.CultureInfo.TextInfo.ListSeparator;
+ }
+ else
+ {
+ // Choose the highest ranked delimiter.
+ newDelimiter = delimiters.Select(x => x.Delimiter).FirstOrDefault();
+ }
+
+ if (newDelimiter != null)
+ {
+ config.Validate();
+ }
+
+ return newDelimiter ?? config.Delimiter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/CsvConfiguration.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/CsvConfiguration.cs
new file mode 100644
index 0000000..51636a2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/CsvConfiguration.cs
@@ -0,0 +1,240 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Delegates;
+using CsvHelper.TypeConversion;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Configuration used for reading and writing CSV data.
+ /// </summary>
+ public record CsvConfiguration : IReaderConfiguration, IWriterConfiguration
+ {
+ private string newLine = "\r\n";
+
+ /// <inheritdoc/>
+ public virtual bool AllowComments { get; set; }
+
+ /// <inheritdoc/>
+ public virtual BadDataFound BadDataFound { get; set; } = ConfigurationFunctions.BadDataFound;
+
+ /// <inheritdoc/>
+ public virtual int BufferSize { get; set; } = 0x1000;
+
+ /// <inheritdoc/>
+ public virtual bool CacheFields { get; set; }
+
+ /// <inheritdoc/>
+ public virtual char Comment { get; set; } = '#';
+
+ /// <inheritdoc/>
+ public virtual bool CountBytes { get; set; }
+
+ /// <inheritdoc/>
+ public virtual CultureInfo CultureInfo { get; protected set; }
+
+ /// <inheritdoc/>
+ public virtual string Delimiter { get; set; }
+
+ /// <inheritdoc/>
+ public virtual bool DetectDelimiter { get; set; }
+
+ /// <inheritdoc/>
+ public virtual GetDelimiter GetDelimiter { get; set; } = ConfigurationFunctions.GetDelimiter;
+
+ /// <inheritdoc/>
+ public virtual string[] DetectDelimiterValues { get; set; } = new[] { ",", ";", "|", "\t" };
+
+ /// <inheritdoc/>
+ public virtual bool DetectColumnCountChanges { get; set; }
+
+ /// <inheritdoc/>
+ public virtual IComparer<string>? DynamicPropertySort { get; set; }
+
+ /// <inheritdoc/>
+ public virtual Encoding Encoding { get; set; } = Encoding.UTF8;
+
+ /// <inheritdoc/>
+ public virtual char Escape { get; set; } = '"';
+
+ /// <inheritdoc/>
+ public virtual bool ExceptionMessagesContainRawData { get; set; } = true;
+
+ /// <inheritdoc/>
+ public virtual GetConstructor GetConstructor { get; set; } = ConfigurationFunctions.GetConstructor;
+
+ /// <inheritdoc/>
+ public virtual GetDynamicPropertyName GetDynamicPropertyName { get; set; } = ConfigurationFunctions.GetDynamicPropertyName;
+
+ /// <inheritdoc/>
+ public virtual bool HasHeaderRecord { get; set; } = true;
+
+ /// <inheritdoc/>
+ public virtual HeaderValidated HeaderValidated { get; set; } = ConfigurationFunctions.HeaderValidated;
+
+ /// <inheritdoc/>
+ public virtual bool IgnoreBlankLines { get; set; } = true;
+
+ /// <inheritdoc/>
+ public virtual bool IgnoreReferences { get; set; }
+
+ /// <inheritdoc/>
+ public virtual bool IncludePrivateMembers { get; set; }
+
+ /// <inheritdoc/>
+ public virtual char[] InjectionCharacters { get; set; } = new[] { '=', '@', '+', '-', '\t', '\r' };
+
+ /// <inheritdoc/>
+ public virtual char InjectionEscapeCharacter { get; set; } = '\'';
+
+ /// <inheritdoc />
+ public virtual InjectionOptions InjectionOptions { get; set; }
+
+ /// <inheritdoc/>
+ public bool IsNewLineSet { get; private set; }
+
+ /// <inheritdoc/>
+ public virtual bool LineBreakInQuotedFieldIsBadData { get; set; }
+
+ /// <inheritdoc/>
+ public double MaxFieldSize { get; set; }
+
+ /// <inheritdoc/>
+ public virtual MemberTypes MemberTypes { get; set; } = MemberTypes.Properties;
+
+ /// <inheritdoc/>
+ public virtual MissingFieldFound MissingFieldFound { get; set; } = ConfigurationFunctions.MissingFieldFound;
+
+ /// <inheritdoc/>
+ public virtual CsvMode Mode { get; set; }
+
+ /// <inheritdoc/>
+ public virtual string NewLine
+ {
+ get => newLine;
+ set
+ {
+ IsNewLineSet = true;
+ newLine = value;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual PrepareHeaderForMatch PrepareHeaderForMatch { get; set; } = ConfigurationFunctions.PrepareHeaderForMatch;
+
+ /// <inheritdoc/>
+ public virtual int ProcessFieldBufferSize { get; set; } = 1024;
+
+ /// <inheritdoc/>
+ public virtual char Quote { get; set; } = '"';
+
+ /// <inheritdoc/>
+ public virtual ReadingExceptionOccurred ReadingExceptionOccurred { get; set; } = ConfigurationFunctions.ReadingExceptionOccurred;
+
+ /// <inheritdoc/>
+ public virtual ReferenceHeaderPrefix? ReferenceHeaderPrefix { get; set; }
+
+ /// <inheritdoc/>
+ public ShouldQuote ShouldQuote { get; set; } = ConfigurationFunctions.ShouldQuote;
+
+ /// <inheritdoc/>
+ public virtual ShouldSkipRecord? ShouldSkipRecord { get; set; }
+
+ /// <inheritdoc/>
+ public virtual ShouldUseConstructorParameters ShouldUseConstructorParameters { get; set; } = ConfigurationFunctions.ShouldUseConstructorParameters;
+
+ /// <inheritdoc/>
+ public virtual TrimOptions TrimOptions { get; set; }
+
+ /// <inheritdoc/>
+ public virtual bool UseNewObjectForNullReferenceMembers { get; set; } = true;
+
+ /// <inheritdoc/>
+ public virtual char[] WhiteSpaceChars { get; set; } = new char[] { ' ' };
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvConfiguration"/> class
+ /// using the given <see cref="System.Globalization.CultureInfo"/>. Since <see cref="Delimiter"/>
+ /// uses <see cref="CultureInfo"/> for it's default, the given <see cref="System.Globalization.CultureInfo"/>
+ /// will be used instead.
+ /// </summary>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <param name="attributesType">The type that contains the configuration attributes.
+ /// This will call <see cref="ApplyAttributes(Type)"/> automatically.</param>
+ public CsvConfiguration(CultureInfo cultureInfo, Type? attributesType = null)
+ {
+ CultureInfo = cultureInfo;
+ Delimiter = cultureInfo.TextInfo.ListSeparator;
+
+ if (attributesType != null)
+ {
+ ApplyAttributes(attributesType);
+ }
+ }
+
+ /// <summary>
+ /// Validates the configuration.
+ /// </summary>
+ public void Validate()
+ {
+ var escape = Escape.ToString();
+ var quote = Quote.ToString();
+ var lineEndings = new[] { "\r", "\n", "\r\n" };
+ var whiteSpaceChars = WhiteSpaceChars.Select(c => c.ToString()).ToArray();
+
+ // Escape
+ if (escape == Delimiter) throw new ConfigurationException($"The escape character '{Escape}' and delimiter '{Delimiter}' cannot be the same.");
+ if (escape == NewLine && IsNewLineSet) throw new ConfigurationException($"The escape character '{Escape}' and new line '{NewLine}' cannot be the same.");
+ if (lineEndings.Contains(Escape.ToString()) && !IsNewLineSet) throw new ConfigurationException($"The escape character '{Escape}' cannot be a line ending. ('\\r', '\\n', '\\r\\n')");
+ if (whiteSpaceChars.Contains(escape)) throw new ConfigurationException($"The escape character '{Escape}' cannot be a WhiteSpaceChar.");
+
+ // Quote
+ if (quote == Delimiter) throw new ConfigurationException($"The quote character '{Quote}' and the delimiter '{Delimiter}' cannot be the same.");
+ if (quote == NewLine && IsNewLineSet) throw new ConfigurationException($"The quote character '{Quote}' and new line '{NewLine}' cannot be the same.");
+ if (lineEndings.Contains(quote)) throw new ConfigurationException($"The quote character '{Quote}' cannot be a line ending. ('\\r', '\\n', '\\r\\n')");
+ if (whiteSpaceChars.Contains(quote)) throw new ConfigurationException($"The quote character '{Quote}' cannot be a WhiteSpaceChar.");
+
+ // Delimiter
+ if (Delimiter == NewLine && IsNewLineSet) throw new ConfigurationException($"The delimiter '{Delimiter}' and new line '{NewLine}' cannot be the same.");
+ if (lineEndings.Contains(Delimiter)) throw new ConfigurationException($"The delimiter '{Delimiter}' cannot be a line ending. ('\\r', '\\n', '\\r\\n')");
+ if (whiteSpaceChars.Contains(Delimiter)) throw new ConfigurationException($"The delimiter '{Delimiter}' cannot be a WhiteSpaceChar.");
+
+ // Detect Delimiter
+ if (DetectDelimiter && DetectDelimiterValues.Length == 0) throw new ConfigurationException($"At least one value is required for {nameof(DetectDelimiterValues)} when {nameof(DetectDelimiter)} is enabled.");
+ }
+
+ /// <summary>
+ /// Applies class level attribute to configuration.
+ /// </summary>
+ /// <typeparam name="T">Type with attributes.</typeparam>
+ public CsvConfiguration ApplyAttributes<T>()
+ {
+ return ApplyAttributes(typeof(T));
+ }
+
+ /// <summary>
+ /// Applies class level attribute to configuration.
+ /// </summary>
+ /// <param name="type">Type with attributes.</param>
+ public CsvConfiguration ApplyAttributes(Type type)
+ {
+ var attributes = type.GetCustomAttributes().OfType<IClassMapper>();
+ foreach (var attribute in attributes)
+ {
+ attribute.ApplyTo(this);
+ }
+
+ return this;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/DefaultClassMap`1.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/DefaultClassMap`1.cs
new file mode 100644
index 0000000..2e1b88b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/DefaultClassMap`1.cs
@@ -0,0 +1,15 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// A default <see cref="ClassMap{T}"/> that can be used
+ /// to create a class map dynamically.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public class DefaultClassMap<T> : ClassMap<T>
+ {
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IParserConfiguration.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IParserConfiguration.cs
new file mode 100644
index 0000000..dec8594
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IParserConfiguration.cs
@@ -0,0 +1,176 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Delegates;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Configuration used for the <see cref="IParser"/>.
+ /// </summary>
+ public interface IParserConfiguration
+ {
+ /// <summary>
+ /// Gets the culture info used to read an write CSV files.
+ /// </summary>
+ CultureInfo CultureInfo { get; }
+
+ /// <summary>
+ /// Cache fields that are created when parsing.
+ /// Default is false.
+ /// </summary>
+ bool CacheFields { get; }
+
+ /// <summary>
+ /// The newline string to use. Default is \r\n (CRLF).
+ /// When writing, this value is always used.
+ /// When reading, this value is only used if explicitly set.
+ /// If not set, the parser uses one of \r\n, \r, or \n.
+ /// </summary>
+ string NewLine { get; }
+
+ /// <summary>
+ /// A value indicating if <see cref="NewLine"/> was set.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if <see cref="NewLine"/> was set. <c>false</c> if <see cref="NewLine"/> is the default.
+ /// </value>
+ bool IsNewLineSet { get; }
+
+ /// <summary>
+ /// The mode.
+ /// See <see cref="CsvMode"/> for more details.
+ /// </summary>
+ CsvMode Mode { get; }
+
+ /// <summary>
+ /// Gets the size of the buffer
+ /// used for parsing and writing CSV files.
+ /// Default is 0x1000.
+ /// </summary>
+ int BufferSize { get; }
+
+ /// <summary>
+ /// The size of the buffer used when processing fields.
+ /// Default is 1024.
+ /// </summary>
+ int ProcessFieldBufferSize { get; }
+
+ /// <summary>
+ /// Gets a value indicating whether the number of bytes should
+ /// be counted while parsing. Default is false. This will slow down parsing
+ /// because it needs to get the byte count of every char for the given encoding.
+ /// The <see cref="Encoding"/> needs to be set correctly for this to be accurate.
+ /// </summary>
+ bool CountBytes { get; }
+
+ /// <summary>
+ /// Gets the encoding used when counting bytes.
+ /// </summary>
+ Encoding Encoding { get; }
+
+ /// <summary>
+ /// Gets the function that is called when bad field data is found. A field
+ /// has bad data if it contains a quote and the field is not quoted (escaped).
+ /// You can supply your own function to do other things like logging the issue
+ /// instead of throwing an exception.
+ /// </summary>
+ BadDataFound BadDataFound { get; }
+
+ /// <summary>
+ /// Gets or sets the maximum size of a field.
+ /// Defaults to 0, indicating maximum field size is not checked.
+ /// </summary>
+ double MaxFieldSize { get; }
+
+ /// <summary>
+ /// Gets a value indicating if a line break found in a quote field should
+ /// be considered bad data. <c>true</c> to consider a line break bad data, otherwise <c>false</c>.
+ /// Defaults to false.
+ /// </summary>
+ bool LineBreakInQuotedFieldIsBadData { get; }
+
+ /// <summary>
+ /// Gets the character used to denote
+ /// a line that is commented out. Default is '#'.
+ /// </summary>
+ char Comment { get; }
+
+ /// <summary>
+ /// Gets a value indicating if comments are allowed.
+ /// <c>true</c> to allow commented out lines, otherwise <c>false</c>.
+ /// </summary>
+ bool AllowComments { get; }
+
+ /// <summary>
+ /// Gets a value indicating if blank lines
+ /// should be ignored when reading.
+ /// <c>true</c> to ignore, otherwise <c>false</c>. Default is true.
+ /// </summary>
+ bool IgnoreBlankLines { get; }
+
+ /// <summary>
+ /// Gets the character used to quote fields.
+ /// Default is '"'.
+ /// </summary>
+ char Quote { get; }
+
+ /// <summary>
+ /// The delimiter used to separate fields.
+ /// Default is <see cref="TextInfo.ListSeparator"/>.
+ /// </summary>
+ string Delimiter { get; }
+
+ /// <summary>
+ /// Detect the delimiter instead of using the delimiter from configuration.
+ /// Default is <c>false</c>.
+ /// </summary>
+ bool DetectDelimiter { get; }
+
+ /// <summary>
+ /// Gets the function that is called when <see cref="DetectDelimiter"/> is enabled.
+ /// </summary>
+ GetDelimiter GetDelimiter { get; }
+
+ /// <summary>
+ /// The possible delimiter values used when detecting the delimiter.
+ /// Default is [",", ";", "|", "\t"].
+ /// </summary>
+ string[] DetectDelimiterValues { get; }
+
+ /// <summary>
+ /// The character used to escape characters.
+ /// Default is '"'.
+ /// </summary>
+ char Escape { get; }
+
+ /// <summary>
+ /// Gets the field trimming options.
+ /// </summary>
+ TrimOptions TrimOptions { get; }
+
+ /// <summary>
+ /// Characters considered whitespace.
+ /// Used when trimming fields.
+ /// Default is [' '].
+ /// </summary>
+ char[] WhiteSpaceChars { get; }
+
+ /// <summary>
+ /// A value indicating if exception messages contain raw CSV data.
+ /// <c>true</c> if exception contain raw CSV data, otherwise <c>false</c>.
+ /// Default is <c>true</c>.
+ /// </summary>
+ bool ExceptionMessagesContainRawData { get; }
+
+ /// <summary>
+ /// Validates the configuration.
+ /// </summary>
+ void Validate();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IReaderConfiguration.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IReaderConfiguration.cs
new file mode 100644
index 0000000..a1250e6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IReaderConfiguration.cs
@@ -0,0 +1,111 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.TypeConversion;
+using System.Reflection;
+using System.Collections.Generic;
+using System.IO;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Configuration used for the <see cref="IReader"/>.
+ /// </summary>
+ public interface IReaderConfiguration : IParserConfiguration
+ {
+ /// <summary>
+ /// Gets a value indicating if the
+ /// CSV file has a header record.
+ /// Default is true.
+ /// </summary>
+ bool HasHeaderRecord { get; }
+
+ /// <summary>
+ /// Gets the function that is called when a header validation check is ran. The default function
+ /// will throw a <see cref="ValidationException"/> if there is no header for a given member mapping.
+ /// You can supply your own function to do other things like logging the issue instead of throwing an exception.
+ /// </summary>
+ HeaderValidated HeaderValidated { get; }
+
+ /// <summary>
+ /// Gets the function that is called when a missing field is found. The default function will
+ /// throw a <see cref="MissingFieldException"/>. You can supply your own function to do other things
+ /// like logging the issue instead of throwing an exception.
+ /// </summary>
+ MissingFieldFound MissingFieldFound { get; }
+
+ /// <summary>
+ /// Gets the function that is called when a reading exception occurs.
+ /// The default function will re-throw the given exception. If you want to ignore
+ /// reading exceptions, you can supply your own function to do other things like
+ /// logging the issue.
+ /// </summary>
+ ReadingExceptionOccurred ReadingExceptionOccurred { get; }
+
+ /// <summary>
+ /// Prepares the header field for matching against a member name.
+ /// The header field and the member name are both ran through this function.
+ /// You should do things like trimming, removing whitespace, removing underscores,
+ /// and making casing changes to ignore case.
+ /// </summary>
+ PrepareHeaderForMatch PrepareHeaderForMatch { get; }
+
+ /// <summary>
+ /// Determines if constructor parameters should be used to create
+ /// the class instead of the default constructor and members.
+ /// </summary>
+ ShouldUseConstructorParameters ShouldUseConstructorParameters { get; }
+
+ /// <summary>
+ /// Chooses the constructor to use for constructor mapping.
+ /// </summary>
+ GetConstructor GetConstructor { get; }
+
+ /// <summary>
+ /// Gets the name to use for the property of the dynamic object.
+ /// </summary>
+ GetDynamicPropertyName GetDynamicPropertyName { get; }
+
+ /// <summary>
+ /// Gets a value indicating whether references
+ /// should be ignored when auto mapping. <c>true</c> to ignore
+ /// references, otherwise <c>false</c>. Default is false.
+ /// </summary>
+ bool IgnoreReferences { get; }
+
+ /// <summary>
+ /// Gets the callback that will be called to
+ /// determine whether to skip the given record or not.
+ /// </summary>
+ ShouldSkipRecord? ShouldSkipRecord { get; }
+
+ /// <summary>
+ /// Gets a value indicating if private
+ /// member should be read from and written to.
+ /// <c>true</c> to include private member, otherwise <c>false</c>. Default is false.
+ /// </summary>
+ bool IncludePrivateMembers { get; }
+
+ /// <summary>
+ /// Gets a callback that will return the prefix for a reference header.
+ /// </summary>
+ ReferenceHeaderPrefix ReferenceHeaderPrefix { get; }
+
+ /// <summary>
+ /// Gets a value indicating whether changes in the column
+ /// count should be detected. If true, a <see cref="BadDataException"/>
+ /// will be thrown if a different column count is detected.
+ /// </summary>
+ bool DetectColumnCountChanges { get; }
+
+ /// <summary>
+ /// Gets the member types that are used when auto mapping.
+ /// MemberTypes are flags, so you can choose more than one.
+ /// Default is Properties.
+ /// </summary>
+ MemberTypes MemberTypes { get; }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IWriterConfiguration.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IWriterConfiguration.cs
new file mode 100644
index 0000000..349c493
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/IWriterConfiguration.cs
@@ -0,0 +1,168 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.Collections.Generic;
+using System.IO;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Configuration used for the <see cref="IWriter"/>.
+ /// </summary>
+ public interface IWriterConfiguration
+ {
+ /// <summary>
+ /// Gets the size of the buffer
+ /// used for parsing and writing CSV files.
+ /// Default is 0x1000.
+ /// </summary>
+ int BufferSize { get; }
+
+ /// <summary>
+ /// The mode.
+ /// See <see cref="CsvMode"/> for more details.
+ /// </summary>
+ CsvMode Mode { get; }
+
+ /// <summary>
+ /// Gets the delimiter used to separate fields.
+ /// Default is ',';
+ /// </summary>
+ string Delimiter { get; }
+
+ /// <summary>
+ /// Gets the character used to quote fields.
+ /// Default is '"'.
+ /// </summary>
+ char Quote { get; }
+
+ /// <summary>
+ /// The character used to escape characters.
+ /// Default is '"'.
+ /// </summary>
+ char Escape { get; }
+
+ /// <summary>
+ /// Gets the field trimming options.
+ /// </summary>
+ TrimOptions TrimOptions { get; }
+
+ /// <summary>
+ /// Gets the injection options.
+ /// </summary>
+ InjectionOptions InjectionOptions { get; }
+
+ /// <summary>
+ /// Gets the characters that are used for injection attacks.
+ /// </summary>
+ char[] InjectionCharacters { get; }
+
+ /// <summary>
+ /// Gets the character used to escape a detected injection.
+ /// </summary>
+ char InjectionEscapeCharacter { get; }
+
+ /// <summary>
+ /// The newline string to use. Default is \r\n (CRLF).
+ /// When writing, this value is always used.
+ /// When reading, this value is only used if explicitly set. If not set,
+ /// the parser uses one of \r\n, \r, or \n.
+ /// </summary>
+ string NewLine { get; }
+
+ /// <summary>
+ /// A value indicating if <see cref="NewLine"/> was set.
+ /// </summary>
+ /// <value>
+ /// <c>true</c> if <see cref="NewLine"/> was set. <c>false</c> if <see cref="NewLine"/> is the default.
+ /// </value>
+ bool IsNewLineSet { get; }
+
+ /// <summary>
+ /// Gets a function that is used to determine if a field should get quoted
+ /// when writing.
+ /// </summary>
+ ShouldQuote ShouldQuote { get; }
+
+ /// <summary>
+ /// Gets the culture info used to read and write CSV files.
+ /// </summary>
+ CultureInfo CultureInfo { get; }
+
+ /// <summary>
+ /// Gets a value indicating if comments are allowed.
+ /// True to allow commented out lines, otherwise false.
+ /// </summary>
+ bool AllowComments { get; }
+
+ /// <summary>
+ /// Gets the character used to denote
+ /// a line that is commented out. Default is '#'.
+ /// </summary>
+ char Comment { get; }
+
+ /// <summary>
+ /// Gets a value indicating if the
+ /// CSV file has a header record.
+ /// Default is true.
+ /// </summary>
+ bool HasHeaderRecord { get; }
+
+ /// <summary>
+ /// Gets a value indicating whether references
+ /// should be ignored when auto mapping. True to ignore
+ /// references, otherwise false. Default is false.
+ /// </summary>
+ bool IgnoreReferences { get; }
+
+ /// <summary>
+ /// Gets a value indicating if private
+ /// member should be read from and written to.
+ /// True to include private member, otherwise false. Default is false.
+ /// </summary>
+ bool IncludePrivateMembers { get; }
+
+ /// <summary>
+ /// Gets a callback that will return the prefix for a reference header.
+ /// </summary>
+ ReferenceHeaderPrefix ReferenceHeaderPrefix { get; }
+
+ /// <summary>
+ /// Gets the member types that are used when auto mapping.
+ /// MemberTypes are flags, so you can choose more than one.
+ /// Default is Properties.
+ /// </summary>
+ MemberTypes MemberTypes { get; }
+
+ /// <summary>
+ /// Gets a value indicating that during writing if a new
+ /// object should be created when a reference member is null.
+ /// True to create a new object and use it's defaults for the
+ /// fields, or false to leave the fields empty for all the
+ /// reference member's member.
+ /// </summary>
+ bool UseNewObjectForNullReferenceMembers { get; }
+
+ /// <summary>
+ /// Gets the comparer used to order the properties
+ /// of dynamic objects when writing. The default is null,
+ /// which will preserve the order the object properties
+ /// were created with.
+ /// </summary>
+ IComparer<string> DynamicPropertySort { get; }
+
+ /// <summary>
+ /// A value indicating if exception messages contain raw CSV data.
+ /// <c>true</c> if exception contain raw CSV data, otherwise <c>false</c>.
+ /// Default is <c>true</c>.
+ /// </summary>
+ bool ExceptionMessagesContainRawData { get; }
+
+ /// <summary>
+ /// Validates the configuration.
+ /// </summary>
+ void Validate();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/InjectionOptions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/InjectionOptions.cs
new file mode 100644
index 0000000..a7dc20e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/InjectionOptions.cs
@@ -0,0 +1,31 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Options for handling injection attacks.
+ /// </summary>
+ public enum InjectionOptions
+ {
+ /// <summary>
+ /// No injection protection.
+ /// </summary>
+ None = 0,
+ /// <summary>
+ /// Escape injection characters.
+ /// </summary>
+ Escape,
+ /// <summary>
+ /// Strip injection characters.
+ /// </summary>
+ Strip,
+ /// <summary>
+ /// Throw an exception if injection characters are detected.
+ /// </summary>
+ Exception,
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap.cs
new file mode 100644
index 0000000..006595d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap.cs
@@ -0,0 +1,244 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections;
+using System.Diagnostics;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Mapping info for a member to a CSV field.
+ /// </summary>
+ [DebuggerDisplay("Member = {Data.Member}, Names = {string.Join(\",\", Data.Names)}, Index = {Data.Index}, Ignore = {Data.Ignore}, Member = {Data.Member}, TypeConverter = {Data.TypeConverter}")]
+ public abstract class MemberMap
+ {
+ /// <summary>
+ /// Gets the member map data.
+ /// </summary>
+ public virtual MemberMapData Data { get; protected set; }
+
+ /// <summary>
+ /// Type converter options.
+ /// </summary>
+ public virtual MemberMapTypeConverterOption TypeConverterOption { get; protected set; }
+
+ /// <summary>
+ /// Creates an instance of <see cref="MemberMap"/> using the given Type and <see cref="MemberInfo"/>.
+ /// </summary>
+ /// <param name="classType">Type of the class the member being mapped belongs to.</param>
+ /// <param name="member">The member being mapped.</param>
+ public static MemberMap CreateGeneric(Type classType, MemberInfo member)
+ {
+ var memberMapType = typeof(MemberMap<,>).MakeGenericType(classType, member.MemberType());
+ var memberMap = (MemberMap)ObjectResolver.Current.Resolve(memberMapType, member);
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ /// <param name="names">The possible names of the CSV field.</param>
+ public virtual MemberMap Name(params string[] names)
+ {
+ if (names == null || names.Length == 0)
+ {
+ throw new ArgumentNullException(nameof(names));
+ }
+
+ Data.Names.Clear();
+ Data.Names.AddRange(names);
+ Data.IsNameSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the
+ /// index of the name used when there
+ /// are multiple names that are the same.
+ /// </summary>
+ /// <param name="index">The index of the name.</param>
+ public virtual MemberMap NameIndex(int index)
+ {
+ Data.NameIndex = index;
+
+ return this;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field at
+ /// the given index. When writing, the fields
+ /// will be written in the order of the field
+ /// indexes.
+ /// </summary>
+ /// <param name="index">The index of the CSV field.</param>
+ /// <param name="indexEnd">The end index used when mapping to an <see cref="IEnumerable"/> member.</param>
+ public virtual MemberMap Index(int index, int indexEnd = -1)
+ {
+ Data.Index = index;
+ Data.IsIndexSet = true;
+ Data.IndexEnd = indexEnd;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the member when reading and writing.
+ /// If this member has already been mapped as a reference
+ /// member, either by a class map, or by automapping, calling
+ /// this method will not ignore all the child members down the
+ /// tree that have already been mapped.
+ /// </summary>
+ public virtual MemberMap Ignore()
+ {
+ Data.Ignore = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the member when reading and writing.
+ /// If this member has already been mapped as a reference
+ /// member, either by a class map, or by automapping, calling
+ /// this method will not ignore all the child members down the
+ /// tree that have already been mapped.
+ /// </summary>
+ /// <param name="ignore">True to ignore, otherwise false.</param>
+ public virtual MemberMap Ignore(bool ignore)
+ {
+ Data.Ignore = ignore;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty.
+ /// </summary>
+ /// <param name="defaultValue">The default value.</param>
+ /// <param name="useOnConversionFailure">Use default on conversion failure.</param>
+ public virtual MemberMap Default(object? defaultValue, bool useOnConversionFailure = false)
+ {
+ if (defaultValue == null && Data.Member.MemberType().IsValueType)
+ {
+ throw new ArgumentException($"Member of type '{Data.Member.MemberType().FullName}' can't have a default value of null.");
+ }
+
+ if (defaultValue != null && !Data.Member.MemberType().IsAssignableFrom(defaultValue.GetType()))
+ {
+ throw new ArgumentException($"Default of type '{defaultValue.GetType().FullName}' is not assignable to '{Data.Member.MemberType().FullName}'.");
+ }
+
+ Data.Default = defaultValue;
+ Data.IsDefaultSet = true;
+ Data.UseDefaultOnConversionFailure = useOnConversionFailure;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The constant value that will be used for every record when
+ /// reading and writing. This value will always be used no matter
+ /// what other mapping configurations are specified.
+ /// </summary>
+ /// <param name="constantValue">The constant value.</param>
+ public virtual MemberMap Constant(object constantValue)
+ {
+ if (constantValue == null && Data.Member.MemberType().IsValueType)
+ {
+ throw new ArgumentException($"Member of type '{Data.Member.MemberType().FullName}' can't have a constant value of null.");
+ }
+
+ if (constantValue != null && !Data.Member.MemberType().IsAssignableFrom(constantValue.GetType()))
+ {
+ throw new ArgumentException($"Constant of type '{constantValue.GetType().FullName}' is not assignable to '{Data.Member.MemberType().FullName}'.");
+ }
+
+ Data.Constant = constantValue;
+ Data.IsConstantSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <param name="typeConverter">The TypeConverter to use.</param>
+ public virtual MemberMap TypeConverter(ITypeConverter typeConverter)
+ {
+ Data.TypeConverter = typeConverter;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <typeparam name="TConverter">The <see cref="System.Type"/> of the
+ /// <see cref="TypeConverter"/> to use.</typeparam>
+ public virtual MemberMap TypeConverter<TConverter>() where TConverter : ITypeConverter
+ {
+ TypeConverter(ObjectResolver.Current.Resolve<TConverter>());
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the member when reading if no matching field name can be found.
+ /// </summary>
+ public virtual MemberMap Optional()
+ {
+ Data.IsOptional = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies an expression to be used to validate a field when reading.
+ /// </summary>
+ /// <param name="validateExpression"></param>
+ public virtual MemberMap Validate(Validate validateExpression)
+ {
+ return Validate(validateExpression, args => $"Field '{args.Field}' is not valid.");
+ }
+
+ /// <summary>
+ /// Specifies an expression to be used to validate a field when reading along with specified exception message.
+ /// </summary>
+ /// <param name="validateExpression"></param>
+ /// <param name="validateMessageExpression"></param>
+ public virtual MemberMap Validate(Validate validateExpression, ValidateMessage validateMessageExpression)
+ {
+ var fieldParameter = Expression.Parameter(typeof(ValidateArgs), "field");
+ var validateCallExpression = Expression.Call(
+ Expression.Constant(validateExpression.Target),
+ validateExpression.Method,
+ fieldParameter
+ );
+ var messageCallExpression = Expression.Call(
+ Expression.Constant(validateMessageExpression.Target),
+ validateMessageExpression.Method,
+ fieldParameter
+ );
+
+ Data.ValidateExpression = Expression.Lambda<Validate>(validateCallExpression, fieldParameter);
+ Data.ValidateMessageExpression = Expression.Lambda<ValidateMessage>(messageCallExpression, fieldParameter);
+
+ return this;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapCollection.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapCollection.cs
new file mode 100644
index 0000000..0532544
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapCollection.cs
@@ -0,0 +1,247 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// A collection that holds <see cref="MemberMap"/>'s.
+ /// </summary>
+ [DebuggerDisplay("Count = {list.Count}")]
+ public class MemberMapCollection : IList<MemberMap>
+ {
+ private readonly List<MemberMap> list = new List<MemberMap>();
+ private readonly IComparer<MemberMap> comparer;
+
+ /// <summary>
+ /// Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </summary>
+ /// <returns>
+ /// The number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </returns>
+ public virtual int Count => list.Count;
+
+ /// <summary>
+ /// Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
+ /// </summary>
+ /// <returns>
+ /// true if the <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only; otherwise, false.
+ /// </returns>
+ public virtual bool IsReadOnly => false;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MemberMapCollection"/> class.
+ /// </summary>
+ public MemberMapCollection() : this(new MemberMapComparer()) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MemberMapCollection"/> class.
+ /// </summary>
+ /// <param name="comparer">The comparer to use when sorting the member maps.</param>
+ public MemberMapCollection(IComparer<MemberMap> comparer)
+ {
+ this.comparer = comparer;
+ }
+
+ /// <summary>
+ /// Returns an enumerator that iterates through the collection.
+ /// </summary>
+ /// <returns>
+ /// A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
+ /// </returns>
+ /// <filterpriority>1</filterpriority>
+ public virtual IEnumerator<MemberMap> GetEnumerator()
+ {
+ return list.GetEnumerator();
+ }
+
+ /// <summary>
+ /// Returns an enumerator that iterates through a collection.
+ /// </summary>
+ /// <returns>
+ /// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
+ /// </returns>
+ /// <filterpriority>2</filterpriority>
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ /// <summary>
+ /// Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </summary>
+ /// <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </param><exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
+ /// </exception>
+ public virtual void Add(MemberMap item)
+ {
+ list.Add(item);
+ list.Sort(comparer);
+ }
+
+ /// <summary>
+ /// Adds a range of items to the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </summary>
+ /// <param name="collection">The collection to add.</param>
+ public virtual void AddRange(ICollection<MemberMap> collection)
+ {
+ list.AddRange(collection);
+ list.Sort(comparer);
+ }
+
+ /// <summary>
+ /// Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </summary>
+ /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
+ /// </exception>
+ public virtual void Clear()
+ {
+ list.Clear();
+ }
+
+ /// <summary>
+ /// Determines whether the <see cref="T:System.Collections.Generic.ICollection`1"/> contains a specific value.
+ /// </summary>
+ /// <returns>
+ /// true if <paramref name="item"/> is found in the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false.
+ /// </returns>
+ /// <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </param>
+ public virtual bool Contains(MemberMap item)
+ {
+ return list.Contains(item);
+ }
+
+ /// <summary>
+ /// Copies the elements of the <see cref="T:System.Collections.Generic.ICollection`1"/> to an <see cref="T:System.Array"/>, starting at a particular <see cref="T:System.Array"/> index.
+ /// </summary>
+ /// <param name="array">The one-dimensional <see cref="T:System.Array"/> that is the destination of the elements copied from <see cref="T:System.Collections.Generic.ICollection`1"/>. The <see cref="T:System.Array"/> must have zero-based indexing.</param><param name="arrayIndex">The zero-based index in <paramref name="array"/> at which copying begins.</param><exception cref="T:System.ArgumentNullException"><paramref name="array"/> is null.</exception><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="arrayIndex"/> is less than 0.</exception><exception cref="T:System.ArgumentException">The number of elements in the source <see cref="T:System.Collections.Generic.ICollection`1"/> is greater than the available space from <paramref name="arrayIndex"/> to the end of the destination <paramref name="array"/>.</exception>
+ public virtual void CopyTo(MemberMap[] array, int arrayIndex)
+ {
+ list.CopyTo(array, arrayIndex);
+ }
+
+ /// <summary>
+ /// Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </summary>
+ /// <returns>
+ /// true if <paramref name="item"/> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1"/>; otherwise, false. This method also returns false if <paramref name="item"/> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </returns>
+ /// <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1"/>.
+ /// </param><exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1"/> is read-only.
+ /// </exception>
+ public virtual bool Remove(MemberMap item)
+ {
+ return list.Remove(item);
+ }
+
+ /// <summary>
+ /// Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1"/>.
+ /// </summary>
+ /// <returns>
+ /// The index of <paramref name="item"/> if found in the list; otherwise, -1.
+ /// </returns>
+ /// <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1"/>.
+ /// </param>
+ public virtual int IndexOf(MemberMap item)
+ {
+ return list.IndexOf(item);
+ }
+
+ /// <summary>
+ /// Inserts an item to the <see cref="T:System.Collections.Generic.IList`1"/> at the specified index.
+ /// </summary>
+ /// <param name="index">The zero-based index at which <paramref name="item"/> should be inserted.
+ /// </param><param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1"/>.
+ /// </param><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
+ /// </exception><exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
+ /// </exception>
+ public virtual void Insert(int index, MemberMap item)
+ {
+ list.Insert(index, item);
+ }
+
+ /// <summary>
+ /// Removes the <see cref="T:System.Collections.Generic.IList`1"/> item at the specified index.
+ /// </summary>
+ /// <param name="index">The zero-based index of the item to remove.
+ /// </param><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
+ /// </exception><exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
+ /// </exception>
+ public virtual void RemoveAt(int index)
+ {
+ list.RemoveAt(index);
+ }
+
+ /// <summary>
+ /// Gets or sets the element at the specified index.
+ /// </summary>
+ /// <returns>
+ /// The element at the specified index.
+ /// </returns>
+ /// <param name="index">The zero-based index of the element to get or set.
+ /// </param><exception cref="T:System.ArgumentOutOfRangeException"><paramref name="index"/> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1"/>.
+ /// </exception><exception cref="T:System.NotSupportedException">The member is set and the <see cref="T:System.Collections.Generic.IList`1"/> is read-only.
+ /// </exception>
+ public virtual MemberMap this[int index]
+ {
+ get { return list[index]; }
+ set { list[index] = value; }
+ }
+
+ /// <summary>
+ /// Finds the <see cref="MemberMap"/> using the given member expression.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="System.Type"/> the member is on.</typeparam>
+ /// <param name="expression">The member expression.</param>
+ /// <returns>The <see cref="MemberMap"/> for the given expression, or null if not found.</returns>
+ public virtual MemberMap? Find<T>(Expression<Func<T, object>> expression)
+ {
+ var member = ReflectionHelper.GetMember(expression);
+ return Find(member);
+ }
+
+ /// <summary>
+ /// Finds the <see cref="MemberMap"/> using the given member.
+ /// </summary>
+ /// <param name="member">The member.</param>
+ /// <returns>The <see cref="MemberMap"/> for the given expression, or null if not found.</returns>
+ public virtual MemberMap? Find(MemberInfo member)
+ {
+ var existingMap = list.SingleOrDefault(m =>
+ m.Data.Member == member ||
+ m.Data.Member != null &&
+ m.Data.Member.Name == member.Name &&
+ (
+ m.Data.Member.DeclaringType.IsAssignableFrom(member.DeclaringType) ||
+ member.DeclaringType.IsAssignableFrom(m.Data.Member.DeclaringType)
+ )
+ );
+
+ return existingMap;
+ }
+
+ /// <summary>
+ /// Adds the members from the mapping. This will recursively
+ /// traverse the mapping tree and add all members for
+ /// reference maps.
+ /// </summary>
+ /// <param name="mapping">The mapping where the members are added from.</param>
+ public virtual void AddMembers(ClassMap mapping)
+ {
+ AddRange(mapping.MemberMaps);
+ foreach (var refmap in mapping.ReferenceMaps)
+ {
+ AddMembers(refmap.Data.Mapping);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapComparer.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapComparer.cs
new file mode 100644
index 0000000..84cdf6c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapComparer.cs
@@ -0,0 +1,74 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Used to compare <see cref="MemberMap"/>s.
+ /// The order is by field index ascending. Any
+ /// fields that don't have an index are pushed
+ /// to the bottom.
+ /// </summary>
+ internal class MemberMapComparer : IComparer<MemberMap>
+ {
+ /// <summary>
+ /// Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
+ /// </summary>
+ /// <returns>
+ /// Value
+ /// Condition
+ /// Less than zero
+ /// <paramref name="x"/> is less than <paramref name="y"/>.
+ /// Zero
+ /// <paramref name="x"/> equals <paramref name="y"/>.
+ /// Greater than zero
+ /// <paramref name="x"/> is greater than <paramref name="y"/>.
+ /// </returns>
+ /// <param name="x">The first object to compare.
+ /// </param><param name="y">The second object to compare.
+ /// </param><exception cref="T:System.ArgumentException">Neither <paramref name="x"/> nor <paramref name="y"/> implements the <see cref="T:System.IComparable"/> interface.
+ /// -or-
+ /// <paramref name="x"/> and <paramref name="y"/> are of different types and neither one can handle comparisons with the other.
+ /// </exception><filterpriority>2</filterpriority>
+ public virtual int Compare( object x, object y )
+ {
+ var xMember = x as MemberMap;
+ var yMember = y as MemberMap;
+ return Compare( xMember, yMember );
+ }
+
+ /// <summary>
+ /// Compares two objects and returns a value indicating whether one is less than, equal to, or greater than the other.
+ /// </summary>
+ /// <returns>
+ /// Value
+ /// Condition
+ /// Less than zero
+ /// <paramref name="x"/> is less than <paramref name="y"/>.
+ /// Zero
+ /// <paramref name="x"/> equals <paramref name="y"/>.
+ /// Greater than zero
+ /// <paramref name="x"/> is greater than <paramref name="y"/>.
+ /// </returns>
+ /// <param name="x">The first object to compare.
+ /// </param><param name="y">The second object to compare.
+ /// </param>
+ public virtual int Compare( MemberMap x, MemberMap y )
+ {
+ if( x == null )
+ {
+ throw new ArgumentNullException( nameof( x ) );
+ }
+ if( y == null )
+ {
+ throw new ArgumentNullException( nameof( y ) );
+ }
+
+ return x.Data.Index.CompareTo( y.Data.Index );
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapData.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapData.cs
new file mode 100644
index 0000000..07d696a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapData.cs
@@ -0,0 +1,167 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Reflection;
+using CsvHelper.TypeConversion;
+using System.Linq.Expressions;
+using System;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// The configured data for the member map.
+ /// </summary>
+ public class MemberMapData
+ {
+ /// <summary>
+ /// Gets the member type.
+ /// </summary>
+ public virtual Type Type
+ {
+ get
+ {
+ if (Member != null)
+ {
+ return Member.MemberType();
+ }
+
+ if (IsConstantSet)
+ {
+ return Constant?.GetType() ?? typeof(string);
+ }
+
+ if (IsDefaultSet)
+ {
+ return Default?.GetType() ?? typeof(string);
+ }
+
+ return typeof(string);
+ }
+ }
+
+ /// <summary>
+ /// Gets the <see cref="MemberInfo"/> that the data
+ /// is associated with.
+ /// </summary>
+ public virtual MemberInfo? Member { get; private set; }
+
+ /// <summary>
+ /// Gets the list of column names.
+ /// </summary>
+ public virtual MemberNameCollection Names { get; } = new MemberNameCollection();
+
+ /// <summary>
+ /// Gets or sets the index of the name.
+ /// This is used if there are multiple
+ /// columns with the same names.
+ /// </summary>
+ public virtual int NameIndex { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating if the name was
+ /// explicitly set. True if it was explicitly set,
+ /// otherwise false.
+ /// </summary>
+ public virtual bool IsNameSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the column index.
+ /// </summary>
+ public virtual int Index { get; set; } = -1;
+
+ /// <summary>
+ /// Gets or sets the index end. The Index end is used to specify a range for use
+ /// with a collection member. Index is used as the start of the range, and IndexEnd
+ /// is the end of the range.
+ /// </summary>
+ public virtual int IndexEnd { get; set; } = -1;
+
+ /// <summary>
+ /// Gets or sets a value indicating if the index was
+ /// explicitly set. True if it was explicitly set,
+ /// otherwise false.
+ /// </summary>
+ public virtual bool IsIndexSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the type converter.
+ /// </summary>
+ public virtual ITypeConverter? TypeConverter { get; set; }
+
+ /// <summary>
+ /// Gets or sets the type converter options.
+ /// </summary>
+ public virtual TypeConverterOptions TypeConverterOptions { get; set; } = new TypeConverterOptions();
+
+ /// <summary>
+ /// Gets or sets a value indicating whether the field should be ignored.
+ /// </summary>
+ public virtual bool Ignore { get; set; }
+
+ /// <summary>
+ /// Gets or sets the default value used when a CSV field is empty.
+ /// </summary>
+ public virtual object? Default { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is default value set.
+ /// the default value was explicitly set. True if it was
+ /// explicitly set, otherwise false.
+ /// </summary>
+ public virtual bool IsDefaultSet { get; set; }
+
+ /// <summary>
+ /// Gets or setse a value indicating if the default value should be used when
+ /// a type conversion failure happens. <c>true</c> to use the default, otherwise
+ /// <c>false</c>.
+ /// </summary>
+ public virtual bool UseDefaultOnConversionFailure { get; set; }
+
+ /// <summary>
+ /// Gets or sets the constant value used for every record.
+ /// </summary>
+ public virtual object? Constant { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating if a constant was explicitly set.
+ /// </summary>
+ public virtual bool IsConstantSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the expression used to convert data in the
+ /// row to the member.
+ /// </summary>
+ public virtual Expression ReadingConvertExpression { get; set; }
+
+ /// <summary>
+ /// Gets or sets the expression to be used to convert the object
+ /// to a field.
+ /// </summary>
+ public virtual Expression WritingConvertExpression { get; set; }
+
+ /// <summary>
+ /// Gets or sets the expression use to validate a field.
+ /// </summary>
+ public virtual Expression ValidateExpression { get; set; }
+
+ /// <summary>
+ /// Gets or sets the expression used to get the validation message when validation fails.
+ /// </summary>
+ public virtual Expression ValidateMessageExpression { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating if a field is optional.
+ /// </summary>
+ public virtual bool IsOptional { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MemberMapData"/> class.
+ /// </summary>
+ /// <param name="member">The member.</param>
+ public MemberMapData(MemberInfo? member)
+ {
+ Member = member;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapTypeConverterOption.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapTypeConverterOption.cs
new file mode 100644
index 0000000..bafad45
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMapTypeConverterOption.cs
@@ -0,0 +1,167 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Sets type converter options on a member map.
+ /// </summary>
+ public class MemberMapTypeConverterOption
+ {
+ private readonly MemberMap memberMap;
+
+ /// <summary>
+ /// Creates a new instance using the given <see cref="MemberMap"/>.
+ /// </summary>
+ /// <param name="memberMap">The member map the options are being applied to.</param>
+ public MemberMapTypeConverterOption(MemberMap memberMap)
+ {
+ this.memberMap = memberMap;
+ }
+
+ /// <summary>
+ /// The <see cref="CultureInfo"/> used when type converting.
+ /// This will override the global <see cref="CsvConfiguration.CultureInfo"/>
+ /// setting.
+ /// </summary>
+ /// <param name="cultureInfo">The culture info.</param>
+ public virtual MemberMap CultureInfo(CultureInfo cultureInfo)
+ {
+ memberMap.Data.TypeConverterOptions.CultureInfo = cultureInfo;
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The <see cref="DateTimeStyles"/> to use when type converting.
+ /// This is used when doing any <see cref="DateTime"/> conversions.
+ /// </summary>
+ /// <param name="dateTimeStyle">The date time style.</param>
+ public virtual MemberMap DateTimeStyles(DateTimeStyles dateTimeStyle)
+ {
+ memberMap.Data.TypeConverterOptions.DateTimeStyle = dateTimeStyle;
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The <see cref="TimeSpanStyles"/> to use when type converting.
+ /// This is used when doing <see cref="TimeSpan"/> converting.
+ /// </summary>
+ /// <param name="timeSpanStyles">The time span styles.</param>
+ public virtual MemberMap TimespanStyles(TimeSpanStyles timeSpanStyles)
+ {
+ memberMap.Data.TypeConverterOptions.TimeSpanStyle = timeSpanStyles;
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The <see cref="NumberStyles"/> to use when type converting.
+ /// This is used when doing any number conversions.
+ /// </summary>
+ /// <param name="numberStyle"></param>
+ public virtual MemberMap NumberStyles(NumberStyles numberStyle)
+ {
+ memberMap.Data.TypeConverterOptions.NumberStyles = numberStyle;
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The string format to be used when type converting.
+ /// </summary>
+ /// <param name="formats">The format.</param>
+ public virtual MemberMap Format(params string[] formats)
+ {
+ memberMap.Data.TypeConverterOptions.Formats = formats;
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The <see cref="UriKind"/> to use when converting.
+ /// This is used when doing <see cref="Uri"/> conversions.
+ /// </summary>
+ /// <param name="uriKind">Kind of the URI.</param>
+ public virtual MemberMap UriKind(UriKind uriKind)
+ {
+ memberMap.Data.TypeConverterOptions.UriKind = uriKind;
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The string values used to represent a boolean when converting.
+ /// </summary>
+ /// <param name="isTrue">A value indicating whether true values or false values are being set.</param>
+ /// <param name="clearValues">A value indication if the current values should be cleared before adding the new ones.</param>
+ /// <param name="booleanValues">The string boolean values.</param>
+ public virtual MemberMap BooleanValues(bool isTrue, bool clearValues = true, params string[] booleanValues)
+ {
+ if (isTrue)
+ {
+ if (clearValues)
+ {
+ memberMap.Data.TypeConverterOptions.BooleanTrueValues.Clear();
+ }
+
+ memberMap.Data.TypeConverterOptions.BooleanTrueValues.AddRange(booleanValues);
+ }
+ else
+ {
+ if (clearValues)
+ {
+ memberMap.Data.TypeConverterOptions.BooleanFalseValues.Clear();
+ }
+
+ memberMap.Data.TypeConverterOptions.BooleanFalseValues.AddRange(booleanValues);
+ }
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ /// <param name="nullValues">The values that represent null.</param>
+ /// <returns></returns>
+ public virtual MemberMap NullValues(params string[] nullValues)
+ {
+ return NullValues(true, nullValues);
+ }
+
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ /// <param name="clearValues">A value indication if the current values should be cleared before adding the new ones.</param>
+ /// <param name="nullValues">The values that represent null.</param>
+ /// <returns></returns>
+ public virtual MemberMap NullValues(bool clearValues, params string[] nullValues)
+ {
+ if (clearValues)
+ {
+ memberMap.Data.TypeConverterOptions.NullValues.Clear();
+ }
+
+ memberMap.Data.TypeConverterOptions.NullValues.AddRange(nullValues);
+
+ return memberMap;
+ }
+
+ /// <summary>
+ /// Ignore case when parsing enums.
+ /// </summary>
+ /// <param name="ignoreCase"><c>true</c> to ignore case, otherwise <c>false</c>.</param>
+ public virtual MemberMap EnumIgnoreCase(bool ignoreCase = true)
+ {
+ memberMap.Data.TypeConverterOptions.EnumIgnoreCase = ignoreCase;
+
+ return memberMap;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap`1.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap`1.cs
new file mode 100644
index 0000000..590f05a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberMap`1.cs
@@ -0,0 +1,270 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Mapping info for a member to a CSV field.
+ /// </summary>
+ public class MemberMap<TClass, TMember> : MemberMap
+ {
+ /// <summary>
+ /// Creates a new <see cref="MemberMap"/> instance using the specified member.
+ /// </summary>
+ public MemberMap(MemberInfo? member)
+ {
+ TypeConverterOption = new MemberMapTypeConverterOption(this);
+
+ Data = new MemberMapData(member);
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ /// <param name="names">The possible names of the CSV field.</param>
+ public new virtual MemberMap<TClass, TMember> Name(params string[] names)
+ {
+ if (names == null || names.Length == 0)
+ {
+ throw new ArgumentNullException(nameof(names));
+ }
+
+ Data.Names.Clear();
+ Data.Names.AddRange(names);
+ Data.IsNameSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the
+ /// index of the name used when there
+ /// are multiple names that are the same.
+ /// </summary>
+ /// <param name="index">The index of the name.</param>
+ public new virtual MemberMap<TClass, TMember> NameIndex(int index)
+ {
+ Data.NameIndex = index;
+
+ return this;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field at
+ /// the given index. When writing, the fields
+ /// will be written in the order of the field
+ /// indexes.
+ /// </summary>
+ /// <param name="index">The index of the CSV field.</param>
+ /// <param name="indexEnd">The end index used when mapping to an <see cref="IEnumerable"/> member.</param>
+ public new virtual MemberMap<TClass, TMember> Index(int index, int indexEnd = -1)
+ {
+ Data.Index = index;
+ Data.IsIndexSet = true;
+ Data.IndexEnd = indexEnd;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the member when reading and writing.
+ /// If this member has already been mapped as a reference
+ /// member, either by a class map, or by automapping, calling
+ /// this method will not ignore all the child members down the
+ /// tree that have already been mapped.
+ /// </summary>
+ public new virtual MemberMap<TClass, TMember> Ignore()
+ {
+ Data.Ignore = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the member when reading and writing.
+ /// If this member has already been mapped as a reference
+ /// member, either by a class map, or by automapping, calling
+ /// this method will not ignore all the child members down the
+ /// tree that have already been mapped.
+ /// </summary>
+ /// <param name="ignore">True to ignore, otherwise false.</param>
+ public new virtual MemberMap<TClass, TMember> Ignore(bool ignore)
+ {
+ Data.Ignore = ignore;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty.
+ /// </summary>
+ /// <param name="defaultValue">The default value.</param>
+ /// <param name="useOnConversionFailure">Use default on conversion failure.</param>
+ public virtual MemberMap<TClass, TMember> Default(TMember defaultValue, bool useOnConversionFailure = false)
+ {
+ Data.Default = defaultValue;
+ Data.IsDefaultSet = true;
+ Data.UseDefaultOnConversionFailure = useOnConversionFailure;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty. This value is not type checked
+ /// and will use a <see cref="ITypeConverter"/> to convert
+ /// the field. This could potentially have runtime errors.
+ /// </summary>
+ /// <param name="defaultValue">The default value.</param>
+ /// <param name="useOnConversionFailure">Use default on conversion failure.</param>
+ public virtual MemberMap<TClass, TMember> Default(string defaultValue, bool useOnConversionFailure = false)
+ {
+ Data.Default = defaultValue;
+ Data.IsDefaultSet = true;
+ Data.UseDefaultOnConversionFailure = useOnConversionFailure;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The constant value that will be used for every record when
+ /// reading and writing. This value will always be used no matter
+ /// what other mapping configurations are specified.
+ /// </summary>
+ /// <param name="constantValue">The constant value.</param>
+ public virtual MemberMap<TClass, TMember> Constant(TMember? constantValue)
+ {
+ Data.Constant = constantValue;
+ Data.IsConstantSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <param name="typeConverter">The TypeConverter to use.</param>
+ public new virtual MemberMap<TClass, TMember> TypeConverter(ITypeConverter typeConverter)
+ {
+ Data.TypeConverter = typeConverter;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the member to and from a CSV field.
+ /// </summary>
+ /// <typeparam name="TConverter">The <see cref="System.Type"/> of the
+ /// <see cref="TypeConverter"/> to use.</typeparam>
+ public new virtual MemberMap<TClass, TMember> TypeConverter<TConverter>() where TConverter : ITypeConverter
+ {
+ TypeConverter(ObjectResolver.Current.Resolve<TConverter>());
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies an expression to be used to convert data in the
+ /// row to the member.
+ /// </summary>
+ /// <param name="convertFromStringFunction">The convert expression.</param>
+ public virtual MemberMap<TClass, TMember> Convert(ConvertFromString<TMember> convertFromStringFunction)
+ {
+ var instance = convertFromStringFunction.Target != null ? Expression.Constant(convertFromStringFunction.Target) : null;
+ var fieldParameter = Expression.Parameter(typeof(ConvertFromStringArgs), "args");
+ var methodExpression = Expression.Call
+ (
+ instance,
+ convertFromStringFunction.Method,
+ fieldParameter
+ );
+ var lambdaExpression = Expression.Lambda<ConvertFromString<TMember>>(methodExpression, fieldParameter);
+
+ Data.ReadingConvertExpression = lambdaExpression;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies an expression to be used to convert the object
+ /// to a field.
+ /// </summary>
+ /// <param name="convertToStringFunction">The convert expression.</param>
+ public virtual MemberMap<TClass, TMember> Convert(ConvertToString<TClass> convertToStringFunction)
+ {
+ var instance = convertToStringFunction.Target != null ? Expression.Constant(convertToStringFunction.Target) : null;
+ var fieldParameter = Expression.Parameter(typeof(ConvertToStringArgs<TClass>), "args");
+ var methodExpression = Expression.Call
+ (
+ instance,
+ convertToStringFunction.Method,
+ fieldParameter
+ );
+ var lambdaExpression = Expression.Lambda<ConvertToString<TClass>>(methodExpression, fieldParameter);
+
+ Data.WritingConvertExpression = lambdaExpression;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the member when reading if no matching field name can be found.
+ /// </summary>
+ public new virtual MemberMap<TClass, TMember> Optional()
+ {
+ Data.IsOptional = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies an expression to be used to validate a field when reading.
+ /// </summary>
+ /// <param name="validateExpression"></param>
+ public new virtual MemberMap<TClass, TMember> Validate(Validate validateExpression)
+ {
+ return Validate(validateExpression, args => $"Field '{args.Field}' is not valid.");
+ }
+
+ /// <summary>
+ /// Specifies an expression to be used to validate a field when reading along with specified exception message.
+ /// </summary>
+ /// <param name="validateExpression"></param>
+ /// <param name="validateMessageExpression"></param>
+ public new virtual MemberMap<TClass, TMember> Validate(Validate validateExpression, ValidateMessage validateMessageExpression)
+ {
+ var fieldParameter = Expression.Parameter(typeof(ValidateArgs), "args");
+ var validateCallExpression = Expression.Call(
+ Expression.Constant(validateExpression.Target),
+ validateExpression.Method,
+ fieldParameter
+ );
+ var messageCallExpression = Expression.Call(
+ Expression.Constant(validateMessageExpression.Target),
+ validateMessageExpression.Method,
+ fieldParameter
+ );
+
+ Data.ValidateExpression = Expression.Lambda<Validate>(validateCallExpression, fieldParameter);
+ Data.ValidateMessageExpression = Expression.Lambda<ValidateMessage>(messageCallExpression, fieldParameter);
+
+ return this;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberNameCollection.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberNameCollection.cs
new file mode 100644
index 0000000..fb9db4a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberNameCollection.cs
@@ -0,0 +1,98 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.Generic;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// A collection that holds member names.
+ /// </summary>
+ public class MemberNameCollection : IEnumerable<string>
+ {
+ private readonly List<string> names = new List<string>();
+
+ /// <summary>
+ /// Gets the name at the given index. If a prefix is set,
+ /// it will be prepended to the name.
+ /// </summary>
+ /// <param name="index"></param>
+ /// <returns></returns>
+ public string this[int index]
+ {
+ get { return Prefix + names[index]; }
+ set { names[index] = value; }
+ }
+
+ /// <summary>
+ /// Gets the prefix to use for each name.
+ /// </summary>
+ public string Prefix { get; set; }
+
+ /// <summary>
+ /// Gets the raw list of names without
+ /// the prefix being prepended.
+ /// </summary>
+ public List<string> Names => names;
+
+ /// <summary>
+ /// Gets the count.
+ /// </summary>
+ public int Count => names.Count;
+
+ /// <summary>
+ /// Adds the given name to the collection.
+ /// </summary>
+ /// <param name="name">The name to add.</param>
+ public void Add(string name)
+ {
+ names.Add(name);
+ }
+
+ /// <summary>
+ /// Clears all names from the collection.
+ /// </summary>
+ public void Clear()
+ {
+ names.Clear();
+ }
+
+ /// <summary>
+ /// Adds a range of names to the collection.
+ /// </summary>
+ /// <param name="names">The range to add.</param>
+ public void AddRange(IEnumerable<string> names)
+ {
+ this.names.AddRange(names);
+ }
+
+ /// <summary>
+ /// Returns an enumerator that iterates through the collection.
+ /// </summary>
+ /// <returns>
+ /// A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
+ /// </returns>
+ /// <filterpriority>1</filterpriority>
+ public IEnumerator<string> GetEnumerator()
+ {
+ for (var i = 0; i < names.Count; i++)
+ {
+ yield return this[i];
+ }
+ }
+
+ /// <summary>
+ /// Returns an enumerator that iterates through a collection.
+ /// </summary>
+ /// <returns>
+ /// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
+ /// </returns>
+ /// <filterpriority>2</filterpriority>
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return names.GetEnumerator();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMap.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMap.cs
new file mode 100644
index 0000000..66dca90
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMap.cs
@@ -0,0 +1,68 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Diagnostics;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Mapping info for a reference member mapping to a class.
+ /// </summary>
+ [DebuggerDisplay("Member = {Data.Member}, Prefix = {Data.Prefix}")]
+ public class MemberReferenceMap
+ {
+ private readonly MemberReferenceMapData data;
+
+ /// <summary>
+ /// Gets the member reference map data.
+ /// </summary>
+ public MemberReferenceMapData Data => data;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MemberReferenceMap"/> class.
+ /// </summary>
+ /// <param name="member">The member.</param>
+ /// <param name="mapping">The <see cref="ClassMap"/> to use for the reference map.</param>
+ public MemberReferenceMap(MemberInfo member, ClassMap mapping)
+ {
+ if (mapping == null)
+ {
+ throw new ArgumentNullException(nameof(mapping));
+ }
+
+ data = new MemberReferenceMapData(member, mapping);
+ }
+
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference member.
+ /// </summary>
+ /// <param name="prefix">The prefix to be prepended to headers of each reference member.</param>
+ /// <param name="inherit">Inherit parent prefixes.</param>
+ /// <returns>The current <see cref="MemberReferenceMap" /></returns>
+ public MemberReferenceMap Prefix(string? prefix = null, bool inherit = false)
+ {
+ if (string.IsNullOrEmpty(prefix))
+ {
+ prefix = data.Member.Name + ".";
+ }
+
+ data.Inherit = inherit;
+ data.Prefix = prefix;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Get the largest index for the
+ /// members and references.
+ /// </summary>
+ /// <returns>The max index.</returns>
+ internal int GetMaxIndex()
+ {
+ return data.Mapping.GetMaxIndex();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapCollection.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapCollection.cs
new file mode 100644
index 0000000..c8745ed
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapCollection.cs
@@ -0,0 +1,164 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// A collection that holds <see cref="MemberReferenceMap"/>'s.
+ /// </summary>
+ [DebuggerDisplay("Count = {list.Count}")]
+ public class MemberReferenceMapCollection : IList<MemberReferenceMap>
+ {
+ private readonly List<MemberReferenceMap> list = new List<MemberReferenceMap>();
+
+ /// <summary>Gets the number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1" />.</summary>
+ /// <returns>The number of elements contained in the <see cref="T:System.Collections.Generic.ICollection`1" />.</returns>
+ public virtual int Count => list.Count;
+
+ /// <summary>Gets a value indicating whether the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.</summary>
+ /// <returns>true if the <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only; otherwise, false.</returns>
+ public virtual bool IsReadOnly => false;
+
+ /// <summary>Gets or sets the element at the specified index.</summary>
+ /// <returns>The element at the specified index.</returns>
+ /// <param name="index">The zero-based index of the element to get or set.</param>
+ /// <exception cref="T:System.ArgumentOutOfRangeException">
+ /// <paramref name="index" /> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1" />.</exception>
+ /// <exception cref="T:System.NotSupportedException">The member is set and the <see cref="T:System.Collections.Generic.IList`1" /> is read-only.</exception>
+ public virtual MemberReferenceMap this[int index]
+ {
+ get => list[index];
+ set => list[index] = value;
+ }
+
+ /// <summary>Returns an enumerator that iterates through the collection.</summary>
+ /// <returns>A <see cref="T:System.Collections.Generic.IEnumerator`1" /> that can be used to iterate through the collection.</returns>
+ /// <filterpriority>1</filterpriority>
+ public virtual IEnumerator<MemberReferenceMap> GetEnumerator()
+ {
+ return list.GetEnumerator();
+ }
+
+ /// <summary>Returns an enumerator that iterates through a collection.</summary>
+ /// <returns>An <see cref="T:System.Collections.IEnumerator" /> object that can be used to iterate through the collection.</returns>
+ /// <filterpriority>2</filterpriority>
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ /// <summary>Adds an item to the <see cref="T:System.Collections.Generic.ICollection`1" />.</summary>
+ /// <param name="item">The object to add to the <see cref="T:System.Collections.Generic.ICollection`1" />.</param>
+ /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.</exception>
+ public virtual void Add(MemberReferenceMap item)
+ {
+ list.Add(item);
+ }
+
+ /// <summary>Removes all items from the <see cref="T:System.Collections.Generic.ICollection`1" />.</summary>
+ /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only. </exception>
+ public virtual void Clear()
+ {
+ list.Clear();
+ }
+
+ /// <summary>Determines whether the <see cref="T:System.Collections.Generic.ICollection`1" /> contains a specific value.</summary>
+ /// <returns>true if <paramref name="item" /> is found in the <see cref="T:System.Collections.Generic.ICollection`1" />; otherwise, false.</returns>
+ /// <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.ICollection`1" />.</param>
+ public virtual bool Contains(MemberReferenceMap item)
+ {
+ return list.Contains(item);
+ }
+
+ /// <summary>Copies the elements of the <see cref="T:System.Collections.Generic.ICollection`1" /> to an <see cref="T:System.Array" />, starting at a particular <see cref="T:System.Array" /> index.</summary>
+ /// <param name="array">The one-dimensional <see cref="T:System.Array" /> that is the destination of the elements copied from <see cref="T:System.Collections.Generic.ICollection`1" />. The <see cref="T:System.Array" /> must have zero-based indexing.</param>
+ /// <param name="arrayIndex">The zero-based index in <paramref name="array" /> at which copying begins.</param>
+ /// <exception cref="T:System.ArgumentNullException">
+ /// <paramref name="array" /> is null.</exception>
+ /// <exception cref="T:System.ArgumentOutOfRangeException">
+ /// <paramref name="arrayIndex" /> is less than 0.</exception>
+ /// <exception cref="T:System.ArgumentException">The number of elements in the source <see cref="T:System.Collections.Generic.ICollection`1" /> is greater than the available space from <paramref name="arrayIndex" /> to the end of the destination <paramref name="array" />.</exception>
+ public virtual void CopyTo(MemberReferenceMap[] array, int arrayIndex)
+ {
+ list.CopyTo(array, arrayIndex);
+ }
+
+ /// <summary>Removes the first occurrence of a specific object from the <see cref="T:System.Collections.Generic.ICollection`1" />.</summary>
+ /// <returns>true if <paramref name="item" /> was successfully removed from the <see cref="T:System.Collections.Generic.ICollection`1" />; otherwise, false. This method also returns false if <paramref name="item" /> is not found in the original <see cref="T:System.Collections.Generic.ICollection`1" />.</returns>
+ /// <param name="item">The object to remove from the <see cref="T:System.Collections.Generic.ICollection`1" />.</param>
+ /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.ICollection`1" /> is read-only.</exception>
+ public virtual bool Remove(MemberReferenceMap item)
+ {
+ return list.Remove(item);
+ }
+
+ /// <summary>Determines the index of a specific item in the <see cref="T:System.Collections.Generic.IList`1" />.</summary>
+ /// <returns>The index of <paramref name="item" /> if found in the list; otherwise, -1.</returns>
+ /// <param name="item">The object to locate in the <see cref="T:System.Collections.Generic.IList`1" />.</param>
+ public virtual int IndexOf(MemberReferenceMap item)
+ {
+ return list.IndexOf(item);
+ }
+
+ /// <summary>Inserts an item to the <see cref="T:System.Collections.Generic.IList`1" /> at the specified index.</summary>
+ /// <param name="index">The zero-based index at which <paramref name="item" /> should be inserted.</param>
+ /// <param name="item">The object to insert into the <see cref="T:System.Collections.Generic.IList`1" />.</param>
+ /// <exception cref="T:System.ArgumentOutOfRangeException">
+ /// <paramref name="index" /> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1" />.</exception>
+ /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1" /> is read-only.</exception>
+ public virtual void Insert(int index, MemberReferenceMap item)
+ {
+ list.Insert(index, item);
+ }
+
+ /// <summary>Removes the <see cref="T:System.Collections.Generic.IList`1" /> item at the specified index.</summary>
+ /// <param name="index">The zero-based index of the item to remove.</param>
+ /// <exception cref="T:System.ArgumentOutOfRangeException">
+ /// <paramref name="index" /> is not a valid index in the <see cref="T:System.Collections.Generic.IList`1" />.</exception>
+ /// <exception cref="T:System.NotSupportedException">The <see cref="T:System.Collections.Generic.IList`1" /> is read-only.</exception>
+ public virtual void RemoveAt(int index)
+ {
+ list.RemoveAt(index);
+ }
+
+ /// <summary>
+ /// Finds the <see cref="MemberReferenceMap"/> using the given member expression.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="System.Type"/> the member is on.</typeparam>
+ /// <param name="expression">The member expression.</param>
+ /// <returns>The <see cref="MemberReferenceMap"/> for the given expression, or null if not found.</returns>
+ public virtual MemberReferenceMap? Find<T>(Expression<Func<T, object>> expression)
+ {
+ var member = ReflectionHelper.GetMember(expression);
+ return Find(member);
+ }
+
+ /// <summary>
+ /// Finds the <see cref="MemberReferenceMap"/> using the given member.
+ /// </summary>
+ /// <param name="member">The member.</param>
+ /// <returns>The <see cref="MemberReferenceMap"/> for the given expression, or null if not found.</returns>
+ public virtual MemberReferenceMap? Find(MemberInfo member)
+ {
+ var existingMap = list.SingleOrDefault(m =>
+ m.Data.Member == member ||
+ m.Data.Member.Name == member.Name &&
+ (
+ m.Data.Member.DeclaringType.IsAssignableFrom(member.DeclaringType) ||
+ member.DeclaringType.IsAssignableFrom(m.Data.Member.DeclaringType)
+ )
+ );
+
+ return existingMap;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapData.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapData.cs
new file mode 100644
index 0000000..0726a35
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberReferenceMapData.cs
@@ -0,0 +1,68 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// The configuration data for the reference map.
+ /// </summary>
+ public class MemberReferenceMapData
+ {
+ private string prefix;
+
+ /// <summary>
+ /// Gets or sets the header prefix to use.
+ /// </summary>
+ public virtual string Prefix
+ {
+ get { return prefix; }
+ set
+ {
+ prefix = value;
+ foreach (var memberMap in Mapping.MemberMaps)
+ {
+ memberMap.Data.Names.Prefix = value;
+ }
+
+ if (Inherit)
+ {
+ foreach (var memberRef in Mapping.ReferenceMaps)
+ {
+ memberRef.Data.Prefix = memberRef.Data.Prefix == null ? value : string.Concat(value, memberRef.Data.Prefix);
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets a value indicating if a prefix should inherit its parent.
+ /// <c>true</c> to inherit, otherwise <c>false</c>.
+ /// </summary>
+ public virtual bool Inherit { get; set; }
+
+ /// <summary>
+ /// Gets the <see cref="MemberInfo"/> that the data
+ /// is associated with.
+ /// </summary>
+ public virtual MemberInfo Member { get; private set; }
+
+ /// <summary>
+ /// Gets the mapping this is a reference for.
+ /// </summary>
+ public ClassMap Mapping { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MemberReferenceMapData"/> class.
+ /// </summary>
+ /// <param name="member">The member.</param>
+ /// <param name="mapping">The mapping this is a reference for.</param>
+ public MemberReferenceMapData(MemberInfo member, ClassMap mapping)
+ {
+ Member = member;
+ Mapping = mapping;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberTypes.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberTypes.cs
new file mode 100644
index 0000000..378524f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/MemberTypes.cs
@@ -0,0 +1,32 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Flags for the type of members that
+ /// can be used for auto mapping.
+ /// </summary>
+ [Flags]
+ public enum MemberTypes
+ {
+ /// <summary>
+ /// No members. This is not a valid value
+ /// and will cause an exception if used.
+ /// </summary>
+ None = 0,
+
+ /// <summary>
+ /// Properties on a class.
+ /// </summary>
+ Properties = 1,
+
+ /// <summary>
+ /// Fields on a class.
+ /// </summary>
+ Fields = 2
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMap.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMap.cs
new file mode 100644
index 0000000..991cc8b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMap.cs
@@ -0,0 +1,212 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.TypeConversion;
+using System;
+using System.Diagnostics;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Mapping for a constructor parameter.
+ /// This may contain value type data, a constructor type map,
+ /// or a reference map, depending on the type of the parameter.
+ /// </summary>
+ [DebuggerDisplay("Data = {Data}")]
+ public class ParameterMap
+ {
+ /// <summary>
+ /// Gets the parameter map data.
+ /// </summary>
+ public virtual ParameterMapData Data { get; protected set; }
+
+ /// <summary>
+ /// Type converter options.
+ /// </summary>
+ public virtual ParameterMapTypeConverterOption TypeConverterOption { get; protected set; }
+
+ /// <summary>
+ /// Gets or sets the map for a constructor type.
+ /// </summary>
+ public virtual ClassMap ConstructorTypeMap { get; set; }
+
+ /// <summary>
+ /// Gets or sets the map for a reference type.
+ /// </summary>
+ public virtual ParameterReferenceMap ReferenceMap { get; set; }
+
+ /// <summary>
+ /// Creates an instance of <see cref="ParameterMap"/> using
+ /// the given information.
+ /// </summary>
+ /// <param name="parameter">The parameter being mapped.</param>
+ public ParameterMap(ParameterInfo parameter)
+ {
+ TypeConverterOption = new ParameterMapTypeConverterOption(this);
+
+ Data = new ParameterMapData(parameter);
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field
+ /// at the index of the name if there was a
+ /// header specified. It will look for the
+ /// first name match in the order listed.
+ /// When writing, sets the name of the
+ /// field in the header record.
+ /// The first name will be used.
+ /// </summary>
+ /// <param name="names">The possible names of the CSV field.</param>
+ public virtual ParameterMap Name(params string[] names)
+ {
+ if (names == null || names.Length == 0)
+ {
+ throw new ArgumentNullException(nameof(names));
+ }
+
+ Data.Names.Clear();
+ Data.Names.AddRange(names);
+ Data.IsNameSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the
+ /// index of the name used when there
+ /// are multiple names that are the same.
+ /// </summary>
+ /// <param name="index">The index of the name.</param>
+ public virtual ParameterMap NameIndex(int index)
+ {
+ Data.NameIndex = index;
+
+ return this;
+ }
+
+ /// <summary>
+ /// When reading, is used to get the field at
+ /// the given index. When writing, the fields
+ /// will be written in the order of the field
+ /// indexes.
+ /// </summary>
+ /// <param name="index">The index of the CSV field.</param>
+ public virtual ParameterMap Index(int index)
+ {
+ Data.Index = index;
+ Data.IsIndexSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the parameter when reading and writing.
+ /// </summary>
+ public virtual ParameterMap Ignore()
+ {
+ Data.Ignore = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Ignore the parameter when reading and writing.
+ /// </summary>
+ /// <param name="ignore">True to ignore, otherwise false.</param>
+ public virtual ParameterMap Ignore(bool ignore)
+ {
+ Data.Ignore = ignore;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The default value that will be used when reading when
+ /// the CSV field is empty.
+ /// </summary>
+ /// <param name="defaultValue">The default value.</param>
+ public virtual ParameterMap Default(object? defaultValue)
+ {
+ if (defaultValue == null && Data.Parameter.ParameterType.IsValueType)
+ {
+ throw new ArgumentException($"Parameter of type '{Data.Parameter.ParameterType.FullName}' can't have a default value of null.");
+ }
+
+ if (defaultValue != null && defaultValue.GetType() != Data.Parameter.ParameterType)
+ {
+ throw new ArgumentException($"Default of type '{defaultValue.GetType().FullName}' does not match parameter of type '{Data.Parameter.ParameterType.FullName}'.");
+ }
+
+ Data.Default = defaultValue;
+ Data.IsDefaultSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The constant value that will be used for every record when
+ /// reading and writing. This value will always be used no matter
+ /// what other mapping configurations are specified.
+ /// </summary>
+ /// <param name="constantValue">The constant value.</param>
+ public virtual ParameterMap Constant(object? constantValue)
+ {
+ if (constantValue == null && Data.Parameter.ParameterType.IsValueType)
+ {
+ throw new ArgumentException($"Parameter of type '{Data.Parameter.ParameterType.FullName}' can't have a constant value of null.");
+ }
+
+ if (constantValue != null && constantValue.GetType() != Data.Parameter.ParameterType)
+ {
+ throw new ArgumentException($"Constant of type '{constantValue.GetType().FullName}' does not match parameter of type '{Data.Parameter.ParameterType.FullName}'.");
+ }
+
+ Data.Constant = constantValue;
+ Data.IsConstantSet = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// The field is optional.
+ /// </summary>
+ public virtual ParameterMap Optional()
+ {
+ Data.IsOptional = true;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the parameter to and from a CSV field.
+ /// </summary>
+ /// <param name="typeConverter">The TypeConverter to use.</param>
+ public virtual ParameterMap TypeConverter(ITypeConverter typeConverter)
+ {
+ Data.TypeConverter = typeConverter;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Specifies the <see cref="TypeConverter"/> to use
+ /// when converting the parameter to and from a CSV field.
+ /// </summary>
+ /// <typeparam name="TConverter">The <see cref="System.Type"/> of the
+ /// <see cref="TypeConverter"/> to use.</typeparam>
+ public virtual ParameterMap TypeConverter<TConverter>() where TConverter : ITypeConverter
+ {
+ TypeConverter(ObjectResolver.Current.Resolve<TConverter>());
+
+ return this;
+ }
+
+ internal int GetMaxIndex()
+ {
+ return ReferenceMap?.GetMaxIndex() ?? Data.Index;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapData.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapData.cs
new file mode 100644
index 0000000..a83edbe
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapData.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.TypeConversion;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// The constructor parameter data for the map.
+ /// </summary>
+ [DebuggerDisplay("Index = {Index}, Names = {string.Join(\", \", Names)}, Parameter = {Parameter}")]
+ public class ParameterMapData
+ {
+ /// <summary>
+ /// Gets the <see cref="ParameterInfo"/> that the data
+ /// is associated with.
+ /// </summary>
+ public virtual ParameterInfo Parameter { get; private set; }
+
+ /// <summary>
+ /// Gets the list of column names.
+ /// </summary>
+ public virtual MemberNameCollection Names { get; } = new MemberNameCollection();
+
+ /// <summary>
+ /// Gets or sets the index of the name.
+ /// This is used if there are multiple
+ /// columns with the same names.
+ /// </summary>
+ public virtual int NameIndex { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating if the name was
+ /// explicitly set. True if it was explicitly set,
+ /// otherwise false.
+ /// </summary>
+ public virtual bool IsNameSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the column index.
+ /// </summary>
+ public virtual int Index { get; set; } = -1;
+
+ /// <summary>
+ /// Gets or sets a value indicating if the index was
+ /// explicitly set. True if it was explicitly set,
+ /// otherwise false.
+ /// </summary>
+ public virtual bool IsIndexSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the type converter.
+ /// </summary>
+ public virtual ITypeConverter TypeConverter { get; set; }
+
+ /// <summary>
+ /// Gets or sets the type converter options.
+ /// </summary>
+ public virtual TypeConverterOptions TypeConverterOptions { get; set; } = new TypeConverterOptions();
+
+ /// <summary>
+ /// Gets or sets a value indicating whether the field should be ignored.
+ /// </summary>
+ public virtual bool Ignore { get; set; }
+
+ /// <summary>
+ /// Gets or sets the default value used when a CSV field is empty.
+ /// </summary>
+ public virtual object? Default { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is default value set.
+ /// the default value was explicitly set. True if it was
+ /// explicitly set, otherwise false.
+ /// </summary>
+ public virtual bool IsDefaultSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets the constant value used for every record.
+ /// </summary>
+ public virtual object? Constant { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating if a constant was explicitly set.
+ /// </summary>
+ public virtual bool IsConstantSet { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating if a field is optional.
+ /// </summary>
+ public virtual bool IsOptional { get; set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ParameterMapData"/> class.
+ /// </summary>
+ /// <param name="parameter">The constructor parameter.</param>
+ public ParameterMapData(ParameterInfo parameter)
+ {
+ Parameter = parameter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapTypeConverterOption.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapTypeConverterOption.cs
new file mode 100644
index 0000000..4b3d82a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterMapTypeConverterOption.cs
@@ -0,0 +1,160 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Sets type converter options on a parameter map.
+ /// </summary>
+ public class ParameterMapTypeConverterOption
+ {
+ private readonly ParameterMap parameterMap;
+
+ /// <summary>
+ /// Creates a new instance using the given <see cref="ParameterMap"/>.
+ /// </summary>
+ /// <param name="parameterMap">The member map the options are being applied to.</param>
+ public ParameterMapTypeConverterOption(ParameterMap parameterMap)
+ {
+ this.parameterMap = parameterMap;
+ }
+
+ /// <summary>
+ /// The <see cref="CultureInfo"/> used when type converting.
+ /// This will override the global <see cref="CsvConfiguration.CultureInfo"/>
+ /// setting.
+ /// </summary>
+ /// <param name="cultureInfo">The culture info.</param>
+ public virtual ParameterMap CultureInfo(CultureInfo cultureInfo)
+ {
+ parameterMap.Data.TypeConverterOptions.CultureInfo = cultureInfo;
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The <see cref="DateTimeStyles"/> to use when type converting.
+ /// This is used when doing any <see cref="DateTime"/> conversions.
+ /// </summary>
+ /// <param name="dateTimeStyle">The date time style.</param>
+ public virtual ParameterMap DateTimeStyles(DateTimeStyles dateTimeStyle)
+ {
+ parameterMap.Data.TypeConverterOptions.DateTimeStyle = dateTimeStyle;
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The <see cref="TimeSpanStyles"/> to use when type converting.
+ /// This is used when doing <see cref="TimeSpan"/> converting.
+ /// </summary>
+ /// <param name="timeSpanStyles">The time span styles.</param>
+ public virtual ParameterMap TimespanStyles(TimeSpanStyles timeSpanStyles)
+ {
+ parameterMap.Data.TypeConverterOptions.TimeSpanStyle = timeSpanStyles;
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The <see cref="NumberStyles"/> to use when type converting.
+ /// This is used when doing any number conversions.
+ /// </summary>
+ /// <param name="numberStyle"></param>
+ public virtual ParameterMap NumberStyles(NumberStyles numberStyle)
+ {
+ parameterMap.Data.TypeConverterOptions.NumberStyles = numberStyle;
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The string format to be used when type converting.
+ /// </summary>
+ /// <param name="formats">The format.</param>
+ public virtual ParameterMap Format(params string[] formats)
+ {
+ parameterMap.Data.TypeConverterOptions.Formats = formats;
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The <see cref="UriKind"/> to use when converting.
+ /// This is used when doing <see cref="Uri"/> conversions.
+ /// </summary>
+ /// <param name="uriKind">Kind of the URI.</param>
+ public virtual ParameterMap UriKind(UriKind uriKind)
+ {
+ parameterMap.Data.TypeConverterOptions.UriKind = uriKind;
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The string values used to represent a boolean when converting.
+ /// </summary>
+ /// <param name="isTrue">A value indicating whether true values or false values are being set.</param>
+ /// <param name="clearValues">A value indication if the current values should be cleared before adding the new ones.</param>
+ /// <param name="booleanValues">The string boolean values.</param>
+ public virtual ParameterMap BooleanValues(bool isTrue, bool clearValues = true, params string[] booleanValues)
+ {
+ if (isTrue)
+ {
+ if (clearValues)
+ {
+ parameterMap.Data.TypeConverterOptions.BooleanTrueValues.Clear();
+ }
+
+ parameterMap.Data.TypeConverterOptions.BooleanTrueValues.AddRange(booleanValues);
+ }
+ else
+ {
+ if (clearValues)
+ {
+ parameterMap.Data.TypeConverterOptions.BooleanFalseValues.Clear();
+ }
+
+ parameterMap.Data.TypeConverterOptions.BooleanFalseValues.AddRange(booleanValues);
+ }
+
+ return parameterMap;
+ }
+
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ /// <param name="nullValues">The values that represent null.</param>
+ /// <returns></returns>
+ public virtual ParameterMap NullValues(params string[] nullValues)
+ {
+ return NullValues(true, nullValues);
+ }
+
+ /// <summary>
+ /// The string values used to represent null when converting.
+ /// </summary>
+ /// <param name="clearValues">A value indication if the current values should be cleared before adding the new ones.</param>
+ /// <param name="nullValues">The values that represent null.</param>
+ /// <returns></returns>
+ public virtual ParameterMap NullValues(bool clearValues, params string[] nullValues)
+ {
+ if (clearValues)
+ {
+ parameterMap.Data.TypeConverterOptions.NullValues.Clear();
+ }
+
+ parameterMap.Data.TypeConverterOptions.NullValues.AddRange(nullValues);
+
+ return parameterMap;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMap.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMap.cs
new file mode 100644
index 0000000..7e9a5f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMap.cs
@@ -0,0 +1,66 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Mapping info for a reference parameter mapping to a class.
+ /// </summary>
+ public class ParameterReferenceMap
+ {
+ private readonly ParameterReferenceMapData data;
+
+ /// <summary>
+ /// Gets the parameter reference map data.
+ /// </summary>
+ public ParameterReferenceMapData Data => data;
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ParameterReferenceMap"/> class.
+ /// </summary>
+ /// <param name="parameter">The parameter.</param>
+ /// <param name="mapping">The <see cref="ClassMap"/> to use for the reference map.</param>
+ public ParameterReferenceMap(ParameterInfo parameter, ClassMap mapping)
+ {
+ if (mapping == null)
+ {
+ throw new ArgumentNullException(nameof(mapping));
+ }
+
+ data = new ParameterReferenceMapData(parameter, mapping);
+ }
+
+ /// <summary>
+ /// Appends a prefix to the header of each field of the reference parameter.
+ /// </summary>
+ /// <param name="prefix">The prefix to be prepended to headers of each reference parameter.</param>
+ /// <param name="inherit">Inherit parent prefixes.</param>
+ /// <returns>The current <see cref="ParameterReferenceMap" /></returns>
+ public ParameterReferenceMap Prefix(string prefix = null, bool inherit = false)
+ {
+ if (string.IsNullOrEmpty(prefix))
+ {
+ prefix = data.Parameter.Name + ".";
+ }
+
+ data.Inherit = inherit;
+ data.Prefix = prefix;
+
+ return this;
+ }
+
+ /// <summary>
+ /// Get the largest index for the
+ /// members and references.
+ /// </summary>
+ /// <returns>The max index.</returns>
+ internal int GetMaxIndex()
+ {
+ return data.Mapping.GetMaxIndex();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMapData.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMapData.cs
new file mode 100644
index 0000000..ab2a28d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ParameterReferenceMapData.cs
@@ -0,0 +1,70 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Diagnostics;
+using System.Reflection;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// The configuration data for the reference map.
+ /// </summary>
+ [DebuggerDisplay( "Prefix = {Prefix}, Parameter = {Parameter}" )]
+ public class ParameterReferenceMapData
+ {
+ private string prefix;
+
+ /// <summary>
+ /// Gets or sets the header prefix to use.
+ /// </summary>
+ public virtual string Prefix
+ {
+ get { return prefix; }
+ set
+ {
+ prefix = value;
+ foreach( var memberMap in Mapping.MemberMaps )
+ {
+ memberMap.Data.Names.Prefix = value;
+ }
+
+ if (Inherit)
+ {
+ foreach (var memberRef in Mapping.ReferenceMaps)
+ {
+ memberRef.Data.Prefix = memberRef.Data.Prefix == null ? value : string.Concat(value, memberRef.Data.Prefix);
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets a value indicating if a prefix should inherit its parent.
+ /// <c>true</c> to inherit, otherwise <c>false</c>.
+ /// </summary>
+ public virtual bool Inherit { get; set; }
+
+ /// <summary>
+ /// Gets the <see cref="ParameterInfo"/> that the data
+ /// is associated with.
+ /// </summary>
+ public virtual ParameterInfo Parameter { get; private set; }
+
+ /// <summary>
+ /// Gets the mapping this is a reference for.
+ /// </summary>
+ public ClassMap Mapping { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ParameterReferenceMapData"/> class.
+ /// </summary>
+ /// <param name="parameter">The parameter.</param>
+ /// <param name="mapping">The mapping this is a reference for.</param>
+ public ParameterReferenceMapData( ParameterInfo parameter, ClassMap mapping )
+ {
+ Parameter = parameter;
+ Mapping = mapping;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/TrimOptions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/TrimOptions.cs
new file mode 100644
index 0000000..5555c92
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/TrimOptions.cs
@@ -0,0 +1,30 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Configuration
+{
+ /// <summary>
+ /// Options for trimming of fields.
+ /// </summary>
+ [Flags]
+ public enum TrimOptions
+ {
+ /// <summary>
+ /// No trimming.
+ /// </summary>
+ None = 0,
+
+ /// <summary>
+ /// Trims the whitespace around a field.
+ /// </summary>
+ Trim = 1,
+
+ /// <summary>
+ /// Trims the whitespace inside of quotes around a field.
+ /// </summary>
+ InsideQuotes = 2
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvContext.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvContext.cs
new file mode 100644
index 0000000..27c5d00
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvContext.cs
@@ -0,0 +1,202 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Share state for CsvHelper.
+ /// </summary>
+ public class CsvContext
+ {
+ /// <summary>
+ /// Gets or sets the <see cref="TypeConverterOptionsCache"/>.
+ /// </summary>
+ public virtual TypeConverterOptionsCache TypeConverterOptionsCache { get; set; } = new TypeConverterOptionsCache();
+
+ /// <summary>
+ /// Gets or sets the <see cref="TypeConverterOptionsCache"/>.
+ /// </summary>
+ public virtual TypeConverterCache TypeConverterCache { get; set; } = new TypeConverterCache();
+
+ /// <summary>
+ /// The configured <see cref="ClassMap"/>s.
+ /// </summary>
+ public virtual ClassMapCollection Maps { get; private set; }
+
+ /// <summary>
+ /// Gets the parser.
+ /// </summary>
+ public IParser Parser { get; private set; }
+
+ /// <summary>
+ /// Gets the reader.
+ /// </summary>
+ public IReader Reader { get; internal set; }
+
+ /// <summary>
+ /// Gets the writer.
+ /// </summary>
+ public IWriter Writer { get; internal set; }
+
+ /// <summary>
+ /// Gets the configuration.
+ /// </summary>
+ public CsvConfiguration Configuration { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvContext"/> class.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public CsvContext(IReader reader)
+ {
+ Reader = reader;
+ Parser = reader.Parser;
+ Configuration = reader.Configuration as CsvConfiguration ?? throw new InvalidOperationException($"{nameof(IReader)}.{nameof(IReader.Configuration)} must be of type {nameof(CsvConfiguration)} to be used in the context.");
+ Maps = new ClassMapCollection(this);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvContext"/> class.
+ /// </summary>
+ /// <param name="parser">The parser.</param>
+ public CsvContext(IParser parser)
+ {
+ Parser = parser;
+ Configuration = parser.Configuration as CsvConfiguration ?? throw new InvalidOperationException($"{nameof(IParser)}.{nameof(IParser.Configuration)} must be of type {nameof(CsvConfiguration)} to be used in the context.");
+ Maps = new ClassMapCollection(this);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvContext"/> class.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public CsvContext(IWriter writer)
+ {
+ Writer = writer;
+ Configuration = writer.Configuration as CsvConfiguration ?? throw new InvalidOperationException($"{nameof(IWriter)}.{nameof(IWriter.Configuration)} must be of type {nameof(CsvConfiguration)} to be used in the context.");
+ Maps = new ClassMapCollection(this);
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvContext"/> class.
+ /// </summary>
+ /// <param name="configuration">The configuration.</param>
+ public CsvContext(CsvConfiguration configuration)
+ {
+ Configuration = configuration;
+ Maps = new ClassMapCollection(this);
+ }
+
+ /// <summary>
+ /// Use a <see cref="ClassMap{T}" /> to configure mappings.
+ /// When using a class map, no members are mapped by default.
+ /// Only member specified in the mapping are used.
+ /// </summary>
+ /// <typeparam name="TMap">The type of mapping class to use.</typeparam>
+ public virtual TMap RegisterClassMap<TMap>() where TMap : ClassMap
+ {
+ var map = ObjectResolver.Current.Resolve<TMap>();
+ RegisterClassMap(map);
+
+ return map;
+ }
+
+ /// <summary>
+ /// Use a <see cref="ClassMap{T}" /> to configure mappings.
+ /// When using a class map, no members are mapped by default.
+ /// Only members specified in the mapping are used.
+ /// </summary>
+ /// <param name="classMapType">The type of mapping class to use.</param>
+ public virtual ClassMap RegisterClassMap(Type classMapType)
+ {
+ if (!typeof(ClassMap).IsAssignableFrom(classMapType))
+ {
+ throw new ArgumentException("The class map type must inherit from CsvClassMap.");
+ }
+
+ var map = (ClassMap)ObjectResolver.Current.Resolve(classMapType);
+ RegisterClassMap(map);
+
+ return map;
+ }
+
+ /// <summary>
+ /// Registers the class map.
+ /// </summary>
+ /// <param name="map">The class map to register.</param>
+ public virtual void RegisterClassMap(ClassMap map)
+ {
+ if (map.MemberMaps.Count == 0 && map.ReferenceMaps.Count == 0 && map.ParameterMaps.Count == 0)
+ {
+ throw new ConfigurationException("No mappings were specified in the CsvClassMap.");
+ }
+
+ Maps.Add(map);
+ }
+
+ /// <summary>
+ /// Unregisters the class map.
+ /// </summary>
+ /// <typeparam name="TMap">The map type to unregister.</typeparam>
+ public virtual void UnregisterClassMap<TMap>()
+ where TMap : ClassMap
+ {
+ UnregisterClassMap(typeof(TMap));
+ }
+
+ /// <summary>
+ /// Unregisters the class map.
+ /// </summary>
+ /// <param name="classMapType">The map type to unregister.</param>
+ public virtual void UnregisterClassMap(Type classMapType)
+ {
+ Maps.Remove(classMapType);
+ }
+
+ /// <summary>
+ /// Unregisters all class maps.
+ /// </summary>
+ public virtual void UnregisterClassMap()
+ {
+ Maps.Clear();
+ }
+
+ /// <summary>
+ /// Generates a <see cref="ClassMap"/> for the type.
+ /// </summary>
+ /// <typeparam name="T">The type to generate the map for.</typeparam>
+ /// <returns>The generate map.</returns>
+ public virtual ClassMap<T> AutoMap<T>()
+ {
+ var map = ObjectResolver.Current.Resolve<DefaultClassMap<T>>();
+ map.AutoMap(this);
+ Maps.Add(map);
+
+ return map;
+ }
+
+ /// <summary>
+ /// Generates a <see cref="ClassMap"/> for the type.
+ /// </summary>
+ /// <param name="type">The type to generate for the map.</param>
+ /// <returns>The generate map.</returns>
+ public virtual ClassMap AutoMap(Type type)
+ {
+ var mapType = typeof(DefaultClassMap<>).MakeGenericType(type);
+ var map = (ClassMap)ObjectResolver.Current.Resolve(mapType);
+ map.AutoMap(this);
+ Maps.Add(map);
+
+ return map;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvDataReader.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvDataReader.cs
new file mode 100644
index 0000000..0e67cf9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvDataReader.cs
@@ -0,0 +1,387 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Data;
+using System.Globalization;
+using System.Linq;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Provides a means of reading a CSV file forward-only by using CsvReader.
+ /// </summary>
+ /// <seealso cref="System.Data.IDataReader" />
+ public class CsvDataReader : IDataReader
+ {
+ private readonly CsvReader csv;
+ private readonly DataTable schemaTable;
+ private bool skipNextRead;
+
+ /// <inheritdoc />
+ public object this[int i]
+ {
+ get
+ {
+ return csv[i] ?? string.Empty;
+ }
+ }
+
+ /// <inheritdoc />
+ public object this[string name]
+ {
+ get
+ {
+ return csv[name] ?? string.Empty;
+ }
+ }
+
+ /// <inheritdoc />
+ public int Depth
+ {
+ get
+ {
+ return 0;
+ }
+ }
+
+ /// <inheritdoc />
+ public bool IsClosed { get; private set; }
+
+ /// <inheritdoc />
+ public int RecordsAffected
+ {
+ get
+ {
+ return 0;
+ }
+ }
+
+ /// <inheritdoc />
+ public int FieldCount
+ {
+ get
+ {
+ return csv?.Parser.Count ?? 0;
+ }
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvDataReader"/> class.
+ /// </summary>
+ /// <param name="csv">The CSV.</param>
+ /// <param name="schemaTable">The DataTable representing the file schema.</param>
+ public CsvDataReader(CsvReader csv, DataTable? schemaTable = null)
+ {
+ this.csv = csv;
+
+ csv.Read();
+
+ if (csv.Configuration.HasHeaderRecord)
+ {
+ csv.ReadHeader();
+ }
+ else
+ {
+ skipNextRead = true;
+ }
+
+ this.schemaTable = schemaTable ?? GetSchemaTable();
+ }
+
+ /// <inheritdoc />
+ public void Close()
+ {
+ Dispose();
+ }
+
+ /// <inheritdoc />
+ public void Dispose()
+ {
+ csv.Dispose();
+ IsClosed = true;
+ }
+
+ /// <inheritdoc />
+ public bool GetBoolean(int i)
+ {
+ return csv.GetField<bool>(i);
+ }
+
+ /// <inheritdoc />
+ public byte GetByte(int i)
+ {
+ return csv.GetField<byte>(i);
+ }
+
+ /// <inheritdoc />
+ public long GetBytes(int i, long fieldOffset, byte[]? buffer, int bufferoffset, int length)
+ {
+ var bytes = csv.GetField<byte[]>(i);
+
+ buffer ??= new byte[bytes.Length];
+
+ Array.Copy(bytes, fieldOffset, buffer, bufferoffset, length);
+
+ return bytes.Length;
+ }
+
+ /// <inheritdoc />
+ public char GetChar(int i)
+ {
+ return csv.GetField<char>(i);
+ }
+
+ /// <inheritdoc />
+ public long GetChars(int i, long fieldoffset, char[]? buffer, int bufferoffset, int length)
+ {
+ var chars = csv.GetField(i).ToCharArray();
+
+ buffer ??= new char[chars.Length];
+
+ Array.Copy(chars, fieldoffset, buffer, bufferoffset, length);
+
+ return chars.Length;
+ }
+
+ /// <inheritdoc />
+ public IDataReader GetData(int i)
+ {
+ throw new NotSupportedException();
+ }
+
+ /// <inheritdoc />
+ public string GetDataTypeName(int i)
+ {
+ if (i >= schemaTable.Rows.Count)
+ {
+ throw new IndexOutOfRangeException($"SchemaTable does not contain a definition for field '{i}'.");
+ }
+
+ var row = schemaTable.Rows[i];
+ var field = row["DataType"] as Type;
+
+ if (field == null)
+ {
+ throw new InvalidOperationException($"SchemaTable does not contain a 'DataType' of type 'Type' for field '{i}'.");
+ }
+
+ return field.Name;
+ }
+
+ /// <inheritdoc />
+ public DateTime GetDateTime(int i)
+ {
+ return csv.GetField<DateTime>(i);
+ }
+
+ /// <inheritdoc />
+ public decimal GetDecimal(int i)
+ {
+ return csv.GetField<decimal>(i);
+ }
+
+ /// <inheritdoc />
+ public double GetDouble(int i)
+ {
+ return csv.GetField<double>(i);
+ }
+
+ /// <inheritdoc />
+ public Type GetFieldType(int i)
+ {
+ return typeof(string);
+ }
+
+ /// <inheritdoc />
+ public float GetFloat(int i)
+ {
+ return csv.GetField<float>(i);
+ }
+
+ /// <inheritdoc />
+ public Guid GetGuid(int i)
+ {
+ return csv.GetField<Guid>(i);
+ }
+
+ /// <inheritdoc />
+ public short GetInt16(int i)
+ {
+ return csv.GetField<short>(i);
+ }
+
+ /// <inheritdoc />
+ public int GetInt32(int i)
+ {
+ return csv.GetField<int>(i);
+ }
+
+ /// <inheritdoc />
+ public long GetInt64(int i)
+ {
+ return csv.GetField<long>(i);
+ }
+
+ /// <inheritdoc />
+ public string GetName(int i)
+ {
+ return csv.Configuration.HasHeaderRecord
+ ? csv.HeaderRecord[i]
+ : string.Empty;
+ }
+
+ /// <inheritdoc />
+ public int GetOrdinal(string name)
+ {
+ var index = csv.GetFieldIndex(name, isTryGet: true);
+ if (index >= 0)
+ {
+ return index;
+ }
+
+ var args = new PrepareHeaderForMatchArgs(name, 0);
+ var namePrepared = csv.Configuration.PrepareHeaderForMatch(args);
+
+ var headerRecord = csv.HeaderRecord;
+ for (var i = 0; i < headerRecord.Length; i++)
+ {
+ args = new PrepareHeaderForMatchArgs(headerRecord[i], i);
+ var headerPrepared = csv.Configuration.PrepareHeaderForMatch(args);
+ if (csv.Configuration.CultureInfo.CompareInfo.Compare(namePrepared, headerPrepared, CompareOptions.IgnoreCase) == 0)
+ {
+ return i;
+ }
+ }
+
+ throw new IndexOutOfRangeException($"Field with name '{name}' and prepared name '{namePrepared}' was not found.");
+ }
+
+ /// <inheritdoc />
+ public DataTable GetSchemaTable()
+ {
+ if (schemaTable != null)
+ {
+ return schemaTable;
+ }
+
+ // https://docs.microsoft.com/en-us/dotnet/api/system.data.datatablereader.getschematable?view=netframework-4.7.2
+ var dt = new DataTable("SchemaTable");
+ dt.Columns.Add("AllowDBNull", typeof(bool));
+ dt.Columns.Add("AutoIncrementSeed", typeof(long));
+ dt.Columns.Add("AutoIncrementStep", typeof(long));
+ dt.Columns.Add("BaseCatalogName");
+ dt.Columns.Add("BaseColumnName");
+ dt.Columns.Add("BaseColumnNamespace");
+ dt.Columns.Add("BaseSchemaName");
+ dt.Columns.Add("BaseTableName");
+ dt.Columns.Add("BaseTableNamespace");
+ dt.Columns.Add("ColumnName");
+ dt.Columns.Add("ColumnMapping", typeof(MappingType));
+ dt.Columns.Add("ColumnOrdinal", typeof(int));
+ dt.Columns.Add("ColumnSize", typeof(int));
+ dt.Columns.Add("DataType", typeof(Type));
+ dt.Columns.Add("DefaultValue", typeof(object));
+ dt.Columns.Add("Expression");
+ dt.Columns.Add("IsAutoIncrement", typeof(bool));
+ dt.Columns.Add("IsKey", typeof(bool));
+ dt.Columns.Add("IsLong", typeof(bool));
+ dt.Columns.Add("IsReadOnly", typeof(bool));
+ dt.Columns.Add("IsRowVersion", typeof(bool));
+ dt.Columns.Add("IsUnique", typeof(bool));
+ dt.Columns.Add("NumericPrecision", typeof(short));
+ dt.Columns.Add("NumericScale", typeof(short));
+ dt.Columns.Add("ProviderType", typeof(int));
+
+ if (csv.Configuration.HasHeaderRecord)
+ {
+ var header = csv.HeaderRecord;
+
+ for (var i = 0; i < header.Length; i++)
+ {
+ var row = dt.NewRow();
+ row["AllowDBNull"] = true;
+ row["AutoIncrementSeed"] = DBNull.Value;
+ row["AutoIncrementStep"] = DBNull.Value;
+ row["BaseCatalogName"] = null;
+ row["BaseColumnName"] = header[i];
+ row["BaseColumnNamespace"] = null;
+ row["BaseSchemaName"] = null;
+ row["BaseTableName"] = null;
+ row["BaseTableNamespace"] = null;
+ row["ColumnName"] = header[i];
+ row["ColumnMapping"] = MappingType.Element;
+ row["ColumnOrdinal"] = i;
+ row["ColumnSize"] = int.MaxValue;
+ row["DataType"] = typeof(string);
+ row["DefaultValue"] = null;
+ row["Expression"] = null;
+ row["IsAutoIncrement"] = false;
+ row["IsKey"] = false;
+ row["IsLong"] = false;
+ row["IsReadOnly"] = true;
+ row["IsRowVersion"] = false;
+ row["IsUnique"] = false;
+ row["NumericPrecision"] = DBNull.Value;
+ row["NumericScale"] = DBNull.Value;
+ row["ProviderType"] = DbType.String;
+
+ dt.Rows.Add(row);
+ }
+ }
+
+ return dt;
+ }
+
+ /// <inheritdoc />
+ public string GetString(int i)
+ {
+ return csv.GetField(i) ?? string.Empty;
+ }
+
+ /// <inheritdoc />
+ public object GetValue(int i)
+ {
+ return IsDBNull(i) ? DBNull.Value : (csv.GetField(i) ?? string.Empty);
+ }
+
+ /// <inheritdoc />
+ public int GetValues(object[] values)
+ {
+ for (var i = 0; i < values.Length; i++)
+ {
+ values[i] = IsDBNull(i) ? DBNull.Value : (csv.GetField(i) ?? string.Empty);
+ }
+
+ return csv.Parser.Count;
+ }
+
+ /// <inheritdoc />
+ public bool IsDBNull(int i)
+ {
+ var field = csv.GetField(i);
+ var nullValues = csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues;
+
+ return field == null || nullValues.Contains(field);
+ }
+
+ /// <inheritdoc />
+ public bool NextResult()
+ {
+ return false;
+ }
+
+ /// <inheritdoc />
+ public bool Read()
+ {
+ if (skipNextRead)
+ {
+ skipNextRead = false;
+ return true;
+ }
+
+ return csv.Read();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.csproj b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.csproj
new file mode 100644
index 0000000..28dcaad
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.csproj
@@ -0,0 +1,92 @@
+<Project Sdk="Microsoft.NET.Sdk">
+ <PropertyGroup>
+ <!-- Assembly -->
+ <AssemblyTitle>CsvHelper</AssemblyTitle>
+ <Description>A library for reading and writing CSV files. Extremely fast, flexible, and easy to use. Supports reading and writing of custom class objects.</Description>
+ <Copyright>Copyright © 2009-2022 Josh Close</Copyright>
+ <Authors>Josh Close</Authors>
+
+ <!-- Build -->
+ <AssemblyName>CsvHelper</AssemblyName>
+ <TargetFrameworks>net6.0;netstandard2.1;netstandard2.0;net47;net462</TargetFrameworks>
+ <!--<TargetFrameworks>net60</TargetFrameworks>-->
+ <LangVersion>latest</LangVersion>
+ <RootNamespace>CsvHelper</RootNamespace>
+ <DefaultLanguage>en-US</DefaultLanguage>
+ <GenerateDocumentationFile>true</GenerateDocumentationFile>
+ <ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
+ <!--<Nullable>enable</Nullable>
+ <WarningsAsErrors>nullable</WarningsAsErrors>-->
+
+ <!-- Sign -->
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>CsvHelper.snk</AssemblyOriginatorKeyFile>
+ <PublicSign Condition=" '$(OS)' != 'Windows_NT' ">true</PublicSign>
+
+ <!-- NuGet -->
+ <PackageId>CsvHelper</PackageId>
+ <PackageTags>csv;csvhelper;comma;separated;value;delimited</PackageTags>
+ <PackageIcon>Icon.png</PackageIcon>
+ <PackageIconUrl>https://raw.github.com/JoshClose/CsvHelper/master/logo/Comma-Small.png</PackageIconUrl>
+ <PackageProjectUrl>https://joshclose.github.io/CsvHelper/</PackageProjectUrl>
+ <PackageReleaseNotes>https://joshclose.github.io/CsvHelper/change-log</PackageReleaseNotes>
+ <PackageLicenseExpression>MS-PL OR Apache-2.0</PackageLicenseExpression>
+ <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
+ <PublishRepositoryUrl>true</PublishRepositoryUrl>
+ <RepositoryUrl>https://github.com/JoshClose/CsvHelper</RepositoryUrl>
+ <RepositoryType>git</RepositoryType>
+ <IncludeSymbols>true</IncludeSymbols>
+ <SymbolPackageFormat>snupkg</SymbolPackageFormat>
+ <EmbedUntrackedSources>true</EmbedUntrackedSources>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <None Remove="*.ncrunchproject" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <None Include="Icon.png" Pack="true" PackagePath="\" />
+ </ItemGroup>
+
+ <!-- .NET 4.5 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'net45'">
+ <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
+ <PackageReference Include="System.Memory" Version="4.5.0" />
+ <PackageReference Include="System.ValueTuple" Version="4.3.0" />
+ </ItemGroup>
+
+ <!-- .NET 4.7 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'net47'">
+ <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
+ <PackageReference Include="Microsoft.Bcl.HashCode" Version="1.0.0" />
+ <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
+ <PackageReference Include="System.Memory" Version="4.5.0" />
+ <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.2" />
+ </ItemGroup>
+
+ <!-- .NET Standard 2.0 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
+ <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
+ <PackageReference Include="Microsoft.Bcl.HashCode" Version="1.0.0" />
+ <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
+ <PackageReference Include="System.Memory" Version="4.5.0" />
+ <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.2" />
+ </ItemGroup>
+
+ <!-- .NET Standard 2.1 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
+ <PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Microsoft.SourceLink.GitHub" Version="[1.0.0]">
+ <PrivateAssets>all</PrivateAssets>
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ </PackageReference>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
+ </ItemGroup>
+
+</Project> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net45.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net45.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net45.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net47.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net47.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net47.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net5.0.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net5.0.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net5.0.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net50.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net50.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net50.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net6.0.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net6.0.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net6.0.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net60.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net60.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.net60.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.0.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.0.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.0.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.1.v3.ncrunchproject b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.1.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.netstandard2.1.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.snk b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.snk
new file mode 100644
index 0000000..8c9bfaf
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelper.snk
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelperException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelperException.cs
new file mode 100644
index 0000000..10e0cdc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvHelperException.cs
@@ -0,0 +1,144 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Text;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents errors that occur in CsvHelper.
+ /// </summary>
+ [Serializable]
+ public class CsvHelperException : Exception
+ {
+ [NonSerialized]
+ private readonly CsvContext context;
+
+ /// <summary>
+ /// Gets the context.
+ /// </summary>
+ public CsvContext Context => context;
+
+ /// <summary>
+ /// Initializes a new instance of the CsvHelperException class.
+ /// </summary>
+ internal protected CsvHelperException() : base() { }
+
+ /// <summary>
+ /// Initializes a new instance of the CsvHelperException class.
+ /// </summary>
+ /// <param name="message">The message that describes the error.</param>
+ internal protected CsvHelperException(string message) : base(message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the CsvHelperException class.
+ /// </summary>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ internal protected CsvHelperException(string message, Exception innerException) : base(message, innerException) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvHelperException"/> class.
+ /// </summary>
+ public CsvHelperException(CsvContext context)
+ {
+ this.context = context;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvHelperException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public CsvHelperException(CsvContext context, string message) : base(AddDetails(message, context))
+ {
+ this.context = context;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvHelperException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public CsvHelperException(CsvContext context, string message, Exception innerException) : base(AddDetails(message, context), innerException)
+ {
+ this.context = context;
+ }
+
+ private static string AddDetails(string message, CsvContext context)
+ {
+ var indent = new string(' ', 3);
+
+ var details = new StringBuilder();
+
+ if (context.Reader != null)
+ {
+ details.AppendLine($"{nameof(IReader)} state:");
+ details.AppendLine($"{indent}{nameof(IReader.ColumnCount)}: {context.Reader.ColumnCount}");
+ details.AppendLine($"{indent}{nameof(IReader.CurrentIndex)}: {context.Reader.CurrentIndex}");
+ try
+ {
+ var record = new StringBuilder();
+ if (context.Reader.HeaderRecord != null)
+ {
+ record.Append("[\"");
+ record.Append(string.Join("\",\"", context.Reader.HeaderRecord));
+ record.Append("\"]");
+ }
+
+ details.AppendLine($"{indent}{nameof(IReader.HeaderRecord)}:{Environment.NewLine}{record}");
+ }
+ catch { }
+ }
+
+ if (context.Parser != null)
+ {
+ details.AppendLine($"{nameof(IParser)} state:");
+ details.AppendLine($"{indent}{nameof(IParser.ByteCount)}: {context.Parser.ByteCount}");
+ details.AppendLine($"{indent}{nameof(IParser.CharCount)}: {context.Parser.CharCount}");
+ details.AppendLine($"{indent}{nameof(IParser.Row)}: {context.Parser.Row}");
+ details.AppendLine($"{indent}{nameof(IParser.RawRow)}: {context.Parser.RawRow}");
+ details.AppendLine($"{indent}{nameof(IParser.Count)}: {context.Parser.Count}");
+
+ try
+ {
+ var rawRecord = context.Configuration.ExceptionMessagesContainRawData
+ ? context.Parser.RawRecord
+ : $"Hidden because {nameof(IParserConfiguration.ExceptionMessagesContainRawData)} is false.";
+ details.AppendLine($"{indent}{nameof(IParser.RawRecord)}:{Environment.NewLine}{rawRecord}");
+ }
+ catch { }
+ }
+
+ if (context.Writer != null)
+ {
+ details.AppendLine($"{nameof(IWriter)} state:");
+ details.AppendLine($"{indent}{nameof(IWriter.Row)}: {context.Writer.Row}");
+ details.AppendLine($"{indent}{nameof(IWriter.Index)}: {context.Writer.Index}");
+
+ var record = new StringBuilder();
+ if (context.Writer.HeaderRecord != null)
+ {
+ record.Append("[");
+ if (context.Writer.HeaderRecord.Length > 0)
+ {
+ record.Append("\"");
+ record.Append(string.Join("\",\"", context.Writer.HeaderRecord));
+ record.Append("\"");
+ }
+ record.Append("]");
+ }
+ details.AppendLine($"{indent}{nameof(IWriter.HeaderRecord)}:{Environment.NewLine}{context.Writer.Row}");
+ }
+
+ return $"{message}{Environment.NewLine}{details}";
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvMode.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvMode.cs
new file mode 100644
index 0000000..af11bab
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvMode.cs
@@ -0,0 +1,43 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Mode to use when parsing and writing.
+ /// </summary>
+ public enum CsvMode
+ {
+ /// <summary>
+ /// Uses RFC 4180 format (default).
+ /// If a field contains a <see cref="CsvConfiguration.Delimiter"/> or <see cref="CsvConfiguration.NewLine"/>,
+ /// it is wrapped in <see cref="CsvConfiguration.Quote"/>s.
+ /// If quoted field contains a <see cref="CsvConfiguration.Quote"/>, it is preceded by <see cref="CsvConfiguration.Escape"/>.
+ /// </summary>
+ RFC4180 = 0,
+
+ /// <summary>
+ /// Uses escapes.
+ /// If a field contains a <see cref="CsvConfiguration.Delimiter"/>, <see cref="CsvConfiguration.NewLine"/>,
+ /// or <see cref="CsvConfiguration.Escape"/>, it is preceded by <see cref="CsvConfiguration.Escape"/>.
+ /// Newline defaults to \n.
+ /// </summary>
+ Escape,
+
+ /// <summary>
+ /// Doesn't use quotes or escapes.
+ /// This will ignore quoting and escape characters. This means a field cannot contain a
+ /// <see cref="CsvConfiguration.Delimiter"/>, <see cref="CsvConfiguration.Quote"/>, or
+ /// <see cref="CsvConfiguration.NewLine"/>, as they cannot be escaped.
+ /// </summary>
+ NoEscape
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvParser.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvParser.cs
new file mode 100644
index 0000000..6d0db59
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvParser.cs
@@ -0,0 +1,1194 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Delegates;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Parses a CSV file.
+ /// </summary>
+ public class CsvParser : IParser, IDisposable
+ {
+ private readonly IParserConfiguration configuration;
+ private readonly FieldCache fieldCache = new FieldCache();
+ private readonly TextReader reader;
+ private readonly char quote;
+ private readonly char escape;
+ private readonly bool countBytes;
+ private readonly Encoding encoding;
+ private readonly bool ignoreBlankLines;
+ private readonly char comment;
+ private readonly bool allowComments;
+ private readonly BadDataFound badDataFound;
+ private readonly bool lineBreakInQuotedFieldIsBadData;
+ private readonly TrimOptions trimOptions;
+ private readonly char[] whiteSpaceChars;
+ private readonly bool leaveOpen;
+ private readonly CsvMode mode;
+ private readonly string newLine;
+ private readonly char newLineFirstChar;
+ private readonly bool isNewLineSet;
+ private readonly bool cacheFields;
+ private readonly string[] delimiterValues;
+ private readonly bool detectDelimiter;
+ private readonly double maxFieldSize;
+
+ private string delimiter;
+ private char delimiterFirstChar;
+ private char[] buffer;
+ private int bufferSize;
+ private int charsRead;
+ private int bufferPosition;
+ private int rowStartPosition;
+ private int fieldStartPosition;
+ private int row;
+ private int rawRow;
+ private long charCount;
+ private long byteCount;
+ private bool inQuotes;
+ private bool inEscape;
+ private Field[] fields;
+ private string[] processedFields;
+ private int fieldsPosition;
+ private bool disposed;
+ private int quoteCount;
+ private char[] processFieldBuffer;
+ private int processFieldBufferSize;
+ private ParserState state;
+ private int delimiterPosition = 1;
+ private int newLinePosition = 1;
+ private bool fieldIsBadData;
+ private bool fieldIsQuoted;
+ private bool isProcessingField;
+ private bool isRecordProcessed;
+ private string[]? record;
+
+ /// <inheritdoc/>
+ public long CharCount => charCount;
+
+ /// <inheritdoc/>
+ public long ByteCount => byteCount;
+
+ /// <inheritdoc/>
+ public int Row => row;
+
+ /// <inheritdoc/>
+ public string[]? Record
+ {
+ get
+ {
+ if (isRecordProcessed == true)
+ {
+ return this.record;
+ }
+
+ if (fieldsPosition == 0)
+ {
+ return null;
+ }
+
+ var record = new string[fieldsPosition];
+
+ for (var i = 0; i < record.Length; i++)
+ {
+ record[i] = this[i];
+ }
+
+ this.record = record;
+ isRecordProcessed = true;
+
+ return this.record;
+ }
+ }
+
+ /// <inheritdoc/>
+ public string RawRecord => new string(buffer, rowStartPosition, bufferPosition - rowStartPosition);
+
+ /// <inheritdoc/>
+ public int Count => fieldsPosition;
+
+ /// <inheritdoc/>
+ public int RawRow => rawRow;
+
+ /// <inheritdoc/>
+ public string Delimiter => delimiter;
+
+ /// <inheritdoc/>
+ public CsvContext Context { get; private set; }
+
+ /// <inheritdoc/>
+ public IParserConfiguration Configuration => configuration;
+
+ /// <inheritdoc/>
+ public string this[int index]
+ {
+ get
+ {
+ if (isProcessingField)
+ {
+ var message =
+ $"You can't access {nameof(IParser)}[int] or {nameof(IParser)}.{nameof(IParser.Record)} inside of the {nameof(BadDataFound)} callback. " +
+ $"Use {nameof(BadDataFoundArgs)}.{nameof(BadDataFoundArgs.Field)} and {nameof(BadDataFoundArgs)}.{nameof(BadDataFoundArgs.RawRecord)} instead."
+ ;
+
+ throw new ParserException(Context, message);
+ }
+
+ isProcessingField = true;
+
+ var field = GetField(index);
+
+ isProcessingField = false;
+
+ return field;
+ }
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvParser"/> class.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <param name="culture">The culture.</param>
+ /// <param name="leaveOpen">if set to <c>true</c> [leave open].</param>
+ public CsvParser(TextReader reader, CultureInfo culture, bool leaveOpen = false) : this(reader, new CsvConfiguration(culture), leaveOpen) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvParser"/> class.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <param name="configuration">The configuration.</param>
+ /// <param name="leaveOpen">if set to <c>true</c> [leave open].</param>
+ public CsvParser(TextReader reader, IParserConfiguration configuration, bool leaveOpen = false)
+ {
+ this.reader = reader ?? throw new ArgumentNullException(nameof(reader));
+ this.configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
+
+ configuration.Validate();
+
+ Context = new CsvContext(this);
+
+ allowComments = configuration.AllowComments;
+ badDataFound = configuration.BadDataFound;
+ bufferSize = configuration.BufferSize;
+ cacheFields = configuration.CacheFields;
+ comment = configuration.Comment;
+ countBytes = configuration.CountBytes;
+ delimiter = configuration.Delimiter;
+ delimiterFirstChar = configuration.Delimiter[0];
+ delimiterValues = configuration.DetectDelimiterValues;
+ detectDelimiter = configuration.DetectDelimiter;
+ encoding = configuration.Encoding;
+ escape = configuration.Escape;
+ ignoreBlankLines = configuration.IgnoreBlankLines;
+ isNewLineSet = configuration.IsNewLineSet;
+ this.leaveOpen = leaveOpen;
+ lineBreakInQuotedFieldIsBadData = configuration.LineBreakInQuotedFieldIsBadData;
+ maxFieldSize = configuration.MaxFieldSize;
+ newLine = configuration.NewLine;
+ newLineFirstChar = configuration.NewLine[0];
+ mode = configuration.Mode;
+ processFieldBufferSize = configuration.ProcessFieldBufferSize;
+ quote = configuration.Quote;
+ whiteSpaceChars = configuration.WhiteSpaceChars;
+ trimOptions = configuration.TrimOptions;
+
+ buffer = new char[bufferSize];
+ processFieldBuffer = new char[processFieldBufferSize];
+ fields = new Field[128];
+ processedFields = new string[128];
+ }
+
+ /// <inheritdoc/>
+ public bool Read()
+ {
+ isRecordProcessed = false;
+ rowStartPosition = bufferPosition;
+ fieldStartPosition = rowStartPosition;
+ fieldsPosition = 0;
+ quoteCount = 0;
+ row++;
+ rawRow++;
+ var c = '\0';
+ var cPrev = c;
+
+ while (true)
+ {
+ if (bufferPosition >= charsRead)
+ {
+ if (!FillBuffer())
+ {
+ return ReadEndOfFile();
+ }
+
+ if (row == 1 && detectDelimiter)
+ {
+ DetectDelimiter();
+ }
+ }
+
+ if (ReadLine(ref c, ref cPrev) == ReadLineResult.Complete)
+ {
+ return true;
+ }
+ }
+ }
+
+ /// <inheritdoc/>
+ public async Task<bool> ReadAsync()
+ {
+ isRecordProcessed = false;
+ rowStartPosition = bufferPosition;
+ fieldStartPosition = rowStartPosition;
+ fieldsPosition = 0;
+ quoteCount = 0;
+ row++;
+ rawRow++;
+ var c = '\0';
+ var cPrev = c;
+
+ while (true)
+ {
+ if (bufferPosition >= charsRead)
+ {
+ if (!await FillBufferAsync().ConfigureAwait(false))
+ {
+ return ReadEndOfFile();
+ }
+
+ if (row == 1 && detectDelimiter)
+ {
+ DetectDelimiter();
+ }
+ }
+
+ if (ReadLine(ref c, ref cPrev) == ReadLineResult.Complete)
+ {
+ return true;
+ }
+ }
+ }
+
+ private void DetectDelimiter()
+ {
+ var text = new string(buffer, 0, charsRead);
+ var newDelimiter = configuration.GetDelimiter(new GetDelimiterArgs(text, configuration));
+ if (newDelimiter != null)
+ {
+ delimiter = newDelimiter;
+ delimiterFirstChar = newDelimiter[0];
+ configuration.Validate();
+ }
+ }
+
+ private ReadLineResult ReadLine(ref char c, ref char cPrev)
+ {
+ while (bufferPosition < charsRead)
+ {
+ if (state != ParserState.None)
+ {
+ // Continue the state before doing anything else.
+ ReadLineResult result;
+ switch (state)
+ {
+ case ParserState.Spaces:
+ result = ReadSpaces(ref c);
+ break;
+ case ParserState.BlankLine:
+ result = ReadBlankLine(ref c);
+ break;
+ case ParserState.Delimiter:
+ result = ReadDelimiter(ref c);
+ break;
+ case ParserState.LineEnding:
+ result = ReadLineEnding(ref c);
+ break;
+ case ParserState.NewLine:
+ result = ReadNewLine(ref c);
+ break;
+ default:
+ throw new InvalidOperationException($"Parser state '{state}' is not valid.");
+ }
+
+ var shouldReturn =
+ // Buffer needs to be filled.
+ result == ReadLineResult.Incomplete ||
+ // Done reading row.
+ result == ReadLineResult.Complete && (state == ParserState.LineEnding || state == ParserState.NewLine)
+ ;
+
+ if (result == ReadLineResult.Complete)
+ {
+ state = ParserState.None;
+ }
+
+ if (shouldReturn)
+ {
+ return result;
+ }
+ }
+
+ cPrev = c;
+ c = buffer[bufferPosition];
+ bufferPosition++;
+ charCount++;
+
+ if (countBytes)
+ {
+ byteCount += encoding.GetByteCount(new char[] { c });
+ }
+
+ if (maxFieldSize > 0 && bufferPosition - fieldStartPosition - 1 > maxFieldSize)
+ {
+ throw new MaxFieldSizeException(Context);
+ }
+
+ var isFirstCharOfRow = rowStartPosition == bufferPosition - 1;
+ if (isFirstCharOfRow && (allowComments && c == comment || ignoreBlankLines && ((c == '\r' || c == '\n') && !isNewLineSet || c == newLineFirstChar && isNewLineSet)))
+ {
+ state = ParserState.BlankLine;
+ var result = ReadBlankLine(ref c);
+ if (result == ReadLineResult.Complete)
+ {
+ state = ParserState.None;
+
+ continue;
+ }
+ else
+ {
+ return ReadLineResult.Incomplete;
+ }
+ }
+
+ if (mode == CsvMode.RFC4180)
+ {
+ var isFirstCharOfField = fieldStartPosition == bufferPosition - 1;
+ if (isFirstCharOfField)
+ {
+ if ((trimOptions & TrimOptions.Trim) == TrimOptions.Trim && ArrayHelper.Contains(whiteSpaceChars, c))
+ {
+ // Skip through whitespace. This is so we can process the field later.
+ var result = ReadSpaces(ref c);
+ if (result == ReadLineResult.Incomplete)
+ {
+ fieldStartPosition = bufferPosition;
+ return result;
+ }
+ }
+
+ // Fields are only quoted if the first character is a quote.
+ // If not, read until a delimiter or newline is found.
+ fieldIsQuoted = c == quote;
+ }
+
+ if (fieldIsQuoted)
+ {
+ if (c == quote || c == escape)
+ {
+ quoteCount++;
+
+ if (!inQuotes && !isFirstCharOfField && cPrev != escape)
+ {
+ fieldIsBadData = true;
+ }
+ else if (!fieldIsBadData)
+ {
+ // Don't process field quotes after bad data has been detected.
+ inQuotes = !inQuotes;
+ }
+ }
+
+ if (inQuotes)
+ {
+ if (c == '\r' || c == '\n' && cPrev != '\r')
+ {
+ rawRow++;
+ }
+
+ // We don't care about anything else if we're in quotes.
+ continue;
+ }
+ }
+ else
+ {
+ if (c == quote || c == escape)
+ {
+ // If the field isn't quoted but contains a
+ // quote or escape, it's has bad data.
+ fieldIsBadData = true;
+ }
+ }
+ }
+ else if (mode == CsvMode.Escape)
+ {
+ if (inEscape)
+ {
+ inEscape = false;
+
+ continue;
+ }
+
+ if (c == escape)
+ {
+ inEscape = true;
+
+ continue;
+ }
+ }
+
+ if (c == delimiterFirstChar)
+ {
+ state = ParserState.Delimiter;
+ var result = ReadDelimiter(ref c);
+ if (result == ReadLineResult.Incomplete)
+ {
+ return result;
+ }
+
+ state = ParserState.None;
+
+ continue;
+ }
+
+ if (!isNewLineSet && (c == '\r' || c == '\n'))
+ {
+ state = ParserState.LineEnding;
+ var result = ReadLineEnding(ref c);
+ if (result == ReadLineResult.Complete)
+ {
+ state = ParserState.None;
+ }
+
+ return result;
+ }
+
+ if (isNewLineSet && c == newLineFirstChar)
+ {
+ state = ParserState.NewLine;
+ var result = ReadNewLine(ref c);
+ if (result == ReadLineResult.Complete)
+ {
+ state = ParserState.None;
+ }
+
+ return result;
+ }
+ }
+
+ return ReadLineResult.Incomplete;
+ }
+
+ private ReadLineResult ReadSpaces(ref char c)
+ {
+ while (ArrayHelper.Contains(whiteSpaceChars, c))
+ {
+ if (bufferPosition >= charsRead)
+ {
+ return ReadLineResult.Incomplete;
+ }
+
+ c = buffer[bufferPosition];
+ bufferPosition++;
+ charCount++;
+ if (countBytes)
+ {
+ byteCount += encoding.GetByteCount(new char[] { c });
+ }
+ }
+
+ return ReadLineResult.Complete;
+ }
+
+ private ReadLineResult ReadBlankLine(ref char c)
+ {
+ while (bufferPosition < charsRead)
+ {
+ if (c == '\r' || c == '\n')
+ {
+ var result = ReadLineEnding(ref c);
+ if (result == ReadLineResult.Complete)
+ {
+ rowStartPosition = bufferPosition;
+ fieldStartPosition = rowStartPosition;
+ row++;
+ rawRow++;
+ }
+
+ return result;
+ }
+
+ c = buffer[bufferPosition];
+ bufferPosition++;
+ charCount++;
+ if (countBytes)
+ {
+ byteCount += encoding.GetByteCount(new char[] { c });
+ }
+ }
+
+ return ReadLineResult.Incomplete;
+ }
+
+ private ReadLineResult ReadDelimiter(ref char c)
+ {
+ for (var i = delimiterPosition; i < delimiter.Length; i++)
+ {
+ if (bufferPosition >= charsRead)
+ {
+ return ReadLineResult.Incomplete;
+ }
+
+ delimiterPosition++;
+
+ c = buffer[bufferPosition];
+ if (c != delimiter[i])
+ {
+ c = buffer[bufferPosition - 1];
+ delimiterPosition = 1;
+
+ return ReadLineResult.Complete;
+ }
+
+ bufferPosition++;
+ charCount++;
+ if (countBytes)
+ {
+ byteCount += encoding.GetByteCount(new[] { c });
+ }
+
+ if (bufferPosition >= charsRead)
+ {
+ return ReadLineResult.Incomplete;
+ }
+ }
+
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition - delimiter.Length);
+
+ fieldStartPosition = bufferPosition;
+ delimiterPosition = 1;
+ fieldIsBadData = false;
+
+ return ReadLineResult.Complete;
+ }
+
+ private ReadLineResult ReadLineEnding(ref char c)
+ {
+ var lessChars = 1;
+
+ if (c == '\r')
+ {
+ if (bufferPosition >= charsRead)
+ {
+ return ReadLineResult.Incomplete;
+ }
+
+ c = buffer[bufferPosition];
+
+ if (c == '\n')
+ {
+ lessChars++;
+ bufferPosition++;
+ charCount++;
+ if (countBytes)
+ {
+ byteCount += encoding.GetByteCount(new char[] { c });
+ }
+ }
+ }
+
+ if (state == ParserState.LineEnding)
+ {
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition - lessChars);
+ }
+
+ fieldIsBadData = false;
+
+ return ReadLineResult.Complete;
+ }
+
+ private ReadLineResult ReadNewLine(ref char c)
+ {
+ for (var i = newLinePosition; i < newLine.Length; i++)
+ {
+ if (bufferPosition >= charsRead)
+ {
+ return ReadLineResult.Incomplete;
+ }
+
+ newLinePosition++;
+
+ c = buffer[bufferPosition];
+ if (c != newLine[i])
+ {
+ c = buffer[bufferPosition - 1];
+ newLinePosition = 1;
+
+ return ReadLineResult.Complete;
+ }
+
+ bufferPosition++;
+ charCount++;
+ if (countBytes)
+ {
+ byteCount += encoding.GetByteCount(new[] { c });
+ }
+
+ if (bufferPosition >= charsRead)
+ {
+ return ReadLineResult.Incomplete;
+ }
+ }
+
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition - newLine.Length);
+
+ fieldStartPosition = bufferPosition;
+ newLinePosition = 1;
+ fieldIsBadData = false;
+
+ return ReadLineResult.Complete;
+ }
+
+ private bool ReadEndOfFile()
+ {
+ var state = this.state;
+ this.state = ParserState.None;
+
+ if (state == ParserState.BlankLine)
+ {
+ return false;
+ }
+
+ if (state == ParserState.Delimiter)
+ {
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition - delimiter.Length);
+
+ fieldStartPosition = bufferPosition;
+
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition);
+
+ return true;
+ }
+
+ if (state == ParserState.LineEnding)
+ {
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition - 1);
+
+ return true;
+ }
+
+ if (state == ParserState.NewLine)
+ {
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition - newLine.Length);
+
+ return true;
+ }
+
+ if (rowStartPosition < bufferPosition)
+ {
+ AddField(fieldStartPosition, bufferPosition - fieldStartPosition);
+ }
+
+ return fieldsPosition > 0;
+ }
+
+ private void AddField(int start, int length)
+ {
+ if (fieldsPosition >= fields.Length)
+ {
+ var newSize = fields.Length * 2;
+ Array.Resize(ref fields, newSize);
+ Array.Resize(ref processedFields, newSize);
+ }
+
+ ref var field = ref fields[fieldsPosition];
+ field.Start = start - rowStartPosition;
+ field.Length = length;
+ field.QuoteCount = quoteCount;
+ field.IsBad = fieldIsBadData;
+ field.IsProcessed = false;
+
+ fieldsPosition++;
+ quoteCount = 0;
+ }
+
+ private bool FillBuffer()
+ {
+ // Don't forget the async method below.
+
+ if (rowStartPosition == 0 && charCount > 0 && charsRead == bufferSize)
+ {
+ // The record is longer than the memory buffer. Increase the buffer.
+ bufferSize *= 2;
+ var tempBuffer = new char[bufferSize];
+ buffer.CopyTo(tempBuffer, 0);
+ buffer = tempBuffer;
+ }
+
+ var charsLeft = Math.Max(charsRead - rowStartPosition, 0);
+
+ Array.Copy(buffer, rowStartPosition, buffer, 0, charsLeft);
+
+ fieldStartPosition -= rowStartPosition;
+ rowStartPosition = 0;
+ bufferPosition = charsLeft;
+
+ charsRead = reader.Read(buffer, charsLeft, buffer.Length - charsLeft);
+ if (charsRead == 0)
+ {
+ return false;
+ }
+
+ charsRead += charsLeft;
+
+ return true;
+ }
+
+ private async Task<bool> FillBufferAsync()
+ {
+ if (rowStartPosition == 0 && charCount > 0 && charsRead == bufferSize)
+ {
+ // The record is longer than the memory buffer. Increase the buffer.
+ bufferSize *= 2;
+ var tempBuffer = new char[bufferSize];
+ buffer.CopyTo(tempBuffer, 0);
+ buffer = tempBuffer;
+ }
+
+ var charsLeft = Math.Max(charsRead - rowStartPosition, 0);
+
+ Array.Copy(buffer, rowStartPosition, buffer, 0, charsLeft);
+
+ fieldStartPosition -= rowStartPosition;
+ rowStartPosition = 0;
+ bufferPosition = charsLeft;
+
+ charsRead = await reader.ReadAsync(buffer, charsLeft, buffer.Length - charsLeft).ConfigureAwait(false);
+ if (charsRead == 0)
+ {
+ return false;
+ }
+
+ charsRead += charsLeft;
+
+ return true;
+ }
+
+ private string GetField(int index)
+ {
+ if (index > fieldsPosition)
+ {
+ throw new IndexOutOfRangeException();
+ }
+
+ ref var field = ref fields[index];
+
+ if (field.Length == 0)
+ {
+ return string.Empty;
+ }
+
+ if (field.IsProcessed)
+ {
+ return processedFields[index];
+ }
+
+ var start = field.Start + rowStartPosition;
+ var length = field.Length;
+ var quoteCount = field.QuoteCount;
+
+ ProcessedField processedField;
+ switch (mode)
+ {
+ case CsvMode.RFC4180:
+ processedField = field.IsBad
+ ? ProcessRFC4180BadField(start, length)
+ : ProcessRFC4180Field(start, length, quoteCount);
+ break;
+ case CsvMode.Escape:
+ processedField = ProcessEscapeField(start, length);
+ break;
+ case CsvMode.NoEscape:
+ processedField = ProcessNoEscapeField(start, length);
+ break;
+ default:
+ throw new InvalidOperationException($"ParseMode '{mode}' is not handled.");
+ }
+
+ var value = cacheFields
+ ? fieldCache.GetField(processedField.Buffer, processedField.Start, processedField.Length)
+ : new string(processedField.Buffer, processedField.Start, processedField.Length);
+
+ processedFields[index] = value;
+ field.IsProcessed = true;
+
+ return value;
+ }
+
+ /// <summary>
+ /// Processes a field that complies with RFC4180.
+ /// </summary>
+ /// <param name="start">The start index of the field.</param>
+ /// <param name="length">The length of the field.</param>
+ /// <param name="quoteCount">The number of counted quotes.</param>
+ /// <returns>The processed field.</returns>
+ protected ProcessedField ProcessRFC4180Field(int start, int length, int quoteCount)
+ {
+ var newStart = start;
+ var newLength = length;
+
+ if ((trimOptions & TrimOptions.Trim) == TrimOptions.Trim)
+ {
+ ArrayHelper.Trim(buffer, ref newStart, ref newLength, whiteSpaceChars);
+ }
+
+ if (quoteCount == 0)
+ {
+ // Not quoted.
+ // No processing needed.
+
+ return new ProcessedField(newStart, newLength, buffer);
+ }
+
+ if (buffer[newStart] != quote || buffer[newStart + newLength - 1] != quote || newLength == 1 && buffer[newStart] == quote)
+ {
+ // If the field doesn't have quotes on the ends, or the field is a single quote char, it's bad data.
+ return ProcessRFC4180BadField(start, length);
+ }
+
+ if (lineBreakInQuotedFieldIsBadData)
+ {
+ for (var i = newStart; i < newStart + newLength; i++)
+ {
+ if (buffer[i] == '\r' || buffer[i] == '\n')
+ {
+ return ProcessRFC4180BadField(start, length);
+ }
+ }
+ }
+
+ // Remove the quotes from the ends.
+ newStart += 1;
+ newLength -= 2;
+
+ if ((trimOptions & TrimOptions.InsideQuotes) == TrimOptions.InsideQuotes)
+ {
+ ArrayHelper.Trim(buffer, ref newStart, ref newLength, whiteSpaceChars);
+ }
+
+ if (quoteCount == 2)
+ {
+ // The only quotes are the ends of the field.
+ // No more processing is needed.
+ return new ProcessedField(newStart, newLength, buffer);
+ }
+
+ if (newLength > processFieldBuffer.Length)
+ {
+ // Make sure the field processing buffer is large engough.
+ while (newLength > processFieldBufferSize)
+ {
+ processFieldBufferSize *= 2;
+ }
+
+ processFieldBuffer = new char[processFieldBufferSize];
+ }
+
+ // Remove escapes.
+ var inEscape = false;
+ var position = 0;
+ for (var i = newStart; i < newStart + newLength; i++)
+ {
+ var c = buffer[i];
+
+ if (inEscape)
+ {
+ inEscape = false;
+ }
+ else if (c == escape)
+ {
+ inEscape = true;
+
+ continue;
+ }
+
+ processFieldBuffer[position] = c;
+ position++;
+ }
+
+ return new ProcessedField(0, position, processFieldBuffer);
+ }
+
+ /// <summary>
+ /// Processes a field that does not comply with RFC4180.
+ /// </summary>
+ /// <param name="start">The start index of the field.</param>
+ /// <param name="length">The length of the field.</param>
+ /// <returns>The processed field.</returns>
+ protected ProcessedField ProcessRFC4180BadField(int start, int length)
+ {
+ // If field is already known to be bad, different rules can be applied.
+
+ var args = new BadDataFoundArgs(new string(buffer, start, length), RawRecord, Context);
+ badDataFound?.Invoke(args);
+
+ var newStart = start;
+ var newLength = length;
+
+ if ((trimOptions & TrimOptions.Trim) == TrimOptions.Trim)
+ {
+ ArrayHelper.Trim(buffer, ref newStart, ref newLength, whiteSpaceChars);
+ }
+
+ if (buffer[newStart] != quote)
+ {
+ // If the field doesn't start with a quote, don't process it.
+ return new ProcessedField(newStart, newLength, buffer);
+ }
+
+ if (newLength > processFieldBuffer.Length)
+ {
+ // Make sure the field processing buffer is large engough.
+ while (newLength > processFieldBufferSize)
+ {
+ processFieldBufferSize *= 2;
+ }
+
+ processFieldBuffer = new char[processFieldBufferSize];
+ }
+
+ // Remove escapes until the last quote is found.
+ var inEscape = false;
+ var position = 0;
+ var c = '\0';
+ var doneProcessing = false;
+ for (var i = newStart + 1; i < newStart + newLength; i++)
+ {
+ var cPrev = c;
+ c = buffer[i];
+
+ // a,"b",c
+ // a,"b "" c",d
+ // a,"b "c d",e
+
+ if (inEscape)
+ {
+ inEscape = false;
+
+ if (c == quote)
+ {
+ // Ignore the quote after an escape.
+ continue;
+ }
+ else if (cPrev == quote)
+ {
+ // The escape and quote are the same character.
+ // This is the end of the field.
+ // Don't process escapes for the rest of the field.
+ doneProcessing = true;
+ }
+ }
+
+ if (c == escape && !doneProcessing)
+ {
+ inEscape = true;
+
+ continue;
+ }
+
+ processFieldBuffer[position] = c;
+ position++;
+ }
+
+ return new ProcessedField(0, position, processFieldBuffer);
+ }
+
+ /// <summary>
+ /// Processes an escaped field.
+ /// </summary>
+ /// <param name="start">The start index of the field.</param>
+ /// <param name="length">The length of the field.</param>
+ /// <returns>The processed field.</returns>
+ protected ProcessedField ProcessEscapeField(int start, int length)
+ {
+ var newStart = start;
+ var newLength = length;
+
+ if ((trimOptions & TrimOptions.Trim) == TrimOptions.Trim)
+ {
+ ArrayHelper.Trim(buffer, ref newStart, ref newLength, whiteSpaceChars);
+ }
+
+ if (newLength > processFieldBuffer.Length)
+ {
+ // Make sure the field processing buffer is large engough.
+ while (newLength > processFieldBufferSize)
+ {
+ processFieldBufferSize *= 2;
+ }
+
+ processFieldBuffer = new char[processFieldBufferSize];
+ }
+
+ // Remove escapes.
+ var inEscape = false;
+ var position = 0;
+ for (var i = newStart; i < newStart + newLength; i++)
+ {
+ var c = buffer[i];
+
+ if (inEscape)
+ {
+ inEscape = false;
+ }
+ else if (c == escape)
+ {
+ inEscape = true;
+ continue;
+ }
+
+ processFieldBuffer[position] = c;
+ position++;
+ }
+
+ return new ProcessedField(0, position, processFieldBuffer);
+ }
+
+ /// <inheritdoc/>
+ /// <summary>
+ /// Processes an non-escaped field.
+ /// </summary>
+ /// <param name="start">The start index of the field.</param>
+ /// <param name="length">The length of the field.</param>
+ /// <returns>The processed field.</returns>
+ protected ProcessedField ProcessNoEscapeField(int start, int length)
+ {
+ var newStart = start;
+ var newLength = length;
+
+ if ((trimOptions & TrimOptions.Trim) == TrimOptions.Trim)
+ {
+ ArrayHelper.Trim(buffer, ref newStart, ref newLength, whiteSpaceChars);
+ }
+
+ return new ProcessedField(newStart, newLength, buffer);
+ }
+
+ /// <inheritdoc/>
+ public void Dispose()
+ {
+ // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
+ Dispose(disposing: true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// Disposes the object.
+ /// </summary>
+ /// <param name="disposing">Indicates if the object is being disposed.</param>
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (disposing)
+ {
+ // Dispose managed state (managed objects)
+
+ if (!leaveOpen)
+ {
+ reader?.Dispose();
+ }
+ }
+
+ // Free unmanaged resources (unmanaged objects) and override finalizer
+ // Set large fields to null
+
+ disposed = true;
+ }
+
+ /// <summary>
+ /// Processes a raw field based on configuration.
+ /// This will remove quotes, remove escapes, and trim if configured to.
+ /// </summary>
+ [DebuggerDisplay("Start = {Start}, Length = {Length}, Buffer.Length = {Buffer.Length}")]
+ protected readonly struct ProcessedField
+ {
+ /// <summary>
+ /// The start of the field in the buffer.
+ /// </summary>
+ public readonly int Start;
+
+ /// <summary>
+ /// The length of the field in the buffer.
+ /// </summary>
+ public readonly int Length;
+
+ /// <summary>
+ /// The buffer that contains the field.
+ /// </summary>
+ public readonly char[] Buffer;
+
+ /// <summary>
+ /// Creates a new instance of ProcessedField.
+ /// </summary>
+ /// <param name="start">The start of the field in the buffer.</param>
+ /// <param name="length">The length of the field in the buffer.</param>
+ /// <param name="buffer">The buffer that contains the field.</param>
+ public ProcessedField(int start, int length, char[] buffer)
+ {
+ Start = start;
+ Length = length;
+ Buffer = buffer;
+ }
+ }
+
+ private enum ReadLineResult
+ {
+ None = 0,
+ Complete,
+ Incomplete,
+ }
+
+ private enum ParserState
+ {
+ None = 0,
+ Spaces,
+ BlankLine,
+ Delimiter,
+ LineEnding,
+ NewLine,
+ }
+
+ [DebuggerDisplay("Start = {Start}, Length = {Length}, QuoteCount = {QuoteCount}, IsBad = {IsBad}")]
+ private struct Field
+ {
+ /// <summary>
+ /// Starting position of the field.
+ /// This is an offset from <see cref="rowStartPosition"/>.
+ /// </summary>
+ public int Start;
+
+ public int Length;
+
+ public int QuoteCount;
+
+ public bool IsBad;
+
+ public bool IsProcessed;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvReader.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvReader.cs
new file mode 100644
index 0000000..2b8ee84
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvReader.cs
@@ -0,0 +1,1419 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.IO;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System.Linq;
+using System.Reflection;
+using System.Threading.Tasks;
+using CsvHelper.Expressions;
+using System.Globalization;
+using System.Runtime.CompilerServices;
+using System.Threading;
+using System.Configuration;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Reads data that was parsed from <see cref="IParser" />.
+ /// </summary>
+ public class CsvReader : IReader
+ {
+ private readonly Lazy<RecordManager> recordManager;
+ private readonly bool detectColumnCountChanges;
+ private readonly Dictionary<string, List<int>> namedIndexes = new Dictionary<string, List<int>>();
+ private readonly Dictionary<string, (string, int)> namedIndexCache = new Dictionary<string, (string, int)>();
+ private readonly Dictionary<Type, TypeConverterOptions> typeConverterOptionsCache = new Dictionary<Type, TypeConverterOptions>();
+ private readonly MemberMapData reusableMemberMapData = new MemberMapData(null);
+ private readonly bool hasHeaderRecord;
+ private readonly HeaderValidated headerValidated;
+ private readonly ShouldSkipRecord? shouldSkipRecord;
+ private readonly ReadingExceptionOccurred readingExceptionOccurred;
+ private readonly CultureInfo cultureInfo;
+ private readonly bool ignoreBlankLines;
+ private readonly MissingFieldFound missingFieldFound;
+ private readonly bool includePrivateMembers;
+ private readonly PrepareHeaderForMatch prepareHeaderForMatch;
+
+ private CsvContext context;
+ private bool disposed;
+ private IParser parser;
+ private int columnCount;
+ private int currentIndex = -1;
+ private bool hasBeenRead;
+ private string[]? headerRecord;
+
+ /// <inheritdoc/>
+ public virtual int ColumnCount => columnCount;
+
+ /// <inheritdoc/>
+ public virtual int CurrentIndex => currentIndex;
+
+ /// <inheritdoc/>
+ public virtual string[]? HeaderRecord => headerRecord;
+
+ /// <inheritdoc/>
+ public virtual CsvContext Context => context;
+
+ /// <inheritdoc/>
+ public virtual IReaderConfiguration Configuration { get; private set; }
+
+ /// <inheritdoc/>
+ public virtual IParser Parser => parser;
+
+ /// <summary>
+ /// Creates a new CSV reader using the given <see cref="TextReader" />.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <param name="culture">The culture.</param>
+ /// <param name="leaveOpen"><c>true</c> to leave the <see cref="TextReader"/> open after the <see cref="CsvReader"/> object is disposed, otherwise <c>false</c>.</param>
+ public CsvReader(TextReader reader, CultureInfo culture, bool leaveOpen = false) : this(new CsvParser(reader, culture, leaveOpen)) { }
+
+ /// <summary>
+ /// Creates a new CSV reader using the given <see cref="TextReader" /> and
+ /// <see cref="CsvHelper.Configuration.CsvConfiguration" /> and <see cref="CsvParser" /> as the default parser.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ /// <param name="configuration">The configuration.</param>
+ /// <param name="leaveOpen"><c>true</c> to leave the <see cref="TextReader"/> open after the <see cref="CsvReader"/> object is disposed, otherwise <c>false</c>.</param>
+ public CsvReader(TextReader reader, IReaderConfiguration configuration, bool leaveOpen = false) : this(new CsvParser(reader, configuration, leaveOpen)) { }
+
+ /// <summary>
+ /// Creates a new CSV reader using the given <see cref="IParser" />.
+ /// </summary>
+ /// <param name="parser">The <see cref="IParser" /> used to parse the CSV file.</param>
+ public CsvReader(IParser parser)
+ {
+ Configuration = parser.Configuration as IReaderConfiguration ?? throw new ConfigurationException($"The {nameof(IParser)} configuration must implement {nameof(IReaderConfiguration)} to be used in {nameof(CsvReader)}.");
+
+ this.parser = parser ?? throw new ArgumentNullException(nameof(parser));
+ context = parser.Context ?? throw new InvalidOperationException($"For {nameof(IParser)} to be used in {nameof(CsvReader)}, {nameof(IParser.Context)} must also implement {nameof(CsvContext)}.");
+ context.Reader = this;
+ recordManager = new Lazy<RecordManager>(() => ObjectResolver.Current.Resolve<RecordManager>(this));
+
+ cultureInfo = Configuration.CultureInfo;
+ detectColumnCountChanges = Configuration.DetectColumnCountChanges;
+ hasHeaderRecord = Configuration.HasHeaderRecord;
+ headerValidated = Configuration.HeaderValidated;
+ ignoreBlankLines = Configuration.IgnoreBlankLines;
+ includePrivateMembers = Configuration.IncludePrivateMembers;
+ missingFieldFound = Configuration.MissingFieldFound;
+ prepareHeaderForMatch = Configuration.PrepareHeaderForMatch;
+ readingExceptionOccurred = Configuration.ReadingExceptionOccurred;
+ shouldSkipRecord = Configuration.ShouldSkipRecord;
+ }
+
+ /// <inheritdoc/>
+ public virtual bool ReadHeader()
+ {
+ if (!hasHeaderRecord)
+ {
+ throw new ReaderException(context, "Configuration.HasHeaderRecord is false.");
+ }
+
+ headerRecord = parser.Record;
+ ParseNamedIndexes();
+
+ return headerRecord != null;
+ }
+
+ /// <summary>
+ /// Validates the header to be of the given type.
+ /// </summary>
+ /// <typeparam name="T">The expected type of the header</typeparam>
+ public virtual void ValidateHeader<T>()
+ {
+ ValidateHeader(typeof(T));
+ }
+
+ /// <summary>
+ /// Validates the header to be of the given type.
+ /// </summary>
+ /// <param name="type">The expected type of the header.</param>
+ public virtual void ValidateHeader(Type type)
+ {
+ if (hasHeaderRecord == false)
+ {
+ throw new InvalidOperationException($"Validation can't be performed on a the header if no header exists. {nameof(Configuration.HasHeaderRecord)} can't be false.");
+ }
+
+ CheckHasBeenRead();
+
+ if (headerRecord == null)
+ {
+ throw new InvalidOperationException($"The header must be read before it can be validated.");
+ }
+
+ if (context.Maps[type] == null)
+ {
+ context.Maps.Add(context.AutoMap(type));
+ }
+
+ var map = context.Maps[type];
+ var invalidHeaders = new List<InvalidHeader>();
+ ValidateHeader(map, invalidHeaders);
+
+ var args = new HeaderValidatedArgs(invalidHeaders.ToArray(), context);
+ headerValidated?.Invoke(args);
+ }
+
+ /// <summary>
+ /// Validates the header to be of the given type.
+ /// </summary>
+ /// <param name="map">The mapped classes.</param>
+ /// <param name="invalidHeaders">The invalid headers.</param>
+ protected virtual void ValidateHeader(ClassMap map, List<InvalidHeader> invalidHeaders)
+ {
+ foreach (var parameter in map.ParameterMaps)
+ {
+ if (parameter.Data.Ignore)
+ {
+ continue;
+ }
+
+ if (parameter.Data.IsConstantSet)
+ {
+ // If ConvertUsing and Constant don't require a header.
+ continue;
+ }
+
+ if (parameter.Data.IsIndexSet && !parameter.Data.IsNameSet)
+ {
+ // If there is only an index set, we don't want to validate the header name.
+ continue;
+ }
+
+ if (parameter.ConstructorTypeMap != null)
+ {
+ ValidateHeader(parameter.ConstructorTypeMap, invalidHeaders);
+ }
+ else if (parameter.ReferenceMap != null)
+ {
+ ValidateHeader(parameter.ReferenceMap.Data.Mapping, invalidHeaders);
+ }
+ else
+ {
+ var index = GetFieldIndex(parameter.Data.Names, parameter.Data.NameIndex, true);
+ var isValid = index != -1 || parameter.Data.IsOptional;
+ if (!isValid)
+ {
+ invalidHeaders.Add(new InvalidHeader { Index = parameter.Data.NameIndex, Names = parameter.Data.Names.ToList() });
+ }
+ }
+ }
+
+ foreach (var memberMap in map.MemberMaps)
+ {
+ if (memberMap.Data.Ignore || !CanRead(memberMap))
+ {
+ continue;
+ }
+
+ if (memberMap.Data.ReadingConvertExpression != null || memberMap.Data.IsConstantSet)
+ {
+ // If ConvertUsing and Constant don't require a header.
+ continue;
+ }
+
+ if (memberMap.Data.IsIndexSet && !memberMap.Data.IsNameSet)
+ {
+ // If there is only an index set, we don't want to validate the header name.
+ continue;
+ }
+
+ var index = GetFieldIndex(memberMap.Data.Names, memberMap.Data.NameIndex, true);
+ var isValid = index != -1 || memberMap.Data.IsOptional;
+ if (!isValid)
+ {
+ invalidHeaders.Add(new InvalidHeader { Index = memberMap.Data.NameIndex, Names = memberMap.Data.Names.ToList() });
+ }
+ }
+
+ foreach (var referenceMap in map.ReferenceMaps)
+ {
+ if (!CanRead(referenceMap))
+ {
+ continue;
+ }
+
+ ValidateHeader(referenceMap.Data.Mapping, invalidHeaders);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual bool Read()
+ {
+ // Don't forget about the async method below!
+
+ bool hasMoreRecords;
+ do
+ {
+ hasMoreRecords = parser.Read();
+ hasBeenRead = true;
+ }
+ while (hasMoreRecords && (shouldSkipRecord?.Invoke(new ShouldSkipRecordArgs(this)) ?? false));
+
+ currentIndex = -1;
+
+ if (detectColumnCountChanges && hasMoreRecords)
+ {
+ if (columnCount > 0 && columnCount != parser.Count)
+ {
+ var csvException = new BadDataException(string.Empty, parser.RawRecord, context, "An inconsistent number of columns has been detected.");
+
+ var args = new ReadingExceptionOccurredArgs(csvException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ throw csvException;
+ }
+ }
+
+ columnCount = parser.Count;
+ }
+
+ return hasMoreRecords;
+ }
+
+ /// <inheritdoc/>
+ public virtual async Task<bool> ReadAsync()
+ {
+ bool hasMoreRecords;
+ do
+ {
+ hasMoreRecords = await parser.ReadAsync().ConfigureAwait(false);
+ hasBeenRead = true;
+ }
+ while (hasMoreRecords && (shouldSkipRecord?.Invoke(new ShouldSkipRecordArgs(this)) ?? false));
+
+ currentIndex = -1;
+
+ if (detectColumnCountChanges && hasMoreRecords)
+ {
+ if (columnCount > 0 && columnCount != parser.Count)
+ {
+ var csvException = new BadDataException(string.Empty, parser.RawRecord, context, "An inconsistent number of columns has been detected.");
+
+ var args = new ReadingExceptionOccurredArgs(csvException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ throw csvException;
+ }
+ }
+
+ columnCount = parser.Count;
+ }
+
+ return hasMoreRecords;
+ }
+
+ /// <inheritdoc/>
+ public virtual string? this[int index]
+ {
+ get
+ {
+ CheckHasBeenRead();
+
+ return GetField(index);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual string? this[string name]
+ {
+ get
+ {
+ CheckHasBeenRead();
+
+ return GetField(name);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual string? this[string name, int index]
+ {
+ get
+ {
+ CheckHasBeenRead();
+
+ return GetField(name, index);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual string? GetField(int index)
+ {
+ CheckHasBeenRead();
+
+ // Set the current index being used so we
+ // have more information if an error occurs
+ // when reading records.
+ currentIndex = index;
+
+ if (index >= parser.Count || index < 0)
+ {
+ var args = new MissingFieldFoundArgs(null, index, context);
+ missingFieldFound?.Invoke(args);
+ return default;
+ }
+
+ var field = parser[index];
+
+ return field;
+ }
+
+ /// <inheritdoc/>
+ public virtual string? GetField(string name)
+ {
+ CheckHasBeenRead();
+
+ var index = GetFieldIndex(name);
+ if (index < 0)
+ {
+ return null;
+ }
+
+ return GetField(index);
+ }
+
+ /// <inheritdoc/>
+ public virtual string? GetField(string name, int index)
+ {
+ CheckHasBeenRead();
+
+ var fieldIndex = GetFieldIndex(name, index);
+ if (fieldIndex < 0)
+ {
+ return null;
+ }
+
+ return GetField(fieldIndex);
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetField(Type type, int index)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter(type);
+ return GetField(type, index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetField(Type type, string name)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter(type);
+ return GetField(type, name, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetField(Type type, string name, int index)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter(type);
+ return GetField(type, name, index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetField(Type type, int index, ITypeConverter converter)
+ {
+ CheckHasBeenRead();
+
+ reusableMemberMapData.Index = index;
+ reusableMemberMapData.TypeConverter = converter;
+ if (!typeConverterOptionsCache.TryGetValue(type, out TypeConverterOptions typeConverterOptions))
+ {
+ typeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions { CultureInfo = cultureInfo }, context.TypeConverterOptionsCache.GetOptions(type));
+ typeConverterOptionsCache.Add(type, typeConverterOptions);
+ }
+
+ reusableMemberMapData.TypeConverterOptions = typeConverterOptions;
+
+ var field = GetField(index);
+ return converter.ConvertFromString(field, this, reusableMemberMapData);
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetField(Type type, string name, ITypeConverter converter)
+ {
+ CheckHasBeenRead();
+
+ var index = GetFieldIndex(name);
+ return GetField(type, index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetField(Type type, string name, int index, ITypeConverter converter)
+ {
+ CheckHasBeenRead();
+
+ var fieldIndex = GetFieldIndex(name, index);
+ return GetField(type, fieldIndex, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T>(int index)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter<T>();
+ return GetField<T>(index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T>(string name)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter<T>();
+ return GetField<T>(name, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T>(string name, int index)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter<T>();
+ return GetField<T>(name, index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T>(int index, ITypeConverter converter)
+ {
+ CheckHasBeenRead();
+
+ if (index >= parser.Count || index < 0)
+ {
+ currentIndex = index;
+ var args = new MissingFieldFoundArgs(null, index, context);
+ missingFieldFound?.Invoke(args);
+
+ return default;
+ }
+
+ return (T)GetField(typeof(T), index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T>(string name, ITypeConverter converter)
+ {
+ CheckHasBeenRead();
+
+ var index = GetFieldIndex(name);
+ return GetField<T>(index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T>(string name, int index, ITypeConverter converter)
+ {
+ CheckHasBeenRead();
+
+ var fieldIndex = GetFieldIndex(name, index);
+ return GetField<T>(fieldIndex, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T, TConverter>(int index) where TConverter : ITypeConverter
+ {
+ CheckHasBeenRead();
+
+ var converter = ObjectResolver.Current.Resolve<TConverter>();
+ return GetField<T>(index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T, TConverter>(string name) where TConverter : ITypeConverter
+ {
+ CheckHasBeenRead();
+
+ var converter = ObjectResolver.Current.Resolve<TConverter>();
+ return GetField<T>(name, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetField<T, TConverter>(string name, int index) where TConverter : ITypeConverter
+ {
+ CheckHasBeenRead();
+
+ var converter = ObjectResolver.Current.Resolve<TConverter>();
+ return GetField<T>(name, index, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField(Type type, int index, out object? field)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter(type);
+ return TryGetField(type, index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField(Type type, string name, out object? field)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter(type);
+ return TryGetField(type, name, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField(Type type, string name, int index, out object? field)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter(type);
+ return TryGetField(type, name, index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField(Type type, int index, ITypeConverter converter, out object? field)
+ {
+ CheckHasBeenRead();
+
+ // TypeConverter.IsValid() just wraps a
+ // ConvertFrom() call in a try/catch, so lets not
+ // do it twice and just do it ourselves.
+ try
+ {
+ field = GetField(type, index, converter);
+ return true;
+ }
+ catch
+ {
+ field = type.GetTypeInfo().IsValueType ? ObjectResolver.Current.Resolve(type) : null;
+ return false;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField(Type type, string name, ITypeConverter converter, out object? field)
+ {
+ CheckHasBeenRead();
+
+ var index = GetFieldIndex(name, isTryGet: true);
+ if (index == -1)
+ {
+ field = type.GetTypeInfo().IsValueType ? ObjectResolver.Current.Resolve(type) : null;
+ return false;
+ }
+
+ return TryGetField(type, index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField(Type type, string name, int index, ITypeConverter converter, out object? field)
+ {
+ CheckHasBeenRead();
+
+ var fieldIndex = GetFieldIndex(name, index, true);
+ if (fieldIndex == -1)
+ {
+ field = type.GetTypeInfo().IsValueType ? ObjectResolver.Current.Resolve(type) : null;
+ return false;
+ }
+
+ return TryGetField(type, fieldIndex, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T>(int index, out T? field)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter<T>();
+ return TryGetField(index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T>(string name, out T? field)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter<T>();
+ return TryGetField(name, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T>(string name, int index, out T? field)
+ {
+ CheckHasBeenRead();
+
+ var converter = context.TypeConverterCache.GetConverter<T>();
+ return TryGetField(name, index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T>(int index, ITypeConverter converter, out T? field)
+ {
+ CheckHasBeenRead();
+
+ // TypeConverter.IsValid() just wraps a
+ // ConvertFrom() call in a try/catch, so lets not
+ // do it twice and just do it ourselves.
+ try
+ {
+ field = GetField<T>(index, converter);
+ return true;
+ }
+ catch
+ {
+ field = default;
+ return false;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T>(string name, ITypeConverter converter, out T? field)
+ {
+ CheckHasBeenRead();
+
+ var index = GetFieldIndex(name, isTryGet: true);
+ if (index == -1)
+ {
+ field = default;
+ return false;
+ }
+
+ return TryGetField(index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T>(string name, int index, ITypeConverter converter, out T? field)
+ {
+ CheckHasBeenRead();
+
+ var fieldIndex = GetFieldIndex(name, index, true);
+ if (fieldIndex == -1)
+ {
+ field = default;
+ return false;
+ }
+
+ return TryGetField(fieldIndex, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T, TConverter>(int index, out T? field) where TConverter : ITypeConverter
+ {
+ CheckHasBeenRead();
+
+ var converter = ObjectResolver.Current.Resolve<TConverter>();
+ return TryGetField(index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T, TConverter>(string name, out T? field) where TConverter : ITypeConverter
+ {
+ CheckHasBeenRead();
+
+ var converter = ObjectResolver.Current.Resolve<TConverter>();
+ return TryGetField(name, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual bool TryGetField<T, TConverter>(string name, int index, out T? field) where TConverter : ITypeConverter
+ {
+ CheckHasBeenRead();
+
+ var converter = ObjectResolver.Current.Resolve<TConverter>();
+ return TryGetField(name, index, converter, out field);
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetRecord<T>()
+ {
+ CheckHasBeenRead();
+
+ if (headerRecord == null && hasHeaderRecord)
+ {
+ ReadHeader();
+ ValidateHeader<T>();
+
+ if (!Read())
+ {
+ return default;
+ }
+ }
+
+ T record;
+ try
+ {
+ record = recordManager.Value.Create<T>();
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ record = default;
+ }
+
+ return record;
+ }
+
+ /// <inheritdoc/>
+ public virtual T? GetRecord<T>(T anonymousTypeDefinition)
+ {
+ if (anonymousTypeDefinition == null)
+ {
+ throw new ArgumentNullException(nameof(anonymousTypeDefinition));
+ }
+
+ if (!anonymousTypeDefinition.GetType().IsAnonymous())
+ {
+ throw new ArgumentException($"Argument is not an anonymous type.", nameof(anonymousTypeDefinition));
+ }
+
+ return GetRecord<T>();
+ }
+
+ /// <inheritdoc/>
+ public virtual object? GetRecord(Type type)
+ {
+ CheckHasBeenRead();
+
+ if (headerRecord == null && hasHeaderRecord)
+ {
+ ReadHeader();
+ ValidateHeader(type);
+
+ if (!Read())
+ {
+ return null;
+ }
+ }
+
+ object record;
+ try
+ {
+ record = recordManager.Value.Create(type);
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ record = default;
+ }
+
+ return record;
+ }
+
+ /// <inheritdoc/>
+ public virtual IEnumerable<T> GetRecords<T>()
+ {
+ if (disposed)
+ {
+ throw new ObjectDisposedException(nameof(CsvReader),
+ "GetRecords<T>() returns an IEnumerable<T> that yields records. This means that the method isn't actually called until " +
+ "you try and access the values. e.g. .ToList() Did you create CsvReader inside a using block and are now trying to access " +
+ "the records outside of that using block?"
+ );
+ }
+
+ // Don't need to check if it's been read
+ // since we're doing the reading ourselves.
+
+ if (hasHeaderRecord && headerRecord == null)
+ {
+ if (!Read())
+ {
+ yield break;
+ }
+
+ ReadHeader();
+ ValidateHeader<T>();
+ }
+
+ while (Read())
+ {
+ T record;
+ try
+ {
+ record = recordManager.Value.Create<T>();
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ // If the callback doesn't throw, keep going.
+ continue;
+ }
+
+ yield return record;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual IEnumerable<T> GetRecords<T>(T anonymousTypeDefinition)
+ {
+ if (anonymousTypeDefinition == null)
+ {
+ throw new ArgumentNullException(nameof(anonymousTypeDefinition));
+ }
+
+ if (!anonymousTypeDefinition.GetType().IsAnonymous())
+ {
+ throw new ArgumentException($"Argument is not an anonymous type.", nameof(anonymousTypeDefinition));
+ }
+
+ return GetRecords<T>();
+ }
+
+ /// <inheritdoc/>
+ public virtual IEnumerable<object?> GetRecords(Type type)
+ {
+ if (disposed)
+ {
+ throw new ObjectDisposedException(nameof(CsvReader),
+ "GetRecords<object>() returns an IEnumerable<T> that yields records. This means that the method isn't actually called until " +
+ "you try and access the values. e.g. .ToList() Did you create CsvReader inside a using block and are now trying to access " +
+ "the records outside of that using block?"
+ );
+ }
+
+ // Don't need to check if it's been read
+ // since we're doing the reading ourselves.
+
+ if (hasHeaderRecord && headerRecord == null)
+ {
+ if (!Read())
+ {
+ yield break;
+ }
+
+ ReadHeader();
+ ValidateHeader(type);
+ }
+
+ while (Read())
+ {
+ object? record;
+ try
+ {
+ record = recordManager.Value.Create(type);
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ // If the callback doesn't throw, keep going.
+ continue;
+ }
+
+ yield return record;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual IEnumerable<T> EnumerateRecords<T>(T record)
+ {
+ if (disposed)
+ {
+ throw new ObjectDisposedException(nameof(CsvReader),
+ "GetRecords<T>() returns an IEnumerable<T> that yields records. This means that the method isn't actually called until " +
+ "you try and access the values. e.g. .ToList() Did you create CsvReader inside a using block and are now trying to access " +
+ "the records outside of that using block?"
+ );
+ }
+
+ // Don't need to check if it's been read
+ // since we're doing the reading ourselves.
+
+ if (hasHeaderRecord && headerRecord == null)
+ {
+ if (!Read())
+ {
+ yield break;
+ }
+
+ ReadHeader();
+ ValidateHeader<T>();
+ }
+
+ while (Read())
+ {
+ try
+ {
+ recordManager.Value.Hydrate(record);
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ // If the callback doesn't throw, keep going.
+ continue;
+ }
+
+ yield return record;
+ }
+ }
+
+#if !NET45
+ /// <inheritdoc/>
+ public virtual async IAsyncEnumerable<T> GetRecordsAsync<T>([EnumeratorCancellation] CancellationToken cancellationToken = default(CancellationToken))
+ {
+ if (disposed)
+ {
+ throw new ObjectDisposedException(nameof(CsvReader),
+ "GetRecords<T>() returns an IEnumerable<T> that yields records. This means that the method isn't actually called until " +
+ "you try and access the values. Did you create CsvReader inside a using block and are now trying to access " +
+ "the records outside of that using block?"
+ );
+ }
+
+ // Don't need to check if it's been read
+ // since we're doing the reading ourselves.
+
+ if (hasHeaderRecord && headerRecord == null)
+ {
+ if (!await ReadAsync().ConfigureAwait(false))
+ {
+ yield break;
+ }
+
+ ReadHeader();
+ ValidateHeader<T>();
+ }
+
+ while (await ReadAsync().ConfigureAwait(false))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ T record;
+ try
+ {
+ record = recordManager.Value.Create<T>();
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ // If the callback doesn't throw, keep going.
+ continue;
+ }
+
+ yield return record;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual IAsyncEnumerable<T> GetRecordsAsync<T>(T anonymousTypeDefinition, CancellationToken cancellationToken = default)
+ {
+ if (anonymousTypeDefinition == null)
+ {
+ throw new ArgumentNullException(nameof(anonymousTypeDefinition));
+ }
+
+ if (!anonymousTypeDefinition.GetType().IsAnonymous())
+ {
+ throw new ArgumentException($"Argument is not an anonymous type.", nameof(anonymousTypeDefinition));
+ }
+
+ return GetRecordsAsync<T>(cancellationToken);
+ }
+
+ /// <inheritdoc/>
+ public virtual async IAsyncEnumerable<object?> GetRecordsAsync(Type type, [EnumeratorCancellation] CancellationToken cancellationToken = default)
+ {
+ if (disposed)
+ {
+ throw new ObjectDisposedException(nameof(CsvReader),
+ "GetRecords<object>() returns an IEnumerable<T> that yields records. This means that the method isn't actually called until " +
+ "you try and access the values. Did you create CsvReader inside a using block and are now trying to access " +
+ "the records outside of that using block?"
+ );
+ }
+
+ // Don't need to check if it's been read
+ // since we're doing the reading ourselves.
+
+ if (hasHeaderRecord && headerRecord == null)
+ {
+ if (!await ReadAsync().ConfigureAwait(false))
+ {
+ yield break;
+ }
+
+ ReadHeader();
+ ValidateHeader(type);
+ }
+
+ while (await ReadAsync().ConfigureAwait(false))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ object record;
+ try
+ {
+ record = recordManager.Value.Create(type);
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ // If the callback doesn't throw, keep going.
+ continue;
+ }
+
+ yield return record;
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual async IAsyncEnumerable<T> EnumerateRecordsAsync<T>(T record, [EnumeratorCancellation] CancellationToken cancellationToken = default)
+ {
+ if (disposed)
+ {
+ throw new ObjectDisposedException(nameof(CsvReader),
+ "GetRecords<T>() returns an IEnumerable<T> that yields records. This means that the method isn't actually called until " +
+ "you try and access the values. Did you create CsvReader inside a using block and are now trying to access " +
+ "the records outside of that using block?"
+ );
+ }
+
+ // Don't need to check if it's been read
+ // since we're doing the reading ourselves.
+
+ if (hasHeaderRecord && headerRecord == null)
+ {
+ if (!await ReadAsync().ConfigureAwait(false))
+ {
+ yield break;
+ }
+
+ ReadHeader();
+ ValidateHeader<T>();
+ }
+
+ while (await ReadAsync().ConfigureAwait(false))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ try
+ {
+ recordManager.Value.Hydrate(record);
+ }
+ catch (Exception ex)
+ {
+ var csvHelperException = ex as CsvHelperException ?? new ReaderException(context, "An unexpected error occurred.", ex);
+
+ var args = new ReadingExceptionOccurredArgs(csvHelperException);
+ if (readingExceptionOccurred?.Invoke(args) ?? true)
+ {
+ if (ex is CsvHelperException)
+ {
+ throw;
+ }
+ else
+ {
+ throw csvHelperException;
+ }
+ }
+
+ // If the callback doesn't throw, keep going.
+ continue;
+ }
+
+ yield return record;
+ }
+ }
+#endif
+
+ /// <summary>
+ /// Gets the index of the field with the given name.
+ /// </summary>
+ /// <param name="name">The name of the field.</param>
+ /// <param name="index">The index of the field.</param>
+ /// <param name="isTryGet">Indicates if a TryGet is executed.</param>
+ /// <returns>The index of the field.</returns>
+ public virtual int GetFieldIndex(string name, int index = 0, bool isTryGet = false)
+ {
+ return GetFieldIndex(new[] { name }, index, isTryGet);
+ }
+
+ /// <summary>
+ /// Gets the index of the field with the given name.
+ /// </summary>
+ /// <param name="names">The names of the field.</param>
+ /// <param name="index">The index of the field.</param>
+ /// <param name="isTryGet">Indicates if a TryGet is executed.</param>
+ /// <param name="isOptional">Indicates if the field is optional.</param>
+ /// <returns>The index of the field.</returns>
+ public virtual int GetFieldIndex(IEnumerable<string> names, int index = 0, bool isTryGet = false, bool isOptional = false)
+ {
+ if (names == null)
+ {
+ throw new ArgumentNullException(nameof(names));
+ }
+
+ if (!hasHeaderRecord)
+ {
+ throw new ReaderException(context, "There is no header record to determine the index by name.");
+ }
+
+ if (headerRecord == null)
+ {
+ throw new ReaderException(context, "The header has not been read. You must call ReadHeader() before any fields can be retrieved by name.");
+ }
+
+ // Caching the named index speeds up mappings that use ConvertUsing tremendously.
+ var nameKey = string.Join("_", names) + index;
+ if (namedIndexCache.TryGetValue(nameKey, out var cache))
+ {
+ (var cachedName, var cachedIndex) = cache;
+ return namedIndexes[cachedName][cachedIndex];
+ }
+
+ // Check all possible names for this field.
+ string name = null;
+ var i = 0;
+ foreach (var n in names)
+ {
+ // Get the list of indexes for this name.
+ var args = new PrepareHeaderForMatchArgs(n, i);
+ var fieldName = prepareHeaderForMatch(args);
+ if (namedIndexes.ContainsKey(fieldName))
+ {
+ name = fieldName;
+ break;
+ }
+
+ i++;
+ }
+
+ // Check if the index position exists.
+ if (name == null || index >= namedIndexes[name].Count)
+ {
+ // It doesn't exist. The field is missing.
+ if (!isTryGet && !isOptional)
+ {
+ var args = new MissingFieldFoundArgs(names.ToArray(), index, context);
+ missingFieldFound?.Invoke(args);
+ }
+
+ return -1;
+ }
+
+ namedIndexCache.Add(nameKey, (name, index));
+
+ return namedIndexes[name][index];
+ }
+
+ /// <summary>
+ /// Indicates if values can be read.
+ /// </summary>
+ /// <param name="memberMap">The member map.</param>
+ /// <returns>True if values can be read.</returns>
+ public virtual bool CanRead(MemberMap memberMap)
+ {
+ var cantRead =
+ // Ignored member;
+ memberMap.Data.Ignore;
+
+ var property = memberMap.Data.Member as PropertyInfo;
+ if (property != null)
+ {
+ cantRead = cantRead ||
+ // Properties that don't have a public setter
+ // and we are honoring the accessor modifier.
+ property.GetSetMethod() == null && !includePrivateMembers ||
+ // Properties that don't have a setter at all.
+ property.GetSetMethod(true) == null;
+ }
+
+ return !cantRead;
+ }
+
+ /// <summary>
+ /// Indicates if values can be read.
+ /// </summary>
+ /// <param name="memberReferenceMap">The member reference map.</param>
+ /// <returns>True if values can be read.</returns>
+ public virtual bool CanRead(MemberReferenceMap memberReferenceMap)
+ {
+ var cantRead = false;
+
+ var property = memberReferenceMap.Data.Member as PropertyInfo;
+ if (property != null)
+ {
+ cantRead =
+ // Properties that don't have a public setter
+ // and we are honoring the accessor modifier.
+ property.GetSetMethod() == null && !includePrivateMembers ||
+ // Properties that don't have a setter at all.
+ property.GetSetMethod(true) == null;
+ }
+
+ return !cantRead;
+ }
+
+ /// <inheritdoc/>
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// Disposes the object.
+ /// </summary>
+ /// <param name="disposing">Indicates if the object is being disposed.</param>
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ // Dispose managed state (managed objects)
+ if (disposing)
+ {
+ parser.Dispose();
+ }
+
+ // Free unmanaged resources (unmanaged objects) and override finalizer
+ // Set large fields to null
+ context = null;
+
+ disposed = true;
+ }
+
+ /// <summary>
+ /// Checks if the file has been read.
+ /// </summary>
+ /// <exception cref="ReaderException">Thrown when the file has not yet been read.</exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ protected virtual void CheckHasBeenRead()
+ {
+ if (!hasBeenRead)
+ {
+ throw new ReaderException(context, "You must call read on the reader before accessing its data.");
+ }
+ }
+
+ /// <summary>
+ /// Parses the named indexes.
+ /// </summary>
+ /// <exception cref="ReaderException">Thrown when no header record was found.</exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ protected virtual void ParseNamedIndexes()
+ {
+ if (headerRecord == null)
+ {
+ throw new ReaderException(context, "No header record was found.");
+ }
+
+ namedIndexes.Clear();
+ namedIndexCache.Clear();
+
+ for (var i = 0; i < headerRecord.Length; i++)
+ {
+ var args = new PrepareHeaderForMatchArgs(headerRecord[i], i);
+ var name = prepareHeaderForMatch(args);
+ if (namedIndexes.TryGetValue(name, out var index))
+ {
+ index.Add(i);
+ }
+ else
+ {
+ namedIndexes[name] = new List<int> { i };
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/CsvWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvWriter.cs
new file mode 100644
index 0000000..4120926
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/CsvWriter.cs
@@ -0,0 +1,842 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Dynamic;
+using System.Threading.Tasks;
+using CsvHelper.Expressions;
+using System.Globalization;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Buffers;
+using System.Threading;
+
+#pragma warning disable 649
+#pragma warning disable 169
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Used to write CSV files.
+ /// </summary>
+ public class CsvWriter : IWriter
+ {
+ private readonly TextWriter writer;
+ private readonly CsvContext context;
+ private readonly Lazy<RecordManager> recordManager;
+ private readonly TypeConverterCache typeConverterCache;
+ private readonly TrimOptions trimOptions;
+ private readonly ShouldQuote shouldQuote;
+ private readonly MemberMapData reusableMemberMapData = new MemberMapData(null);
+ private readonly Dictionary<Type, TypeConverterOptions> typeConverterOptionsCache = new Dictionary<Type, TypeConverterOptions>();
+ private readonly string quoteString;
+ private readonly char quote;
+ private readonly CultureInfo cultureInfo;
+ private readonly char comment;
+ private readonly bool hasHeaderRecord;
+ private readonly bool includePrivateMembers;
+ private readonly IComparer<string> dynamicPropertySort;
+ private readonly string delimiter;
+ private readonly bool leaveOpen;
+ private readonly string newLine;
+ private readonly char[] injectionCharacters;
+ private readonly char injectionEscapeCharacter;
+ private readonly InjectionOptions injectionOptions;
+ private readonly CsvMode mode;
+ private readonly string escapeString;
+ private readonly string escapeQuoteString;
+ private readonly string escapeDelimiterString;
+ private readonly string escapeNewlineString;
+ private readonly string escapeEscapeString;
+
+ private bool disposed;
+ private bool hasHeaderBeenWritten;
+ private int row = 1;
+ private int index;
+ private char[] buffer;
+ private int bufferSize;
+ private int bufferPosition;
+ private Type fieldType;
+
+ /// <inheritdoc/>
+ public virtual string[] HeaderRecord { get; private set; }
+
+ /// <inheritdoc/>
+ public virtual int Row => row;
+
+ /// <inheritdoc/>
+ public virtual int Index => index;
+
+ /// <inheritdoc/>
+ public virtual CsvContext Context => context;
+
+ /// <inheritdoc/>
+ public virtual IWriterConfiguration Configuration { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvWriter"/> class.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="culture">The culture.</param>
+ /// <param name="leaveOpen"><c>true</c> to leave the <see cref="TextWriter"/> open after the <see cref="CsvWriter"/> object is disposed, otherwise <c>false</c>.</param>
+ public CsvWriter(TextWriter writer, CultureInfo culture, bool leaveOpen = false) : this(writer, new CsvConfiguration(culture), leaveOpen) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="CsvWriter"/> class.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ /// <param name="configuration">The configuration.</param>
+ /// <param name="leaveOpen"><c>true</c> to leave the <see cref="TextWriter"/> open after the <see cref="CsvWriter"/> object is disposed, otherwise <c>false</c>.</param>
+ public CsvWriter(TextWriter writer, IWriterConfiguration configuration, bool leaveOpen = false)
+ {
+ configuration.Validate();
+
+ this.writer = writer;
+ Configuration = configuration;
+ context = new CsvContext(this);
+ typeConverterCache = context.TypeConverterCache;
+ recordManager = new Lazy<RecordManager>(() => ObjectResolver.Current.Resolve<RecordManager>(this));
+
+ comment = configuration.Comment;
+ bufferSize = configuration.BufferSize;
+ delimiter = configuration.Delimiter;
+ cultureInfo = configuration.CultureInfo;
+ dynamicPropertySort = configuration.DynamicPropertySort;
+ escapeDelimiterString = new string(configuration.Delimiter.SelectMany(c => new[] { configuration.Escape, c }).ToArray());
+ escapeNewlineString = new string(configuration.NewLine.SelectMany(c => new[] { configuration.Escape, c }).ToArray());
+ escapeQuoteString = new string(new[] { configuration.Escape, configuration.Quote });
+ escapeEscapeString = new string(new[] { configuration.Escape, configuration.Escape });
+ hasHeaderRecord = configuration.HasHeaderRecord;
+ includePrivateMembers = configuration.IncludePrivateMembers;
+ injectionCharacters = configuration.InjectionCharacters;
+ injectionEscapeCharacter = configuration.InjectionEscapeCharacter;
+ this.leaveOpen = leaveOpen;
+ mode = configuration.Mode;
+ newLine = configuration.NewLine;
+ quote = configuration.Quote;
+ quoteString = configuration.Quote.ToString();
+ escapeString = configuration.Escape.ToString();
+ injectionOptions = configuration.InjectionOptions;
+ shouldQuote = configuration.ShouldQuote;
+ trimOptions = configuration.TrimOptions;
+
+ buffer = new char[bufferSize];
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteConvertedField(string field, Type fieldType)
+ {
+ this.fieldType = fieldType;
+
+ if (field == null)
+ {
+ return;
+ }
+
+ WriteField(field);
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteField(string field)
+ {
+ if (field != null && (trimOptions & TrimOptions.Trim) == TrimOptions.Trim)
+ {
+ field = field.Trim();
+ }
+
+ fieldType ??= typeof(string);
+
+ var args = new ShouldQuoteArgs(field, fieldType, this);
+ var shouldQuoteResult = shouldQuote(args);
+
+ WriteField(field, shouldQuoteResult);
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteField(string field, bool shouldQuote)
+ {
+ if (mode == CsvMode.RFC4180)
+ {
+ // All quotes must be escaped.
+ if (shouldQuote)
+ {
+ if (escapeString != quoteString)
+ {
+ field = field?.Replace(escapeString, escapeEscapeString);
+ }
+
+ field = field?.Replace(quoteString, escapeQuoteString);
+ field = quote + field + quote;
+ }
+ }
+ else if (mode == CsvMode.Escape)
+ {
+ field = field?
+ .Replace(escapeString, escapeEscapeString)
+ .Replace(quoteString, escapeQuoteString)
+ .Replace(delimiter, escapeDelimiterString)
+ .Replace(newLine, escapeNewlineString);
+ }
+
+ if (injectionOptions != InjectionOptions.None)
+ {
+ field = SanitizeForInjection(field);
+ }
+
+ if (index > 0)
+ {
+ WriteToBuffer(delimiter);
+ }
+
+ WriteToBuffer(field);
+ index++;
+ fieldType = null;
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteField<T>(T field)
+ {
+ var type = field == null ? typeof(string) : field.GetType();
+ var converter = typeConverterCache.GetConverter(type);
+ WriteField(field, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteField<T>(T field, ITypeConverter converter)
+ {
+ var type = field == null ? typeof(string) : field.GetType();
+ reusableMemberMapData.TypeConverter = converter;
+ if (!typeConverterOptionsCache.TryGetValue(type, out TypeConverterOptions typeConverterOptions))
+ {
+ typeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions { CultureInfo = cultureInfo }, context.TypeConverterOptionsCache.GetOptions(type));
+ typeConverterOptionsCache.Add(type, typeConverterOptions);
+ }
+
+ reusableMemberMapData.TypeConverterOptions = typeConverterOptions;
+
+ var fieldString = converter.ConvertToString(field, this, reusableMemberMapData);
+
+ WriteConvertedField(fieldString, type);
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteField<T, TConverter>(T field)
+ {
+ var converter = typeConverterCache.GetConverter<TConverter>();
+
+ WriteField(field, converter);
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteComment(string text)
+ {
+ WriteField(comment + text, false);
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteHeader<T>()
+ {
+ WriteHeader(typeof(T));
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteHeader(Type type)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ if (type == typeof(object))
+ {
+ return;
+ }
+
+ if (context.Maps[type] == null)
+ {
+ context.Maps.Add(context.AutoMap(type));
+ }
+
+ var members = new MemberMapCollection();
+ members.AddMembers(context.Maps[type]);
+
+ var headerRecord = new List<string>();
+
+ foreach (var member in members)
+ {
+ if (CanWrite(member))
+ {
+ if (member.Data.IndexEnd >= member.Data.Index)
+ {
+ var count = member.Data.IndexEnd - member.Data.Index + 1;
+ for (var i = 1; i <= count; i++)
+ {
+ var header = member.Data.Names.FirstOrDefault() + i;
+ WriteField(header);
+ headerRecord.Add(header);
+ }
+ }
+ else
+ {
+ var header = member.Data.Names.FirstOrDefault();
+ WriteField(header);
+ headerRecord.Add(header);
+ }
+ }
+ }
+
+ HeaderRecord = headerRecord.ToArray();
+
+ hasHeaderBeenWritten = true;
+ }
+
+ /// <summary>
+ /// Writes a dynamic header record.
+ /// </summary>
+ /// <param name="record">The header record to write.</param>
+ /// <exception cref="ArgumentNullException">Thrown when no record is passed.</exception>
+ public virtual void WriteDynamicHeader(IDynamicMetaObjectProvider record)
+ {
+ if (record == null)
+ {
+ throw new ArgumentNullException(nameof(record));
+ }
+
+ var metaObject = record.GetMetaObject(Expression.Constant(record));
+ var names = metaObject.GetDynamicMemberNames().ToList();
+ if (dynamicPropertySort != null)
+ {
+ names = names.OrderBy(name => name, dynamicPropertySort).ToList();
+ }
+
+ HeaderRecord = names.ToArray();
+
+ foreach (var name in names)
+ {
+ WriteField(name);
+ }
+
+ hasHeaderBeenWritten = true;
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteRecord<T>(T? record)
+ {
+ try
+ {
+ recordManager.Value.Write(record);
+ }
+ catch (TargetInvocationException ex)
+ {
+ if (ex.InnerException != null)
+ {
+ throw ex.InnerException;
+ }
+ else
+ {
+ throw;
+ }
+ }
+ catch (Exception ex) when (ex is not CsvHelperException)
+ {
+ throw new WriterException(context, "An unexpected error occurred. See inner exception for details.", ex);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteRecords(IEnumerable records)
+ {
+ // Changes in this method require changes in method WriteRecords<T>(IEnumerable<T> records) also.
+
+ try
+ {
+ if (WriteHeader(records))
+ {
+ NextRecord();
+ }
+
+ foreach (var record in records)
+ {
+ if (record == null)
+ {
+ // Since every record could be a different type, just write a blank line.
+ NextRecord();
+ continue;
+ }
+
+ WriteRecord(record);
+ NextRecord();
+ }
+ }
+ catch (Exception ex) when (ex is not CsvHelperException)
+ {
+ throw new WriterException(context, "An unexpected error occurred. See inner exception for details.", ex);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual void WriteRecords<T>(IEnumerable<T> records)
+ {
+ // Changes in this method require changes in method WriteRecords(IEnumerable records) also.
+
+ try
+ {
+ if (WriteHeader(records))
+ {
+ NextRecord();
+ }
+
+ foreach (var record in records)
+ {
+ WriteRecord(record);
+ NextRecord();
+ }
+ }
+ catch (Exception ex) when (ex is not CsvHelperException)
+ {
+ throw new WriterException(context, "An unexpected error occurred. See inner exception for details.", ex);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual async Task WriteRecordsAsync(IEnumerable records, CancellationToken cancellationToken = default)
+ {
+ // These methods should all be the same;
+ // - WriteRecordsAsync(IEnumerable records)
+ // - WriteRecordsAsync<T>(IEnumerable<T> records)
+ // - WriteRecordsAsync<T>(IAsyncEnumerable<T> records)
+
+ try
+ {
+ if (WriteHeader(records))
+ {
+ await NextRecordAsync().ConfigureAwait(false);
+ }
+
+ foreach (var record in records)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ WriteRecord(record);
+ await NextRecordAsync().ConfigureAwait(false);
+ }
+ }
+ catch (Exception ex) when (ex is not CsvHelperException)
+ {
+ throw new WriterException(context, "An unexpected error occurred. See inner exception for details.", ex);
+ }
+ }
+
+ /// <inheritdoc/>
+ public virtual async Task WriteRecordsAsync<T>(IEnumerable<T> records, CancellationToken cancellationToken = default)
+ {
+ // These methods should all be the same;
+ // - WriteRecordsAsync(IEnumerable records)
+ // - WriteRecordsAsync<T>(IEnumerable<T> records)
+ // - WriteRecordsAsync<T>(IAsyncEnumerable<T> records)
+
+ try
+ {
+ if (WriteHeader(records))
+ {
+ await NextRecordAsync().ConfigureAwait(false);
+ }
+
+ foreach (var record in records)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ WriteRecord(record);
+ await NextRecordAsync().ConfigureAwait(false);
+ }
+ }
+ catch (Exception ex) when (ex is not CsvHelperException)
+ {
+ throw new WriterException(context, "An unexpected error occurred. See inner exception for details.", ex);
+ }
+ }
+
+#if !NET45
+ /// <inheritdoc/>
+ public virtual async Task WriteRecordsAsync<T>(IAsyncEnumerable<T> records, CancellationToken cancellationToken = default)
+ {
+ // These methods should all be the same;
+ // - WriteRecordsAsync(IEnumerable records)
+ // - WriteRecordsAsync<T>(IEnumerable<T> records)
+ // - WriteRecordsAsync<T>(IAsyncEnumerable<T> records)
+
+ try
+ {
+ if (await WriteHeaderAsync(records))
+ {
+ await NextRecordAsync().ConfigureAwait(false);
+ }
+
+ await foreach (var record in records.ConfigureAwait(false))
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ WriteRecord(record);
+ await NextRecordAsync().ConfigureAwait(false);
+ }
+ }
+ catch (Exception ex) when (ex is not CsvHelperException)
+ {
+ throw new WriterException(context, "An unexpected error occurred. See inner exception for details.", ex);
+ }
+ }
+#endif
+
+ /// <inheritdoc/>
+ public virtual void NextRecord()
+ {
+ WriteToBuffer(newLine);
+ FlushBuffer();
+
+ index = 0;
+ row++;
+ }
+
+ /// <inheritdoc/>
+ public virtual async Task NextRecordAsync()
+ {
+ WriteToBuffer(newLine);
+ await FlushBufferAsync().ConfigureAwait(false);
+
+ index = 0;
+ row++;
+ }
+
+ /// <inheritdoc/>
+ public virtual void Flush()
+ {
+ FlushBuffer();
+ writer.Flush();
+ }
+
+ /// <inheritdoc/>
+ public virtual async Task FlushAsync()
+ {
+ await FlushBufferAsync().ConfigureAwait(false);
+ await writer.FlushAsync().ConfigureAwait(false);
+ }
+
+ /// <summary>
+ /// Flushes the buffer.
+ /// </summary>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ protected virtual void FlushBuffer()
+ {
+ writer.Write(buffer, 0, bufferPosition);
+ bufferPosition = 0;
+ }
+
+ /// <summary>
+ /// Asynchronously flushes the buffer.
+ /// </summary>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ protected virtual async Task FlushBufferAsync()
+ {
+ await writer.WriteAsync(buffer, 0, bufferPosition).ConfigureAwait(false);
+ bufferPosition = 0;
+ }
+
+ /// <summary>
+ /// Indicates if values can be written.
+ /// </summary>
+ /// <param name="memberMap">The member map.</param>
+ /// <returns>True if values can be written.</returns>
+ public virtual bool CanWrite(MemberMap memberMap)
+ {
+ var cantWrite =
+ // Ignored members.
+ memberMap.Data.Ignore;
+
+ if (memberMap.Data.Member is PropertyInfo property)
+ {
+ cantWrite = cantWrite ||
+ // Properties that don't have a public getter
+ // and we are honoring the accessor modifier.
+ property.GetGetMethod() == null && !includePrivateMembers ||
+ // Properties that don't have a getter at all.
+ property.GetGetMethod(true) == null;
+ }
+
+ return !cantWrite;
+ }
+
+ /// <summary>
+ /// Determines the type for the given record.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record to determine the type of.</param>
+ /// <returns>The System.Type for the record.</returns>
+ public virtual Type GetTypeForRecord<T>(T record)
+ {
+ var type = typeof(T);
+ if (type == typeof(object))
+ {
+ type = record.GetType();
+ }
+
+ return type;
+ }
+
+ /// <summary>
+ /// Sanitizes the given field, before it is injected.
+ /// </summary>
+ /// <param name="field">The field to sanitize.</param>
+ /// <returns>The sanitized field.</returns>
+ /// <exception cref="WriterException">Thrown when an injection character is found in the field.</exception>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ protected virtual string SanitizeForInjection(string field)
+ {
+ if (string.IsNullOrEmpty(field))
+ {
+ return field;
+ }
+
+ int injectionCharIndex;
+ if (ArrayHelper.Contains(injectionCharacters, field[0]))
+ {
+ injectionCharIndex = 0;
+ }
+ else if (field[0] == quote && field[field.Length - 1] == quote && ArrayHelper.Contains(injectionCharacters, field[1]))
+ {
+ injectionCharIndex = 1;
+ }
+ else
+ {
+ return field;
+ }
+
+ if (injectionOptions == InjectionOptions.Exception)
+ {
+ throw new WriterException(context, $"Injection character '{field[injectionCharIndex]}' detected");
+ }
+
+ if (injectionOptions == InjectionOptions.Escape)
+ {
+ if (injectionCharIndex == 0)
+ {
+ // =1+"2 -> "'=1+""2"
+ field = quoteString + injectionEscapeCharacter + field.Replace(quoteString, escapeQuoteString) + quoteString;
+ }
+ else
+ {
+ // "=1+2" -> "'=1+2"
+ field = quoteString + injectionEscapeCharacter + field.Substring(injectionCharIndex);
+ }
+ }
+ else if (injectionOptions == InjectionOptions.Strip)
+ {
+ while (true)
+ {
+ field = field.Substring(1);
+
+ if (field.Length == 0 || !ArrayHelper.Contains(injectionCharacters, field[0]))
+ {
+ break;
+ }
+ }
+
+ if (injectionCharIndex == 1)
+ {
+ field = quoteString + field;
+ }
+ }
+
+ return field;
+ }
+
+ /// <summary>
+ /// Writes the given value to the buffer.
+ /// </summary>
+ /// <param name="value">The value to write.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ protected void WriteToBuffer(string value)
+ {
+ var length = value?.Length ?? 0;
+
+ if (value == null || length == 0)
+ {
+ return;
+ }
+
+ var lengthNeeded = bufferPosition + length;
+ if (lengthNeeded >= bufferSize)
+ {
+ while (lengthNeeded >= bufferSize)
+ {
+ bufferSize *= 2;
+ }
+
+ Array.Resize(ref buffer, bufferSize);
+ }
+
+ value.CopyTo(0, buffer, bufferPosition, length);
+
+ bufferPosition += length;
+ }
+
+ /// <inheritdoc/>
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <summary>
+ /// Disposes the object.
+ /// </summary>
+ /// <param name="disposing">Indicates if the object is being disposed.</param>
+ protected virtual void Dispose(bool disposing)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ Flush();
+
+ if (disposing)
+ {
+ // Dispose managed state (managed objects)
+
+ if (!leaveOpen)
+ {
+ writer.Dispose();
+ }
+ }
+
+ // Free unmanaged resources (unmanaged objects) and override finalizer
+ // Set large fields to null
+
+ buffer = null;
+
+ disposed = true;
+ }
+
+#if !NET45 && !NET47 && !NETSTANDARD2_0
+ /// <inheritdoc/>
+ public async ValueTask DisposeAsync()
+ {
+ await DisposeAsync(true).ConfigureAwait(false);
+ GC.SuppressFinalize(this);
+ }
+
+ /// <inheritdoc/>
+ protected virtual async ValueTask DisposeAsync(bool disposing)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ await FlushAsync().ConfigureAwait(false);
+
+ if (disposing)
+ {
+ // Dispose managed state (managed objects)
+
+ if (!leaveOpen)
+ {
+ await writer.DisposeAsync().ConfigureAwait(false);
+ }
+ }
+
+ // Free unmanaged resources (unmanaged objects) and override finalizer
+ // Set large fields to null
+
+ buffer = null;
+
+ disposed = true;
+ }
+#endif
+
+#if !NET45
+ private async Task<bool> WriteHeaderAsync<T>(IAsyncEnumerable<T> records)
+ {
+ if (!hasHeaderRecord || hasHeaderBeenWritten)
+ {
+ return false;
+ }
+
+ var recordType = typeof(T);
+ var isPrimitive = recordType.GetTypeInfo().IsPrimitive;
+ if (!isPrimitive && recordType != typeof(object))
+ {
+ WriteHeader(recordType);
+ return hasHeaderBeenWritten;
+ }
+
+ return WriteHeader(await records.FirstOrDefaultAsync());
+ }
+#endif
+
+ private bool WriteHeader<T>(IEnumerable<T> records)
+ {
+ if (!hasHeaderRecord || hasHeaderBeenWritten)
+ {
+ return false;
+ }
+
+ var recordType = typeof(T);
+ var isPrimitive = recordType.GetTypeInfo().IsPrimitive;
+ if (!isPrimitive && recordType != typeof(object))
+ {
+ WriteHeader(recordType);
+ return hasHeaderBeenWritten;
+ }
+
+ return WriteHeader(records.FirstOrDefault());
+ }
+
+ private bool WriteHeader(IEnumerable records)
+ {
+ object? record = null;
+ foreach (var r in records)
+ {
+ if (r != null)
+ {
+ record = r;
+ }
+ }
+
+ return WriteHeader(record);
+ }
+
+ private bool WriteHeader(object? record)
+ {
+ if (record == null)
+ {
+ return false;
+ }
+
+ if (record is IDynamicMetaObjectProvider dynamicObject)
+ {
+ WriteDynamicHeader(dynamicObject);
+ return true;
+ }
+
+ var recordType = record.GetType();
+ var isPrimitive = recordType.GetTypeInfo().IsPrimitive;
+ if (!isPrimitive)
+ {
+ WriteHeader(recordType);
+ return true;
+ }
+
+ return false;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/BadDataFound.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/BadDataFound.cs
new file mode 100644
index 0000000..5f25912
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/BadDataFound.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that gets called when bad data is found.
+ /// </summary>
+ /// <param name="args">The args.</param>
+ public delegate void BadDataFound(BadDataFoundArgs args);
+
+ /// <summary>
+ /// Information about the field that caused <see cref="BadDataFound"/> to be called.
+ /// </summary>
+ public readonly struct BadDataFoundArgs
+ {
+ /// <summary>
+ /// The full field unedited.
+ /// </summary>
+ public readonly string Field;
+
+ /// <summary>
+ /// The full row unedited.
+ /// </summary>
+ public readonly string RawRecord;
+
+ /// <summary>
+ /// The context.
+ /// </summary>
+ public readonly CsvContext Context;
+
+ /// <summary>
+ /// Creates a new instance of BadDataFoundArgs.
+ /// </summary>
+ /// <param name="field">The full field unedited.</param>
+ /// <param name="rawRecord">The full row unedited.</param>
+ /// <param name="context">The context.</param>
+ public BadDataFoundArgs(string field, string rawRecord, CsvContext context)
+ {
+ Field = field;
+ RawRecord = rawRecord;
+ Context = context;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertFromString.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertFromString.cs
new file mode 100644
index 0000000..48b2512
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertFromString.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that converts a string into an object.
+ /// </summary>
+ /// <typeparam name="TMember">The type of the member.</typeparam>
+ /// <param name="args">The args.</param>
+ /// <returns>The class object.</returns>
+ public delegate TMember ConvertFromString<TMember>(ConvertFromStringArgs args);
+
+ /// <summary>
+ /// <see cref="ConvertFromString{TMember}"/> args.
+ /// </summary>
+ public readonly struct ConvertFromStringArgs
+ {
+ /// <summary>
+ /// The row.
+ /// </summary>
+ public readonly IReaderRow Row;
+
+ /// <summary>
+ /// Creates a new instance of ConvertFromStringArgs.
+ /// </summary>
+ /// <param name="row">The row.</param>
+ public ConvertFromStringArgs(IReaderRow row)
+ {
+ Row = row;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertToString.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertToString.cs
new file mode 100644
index 0000000..478526e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ConvertToString.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that converts an object into a string.
+ /// </summary>
+ /// <typeparam name="TClass">The type of the class.</typeparam>
+ /// <param name="args">The args.</param>
+ /// <returns>The string.</returns>
+ public delegate string ConvertToString<TClass>(ConvertToStringArgs<TClass> args);
+
+ /// <summary>
+ /// <see cref="ConvertToString{TClass}"/> args.
+ /// </summary>
+ /// <typeparam name="TClass">The value to convert.</typeparam>
+ public readonly struct ConvertToStringArgs<TClass>
+ {
+ /// <summary>
+ /// The value to convert.
+ /// </summary>
+ public readonly TClass Value;
+
+ /// <summary>
+ /// Creates a new instance of ConvertToStringArgs{TClass}.
+ /// </summary>
+ /// <param name="value">The value to convert.</param>
+ public ConvertToStringArgs(TClass value)
+ {
+ Value = value;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetConstructor.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetConstructor.cs
new file mode 100644
index 0000000..8678a5c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetConstructor.cs
@@ -0,0 +1,38 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that chooses the constructor to use for constructor mapping.
+ /// </summary>
+ public delegate ConstructorInfo GetConstructor(GetConstructorArgs args);
+
+ /// <summary>
+ /// GetConstructor args.
+ /// </summary>
+ public readonly struct GetConstructorArgs
+ {
+ /// <summary>
+ /// The class type.
+ /// </summary>
+ public readonly Type ClassType;
+
+ /// <summary>
+ /// Creates a new instance of GetConstructorArgs.
+ /// </summary>
+ /// <param name="classType">The class type.</param>
+ public GetConstructorArgs(Type classType)
+ {
+ ClassType = classType;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDelimiter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDelimiter.cs
new file mode 100644
index 0000000..2593200
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDelimiter.cs
@@ -0,0 +1,44 @@
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Delegates
+{
+ /// <summary>
+ /// Function that resolves the delimiter from the given text.
+ /// Returns null if no delimiter is found.
+ /// </summary>
+ /// <param name="args"></param>
+ /// <returns></returns>
+ public delegate string? GetDelimiter(GetDelimiterArgs args);
+
+ /// <summary>
+ /// GetDelimiter args.
+ /// </summary>
+ public readonly struct GetDelimiterArgs
+ {
+ /// <summary>
+ /// The text to resolve the delimiter from.
+ /// </summary>
+ public readonly string Text;
+
+ /// <summary>
+ /// The configuration.
+ /// </summary>
+ public readonly IParserConfiguration Configuration;
+
+ /// <summary>
+ /// Creates an instance of GetDelimiterArgs.
+ /// </summary>
+ /// <param name="text">The text to resolve the delimiter from.</param>
+ /// <param name="configuration">The configuration.</param>
+ public GetDelimiterArgs(string text, IParserConfiguration configuration)
+ {
+ Text = text;
+ Configuration = configuration;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDynamicPropertyName.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDynamicPropertyName.cs
new file mode 100644
index 0000000..4a761d6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/GetDynamicPropertyName.cs
@@ -0,0 +1,44 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that gets the name to use for the property of the dynamic object.
+ /// </summary>
+ public delegate string GetDynamicPropertyName(GetDynamicPropertyNameArgs args);
+
+ /// <summary>
+ /// GetDynamicPropertyName args.
+ /// </summary>
+ public readonly struct GetDynamicPropertyNameArgs
+ {
+ /// <summary>
+ /// The field index.
+ /// </summary>
+ public readonly int FieldIndex;
+
+ /// <summary>
+ /// The context.
+ /// </summary>
+ public readonly CsvContext Context;
+
+ /// <summary>
+ /// Creates a new instance of GetDynamicPropertyNameArgs.
+ /// </summary>
+ /// <param name="fieldIndex">The field index.</param>
+ /// <param name="context">The context.</param>
+ public GetDynamicPropertyNameArgs(int fieldIndex, CsvContext context)
+ {
+ FieldIndex = fieldIndex;
+ Context = context;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/HeaderValidated.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/HeaderValidated.cs
new file mode 100644
index 0000000..07836d3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/HeaderValidated.cs
@@ -0,0 +1,46 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that is called when a header validation check is ran. The default function
+ /// will throw a <see cref="ValidationException"/> if there is no header for a given member mapping.
+ /// You can supply your own function to do other things like logging the issue instead of throwing an exception.
+ /// </summary>
+ public delegate void HeaderValidated(HeaderValidatedArgs args);
+
+ /// <summary>
+ /// HeaderValidated args.
+ /// </summary>
+ public readonly struct HeaderValidatedArgs
+ {
+ /// <summary>
+ /// The invalid headers.
+ /// </summary>
+ public readonly InvalidHeader[] InvalidHeaders;
+
+ /// <summary>
+ /// The context.
+ /// </summary>
+ public readonly CsvContext Context;
+
+ /// <summary>
+ /// Creates a new instance of HeaderValidatedArgs.
+ /// </summary>
+ /// <param name="invalidHeaders">The invalid headers.</param>
+ /// <param name="context">The context.</param>
+ public HeaderValidatedArgs(InvalidHeader[] invalidHeaders, CsvContext context)
+ {
+ InvalidHeaders = invalidHeaders;
+ Context = context;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/MissingFieldFound.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/MissingFieldFound.cs
new file mode 100644
index 0000000..cb725fb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/MissingFieldFound.cs
@@ -0,0 +1,53 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that is called when a missing field is found. The default function will
+ /// throw a <see cref="MissingFieldException"/>. You can supply your own function to do other things
+ /// like logging the issue instead of throwing an exception.
+ /// </summary>
+ public delegate void MissingFieldFound(MissingFieldFoundArgs args);
+
+ /// <summary>
+ /// MissingFieldFound args.
+ /// </summary>
+ public readonly struct MissingFieldFoundArgs
+ {
+ /// <summary>
+ /// The header names.
+ /// </summary>
+ public readonly string[]? HeaderNames;
+
+ /// <summary>
+ /// The index.
+ /// </summary>
+ public readonly int Index;
+
+ /// <summary>
+ /// The context.
+ /// </summary>
+ public readonly CsvContext Context;
+
+ /// <summary>
+ /// Creates a new instance of MissingFieldFoundArgs.
+ /// </summary>
+ /// <param name="headerNames">The header names.</param>
+ /// <param name="index">The index.</param>
+ /// <param name="context">The context.</param>
+ public MissingFieldFoundArgs(string[]? headerNames, int index, CsvContext context)
+ {
+ HeaderNames = headerNames;
+ Index = index;
+ Context = context;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/PrepareHeaderForMatch.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/PrepareHeaderForMatch.cs
new file mode 100644
index 0000000..061e493
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/PrepareHeaderForMatch.cs
@@ -0,0 +1,47 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that prepares the header field for matching against a member name.
+ /// The header field and the member name are both ran through this function.
+ /// You should do things like trimming, removing whitespace, removing underscores,
+ /// and making casing changes to ignore case.
+ /// </summary>
+ public delegate string PrepareHeaderForMatch(PrepareHeaderForMatchArgs args);
+
+ /// <summary>
+ /// PrepareHeaderForMatch args.
+ /// </summary>
+ public readonly struct PrepareHeaderForMatchArgs
+ {
+ /// <summary>
+ /// The header.
+ /// </summary>
+ public readonly string Header;
+
+ /// <summary>
+ /// The field index.
+ /// </summary>
+ public readonly int FieldIndex;
+
+ /// <summary>
+ /// Creates a new instance of PrepareHeaderForMatchArgs.
+ /// </summary>
+ /// <param name="header">The header.</param>
+ /// <param name="fieldIndex">The field index.</param>
+ public PrepareHeaderForMatchArgs(string header, int fieldIndex)
+ {
+ Header = header;
+ FieldIndex = fieldIndex;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReadingExceptionOccurred.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReadingExceptionOccurred.cs
new file mode 100644
index 0000000..c3737ef
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReadingExceptionOccurred.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that is called when a reading exception occurs.
+ /// The default function will re-throw the given exception. If you want to ignore
+ /// reading exceptions, you can supply your own function to do other things like
+ /// logging the issue.
+ /// </summary>
+ public delegate bool ReadingExceptionOccurred(ReadingExceptionOccurredArgs args);
+
+ /// <summary>
+ /// ReadingExceptionOccurred args.
+ /// </summary>
+ public readonly struct ReadingExceptionOccurredArgs
+ {
+ /// <summary>
+ /// The exception.
+ /// </summary>
+ public readonly CsvHelperException Exception;
+
+ /// <summary>
+ /// Creates a new instance of ReadingExceptionOccurredArgs.
+ /// </summary>
+ /// <param name="exception">The exception.</param>
+ public ReadingExceptionOccurredArgs(CsvHelperException exception)
+ {
+ Exception = exception;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReferenceHeaderPrefix.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReferenceHeaderPrefix.cs
new file mode 100644
index 0000000..d42d49f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ReferenceHeaderPrefix.cs
@@ -0,0 +1,44 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that will return the prefix for a reference header.
+ /// </summary>
+ public delegate string ReferenceHeaderPrefix(ReferenceHeaderPrefixArgs args);
+
+ /// <summary>
+ /// ReferenceHeaderPrefix args.
+ /// </summary>
+ public readonly struct ReferenceHeaderPrefixArgs
+ {
+ /// <summary>
+ /// The member type.
+ /// </summary>
+ public readonly Type MemberType;
+
+ /// <summary>
+ /// The member name.
+ /// </summary>
+ public readonly string MemberName;
+
+ /// <summary>
+ /// Creates a new instance of ReferenceHeaderPrefixArgs.
+ /// </summary>
+ /// <param name="memberType">The member type.</param>
+ /// <param name="memberName">The member name.</param>
+ public ReferenceHeaderPrefixArgs(Type memberType, string memberName)
+ {
+ MemberType = memberType;
+ MemberName = memberName;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldQuote.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldQuote.cs
new file mode 100644
index 0000000..ab84ba3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldQuote.cs
@@ -0,0 +1,51 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that is used to determine if a field should get quoted when writing.
+ /// </summary>
+ public delegate bool ShouldQuote(ShouldQuoteArgs args);
+
+ /// <summary>
+ /// ShouldQuote args.
+ /// </summary>
+ public readonly struct ShouldQuoteArgs
+ {
+ /// <summary>
+ /// The field.
+ /// </summary>
+ public readonly string Field;
+
+ /// <summary>
+ /// The field type.
+ /// </summary>
+ public readonly Type FieldType;
+
+ /// <summary>
+ /// The row.
+ /// </summary>
+ public readonly IWriterRow Row;
+
+ /// <summary>
+ /// Creates a new instance of ShouldQuoteArgs.
+ /// </summary>
+ /// <param name="field">The field.</param>
+ /// <param name="fieldType">The field type.</param>
+ /// <param name="row">The row.</param>
+ public ShouldQuoteArgs(string field, Type fieldType, IWriterRow row)
+ {
+ Field = field;
+ FieldType = fieldType;
+ Row = row;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldSkipRecord.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldSkipRecord.cs
new file mode 100644
index 0000000..cf87633
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldSkipRecord.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that determines whether to skip the given record or not.
+ /// </summary>
+ public delegate bool ShouldSkipRecord(ShouldSkipRecordArgs args);
+
+ /// <summary>
+ /// ShouldSkipRecord args.
+ /// </summary>
+ public readonly struct ShouldSkipRecordArgs
+ {
+ /// <summary>
+ /// The record.
+ /// </summary>
+ public readonly IReaderRow Row;
+
+ /// <summary>
+ /// Creates a new instance of ShouldSkipRecordArgs.
+ /// </summary>
+ /// <param name="row">The row.</param>
+ public ShouldSkipRecordArgs(IReaderRow row)
+ {
+ Row = row;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldUseConstructorParameters.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldUseConstructorParameters.cs
new file mode 100644
index 0000000..cfbacd5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/ShouldUseConstructorParameters.cs
@@ -0,0 +1,38 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that determines if constructor parameters should be used to create
+ /// the class instead of the default constructor and members.
+ /// </summary>
+ public delegate bool ShouldUseConstructorParameters(ShouldUseConstructorParametersArgs args);
+
+ /// <summary>
+ /// ShouldUseConstructorParameters args.
+ /// </summary>
+ public readonly struct ShouldUseConstructorParametersArgs
+ {
+ /// <summary>
+ /// The parameter type.
+ /// </summary>
+ public readonly Type ParameterType;
+
+ /// <summary>
+ /// Creates a new instance of ShouldUseConstructorParametersArgs.
+ /// </summary>
+ /// <param name="parameterType">The parameter type.</param>
+ public ShouldUseConstructorParametersArgs(Type parameterType)
+ {
+ ParameterType = parameterType;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/Validate.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/Validate.cs
new file mode 100644
index 0000000..b2a42ea
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Delegates/Validate.cs
@@ -0,0 +1,53 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Function that validates a field.
+ /// </summary>
+ /// <param name="args">The args.</param>
+ /// <returns><c>true</c> if the field is valid, otherwise <c>false</c>.</returns>
+ public delegate bool Validate(ValidateArgs args);
+
+ /// <summary>
+ /// Function that gets the exception message when validation fails.
+ /// </summary>
+ /// <param name="args">The args.</param>
+ /// <returns>The exception message.</returns>
+ public delegate string ValidateMessage(ValidateArgs args);
+
+ /// <summary>
+ /// Validate args.
+ /// </summary>
+ public readonly struct ValidateArgs
+ {
+ /// <summary>
+ /// The field.
+ /// </summary>
+ public readonly string Field;
+
+ /// <summary>
+ /// The row.
+ /// </summary>
+ public readonly IReaderRow Row;
+
+ /// <summary>
+ /// Creates a new instance of ValidateArgs.
+ /// </summary>
+ /// <param name="field">The field.</param>
+ /// <param name="row">The row.</param>
+ public ValidateArgs(string field, IReaderRow row)
+ {
+ Field = field;
+ Row = row;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/EnumerableExtensions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/EnumerableExtensions.cs
new file mode 100644
index 0000000..a15b20b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/EnumerableExtensions.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ internal static class EnumerableExtensions
+ {
+#if !NET45
+ public static async Task<T?> FirstOrDefaultAsync<T>(this IAsyncEnumerable<T> collection)
+ {
+ await foreach (var o in collection.ConfigureAwait(false))
+ {
+ if (o != null)
+ {
+ return o;
+ }
+ }
+
+ return default(T);
+ }
+#endif
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordCreator.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordCreator.cs
new file mode 100644
index 0000000..b93390f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordCreator.cs
@@ -0,0 +1,61 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Dynamic;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Creates dynamic records.
+ /// </summary>
+ public class DynamicRecordCreator : RecordCreator
+ {
+ /// <summary>
+ /// Initializes a new instance.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public DynamicRecordCreator(CsvReader reader) : base(reader) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Func{T}"/>
+ /// that will create a record of the given type using the current
+ /// reader row.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ protected override Delegate CreateCreateRecordDelegate(Type recordType) => (Func<dynamic>)CreateDynamicRecord;
+
+ /// <summary>
+ /// Creates a dynamic record of the current reader row.
+ /// </summary>
+ protected virtual dynamic CreateDynamicRecord()
+ {
+ var obj = new ExpandoObject();
+ var dict = obj as IDictionary<string, object>;
+ if (Reader.HeaderRecord != null)
+ {
+ for (var i = 0; i < Reader.HeaderRecord.Length; i++)
+ {
+ var args = new GetDynamicPropertyNameArgs(i, Reader.Context);
+ var propertyName = Reader.Configuration.GetDynamicPropertyName(args);
+ Reader.TryGetField(i, out string field);
+ dict.Add(propertyName, field);
+ }
+ }
+ else
+ {
+ for (var i = 0; i < Reader.Parser.Count; i++)
+ {
+ var args = new GetDynamicPropertyNameArgs(i, Reader.Context);
+ var propertyName = Reader.Configuration.GetDynamicPropertyName(args);
+ var field = Reader.GetField(i);
+ dict.Add(propertyName, field);
+ }
+ }
+
+ return obj;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordWriter.cs
new file mode 100644
index 0000000..a9ee401
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/DynamicRecordWriter.cs
@@ -0,0 +1,75 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Microsoft.CSharp.RuntimeBinder;
+using System;
+using System.Collections;
+using System.Dynamic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Runtime.CompilerServices;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Write dynamic records.
+ /// </summary>
+ public class DynamicRecordWriter : RecordWriter
+ {
+ private readonly Hashtable getters = new Hashtable();
+
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public DynamicRecordWriter(CsvWriter writer) : base(writer) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Action{T}"/>
+ /// that will write the given record using the current writer row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ protected override Action<T> CreateWriteDelegate<T>(T record)
+ {
+ // http://stackoverflow.com/a/14011692/68499
+
+ Action<T> action = r =>
+ {
+ var provider = (IDynamicMetaObjectProvider)r;
+ var type = provider.GetType();
+
+ var parameterExpression = Expression.Parameter(typeof(T), "record");
+ var metaObject = provider.GetMetaObject(parameterExpression);
+ var memberNames = metaObject.GetDynamicMemberNames();
+ if (Writer.Configuration.DynamicPropertySort != null)
+ {
+ memberNames = memberNames.OrderBy(name => name, Writer.Configuration.DynamicPropertySort);
+ }
+
+ foreach (var name in memberNames)
+ {
+ var value = GetValue(name, provider);
+ Writer.WriteField(value);
+ }
+ };
+
+ return action;
+ }
+
+ private object GetValue(string name, IDynamicMetaObjectProvider target)
+ {
+ // https://stackoverflow.com/a/30757547/68499
+
+ var callSite = (CallSite<Func<CallSite, IDynamicMetaObjectProvider, object>>)getters[name];
+ if (callSite == null)
+ {
+ var getMemberBinder = Binder.GetMember(CSharpBinderFlags.None, name, typeof(DynamicRecordWriter), new CSharpArgumentInfo[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });
+ getters[name] = callSite = CallSite<Func<CallSite, IDynamicMetaObjectProvider, object>>.Create(getMemberBinder);
+ }
+
+ return callSite.Target(callSite, target);
+ }
+ }
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpandoObjectRecordWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpandoObjectRecordWriter.cs
new file mode 100644
index 0000000..f0a5e67
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpandoObjectRecordWriter.cs
@@ -0,0 +1,49 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Writes expando objects.
+ /// </summary>
+ public class ExpandoObjectRecordWriter : RecordWriter
+ {
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public ExpandoObjectRecordWriter(CsvWriter writer) : base(writer) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Action{T}"/>
+ /// that will write the given record using the current writer row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ protected override Action<T> CreateWriteDelegate<T>(T record)
+ {
+ Action<T> action = r =>
+ {
+ var dict = ((IDictionary<string, object>)r).AsEnumerable();
+
+ if (Writer.Configuration.DynamicPropertySort != null)
+ {
+ dict = dict.OrderBy(pair => pair.Key, Writer.Configuration.DynamicPropertySort);
+ }
+
+ var values = dict.Select(pair => pair.Value);
+ foreach (var val in values)
+ {
+ Writer.WriteField(val);
+ }
+ };
+
+ return action;
+ }
+ }
+} \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpressionManager.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpressionManager.cs
new file mode 100644
index 0000000..42ac8a6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ExpressionManager.cs
@@ -0,0 +1,490 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Manages expression creation.
+ /// </summary>
+ public class ExpressionManager
+ {
+ private readonly CsvReader reader;
+ private readonly CsvWriter writer;
+
+ /// <summary>
+ /// Initializes a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public ExpressionManager(CsvReader reader)
+ {
+ this.reader = reader;
+ }
+
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public ExpressionManager(CsvWriter writer)
+ {
+ this.writer = writer;
+ }
+
+ /// <summary>
+ /// Creates the constructor arguments used to create a type.
+ /// </summary>
+ /// <param name="map">The mapping to create the arguments for.</param>
+ /// <param name="argumentExpressions">The arguments that will be added to the mapping.</param>
+ public virtual void CreateConstructorArgumentExpressionsForMapping(ClassMap map, List<Expression> argumentExpressions)
+ {
+ foreach (var parameterMap in map.ParameterMaps)
+ {
+ if (parameterMap.Data.IsConstantSet)
+ {
+ var constantExpression = Expression.Convert(Expression.Constant(parameterMap.Data.Constant), parameterMap.Data.Parameter.ParameterType);
+ argumentExpressions.Add(constantExpression);
+
+ continue;
+ }
+
+ if (parameterMap.Data.Ignore)
+ {
+ Expression defaultExpression;
+ if (parameterMap.Data.IsDefaultSet)
+ {
+ defaultExpression = Expression.Convert(Expression.Constant(parameterMap.Data.Default), parameterMap.Data.Parameter.ParameterType);
+ }
+ else if (parameterMap.Data.Parameter.HasDefaultValue)
+ {
+ defaultExpression = Expression.Convert(Expression.Constant(parameterMap.Data.Parameter.DefaultValue), parameterMap.Data.Parameter.ParameterType);
+ }
+ else
+ {
+ defaultExpression = Expression.Default(parameterMap.Data.Parameter.ParameterType);
+ }
+
+ argumentExpressions.Add(defaultExpression);
+
+ continue;
+ }
+
+ if (parameterMap.ConstructorTypeMap != null)
+ {
+ // Constructor parameter type.
+ var arguments = new List<Expression>();
+ CreateConstructorArgumentExpressionsForMapping(parameterMap.ConstructorTypeMap, arguments);
+ var args = new GetConstructorArgs(parameterMap.ConstructorTypeMap.ClassType);
+ var constructorExpression = Expression.New(reader.Configuration.GetConstructor(args), arguments);
+
+ argumentExpressions.Add(constructorExpression);
+ }
+ else if (parameterMap.ReferenceMap != null)
+ {
+ // Reference type.
+
+ var referenceAssignments = new List<MemberAssignment>();
+ CreateMemberAssignmentsForMapping(parameterMap.ReferenceMap.Data.Mapping, referenceAssignments);
+
+ var referenceBody = CreateInstanceAndAssignMembers(parameterMap.ReferenceMap.Data.Parameter.ParameterType, referenceAssignments);
+ argumentExpressions.Add(referenceBody);
+ }
+ else
+ {
+ // Value type.
+
+ int index;
+ if (reader.Configuration.HasHeaderRecord && (parameterMap.Data.IsNameSet || !parameterMap.Data.IsIndexSet))
+ {
+ // Use name.
+ index = reader.GetFieldIndex(parameterMap.Data.Names, parameterMap.Data.NameIndex, parameterMap.Data.IsOptional);
+ if (index == -1)
+ {
+ if (parameterMap.Data.IsDefaultSet || parameterMap.Data.IsOptional)
+ {
+ var defaultExpression = CreateDefaultExpression(parameterMap, Expression.Constant(string.Empty));
+ argumentExpressions.Add(defaultExpression);
+ continue;
+ }
+
+ // Skip if the index was not found.
+ continue;
+ }
+ }
+ else if (!parameterMap.Data.IsIndexSet && parameterMap.Data.IsOptional)
+ {
+ // If there wasn't an index explicitly, use a default value since constructors need all
+ // arguments to be created.
+ var defaultExpression = CreateDefaultExpression(parameterMap, Expression.Constant(string.Empty));
+ argumentExpressions.Add(defaultExpression);
+ continue;
+ }
+ else
+ {
+ // Use index.
+ index = parameterMap.Data.Index;
+ }
+
+ // Get the field using the field index.
+ var method = typeof(IReaderRow).GetProperty("Item", typeof(string), new[] { typeof(int) }).GetGetMethod();
+ Expression fieldExpression = Expression.Call(Expression.Constant(reader), method, Expression.Constant(index, typeof(int)));
+
+ if (parameterMap.Data.IsDefaultSet)
+ {
+ fieldExpression = CreateDefaultExpression(parameterMap, fieldExpression);
+ }
+ else
+ {
+ fieldExpression = CreateTypeConverterExpression(parameterMap, fieldExpression);
+ }
+
+ argumentExpressions.Add(fieldExpression);
+ }
+ }
+ }
+
+ /// <summary>
+ /// Creates the member assignments for the given <see cref="ClassMap"/>.
+ /// </summary>
+ /// <param name="mapping">The mapping to create the assignments for.</param>
+ /// <param name="assignments">The assignments that will be added to from the mapping.</param>
+ public virtual void CreateMemberAssignmentsForMapping(ClassMap mapping, List<MemberAssignment> assignments)
+ {
+ foreach (var memberMap in mapping.MemberMaps)
+ {
+ var fieldExpression = CreateGetFieldExpression(memberMap);
+ if (fieldExpression == null)
+ {
+ continue;
+ }
+
+ assignments.Add(Expression.Bind(memberMap.Data.Member, fieldExpression));
+ }
+
+ foreach (var referenceMap in mapping.ReferenceMaps)
+ {
+ if (!reader.CanRead(referenceMap))
+ {
+ continue;
+ }
+
+ Expression referenceBody;
+ if (referenceMap.Data.Mapping.ParameterMaps.Count > 0)
+ {
+ var arguments = new List<Expression>();
+ CreateConstructorArgumentExpressionsForMapping(referenceMap.Data.Mapping, arguments);
+ var args = new GetConstructorArgs(referenceMap.Data.Mapping.ClassType);
+ referenceBody = Expression.New(reader.Configuration.GetConstructor(args), arguments);
+ }
+ else
+ {
+ var referenceAssignments = new List<MemberAssignment>();
+ CreateMemberAssignmentsForMapping(referenceMap.Data.Mapping, referenceAssignments);
+ referenceBody = CreateInstanceAndAssignMembers(referenceMap.Data.Member.MemberType(), referenceAssignments);
+ }
+
+ assignments.Add(Expression.Bind(referenceMap.Data.Member, referenceBody));
+ }
+ }
+
+ /// <summary>
+ /// Creates an expression the represents getting the field for the given
+ /// member and converting it to the member's type.
+ /// </summary>
+ /// <param name="memberMap">The mapping for the member.</param>
+ public virtual Expression? CreateGetFieldExpression(MemberMap memberMap)
+ {
+ if (memberMap.Data.ReadingConvertExpression != null)
+ {
+ // The user is providing the expression to do the conversion.
+ Expression exp = Expression.Invoke(memberMap.Data.ReadingConvertExpression, Expression.Constant(new ConvertFromStringArgs(reader)));
+ return Expression.Convert(exp, memberMap.Data.Member.MemberType());
+ }
+
+ if (!reader.CanRead(memberMap))
+ {
+ return null;
+ }
+
+ if (memberMap.Data.IsConstantSet)
+ {
+ return Expression.Convert(Expression.Constant(memberMap.Data.Constant), memberMap.Data.Member.MemberType());
+ }
+
+ if (memberMap.Data.TypeConverter == null)
+ {
+ // Skip if the type isn't convertible.
+ return null;
+ }
+
+ int index;
+ if (reader.Configuration.HasHeaderRecord && (memberMap.Data.IsNameSet || !memberMap.Data.IsIndexSet))
+ {
+ // Use the name.
+ index = reader.GetFieldIndex(memberMap.Data.Names, memberMap.Data.NameIndex, memberMap.Data.IsOptional);
+ if (index == -1)
+ {
+ if (memberMap.Data.IsDefaultSet)
+ {
+ return CreateDefaultExpression(memberMap, Expression.Constant(string.Empty));
+ }
+
+ // Skip if the index was not found.
+ return null;
+ }
+ }
+ else
+ {
+ // Use the index.
+ index = memberMap.Data.Index;
+ }
+
+ // Get the field using the field index.
+ var method = typeof(IReaderRow).GetProperty("Item", typeof(string), new[] { typeof(int) }).GetGetMethod();
+ Expression fieldExpression = Expression.Call(Expression.Constant(reader), method, Expression.Constant(index, typeof(int)));
+
+ // Validate the field.
+ if (memberMap.Data.ValidateExpression != null)
+ {
+ var constructor = typeof(ValidateArgs).GetConstructor(new Type[] { typeof(string), typeof(IReaderRow) });
+ var args = Expression.New(constructor, fieldExpression, Expression.Constant(reader));
+ var validateExpression = Expression.IsFalse(Expression.Invoke(memberMap.Data.ValidateExpression, args));
+ var validationExceptionConstructor = typeof(FieldValidationException).GetConstructor(new Type[] { typeof(CsvContext), typeof(string), typeof(string) });
+ var messageExpression = Expression.Invoke(memberMap.Data.ValidateMessageExpression, args);
+ var newValidationExceptionExpression = Expression.New(validationExceptionConstructor, Expression.Constant(reader.Context), fieldExpression, messageExpression);
+ var throwExpression = Expression.Throw(newValidationExceptionExpression);
+ fieldExpression = Expression.Block(
+ // If the validate method returns false, throw an exception.
+ Expression.IfThen(validateExpression, throwExpression),
+ fieldExpression
+ );
+ }
+
+ if (memberMap.Data.IsDefaultSet)
+ {
+ return CreateDefaultExpression(memberMap, fieldExpression);
+ }
+
+ fieldExpression = CreateTypeConverterExpression(memberMap, fieldExpression);
+
+ return fieldExpression;
+ }
+
+ /// <summary>
+ /// Creates a member expression for the given member on the record.
+ /// This will recursively traverse the mapping to find the member
+ /// and create a safe member accessor for each level as it goes.
+ /// </summary>
+ /// <param name="recordExpression">The current member expression.</param>
+ /// <param name="mapping">The mapping to look for the member to map on.</param>
+ /// <param name="memberMap">The member map to look for on the mapping.</param>
+ /// <returns>An Expression to access the given member.</returns>
+ public virtual Expression? CreateGetMemberExpression(Expression recordExpression, ClassMap mapping, MemberMap memberMap)
+ {
+ if (mapping.MemberMaps.Any(mm => mm == memberMap))
+ {
+ // The member is on this level.
+ if (memberMap.Data.Member is PropertyInfo)
+ {
+ return Expression.Property(recordExpression, (PropertyInfo)memberMap.Data.Member);
+ }
+
+ if (memberMap.Data.Member is FieldInfo)
+ {
+ return Expression.Field(recordExpression, (FieldInfo)memberMap.Data.Member);
+ }
+ }
+
+ // The member isn't on this level of the mapping.
+ // We need to search down through the reference maps.
+ foreach (var refMap in mapping.ReferenceMaps)
+ {
+ var wrapped = refMap.Data.Member.GetMemberExpression(recordExpression);
+ var memberExpression = CreateGetMemberExpression(wrapped, refMap.Data.Mapping, memberMap);
+ if (memberExpression == null)
+ {
+ continue;
+ }
+
+ if (refMap.Data.Member.MemberType().GetTypeInfo().IsValueType)
+ {
+ return memberExpression;
+ }
+
+ var nullCheckExpression = Expression.Equal(wrapped, Expression.Constant(null));
+
+ var isValueType = memberMap.Data.Member.MemberType().GetTypeInfo().IsValueType;
+ var isGenericType = isValueType && memberMap.Data.Member.MemberType().GetTypeInfo().IsGenericType;
+ Type memberType;
+ if (isValueType && !isGenericType && !writer.Configuration.UseNewObjectForNullReferenceMembers)
+ {
+ memberType = typeof(Nullable<>).MakeGenericType(memberMap.Data.Member.MemberType());
+ memberExpression = Expression.Convert(memberExpression, memberType);
+ }
+ else
+ {
+ memberType = memberMap.Data.Member.MemberType();
+ }
+
+ var defaultValueExpression = isValueType && !isGenericType
+ ? (Expression)Expression.New(memberType)
+ : Expression.Constant(null, memberType);
+ var conditionExpression = Expression.Condition(nullCheckExpression, defaultValueExpression, memberExpression);
+ return conditionExpression;
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Creates an instance of the given type using <see cref="IObjectResolver"/>, then assigns
+ /// the given member assignments to that instance.
+ /// </summary>
+ /// <param name="recordType">The type of the record we're creating.</param>
+ /// <param name="assignments">The member assignments that will be assigned to the created instance.</param>
+ /// <returns>A <see cref="BlockExpression"/> representing the instance creation and assignments.</returns>
+ public virtual BlockExpression CreateInstanceAndAssignMembers(Type recordType, List<MemberAssignment> assignments)
+ {
+ var expressions = new List<Expression>();
+ var createInstanceMethod = typeof(IObjectResolver).GetMethod(nameof(IObjectResolver.Resolve), new Type[] { typeof(Type), typeof(object[]) });
+ var instanceExpression = Expression.Convert(Expression.Call(Expression.Constant(ObjectResolver.Current), createInstanceMethod, Expression.Constant(recordType), Expression.Constant(new object[0])), recordType);
+ var variableExpression = Expression.Variable(instanceExpression.Type, "instance");
+ expressions.Add(Expression.Assign(variableExpression, instanceExpression));
+ expressions.AddRange(assignments.Select(b => Expression.Assign(Expression.MakeMemberAccess(variableExpression, b.Member), b.Expression)));
+ expressions.Add(variableExpression);
+ var variables = new ParameterExpression[] { variableExpression };
+ var blockExpression = Expression.Block(variables, expressions);
+
+ return blockExpression;
+ }
+
+ /// <summary>
+ /// Creates an expression that converts the field expression using a type converter.
+ /// </summary>
+ /// <param name="memberMap">The mapping for the member.</param>
+ /// <param name="fieldExpression">The field expression.</param>
+ public virtual Expression CreateTypeConverterExpression(MemberMap memberMap, Expression fieldExpression)
+ {
+ memberMap.Data.TypeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions { CultureInfo = reader.Configuration.CultureInfo }, reader.Context.TypeConverterOptionsCache.GetOptions(memberMap.Data.Member.MemberType()), memberMap.Data.TypeConverterOptions);
+
+ Expression typeConverterFieldExpression = Expression.Call(Expression.Constant(memberMap.Data.TypeConverter), nameof(ITypeConverter.ConvertFromString), null, fieldExpression, Expression.Constant(reader), Expression.Constant(memberMap.Data));
+ typeConverterFieldExpression = Expression.Convert(typeConverterFieldExpression, memberMap.Data.Member.MemberType());
+
+ return typeConverterFieldExpression;
+ }
+
+ /// <summary>
+ /// Creates an expression that converts the field expression using a type converter.
+ /// </summary>
+ /// <param name="parameterMap">The mapping for the parameter.</param>
+ /// <param name="fieldExpression">The field expression.</param>
+ public virtual Expression CreateTypeConverterExpression(ParameterMap parameterMap, Expression fieldExpression)
+ {
+ parameterMap.Data.TypeConverterOptions = TypeConverterOptions.Merge
+ (
+ new TypeConverterOptions { CultureInfo = reader.Configuration.CultureInfo },
+ reader.Context.TypeConverterOptionsCache.GetOptions(parameterMap.Data.Parameter.ParameterType),
+ parameterMap.Data.TypeConverterOptions
+ );
+
+ var memberMapData = new MemberMapData(null)
+ {
+ Constant = parameterMap.Data.Constant,
+ Default = parameterMap.Data.Default,
+ Ignore = parameterMap.Data.Ignore,
+ Index = parameterMap.Data.Index,
+ IsConstantSet = parameterMap.Data.IsConstantSet,
+ IsDefaultSet = parameterMap.Data.IsDefaultSet,
+ IsIndexSet = parameterMap.Data.IsIndexSet,
+ IsNameSet = parameterMap.Data.IsNameSet,
+ NameIndex = parameterMap.Data.NameIndex,
+ TypeConverter = parameterMap.Data.TypeConverter,
+ TypeConverterOptions = parameterMap.Data.TypeConverterOptions
+ };
+ memberMapData.Names.AddRange(parameterMap.Data.Names);
+
+ Expression typeConverterFieldExpression = Expression.Call(Expression.Constant(parameterMap.Data.TypeConverter), nameof(ITypeConverter.ConvertFromString), null, fieldExpression, Expression.Constant(reader), Expression.Constant(memberMapData));
+ typeConverterFieldExpression = Expression.Convert(typeConverterFieldExpression, parameterMap.Data.Parameter.ParameterType);
+
+ return typeConverterFieldExpression;
+ }
+
+ /// <summary>
+ /// Creates a default expression if field expression is empty.
+ /// </summary>
+ /// <param name="memberMap">The mapping for the member.</param>
+ /// <param name="fieldExpression">The field expression.</param>
+ public virtual Expression CreateDefaultExpression(MemberMap memberMap, Expression fieldExpression)
+ {
+ var typeConverterExpression = CreateTypeConverterExpression(memberMap, fieldExpression);
+
+ // Create default value expression.
+ Expression defaultValueExpression;
+ if (memberMap.Data.Member.MemberType() != typeof(string) && memberMap.Data.Default != null && memberMap.Data.Default.GetType() == typeof(string))
+ {
+ // The default is a string but the member type is not. Use a converter.
+ defaultValueExpression = Expression.Call(Expression.Constant(memberMap.Data.TypeConverter), nameof(ITypeConverter.ConvertFromString), null, Expression.Constant(memberMap.Data.Default), Expression.Constant(reader), Expression.Constant(memberMap.Data));
+ }
+ else
+ {
+ // The member type and default type match.
+ defaultValueExpression = Expression.Constant(memberMap.Data.Default);
+ }
+
+ defaultValueExpression = Expression.Convert(defaultValueExpression, memberMap.Data.Member.MemberType());
+
+ // If null, use string.Empty.
+ var coalesceExpression = Expression.Coalesce(fieldExpression, Expression.Constant(string.Empty));
+
+ // Check if the field is an empty string.
+ var checkFieldEmptyExpression = Expression.Equal(Expression.Convert(coalesceExpression, typeof(string)), Expression.Constant(string.Empty, typeof(string)));
+
+ // Use a default value if the field is an empty string.
+ fieldExpression = Expression.Condition(checkFieldEmptyExpression, defaultValueExpression, typeConverterExpression);
+
+ return fieldExpression;
+ }
+
+ /// <summary>
+ /// Creates a default expression if field expression is empty.
+ /// </summary>
+ /// <param name="parameterMap">The mapping for the parameter.</param>
+ /// <param name="fieldExpression">The field expression.</param>
+ public virtual Expression CreateDefaultExpression(ParameterMap parameterMap, Expression fieldExpression)
+ {
+ var typeConverterExpression = CreateTypeConverterExpression(parameterMap, fieldExpression);
+
+ // Create default value expression.
+ Expression defaultValueExpression;
+ if (parameterMap.Data.Parameter.ParameterType != typeof(string) && parameterMap.Data.Default != null && parameterMap.Data.Default.GetType() == typeof(string))
+ {
+ // The default is a string but the member type is not. Use a converter.
+ //defaultValueExpression = Expression.Call(Expression.Constant(parameterMap.Data.TypeConverter), nameof(ITypeConverter.ConvertFromString), null, Expression.Constant(parameterMap.Data.Default), Expression.Constant(reader), Expression.Constant(memberMap.Data));
+ defaultValueExpression = CreateTypeConverterExpression(parameterMap, Expression.Constant(parameterMap.Data.Default));
+ }
+ else
+ {
+ // The member type and default type match.
+ defaultValueExpression = Expression.Convert(Expression.Constant(parameterMap.Data.Default), parameterMap.Data.Parameter.ParameterType);
+ }
+
+ // If null, use string.Empty.
+ var coalesceExpression = Expression.Coalesce(fieldExpression, Expression.Constant(string.Empty));
+
+ // Check if the field is an empty string.
+ var checkFieldEmptyExpression = Expression.Equal(Expression.Convert(coalesceExpression, typeof(string)), Expression.Constant(string.Empty, typeof(string)));
+
+ // Use a default value if the field is an empty string.
+ fieldExpression = Expression.Condition(checkFieldEmptyExpression, defaultValueExpression, typeConverterExpression);
+
+ return fieldExpression;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordCreator.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordCreator.cs
new file mode 100644
index 0000000..9adc951
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordCreator.cs
@@ -0,0 +1,66 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Creates objects.
+ /// </summary>
+ public class ObjectRecordCreator : RecordCreator
+ {
+ /// <summary>
+ /// Initializes a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader"></param>
+ public ObjectRecordCreator(CsvReader reader) : base(reader) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Func{T}"/>
+ /// that will create a record of the given type using the current
+ /// reader row.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ protected override Delegate CreateCreateRecordDelegate(Type recordType)
+ {
+ if (Reader.Context.Maps[recordType] == null)
+ {
+ Reader.Context.Maps.Add(Reader.Context.AutoMap(recordType));
+ }
+
+ var map = Reader.Context.Maps[recordType];
+
+ Expression body;
+
+ if (map.ParameterMaps.Count > 0)
+ {
+ // This is a constructor parameter type.
+ var arguments = new List<Expression>();
+ ExpressionManager.CreateConstructorArgumentExpressionsForMapping(map, arguments);
+
+ var args = new GetConstructorArgs(map.ClassType);
+ body = Expression.New(Reader.Configuration.GetConstructor(args), arguments);
+ }
+ else
+ {
+ var assignments = new List<MemberAssignment>();
+ ExpressionManager.CreateMemberAssignmentsForMapping(map, assignments);
+
+ if (assignments.Count == 0)
+ {
+ throw new ReaderException(Reader.Context, $"No members are mapped for type '{recordType.FullName}'.");
+ }
+
+ body = ExpressionManager.CreateInstanceAndAssignMembers(recordType, assignments);
+ }
+
+ var funcType = typeof(Func<>).MakeGenericType(recordType);
+
+ return Expression.Lambda(funcType, body).Compile();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordWriter.cs
new file mode 100644
index 0000000..08fc79b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/ObjectRecordWriter.cs
@@ -0,0 +1,124 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Writes objects.
+ /// </summary>
+ public class ObjectRecordWriter : RecordWriter
+ {
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public ObjectRecordWriter(CsvWriter writer) : base(writer) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Action{T}"/>
+ /// that will write the given record using the current writer row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ protected override Action<T> CreateWriteDelegate<T>(T record)
+ {
+ var type = Writer.GetTypeForRecord(record);
+
+ if (Writer.Context.Maps[type] == null)
+ {
+ Writer.Context.Maps.Add(Writer.Context.AutoMap(type));
+ }
+
+ var recordParameter = Expression.Parameter(typeof(T), "record");
+ var recordParameterConverted = Expression.Convert(recordParameter, type);
+
+ // Get a list of all the members so they will
+ // be sorted properly.
+ var members = new MemberMapCollection();
+ members.AddMembers(Writer.Context.Maps[type]);
+
+ if (members.Count == 0)
+ {
+ throw new WriterException(Writer.Context, $"No properties are mapped for type '{type.FullName}'.");
+ }
+
+ var delegates = new List<Action<T>>();
+
+ foreach (var memberMap in members)
+ {
+ if (memberMap.Data.WritingConvertExpression != null)
+ {
+ // The user is providing the expression to do the conversion.
+ var constructor = typeof(ConvertToStringArgs<T>).GetConstructor(new Type[] { typeof(T) });
+ var args = Expression.New(constructor, recordParameterConverted);
+ Expression exp = Expression.Invoke(memberMap.Data.WritingConvertExpression, args);
+ exp = Expression.Call(Expression.Constant(Writer), nameof(Writer.WriteField), null, exp);
+ delegates.Add(Expression.Lambda<Action<T>>(exp, recordParameter).Compile());
+ continue;
+ }
+
+ if (!Writer.CanWrite(memberMap))
+ {
+ continue;
+ }
+
+ Expression fieldExpression;
+
+ if (memberMap.Data.IsConstantSet)
+ {
+ if (memberMap.Data.Constant == null)
+ {
+ fieldExpression = Expression.Constant(string.Empty);
+ }
+ else
+ {
+ fieldExpression = Expression.Constant(memberMap.Data.Constant);
+ var typeConverterExpression = Expression.Constant(Writer.Context.TypeConverterCache.GetConverter(memberMap.Data.Constant.GetType()));
+ var method = typeof(ITypeConverter).GetMethod(nameof(ITypeConverter.ConvertToString));
+ fieldExpression = Expression.Convert(fieldExpression, typeof(object));
+ fieldExpression = Expression.Call(typeConverterExpression, method, fieldExpression, Expression.Constant(Writer), Expression.Constant(memberMap.Data));
+ }
+ }
+ else
+ {
+ if (memberMap.Data.TypeConverter == null)
+ {
+ // Skip if the type isn't convertible.
+ continue;
+ }
+
+ fieldExpression = ExpressionManager.CreateGetMemberExpression(recordParameterConverted, Writer.Context.Maps[type], memberMap);
+
+ var typeConverterExpression = Expression.Constant(memberMap.Data.TypeConverter);
+ memberMap.Data.TypeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions { CultureInfo = Writer.Configuration.CultureInfo }, Writer.Context.TypeConverterOptionsCache.GetOptions(memberMap.Data.Member.MemberType()), memberMap.Data.TypeConverterOptions);
+
+ var method = typeof(ITypeConverter).GetMethod(nameof(ITypeConverter.ConvertToString));
+ fieldExpression = Expression.Convert(fieldExpression, typeof(object));
+ fieldExpression = Expression.Call(typeConverterExpression, method, fieldExpression, Expression.Constant(Writer), Expression.Constant(memberMap.Data));
+
+ if (type.GetTypeInfo().IsClass)
+ {
+ var areEqualExpression = Expression.Equal(recordParameterConverted, Expression.Constant(null));
+ fieldExpression = Expression.Condition(areEqualExpression, Expression.Constant(string.Empty), fieldExpression);
+ }
+ }
+
+ var writeFieldMethodCall = Expression.Call(Expression.Constant(Writer), nameof(Writer.WriteConvertedField), null, fieldExpression, Expression.Constant(memberMap.Data.Type));
+
+ delegates.Add(Expression.Lambda<Action<T>>(writeFieldMethodCall, recordParameter).Compile());
+ }
+
+ var action = CombineDelegates(delegates) ?? new Action<T>((T parameter) => { });
+
+ return action;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordCreator.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordCreator.cs
new file mode 100644
index 0000000..3e1cfd0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordCreator.cs
@@ -0,0 +1,49 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System;
+using System.Linq.Expressions;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Creates primitive records.
+ /// </summary>
+ public class PrimitiveRecordCreator : RecordCreator
+ {
+ /// <summary>
+ /// Initializes a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public PrimitiveRecordCreator(CsvReader reader) : base(reader) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Func{T}"/>
+ /// that will create a record of the given type using the current
+ /// reader row.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ protected override Delegate CreateCreateRecordDelegate(Type recordType)
+ {
+ var method = typeof(IReaderRow).GetProperty("Item", typeof(string), new[] { typeof(int) }).GetGetMethod();
+ Expression fieldExpression = Expression.Call(Expression.Constant(Reader), method, Expression.Constant(0, typeof(int)));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ Index = 0,
+ TypeConverter = Reader.Context.TypeConverterCache.GetConverter(recordType)
+ };
+ memberMapData.TypeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions { CultureInfo = Reader.Configuration.CultureInfo }, Reader.Context.TypeConverterOptionsCache.GetOptions(recordType));
+
+ fieldExpression = Expression.Call(Expression.Constant(memberMapData.TypeConverter), "ConvertFromString", null, fieldExpression, Expression.Constant(Reader), Expression.Constant(memberMapData));
+ fieldExpression = Expression.Convert(fieldExpression, recordType);
+
+ var funcType = typeof(Func<>).MakeGenericType(recordType);
+
+ return Expression.Lambda(funcType, fieldExpression).Compile();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordWriter.cs
new file mode 100644
index 0000000..128c5c3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/PrimitiveRecordWriter.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System;
+using System.Linq.Expressions;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Writes primitives.
+ /// </summary>
+ public class PrimitiveRecordWriter : RecordWriter
+ {
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public PrimitiveRecordWriter(CsvWriter writer) : base(writer) { }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Action{T}"/>
+ /// that will write the given record using the current writer row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ protected override Action<T> CreateWriteDelegate<T>(T record)
+ {
+ var type = Writer.GetTypeForRecord(record);
+
+ var recordParameter = Expression.Parameter(typeof(T), "record");
+
+ Expression fieldExpression = Expression.Convert(recordParameter, typeof(object));
+
+ var typeConverter = Writer.Context.TypeConverterCache.GetConverter(type);
+ var typeConverterExpression = Expression.Constant(typeConverter);
+ var method = typeof(ITypeConverter).GetMethod(nameof(ITypeConverter.ConvertToString));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ Index = 0,
+ TypeConverter = typeConverter,
+ TypeConverterOptions = TypeConverterOptions.Merge(new TypeConverterOptions(), Writer.Context.TypeConverterOptionsCache.GetOptions(type))
+ };
+ memberMapData.TypeConverterOptions.CultureInfo = Writer.Configuration.CultureInfo;
+
+ fieldExpression = Expression.Call(typeConverterExpression, method, fieldExpression, Expression.Constant(Writer), Expression.Constant(memberMapData));
+ fieldExpression = Expression.Call(Expression.Constant(Writer), nameof(Writer.WriteConvertedField), null, fieldExpression, Expression.Constant(type));
+
+ var action = Expression.Lambda<Action<T>>(fieldExpression, recordParameter).Compile();
+
+ return action;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreator.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreator.cs
new file mode 100644
index 0000000..d14f0d6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreator.cs
@@ -0,0 +1,107 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Base implementation for classes that create records.
+ /// </summary>
+ public abstract class RecordCreator
+ {
+ private readonly Dictionary<Type, Delegate> createRecordFuncs = new Dictionary<Type, Delegate>();
+
+ /// <summary>
+ /// The reader.
+ /// </summary>
+ protected CsvReader Reader { get; private set; }
+
+ /// <summary>
+ /// The expression manager.
+ /// </summary>
+ protected ExpressionManager ExpressionManager { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public RecordCreator(CsvReader reader)
+ {
+ Reader = reader;
+ ExpressionManager = new ExpressionManager(reader);
+ }
+
+ /// <summary>
+ /// Create a record of the given type using the current row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ public T Create<T>()
+ {
+ try
+ {
+ return ((Func<T>)GetCreateRecordDelegate(typeof(T))).Invoke();
+ }
+ catch (TargetInvocationException ex)
+ {
+ if (ex.InnerException != null)
+ {
+ throw ex.InnerException;
+ }
+ else
+ {
+ throw;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Create a record of the given type using the current row.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ public object? Create(Type recordType)
+ {
+ try
+ {
+ return GetCreateRecordDelegate(recordType).DynamicInvoke();
+ }
+ catch (TargetInvocationException ex)
+ {
+ if (ex.InnerException != null)
+ {
+ throw ex.InnerException;
+ }
+ else
+ {
+ throw;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the delegate to create a record for the given record type.
+ /// If the delegate doesn't exist, one will be created and cached.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ protected virtual Delegate GetCreateRecordDelegate(Type recordType)
+ {
+ if (!createRecordFuncs.TryGetValue(recordType, out Delegate func))
+ {
+ createRecordFuncs[recordType] = func = CreateCreateRecordDelegate(recordType);
+ }
+
+ return func;
+ }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Func{T}"/>
+ /// that will create a record of the given type using the current
+ /// reader row.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ protected abstract Delegate CreateCreateRecordDelegate(Type recordType);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreatorFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreatorFactory.cs
new file mode 100644
index 0000000..b785115
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordCreatorFactory.cs
@@ -0,0 +1,51 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Factory to create record creators.
+ /// </summary>
+ public class RecordCreatorFactory
+ {
+ private readonly CsvReader reader;
+ private readonly DynamicRecordCreator dynamicRecordCreator;
+ private readonly PrimitiveRecordCreator primitiveRecordCreator;
+ private readonly ObjectRecordCreator objectRecordCreator;
+
+ /// <summary>
+ /// Initializes a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public RecordCreatorFactory(CsvReader reader)
+ {
+ this.reader = reader;
+ dynamicRecordCreator = new DynamicRecordCreator(reader);
+ primitiveRecordCreator = new PrimitiveRecordCreator(reader);
+ objectRecordCreator = new ObjectRecordCreator(reader);
+ }
+
+ /// <summary>
+ /// Creates a record creator for the given record type.
+ /// </summary>
+ /// <param name="recordType">The record type.</param>
+ public virtual RecordCreator MakeRecordCreator(Type recordType)
+ {
+ if (recordType == typeof(object))
+ {
+ return dynamicRecordCreator;
+ }
+
+ if (recordType.GetTypeInfo().IsPrimitive)
+ {
+ return primitiveRecordCreator;
+ }
+
+ return objectRecordCreator;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordHydrator.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordHydrator.cs
new file mode 100644
index 0000000..7de4ddb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordHydrator.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Hydrates members of an existing record.
+ /// </summary>
+ public class RecordHydrator
+ {
+ private readonly CsvReader reader;
+ private readonly ExpressionManager expressionManager;
+ private readonly Dictionary<Type, Delegate> hydrateRecordActions = new Dictionary<Type, Delegate>();
+
+ /// <summary>
+ /// Creates a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader">The reader.</param>
+ public RecordHydrator(CsvReader reader)
+ {
+ this.reader = reader;
+ expressionManager = ObjectResolver.Current.Resolve<ExpressionManager>(reader);
+ }
+
+ /// <summary>
+ /// Hydrates members of the given record using the current reader row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ public void Hydrate<T>(T record)
+ {
+ try
+ {
+ GetHydrateRecordAction<T>()(record);
+ }
+ catch (TargetInvocationException ex)
+ {
+ if (ex.InnerException != null)
+ {
+ throw ex.InnerException;
+ }
+ else
+ {
+ throw;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the action delegate used to hydrate a custom class object's members with data from the reader.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ protected virtual Action<T> GetHydrateRecordAction<T>()
+ {
+ var recordType = typeof(T);
+
+ if (!hydrateRecordActions.TryGetValue(recordType, out Delegate action))
+ {
+ hydrateRecordActions[recordType] = action = CreateHydrateRecordAction<T>();
+ }
+
+ return (Action<T>)action;
+ }
+
+ /// <summary>
+ /// Creates the action delegate used to hydrate a record's members with data from the reader.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ protected virtual Action<T> CreateHydrateRecordAction<T>()
+ {
+ var recordType = typeof(T);
+
+ if (reader.Context.Maps[recordType] == null)
+ {
+ reader.Context.Maps.Add(reader.Context.AutoMap(recordType));
+ }
+
+ var mapping = reader.Context.Maps[recordType];
+
+ var recordTypeParameter = Expression.Parameter(recordType, "record");
+ var memberAssignments = new List<Expression>();
+
+ foreach (var memberMap in mapping.MemberMaps)
+ {
+ var fieldExpression = expressionManager.CreateGetFieldExpression(memberMap);
+ if (fieldExpression == null)
+ {
+ continue;
+ }
+
+ var memberTypeParameter = Expression.Parameter(memberMap.Data.Member.MemberType(), "member");
+ var memberAccess = Expression.MakeMemberAccess(recordTypeParameter, memberMap.Data.Member);
+ var memberAssignment = Expression.Assign(memberAccess, fieldExpression);
+ memberAssignments.Add(memberAssignment);
+ }
+
+ foreach (var referenceMap in mapping.ReferenceMaps)
+ {
+ if (!reader.CanRead(referenceMap))
+ {
+ continue;
+ }
+
+ var referenceAssignments = new List<MemberAssignment>();
+ expressionManager.CreateMemberAssignmentsForMapping(referenceMap.Data.Mapping, referenceAssignments);
+
+ var referenceBody = expressionManager.CreateInstanceAndAssignMembers(referenceMap.Data.Member.MemberType(), referenceAssignments);
+
+ var memberTypeParameter = Expression.Parameter(referenceMap.Data.Member.MemberType(), "referenceMember");
+ var memberAccess = Expression.MakeMemberAccess(recordTypeParameter, referenceMap.Data.Member);
+ var memberAssignment = Expression.Assign(memberAccess, referenceBody);
+ memberAssignments.Add(memberAssignment);
+ }
+
+ var body = Expression.Block(memberAssignments);
+
+ return Expression.Lambda<Action<T>>(body, recordTypeParameter).Compile();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordManager.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordManager.cs
new file mode 100644
index 0000000..eef3d6e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordManager.cs
@@ -0,0 +1,80 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Manages record manipulation.
+ /// </summary>
+ public class RecordManager
+ {
+ private readonly CsvReader reader;
+ private readonly RecordCreatorFactory recordCreatorFactory;
+ private readonly RecordHydrator recordHydrator;
+ private readonly RecordWriterFactory recordWriterFactory;
+
+ /// <summary>
+ /// Initializes a new instance using the given reader.
+ /// </summary>
+ /// <param name="reader"></param>
+ public RecordManager(CsvReader reader)
+ {
+ this.reader = reader;
+ recordCreatorFactory = ObjectResolver.Current.Resolve<RecordCreatorFactory>(reader);
+ recordHydrator = ObjectResolver.Current.Resolve<RecordHydrator>(reader);
+ }
+
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public RecordManager(CsvWriter writer)
+ {
+ recordWriterFactory = ObjectResolver.Current.Resolve<RecordWriterFactory>(writer);
+ }
+
+ /// <summary>
+ /// Creates a record of the given type using the current reader row.
+ /// </summary>
+ /// <typeparam name="T">The type of record to create.</typeparam>
+ public T Create<T>()
+ {
+ var recordCreator = recordCreatorFactory.MakeRecordCreator(typeof(T));
+ return recordCreator.Create<T>();
+ }
+
+ /// <summary>
+ /// Creates a record of the given type using the current reader row.
+ /// </summary>
+ /// <param name="recordType">The type of record to create.</param>
+ public object? Create(Type recordType)
+ {
+ var recordCreator = recordCreatorFactory.MakeRecordCreator(recordType);
+ return recordCreator.Create(recordType);
+ }
+
+ /// <summary>
+ /// Hydrates the given record using the current reader row.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record to hydrate.</param>
+ public void Hydrate<T>(T record)
+ {
+ recordHydrator.Hydrate(record);
+ }
+
+ /// <summary>
+ /// Writes the given record to the current writer row.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record.</param>
+ public void Write<T>(T record)
+ {
+ var recordWriter = recordWriterFactory.MakeRecordWriter(record);
+ recordWriter.Write(record);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriter.cs
new file mode 100644
index 0000000..ca1194f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriter.cs
@@ -0,0 +1,109 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Base implementation for classes that write records.
+ /// </summary>
+ public abstract class RecordWriter
+ {
+ private readonly Dictionary<int, Delegate> typeActions = new Dictionary<int, Delegate>();
+
+ /// <summary>
+ /// Gets the writer.
+ /// </summary>
+ protected CsvWriter Writer { get; private set; }
+
+ /// <summary>
+ /// The expression manager.
+ /// </summary>
+ protected ExpressionManager ExpressionManager { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public RecordWriter(CsvWriter writer)
+ {
+ Writer = writer;
+ ExpressionManager = ObjectResolver.Current.Resolve<ExpressionManager>(writer);
+ }
+
+ /// <summary>
+ /// Writes the record to the current row.
+ /// </summary>
+ /// <typeparam name="T">Type of the record.</typeparam>
+ /// <param name="record">The record.</param>
+ public void Write<T>(T record)
+ {
+ try
+ {
+ GetWriteDelegate(record)(record);
+ }
+ catch (TargetInvocationException ex)
+ {
+ if (ex.InnerException != null)
+ {
+ throw ex.InnerException;
+ }
+ else
+ {
+ throw;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the delegate to write the given record.
+ /// If the delegate doesn't exist, one will be created and cached.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ protected Action<T> GetWriteDelegate<T>(T record)
+ {
+ var type = typeof(T);
+ var typeKeyName = type.AssemblyQualifiedName;
+ if (type == typeof(object))
+ {
+ type = record.GetType();
+ typeKeyName += $"|{type.AssemblyQualifiedName}";
+ }
+
+ int typeKey = typeKeyName.GetHashCode();
+
+ if (!typeActions.TryGetValue(typeKey, out Delegate action))
+ {
+ typeActions[typeKey] = action = CreateWriteDelegate(record);
+ }
+
+ return (Action<T>)action;
+ }
+
+ /// <summary>
+ /// Creates a <see cref="Delegate"/> of type <see cref="Action{T}"/>
+ /// that will write the given record using the current writer row.
+ /// </summary>
+ /// <typeparam name="T">The record type.</typeparam>
+ /// <param name="record">The record.</param>
+ protected abstract Action<T> CreateWriteDelegate<T>(T record);
+
+ /// <summary>
+ /// Combines the delegates into a single multicast delegate.
+ /// This is needed because Silverlight doesn't have the
+ /// Delegate.Combine( params Delegate[] ) overload.
+ /// </summary>
+ /// <param name="delegates">The delegates to combine.</param>
+ /// <returns>A multicast delegate combined from the given delegates.</returns>
+ protected virtual Action<T> CombineDelegates<T>(IEnumerable<Action<T>> delegates)
+ {
+ return (Action<T>)delegates.Aggregate<Delegate, Delegate>(null, Delegate.Combine);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriterFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriterFactory.cs
new file mode 100644
index 0000000..4f27001
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Expressions/RecordWriterFactory.cs
@@ -0,0 +1,61 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Dynamic;
+using System.Reflection;
+
+namespace CsvHelper.Expressions
+{
+ /// <summary>
+ /// Factory to create record writers.
+ /// </summary>
+ public class RecordWriterFactory
+ {
+ private readonly CsvWriter writer;
+ private readonly ExpandoObjectRecordWriter expandoObjectRecordWriter;
+ private readonly DynamicRecordWriter dynamicRecordWriter;
+ private readonly PrimitiveRecordWriter primitiveRecordWriter;
+ private readonly ObjectRecordWriter objectRecordWriter;
+
+ /// <summary>
+ /// Initializes a new instance using the given writer.
+ /// </summary>
+ /// <param name="writer">The writer.</param>
+ public RecordWriterFactory(CsvWriter writer)
+ {
+ this.writer = writer;
+ expandoObjectRecordWriter = new ExpandoObjectRecordWriter(writer);
+ dynamicRecordWriter = new DynamicRecordWriter(writer);
+ primitiveRecordWriter = new PrimitiveRecordWriter(writer);
+ objectRecordWriter = new ObjectRecordWriter(writer);
+ }
+
+ /// <summary>
+ /// Creates a new record writer for the given record.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record.</param>
+ public virtual RecordWriter MakeRecordWriter<T>(T record)
+ {
+ var type = writer.GetTypeForRecord(record);
+
+ if (record is ExpandoObject expandoObject)
+ {
+ return expandoObjectRecordWriter;
+ }
+
+ if (record is IDynamicMetaObjectProvider dynamicObject)
+ {
+ return dynamicRecordWriter;
+ }
+
+ if (type.GetTypeInfo().IsPrimitive)
+ {
+ return primitiveRecordWriter;
+ }
+
+ return objectRecordWriter;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Factory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Factory.cs
new file mode 100644
index 0000000..80db167
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Factory.cs
@@ -0,0 +1,108 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Creates CsvHelper classes.
+ /// </summary>
+ public class Factory : IFactory
+ {
+ /// <summary>
+ /// Creates an <see cref="IParser"/>.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv parser.</param>
+ /// <param name="configuration">The configuration to use for the csv parser.</param>
+ /// <returns>The created parser.</returns>
+ public virtual IParser CreateParser(TextReader reader, Configuration.CsvConfiguration configuration)
+ {
+ return new CsvParser(reader, configuration);
+ }
+
+ /// <summary>
+ /// Creates an <see cref="IParser" />.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv parser.</param>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <returns>
+ /// The created parser.
+ /// </returns>
+ public virtual IParser CreateParser(TextReader reader, CultureInfo cultureInfo)
+ {
+ return new CsvParser(reader, cultureInfo);
+ }
+
+ /// <summary>
+ /// Creates an <see cref="IReader"/>.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv reader.</param>
+ /// <param name="configuration">The configuration to use for the reader.</param>
+ /// <returns>The created reader.</returns>
+ public virtual IReader CreateReader(TextReader reader, Configuration.CsvConfiguration configuration)
+ {
+ return new CsvReader(reader, configuration);
+ }
+
+ /// <summary>
+ /// Creates an <see cref="IReader" />.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv reader.</param>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <returns>
+ /// The created reader.
+ /// </returns>
+ public virtual IReader CreateReader(TextReader reader, CultureInfo cultureInfo)
+ {
+ return new CsvReader(reader, cultureInfo);
+ }
+
+ /// <summary>
+ /// Creates an <see cref="IReader"/>.
+ /// </summary>
+ /// <param name="parser">The parser used to create the reader.</param>
+ /// <returns>The created reader.</returns>
+ public virtual IReader CreateReader(IParser parser)
+ {
+ return new CsvReader(parser);
+ }
+
+ /// <summary>
+ /// Creates an <see cref="IWriter"/>.
+ /// </summary>
+ /// <param name="writer">The text writer to use for the csv writer.</param>
+ /// <param name="configuration">The configuration to use for the writer.</param>
+ /// <returns>The created writer.</returns>
+ public virtual IWriter CreateWriter(TextWriter writer, Configuration.CsvConfiguration configuration)
+ {
+ return new CsvWriter(writer, configuration);
+ }
+
+ /// <summary>
+ /// Creates an <see cref="IWriter" />.
+ /// </summary>
+ /// <param name="writer">The text writer to use for the csv writer.</param>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <returns>
+ /// The created writer.
+ /// </returns>
+ public virtual IWriter CreateWriter(TextWriter writer, CultureInfo cultureInfo)
+ {
+ return new CsvWriter(writer, cultureInfo);
+ }
+
+ /// <summary>
+ /// Access point for fluent interface to dynamically build a <see cref="ClassMap{T}"/>
+ /// </summary>
+ /// <typeparam name="T">Type you will be making a class map for</typeparam>
+ /// <returns>Options to further configure the <see cref="ClassMap{T}"/></returns>
+ public IHasMap<T> CreateClassMapBuilder<T>()
+ {
+ return new ClassMapBuilder<T>();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/FieldCache.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/FieldCache.cs
new file mode 100644
index 0000000..665a650
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/FieldCache.cs
@@ -0,0 +1,137 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+
+// https://blog.markvincze.com/back-to-basics-dictionary-part-2-net-implementation/
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Caches fields.
+ /// Based on C#'s <see cref="Dictionary{TKey, TValue}"/>.
+ /// </summary>
+ internal class FieldCache
+ {
+ private readonly int maxFieldSize;
+ private int size;
+ private int[] buckets;
+ private Entry[] entries;
+ private int count;
+
+ public FieldCache(int initialSize = 128, int maxFieldSize = 128)
+ {
+ this.maxFieldSize = maxFieldSize;
+ size = initialSize;
+ buckets = new int[size];
+ entries = new Entry[size];
+ }
+
+ public string GetField(char[] buffer, int start, int length)
+ {
+ if (length == 0)
+ {
+ return string.Empty;
+ }
+
+ if (length > maxFieldSize)
+ {
+ return new string(buffer, start, length);
+ }
+
+ var hashCode = GetHashCode(buffer, start, length);
+ ref var bucket = ref GetBucket(hashCode);
+ int i = bucket - 1;
+ while ((uint)i < (uint)entries.Length)
+ {
+ ref var entry = ref entries[i];
+
+ if (entry.HashCode == hashCode && entry.Value.AsSpan().SequenceEqual(new Span<char>(buffer, start, length)))
+ {
+ return entry.Value;
+ }
+
+ i = entry.Next;
+ }
+
+ if (count == entries.Length)
+ {
+ Resize();
+ bucket = ref GetBucket(hashCode);
+ }
+
+ ref var reference = ref entries[count];
+ reference.HashCode = hashCode;
+ reference.Next = bucket - 1;
+ reference.Value = new string(buffer, start, length);
+ bucket = count + 1;
+ count++;
+
+ return reference.Value;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private uint GetHashCode(char[] buffer, int start, int length)
+ {
+ unchecked
+ {
+ uint hash = 17;
+ for (var i = start; i < start + length; i++)
+ {
+ hash = hash * 31 + buffer[i];
+ }
+
+ return hash;
+ }
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private ref int GetBucket(uint hashCode)
+ {
+ return ref buckets[hashCode & buckets.Length - 1];
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private void Resize()
+ {
+ size *= 2;
+
+ var tempEntries = new Entry[size];
+
+ Array.Copy(entries, tempEntries, count);
+
+ buckets = new int[size];
+
+ for (int i = 0; i < count; i++)
+ {
+ ref var tempEntry = ref tempEntries[i];
+
+ if (tempEntry.Next >= -1)
+ {
+ ref var bucket = ref GetBucket(tempEntry.HashCode);
+ tempEntry.Next = bucket - 1;
+ bucket = i + 1;
+ }
+ }
+
+ entries = tempEntries;
+ }
+
+ [DebuggerDisplay("HashCode = {HashCode}, Next = {Next}, Value = {Value}")]
+ private struct Entry
+ {
+ public uint HashCode;
+
+ public int Next;
+
+ public string Value;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/FieldValidationException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/FieldValidationException.cs
new file mode 100644
index 0000000..9f4eacd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/FieldValidationException.cs
@@ -0,0 +1,55 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents a user supplied field validation failure.
+ /// </summary>
+ public class FieldValidationException : ValidationException
+ {
+ /// <summary>
+ /// Gets the field that failed validation.
+ /// </summary>
+ public string Field { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="field">The field that failed validation.</param>
+ public FieldValidationException(CsvContext context, string field) : base(context)
+ {
+ Field = field;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="field">The field that failed validation.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public FieldValidationException(CsvContext context, string field, string message) : base(context, message)
+ {
+ Field = field;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="field">The field that failed validation.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public FieldValidationException(CsvContext context, string field, string message, Exception innerException) : base(context, message, innerException)
+ {
+ Field = field;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/HeaderValidationException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/HeaderValidationException.cs
new file mode 100644
index 0000000..ded47b8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/HeaderValidationException.cs
@@ -0,0 +1,55 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents a header validation failure.
+ /// </summary>
+ public class HeaderValidationException : ValidationException
+ {
+ /// <summary>
+ /// Gets the invalid headers.
+ /// </summary>
+ public InvalidHeader[] InvalidHeaders { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="invalidHeaders">The invalid headers.</param>
+ public HeaderValidationException(CsvContext context, InvalidHeader[] invalidHeaders) : base(context)
+ {
+ InvalidHeaders = invalidHeaders;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="invalidHeaders">The invalid headers.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public HeaderValidationException(CsvContext context, InvalidHeader[] invalidHeaders, string message) : base(context, message)
+ {
+ InvalidHeaders = invalidHeaders;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="invalidHeaders">The invalid headers.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public HeaderValidationException(CsvContext context, InvalidHeader[] invalidHeaders, string message, Exception innerException) : base(context, message, innerException)
+ {
+ InvalidHeaders = invalidHeaders;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IFactory.cs
new file mode 100644
index 0000000..bf857b5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IFactory.cs
@@ -0,0 +1,85 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines methods used to create
+ /// CsvHelper classes.
+ /// </summary>
+ public interface IFactory
+ {
+ /// <summary>
+ /// Creates an <see cref="IParser"/>.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv parser.</param>
+ /// <param name="configuration">The configuration to use for the csv parser.</param>
+ /// <returns>The created parser.</returns>
+ IParser CreateParser(TextReader reader, Configuration.CsvConfiguration configuration);
+
+ /// <summary>
+ /// Creates an <see cref="IParser" />.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv parser.</param>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <returns>
+ /// The created parser.
+ /// </returns>
+ IParser CreateParser(TextReader reader, CultureInfo cultureInfo);
+
+ /// <summary>
+ /// Creates an <see cref="IReader"/>.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv reader.</param>
+ /// <param name="configuration">The configuration to use for the reader.</param>
+ /// <returns>The created reader.</returns>
+ IReader CreateReader(TextReader reader, Configuration.CsvConfiguration configuration);
+
+ /// <summary>
+ /// Creates an <see cref="IReader" />.
+ /// </summary>
+ /// <param name="reader">The text reader to use for the csv reader.</param>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <returns>
+ /// The created reader.
+ /// </returns>
+ IReader CreateReader(TextReader reader, CultureInfo cultureInfo);
+
+ /// <summary>
+ /// Creates an <see cref="IReader"/>.
+ /// </summary>
+ /// <param name="parser">The parser used to create the reader.</param>
+ /// <returns>The created reader.</returns>
+ IReader CreateReader(IParser parser);
+
+ /// <summary>
+ /// Creates an <see cref="IWriter"/>.
+ /// </summary>
+ /// <param name="writer">The text writer to use for the csv writer.</param>
+ /// <param name="configuration">The configuration to use for the writer.</param>
+ /// <returns>The created writer.</returns>
+ IWriter CreateWriter(TextWriter writer, Configuration.CsvConfiguration configuration);
+
+ /// <summary>
+ /// Creates an <see cref="IWriter" />.
+ /// </summary>
+ /// <param name="writer">The text writer to use for the csv writer.</param>
+ /// <param name="cultureInfo">The culture information.</param>
+ /// <returns>
+ /// The created writer.
+ /// </returns>
+ IWriter CreateWriter(TextWriter writer, CultureInfo cultureInfo);
+
+ /// <summary>
+ /// Provides a fluent interface for dynamically creating <see cref="ClassMap{T}"/>s
+ /// </summary>
+ /// <typeparam name="T">Type of class to map</typeparam>
+ /// <returns>Next available options</returns>
+ IHasMap<T> CreateClassMapBuilder<T>();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IObjectResolver.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IObjectResolver.cs
new file mode 100644
index 0000000..c419114
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IObjectResolver.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines the functionality of a class that creates objects
+ /// from a given type.
+ /// </summary>
+ public interface IObjectResolver
+ {
+ /// <summary>
+ /// A value indicating if the resolver's <see cref="CanResolve"/>
+ /// returns false that an object will still be created using
+ /// CsvHelper's object creation. True to fallback, otherwise false.
+ /// Default value is true.
+ /// </summary>
+ bool UseFallback { get; }
+
+ /// <summary>
+ /// A value indicating if the resolver is able to resolve
+ /// the given type. True if the type can be resolved,
+ /// otherwise false.
+ /// </summary>
+ Func<Type, bool> CanResolve { get; }
+
+ /// <summary>
+ /// The function that creates an object from a given type.
+ /// </summary>
+ Func<Type, object[], object> ResolveFunction { get; }
+
+ /// <summary>
+ /// Creates an object from the given type using the <see cref="ResolveFunction"/>
+ /// function. If <see cref="CanResolve"/> is false, the object will be
+ /// created using CsvHelper's default object creation. If <see cref="UseFallback"/>
+ /// is false, an exception is thrown.
+ /// </summary>
+ /// <param name="type">The type to create an instance from. The created object
+ /// may not be the same type as the given type.</param>
+ /// <param name="constructorArgs">Constructor arguments used to create the type.</param>
+ object Resolve( Type type, params object[] constructorArgs );
+
+ /// <summary>
+ /// Creates an object from the given type using the <see cref="ResolveFunction"/>
+ /// function. If <see cref="CanResolve"/> is false, the object will be
+ /// created using CsvHelper's default object creation. If <see cref="UseFallback"/>
+ /// is false, an exception is thrown.
+ /// </summary>
+ /// <typeparam name="T">The type to create an instance from. The created object
+ /// may not be the same type as the given type.</typeparam>
+ /// <param name="constructorArgs">Constructor arguments used to create the type.</param>
+ T Resolve<T>( params object[] constructorArgs );
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IParser.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IParser.cs
new file mode 100644
index 0000000..040a701
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IParser.cs
@@ -0,0 +1,89 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.Configuration;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines methods used the parse a CSV file.
+ /// </summary>
+ public interface IParser : IDisposable
+ {
+ /// <summary>
+ /// Gets the count of how many bytes have been read.
+ /// <see cref="IParserConfiguration.CountBytes"/> needs
+ /// to be enabled for this value to be populated.
+ /// </summary>
+ long ByteCount { get; }
+
+ /// <summary>
+ /// Gets the count of how many characters have been read.
+ /// </summary>
+ long CharCount { get; }
+
+ /// <summary>
+ /// Gets the number of fields for the current row.
+ /// </summary>
+ int Count { get; }
+
+ /// <summary>
+ /// Gets the field at the specified index for the current row.
+ /// </summary>
+ /// <param name="index">The index.</param>
+ /// <returns>The field.</returns>
+ string this[int index] { get; }
+
+ /// <summary>
+ /// Gets the record for the current row. Note:
+ /// It is much more efficient to only get the fields you need. If
+ /// you need all fields, then use this.
+ /// </summary>
+ string[]? Record { get; }
+
+ /// <summary>
+ /// Gets the raw record for the current row.
+ /// </summary>
+ string RawRecord { get; }
+
+ /// <summary>
+ /// Gets the CSV row the parser is currently on.
+ /// </summary>
+ int Row { get; }
+
+ /// <summary>
+ /// Gets the raw row the parser is currently on.
+ /// </summary>
+ int RawRow { get; }
+
+ /// <summary>
+ /// The delimiter the parser is using.
+ /// </summary>
+ string Delimiter { get; }
+
+ /// <summary>
+ /// Gets the reading context.
+ /// </summary>
+ CsvContext Context { get; }
+
+ /// <summary>
+ /// Gets the configuration.
+ /// </summary>
+ IParserConfiguration Configuration { get; }
+
+ /// <summary>
+ /// Reads a record from the CSV file.
+ /// </summary>
+ /// <returns>True if there are more records to read, otherwise false.</returns>
+ bool Read();
+
+ /// <summary>
+ /// Reads a record from the CSV file asynchronously.
+ /// </summary>
+ /// <returns>True if there are more records to read, otherwise false.</returns>
+ Task<bool> ReadAsync();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IReader.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IReader.cs
new file mode 100644
index 0000000..3eb598e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IReader.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Threading;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines methods used to read parsed data
+ /// from a CSV file.
+ /// </summary>
+ public interface IReader : IReaderRow, IDisposable
+ {
+ /// <summary>
+ /// Reads the header record without reading the first row.
+ /// </summary>
+ /// <returns>True if there are more records, otherwise false.</returns>
+ bool ReadHeader();
+
+ /// <summary>
+ /// Advances the reader to the next record. This will not read headers.
+ /// You need to call <see cref="Read"/> then <see cref="ReadHeader"/>
+ /// for the headers to be read.
+ /// </summary>
+ /// <returns>True if there are more records, otherwise false.</returns>
+ bool Read();
+
+ /// <summary>
+ /// Advances the reader to the next record. This will not read headers.
+ /// You need to call <see cref="ReadAsync"/> then <see cref="ReadHeader"/>
+ /// for the headers to be read.
+ /// </summary>
+ /// <returns>True if there are more records, otherwise false.</returns>
+ Task<bool> ReadAsync();
+
+ /// <summary>
+ /// Gets all the records in the CSV file and
+ /// converts each to <see cref="Type"/> T. The Read method
+ /// should not be used when using this.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the record.</typeparam>
+ /// <returns>An <see cref="IEnumerable{T}" /> of records.</returns>
+ IEnumerable<T> GetRecords<T>();
+
+ /// <summary>
+ /// Gets all the records in the CSV file and converts
+ /// each to <see cref="System.Type"/> T. The read method
+ /// should not be used when using this.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="System.Type"/> of the record.</typeparam>
+ /// <param name="anonymousTypeDefinition">The anonymous type definition to use for the records.</param>
+ /// <returns>An <see cref="IEnumerable{T}"/> of records.</returns>
+ IEnumerable<T> GetRecords<T>(T anonymousTypeDefinition);
+
+ /// <summary>
+ /// Gets all the records in the CSV file and
+ /// converts each to <see cref="Type"/> T. The Read method
+ /// should not be used when using this.
+ /// </summary>
+ /// <param name="type">The <see cref="Type"/> of the record.</param>
+ /// <returns>An <see cref="IEnumerable{Object}" /> of records.</returns>
+ IEnumerable<object> GetRecords(Type type);
+
+ /// <summary>
+ /// Enumerates the records hydrating the given record instance with row data.
+ /// The record instance is re-used and not cleared on each enumeration.
+ /// This only works for streaming rows. If any methods are called on the projection
+ /// that force the evaluation of the IEnumerable, such as ToList(), the entire list
+ /// will contain the same instance of the record, which is the last row.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record to fill each enumeration.</param>
+ /// <returns>An <see cref="IEnumerable{T}"/> of records.</returns>
+ IEnumerable<T> EnumerateRecords<T>(T record);
+
+#if !NET45
+ /// <summary>
+ /// Gets all the records in the CSV file and
+ /// converts each to <see cref="Type"/> T. The Read method
+ /// should not be used when using this.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the record.</typeparam>
+ /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ /// <returns>An <see cref="IAsyncEnumerable{T}" /> of records.</returns>
+ IAsyncEnumerable<T> GetRecordsAsync<T>(CancellationToken cancellationToken = default(CancellationToken));
+
+ /// <summary>
+ /// Gets all the records in the CSV file and converts
+ /// each to <see cref="System.Type"/> T. The read method
+ /// should not be used when using this.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="System.Type"/> of the record.</typeparam>
+ /// <param name="anonymousTypeDefinition">The anonymous type definition to use for the records.</param>
+ /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ /// <returns>An <see cref="IAsyncEnumerable{T}"/> of records.</returns>
+ IAsyncEnumerable<T> GetRecordsAsync<T>(T anonymousTypeDefinition, CancellationToken cancellationToken = default(CancellationToken));
+
+ /// <summary>
+ /// Gets all the records in the CSV file and
+ /// converts each to <see cref="Type"/> T. The Read method
+ /// should not be used when using this.
+ /// </summary>
+ /// <param name="type">The <see cref="Type"/> of the record.</param>
+ /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ /// <returns>An <see cref="IAsyncEnumerable{Object}" /> of records.</returns>
+ IAsyncEnumerable<object> GetRecordsAsync(Type type, CancellationToken cancellationToken = default(CancellationToken));
+
+ /// <summary>
+ /// Enumerates the records hydrating the given record instance with row data.
+ /// The record instance is re-used and not cleared on each enumeration.
+ /// This only works for streaming rows. If any methods are called on the projection
+ /// that force the evaluation of the IEnumerable, such as ToList(), the entire list
+ /// will contain the same instance of the record, which is the last row.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record to fill each enumeration.</param>
+ /// /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ /// <returns>An <see cref="IAsyncEnumerable{T}"/> of records.</returns>
+ IAsyncEnumerable<T> EnumerateRecordsAsync<T>(T record, CancellationToken cancellationToken = default(CancellationToken));
+#endif
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IReaderRow.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IReaderRow.cs
new file mode 100644
index 0000000..0d75a53
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IReaderRow.cs
@@ -0,0 +1,428 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines methods used to read parsed data
+ /// from a CSV file row.
+ /// </summary>
+ public interface IReaderRow
+ {
+ /// <summary>
+ /// Gets the column count of the current row.
+ /// This should match <see cref="IParser.Count"/>.
+ /// </summary>
+ int ColumnCount { get; }
+
+ /// <summary>
+ /// Gets the field index the reader is currently on.
+ /// </summary>
+ int CurrentIndex { get; }
+
+ /// <summary>
+ /// Gets the header record.
+ /// </summary>
+ string[]? HeaderRecord { get; }
+
+ /// <summary>
+ /// Gets the parser.
+ /// </summary>
+ IParser Parser { get; }
+
+ /// <summary>
+ /// Gets the reading context.
+ /// </summary>
+ CsvContext Context { get; }
+
+ /// <summary>
+ /// Gets or sets the configuration.
+ /// </summary>
+ IReaderConfiguration Configuration { get; }
+
+ /// <summary>
+ /// Gets the raw field at position (column) index.
+ /// </summary>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <returns>The raw field.</returns>
+ string? this[int index] { get; }
+
+ /// <summary>
+ /// Gets the raw field at position (column) name.
+ /// </summary>
+ /// <param name="name">The named index of the field.</param>
+ /// <returns>The raw field.</returns>
+ string? this[string name] { get; }
+
+ /// <summary>
+ /// Gets the raw field at position (column) name.
+ /// </summary>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <returns>The raw field.</returns>
+ string? this[string name, int index] { get; }
+
+ /// <summary>
+ /// Gets the raw field at position (column) index.
+ /// </summary>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <returns>The raw field.</returns>
+ string? GetField(int index);
+
+ /// <summary>
+ /// Gets the raw field at position (column) name.
+ /// </summary>
+ /// <param name="name">The named index of the field.</param>
+ /// <returns>The raw field.</returns>
+ string? GetField(string name);
+
+ /// <summary>
+ /// Gets the raw field at position (column) name and the index
+ /// instance of that field. The index is used when there are
+ /// multiple columns with the same header name.
+ /// </summary>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <returns>The raw field.</returns>
+ string? GetField(string name, int index);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Object"/> using
+ /// the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The type of the field.</param>
+ /// <param name="index">The index of the field.</param>
+ /// <returns>The field converted to <see cref="Object"/>.</returns>
+ object? GetField(Type type, int index);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Object"/> using
+ /// the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The type of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <returns>The field converted to <see cref="Object"/>.</returns>
+ object? GetField(Type type, string name);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Object"/> using
+ /// the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The type of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <returns>The field converted to <see cref="Object"/>.</returns>
+ object? GetField(Type type, string name, int index);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Object"/> using
+ /// the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The type of the field.</param>
+ /// <param name="index">The index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Object"/>.</param>
+ /// <returns>The field converted to <see cref="Object"/>.</returns>
+ object? GetField(Type type, int index, ITypeConverter converter);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Object"/> using
+ /// the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The type of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Object"/>.</param>
+ /// <returns>The field converted to <see cref="Object"/>.</returns>
+ object? GetField(Type type, string name, ITypeConverter converter);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Object"/> using
+ /// the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The type of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Object"/>.</param>
+ /// <returns>The field converted to <see cref="Object"/>.</returns>
+ object? GetField(Type type, string name, int index, ITypeConverter converter);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) index.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T>(int index);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T>(string name);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position
+ /// (column) name and the index instance of that field. The index
+ /// is used when there are multiple columns with the same header name.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <returns></returns>
+ T? GetField<T>(string name, int index);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) index using
+ /// the given <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T>(int index, ITypeConverter converter);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name using
+ /// the given <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T>(string name, ITypeConverter converter);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position
+ /// (column) name and the index instance of that field. The index
+ /// is used when there are multiple columns with the same header name.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T>(string name, int index, ITypeConverter converter);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) index using
+ /// the given <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <typeparam name="TConverter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</typeparam>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T, TConverter>(int index) where TConverter : ITypeConverter;
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name using
+ /// the given <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <typeparam name="TConverter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T, TConverter>(string name) where TConverter : ITypeConverter;
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position
+ /// (column) name and the index instance of that field. The index
+ /// is used when there are multiple columns with the same header name.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <typeparam name="TConverter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <returns>The field converted to <see cref="Type"/> T.</returns>
+ T? GetField<T, TConverter>(string name, int index) where TConverter : ITypeConverter;
+
+ /// <summary>
+ /// Gets the field converted to <see cref="System.Type"/> T at position (column) index.
+ /// </summary>
+ /// <param name="type">The <see cref="System.Type"/> of the field.</param>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <param name="field">The field converted to type T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField(Type type, int index, out object? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="System.Type"/> T at position (column) name.
+ /// </summary>
+ /// <param name="type">The <see cref="System.Type"/> of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="field">The field converted to <see cref="System.Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField(Type type, string name, out object? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="System.Type"/> T at position
+ /// (column) name and the index instance of that field. The index
+ /// is used when there are multiple columns with the same header name.
+ /// </summary>
+ /// <param name="type">The <see cref="System.Type"/> of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="field">The field converted to <see cref="System.Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField(Type type, string name, int index, out object? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="System.Type"/> T at position (column) index
+ /// using the specified <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <param name="type">The <see cref="System.Type"/> of the field.</param>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="System.Type"/> T.</param>
+ /// <param name="field">The field converted to <see cref="System.Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField(Type type, int index, ITypeConverter converter, out object? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="System.Type"/> T at position (column) name
+ /// using the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The <see cref="System.Type"/> of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="System.Type"/> T.</param>
+ /// <param name="field">The field converted to <see cref="System.Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField(Type type, string name, ITypeConverter converter, out object? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="System.Type"/> T at position (column) name
+ /// using the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="type">The <see cref="System.Type"/> of the field.</param>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="System.Type"/> T.</param>
+ /// <param name="field">The field converted to <see cref="System.Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField(Type type, string name, int index, ITypeConverter converter, out object? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) index.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <param name="field">The field converted to type T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T>(int index, out T? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T>(string name, out T? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position
+ /// (column) name and the index instance of that field. The index
+ /// is used when there are multiple columns with the same header name.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T>(string name, int index, out T? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) index
+ /// using the specified <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T>(int index, ITypeConverter converter, out T? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name
+ /// using the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T>(string name, ITypeConverter converter, out T? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name
+ /// using the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="converter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T>(string name, int index, ITypeConverter converter, out T? field);
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) index
+ /// using the specified <see cref="ITypeConverter" />.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <typeparam name="TConverter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</typeparam>
+ /// <param name="index">The zero based index of the field.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T, TConverter>(int index, out T? field) where TConverter : ITypeConverter;
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name
+ /// using the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <typeparam name="TConverter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T, TConverter>(string name, out T? field) where TConverter : ITypeConverter;
+
+ /// <summary>
+ /// Gets the field converted to <see cref="Type"/> T at position (column) name
+ /// using the specified <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the field.</typeparam>
+ /// <typeparam name="TConverter">The <see cref="ITypeConverter"/> used to convert the field to <see cref="Type"/> T.</typeparam>
+ /// <param name="name">The named index of the field.</param>
+ /// <param name="index">The zero based index of the instance of the field.</param>
+ /// <param name="field">The field converted to <see cref="Type"/> T.</param>
+ /// <returns>A value indicating if the get was successful.</returns>
+ bool TryGetField<T, TConverter>(string name, int index, out T? field) where TConverter : ITypeConverter;
+
+ /// <summary>
+ /// Gets the record converted into <see cref="Type"/> T.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="Type"/> of the record.</typeparam>
+ /// <returns>The record converted to <see cref="Type"/> T.</returns>
+ T? GetRecord<T>();
+
+ /// <summary>
+ /// Get the record converted into <see cref="System.Type"/> T.
+ /// </summary>
+ /// <typeparam name="T">The <see cref="System.Type"/> of the record.</typeparam>
+ /// <param name="anonymousTypeDefinition">The anonymous type definition to use for the record.</param>
+ /// <returns>The record converted to <see cref="System.Type"/> T.</returns>
+ T? GetRecord<T>(T anonymousTypeDefinition);
+
+ /// <summary>
+ /// Gets the record.
+ /// </summary>
+ /// <param name="type">The <see cref="Type"/> of the record.</param>
+ /// <returns>The record.</returns>
+ object? GetRecord(Type type);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IWriter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IWriter.cs
new file mode 100644
index 0000000..f181b0d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IWriter.cs
@@ -0,0 +1,86 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.IO;
+using System.Threading.Tasks;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines methods used to write to a CSV file.
+ /// </summary>
+ public interface IWriter : IWriterRow, IDisposable
+#if !NET45 && !NET47 && !NETSTANDARD2_0
+ , IAsyncDisposable
+#endif
+ {
+ /// <summary>
+ /// Flushes the internal buffer to the <see cref="TextWriter"/> then
+ /// flushes the <see cref="TextWriter"/>.
+ /// </summary>
+ void Flush();
+
+ /// <summary>
+ /// Flushes the internal buffer to the <see cref="TextWriter"/> then
+ /// flushes the <see cref="TextWriter"/>.
+ /// </summary>
+ Task FlushAsync();
+
+ /// <summary>
+ /// Ends writing of the current record and starts a new record.
+ /// This flushes the buffer to the <see cref="TextWriter"/> but
+ /// does not flush the <see cref="TextWriter"/>.
+ /// </summary>
+ void NextRecord();
+
+ /// <summary>
+ /// Ends writing of the current record and starts a new record.
+ /// This flushes the buffer to the <see cref="TextWriter"/> but
+ /// does not flush the <see cref="TextWriter"/>.
+ /// </summary>
+ Task NextRecordAsync();
+
+ /// <summary>
+ /// Writes the list of records to the CSV file.
+ /// </summary>
+ /// <param name="records">The records to write.</param>
+ void WriteRecords(IEnumerable records);
+
+ /// <summary>
+ /// Writes the list of records to the CSV file.
+ /// </summary>
+ /// <typeparam name="T">Record type.</typeparam>
+ /// <param name="records">The records to write.</param>
+ void WriteRecords<T>(IEnumerable<T> records);
+
+ /// <summary>
+ /// Writes the list of records to the CSV file.
+ /// </summary>
+ /// <param name="records">The records to write.</param>
+ /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ Task WriteRecordsAsync(IEnumerable records, CancellationToken cancellationToken = default);
+
+ /// <summary>
+ /// Writes the list of records to the CSV file.
+ /// </summary>
+ /// <typeparam name="T">Record type.</typeparam>
+ /// <param name="records">The records to write.</param>
+ /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ Task WriteRecordsAsync<T>(IEnumerable<T> records, CancellationToken cancellationToken = default);
+
+#if !NET45
+ /// <summary>
+ /// Writes the list of records to the CSV file.
+ /// </summary>
+ /// <typeparam name="T">Record type.</typeparam>
+ /// <param name="records">The records to write.</param>
+ /// <param name="cancellationToken">The cancellation token to stop the writing.</param>
+ Task WriteRecordsAsync<T>(IAsyncEnumerable<T> records, CancellationToken cancellationToken = default);
+#endif
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/IWriterRow.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/IWriterRow.cs
new file mode 100644
index 0000000..3b773b1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/IWriterRow.cs
@@ -0,0 +1,135 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Defines methods used to write a CSV row.
+ /// </summary>
+ public interface IWriterRow
+ {
+ /// <summary>
+ /// The header record.
+ /// </summary>
+ string[] HeaderRecord { get; }
+
+ /// <summary>
+ /// The current row.
+ /// </summary>
+ int Row { get; }
+
+ /// <summary>
+ /// The current field index.
+ /// </summary>
+ int Index { get; }
+
+ /// <summary>
+ /// Gets the writing context.
+ /// </summary>
+ CsvContext Context { get; }
+
+ /// <summary>
+ /// Gets or sets the configuration.
+ /// </summary>
+ IWriterConfiguration Configuration { get; }
+
+ /// <summary>
+ /// Writes a field that has already been converted to a
+ /// <see cref="string"/> from an <see cref="ITypeConverter"/>.
+ /// If the field is null, it won't get written. A type converter
+ /// will always return a string, even if field is null. If the
+ /// converter returns a null, it means that the converter has already
+ /// written data, and the returned value should not be written.
+ /// </summary>
+ /// <param name="field">The converted field to write.</param>
+ /// <param name="fieldType">The type of the field before it was converted into a string.</param>
+ void WriteConvertedField(string field, Type fieldType);
+
+ /// <summary>
+ /// Writes the field to the CSV file. The field
+ /// may get quotes added to it.
+ /// When all fields are written for a record,
+ /// <see cref="IWriter.NextRecord()" /> must be called
+ /// to complete writing of the current record.
+ /// </summary>
+ /// <param name="field">The field to write.</param>
+ void WriteField(string field);
+
+ /// <summary>
+ /// Writes the field to the CSV file. This will
+ /// ignore any need to quote and ignore
+ /// <see cref="CsvHelper.Configuration.CsvConfiguration.ShouldQuote"/>
+ /// and just quote based on the shouldQuote
+ /// parameter.
+ /// When all fields are written for a record,
+ /// <see cref="IWriter.NextRecord()" /> must be called
+ /// to complete writing of the current record.
+ /// </summary>
+ /// <param name="field">The field to write.</param>
+ /// <param name="shouldQuote">True to quote the field, otherwise false.</param>
+ void WriteField(string field, bool shouldQuote);
+
+ /// <summary>
+ /// Writes the field to the CSV file.
+ /// When all fields are written for a record,
+ /// <see cref="IWriter.NextRecord()" /> must be called
+ /// to complete writing of the current record.
+ /// </summary>
+ /// <typeparam name="T">The type of the field.</typeparam>
+ /// <param name="field">The field to write.</param>
+ void WriteField<T>(T field);
+
+ /// <summary>
+ /// Writes the field to the CSV file.
+ /// When all fields are written for a record,
+ /// <see cref="IWriter.NextRecord" /> must be called
+ /// to complete writing of the current record.
+ /// </summary>
+ /// <typeparam name="T">The type of the field.</typeparam>
+ /// <param name="field">The field to write.</param>
+ /// <param name="converter">The converter used to convert the field into a string.</param>
+ void WriteField<T>(T field, ITypeConverter converter);
+
+ /// <summary>
+ /// Writes the field to the CSV file
+ /// using the given <see cref="ITypeConverter"/>.
+ /// When all fields are written for a record,
+ /// <see cref="IWriter.NextRecord()" /> must be called
+ /// to complete writing of the current record.
+ /// </summary>
+ /// <typeparam name="T">The type of the field.</typeparam>
+ /// <typeparam name="TConverter">The type of the converter.</typeparam>
+ /// <param name="field">The field to write.</param>
+ void WriteField<T, TConverter>(T field);
+
+ /// <summary>
+ /// Writes a comment.
+ /// </summary>
+ /// <param name="comment">The comment to write.</param>
+ void WriteComment(string comment);
+
+ /// <summary>
+ /// Writes the header record from the given members.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ void WriteHeader<T>();
+
+ /// <summary>
+ /// Writes the header record from the given members.
+ /// </summary>
+ /// <param name="type">The type of the record.</param>
+ void WriteHeader(Type type);
+
+ /// <summary>
+ /// Writes the record to the CSV file.
+ /// </summary>
+ /// <typeparam name="T">The type of the record.</typeparam>
+ /// <param name="record">The record to write.</param>
+ void WriteRecord<T>(T record);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Icon.png b/ThirdParty/CsvHelper-master/src/CsvHelper/Icon.png
new file mode 100644
index 0000000..e8c5d82
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Icon.png
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/InvalidHeader.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/InvalidHeader.cs
new file mode 100644
index 0000000..0383623
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/InvalidHeader.cs
@@ -0,0 +1,28 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Invalid header information.
+ /// </summary>
+ public class InvalidHeader
+ {
+ /// <summary>
+ /// Header names mapped to a CSV field that couldn't be found.
+ /// </summary>
+ public List<string> Names { get; set; } = new List<string>();
+
+ /// <summary>
+ /// Header name index maped to a CSV field that couldn't be found.
+ /// </summary>
+ public int Index { get; set; }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/LinkedListExtensions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/LinkedListExtensions.cs
new file mode 100644
index 0000000..ffe6fdd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/LinkedListExtensions.cs
@@ -0,0 +1,29 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+
+namespace CsvHelper
+{
+ internal static class LinkedListExtensions
+ {
+ public static void Drop<T>(this LinkedList<T> list, LinkedListNode<T>? node)
+ {
+ if (list.Count == 0)
+ {
+ return;
+ }
+
+ while (list.Count > 0)
+ {
+ var nodeToRemove = list.Last;
+ list.RemoveLast();
+ if (nodeToRemove == node)
+ {
+ break;
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/MaxFieldSizeException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/MaxFieldSizeException.cs
new file mode 100644
index 0000000..fd3bc21
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/MaxFieldSizeException.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2019 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents an error due to a field that is too large.
+ /// </summary>
+ [Serializable]
+ public class MaxFieldSizeException : CsvHelperException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MaxFieldSizeException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ public MaxFieldSizeException(CsvContext context) : base(context) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MaxFieldSizeException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public MaxFieldSizeException(CsvContext context, string message) : base(context, message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MaxFieldSizeException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public MaxFieldSizeException(CsvContext context, string message, Exception innerException) : base(context, message, innerException) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/MissingFieldException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/MissingFieldException.cs
new file mode 100644
index 0000000..2b93dd4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/MissingFieldException.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents an error caused because a field is missing
+ /// in the header while reading a CSV file.
+ /// </summary>
+ [Serializable]
+ public class MissingFieldException : ReaderException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MissingFieldException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ public MissingFieldException(CsvContext context) : base(context) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MissingFieldException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public MissingFieldException(CsvContext context, string message) : base(context, message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="MissingFieldException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public MissingFieldException(CsvContext context, string message, Exception innerException) : base(context, message, innerException) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ObjectCreator.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ObjectCreator.cs
new file mode 100644
index 0000000..4e1789e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ObjectCreator.cs
@@ -0,0 +1,218 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Efficiently creates instances of object types.
+ /// </summary>
+ public class ObjectCreator
+ {
+ private readonly Dictionary<int, Func<object[], object>> cache = new Dictionary<int, Func<object[], object>>();
+
+ /// <summary>
+ /// Creates an instance of type T using the given arguments.
+ /// </summary>
+ /// <typeparam name="T">The type to create an instance of.</typeparam>
+ /// <param name="args">The constrcutor arguments.</param>
+ public T CreateInstance<T>(params object[] args)
+ {
+ return (T)CreateInstance(typeof(T), args);
+ }
+
+ /// <summary>
+ /// Creates an instance of the given type using the given arguments.
+ /// </summary>
+ /// <param name="type">The type to create an instance of.</param>
+ /// <param name="args">The constructor arguments.</param>
+ public object CreateInstance(Type type, params object[] args)
+ {
+ var func = GetFunc(type, args);
+
+ return func(args);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private Func<object[], object> GetFunc(Type type, object[] args)
+ {
+ var argTypes = GetArgTypes(args);
+ var key = GetConstructorCacheKey(type, argTypes);
+ if (!cache.TryGetValue(key, out var func))
+ {
+ cache[key] = func = CreateInstanceFunc(type, argTypes);
+ }
+
+ return func;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static Type[] GetArgTypes(object[] args)
+ {
+ var argTypes = new Type[args.Length];
+ for (var i = 0; i < args.Length; i++)
+ {
+ argTypes[i] = args[i]?.GetType() ?? typeof(object);
+ }
+
+ return argTypes;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static int GetConstructorCacheKey(Type type, Type[] args)
+ {
+#if !NET45
+ var hashCode = new HashCode();
+ hashCode.Add(type.GetHashCode());
+ for (var i = 0; i < args.Length; i++)
+ {
+ hashCode.Add(args[i].GetHashCode());
+ }
+
+ return hashCode.ToHashCode();
+#else
+ unchecked
+ {
+ var hash = 17;
+ hash = hash * 31 + type.GetHashCode();
+ for (var i = 0; i < args.Length; i++)
+ {
+ hash = hash * 31 + (args[i].GetHashCode());
+ }
+
+ return hash;
+ }
+#endif
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static Func<object[], object> CreateInstanceFunc(Type type, Type[] argTypes)
+ {
+ var parameterExpression = Expression.Parameter(typeof(object[]), "args");
+
+ Expression body;
+ if (type.IsValueType)
+ {
+ if (argTypes.Length > 0)
+ {
+ throw GetConstructorNotFoundException(type, argTypes);
+ }
+
+ body = Expression.Convert(Expression.Default(type), typeof(object));
+ }
+ else
+ {
+ var constructors = type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
+ var constructor = GetConstructor(constructors, type, argTypes);
+
+ var parameters = constructor.GetParameters();
+ var parameterTypes = new Type[parameters.Length];
+ for (var i = 0; i < parameters.Length; i++)
+ {
+ parameterTypes[i] = parameters[i].ParameterType;
+ }
+
+ var arguments = new List<Expression>();
+ for (var i = 0; i < parameterTypes.Length; i++)
+ {
+ var parameterType = parameterTypes[i];
+ var arrayIndexExpression = Expression.ArrayIndex(parameterExpression, Expression.Constant(i));
+ var convertExpression = Expression.Convert(arrayIndexExpression, parameterType);
+ arguments.Add(convertExpression);
+ }
+
+ body = Expression.New(constructor, arguments);
+ }
+
+ var lambda = Expression.Lambda<Func<object[], object>>(body, new[] { parameterExpression });
+ var func = lambda.Compile();
+
+ return func;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static ConstructorInfo GetConstructor(ConstructorInfo[] constructors, Type type, Type[] argTypes)
+ {
+ var matchType = MatchType.Exact;
+ var fuzzyMatches = new List<ConstructorInfo>();
+ for (var i = 0; i < constructors.Length; i++)
+ {
+ var constructor = constructors[i];
+ var parameters = constructors[i].GetParameters();
+
+ if (parameters.Length != argTypes.Length)
+ {
+ continue;
+ }
+
+ for (var j = 0; j < parameters.Length && j < argTypes.Length; j++)
+ {
+ var parameterType = parameters[j].ParameterType;
+ var argType = argTypes[j];
+
+ if (argType == parameterType)
+ {
+ matchType = MatchType.Exact;
+ continue;
+ }
+
+ if (!parameterType.IsValueType && (parameterType.IsAssignableFrom(argType) || argType == typeof(object)))
+ {
+ matchType = MatchType.Fuzzy;
+ continue;
+ }
+
+ matchType = MatchType.None;
+ break;
+ }
+
+ if (matchType == MatchType.Exact)
+ {
+ // Only possible to have one exact match.
+ return constructor;
+ }
+
+ if (matchType == MatchType.Fuzzy)
+ {
+ fuzzyMatches.Add(constructor);
+ }
+ }
+
+ if (fuzzyMatches.Count == 1)
+ {
+ return fuzzyMatches[0];
+ }
+
+ if (fuzzyMatches.Count > 1)
+ {
+ throw new AmbiguousMatchException();
+ }
+
+ throw GetConstructorNotFoundException(type, argTypes);
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static MissingMethodException GetConstructorNotFoundException(Type type, Type[] argTypes)
+ {
+ var signature = $"{type.FullName}({string.Join(", ", argTypes.Select(a => a.FullName))})";
+
+ throw new MissingMethodException($"Constructor '{signature}' was not found.");
+ }
+
+ private enum MatchType
+ {
+ None = 0,
+ Exact = 1,
+ Fuzzy = 2
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ObjectResolver.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ObjectResolver.cs
new file mode 100644
index 0000000..99a17e0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ObjectResolver.cs
@@ -0,0 +1,143 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Creates objects from a given type.
+ /// </summary>
+ public class ObjectResolver : IObjectResolver
+ {
+ private static IObjectResolver current;
+ private readonly ObjectCreator objectCreator = new ObjectCreator();
+
+ /// <summary>
+ /// Gets or sets the current resolver.
+ /// Use an instance of this instead if at all possible.
+ /// </summary>
+ public static IObjectResolver Current
+ {
+ get
+ {
+ return current;
+ }
+ set
+ {
+ if (value == null)
+ {
+ throw new InvalidOperationException($"{nameof(IObjectResolver)} cannot be null.");
+ }
+
+ current = value;
+ }
+ }
+
+ /// <summary>
+ /// A value indicating if the resolver's <see cref="CanResolve"/>
+ /// returns false that an object will still be created using
+ /// CsvHelper's object creation. True to fallback, otherwise false.
+ /// Default value is true.
+ /// </summary>
+ public bool UseFallback { get; private set; }
+
+ /// <summary>
+ /// A function that returns a value indicating if the resolver
+ /// is able to resolve the given type. True if the type can be
+ /// resolved, otherwise false.
+ /// </summary>
+ public Func<Type, bool> CanResolve { get; private set; }
+
+ /// <summary>
+ /// The function that creates an object from a given type.
+ /// </summary>
+ public Func<Type, object[], object> ResolveFunction { get; private set; }
+
+ static ObjectResolver()
+ {
+ var objectCreator = new ObjectCreator();
+ var locker = new object();
+ current = new ObjectResolver(type => true, (type, args) =>
+ {
+ lock (locker)
+ {
+ return objectCreator.CreateInstance(type, args);
+ }
+ });
+ }
+
+ /// <summary>
+ /// Creates an instance of the object resolver using default values.
+ /// </summary>
+ public ObjectResolver()
+ {
+ CanResolve = type => true;
+ ResolveFunction = ResolveWithObjectCreator;
+ UseFallback = true;
+ }
+
+ /// <summary>
+ /// Creates an instance of the object resolver using the given can create function
+ /// and create function.
+ /// </summary>
+ /// <param name="canResolve">A function that returns a value indicating if the resolver
+ /// is able to resolve the given type. True if the type can be
+ /// resolved, otherwise false.</param>
+ /// <param name="resolveFunction">The function that creates an object from a given type.</param>
+ /// <param name="useFallback">A value indicating if the resolver's <see cref="CanResolve"/>
+ /// returns false that an object will still be created using
+ /// CsvHelper's object creation. True to fallback, otherwise false.
+ /// Default value is true.</param>
+ public ObjectResolver(Func<Type, bool> canResolve, Func<Type, object[], object> resolveFunction, bool useFallback = true)
+ {
+ CanResolve = canResolve ?? throw new ArgumentNullException(nameof(canResolve));
+ ResolveFunction = resolveFunction ?? throw new ArgumentNullException(nameof(resolveFunction));
+ UseFallback = useFallback;
+ }
+
+ /// <summary>
+ /// Creates an object from the given type using the <see cref="ResolveFunction"/>
+ /// function. If <see cref="CanResolve"/> is false, the object will be
+ /// created using CsvHelper's default object creation. If <see cref="UseFallback"/>
+ /// is false, an exception is thrown.
+ /// </summary>
+ /// <param name="type">The type to create an instance from. The created object
+ /// may not be the same type as the given type.</param>
+ /// <param name="constructorArgs">Constructor arguments used to create the type.</param>
+ public object Resolve(Type type, params object[] constructorArgs)
+ {
+ if (CanResolve(type))
+ {
+ return ResolveFunction(type, constructorArgs);
+ }
+
+ if (UseFallback)
+ {
+ return objectCreator.CreateInstance(type, constructorArgs);
+ }
+
+ throw new CsvHelperException($"Type '{type.FullName}' can't be resolved and fallback is turned off.");
+ }
+
+ /// <summary>
+ /// Creates an object from the given type using the <see cref="ResolveFunction"/>
+ /// function. If <see cref="CanResolve"/> is false, the object will be
+ /// created using CsvHelper's default object creation. If <see cref="UseFallback"/>
+ /// is false, an exception is thrown.
+ /// </summary>
+ /// <typeparam name="T">The type to create an instance from. The created object
+ /// may not be the same type as the given type.</typeparam>
+ /// <param name="constructorArgs">Constructor arguments used to create the type.</param>
+ public T Resolve<T>(params object[] constructorArgs)
+ {
+ return (T)Resolve(typeof(T), constructorArgs);
+ }
+
+ private object ResolveWithObjectCreator(Type type, params object[] args)
+ {
+ return objectCreator.CreateInstance(type, args);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ParserException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ParserException.cs
new file mode 100644
index 0000000..a7c57e2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ParserException.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents errors that occur while parsing a CSV file.
+ /// </summary>
+ [Serializable]
+ public class ParserException : CsvHelperException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ParserException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ public ParserException(CsvContext context) : base(context) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ParserException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public ParserException(CsvContext context, string message) : base(context, message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ParserException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public ParserException(CsvContext context, string message, Exception innerException) : base(context, message, innerException) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Properties/AssemblyInfo.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..95c1366
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Properties/AssemblyInfo.cs
@@ -0,0 +1,13 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Runtime.CompilerServices;
+
+[assembly: CLSCompliant(true)]
+#if NCRUNCH
+[assembly: InternalsVisibleTo("CsvHelper.Tests")]
+#else
+[assembly: InternalsVisibleTo("CsvHelper.Tests, PublicKey=00240000048000009400000006020000002400005253413100040000010001000db97564beef98ad18a76ba31f769fab92b14341c9c37ed12f8004bb2a1a7fe42ad829b0e285915a816f05a32325c5e0ba83bd69d8f4d26a0785ccf446749842ad038f7325601a99c59a323dfa7ecf210139159da0aad1822b5d9c9be6d914ecbaa8b8c908c4af798a89b8777010971d81975079a49662ced398c742ff186a94")]
+#endif
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ReaderException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ReaderException.cs
new file mode 100644
index 0000000..94e2421
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ReaderException.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents errors that occur while reading a CSV file.
+ /// </summary>
+ [Serializable]
+ public class ReaderException : CsvHelperException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ReaderException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ public ReaderException(CsvContext context) : base(context) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ReaderException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public ReaderException(CsvContext context, string message) : base(context, message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ReaderException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public ReaderException(CsvContext context, string message, Exception innerException) : base(context, message, innerException) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionExtensions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionExtensions.cs
new file mode 100644
index 0000000..e67c0b8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionExtensions.cs
@@ -0,0 +1,155 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Reflection;
+using System.Linq.Expressions;
+using System.Runtime.CompilerServices;
+using System.Linq;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Extensions to help with reflection.
+ /// </summary>
+ public static class ReflectionExtensions
+ {
+ /// <summary>
+ /// Gets the type from the member.
+ /// </summary>
+ /// <param name="member">The member to get the type from.</param>
+ /// <returns>The type.</returns>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Type MemberType(this MemberInfo member)
+ {
+ var property = member as PropertyInfo;
+ if (property != null)
+ {
+ return property.PropertyType;
+ }
+
+ var field = member as FieldInfo;
+ if (field != null)
+ {
+ return field.FieldType;
+ }
+
+ throw new InvalidOperationException("Member is not a property or a field.");
+ }
+
+ /// <summary>
+ /// Gets a member expression for the member.
+ /// </summary>
+ /// <param name="member">The member to get the expression for.</param>
+ /// <param name="expression">The member expression.</param>
+ /// <returns>The member expression.</returns>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static MemberExpression GetMemberExpression(this MemberInfo member, Expression expression)
+ {
+ var property = member as PropertyInfo;
+ if (property != null)
+ {
+ return Expression.Property(expression, property);
+ }
+
+ var field = member as FieldInfo;
+ if (field != null)
+ {
+ return Expression.Field(expression, field);
+ }
+
+ throw new InvalidOperationException("Member is not a property or a field.");
+ }
+
+ /// <summary>
+ /// Gets a value indicating if the given type is anonymous.
+ /// True for anonymous, otherwise false.
+ /// </summary>
+ /// <param name="type">The type.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool IsAnonymous(this Type type)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ // https://stackoverflow.com/a/2483054/68499
+ var isAnonymous = Attribute.IsDefined(type, typeof(CompilerGeneratedAttribute), false)
+ && type.IsGenericType
+ && type.Name.Contains("AnonymousType")
+ && (type.Name.StartsWith("<>") || type.Name.StartsWith("VB$"))
+ && (type.Attributes & TypeAttributes.Public) != TypeAttributes.Public;
+
+ return isAnonymous;
+ }
+
+ /// <summary>
+ /// Gets a value indicating if the given type has a parameterless constructor.
+ /// True if it has a parameterless constructor, otherwise false.
+ /// </summary>
+ /// <param name="type">The type.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool HasParameterlessConstructor(this Type type)
+ {
+ return type.GetConstructor(new Type[0]) != null;
+ }
+
+ /// <summary>
+ /// Gets a value indicating if the given type has any constructors.
+ /// </summary>
+ /// <param name="type">The type.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool HasConstructor(this Type type)
+ {
+ return type.GetConstructors().Length > 0;
+ }
+
+ /// <summary>
+ /// Gets the constructor that contains the most parameters.
+ /// </summary>
+ /// <param name="type">The type.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static ConstructorInfo GetConstructorWithMostParameters(this Type type)
+ {
+ return type.GetConstructors()
+ .OrderByDescending(c => c.GetParameters().Length)
+ .First();
+ }
+
+ /// <summary>
+ /// Gets a value indicating if the type is a user defined struct.
+ /// True if it is a user defined struct, otherwise false.
+ /// </summary>
+ /// <param name="type">The type.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static bool IsUserDefinedStruct(this Type type)
+ {
+ return type.IsValueType && !type.IsPrimitive && !type.IsEnum;
+ }
+
+ /// <summary>
+ /// Gets a string representation of the constructor.
+ /// </summary>
+ /// <param name="constructor">The constructor.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static string GetDefinition(this ConstructorInfo constructor)
+ {
+ var parameters = constructor.GetParameters();
+ var definition = $"{constructor.Name}({string.Join(", ", parameters.Select(p => p.GetDefinition()))})";
+
+ return definition;
+ }
+
+ /// <summary>
+ /// Gets a string representation of the parameter.
+ /// </summary>
+ /// <param name="parameter">The parameter.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static string GetDefinition(this ParameterInfo parameter)
+ {
+ return $"{parameter.ParameterType.Name} {parameter.Name}";
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionHelper.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionHelper.cs
new file mode 100644
index 0000000..b026186
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ReflectionHelper.cs
@@ -0,0 +1,204 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Common reflection tasks.
+ /// </summary>
+ internal static class ReflectionHelper
+ {
+ /// <summary>
+ /// Gets the <see cref="PropertyInfo"/> from the type where the property was declared.
+ /// </summary>
+ /// <param name="type">The type the property belongs to.</param>
+ /// <param name="property">The property to search.</param>
+ /// <param name="flags">Flags for how the property is retrieved.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static PropertyInfo GetDeclaringProperty(Type type, PropertyInfo property, BindingFlags flags)
+ {
+ if (property.DeclaringType != type)
+ {
+ var declaringProperty = property.DeclaringType.GetProperty(property.Name, flags);
+ return GetDeclaringProperty(property.DeclaringType, declaringProperty, flags);
+ }
+
+ return property;
+ }
+
+ /// <summary>
+ /// Gets the <see cref="FieldInfo"/> from the type where the field was declared.
+ /// </summary>
+ /// <param name="type">The type the field belongs to.</param>
+ /// <param name="field">The field to search.</param>
+ /// <param name="flags">Flags for how the field is retrieved.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static FieldInfo GetDeclaringField(Type type, FieldInfo field, BindingFlags flags)
+ {
+ if (field.DeclaringType != type)
+ {
+ var declaringField = field.DeclaringType.GetField(field.Name, flags);
+ return GetDeclaringField(field.DeclaringType, declaringField, flags);
+ }
+
+ return field;
+ }
+
+ /// <summary>
+ /// Walk up the inheritance tree collecting properties. This will get a unique set of properties in the
+ /// case where parents have the same property names as children.
+ /// </summary>
+ /// <param name="type">The <see cref="Type"/> to get properties for.</param>
+ /// <param name="flags">The flags for getting the properties.</param>
+ /// <param name="overwrite">If true, parent class properties that are hidden by `new` child properties will be overwritten.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static List<PropertyInfo> GetUniqueProperties(Type type, BindingFlags flags, bool overwrite = false)
+ {
+ var ignoreBase = type.GetCustomAttribute(typeof(IgnoreBaseAttribute)) != null;
+
+ var properties = new Dictionary<string, PropertyInfo>();
+
+ flags |= BindingFlags.DeclaredOnly;
+ var currentType = type;
+ while (currentType != null)
+ {
+ var currentProperties = currentType.GetProperties(flags);
+ foreach (var property in currentProperties)
+ {
+ if (!properties.ContainsKey(property.Name) || overwrite)
+ {
+ properties[property.Name] = property;
+ }
+ }
+
+ if (ignoreBase)
+ {
+ break;
+ }
+
+ currentType = currentType.BaseType;
+ }
+
+ return properties.Values.ToList();
+ }
+
+ /// <summary>
+ /// Walk up the inheritance tree collecting fields. This will get a unique set of fields in the
+ /// case where parents have the same field names as children.
+ /// </summary>
+ /// <param name="type">The <see cref="Type"/> to get fields for.</param>
+ /// <param name="flags">The flags for getting the fields.</param>
+ /// <param name="overwrite">If true, parent class fields that are hidden by `new` child fields will be overwritten.</param>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static List<FieldInfo> GetUniqueFields(Type type, BindingFlags flags, bool overwrite = false)
+ {
+ var ignoreBase = type.GetCustomAttribute(typeof(IgnoreBaseAttribute)) != null;
+
+ var fields = new Dictionary<string, FieldInfo>();
+
+ flags |= BindingFlags.DeclaredOnly;
+ var currentType = type;
+ while (currentType != null)
+ {
+ var currentFields = currentType.GetFields(flags);
+ foreach (var field in currentFields)
+ {
+ if (!fields.ContainsKey(field.Name) || overwrite)
+ {
+ fields[field.Name] = field;
+ }
+ }
+
+ if (ignoreBase)
+ {
+ break;
+ }
+
+ currentType = currentType.BaseType;
+ }
+
+ return fields.Values.ToList();
+ }
+
+ /// <summary>
+ /// Gets the property from the expression.
+ /// </summary>
+ /// <typeparam name="TModel">The type of the model.</typeparam>
+ /// <typeparam name="TProperty">The type of the property.</typeparam>
+ /// <param name="expression">The expression.</param>
+ /// <returns>The <see cref="PropertyInfo"/> for the expression.</returns>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static MemberInfo GetMember<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
+ {
+ var member = GetMemberExpression(expression.Body).Member;
+ var property = member as PropertyInfo;
+ if (property != null)
+ {
+ return property;
+ }
+
+ var field = member as FieldInfo;
+ if (field != null)
+ {
+ return field;
+ }
+
+ throw new ConfigurationException($"'{member.Name}' is not a member.");
+ }
+
+ /// <summary>
+ /// Gets the member inheritance chain as a stack.
+ /// </summary>
+ /// <typeparam name="TModel">The type of the model.</typeparam>
+ /// <typeparam name="TProperty">The type of the property.</typeparam>
+ /// <param name="expression">The member expression.</param>
+ /// <returns>The inheritance chain for the given member expression as a stack.</returns>
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Stack<MemberInfo> GetMembers<TModel, TProperty>(Expression<Func<TModel, TProperty>> expression)
+ {
+ var stack = new Stack<MemberInfo>();
+
+ var currentExpression = expression.Body;
+ while (true)
+ {
+ var memberExpression = GetMemberExpression(currentExpression);
+ if (memberExpression == null)
+ {
+ break;
+ }
+
+ stack.Push(memberExpression.Member);
+ currentExpression = memberExpression.Expression;
+ }
+
+ return stack;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ private static MemberExpression? GetMemberExpression(Expression expression)
+ {
+ MemberExpression? memberExpression = null;
+ if (expression.NodeType == ExpressionType.Convert)
+ {
+ var body = (UnaryExpression)expression;
+ memberExpression = body.Operand as MemberExpression;
+ }
+ else if (expression.NodeType == ExpressionType.MemberAccess)
+ {
+ memberExpression = expression as MemberExpression;
+ }
+
+ return memberExpression;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ArrayConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ArrayConverter.cs
new file mode 100644
index 0000000..fb30ae1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ArrayConverter.cs
@@ -0,0 +1,73 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="Array"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class ArrayConverter : IEnumerableConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ Array array;
+ var type = memberMapData.Member.MemberType().GetElementType();
+ var converter = row.Context.TypeConverterCache.GetConverter(type);
+
+ if (memberMapData.IsNameSet || row.Configuration.HasHeaderRecord && !memberMapData.IsIndexSet)
+ {
+ // Use the name.
+ var list = new List<object>();
+ var nameIndex = 0;
+ while (true)
+ {
+ if (!row.TryGetField(type, memberMapData.Names.FirstOrDefault(), nameIndex, out var field))
+ {
+ break;
+ }
+
+ list.Add(field);
+ nameIndex++;
+ }
+
+ array = (Array)ObjectResolver.Current.Resolve(memberMapData.Member.MemberType(), list.Count);
+ for (var i = 0; i < list.Count; i++)
+ {
+ array.SetValue(list[i], i);
+ }
+ }
+ else
+ {
+ // Use the index.
+ var indexEnd = memberMapData.IndexEnd < memberMapData.Index
+ ? row.Parser.Count - 1
+ : memberMapData.IndexEnd;
+
+ var arraySize = indexEnd - memberMapData.Index + 1;
+ array = (Array)ObjectResolver.Current.Resolve(memberMapData.Member.MemberType(), arraySize);
+ var arrayIndex = 0;
+ for (var i = memberMapData.Index; i <= indexEnd; i++)
+ {
+ var field = converter.ConvertFromString(row.GetField(i), row, memberMapData);
+ array.SetValue(field, arrayIndex);
+ arrayIndex++;
+ }
+ }
+
+ return array;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BigIntegerConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BigIntegerConverter.cs
new file mode 100644
index 0000000..efc06c9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BigIntegerConverter.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="BigInteger"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class BigIntegerConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ if (value is BigInteger bi && memberMapData.TypeConverterOptions.Formats?.FirstOrDefault() == null)
+ {
+ return bi.ToString("R", memberMapData.TypeConverterOptions.CultureInfo);
+ }
+
+ return base.ConvertToString(value, row, memberMapData);
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (BigInteger.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var bi))
+ {
+ return bi;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BooleanConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BooleanConverter.cs
new file mode 100644
index 0000000..6ab2a9c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/BooleanConverter.cs
@@ -0,0 +1,72 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="bool"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class BooleanConverter : DefaultTypeConverter
+ {
+ /// <inheritdoc/>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (bool.TryParse(text, out var b))
+ {
+ return b;
+ }
+
+ if (short.TryParse(text, out var sh))
+ {
+ if (sh == 0)
+ {
+ return false;
+ }
+ if (sh == 1)
+ {
+ return true;
+ }
+ }
+
+ var t = (text ?? string.Empty).Trim();
+ foreach (var trueValue in memberMapData.TypeConverterOptions.BooleanTrueValues)
+ {
+ if (memberMapData.TypeConverterOptions.CultureInfo.CompareInfo.Compare(trueValue, t, CompareOptions.IgnoreCase) == 0)
+ {
+ return true;
+ }
+ }
+
+ foreach (var falseValue in memberMapData.TypeConverterOptions.BooleanFalseValues)
+ {
+ if (memberMapData.TypeConverterOptions.CultureInfo.CompareInfo.Compare(falseValue, t, CompareOptions.IgnoreCase) == 0)
+ {
+ return false;
+ }
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+
+ /// <inheritdoc/>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var b = value as bool?;
+ if (b == true && memberMapData.TypeConverterOptions.BooleanTrueValues.Count > 0)
+ {
+ return memberMapData.TypeConverterOptions.BooleanTrueValues.First();
+ }
+ else if (b == false && memberMapData.TypeConverterOptions.BooleanFalseValues.Count > 0)
+ {
+ return memberMapData.TypeConverterOptions.BooleanFalseValues.First();
+ }
+
+ return base.ConvertToString(value, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverter.cs
new file mode 100644
index 0000000..1f6c382
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverter.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Text;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="T:Byte[]"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class ByteArrayConverter : DefaultTypeConverter
+ {
+ private readonly ByteArrayConverterOptions options;
+ private readonly string HexStringPrefix;
+ private readonly byte ByteLength;
+
+ /// <summary>
+ /// Creates a new ByteArrayConverter using the given <see cref="ByteArrayConverterOptions"/>.
+ /// </summary>
+ /// <param name="options">The options.</param>
+ public ByteArrayConverter(ByteArrayConverterOptions options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexInclude0x)
+ {
+ // Defaults to the literal format used by C# for whole numbers, and SQL Server for binary data.
+ this.options = options;
+ ValidateOptions();
+
+ HexStringPrefix = (options & ByteArrayConverterOptions.HexDashes) == ByteArrayConverterOptions.HexDashes ? "-" : string.Empty;
+ ByteLength = (options & ByteArrayConverterOptions.HexDashes) == ByteArrayConverterOptions.HexDashes ? (byte)3 : (byte)2;
+ }
+
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ if (value is byte[] byteArray)
+ {
+ return (options & ByteArrayConverterOptions.Base64) == ByteArrayConverterOptions.Base64
+ ? Convert.ToBase64String(byteArray)
+ : ByteArrayToHexString(byteArray);
+ }
+
+ return base.ConvertToString(value, row, memberMapData);
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text != null)
+ {
+ return (options & ByteArrayConverterOptions.Base64) == ByteArrayConverterOptions.Base64
+ ? Convert.FromBase64String(text)
+ : HexStringToByteArray(text);
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+
+ private string ByteArrayToHexString(byte[] byteArray)
+ {
+ var hexString = new StringBuilder();
+
+ if ((options & ByteArrayConverterOptions.HexInclude0x) == ByteArrayConverterOptions.HexInclude0x)
+ {
+ hexString.Append("0x");
+ }
+
+ if (byteArray.Length >= 1)
+ {
+ hexString.Append(byteArray[0].ToString("X2"));
+ }
+
+ for (var i = 1; i < byteArray.Length; i++)
+ {
+ hexString.Append(HexStringPrefix + byteArray[i].ToString("X2"));
+ }
+
+ return hexString.ToString();
+ }
+
+ private byte[] HexStringToByteArray(string hex)
+ {
+ var has0x = hex.StartsWith("0x");
+
+ var length = has0x
+ ? (hex.Length - 1) / ByteLength
+ : hex.Length + 1 / ByteLength;
+ var byteArray = new byte[length];
+ var has0xOffset = has0x ? 1 : 0;
+
+ for (var stringIndex = has0xOffset * 2; stringIndex < hex.Length; stringIndex += ByteLength)
+ {
+ byteArray[(stringIndex - has0xOffset) / ByteLength] = Convert.ToByte(hex.Substring(stringIndex, 2), 16);
+ }
+
+ return byteArray;
+ }
+
+ private void ValidateOptions()
+ {
+ if ((options & ByteArrayConverterOptions.Base64) == ByteArrayConverterOptions.Base64)
+ {
+ if ((options & (ByteArrayConverterOptions.HexInclude0x | ByteArrayConverterOptions.HexDashes | ByteArrayConverterOptions.Hexadecimal)) != ByteArrayConverterOptions.None)
+ {
+ throw new ConfigurationException($"{nameof(ByteArrayConverter)} must be configured exclusively with HexDecimal options, or exclusively with Base64 options. Was {options.ToString()}")
+ {
+ Data = { { "options", options } }
+ };
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverterOptions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverterOptions.cs
new file mode 100644
index 0000000..2ce9d7c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteArrayConverterOptions.cs
@@ -0,0 +1,44 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Options for converting byte arrays.
+ /// </summary>
+ [Flags]
+ public enum ByteArrayConverterOptions
+ {
+ /// <summary>
+ /// No options.
+ /// </summary>
+ None = 0,
+
+ // TypeOptions
+
+ /// <summary>
+ /// Hexadecimal encoding.
+ /// </summary>
+ Hexadecimal = 1,
+
+ /// <summary>
+ /// Base64 encoding.
+ /// </summary>
+ Base64 = 2,
+
+ // HexFormattingOptions
+
+ /// <summary>
+ /// Use dashes in between hex values.
+ /// </summary>
+ HexDashes = 4,
+
+ /// <summary>
+ /// Prefix hex number with 0x.
+ /// </summary>
+ HexInclude0x = 8,
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteConverter.cs
new file mode 100644
index 0000000..7583bd7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ByteConverter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="byte"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class ByteConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (byte.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var b))
+ {
+ return b;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CharConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CharConverter.cs
new file mode 100644
index 0000000..fa3d487
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CharConverter.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="char"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class CharConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text != null && text.Length > 1)
+ {
+ text = text.Trim();
+ }
+
+ if (char.TryParse(text, out var c))
+ {
+ return c;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionConverterFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionConverterFactory.cs
new file mode 100644
index 0000000..0fb8c90
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionConverterFactory.cs
@@ -0,0 +1,175 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <inheritdoc />
+ public class CollectionConverterFactory : ITypeConverterFactory
+ {
+ private int dictionaryTypeHashCode = typeof(IDictionary).GetHashCode();
+ private List<int> enumerableTypeHashCodes = new List<int>
+ {
+ typeof(IList).GetHashCode(),
+ typeof(ICollection).GetHashCode(),
+ typeof(IEnumerable).GetHashCode(),
+ };
+
+ /// <inheritdoc />
+ public bool CanCreate(Type type)
+ {
+ switch (type)
+ {
+ case IList:
+ case IDictionary:
+ case ICollection:
+ case IEnumerable:
+ return true;
+ }
+
+ if (type.IsArray)
+ {
+ // ArrayConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(Dictionary<,>))
+ {
+ // IDictionaryGenericConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(IDictionary<,>))
+ {
+ // IDictionaryGenericConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>))
+ {
+ // CollectionGenericConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(Collection<>))
+ {
+ // CollectionGenericConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(IList<>))
+ {
+ // IEnumerableGenericConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(ICollection<>))
+ {
+ // IEnumerableGenericConverter
+ return true;
+ }
+
+ if (type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition() == typeof(IEnumerable<>))
+ {
+ // IEnumerableGenericConverter
+ return true;
+ }
+
+ // A specific IEnumerable converter doesn't exist.
+ if (typeof(IEnumerable).IsAssignableFrom(type))
+ {
+ // EnumerableConverter
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <inheritdoc />
+ public bool Create(Type type, TypeConverterCache cache, out ITypeConverter typeConverter)
+ {
+ var typeHashCode = type.GetHashCode();
+
+ if (typeHashCode == dictionaryTypeHashCode)
+ {
+ typeConverter = new IDictionaryConverter();
+ return true;
+ }
+
+ if (enumerableTypeHashCodes.Contains(typeHashCode))
+ {
+ typeConverter = new IEnumerableConverter();
+ return true;
+ }
+
+ if (type.IsArray)
+ {
+ typeConverter = new ArrayConverter();
+ return true;
+ }
+
+ var isGenericType = type.GetTypeInfo().IsGenericType;
+ var genericTypeDefinition = type.GetGenericTypeDefinition();
+
+ if (isGenericType && genericTypeDefinition == typeof(Dictionary<,>))
+ {
+ typeConverter = new IDictionaryGenericConverter();
+ return true;
+ }
+
+ if (isGenericType && genericTypeDefinition == typeof(IDictionary<,>))
+ {
+ typeConverter = new IDictionaryGenericConverter();
+ return true;
+ }
+
+ if (isGenericType && genericTypeDefinition == typeof(List<>))
+ {
+ typeConverter = new CollectionGenericConverter();
+ return true;
+ }
+
+ if (isGenericType && genericTypeDefinition == typeof(Collection<>))
+ {
+ typeConverter = new CollectionGenericConverter();
+ return true;
+ }
+
+ if (isGenericType && genericTypeDefinition == typeof(IList<>))
+ {
+ typeConverter = new IEnumerableGenericConverter();
+ return true;
+ }
+
+ if (isGenericType && genericTypeDefinition == typeof(ICollection<>))
+ {
+ typeConverter = new IEnumerableGenericConverter();
+ return true;
+ }
+
+ if (isGenericType && genericTypeDefinition == typeof(IEnumerable<>))
+ {
+ typeConverter = new IEnumerableGenericConverter();
+ return true;
+ }
+
+ // A specific IEnumerable converter doesn't exist.
+ if (typeof(IEnumerable).IsAssignableFrom(type))
+ {
+ typeConverter = new EnumerableConverter();
+ return true;
+ }
+
+ throw new InvalidOperationException($"Cannot create collection converter for type '{type.FullName}'.");
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionGenericConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionGenericConverter.cs
new file mode 100644
index 0000000..9026f6a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/CollectionGenericConverter.cs
@@ -0,0 +1,64 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.ObjectModel;
+using System.Linq;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="Collection{T}"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class CollectionGenericConverter : IEnumerableConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ // Since we're using the MemberType here, this converter can be used for multiple types
+ // as long as they implement IList.
+ var list = (IList)ObjectResolver.Current.Resolve(memberMapData.Member.MemberType());
+ var type = memberMapData.Member.MemberType().GetGenericArguments()[0];
+ var converter = row.Context.TypeConverterCache.GetConverter(type);
+
+ if (memberMapData.IsNameSet || row.Configuration.HasHeaderRecord && !memberMapData.IsIndexSet)
+ {
+ // Use the name.
+ var nameIndex = 0;
+ while (true)
+ {
+ if (!row.TryGetField(type, memberMapData.Names.FirstOrDefault(), nameIndex, out var field))
+ {
+ break;
+ }
+
+ list.Add(field);
+ nameIndex++;
+ }
+ }
+ else
+ {
+ // Use the index.
+ var indexEnd = memberMapData.IndexEnd < memberMapData.Index
+ ? row.Parser.Count - 1
+ : memberMapData.IndexEnd;
+
+ for (var i = memberMapData.Index; i <= indexEnd; i++)
+ {
+ var field = converter.ConvertFromString(row.GetField(i), row, memberMapData);
+ list.Add(field);
+ }
+ }
+
+ return list;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateOnlyConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateOnlyConverter.cs
new file mode 100644
index 0000000..faedb82
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateOnlyConverter.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+#if NET6_0
+using CsvHelper.Configuration;
+using System;
+using System.Globalization;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="DateOnly"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class DateOnlyConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text == null)
+ {
+ return base.ConvertFromString(null, row, memberMapData);
+ }
+
+ var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat(typeof(DateTimeFormatInfo)) ?? memberMapData.TypeConverterOptions.CultureInfo;
+ var dateTimeStyle = memberMapData.TypeConverterOptions.DateTimeStyle ?? DateTimeStyles.None;
+
+ return memberMapData.TypeConverterOptions.Formats == null || memberMapData.TypeConverterOptions.Formats.Length == 0
+ ? DateOnly.Parse(text, formatProvider, dateTimeStyle)
+ : DateOnly.ParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle);
+ }
+ }
+}
+#endif
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeConverter.cs
new file mode 100644
index 0000000..b67f133
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeConverter.cs
@@ -0,0 +1,43 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Globalization;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="DateTime"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class DateTimeConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text == null)
+ {
+ return base.ConvertFromString(null, row, memberMapData);
+ }
+
+ var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat(typeof(DateTimeFormatInfo)) ?? memberMapData.TypeConverterOptions.CultureInfo;
+ var dateTimeStyle = memberMapData.TypeConverterOptions.DateTimeStyle ?? DateTimeStyles.None;
+
+ DateTime dateTime;
+ var success = memberMapData.TypeConverterOptions.Formats == null || memberMapData.TypeConverterOptions.Formats.Length == 0
+ ? DateTime.TryParse(text, formatProvider, dateTimeStyle, out dateTime)
+ : DateTime.TryParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle, out dateTime);
+
+ return success
+ ? dateTime
+ : base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeOffsetConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeOffsetConverter.cs
new file mode 100644
index 0000000..88ad90e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DateTimeOffsetConverter.cs
@@ -0,0 +1,43 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="DateTimeOffset"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class DateTimeOffsetConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text == null)
+ {
+ return base.ConvertFromString(null, row, memberMapData);
+ }
+
+ var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat(typeof(DateTimeFormatInfo)) ?? memberMapData.TypeConverterOptions.CultureInfo;
+ var dateTimeStyle = memberMapData.TypeConverterOptions.DateTimeStyle ?? DateTimeStyles.None;
+
+ DateTimeOffset dateTimeOffset;
+ var success = memberMapData.TypeConverterOptions.Formats == null || memberMapData.TypeConverterOptions.Formats.Length == 0
+ ? DateTimeOffset.TryParse(text, formatProvider, dateTimeStyle, out dateTimeOffset)
+ : DateTimeOffset.TryParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle, out dateTimeOffset);
+
+ return success
+ ? dateTimeOffset
+ : base.ConvertFromString(null, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DecimalConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DecimalConverter.cs
new file mode 100644
index 0000000..855167e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DecimalConverter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="decimal"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class DecimalConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Number;
+
+ if (decimal.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var d))
+ {
+ return d;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DefaultTypeConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DefaultTypeConverter.cs
new file mode 100644
index 0000000..57bf11d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DefaultTypeConverter.cs
@@ -0,0 +1,62 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.Configuration;
+using System.Linq;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="object"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class DefaultTypeConverter : ITypeConverter
+ {
+ /// <inheritdoc/>
+ public virtual object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (memberMapData.UseDefaultOnConversionFailure && memberMapData.IsDefaultSet && memberMapData.Member.MemberType() == memberMapData.Default?.GetType())
+ {
+ return memberMapData.Default;
+ }
+
+ if (!row.Configuration.ExceptionMessagesContainRawData)
+ {
+ text = $"Hidden because {nameof(IParserConfiguration.ExceptionMessagesContainRawData)} is false.";
+ }
+
+ text ??= string.Empty;
+
+ var message =
+ $"The conversion cannot be performed.{Environment.NewLine}" +
+ $" Text: '{text}'{Environment.NewLine}" +
+ $" MemberName: {memberMapData.Member?.Name}{Environment.NewLine}" +
+ $" MemberType: {memberMapData.Member?.MemberType().FullName}{Environment.NewLine}" +
+ $" TypeConverter: '{memberMapData.TypeConverter?.GetType().FullName}'";
+ throw new TypeConverterException(this, memberMapData, text, row.Context, message);
+ }
+
+ /// <inheritdoc/>
+ public virtual string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ if (value == null)
+ {
+ if (memberMapData.TypeConverterOptions.NullValues.Count > 0)
+ {
+ return memberMapData.TypeConverterOptions.NullValues.First();
+ }
+
+ return string.Empty;
+ }
+
+ if (value is IFormattable formattable)
+ {
+ var format = memberMapData.TypeConverterOptions.Formats?.FirstOrDefault();
+ return formattable.ToString(format, memberMapData.TypeConverterOptions.CultureInfo);
+ }
+
+ return value?.ToString() ?? string.Empty;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DoubleConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DoubleConverter.cs
new file mode 100644
index 0000000..b330831
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/DoubleConverter.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="double"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class DoubleConverter : DefaultTypeConverter
+ {
+ private Lazy<string> defaultFormat = new Lazy<string>(() => double.TryParse(double.MaxValue.ToString("R"), out var _) ? "R" : "G17");
+
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var format = memberMapData.TypeConverterOptions.Formats?.FirstOrDefault() ?? defaultFormat.Value;
+
+ if (value is double d)
+ {
+ return d.ToString(format, memberMapData.TypeConverterOptions.CultureInfo);
+ }
+
+ return base.ConvertToString(value, row, memberMapData);
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Float | NumberStyles.AllowThousands;
+
+ if (double.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var d))
+ {
+ return d;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverter.cs
new file mode 100644
index 0000000..023a4f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverter.cs
@@ -0,0 +1,121 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="Enum"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class EnumConverter : DefaultTypeConverter
+ {
+ private readonly Type type;
+ private readonly Dictionary<string, string> enumNamesByAttributeNames = new Dictionary<string, string>();
+ private readonly Dictionary<string, string> enumNamesByAttributeNamesIgnoreCase = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
+ private readonly Dictionary<object, string> attributeNamesByEnumValues = new Dictionary<object, string>();
+
+ // enumNamesByAttributeNames
+ // enumNamesByAttributeNamesIgnoreCase
+ // [Name("Foo")]:One
+
+ // attributeNamesByEnumValues
+ // 1:[Name("Foo")]
+
+ /// <summary>
+ /// Creates a new <see cref="EnumConverter"/> for the given <see cref="Enum"/> <see cref="System.Type"/>.
+ /// </summary>
+ /// <param name="type">The type of the Enum.</param>
+ public EnumConverter(Type type)
+ {
+ if (!typeof(Enum).GetTypeInfo().IsAssignableFrom(type.GetTypeInfo()))
+ {
+ throw new ArgumentException($"'{type.FullName}' is not an Enum.");
+ }
+
+ this.type = type;
+
+ foreach (var value in Enum.GetValues(type))
+ {
+ var enumName = Enum.GetName(type, value) ?? string.Empty;
+
+ var nameAttribute = type.GetField(enumName)?.GetCustomAttribute<NameAttribute>();
+ if (nameAttribute != null && nameAttribute.Names.Length > 0)
+ {
+ foreach (var attributeName in nameAttribute.Names)
+ {
+ if (!enumNamesByAttributeNames.ContainsKey(attributeName))
+ {
+ enumNamesByAttributeNames.Add(attributeName, enumName);
+ }
+
+ if (!enumNamesByAttributeNamesIgnoreCase.ContainsKey(attributeName))
+ {
+ enumNamesByAttributeNamesIgnoreCase.Add(attributeName, enumName);
+ }
+
+ if (!attributeNamesByEnumValues.ContainsKey(value))
+ {
+ attributeNamesByEnumValues.Add(value, attributeName);
+ }
+ }
+ }
+ }
+ }
+
+ /// <inheritdoc/>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var ignoreCase = memberMapData.TypeConverterOptions.EnumIgnoreCase ?? false;
+
+ if (text != null)
+ {
+ var dict = ignoreCase
+ ? enumNamesByAttributeNamesIgnoreCase
+ : enumNamesByAttributeNames;
+ if (dict.TryGetValue(text, out var name))
+ {
+ return Enum.Parse(type, name);
+ }
+ }
+
+#if NET45 || NET47 || NETSTANDARD2_0
+ try
+ {
+ return Enum.Parse(type, text, ignoreCase);
+ }
+ catch
+ {
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+#else
+ if (Enum.TryParse(type, text, ignoreCase, out var value))
+ {
+ return value;
+ }
+ else
+ {
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+#endif
+ }
+
+ /// <inheritdoc/>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ if (value != null && attributeNamesByEnumValues.TryGetValue(value, out var name))
+ {
+ return name;
+ }
+
+ return base.ConvertToString(value, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverterFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverterFactory.cs
new file mode 100644
index 0000000..5918552
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumConverterFactory.cs
@@ -0,0 +1,35 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <inheritdoc />
+ public class EnumConverterFactory : ITypeConverterFactory
+ {
+ /// <inheritdoc />
+ public bool CanCreate(Type type)
+ {
+ return typeof(Enum).IsAssignableFrom(type);
+ }
+
+ /// <inheritdoc />
+ public bool Create(Type type, TypeConverterCache cache, out ITypeConverter typeConverter)
+ {
+ if (cache.Contains(typeof(Enum)))
+ {
+ // If the user has registered a converter for the generic Enum type,
+ // that converter will be used as a default for all enums.
+ typeConverter = cache.GetConverter<Enum>();
+
+ return false;
+ }
+
+ typeConverter = new EnumConverter(type);
+
+ return true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumerableConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumerableConverter.cs
new file mode 100644
index 0000000..0a6a06d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/EnumerableConverter.cs
@@ -0,0 +1,48 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Throws an exception when used. This is here so that it's apparent
+ /// that there is no support for <see cref="IEnumerable"/> type conversion. A custom
+ /// converter will need to be created to have a field convert to and
+ /// from an IEnumerable.
+ /// </summary>
+ public class EnumerableConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Throws an exception.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var message = "Converting IEnumerable types is not supported for a single field. " +
+ "If you want to do this, create your own ITypeConverter and register " +
+ "it in the TypeConverterFactory by calling AddConverter.";
+ throw new TypeConverterException(this, memberMapData, text, row.Context, message);
+ }
+
+ /// <summary>
+ /// Throws an exception.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var message = "Converting IEnumerable types is not supported for a single field. " +
+ "If you want to do this, create your own ITypeConverter and register " +
+ "it in the TypeConverterFactory by calling AddConverter.";
+ throw new TypeConverterException(this, memberMapData, value, row.Context, message);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/GuidConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/GuidConverter.cs
new file mode 100644
index 0000000..7639201
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/GuidConverter.cs
@@ -0,0 +1,32 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="Guid"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class GuidConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text == null)
+ {
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+
+ return new Guid(text);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryConverter.cs
new file mode 100644
index 0000000..830756f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryConverter.cs
@@ -0,0 +1,65 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.Generic;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="IDictionary"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class IDictionaryConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var dictionary = value as IDictionary;
+ if (dictionary == null)
+ {
+ return base.ConvertToString(value, row, memberMapData);
+ }
+
+ foreach (DictionaryEntry entry in dictionary)
+ {
+ row.WriteField(entry.Value);
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var dictionary = new Dictionary<string, string>();
+
+ var indexEnd = memberMapData.IndexEnd < memberMapData.Index
+ ? row.Parser.Count - 1
+ : memberMapData.IndexEnd;
+
+ for (var i = memberMapData.Index; i <= indexEnd; i++)
+ {
+ if (row.TryGetField(i, out string field))
+ {
+ dictionary.Add(row.HeaderRecord[i], field);
+ }
+ }
+
+ return dictionary;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryGenericConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryGenericConverter.cs
new file mode 100644
index 0000000..5c2dea2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IDictionaryGenericConverter.cs
@@ -0,0 +1,46 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.Generic;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="IDictionary{TKey, TValue}"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class IDictionaryGenericConverter : IDictionaryConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var keyType = memberMapData.Member.MemberType().GetGenericArguments()[0];
+ var valueType = memberMapData.Member.MemberType().GetGenericArguments()[1];
+ var dictionaryType = typeof(Dictionary<,>);
+ dictionaryType = dictionaryType.MakeGenericType(keyType, valueType);
+ var dictionary = (IDictionary)ObjectResolver.Current.Resolve(dictionaryType);
+ var converter = row.Context.TypeConverterCache.GetConverter(valueType);
+
+ var indexEnd = memberMapData.IndexEnd < memberMapData.Index
+ ? row.Parser.Count - 1
+ : memberMapData.IndexEnd;
+
+ for (var i = memberMapData.Index; i <= indexEnd; i++)
+ {
+ var field = converter.ConvertFromString(row.GetField(i), row, memberMapData);
+
+ dictionary.Add(row.HeaderRecord[i], field);
+ }
+
+ return dictionary;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableConverter.cs
new file mode 100644
index 0000000..45ef579
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableConverter.cs
@@ -0,0 +1,85 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="IEnumerable"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class IEnumerableConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row"></param>
+ /// <param name="memberMapData"></param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var list = value as IEnumerable;
+ if (list == null)
+ {
+ return base.ConvertToString(value, row, memberMapData);
+ }
+
+ foreach (var item in list)
+ {
+ row.WriteField(item.ToString());
+ }
+
+ return null;
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var list = new List<string>();
+
+ if (memberMapData.IsNameSet || row.Configuration.HasHeaderRecord && !memberMapData.IsIndexSet)
+ {
+ // Use the name.
+ var nameIndex = 0;
+ while (true)
+ {
+ if (!row.TryGetField(memberMapData.Names.FirstOrDefault(), nameIndex, out string field))
+ {
+ break;
+ }
+
+ list.Add(field);
+ nameIndex++;
+ }
+ }
+ else
+ {
+ // Use the index.
+ var indexEnd = memberMapData.IndexEnd < memberMapData.Index
+ ? row.Parser.Count - 1
+ : memberMapData.IndexEnd;
+
+ for (var i = memberMapData.Index; i <= indexEnd; i++)
+ {
+ if (row.TryGetField(i, out string field))
+ {
+ list.Add(field);
+ }
+ }
+ }
+
+ return list;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableGenericConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableGenericConverter.cs
new file mode 100644
index 0000000..6718f31
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/IEnumerableGenericConverter.cs
@@ -0,0 +1,65 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="IEnumerable{T}"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class IEnumerableGenericConverter : IEnumerableConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var type = memberMapData.Member.MemberType().GetGenericArguments()[0];
+ var listType = typeof(List<>);
+ listType = listType.MakeGenericType(type);
+ var list = (IList)ObjectResolver.Current.Resolve(listType);
+ var converter = row.Context.TypeConverterCache.GetConverter(type);
+
+ if (memberMapData.IsNameSet || row.Configuration.HasHeaderRecord && !memberMapData.IsIndexSet)
+ {
+ // Use the name.
+ var nameIndex = 0;
+ while (true)
+ {
+ if (!row.TryGetField(type, memberMapData.Names.FirstOrDefault(), nameIndex, out var field))
+ {
+ break;
+ }
+
+ list.Add(field);
+ nameIndex++;
+ }
+ }
+ else
+ {
+ // Use the index.
+ var indexEnd = memberMapData.IndexEnd < memberMapData.Index
+ ? row.Parser.Count - 1
+ : memberMapData.IndexEnd;
+
+ for (var i = memberMapData.Index; i <= indexEnd; i++)
+ {
+ var field = converter.ConvertFromString(row.GetField(i), row, memberMapData);
+
+ list.Add(field);
+ }
+ }
+
+ return list;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverter.cs
new file mode 100644
index 0000000..5eb5961
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverter.cs
@@ -0,0 +1,32 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts objects to and from strings.
+ /// </summary>
+ public interface ITypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData);
+
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverterFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverterFactory.cs
new file mode 100644
index 0000000..67fbda9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/ITypeConverterFactory.cs
@@ -0,0 +1,33 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Produces <see cref="ITypeConverter"/> for the specified <see cref="System.Type"/>
+ /// </summary>
+ public interface ITypeConverterFactory
+ {
+ /// <summary>
+ /// Determines if the factory can create a type converter for the given type.
+ /// </summary>
+ /// <param name="type">The <see cref="Type"/> to be checked</param>
+ /// <returns><c>true</c> if the factory can create the type, otherwise <c>false</c>.</returns>
+ bool CanCreate(Type type);
+
+ /// <summary>
+ /// Creates a type converter for the given type and assigns it to the given out typeConverter parameter.
+ /// </summary>
+ /// <param name="type">The type to create the converter for.</param>
+ /// <param name="cache">The type converter cache.</param>
+ /// <param name="typeConverter">The parameter to set the converter to.</param>
+ /// <returns><c>true</c> if the converter should be added to the cache, otherwise <c>false</c>.</returns>
+ bool Create(Type type, TypeConverterCache cache, out ITypeConverter typeConverter);
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int16Converter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int16Converter.cs
new file mode 100644
index 0000000..630559f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int16Converter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="short"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class Int16Converter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (short.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var s))
+ {
+ return s;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int32Converter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int32Converter.cs
new file mode 100644
index 0000000..61b0f9c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int32Converter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="int"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class Int32Converter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (int.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var i))
+ {
+ return i;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int64Converter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int64Converter.cs
new file mode 100644
index 0000000..47f717d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/Int64Converter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts an <see cref="long"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class Int64Converter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (long.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var l))
+ {
+ return l;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverter.cs
new file mode 100644
index 0000000..89ce969
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverter.cs
@@ -0,0 +1,94 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="Nullable{T}"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class NullableConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Gets the type of the nullable.
+ /// </summary>
+ /// <value>
+ /// The type of the nullable.
+ /// </value>
+ public Type NullableType { get; private set; }
+
+ /// <summary>
+ /// Gets the underlying type of the nullable.
+ /// </summary>
+ /// <value>
+ /// The underlying type.
+ /// </value>
+ public Type UnderlyingType { get; private set; }
+
+ /// <summary>
+ /// Gets the type converter for the underlying type.
+ /// </summary>
+ /// <value>
+ /// The type converter.
+ /// </value>
+ public ITypeConverter UnderlyingTypeConverter { get; private set; }
+
+ /// <summary>
+ /// Creates a new <see cref="NullableConverter"/> for the given <see cref="Nullable{T}"/> <see cref="Type"/>.
+ /// </summary>
+ /// <param name="type">The nullable type.</param>
+ /// <param name="typeConverterFactory">The type converter factory.</param>
+ /// <exception cref="System.ArgumentException">type is not a nullable type.</exception>
+ public NullableConverter(Type type, TypeConverterCache typeConverterFactory)
+ {
+ NullableType = type;
+ UnderlyingType = Nullable.GetUnderlyingType(type);
+ if (UnderlyingType == null)
+ {
+ throw new ArgumentException("type is not a nullable type.");
+ }
+
+ UnderlyingTypeConverter = typeConverterFactory.GetConverter(UnderlyingType);
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (string.IsNullOrEmpty(text))
+ {
+ return null;
+ }
+
+ foreach (var nullValue in memberMapData.TypeConverterOptions.NullValues)
+ {
+ if (text == nullValue)
+ {
+ return null;
+ }
+ }
+
+ return UnderlyingTypeConverter.ConvertFromString(text, row, memberMapData);
+ }
+
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row"></param>
+ /// <param name="memberMapData"></param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ return UnderlyingTypeConverter.ConvertToString(value, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverterFactory.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverterFactory.cs
new file mode 100644
index 0000000..2991348
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/NullableConverterFactory.cs
@@ -0,0 +1,28 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <inheritdoc />
+ public class NullableConverterFactory : ITypeConverterFactory
+ {
+ /// <inheritdoc />
+ public bool CanCreate(Type type)
+ {
+ return (type.IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(Nullable<>)));
+ }
+
+ /// <inheritdoc />
+ public bool Create(Type type, TypeConverterCache cache, out ITypeConverter typeConverter)
+ {
+ typeConverter = new NullableConverter(type, cache);
+
+ return true;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SByteConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SByteConverter.cs
new file mode 100644
index 0000000..816a58a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SByteConverter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="sbyte"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class SByteConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (sbyte.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var sb))
+ {
+ return sb;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SingleConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SingleConverter.cs
new file mode 100644
index 0000000..c6a8ecc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/SingleConverter.cs
@@ -0,0 +1,57 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+using System;
+using System.Linq;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="Single"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class SingleConverter : DefaultTypeConverter
+ {
+ private Lazy<string> defaultFormat = new Lazy<string>(() => float.TryParse(float.MaxValue.ToString("R"), out var _) ? "R" : "G9");
+
+ /// <summary>
+ /// Converts the object to a string.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var format = memberMapData.TypeConverterOptions.Formats?.FirstOrDefault() ?? defaultFormat.Value;
+
+ if (value is float f)
+ {
+ return f.ToString(format, memberMapData.TypeConverterOptions.CultureInfo);
+ }
+
+ return base.ConvertToString(value, row, memberMapData);
+ }
+
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Float | NumberStyles.AllowThousands;
+
+ if (float.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var f))
+ {
+ return f;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/StringConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/StringConverter.cs
new file mode 100644
index 0000000..6196973
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/StringConverter.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="string"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class StringConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text == null)
+ {
+ return string.Empty;
+ }
+
+ foreach (var nullValue in memberMapData.TypeConverterOptions.NullValues)
+ {
+ if (text == nullValue)
+ {
+ return null;
+ }
+ }
+
+ return text;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeOnlyConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeOnlyConverter.cs
new file mode 100644
index 0000000..a877b93
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeOnlyConverter.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+#if NET6_0
+using CsvHelper.Configuration;
+using System;
+using System.Globalization;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="TimeOnly"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class TimeOnlyConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ if (text == null)
+ {
+ return base.ConvertFromString(null, row, memberMapData);
+ }
+
+ var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat(typeof(DateTimeFormatInfo)) ?? memberMapData.TypeConverterOptions.CultureInfo;
+ var dateTimeStyle = memberMapData.TypeConverterOptions.DateTimeStyle ?? DateTimeStyles.None;
+
+ return memberMapData.TypeConverterOptions.Formats == null || memberMapData.TypeConverterOptions.Formats.Length == 0
+ ? TimeOnly.Parse(text, formatProvider, dateTimeStyle)
+ : TimeOnly.ParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle);
+ }
+ }
+}
+#endif
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeSpanConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeSpanConverter.cs
new file mode 100644
index 0000000..8424475
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TimeSpanConverter.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="TimeSpan"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class TimeSpanConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo;
+
+ var timeSpanStyle = memberMapData.TypeConverterOptions.TimeSpanStyle ?? TimeSpanStyles.None;
+ if (memberMapData.TypeConverterOptions.Formats != null && TimeSpan.TryParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, timeSpanStyle, out var span))
+ {
+ return span;
+ }
+
+ if (memberMapData.TypeConverterOptions.Formats == null && TimeSpan.TryParse(text, formatProvider, out span))
+ {
+ return span;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverter.cs
new file mode 100644
index 0000000..4a0f428
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverter.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Throws an exception when used. This is here so that it's apparent
+ /// that there is no support for <see cref="Type"/> type conversion. A custom
+ /// converter will need to be created to have a field convert to and
+ /// from <see cref="Type"/>.
+ /// </summary>
+ public class TypeConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Throws an exception.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var message = "Converting System.Type is not supported. " +
+ "If you want to do this, create your own ITypeConverter and register " +
+ "it in the TypeConverterFactory by calling AddConverter.";
+ throw new TypeConverterException(this, memberMapData, text ?? string.Empty, row.Context, message);
+ }
+
+ /// <summary>
+ /// Throws an exception.
+ /// </summary>
+ /// <param name="value">The object to convert to a string.</param>
+ /// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
+ /// <returns>The string representation of the object.</returns>
+ public override string? ConvertToString(object? value, IWriterRow row, MemberMapData memberMapData)
+ {
+ var message = "Converting System.Type is not supported. " +
+ "If you want to do this, create your own ITypeConverter and register " +
+ "it in the TypeConverterFactory by calling AddConverter.";
+ throw new TypeConverterException(this, memberMapData, value, row.Context, message);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterCache.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterCache.cs
new file mode 100644
index 0000000..2f7d4dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterCache.cs
@@ -0,0 +1,242 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Numerics;
+using System.Reflection;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Caches <see cref="ITypeConverter"/>s for a given type.
+ /// </summary>
+ public class TypeConverterCache
+ {
+ private readonly Dictionary<Type, ITypeConverter> typeConverters = new Dictionary<Type, ITypeConverter>();
+ private readonly List<ITypeConverterFactory> typeConverterFactories = new List<ITypeConverterFactory>();
+ private readonly Dictionary<Type, ITypeConverterFactory> typeConverterFactoryCache = new Dictionary<Type, ITypeConverterFactory>();
+
+ /// <summary>
+ /// Initializes the <see cref="TypeConverterCache" /> class.
+ /// </summary>
+ public TypeConverterCache()
+ {
+ CreateDefaultConverters();
+ }
+
+ /// <summary>
+ /// Determines if there is a converter registered for the given type.
+ /// </summary>
+ /// <param name="type">The type to check.</param>
+ /// <returns><c>true</c> if the converter is registered, otherwise false.</returns>
+ public bool Contains(Type type)
+ {
+ return typeConverters.ContainsKey(type);
+ }
+
+ /// <summary>
+ /// Adds the <see cref="ITypeConverterFactory"/>.
+ /// Factories are queried in order of being added and first factory that handles the type is used for creating the <see cref="ITypeConverter"/>.
+ /// </summary>
+ /// <param name="typeConverterFactory">Type converter factory</param>
+ public void AddConverterFactory(ITypeConverterFactory typeConverterFactory)
+ {
+ if (typeConverterFactory == null)
+ {
+ throw new ArgumentNullException(nameof(typeConverterFactory));
+ }
+
+ typeConverterFactories.Add(typeConverterFactory);
+ }
+
+ /// <summary>
+ /// Adds the <see cref="ITypeConverter"/> for the given <see cref="System.Type"/>.
+ /// </summary>
+ /// <param name="type">The type the converter converts.</param>
+ /// <param name="typeConverter">The type converter that converts the type.</param>
+ public void AddConverter(Type type, ITypeConverter typeConverter)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ if (typeConverter == null)
+ {
+ throw new ArgumentNullException(nameof(typeConverter));
+ }
+
+ typeConverters[type] = typeConverter;
+ }
+
+ /// <summary>
+ /// Adds the <see cref="ITypeConverter"/> for the given <see cref="System.Type"/>.
+ /// </summary>
+ /// <typeparam name="T">The type the converter converts.</typeparam>
+ /// <param name="typeConverter">The type converter that converts the type.</param>
+ public void AddConverter<T>(ITypeConverter typeConverter)
+ {
+ if (typeConverter == null)
+ {
+ throw new ArgumentNullException(nameof(typeConverter));
+ }
+
+ typeConverters[typeof(T)] = typeConverter;
+ }
+
+ /// <summary>
+ /// Adds the given <see cref="ITypeConverter"/> to all registered types.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ public void AddConverter(ITypeConverter typeConverter)
+ {
+ foreach (var type in typeConverters.Keys)
+ {
+ typeConverters[type] = typeConverter;
+ }
+ }
+
+ /// <summary>
+ /// Removes the <see cref="ITypeConverter"/> for the given <see cref="System.Type"/>.
+ /// </summary>
+ /// <param name="type">The type to remove the converter for.</param>
+ public void RemoveConverter(Type type)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ typeConverters.Remove(type);
+ }
+
+ /// <summary>
+ /// Removes the <see cref="ITypeConverter"/> for the given <see cref="System.Type"/>.
+ /// </summary>
+ /// <typeparam name="T">The type to remove the converter for.</typeparam>
+ public void RemoveConverter<T>()
+ {
+ RemoveConverter(typeof(T));
+ }
+
+ /// <summary>
+ /// Removes the ITypeConverterFactory.
+ /// </summary>
+ /// <param name="typeConverterFactory">The ITypeConverterFactory to remove.</param>
+ public void RemoveConverterFactory(ITypeConverterFactory typeConverterFactory)
+ {
+ typeConverterFactories.Remove(typeConverterFactory);
+ var toRemove = typeConverterFactoryCache.Where(pair => pair.Value == typeConverterFactory);
+ foreach (var pair in toRemove)
+ {
+ typeConverterFactoryCache.Remove(pair.Key);
+ }
+ }
+
+ /// <summary>
+ /// Gets the converter for the given <see cref="System.Type"/>.
+ /// </summary>
+ /// <param name="type">The type to get the converter for.</param>
+ /// <returns>The <see cref="ITypeConverter"/> for the given <see cref="System.Type"/>.</returns>
+ public ITypeConverter GetConverter(Type type)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ if (typeConverters.TryGetValue(type, out ITypeConverter typeConverter))
+ {
+ return typeConverter;
+ }
+
+ if (!typeConverterFactoryCache.TryGetValue(type, out var factory))
+ {
+ factory = typeConverterFactories.FirstOrDefault(f => f.CanCreate(type));
+ if (factory != null)
+ {
+ typeConverterFactoryCache[type] = factory;
+ }
+ }
+
+ if (factory != null)
+ {
+ if (factory.Create(type, this, out typeConverter))
+ {
+ AddConverter(type, typeConverter);
+ }
+
+ return typeConverter;
+ }
+
+ return new DefaultTypeConverter();
+ }
+
+ /// <summary>
+ /// Gets the converter for the given member. If an attribute is
+ /// found on the member, that will be used, otherwise the cache
+ /// will be used.
+ /// </summary>
+ /// <param name="member">The member to get the converter for.</param>
+ public ITypeConverter GetConverter(MemberInfo member)
+ {
+ var typeConverterAttribute = member.GetCustomAttribute<TypeConverterAttribute>();
+ if (typeConverterAttribute != null)
+ {
+ return typeConverterAttribute.TypeConverter;
+ }
+
+ return GetConverter(member.MemberType());
+ }
+
+ /// <summary>
+ /// Gets the converter for the given <see cref="System.Type"/>.
+ /// </summary>
+ /// <typeparam name="T">The type to get the converter for.</typeparam>
+ /// <returns>The <see cref="ITypeConverter"/> for the given <see cref="System.Type"/>.</returns>
+ public ITypeConverter GetConverter<T>()
+ {
+ return GetConverter(typeof(T));
+ }
+
+ private void CreateDefaultConverters()
+ {
+ AddConverter(typeof(BigInteger), new BigIntegerConverter());
+ AddConverter(typeof(bool), new BooleanConverter());
+ AddConverter(typeof(byte), new ByteConverter());
+ AddConverter(typeof(byte[]), new ByteArrayConverter());
+ AddConverter(typeof(char), new CharConverter());
+ AddConverter(typeof(DateTime), new DateTimeConverter());
+ AddConverter(typeof(DateTimeOffset), new DateTimeOffsetConverter());
+ AddConverter(typeof(decimal), new DecimalConverter());
+ AddConverter(typeof(double), new DoubleConverter());
+ AddConverter(typeof(float), new SingleConverter());
+ AddConverter(typeof(Guid), new GuidConverter());
+ AddConverter(typeof(short), new Int16Converter());
+ AddConverter(typeof(int), new Int32Converter());
+ AddConverter(typeof(long), new Int64Converter());
+ AddConverter(typeof(sbyte), new SByteConverter());
+ AddConverter(typeof(string), new StringConverter());
+ AddConverter(typeof(TimeSpan), new TimeSpanConverter());
+ AddConverter(typeof(Type), new TypeConverter());
+ AddConverter(typeof(ushort), new UInt16Converter());
+ AddConverter(typeof(uint), new UInt32Converter());
+ AddConverter(typeof(ulong), new UInt64Converter());
+ AddConverter(typeof(Uri), new UriConverter());
+#if NET6_0
+ AddConverter(typeof(DateOnly), new DateOnlyConverter());
+ AddConverter(typeof(TimeOnly), new TimeOnlyConverter());
+#endif
+
+ AddConverterFactory(new EnumConverterFactory());
+ AddConverterFactory(new NullableConverterFactory());
+ AddConverterFactory(new CollectionConverterFactory());
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterException.cs
new file mode 100644
index 0000000..970c195
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterException.cs
@@ -0,0 +1,132 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Represents errors that occur while reading a CSV file.
+ /// </summary>
+ [Serializable]
+ public class TypeConverterException : CsvHelperException
+ {
+ /// <summary>
+ /// The text used in ConvertFromString.
+ /// </summary>
+ public string Text { get; private set; }
+
+ /// <summary>
+ /// The value used in ConvertToString.
+ /// </summary>
+ public object Value { get; private set; }
+
+ /// <summary>
+ /// The type converter.
+ /// </summary>
+ public ITypeConverter TypeConverter { get; private set; }
+
+ /// <summary>
+ /// The member map data used in ConvertFromString and ConvertToString.
+ /// </summary>
+ public MemberMapData MemberMapData { get; private set; }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TypeConverterException"/> class.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ /// <param name="memberMapData">The member map data.</param>
+ /// <param name="text">The text.</param>
+ /// <param name="context">The reading context.</param>
+ public TypeConverterException(ITypeConverter typeConverter, MemberMapData memberMapData, string text, CsvContext context) : base(context)
+ {
+ TypeConverter = typeConverter;
+ MemberMapData = memberMapData;
+ Text = text;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TypeConverterException"/> class.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ /// <param name="memberMapData">The member map data.</param>
+ /// <param name="value">The value.</param>
+ /// <param name="context">The writing context.</param>
+ public TypeConverterException(ITypeConverter typeConverter, MemberMapData memberMapData, object value, CsvContext context) : base(context)
+ {
+ TypeConverter = typeConverter;
+ MemberMapData = memberMapData;
+ Value = value;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TypeConverterException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ /// <param name="memberMapData">The member map data.</param>
+ /// <param name="text">The text.</param>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public TypeConverterException(ITypeConverter typeConverter, MemberMapData memberMapData, string text, CsvContext context, string message) : base(context, message)
+ {
+ TypeConverter = typeConverter;
+ MemberMapData = memberMapData;
+ Text = text;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TypeConverterException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ /// <param name="memberMapData">The member map data.</param>
+ /// <param name="value">The value.</param>
+ /// <param name="context">The writing context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public TypeConverterException(ITypeConverter typeConverter, MemberMapData memberMapData, object value, CsvContext context, string message) : base(context, message)
+ {
+ TypeConverter = typeConverter;
+ MemberMapData = memberMapData;
+ Value = value;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TypeConverterException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ /// <param name="memberMapData">The member map data.</param>
+ /// <param name="text">The text.</param>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public TypeConverterException(ITypeConverter typeConverter, MemberMapData memberMapData, string text, CsvContext context, string message, Exception innerException) : base(context, message, innerException)
+ {
+ TypeConverter = typeConverter;
+ MemberMapData = memberMapData;
+ Text = text;
+ }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="TypeConverterException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="typeConverter">The type converter.</param>
+ /// <param name="memberMapData">The member map data.</param>
+ /// <param name="value">The value.</param>
+ /// <param name="context">The writing context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public TypeConverterException(ITypeConverter typeConverter, MemberMapData memberMapData, object value, CsvContext context, string message, Exception innerException) : base(context, message, innerException)
+ {
+ TypeConverter = typeConverter;
+ MemberMapData = memberMapData;
+ Value = value;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptions.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptions.cs
new file mode 100644
index 0000000..4a8e51f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptions.cs
@@ -0,0 +1,157 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Options used when doing type conversion.
+ /// </summary>
+ public class TypeConverterOptions
+ {
+ private static readonly string[] defaultBooleanTrueValues = { };
+ private static readonly string[] defaultBooleanFalseValues = { };
+ private static readonly string[] defaultNullValues = { };
+
+ /// <summary>
+ /// Gets or sets the culture info.
+ /// </summary>
+ public CultureInfo CultureInfo { get; set; }
+
+ /// <summary>
+ /// Gets or sets the date time style.
+ /// </summary>
+ public DateTimeStyles? DateTimeStyle { get; set; }
+
+ /// <summary>
+ /// Gets or sets the time span style.
+ /// </summary>
+ public TimeSpanStyles? TimeSpanStyle { get; set; }
+
+ /// <summary>
+ /// Gets or sets the number style.
+ /// </summary>
+ public NumberStyles? NumberStyles { get; set; }
+
+ /// <summary>
+ /// Gets or sets the string format.
+ /// </summary>
+ public string[] Formats { get; set; }
+
+ /// <summary>
+ /// Gets or sets the <see cref="UriKind"/>.
+ /// </summary>
+ public UriKind? UriKind { get; set; }
+
+ /// <summary>
+ /// Ingore case when parsing enums. Default is false.
+ /// </summary>
+ public bool? EnumIgnoreCase { get; set; }
+
+ /// <summary>
+ /// Gets the list of values that can be
+ /// used to represent a boolean of true.
+ /// </summary>
+ public List<string> BooleanTrueValues { get; } = new List<string>(defaultBooleanTrueValues);
+
+ /// <summary>
+ /// Gets the list of values that can be
+ /// used to represent a boolean of false.
+ /// </summary>
+ public List<string> BooleanFalseValues { get; } = new List<string>(defaultBooleanFalseValues);
+
+ /// <summary>
+ /// Gets the list of values that can be used to represent a null value.
+ /// </summary>
+ public List<string> NullValues { get; } = new List<string>(defaultNullValues);
+
+ /// <summary>
+ /// Merges TypeConverterOptions by applying the values of sources in order on to each other.
+ /// The first object is the source object.
+ /// </summary>
+ /// <param name="sources">The sources that will be applied.</param>
+ /// <returns>The updated source object.</returns>
+ public static TypeConverterOptions? Merge(params TypeConverterOptions[] sources)
+ {
+ if (sources == null || sources.Length == 0)
+ {
+ return null;
+ }
+
+ var options = sources[0];
+
+ for (var i = 1; i < sources.Length; i++)
+ {
+ var source = sources[i];
+
+ if (source == null)
+ {
+ continue;
+ }
+
+ if (source.CultureInfo != null)
+ {
+ options.CultureInfo = source.CultureInfo;
+ }
+
+ if (source.DateTimeStyle != null)
+ {
+ options.DateTimeStyle = source.DateTimeStyle;
+ }
+
+ if (source.TimeSpanStyle != null)
+ {
+ options.TimeSpanStyle = source.TimeSpanStyle;
+ }
+
+ if (source.NumberStyles != null)
+ {
+ options.NumberStyles = source.NumberStyles;
+ }
+
+ if (source.Formats != null)
+ {
+ options.Formats = source.Formats;
+ }
+
+ if (source.UriKind != null)
+ {
+ options.UriKind = source.UriKind;
+ }
+
+ if (source.EnumIgnoreCase != null)
+ {
+ options.EnumIgnoreCase = source.EnumIgnoreCase;
+ }
+
+ // Only change the values if they are different than the defaults.
+ // This means there were explicit changes made to the options.
+
+ if (!defaultBooleanTrueValues.SequenceEqual(source.BooleanTrueValues))
+ {
+ options.BooleanTrueValues.Clear();
+ options.BooleanTrueValues.AddRange(source.BooleanTrueValues);
+ }
+
+ if (!defaultBooleanFalseValues.SequenceEqual(source.BooleanFalseValues))
+ {
+ options.BooleanFalseValues.Clear();
+ options.BooleanFalseValues.AddRange(source.BooleanFalseValues);
+ }
+
+ if (!defaultNullValues.SequenceEqual(source.NullValues))
+ {
+ options.NullValues.Clear();
+ options.NullValues.AddRange(source.NullValues);
+ }
+ }
+
+ return options;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptionsCache.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptionsCache.cs
new file mode 100644
index 0000000..37e0d99
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/TypeConverterOptionsCache.cs
@@ -0,0 +1,108 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Caches <see cref="TypeConverterOptions"/> for a given type.
+ /// </summary>
+ public class TypeConverterOptionsCache
+ {
+ private Dictionary<Type, TypeConverterOptions> typeConverterOptions = new Dictionary<Type, TypeConverterOptions>();
+
+ /// <summary>
+ /// Adds the <see cref="TypeConverterOptions"/> for the given <see cref="Type"/>.
+ /// </summary>
+ /// <param name="type">The type the options are for.</param>
+ /// <param name="options">The options.</param>
+ public void AddOptions(Type type, TypeConverterOptions options)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ typeConverterOptions[type] = options ?? throw new ArgumentNullException(nameof(options));
+ }
+
+ /// <summary>
+ /// Adds the <see cref="TypeConverterOptions"/> for the given <see cref="Type"/>.
+ /// </summary>
+ /// <typeparam name="T">The type the options are for.</typeparam>
+ /// <param name="options">The options.</param>
+ public void AddOptions<T>(TypeConverterOptions options)
+ {
+ AddOptions(typeof(T), options);
+ }
+
+ /// <summary>
+ /// Adds the given <see cref="TypeConverterOptions"/> to all registered types.
+ /// </summary>
+ /// <param name="options"></param>
+ public void AddOptions(TypeConverterOptions options)
+ {
+ foreach (var type in typeConverterOptions.Keys)
+ {
+ typeConverterOptions[type] = options;
+ }
+ }
+
+ /// <summary>
+ /// Removes the <see cref="TypeConverterOptions"/> for the given type.
+ /// </summary>
+ /// <param name="type">The type to remove the options for.</param>
+ public void RemoveOptions(Type type)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException(nameof(type));
+ }
+
+ typeConverterOptions.Remove(type);
+ }
+
+ /// <summary>
+ /// Removes the <see cref="TypeConverterOptions"/> for the given type.
+ /// </summary>
+ /// <typeparam name="T">The type to remove the options for.</typeparam>
+ public void RemoveOptions<T>()
+ {
+ RemoveOptions(typeof(T));
+ }
+
+ /// <summary>
+ /// Get the <see cref="TypeConverterOptions"/> for the given <see cref="Type"/>.
+ /// </summary>
+ /// <param name="type">The type the options are for.</param>
+ /// <returns>The options for the given type.</returns>
+ public TypeConverterOptions GetOptions(Type type)
+ {
+ if (type == null)
+ {
+ throw new ArgumentNullException();
+ }
+
+ if (!typeConverterOptions.TryGetValue(type, out var options))
+ {
+ options = new TypeConverterOptions();
+ typeConverterOptions.Add(type, options);
+ }
+
+ return options;
+ }
+
+ /// <summary>
+ /// Get the <see cref="TypeConverterOptions"/> for the given <see cref="Type"/>.
+ /// </summary>
+ /// <typeparam name="T">The type the options are for.</typeparam>
+ /// <returns>The options for the given type.</returns>
+ public TypeConverterOptions GetOptions<T>()
+ {
+ return GetOptions(typeof(T));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt16Converter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt16Converter.cs
new file mode 100644
index 0000000..429c1b7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt16Converter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="ushort"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class UInt16Converter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (ushort.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var us))
+ {
+ return us;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt32Converter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt32Converter.cs
new file mode 100644
index 0000000..52c0e90
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt32Converter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="uint"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class UInt32Converter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (uint.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var ui))
+ {
+ return ui;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt64Converter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt64Converter.cs
new file mode 100644
index 0000000..c74a8e7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UInt64Converter.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="ulong"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class UInt64Converter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the string to an object.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
+ /// <returns>The object created from the string.</returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var numberStyle = memberMapData.TypeConverterOptions.NumberStyles ?? NumberStyles.Integer;
+
+ if (ulong.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var ul))
+ {
+ return ul;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UriConverter.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UriConverter.cs
new file mode 100644
index 0000000..3552180
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/TypeConversion/UriConverter.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.TypeConversion
+{
+ /// <summary>
+ /// Converts a <see cref="Uri"/> to and from a <see cref="string"/>.
+ /// </summary>
+ public class UriConverter : DefaultTypeConverter
+ {
+ /// <summary>
+ /// Converts the <see cref="string"/> to a <see cref="Uri"/>.
+ /// </summary>
+ /// <param name="text">The string to convert to an object.</param>
+ /// <param name="row">The <see cref="IReaderRow" /> for the current record.</param>
+ /// <param name="memberMapData">The <see cref="MemberMapData" /> for the member being created.</param>
+ /// <returns>
+ /// The <see cref="Uri"/> created from the string.
+ /// </returns>
+ public override object? ConvertFromString(string? text, IReaderRow row, MemberMapData memberMapData)
+ {
+ var uriKind = memberMapData.TypeConverterOptions.UriKind ?? default;
+
+ if (Uri.TryCreate(text, uriKind, out var uri))
+ {
+ return uri;
+ }
+
+ return base.ConvertFromString(text, row, memberMapData);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/ValidationException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/ValidationException.cs
new file mode 100644
index 0000000..f7f3267
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/ValidationException.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents a user supplied validation failure.
+ /// </summary>
+ [Serializable]
+ public abstract class ValidationException : CsvHelperException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ public ValidationException(CsvContext context) : base(context) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public ValidationException(CsvContext context, string message) : base(context, message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ValidationException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The reading context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public ValidationException(CsvContext context, string message, Exception innerException) : base(context, message, innerException) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/WriterException.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/WriterException.cs
new file mode 100644
index 0000000..596fa51
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/src/CsvHelper/WriterException.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+
+namespace CsvHelper
+{
+ /// <summary>
+ /// Represents errors that occur while writing a CSV file.
+ /// </summary>
+ [Serializable]
+ public class WriterException : CsvHelperException
+ {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="WriterException"/> class.
+ /// </summary>
+ /// <param name="context">The writing context.</param>
+ public WriterException(CsvContext context) : base(context) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="WriterException"/> class
+ /// with a specified error message.
+ /// </summary>
+ /// <param name="context">The writing context.</param>
+ /// <param name="message">The message that describes the error.</param>
+ public WriterException(CsvContext context, string message) : base(context, message) { }
+
+ /// <summary>
+ /// Initializes a new instance of the <see cref="WriterException"/> class
+ /// with a specified error message and a reference to the inner exception that
+ /// is the cause of this exception.
+ /// </summary>
+ /// <param name="context">The writing context.</param>
+ /// <param name="message">The error message that explains the reason for the exception.</param>
+ /// <param name="innerException">The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic) if no inner exception is specified.</param>
+ public WriterException(CsvContext context, string message, Exception innerException) : base(context, message, innerException) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ArrayHelperTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ArrayHelperTests.cs
new file mode 100644
index 0000000..45c26fe
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ArrayHelperTests.cs
@@ -0,0 +1,79 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests
+{
+
+ public class ArrayHelperTests
+ {
+ [Fact]
+ public void Contains_HasValue_ReturnsTrue()
+ {
+ var array = new char[] { 'a' };
+
+ var contains = ArrayHelper.Contains(array, 'a');
+
+ Assert.True(contains);
+ }
+
+ [Fact]
+ public void Contains_DoesNotHaveValue_ReturnsFalse()
+ {
+ var array = new char[] { 'a' };
+
+ var contains = ArrayHelper.Contains(array, 'b');
+
+ Assert.False(contains);
+ }
+
+ [Fact]
+ public void Trim_FullBuffer_TrimsChars()
+ {
+ var buffer = " a ".ToCharArray();
+ var trimChars = new char[] { ' ' };
+ var start = 0;
+ var length = buffer.Length;
+
+ ArrayHelper.Trim(buffer, ref start, ref length, trimChars);
+
+ Assert.Equal(1, start);
+ Assert.Equal(1, length);
+ }
+
+ [Fact]
+ public void Trim_MidBuffer_TrimsChars()
+ {
+ var buffer = "a b c".ToCharArray();
+ var trimChars = new char[] { ' ' };
+ var start = 1;
+ var length = 3;
+
+ ArrayHelper.Trim(buffer, ref start, ref length, trimChars);
+
+ Assert.Equal(2, start);
+ Assert.Equal(1, length);
+ }
+
+ [Fact]
+ public void Trim_AllWhitespace_EmptyString()
+ {
+ var buffer = new string(' ', 100).ToCharArray();
+ var trimChars = new char[] { ' ' };
+ var start = 0;
+ var length = buffer.Length;
+
+ ArrayHelper.Trim(buffer, ref start, ref length, trimChars);
+
+ Assert.Equal(100, start);
+ Assert.Equal(0, length);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/ReadingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/ReadingTests.cs
new file mode 100644
index 0000000..fdd7af8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/ReadingTests.cs
@@ -0,0 +1,103 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using System.Threading;
+using System;
+using System.Linq;
+
+namespace CsvHelper.Tests.Async
+{
+
+ public class ReadingTests
+ {
+ [Fact]
+ public async Task ReadingTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ null
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = new List<Simple>();
+ await csv.ReadAsync();
+ csv.ReadHeader();
+ while (await csv.ReadAsync())
+ {
+ records.Add(csv.GetRecord<Simple>());
+ }
+
+ Assert.Equal(2, records.Count);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+
+ record = records[1];
+ Assert.Equal(2, record.Id);
+ Assert.Equal("two", record.Name);
+ }
+ }
+
+#if NETCOREAPP
+ [Fact]
+ public async Task GetRecordsTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ null
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecordsAsync<Simple>().GetAsyncEnumerator();
+ await records.MoveNextAsync();
+
+ Assert.Equal(1, records.Current.Id);
+ Assert.Equal("one", records.Current.Name);
+
+ await records.MoveNextAsync();
+
+ Assert.Equal(2, records.Current.Id);
+ Assert.Equal("two", records.Current.Name);
+ }
+ }
+
+ [Fact]
+ public async Task GetRecordsTestCanceled()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ null
+ };
+ using (var source = new CancellationTokenSource())
+ using (var csv = new CsvReader(parser))
+ {
+ source.Cancel();
+ var records = csv.GetRecordsAsync<Simple>(source.Token).GetAsyncEnumerator();
+ await Assert.ThrowsAsync<OperationCanceledException>(async () => await records.MoveNextAsync());
+ }
+ }
+#endif
+
+ private class Simple
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/WritingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/WritingTests.cs
new file mode 100644
index 0000000..95fe623
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Async/WritingTests.cs
@@ -0,0 +1,119 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Async
+{
+
+ public class WritingTests
+ {
+ [Fact]
+ public async Task WritingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<Simple>
+ {
+ new Simple { Id = 1, Name = "one" },
+ new Simple { Id = 2, Name = "two" },
+ };
+ csv.WriteHeader<Simple>();
+ await csv.NextRecordAsync();
+ foreach (var record in records)
+ {
+ csv.WriteRecord(record);
+ await csv.NextRecordAsync();
+ }
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+ expected.AppendLine("2,two");
+
+ Assert.Equal(expected.ToString(), reader.ReadToEnd());
+ }
+ }
+
+ [Fact]
+ public async Task WriteRecordsTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<Simple>
+ {
+ new Simple { Id = 1, Name = "one" },
+ new Simple { Id = 2, Name = "two" },
+ };
+ await csv.WriteRecordsAsync(records);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+ expected.AppendLine("2,two");
+
+ Assert.Equal(expected.ToString(), reader.ReadToEnd());
+ }
+ }
+
+ [Fact]
+ public async Task WriteRecordsTestCanceled()
+ {
+ using (var source = new CancellationTokenSource())
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<Simple>
+ {
+ new Simple { Id = 1, Name = "one" },
+ new Simple { Id = 2, Name = "two" },
+ new Simple { Id = 3, Name = "three" },
+ };
+ source.Cancel();
+
+ try
+ {
+ await csv.WriteRecordsAsync(records, source.Token);
+ }
+ catch (WriterException ex)
+ {
+ if (ex.InnerException is OperationCanceledException || ex.InnerException is TaskCanceledException)
+ {
+ return;
+ }
+ }
+
+ throw new XUnitException("Did not throw exception");
+ }
+ }
+
+ private class Simple
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/AutoMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/AutoMappingTests.cs
new file mode 100644
index 0000000..6e9cd89
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/AutoMappingTests.cs
@@ -0,0 +1,394 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+ public class AutoMappingTests
+ {
+ public AutoMappingTests()
+ {
+ Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
+ }
+
+ [Fact]
+ public void ReaderSimpleTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var list = csv.GetRecords<Simple>().ToList();
+
+ Assert.NotNull(list);
+ Assert.Equal(2, list.Count);
+ var row = list[0];
+ Assert.Equal(1, row.Id);
+ Assert.Equal("one", row.Name);
+ row = list[1];
+ Assert.Equal(2, row.Id);
+ Assert.Equal("two", row.Name);
+ }
+ }
+
+ [Fact]
+ public void ReaderFloatingCultureDeTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.GetCultureInfo("de-DE")))
+ {
+ writer.WriteLine("Single;Double;Decimal");
+ writer.WriteLine("1,1;+0000002,20;3,30000");
+ writer.WriteLine("-0,1;-0,2;-,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ var list = csv.GetRecords<Numbers>().ToList();
+
+ Assert.NotNull(list);
+ Assert.Equal(2, list.Count);
+ var row = list[0];
+ Assert.Equal(1.1f, row.Single, 4);
+ Assert.Equal(2.2d, row.Double, 4);
+ Assert.Equal(3.3m, row.Decimal);
+
+ row = list[1];
+ Assert.Equal(-0.1f, row.Single, 4);
+ Assert.Equal(-0.2d, row.Double, 4);
+ Assert.Equal(-0.3m, row.Decimal);
+ }
+ }
+
+ [Fact]
+ public void ReaderReferenceTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("AId,BId");
+ writer.WriteLine("1,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ var list = csv.GetRecords<A>().ToList();
+
+ Assert.NotNull(list);
+ Assert.Single(list);
+ var row = list[0];
+ Assert.Equal(1, row.AId);
+ Assert.NotNull(row.B);
+ Assert.Equal(2, row.B.BId);
+ }
+ }
+
+ [Fact]
+ public void ReaderReferenceHasNoDefaultConstructorTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => args.Header.ToLower(),
+ };
+ var s = new StringBuilder();
+ s.AppendLine("Id,Name");
+ s.AppendLine("1,one");
+ using (var csv = new CsvReader(new StringReader(s.ToString()), config))
+ {
+ var records = csv.GetRecords<SimpleReferenceHasNoDefaultConstructor>().ToList();
+ var row = records[0];
+ Assert.Equal(1, row.Id);
+ Assert.Equal("one", row.Ref.Name);
+ }
+ }
+
+ [Fact]
+ public void ReaderHasNoDefaultConstructorReferenceHasNoDefaultConstructorTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => args.Header.ToLower(),
+ };
+ var s = new StringBuilder();
+ s.AppendLine("Id,Name");
+ s.AppendLine("1,one");
+ using (var csv = new CsvReader(new StringReader(s.ToString()), config))
+ {
+ var records = csv.GetRecords<SimpleHasNoDefaultConstructorReferenceHasNoDefaultConstructor>().ToList();
+ var row = records[0];
+ Assert.Equal(1, row.Id);
+ Assert.Equal("one", row.Ref.Name);
+ }
+ }
+
+ [Fact]
+ public void WriterSimpleTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Simple>
+ {
+ new Simple { Id = 1, Name = "one" }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ [Fact]
+ public void WriterReferenceTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<A>
+ {
+ new A
+ {
+ AId = 1,
+ B = new B
+ {
+ BId = 2
+ }
+ }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("AId,BId");
+ expected.AppendLine("1,2");
+
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ [Fact]
+ public void WriterReferenceHasNoDefaultConstructorTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<SimpleReferenceHasNoDefaultConstructor>
+ {
+ new SimpleReferenceHasNoDefaultConstructor
+ {
+ Id = 1,
+ Ref = new NoDefaultConstructor( "one" )
+ }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriterHasNoDefaultConstructorReferenceHasNoDefaultConstructorTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<SimpleHasNoDefaultConstructorReferenceHasNoDefaultConstructor>
+ {
+ new SimpleHasNoDefaultConstructorReferenceHasNoDefaultConstructor(1, new NoDefaultConstructor("one"))
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void AutoMapEnumerableTest()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+
+ Assert.Throws<ConfigurationException>(() => context.AutoMap(typeof(List<string>)));
+ }
+
+ [Fact]
+ public void AutoMapWithExistingMapTest()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var existingMap = new SimpleMap();
+ context.Maps.Add(existingMap);
+ var data = new
+ {
+ Simple = new Simple
+ {
+ Id = 1,
+ Name = "one"
+ }
+ };
+ var map = context.AutoMap(data.GetType());
+
+ Assert.NotNull(map);
+ Assert.Empty(map.MemberMaps);
+ Assert.Single(map.ReferenceMaps);
+
+ // Since Simple is a reference on the anonymous object, the type won't
+ // be re-used. Types which are created from automapping aren't added
+ // to the list of registered maps either.
+ Assert.IsNotType<SimpleMap>(map.ReferenceMaps[0].Data.Mapping);
+ }
+
+ [Fact]
+ public void AutoMapWithNestedHeaders()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ReferenceHeaderPrefix = args => $"{args.MemberName}."
+ };
+ var context = new CsvContext(config);
+ var map = context.AutoMap<Nested>();
+ Assert.Equal("Simple1.Id", map.ReferenceMaps[0].Data.Mapping.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("Simple1.Name", map.ReferenceMaps[0].Data.Mapping.MemberMaps[1].Data.Names[0]);
+ Assert.Equal("Simple2.Id", map.ReferenceMaps[1].Data.Mapping.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("Simple2.Name", map.ReferenceMaps[1].Data.Mapping.MemberMaps[1].Data.Names[0]);
+ }
+
+ [Fact]
+ public void AutoMapWithDefaultConstructor()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ ClassMap map = context.AutoMap<SimpleReferenceHasNoDefaultConstructor>();
+
+ Assert.Equal("Id", map.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("Name", map.ReferenceMaps[0].Data.Mapping.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("name", map.ReferenceMaps[0].Data.Mapping.ParameterMaps[0].Data.Names[0]);
+ }
+
+ [Fact]
+ public void AutoMapWithNoDefaultConstructor()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<SimpleHasNoDefaultConstructorReferenceHasNoDefaultConstructor>();
+
+ Assert.Equal("Id", map.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("id", map.ParameterMaps[0].Data.Names[0]);
+ Assert.Equal("name", map.ParameterMaps[1].ConstructorTypeMap.ParameterMaps[0].Data.Names[0]);
+ Assert.Equal("Name", map.ReferenceMaps[0].Data.Mapping.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("name", map.ReferenceMaps[0].Data.Mapping.ParameterMaps[0].Data.Names[0]);
+ }
+
+ private class Nested
+ {
+ public Simple Simple1 { get; set; }
+
+ public Simple Simple2 { get; set; }
+ }
+
+ private class Simple
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class SimpleMap : ClassMap<Simple>
+ {
+ public SimpleMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+
+ private class Numbers
+ {
+ public float Single { get; set; }
+ public double Double { get; set; }
+ public decimal Decimal { get; set; }
+ }
+
+ private class A
+ {
+ public int AId { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public int BId { get; set; }
+ }
+
+ private class SimpleReferenceHasNoDefaultConstructor
+ {
+ public int Id { get; set; }
+
+ public NoDefaultConstructor Ref { get; set; }
+ }
+
+ private class SimpleHasNoDefaultConstructorReferenceHasNoDefaultConstructor
+ {
+ public int Id { get; set; }
+
+ public NoDefaultConstructor Ref { get; set; }
+
+ public SimpleHasNoDefaultConstructorReferenceHasNoDefaultConstructor(int id, NoDefaultConstructor ref_)
+ {
+ Id = id;
+ Ref = ref_;
+ }
+ }
+
+ private class NoDefaultConstructor
+ {
+ public string Name { get; set; }
+
+ public NoDefaultConstructor(string name)
+ {
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/BaseClassTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/BaseClassTests.cs
new file mode 100644
index 0000000..52118f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/BaseClassTests.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+
+ public class BaseClassTests
+ {
+ [Fact]
+ public void EnsureChildNotWrittenWhenListIsParent()
+ {
+ var record = new Child
+ {
+ ChildProp = "child",
+ ParentProp = "parent"
+ };
+ Parent[] records = { record };
+
+ using( var stream = new MemoryStream() )
+ using( var writer = new StreamWriter( stream ) )
+ using( var reader = new StreamReader( stream ) )
+ using( var csv = new CsvWriter(writer, CultureInfo.InvariantCulture) )
+ {
+ csv.WriteRecords( records );
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine( "ParentProp" );
+ expected.AppendLine( "parent" );
+
+ Assert.Equal( expected.ToString(), reader.ReadToEnd() );
+ }
+ }
+
+ private class Parent
+ {
+ public string ParentProp { get; set; }
+ }
+
+ private class Child : Parent
+ {
+ public string ChildProp { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/CircularReferenceTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/CircularReferenceTests.cs
new file mode 100644
index 0000000..0ae94e7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/CircularReferenceTests.cs
@@ -0,0 +1,98 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System.Globalization;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+
+ public class CircularReferenceTests
+ {
+ [Fact]
+ public void SelfCircularDependencyTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<SelfCircularA>();
+ }
+
+ [Fact]
+ public void CircularDependencyTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<ACircular>();
+ Assert.NotNull(map);
+ Assert.Single(map.MemberMaps);
+ Assert.Single(map.ReferenceMaps);
+ Assert.Single(map.ReferenceMaps[0].Data.Mapping.MemberMaps);
+ Assert.Empty(map.ReferenceMaps[0].Data.Mapping.ReferenceMaps);
+ }
+
+ [Fact]
+ public void CircularDependencyWithMultiplePropertiesTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<A>();
+ Assert.Single(map.MemberMaps);
+ Assert.Equal(3, map.ReferenceMaps.Count);
+ }
+
+ private class SelfCircularA
+ {
+ public SelfCircularB Circular { get; set; }
+ }
+
+ private class SelfCircularB
+ {
+ public SelfCircularB Self { get; set; }
+
+ public SelfCircularC C { get; set; }
+ }
+
+ private class SelfCircularC
+ {
+ public string Id { get; set; }
+ }
+
+ private class ACircular
+ {
+ public string Id { get; set; }
+
+ public BCircular B { get; set; }
+ }
+
+ private class BCircular
+ {
+ public string Id { get; set; }
+
+ public ACircular A { get; set; }
+ }
+
+ private class A
+ {
+ public string Id { get; set; }
+
+ public B B1 { get; set; }
+
+ public B B2 { get; set; }
+
+ public B B3 { get; set; }
+ }
+
+ private class B
+ {
+ public string Id { get; set; }
+
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string Id { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/ContextTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/ContextTests.cs
new file mode 100644
index 0000000..2e41972
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/ContextTests.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+
+ public class ContextTests
+ {
+ [Fact]
+ public void AutoMap_UsesContext()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("Bar");
+
+ var map = context.AutoMap<Foo>();
+
+ Assert.Contains("Bar", map.MemberMaps.Find<Foo>(x => x.Name).Data.TypeConverterOptions.NullValues);
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/IgnoreReferencesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/IgnoreReferencesTests.cs
new file mode 100644
index 0000000..bc9e8b2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/IgnoreReferencesTests.cs
@@ -0,0 +1,62 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+
+ public class IgnoreReferencesTests
+ {
+ [Fact]
+ public void IgnoreReferncesWritingTest()
+ {
+ var records = new List<Foo>
+ {
+ new Foo
+ {
+ Id = 1,
+ Bar = new Bar { Name = "one" }
+ }
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreReferences = true,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+ writer.Flush();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public Bar Bar { get; set; }
+ }
+
+ private class Bar
+ {
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/MappingTypeOfTypeTest.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/MappingTypeOfTypeTest.cs
new file mode 100644
index 0000000..f244505
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/MappingTypeOfTypeTest.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+
+ public class MappingTypeOfTypeTest
+ {
+ [Fact]
+ public void ClassWithPropertyOfTypeTypeShouldNotCauseStackOverflowExceptionTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<EquipmentDataPoint>().ToList();
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ }
+ }
+
+ public class EquipmentDataPoint
+ {
+ public int Id { get; set; }
+
+ [CsvHelper.Configuration.Attributes.Ignore]
+ public Type ValueType { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/StructTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/StructTests.cs
new file mode 100644
index 0000000..8ad3da9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/AutoMapping/StructTests.cs
@@ -0,0 +1,76 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.AutoMapping
+{
+
+ public class StructTests
+ {
+ [Fact]
+ public void StructTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<B>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void StructPropertyTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ReferenceHeaderPrefix = args => $"{args.MemberName}.",
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Simple1.Id,Simple1.Name,Simple2.Id,Simple2.Name,Title");
+ writer.WriteLine("1,one,2,two,Works!");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Equal(1, records[0].Simple1.Id);
+ Assert.Equal("one", records[0].Simple1.Name);
+ Assert.Equal(2, records[0].Simple2.Id);
+ Assert.Equal("two", records[0].Simple2.Name);
+ Assert.Equal("Works!", records[0].Title);
+ }
+ }
+
+ public class A
+ {
+ public B Simple1 { get; set; }
+ public string Title { get; set; }
+ public B Simple2 { get; set; }
+ }
+
+ public struct B
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ClassMapOrderingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ClassMapOrderingTests.cs
new file mode 100644
index 0000000..c0c4382
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ClassMapOrderingTests.cs
@@ -0,0 +1,110 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class ClassMapOrderingTests
+ {
+ [Fact]
+ public void OrderingTest()
+ {
+ var list = new List<ContainerClass>
+ {
+ new ContainerClass
+ {
+ Contents = new ThirdClass
+ {
+ Third = 3,
+ Second = new SecondClass
+ {
+ Second = 2,
+ },
+ First = new FirstClass
+ {
+ First = 1,
+ },
+ }
+ },
+ };
+
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<ContainerClassMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.Equal("First,Second,Third", reader.ReadLine());
+ }
+ }
+
+ private class ContainerClass
+ {
+ public ThirdClass Contents { get; set; }
+ }
+
+ private class ThirdClass
+ {
+ public int Third { get; set; }
+
+ public SecondClass Second { get; set; }
+
+ public FirstClass First { get; set; }
+ }
+
+ private sealed class ContainerClassMap : ClassMap<ContainerClass>
+ {
+ public ContainerClassMap()
+ {
+ References<ThirdClassMap>(m => m.Contents);
+ }
+ }
+
+ private sealed class ThirdClassMap : ClassMap<ThirdClass>
+ {
+ public ThirdClassMap()
+ {
+ References<FirstClassMap>(m => m.First);
+ References<SecondClassMap>(m => m.Second);
+ Map(m => m.Third);
+ }
+ }
+
+ private class SecondClass
+ {
+ public int Second { get; set; }
+ }
+
+ private sealed class SecondClassMap : ClassMap<SecondClass>
+ {
+ public SecondClassMap()
+ {
+ Map(m => m.Second);
+ }
+ }
+
+ private class FirstClass
+ {
+ public int First { get; set; }
+ }
+
+ private sealed class FirstClassMap : ClassMap<FirstClass>
+ {
+ public FirstClassMap()
+ {
+ Map(m => m.First);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs
new file mode 100644
index 0000000..f1921ee
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/ClassMapBuilderTests.cs
@@ -0,0 +1,335 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq;
+using System.Linq.Expressions;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.Configuration
+{
+
+ public class ClassMapBuilderTests
+ {
+ private static readonly Factory csvFactory = new Factory();
+ private static ConvertFromString<FakeInnerClass> ConvertExpression => args => new FakeInnerClass { E = args.Row.GetField(4) };
+ private static readonly ClassMap<FakeClass> map = csvFactory.CreateClassMapBuilder<FakeClass>()
+ /*
+ .Map( m => m.A ).Constant( "a" )
+ .Map( m => m.A ).ConvertUsing( row => row.GetField( 0 ) )
+ .Map( m => m.A ).Default( "a" )
+ .Map( m => m.A ).Index( 0 )
+ .Map( m => m.A ).Index( 0 ).Validate( field => true )
+ .Map( m => m.A ).Index( 0 ).Default( "a" )
+ .Map( m => m.A ).Index( 0 ).Default( "a" ).Validate( field => true )
+ .Map( m => m.A ).Index( 0 ).Name( "a" )
+ .Map( m => m.A ).Index( 0 ).Name( "a" ).Validate( field => true )
+ .Map( m => m.A ).Index( 0 ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).Index( 0 ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).Name( "a" )
+ .Map( m => m.A ).Name( "a" ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).Default( "a" )
+ .Map( m => m.A ).Name( "a" ).Default( "a" ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).Default( "a" )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).Default( "a" ).Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).Name( "a" ).NameIndex( 0 ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).Name( "a" ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).Name( "a" ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).TypeConverter<StringConverter>()
+ .Map( m => m.A ).TypeConverter<StringConverter>().Validate( field => true )
+ .Map( m => m.A ).TypeConverter<StringConverter>().Default( "a" )
+ .Map( m => m.A ).TypeConverter<StringConverter>().Default( "a" ).Validate( field => true )
+ */
+
+ .Map(m => m.A).Name("A1").NameIndex(2).Default("WEW")
+ .Map(m => m.B).Name("B2").Default(2)
+ .Map(m => m.C).Index(2).TypeConverter(new DateTimeConverter())
+ .Map(m => m.D).Name("D4").TypeConverter<DoubleConverter>().Default(4d)
+ .Map(m => m.E).ConvertUsing(ConvertExpression)
+ .Map(m => m.Optional).Optional()
+ .Build();
+
+ [Fact]
+ public void ClassMapBuilderAddsPropertyMapsCorrectly()
+ {
+ Assert.Equal(6, map.MemberMaps.Count);//IMappable
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsOptionalCorrectly()
+ {
+ Assert.True(map.MemberMaps[5].Data.IsOptional);
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsTypeConvertersCorrectly()
+ {
+ Assert.Equal(typeof(DateTimeConverter), map.MemberMaps[2].Data.TypeConverter.GetType());//2
+ Assert.Equal(typeof(DoubleConverter), map.MemberMaps[3].Data.TypeConverter.GetType());//2
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsIndexesCorrectly()
+ {
+ Assert.Equal(2, map.MemberMaps[2].Data.Index); //3
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsNamesCorrectly()
+ {
+ Assert.Equal("D4", map.MemberMaps[3].Data.Names.Single()); //4
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsNameIndexesCorrectly()
+ {
+ Assert.Equal(2, map.MemberMaps[0].Data.NameIndex); //5
+ }
+
+ //this one is kind of hacky, but i'm not sure how else to test it more robustly since the function gets converted to an expression inside the CsvClassMap
+ [Fact]
+ public void ClassMapBuilderAddsConvertUsingFunctionCorrectly()
+ {
+ var fakeRow = new BuilderRowFake();
+ var args = new ConvertFromStringArgs(fakeRow);
+ Assert.Equal(ConvertExpression(args).E, (map.MemberMaps[4].Data.ReadingConvertExpression as Expression<ConvertFromString<FakeInnerClass>>).Compile()(args).E); //6
+ }
+
+ [Fact]
+ public void ClassMapBuilderAddsDefaultsCorrectly()
+ {
+ Assert.Equal("WEW", map.MemberMaps[0].Data.Default);//7
+ Assert.Equal(4d, map.MemberMaps[3].Data.Default);//7
+ }
+
+ private class BuilderRowFake : IReaderRow
+ {
+ public IReaderConfiguration Configuration { get; }
+ public string[] FieldHeaders { get; }
+ public string[] CurrentRecord { get; }
+ public int Row { get; }
+
+ public CsvContext Context => throw new NotImplementedException();
+
+ public int CurrentIndex => throw new NotImplementedException();
+
+ public string[] HeaderRecord => throw new NotImplementedException();
+
+ public IParser Parser => throw new NotImplementedException();
+
+ public int ColumnCount => throw new NotImplementedException();
+
+ string IReaderRow.this[int index] => throw new NotImplementedException();
+
+ string IReaderRow.this[string name] => throw new NotImplementedException();
+
+ string IReaderRow.this[string name, int index] => throw new NotImplementedException();
+
+ public string GetField(int index)
+ {
+ return index.ToString();
+ }
+
+ public string GetField(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetField(string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(int index) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(string name) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(string name, int index) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, int index, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, int index, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, int index, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, int index, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(int index, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, int index, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(int index, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, int index, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(int index, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(string name, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(string name, int index, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool IsRecordEmpty()
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetRecord<T>()
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetRecord(Type type)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetRecord<T>(T anonymousTypeDefinition)
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ private class FakeClass
+ {
+ public string A { get; set; }
+ public int B { get; set; }
+ public DateTime C { get; set; }
+ public double D { get; set; }
+ public FakeInnerClass E { get; set; }
+ public string Optional { get; set; }
+ }
+
+ private class FakeInnerClass
+ {
+ public string E { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/CsvClassMapCollectionTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/CsvClassMapCollectionTests.cs
new file mode 100644
index 0000000..d93b22c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Configuration/CsvClassMapCollectionTests.cs
@@ -0,0 +1,70 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.Collections;
+using System;
+
+namespace CsvHelper.Tests.Configuration
+{
+
+ public class CsvClassMapCollectionTests
+ {
+ [Fact]
+ public void GetChildMapWhenParentIsMappedBeforeIt()
+ {
+ var parentMap = new ParentMap();
+ var childMap = new ChildMap();
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var c = new ClassMapCollection(context);
+ c.Add(parentMap);
+ c.Add(childMap);
+
+ var map = c[typeof(Child)];
+ Assert.Equal(childMap, map);
+ }
+
+ [Fact]
+ public void Add_Enumerable_HasConvertSet_DoesNotAssignTypeConverter()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var collection = new ClassMapCollection(context);
+
+ var map = new EnumerablePropertyClassMap();
+ collection.Add(map);
+ Assert.Null(map.MemberMaps.Find<EnumerablePropertyClass>(m => m.Enumerable).Data.TypeConverter);
+ }
+
+ private class Parent { }
+
+ private class Child : Parent { }
+
+ private sealed class ParentMap : ClassMap<Parent> { }
+
+ private sealed class ChildMap : ClassMap<Child> { }
+
+ private class EnumerablePropertyClass
+ {
+ public Enumerable Enumerable { get; set; }
+ }
+
+ private class EnumerablePropertyClassMap : ClassMap<EnumerablePropertyClass>
+ {
+ public EnumerablePropertyClassMap()
+ {
+ Map(m => m.Enumerable).Convert(_ => new Enumerable());
+ }
+ }
+
+ private class Enumerable : IEnumerable
+ {
+ public IEnumerator GetEnumerator()
+ {
+ throw new NotSupportedException();
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvClassMappingAutoMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvClassMappingAutoMapTests.cs
new file mode 100644
index 0000000..610a288
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvClassMappingAutoMapTests.cs
@@ -0,0 +1,61 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using CsvHelper.Configuration;
+using System.Globalization;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvClassMappingAutoMapTests
+ {
+ [Fact]
+ public void Test()
+ {
+ var aMap = new AMap();
+
+ Assert.Equal(3, aMap.MemberMaps.Count);
+ Assert.Equal(0, aMap.MemberMaps[0].Data.Index);
+ Assert.Equal(1, aMap.MemberMaps[1].Data.Index);
+ Assert.Equal(2, aMap.MemberMaps[2].Data.Index);
+ Assert.True(aMap.MemberMaps[2].Data.Ignore);
+
+ Assert.Single(aMap.ReferenceMaps);
+ }
+
+ private class A
+ {
+ public int One { get; set; }
+
+ public int Two { get; set; }
+
+ public int Three { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public int Four { get; set; }
+
+ public int Five { get; set; }
+
+ public int Six { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m => m.Three).Ignore();
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvConfigurationTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvConfigurationTests.cs
new file mode 100644
index 0000000..26294fa
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvConfigurationTests.cs
@@ -0,0 +1,158 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvConfigurationTests
+ {
+ [Fact]
+ public void EnsureReaderAndParserConfigIsAreSameTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ {
+ var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
+
+ Assert.Same(csvReader.Configuration, csvReader.Parser.Configuration);
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var parser = new CsvParser(reader, config);
+ csvReader = new CsvReader(parser);
+
+ Assert.Same(csvReader.Configuration, csvReader.Parser.Configuration);
+ }
+ }
+
+ [Fact]
+ public void AddingMappingsWithGenericMethod1Test()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ context.RegisterClassMap<TestClassMappings>();
+
+ Assert.Equal(2, context.Maps[typeof(TestClass)].MemberMaps.Count);
+ }
+
+ [Fact]
+ public void AddingMappingsWithGenericMethod2Test()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ context.RegisterClassMap<TestClassMappings>();
+
+ Assert.Equal(2, context.Maps[typeof(TestClass)].MemberMaps.Count);
+ }
+
+ [Fact]
+ public void AddingMappingsWithNonGenericMethodTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ context.RegisterClassMap(typeof(TestClassMappings));
+
+ Assert.Equal(2, context.Maps[typeof(TestClass)].MemberMaps.Count);
+ }
+
+ [Fact]
+ public void AddingMappingsWithInstanceMethodTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ context.RegisterClassMap(new TestClassMappings());
+
+ Assert.Equal(2, context.Maps[typeof(TestClass)].MemberMaps.Count);
+ }
+
+ [Fact]
+ public void RegisterClassMapGenericTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ context.RegisterClassMap<TestClassMappings>();
+ Assert.NotNull(context.Maps[typeof(TestClass)]);
+ }
+
+ [Fact]
+ public void RegisterClassMapNonGenericTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ context.RegisterClassMap(typeof(TestClassMappings));
+ Assert.NotNull(context.Maps[typeof(TestClass)]);
+ }
+
+ [Fact]
+ public void RegisterClassInstanceTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ context.RegisterClassMap(new TestClassMappings());
+ Assert.NotNull(context.Maps[typeof(TestClass)]);
+ }
+
+ [Fact]
+ public void UnregisterClassMapGenericTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ context.RegisterClassMap<TestClassMappings>();
+ Assert.NotNull(context.Maps[typeof(TestClass)]);
+
+ context.UnregisterClassMap<TestClassMappings>();
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ }
+
+ [Fact]
+ public void UnregisterClassNonMapGenericTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ context.RegisterClassMap(typeof(TestClassMappings));
+ Assert.NotNull(context.Maps[typeof(TestClass)]);
+
+ context.UnregisterClassMap(typeof(TestClassMappings));
+ Assert.Null(context.Maps[typeof(TestClass)]);
+ }
+
+ [Fact]
+ public void AddingMappingsWithNonGenericMethodThrowsWhenNotACsvClassMap()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+
+ Assert.Throws<ArgumentException>(() => context.RegisterClassMap(typeof(TestClass)));
+ }
+
+ private class TestClass
+ {
+ public string StringColumn { get; set; }
+ public int IntColumn { get; set; }
+ }
+
+ private class TestClassMappings : ClassMap<TestClass>
+ {
+ public TestClassMappings()
+ {
+ Map(c => c.StringColumn);
+ Map(c => c.IntColumn);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.csproj b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.csproj
new file mode 100644
index 0000000..345fbd3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.csproj
@@ -0,0 +1,63 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <!--<TargetFrameworks>net6.0;net5.0;netcoreapp3.1;netcoreapp2.1;net47;net45</TargetFrameworks>-->
+ <TargetFrameworks>net6.0</TargetFrameworks>
+ <LangVersion>preview</LangVersion>
+ <SignAssembly>True</SignAssembly>
+ <AssemblyOriginatorKeyFile>CsvHelper.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <None Remove="*.ncrunchproject" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Castle.Core" Version="4.4.1" />
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.10.0" />
+ <PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
+ <PackageReference Include="System.Linq.Async" Version="5.0.0" />
+ <PackageReference Include="xunit" Version="2.4.1" />
+ <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ <PrivateAssets>all</PrivateAssets>
+ </PackageReference>
+ <PackageReference Include="coverlet.collector" Version="3.0.3">
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ <PrivateAssets>all</PrivateAssets>
+ </PackageReference>
+ </ItemGroup>
+
+ <!-- .NET 4.5 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'net45'">
+ <PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
+ <PackageReference Include="System.Buffers" Version="4.5.1" />
+ <PackageReference Include="System.Memory" Version="4.5.4" />
+ <PackageReference Include="System.ValueTuple" Version="4.4.0" />
+ <PackageReference Remove="System.Linq.Async" Version="*" />
+ </ItemGroup>
+
+ <!-- .NET 4.7 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'net47'">
+ <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" />
+ <PackageReference Include="Microsoft.Bcl.HashCode" Version="1.1.0" />
+ <PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
+ <PackageReference Include="System.Buffers" Version="4.5.1" />
+ <PackageReference Include="System.Memory" Version="4.5.4" />
+ <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
+ </ItemGroup>
+
+ <!-- .NET Standard 2.0 -->
+ <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
+ <PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" />
+ <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.5.4" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\..\src\CsvHelper\CsvHelper.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Content Include="xunit.runner.json" CopyToOutputDirectory="PreserveNewest" />
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net452.v3.ncrunchproject b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net452.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net452.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net47.v3.ncrunchproject b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net47.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net47.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net50.v3.ncrunchproject b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net50.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.net50.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp2.1.v3.ncrunchproject b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp2.1.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp2.1.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp3.1.v3.ncrunchproject b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp3.1.v3.ncrunchproject
new file mode 100644
index 0000000..9d694dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.netcoreapp3.1.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>True</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.v3.ncrunchproject b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.v3.ncrunchproject
new file mode 100644
index 0000000..ba4c70e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.Tests.v3.ncrunchproject
@@ -0,0 +1,5 @@
+<ProjectConfiguration>
+ <Settings>
+ <PreventSigningOfAssembly>False</PreventSigningOfAssembly>
+ </Settings>
+</ProjectConfiguration> \ No newline at end of file
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.snk b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.snk
new file mode 100644
index 0000000..8c9bfaf
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvHelper.snk
Binary files differ
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserConstructorTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserConstructorTests.cs
new file mode 100644
index 0000000..867e551
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserConstructorTests.cs
@@ -0,0 +1,28 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvParserConstructorTests
+ {
+ [Fact]
+ public void EnsureInternalsAreSetupWhenPassingReaderAndConfigTest()
+ {
+ using( var stream = new MemoryStream() )
+ using( var reader = new StreamReader( stream ) )
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ using( var parser = new CsvParser( reader, config ) )
+ {
+ Assert.Same( config, parser.Configuration );
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserDelimiterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserDelimiterTests.cs
new file mode 100644
index 0000000..3ae27ba
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserDelimiterTests.cs
@@ -0,0 +1,344 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvParserDelimiterTests
+ {
+ [Fact]
+ public void DifferentDelimiterTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "\t",
+ WhiteSpaceChars = new[] { ' ' },
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1\t2\t3");
+ writer.WriteLine("4\t5\t6");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("3", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("6", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void MultipleCharDelimiter2Test()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "``",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1``2``3");
+ writer.WriteLine("4``5``6");
+ writer.Flush();
+ stream.Position = 0;
+
+ var hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("3", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("6", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.False(hasRecords);
+ }
+ }
+
+ [Fact]
+ public void MultipleCharDelimiter3Test()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`\t`",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1`\t`2`\t`3");
+ writer.WriteLine("4`\t`5`\t`6");
+ writer.Flush();
+ stream.Position = 0;
+
+ var hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("3", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("6", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.False(hasRecords);
+ }
+ }
+
+ [Fact]
+ public void AllFieldsEmptyTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";;",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine(";;;;");
+ writer.WriteLine(";;;;");
+ writer.Flush();
+ stream.Position = 0;
+
+ var hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.False(hasRecords);
+ }
+ }
+
+ [Fact]
+ public void AllFieldsEmptyNoEolOnLastLineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";;",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write(";;;;\r\n");
+ writer.Write(";;;;");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void EmptyLastFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";;",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1;;2;;");
+ writer.WriteLine("4;;5;;");
+ writer.Flush();
+ stream.Position = 0;
+
+ var hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ hasRecords = parser.Read();
+ Assert.False(hasRecords);
+ }
+ }
+
+ [Fact]
+ public void EmptyLastFieldNoEolOnLastLineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";;",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1;;2;;\r\n");
+ writer.Write("4;;5;;");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void DifferentDelimiter2ByteCountTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true,
+ Delimiter = ";;",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1;;2\r\n");
+ writer.Write("4;;5\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(6, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(12, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void DifferentDelimiter3ByteCountTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true,
+ Delimiter = ";;;",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1;;;2\r\n");
+ writer.Write("4;;;5\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(7, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(14, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void MultipleCharDelimiterWithBufferEndingInMiddleOfDelimiterTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "|~|",
+ BufferSize = 16,
+ };
+
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("12340000004321|~|2");
+ writer.Flush();
+ stream.Position = 0;
+
+ var hasRecords = parser.Read();
+ Assert.True(hasRecords);
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("12340000004321", parser[0]);
+ Assert.Equal("2", parser[1]);
+
+ hasRecords = parser.Read();
+ Assert.False(hasRecords);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserRawRecordTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserRawRecordTests.cs
new file mode 100644
index 0000000..ec127da
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserRawRecordTests.cs
@@ -0,0 +1,143 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvParserRawRecordTests
+ {
+ [Fact]
+ public void RawRecordCrLfTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("3,4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("1,2\r\n", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal("3,4\r\n", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal(string.Empty, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void RawRecordCrTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\r");
+ writer.Write("3,4\r");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("1,2\r", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal("3,4\r", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal(string.Empty, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void RawRecordLfTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\n");
+ writer.Write("3,4\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("1,2\n", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal("3,4\n", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal(string.Empty, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void RawRecordCr2DelimiterTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";;",
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1;;2\r");
+ writer.Write("3;;4\r");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("1;;2\r", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal("3;;4\r", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal(string.Empty, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void TinyBufferTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 1,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("3,4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("1,2\r\n", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal("3,4\r\n", parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal(string.Empty, parser.RawRecord.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserTests.cs
new file mode 100644
index 0000000..78beeaf
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvParserTests.cs
@@ -0,0 +1,1370 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvParserTests
+ {
+ [Fact]
+ public void SimpleParseTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("3,4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.True(parser.Read());
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ParseNewRecordTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("four,five,six");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ var count = 0;
+ while (parser.Read())
+ {
+ count++;
+ }
+
+ Assert.Equal(2, count);
+ }
+
+ [Fact]
+ public void ParseEmptyRowsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = true,
+ };
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("four,five,six");
+ writer.WriteLine(",,");
+ writer.WriteLine("");
+ writer.WriteLine("");
+ writer.WriteLine("seven,eight,nine");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, config);
+
+ var records = new List<string[]>();
+ while (parser.Read())
+ {
+ records.Add(parser.Record);
+ }
+
+ Assert.Equal(4, records.Count);
+ }
+
+ [Fact]
+ public void ParseTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("four,five,six");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ Assert.True(parser.Read());
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("four", parser[0]);
+ Assert.Equal("five", parser[1]);
+ Assert.Equal("six", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+
+ [Fact]
+ public void ParseFieldQuotesTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,\"two\",three");
+ writer.WriteLine("four,\"\"\"five\"\"\",six");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ Assert.True(parser.Read());
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("four", parser[0]);
+ Assert.Equal("\"five\"", parser[1]);
+ Assert.Equal("six", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+
+ [Fact]
+ public void ParseSpacesTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine(" one , \"two three\" , four ");
+ writer.WriteLine(" \" five \"\" six \"\" seven \" ");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = null,
+ };
+ var parser = new CsvParser(reader, config);
+
+ Assert.True(parser.Read());
+ Assert.Equal(" one ", parser[0]);
+ Assert.Equal(" \"two three\" ", parser[1]);
+ Assert.Equal(" four ", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(" \" five \"\" six \"\" seven \" ", parser[0]);
+
+ Assert.False(parser.Read());
+ }
+
+ [Fact]
+ public void CallingReadMultipleTimesAfterDoneReadingTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("four,five,six");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ }
+
+ [Fact]
+ public void ParseEmptyTest()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ParseCrOnlyTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("\r");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ParseLfOnlyTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ParseCrLnOnlyTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Parse1RecordWithNoCrlfTest()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.Write("one,two,three");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Parse2RecordsLastWithNoCrlfTest()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.WriteLine("one,two,three");
+ streamWriter.Write("four,five,six");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ parser.Read();
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("four", parser[0]);
+ Assert.Equal("five", parser[1]);
+ Assert.Equal("six", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ParseFirstFieldIsEmptyQuotedTest()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.WriteLine("\"\",\"two\",\"three\"");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void ParseLastFieldIsEmptyQuotedTest()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.WriteLine("\"one\",\"two\",\"\"");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void ParseQuoteOnlyQuotedFieldTest()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.WriteLine("\"\"\"\",\"two\",\"three\"");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("\"", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void ParseRecordsWithOnlyOneField()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.WriteLine("row one");
+ streamWriter.WriteLine("row two");
+ streamWriter.WriteLine("row three");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.Count);
+ Assert.Equal("row one", parser[0]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.Count);
+ Assert.Equal("row two", parser[0]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.Count);
+ Assert.Equal("row three", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void ParseRecordWhereOnlyCarriageReturnLineEndingIsUsed()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.Write("one,two\r");
+ streamWriter.Write("three,four\r");
+ streamWriter.Write("five,six\r");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("three", parser[0]);
+ Assert.Equal("four", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("five", parser[0]);
+ Assert.Equal("six", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void ParseRecordWhereOnlyLineFeedLineEndingIsUsed()
+ {
+ using (var memoryStream = new MemoryStream())
+ using (var streamReader = new StreamReader(memoryStream))
+ using (var streamWriter = new StreamWriter(memoryStream))
+ using (var parser = new CsvParser(streamReader, CultureInfo.InvariantCulture))
+ {
+ streamWriter.Write("one,two\n");
+ streamWriter.Write("three,four\n");
+ streamWriter.Write("five,six\n");
+ streamWriter.Flush();
+ memoryStream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("three", parser[0]);
+ Assert.Equal("four", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("five", parser[0]);
+ Assert.Equal("six", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void ParseCommentedOutLineWithCommentsOn()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("#four,five,six");
+ writer.WriteLine("seven,eight,nine");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ var parser = new CsvParser(reader, config);
+
+ parser.Read();
+ parser.Read();
+ Assert.Equal("seven", parser[0]);
+ }
+
+ [Fact]
+ public void ParseCommentedOutLineWithCommentsOff()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = false,
+ };
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("#four,five,six");
+ writer.WriteLine("seven,eight,nine");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, config);
+
+ parser.Read();
+ parser.Read();
+ Assert.Equal("#four", parser[0]);
+ }
+
+ [Fact]
+ public void ParseCommentedOutLineWithDifferentCommentCommentsOn()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one,two,three");
+ writer.WriteLine("*four,five,six");
+ writer.WriteLine("seven,eight,nine");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ Comment = '*',
+ };
+ var parser = new CsvParser(reader, config);
+
+ parser.Read();
+ parser.Read();
+ Assert.Equal("seven", parser[0]);
+ }
+
+ [Fact]
+ public void ParseUsingDifferentDelimiter()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("one\ttwo\tthree");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "\t",
+ WhiteSpaceChars = new[] { ' ' },
+ };
+ var parser = new CsvParser(reader, config);
+
+ Assert.True(parser.Read());
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+ }
+
+ [Fact]
+ public void ParseUsingDifferentQuote()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("'one','two','three'");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Quote = '\''
+ };
+ var parser = new CsvParser(reader, config);
+
+ Assert.True(parser.Read());
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two", parser[1]);
+ Assert.Equal("three", parser[2]);
+ }
+
+ [Fact]
+ public void ParseFinalRecordWithNoEndOfLineTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.WriteLine("1,2,");
+ writer.Write("4,5,");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ Assert.True(parser.Read());
+ Assert.Equal("", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+
+ [Fact]
+ public void ParseLastLineHasNoCrLf()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ writer.Write("a");
+ writer.Flush();
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ Assert.True(parser.Read());
+ Assert.Equal("a", parser[0]);
+
+ Assert.False(parser.Read());
+ }
+
+ [Fact]
+ public void CharReadTotalTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new TestStreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ // This is a breakdown of the char counts.
+ // Read() will read up to the first line end char
+ // and any more on the line will get read with the next read.
+
+ // [I][d][,][N][a][m][e][\r][\n]
+ // 1 2 3 4 5 6 7 8 9
+ // [1][,][o][n][e][\r][\n]
+ // 10 11 12 13 14 15 16
+ // [,][\r][\n]
+ // 17 18 19
+ // [\r][\n]
+ // 20 21
+ // [#][ ][c][o][m][m][e][n][t][s][\r][\n]
+ // 22 23 24 25 26 27 28 29 30 31 32 33
+ // [2][,][t][w][o][\r][\n]
+ // 34 35 36 37 38 39 40
+ // [3][,]["][t][h][r][e][e][,][ ][f][o][u][r]["][\r][\n]
+ // 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
+
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine(",");
+ writer.WriteLine("");
+ writer.WriteLine("# comments");
+ writer.WriteLine("2,two");
+ writer.WriteLine("3,\"three, four\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(9, parser.CharCount);
+
+ parser.Read();
+ Assert.Equal(16, parser.CharCount);
+
+ parser.Read();
+ Assert.Equal(19, parser.CharCount);
+
+ parser.Read();
+ Assert.Equal(40, parser.CharCount);
+
+ parser.Read();
+ Assert.Equal(57, parser.CharCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void StreamSeekingUsingCharPositionTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ // This is a breakdown of the char counts.
+ // Read() will read up to the first line end char
+ // and any more on the line will get read with the next read.
+
+ // [I][d][,][N][a][m][e][\r][\n]
+ // 1 2 3 4 5 6 7 8 9
+ // [1][,][o][n][e][\r][\n]
+ // 10 11 12 13 14 15 16
+ // [,][\r][\n]
+ // 17 18 19
+ // [\r][\n]
+ // 20 21
+ // [#][ ][c][o][m][m][e][n][t][s][\r][\n]
+ // 22 23 24 25 26 27 28 29 30 31 32 33
+ // [2][,][t][w][o][\r][\n]
+ // 34 35 36 37 38 39 40
+ // [3][,]["][t][h][r][e][e][,][ ][f][o][u][r]["][\r][\n]
+ // 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
+
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine(",");
+ writer.WriteLine("");
+ writer.WriteLine("# comments");
+ writer.WriteLine("2,two");
+ writer.WriteLine("3,\"three, four\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.CharCount, SeekOrigin.Begin);
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.CharCount, SeekOrigin.Begin);
+ parser.Read();
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.CharCount, SeekOrigin.Begin);
+ parser.Read();
+ Assert.Equal("2", parser[0]);
+ Assert.Equal("two", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.CharCount, SeekOrigin.Begin);
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("three, four", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void RowTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("3,4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ var rowCount = 0;
+ while (parser.Read())
+ {
+ rowCount++;
+ Assert.Equal(rowCount, parser.Row);
+ }
+ }
+ }
+
+ [Fact]
+ public void RowBlankLinesTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("\r\n");
+ writer.Write("3,4\r\n");
+ writer.Write("\r\n");
+ writer.Write("5,6\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ var rowCount = 1;
+ while (parser.Read())
+ {
+ Assert.Equal(rowCount, parser.Row);
+ rowCount += 2;
+ }
+ }
+ }
+
+ [Fact]
+ public void IgnoreBlankLinesRowCountTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1,a");
+ writer.WriteLine();
+ writer.WriteLine("3,c");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.Row);
+ Assert.Equal("1", parser[0]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Row);
+ Assert.Equal("3", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void DoNotIgnoreBlankLinesRowCountTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1,a");
+ writer.WriteLine();
+ writer.WriteLine("3,c");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.Row);
+ Assert.Equal("1", parser[0]);
+
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Row);
+ Assert.Equal(1, parser.Count);
+
+ Assert.True(parser.Read());
+ Assert.Equal(3, parser.Row);
+ Assert.Equal("3", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void RowCommentLinesTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("# comment 1\r\n");
+ writer.Write("3,4\r\n");
+ writer.Write("# comment 2\r\n");
+ writer.Write("5,6\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ var rowCount = 1;
+ while (parser.Read())
+ {
+ Assert.Equal(rowCount, parser.Row);
+ rowCount += 2;
+ }
+ }
+ }
+
+ [Fact]
+ public void RowRawTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new TestStreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("1,\"2");
+ writer.WriteLine("2 continued");
+ writer.WriteLine("end of 2\",3");
+ writer.WriteLine("4,5,6");
+ writer.WriteLine("7,\"8");
+ writer.WriteLine("8 continued");
+ writer.WriteLine("end of 8\",9");
+ writer.WriteLine("10,11,12");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2\r\n2 continued\r\nend of 2", parser[1]);
+ Assert.Equal("3", parser[2]);
+ Assert.Equal(3, parser.RawRow);
+
+ Assert.True(parser.Read());
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("6", parser[2]);
+ Assert.Equal(4, parser.RawRow);
+
+ Assert.True(parser.Read());
+ Assert.Equal("7", parser[0]);
+ Assert.Equal("8\r\n8 continued\r\nend of 8", parser[1]);
+ Assert.Equal("9", parser[2]);
+ Assert.Equal(7, parser.RawRow);
+
+ Assert.True(parser.Read());
+ Assert.Equal("10", parser[0]);
+ Assert.Equal("11", parser[1]);
+ Assert.Equal("12", parser[2]);
+ Assert.Equal(8, parser.RawRow);
+ }
+ }
+
+ [Fact]
+ public void ByteCountTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, config.Encoding))
+ using (var reader = new StreamReader(stream, config.Encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("3,4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(5, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(10, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ByteCountTestWithQuotedFields()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, config.Encoding))
+ using (var reader = new StreamReader(stream, config.Encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,\"2\"\r\n");
+ writer.Write("\"3\",4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(7, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(14, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ByteCountTestWithQuotedFieldsEmptyQuotedField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, config.Encoding))
+ using (var reader = new StreamReader(stream, config.Encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,\"\",2\r\n");
+ writer.Write("\"3\",4,\"5\"\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(8, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(19, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ByteCountTestWithQuotedFieldsClosingQuoteAtStartOfBuffer()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true,
+ BufferSize = 4
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, config.Encoding))
+ using (var reader = new StreamReader(stream, config.Encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,\"2\",3\r\n");
+ writer.Write("\"4\",5,\"6\"\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(9, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(20, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ByteCountTestWithQuotedFieldsEscapedQuoteAtStartOfBuffer()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true,
+ BufferSize = 4
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, config.Encoding))
+ using (var reader = new StreamReader(stream, config.Encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,\"2a\",3\r\n");
+ writer.Write("\"\"\"4\"\"\",5,\"6\"\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(10, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(25, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void ByteCountUsingCharWithMoreThanSingleByteTest()
+ {
+ var encoding = Encoding.Unicode;
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CountBytes = true,
+ Encoding = encoding,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, encoding))
+ using (var reader = new StreamReader(stream, encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ //崔钟铉
+ writer.Write("1,崔\r\n");
+ writer.Write("3,钟\r\n");
+ writer.Write("5,铉\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal(10, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(20, parser.ByteCount);
+
+ parser.Read();
+ Assert.Equal(30, parser.ByteCount);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void StreamSeekingUsingByteCountTest()
+ {
+ var encoding = Encoding.Unicode;
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ CountBytes = true,
+ Encoding = encoding,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream, encoding))
+ using (var reader = new StreamReader(stream, encoding))
+ using (var parser = new CsvParser(reader, config))
+ {
+ // This is a breakdown of the char counts.
+ // Read() will read up to the first line end char
+ // and any more on the line will get read with the next read.
+
+ // [I][d][,][N][a][m][e][\r][\n]
+ // 1 2 3 4 5 6 7 8 9
+ // [1][,][o][n][e][\r][\n]
+ // 10 11 12 13 14 15 16
+ // [,][\r][\n]
+ // 17 18 19
+ // [\r][\n]
+ // 20 21
+ // [#][ ][c][o][m][m][e][n][t][s][\r][\n]
+ // 22 23 24 25 26 27 28 29 30 31 32 33
+ // [2][,][t][w][o][\r][\n]
+ // 34 35 36 37 38 39 40
+ // [3][,]["][t][h][r][e][e][,][ ][f][o][u][r]["][\r][\n]
+ // 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
+
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine(",");
+ writer.WriteLine("");
+ writer.WriteLine("# comments");
+ writer.WriteLine("2,two");
+ writer.WriteLine("3,\"three, four\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ var record = parser.Read();
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.ByteCount, SeekOrigin.Begin);
+ record = parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.ByteCount, SeekOrigin.Begin);
+ record = parser.Read();
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.ByteCount, SeekOrigin.Begin);
+ record = parser.Read();
+ Assert.Equal("2", parser[0]);
+ Assert.Equal("two", parser[1]);
+
+ stream.Position = 0;
+ stream.Seek(parser.ByteCount, SeekOrigin.Begin);
+ record = parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("three, four", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void SimulateSeekingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ // Already read:
+ // 1,2,3\r
+ // Seeked to this position.
+ writer.Write("\n4,5,6\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ // Make sure this doesn't throw an exception.
+ Assert.True(parser.Read());
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("6", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void NullCharTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("1,\0,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("\0", parser[1]);
+ Assert.Equal("3", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void RawRecordCorruptionTest()
+ {
+ var row1 = new string('a', 2038) + ",b\r\n";
+ var row2 = "test1,test2";
+ var val = row1 + row2;
+
+ using (var reader = new StringReader(val))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal(row1, parser.RawRecord.ToString());
+
+ parser.Read();
+ Assert.Equal(row2, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void ParseNoQuotesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("one,\"two\",three \" four, \"five\" \n"); // `one,"two",three " four, "five" `
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("\"two\"", parser[1]);
+ Assert.Equal("three \" four", parser[2]);
+ Assert.Equal(" \"five\" ", parser[3]);
+ }
+ }
+
+ [Fact]
+ public void LastLineHasCommentTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("#comment");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void LastLineHasCommentNoEolTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("#c");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void DoNotIgnoreBlankLinesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.WriteLine("1,2,3");
+ writer.WriteLine(",,");
+ writer.WriteLine("");
+ writer.WriteLine("4,5,6");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("3", parser[2]);
+
+ parser.Read();
+ Assert.Equal("", parser[0]);
+ Assert.Equal("", parser[1]);
+ Assert.Equal("", parser[2]);
+
+ parser.Read();
+ Assert.Equal(1, parser.Count);
+
+ parser.Read();
+ Assert.Equal("4", parser[0]);
+ Assert.Equal("5", parser[1]);
+ Assert.Equal("6", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void QuotedFieldWithCarriageReturnTest()
+ {
+ using (var reader = new StringReader("\"a\r\",b"))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(new[] { "a\r", "b" }, parser.Record);
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void QuotedFieldWithLineFeedTest()
+ {
+ using (var reader = new StringReader("\"a\n\",b"))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(new[] { "a\n", "b" }, parser.Record);
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void RowCountWithSingleLineAndNoLineEndingTest()
+ {
+ using (var reader = new StringReader("a,b"))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.Row);
+ }
+ }
+
+ [Fact]
+ public void RawRowCountWithSingleLineAndNoLineEndingTest()
+ {
+ using (var reader = new StringReader("a,b"))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(1, parser.RawRow);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderConstructorTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderConstructorTests.cs
new file mode 100644
index 0000000..fe24eac
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderConstructorTests.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderConstructorTests
+ {
+ [Fact]
+ public void EnsureInternalsAreSetupCorrectlyWhenPassingTextReaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ Assert.Same(csv.Configuration, csv.Parser.Configuration);
+ }
+ }
+
+ [Fact]
+ public void EnsureInternalsAreSetupCorrectlyWhenPassingTextReaderAndConfigurationTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)))
+ {
+ Assert.Same(csv.Configuration, csv.Parser.Configuration);
+ }
+ }
+
+ [Fact]
+ public void EnsureInternalsAreSetupCorrectlyWhenPassingParserTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ {
+ var parser = new CsvParser(reader, CultureInfo.InvariantCulture);
+
+ using (var csv = new CsvReader(parser))
+ {
+ Assert.Same(csv.Configuration, csv.Parser.Configuration);
+ Assert.Same(parser, csv.Parser);
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDefaultValueTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDefaultValueTests.cs
new file mode 100644
index 0000000..ba5d832
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDefaultValueTests.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderDefaultValueTests
+ {
+ [Fact]
+ public void DefaultValueTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name,Order");
+ writer.WriteLine(",,");
+ writer.WriteLine("2,two,2");
+ writer.WriteLine(",three,");
+ writer.Flush();
+ stream.Position = 0;
+
+ csvReader.Context.RegisterClassMap<TestMap>();
+
+ var records = csvReader.GetRecords<Test>().ToList();
+
+ var record = records[0];
+ Assert.Equal(-1, record.Id);
+ Assert.Null(record.Name);
+ Assert.Equal(-2, record.Order);
+
+ record = records[1];
+ Assert.Equal(2, record.Id);
+ Assert.Equal("two", record.Name);
+ }
+ }
+
+ [Fact]
+ public void DefaultStringValueTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name,Order");
+ writer.WriteLine(",,");
+ writer.WriteLine("2,two,2");
+ writer.WriteLine(",three,");
+ writer.Flush();
+ stream.Position = 0;
+
+ csvReader.Context.RegisterClassMap<TestStringMap>();
+
+ var records = csvReader.GetRecords<Test>().ToList();
+
+ var record = records[0];
+ Assert.Equal(-1, record.Id);
+ Assert.Null(record.Name);
+ Assert.Equal(-2, record.Order);
+
+ record = records[1];
+ Assert.Equal(2, record.Id);
+ Assert.Equal("two", record.Name);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public int Order { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Id).Default(-1);
+ Map(m => m.Name).Default((string)null);
+ Map(m => m.Order).Default(-2);
+ }
+ }
+
+ private sealed class TestStringMap : ClassMap<Test>
+ {
+ public TestStringMap()
+ {
+ Map(m => m.Id).Default("-1");
+ Map(m => m.Name).Default(null);
+ Map(m => m.Order).Default("-2");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDynamicMappingsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDynamicMappingsTests.cs
new file mode 100644
index 0000000..e2d9336
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderDynamicMappingsTests.cs
@@ -0,0 +1,63 @@
+// Copyright 2009-2020 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Linq.Expressions;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+ public class CsvReaderDynamicMappingsTests
+ {
+ [Fact]
+ public void CanMapDynamics()
+ {
+ var parserMock = new ParserMock
+ {
+ { "IntCol", "StringCol" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<DynamicMappingsTypeClassMap>();
+
+ var records = csvReader.GetRecords<DynamicMappingsType>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0].IntCol);
+ Assert.Equal("one", records[0].StringCol);
+ Assert.Equal(2, records[1].IntCol);
+ Assert.Equal("two", records[1].StringCol);
+ }
+
+ private class DynamicMappingsType
+ {
+ public int IntCol { get; set; }
+ public string StringCol { get; set; }
+
+ public static IEnumerable<Expression<Func<DynamicMappingsType, dynamic>>> Mappings =>
+ new List<Expression<Func<DynamicMappingsType, dynamic>>>
+ {
+ i => i.IntCol,
+ i => i.StringCol
+ };
+ }
+
+ private class DynamicMappingsTypeClassMap : ClassMap<DynamicMappingsType>
+ {
+ public DynamicMappingsTypeClassMap()
+ {
+ foreach (var mapping in DynamicMappingsType.Mappings)
+ {
+ Map(mapping);
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderErrorMessageTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderErrorMessageTests.cs
new file mode 100644
index 0000000..be9db27
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderErrorMessageTests.cs
@@ -0,0 +1,258 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderErrorMessageTests
+ {
+ public CsvReaderErrorMessageTests()
+ {
+ Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
+ }
+
+ [Fact]
+ public void FirstColumnEmptyFirstRowErrorWithNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ csvReader.Context.RegisterClassMap<Test1Map>();
+ writer.WriteLine(",one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ try
+ {
+ var records = csvReader.GetRecords<Test1>().ToList();
+ throw new Exception();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(1, ex.Context.Parser.Row);
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+ }
+
+ [Fact]
+ public void FirstColumnEmptySecondRowErrorWithHeader()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ csvReader.Context.RegisterClassMap<Test1Map>();
+ writer.WriteLine("IntColumn,StringColumn");
+ writer.WriteLine("1,one");
+ writer.WriteLine(",two");
+ writer.Flush();
+ stream.Position = 0;
+
+ try
+ {
+ var records = csvReader.GetRecords<Test1>().ToList();
+ throw new Exception();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(3, ex.Context.Parser.Row);
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+ }
+
+ [Fact]
+ public void FirstColumnEmptyErrorWithHeaderAndCommentRowTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ csvReader.Context.RegisterClassMap<Test1Map>();
+ writer.WriteLine("IntColumn,StringColumn");
+ writer.WriteLine("# comment");
+ writer.WriteLine();
+ writer.WriteLine(",one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ try
+ {
+ var records = csvReader.GetRecords<Test1>().ToList();
+ throw new Exception();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(4, ex.Context.Parser.Row);
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+ }
+
+ [Fact]
+ public void FirstColumnErrorTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csvReader.Context.RegisterClassMap<Test1Map>();
+ writer.WriteLine("IntColumn,StringColumn");
+ writer.WriteLine();
+ writer.WriteLine("one,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ try
+ {
+ var records = csvReader.GetRecords<Test1>().ToList();
+ throw new Exception();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(3, ex.Context.Parser.Row);
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+ }
+
+ [Fact]
+ public void SecondColumnEmptyErrorTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csvReader.Context.RegisterClassMap<Test2Map>();
+ writer.WriteLine("StringColumn,IntColumn");
+ writer.WriteLine("one,");
+ writer.WriteLine("two,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ try
+ {
+ var records = csvReader.GetRecords<Test2>().ToList();
+ throw new Exception();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ Assert.Equal(1, ex.Context.Reader.CurrentIndex);
+ }
+ }
+ }
+
+ [Fact]
+ public void Test()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,9/24/2012");
+ writer.Flush();
+ stream.Position = 0;
+
+ try
+ {
+ csvReader.Context.RegisterClassMap<Test3Map>();
+ var records = csvReader.GetRecords<Test3>().ToList();
+ }
+ catch (ReaderException)
+ {
+ // Should throw this exception.
+ }
+ }
+ }
+
+ private class Test1
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+ }
+
+ private sealed class Test1Map : ClassMap<Test1>
+ {
+ public Test1Map()
+ {
+ Map(m => m.IntColumn).Index(0);
+ Map(m => m.StringColumn).Index(1);
+ }
+ }
+
+ private class Test2
+ {
+ public string StringColumn { get; set; }
+
+ public int IntColumn { get; set; }
+ }
+
+ private sealed class Test2Map : ClassMap<Test2>
+ {
+ public Test2Map()
+ {
+ Map(m => m.StringColumn);
+ Map(m => m.IntColumn);
+ }
+ }
+
+ private class Test3
+ {
+ public int Id { get; set; }
+
+ public DateTime CreationDate { get; set; }
+
+ public string Description { get; set; }
+ }
+
+ private sealed class Test3Map : ClassMap<Test3>
+ {
+ public Test3Map()
+ {
+ Map(m => m.Id).Index(0);
+ Map(m => m.CreationDate).Index(1);
+ Map(m => m.Description).Index(2);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderMappingTests.cs
new file mode 100644
index 0000000..38255da
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderMappingTests.cs
@@ -0,0 +1,355 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderMappingTests
+ {
+ [Fact]
+ public void ReadWithConvertUsingTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "int2", "string.3" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ // csvReader.Configuration.HeaderValidated = (isValid, headerNames, headerNameIndex, context) => {};
+ csvReader.Context.RegisterClassMap<ConvertUsingClassMap>();
+
+ var records = csvReader.GetRecords<MultipleNamesClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0].IntColumn);
+ Assert.Equal("one", records[0].StringColumn);
+ Assert.Equal(2, records[1].IntColumn);
+ Assert.Equal("two", records[1].StringColumn);
+ }
+
+ [Fact]
+ public void ReadMultipleNamesTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "int2", "string3" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<MultipleNamesClassMap>();
+
+ var records = csvReader.GetRecords<MultipleNamesClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0].IntColumn);
+ Assert.Equal("one", records[0].StringColumn);
+ Assert.Equal(2, records[1].IntColumn);
+ Assert.Equal("two", records[1].StringColumn);
+ }
+
+ [Fact]
+ public void ConvertUsingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ { "3", "4" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<ConvertUsingMap>();
+
+ var records = csvReader.GetRecords<TestClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(3, records[0].IntColumn);
+ Assert.Equal(7, records[1].IntColumn);
+ }
+
+ [Fact]
+ public void ConvertUsingCovarianceTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<CovarianceClassMap>();
+
+ var records = csvReader.GetRecords<CovarianceClass>().ToList();
+ }
+
+ [Fact]
+ public void ConvertUsingBlockTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ { "3", "4" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<ConvertUsingBlockMap>();
+
+ var records = csvReader.GetRecords<TestClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(3, records[0].IntColumn);
+ Assert.Equal(7, records[1].IntColumn);
+ }
+
+ [Fact]
+ public void ConvertUsingConstantTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ { "3", "4" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<ConvertUsingConstantMap>();
+
+ var records = csvReader.GetRecords<TestClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0].IntColumn);
+ Assert.Equal(1, records[1].IntColumn);
+ }
+
+ [Fact]
+ public void ReadSameNameMultipleTimesTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "ColumnName", "ColumnName", "ColumnName" },
+ { "2", "3", "1" },
+ };
+
+ var csv = new CsvReader(parserMock);
+ csv.Context.RegisterClassMap<SameNameMultipleTimesClassMap>();
+
+ var records = csv.GetRecords<SameNameMultipleTimesClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Single(records);
+ }
+
+ [Fact]
+ public void ConvertUsingInstanceMethodTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ { "3", "4" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<ConvertUsingInstanceMethodMap>();
+
+ var records = csvReader.GetRecords<TestClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(3, records[0].IntColumn);
+ Assert.Equal(7, records[1].IntColumn);
+ }
+
+ [Fact]
+ public void ConvertUsingStaticFunctionTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ { "3", "4" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<ConvertUsingStaticFunctionMap>();
+
+ var records = csvReader.GetRecords<TestClass>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(3, records[0].IntColumn);
+ Assert.Equal(7, records[1].IntColumn);
+ }
+
+ private class CovarianceClass
+ {
+ public int? Id { get; set; }
+ }
+
+ private sealed class CovarianceClassMap : ClassMap<CovarianceClass>
+ {
+ public CovarianceClassMap()
+ {
+ Map(m => m.Id).Convert(args => args.Row.GetField<int>(0));
+ }
+ }
+
+ private class ContravarianceClass
+ {
+ public int Id { get; set; }
+ }
+
+ private class TestClass
+ {
+ public int IntColumn { get; set; }
+ }
+
+ private class SameNameMultipleTimesClass
+ {
+ public string Name1 { get; set; }
+
+ public string Name2 { get; set; }
+
+ public string Name3 { get; set; }
+ }
+
+ private sealed class SameNameMultipleTimesClassMap : ClassMap<SameNameMultipleTimesClass>
+ {
+ public SameNameMultipleTimesClassMap()
+ {
+ Map(m => m.Name1).Name("ColumnName").NameIndex(1);
+ Map(m => m.Name2).Name("ColumnName").NameIndex(2);
+ Map(m => m.Name3).Name("ColumnName").NameIndex(0);
+ }
+ }
+
+ private class MultipleNamesClass
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+ }
+
+ private sealed class MultipleNamesClassMap : ClassMap<MultipleNamesClass>
+ {
+ public MultipleNamesClassMap()
+ {
+ Map(m => m.IntColumn).Name("int1", "int2", "int3");
+ Map(m => m.StringColumn).Name("string1", "string2", "string3");
+ }
+ }
+
+
+ private class ConstructorMappingClass
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+
+ public ConstructorMappingClass(string stringColumn)
+ {
+ StringColumn = stringColumn;
+ }
+ }
+
+ private sealed class ConvertUsingMap : ClassMap<TestClass>
+ {
+ public ConvertUsingMap()
+ {
+ Map(m => m.IntColumn).Convert(args => args.Row.GetField<int>(0) + args.Row.GetField<int>(1));
+ }
+ }
+
+ private sealed class ConvertUsingBlockMap : ClassMap<TestClass>
+ {
+ public ConvertUsingBlockMap()
+ {
+ Map(m => m.IntColumn).Convert(args =>
+ {
+ var x = args.Row.GetField<int>(0);
+ var y = args.Row.GetField<int>(1);
+ return x + y;
+ });
+ }
+ }
+
+ private sealed class ConvertUsingConstantMap : ClassMap<TestClass>
+ {
+ public ConvertUsingConstantMap()
+ {
+ Map(m => m.IntColumn).Convert(row => 1);
+ }
+ }
+
+ private sealed class ConvertUsingClassMap : ClassMap<MultipleNamesClass>
+ {
+ public ConvertUsingClassMap()
+ {
+ Map(m => m.IntColumn).Name("int2");
+ Map(m => m.StringColumn).Convert(args => args.Row.GetField("string.3"));
+ }
+ }
+
+ private sealed class ConvertUsingInstanceMethodMap : ClassMap<TestClass>
+ {
+ public ConvertUsingInstanceMethodMap()
+ {
+ Map(m => m.IntColumn).Convert(ConvertFromStringFunction);
+ }
+
+ private int ConvertFromStringFunction(ConvertFromStringArgs args)
+ {
+ return args.Row.GetField<int>(0) + args.Row.GetField<int>(1);
+ }
+ }
+
+ private sealed class ConvertUsingStaticFunctionMap : ClassMap<TestClass>
+ {
+ public ConvertUsingStaticFunctionMap()
+ {
+ Map(m => m.IntColumn).Convert(ConvertFromStringFunction);
+ }
+
+ private static int ConvertFromStringFunction(ConvertFromStringArgs args)
+ {
+ return args.Row.GetField<int>(0) + args.Row.GetField<int>(1);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingPrefixTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingPrefixTests.cs
new file mode 100644
index 0000000..4116ada
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingPrefixTests.cs
@@ -0,0 +1,92 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.IO;
+using System.Linq;
+using Xunit;
+using CsvHelper.Configuration;
+using System.Globalization;
+using CsvHelper.Tests.Mocks;
+
+namespace CsvHelper.Tests
+{
+ public class CsvReaderReferenceMappingPrefixTests
+ {
+ [Fact]
+ public void ReferencesWithPrefixTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "BPrefix_Id", "C.CId" },
+ { "a1", "b1", "c1" },
+ { "a2", "b2", "c2" },
+ { "a3", "b3", "c3" },
+ { "a4", "b4", "c4" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<AMap>();
+
+ var list = csv.GetRecords<A>().ToList();
+
+ Assert.NotNull(list);
+ Assert.Equal(4, list.Count);
+
+ for (var i = 0; i < 4; i++)
+ {
+ var rowId = i + 1;
+ var row = list[i];
+ Assert.Equal("a" + rowId, row.Id);
+ Assert.Equal("b" + rowId, row.B.Id);
+ Assert.Equal("c" + rowId, row.B.C.Id);
+ }
+ }
+ }
+
+ private class A
+ {
+ public string Id { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string Id { get; set; }
+
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string Id { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.Id);
+ References<BMap>(m => m.B).Prefix("BPrefix_", false);
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap()
+ {
+ Map(m => m.Id);
+ References<CMap>(m => m.C).Prefix();
+ }
+ }
+
+ private sealed class CMap : ClassMap<C>
+ {
+ public CMap()
+ {
+ Map(m => m.Id).Name("CId");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingTests.cs
new file mode 100644
index 0000000..32907ef
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderReferenceMappingTests.cs
@@ -0,0 +1,113 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.IO;
+using System.Linq;
+using Xunit;
+using CsvHelper.Configuration;
+using System.Globalization;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderReferenceMappingTests
+ {
+ [Fact]
+ public void NestedReferencesClassMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<AMap>();
+
+ writer.WriteLine("AId,BId,CId,DId");
+ writer.WriteLine("a1,b1,c1,d1");
+ writer.WriteLine("a2,b2,c2,d2");
+ writer.WriteLine("a3,b3,c3,d3");
+ writer.WriteLine("a4,b4,c4,d4");
+ writer.Flush();
+ stream.Position = 0;
+
+ var list = csv.GetRecords<A>().ToList();
+
+ Assert.NotNull(list);
+ Assert.Equal(4, list.Count);
+
+ for (var i = 0; i < 4; i++)
+ {
+ var rowId = i + 1;
+ var row = list[i];
+ Assert.Equal("a" + rowId, row.Id);
+ Assert.Equal("b" + rowId, row.B.Id);
+ Assert.Equal("c" + rowId, row.B.C.Id);
+ Assert.Equal("d" + rowId, row.B.C.D.Id);
+ }
+ }
+ }
+
+ private class A
+ {
+ public string Id { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string Id { get; set; }
+
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string Id { get; set; }
+
+ public D D { get; set; }
+ }
+
+ private class D
+ {
+ public string Id { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.Id).Name("AId");
+ References<BMap>(m => m.B);
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap()
+ {
+ Map(m => m.Id).Name("BId");
+ References<CMap>(m => m.C);
+ }
+ }
+
+ private sealed class CMap : ClassMap<C>
+ {
+ public CMap()
+ {
+ Map(m => m.Id).Name("CId");
+ References<DMap>(m => m.D);
+ }
+ }
+
+ private sealed class DMap : ClassMap<D>
+ {
+ public DMap()
+ {
+ Map(m => m.Id).Name("DId");
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderSubClassingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderSubClassingTests.cs
new file mode 100644
index 0000000..2a530d7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderSubClassingTests.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Linq;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderSubClassingTests
+ {
+ [Fact]
+ public void GetRecordTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csvReader = new MyCsvReader(parserMock);
+ csvReader.GetRecords<Test>().ToList();
+ }
+
+ private class MyCsvReader : CsvReader
+ {
+ public MyCsvReader(IParser parser) : base(parser) { }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderTests.cs
new file mode 100644
index 0000000..09df221
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvReaderTests.cs
@@ -0,0 +1,1166 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+#pragma warning disable 649
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvReaderTests
+ {
+ [Fact]
+ public void HasHeaderRecordNotReadExceptionTest()
+ {
+ var parserMock = new ParserMock();
+ var reader = new CsvReader(parserMock);
+
+ Assert.Throws<ReaderException>(() => reader.GetField<int>(0));
+ }
+
+ [Fact]
+ public void HasHeaderRecordTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "One", "Two" },
+ { "1", "2" },
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ // Check to see if the header record and first record are set properly.
+ Assert.Equal(Convert.ToInt32("1"), reader.GetField<int>("One"));
+ Assert.Equal(Convert.ToInt32("2"), reader.GetField<int>("Two"));
+ Assert.Equal(Convert.ToInt32("1"), reader.GetField<int>(0));
+ Assert.Equal(Convert.ToInt32("2"), reader.GetField<int>(1));
+ }
+
+ [Fact]
+ public void GetTypeTest()
+ {
+ var data = new[]
+ {
+ "1",
+ "blah",
+ DateTime.Now.ToString("O"),
+ "true",
+ "c",
+ "",
+ Guid.NewGuid().ToString(),
+ };
+
+ var parserMock = new ParserMock();
+ parserMock.Add(data);
+ parserMock.Add(data);
+ parserMock.Add(null);
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Equal(Convert.ToInt16(data[0]), reader.GetField<short>(0));
+ Assert.Equal(Convert.ToInt16(data[0]), reader.GetField<short?>(0));
+ Assert.Null(reader.GetField<short?>(5));
+ Assert.Equal(Convert.ToInt32(data[0]), reader.GetField<int>(0));
+ Assert.Equal(Convert.ToInt32(data[0]), reader.GetField<int?>(0));
+ Assert.Null(reader.GetField<int?>(5));
+ Assert.Equal(Convert.ToInt64(data[0]), reader.GetField<long>(0));
+ Assert.Equal(Convert.ToInt64(data[0]), reader.GetField<long?>(0));
+ Assert.Null(reader.GetField<long?>(5));
+ Assert.Equal(Convert.ToDecimal(data[0]), reader.GetField<decimal>(0));
+ Assert.Equal(Convert.ToDecimal(data[0]), reader.GetField<decimal?>(0));
+ Assert.Null(reader.GetField<decimal?>(5));
+ Assert.Equal(Convert.ToSingle(data[0]), reader.GetField<float>(0));
+ Assert.Equal(Convert.ToSingle(data[0]), reader.GetField<float?>(0));
+ Assert.Null(reader.GetField<float?>(5));
+ Assert.Equal(Convert.ToDouble(data[0]), reader.GetField<double>(0));
+ Assert.Equal(Convert.ToDouble(data[0]), reader.GetField<double?>(0));
+ Assert.Null(reader.GetField<double?>(5));
+ Assert.Equal(data[1], reader.GetField<string>(1));
+ Assert.Equal(string.Empty, reader.GetField<string>(5));
+ Assert.Equal(Convert.ToDateTime(data[2]), reader.GetField<DateTime>(2));
+ Assert.Equal(Convert.ToDateTime(data[2]), reader.GetField<DateTime?>(2));
+ Assert.Null(reader.GetField<DateTime?>(5));
+ Assert.Equal(Convert.ToBoolean(data[3]), reader.GetField<bool>(3));
+ Assert.Equal(Convert.ToBoolean(data[3]), reader.GetField<bool?>(3));
+ Assert.Null(reader.GetField<bool?>(5));
+ Assert.Equal(Convert.ToChar(data[4]), reader.GetField<char>(4));
+ Assert.Equal(Convert.ToChar(data[4]), reader.GetField<char?>(4));
+ Assert.Null(reader.GetField<char?>(5));
+ Assert.Equal(new Guid(data[6]), reader.GetField<Guid>(6));
+ Assert.Null(reader.GetField<Guid?>(5));
+ }
+
+ [Fact]
+ public void GetFieldByIndexTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" },
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Equal(1, reader.GetField<int>(0));
+ Assert.Equal(2, reader.GetField<int>(1));
+ }
+
+ [Fact]
+ public void GetFieldByNameTest()
+ {
+ var data1 = new[] { "One", "Two" };
+ var data2 = new[] { "1", "2" };
+ var parserMock = new ParserMock();
+ parserMock.Add(data1);
+ parserMock.Add(data2);
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ Assert.Equal(Convert.ToInt32(data2[0]), reader.GetField<int>("One"));
+ Assert.Equal(Convert.ToInt32(data2[1]), reader.GetField<int>("Two"));
+ }
+
+ [Fact]
+ public void GetFieldByNameAndIndexTest()
+ {
+ var data1 = new[] { "One", "One" };
+ var data2 = new[] { "1", "2" };
+ var parserMock = new ParserMock();
+ parserMock.Add(data1);
+ parserMock.Add(data2);
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ Assert.Equal(Convert.ToInt32(data2[0]), reader.GetField<int>("One", 0));
+ Assert.Equal(Convert.ToInt32(data2[1]), reader.GetField<int>("One", 1));
+ }
+
+ [Fact]
+ public void GetMissingFieldByNameTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ var data1 = new[] { "One", "Two" };
+ var data2 = new[] { "1", "2" };
+ var parserMock = new ParserMock(config);
+ parserMock.Add(data1);
+ parserMock.Add(data2);
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+
+ Assert.Null(reader.GetField<string>("blah"));
+ }
+
+ [Fact]
+ public void GetMissingFieldByNameStrictTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "One", "Two" },
+ { "1", "2" },
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+
+ Assert.Throws<MissingFieldException>(() => reader.GetField<string>("blah"));
+ }
+
+ [Fact]
+ public void GetMissingFieldByIndexStrictTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "One", "Two" },
+ { "1", "2" },
+ null,
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Throws<MissingFieldException>(() => reader.GetField(2));
+ }
+
+ [Fact]
+ public void GetMissingFieldGenericByIndexStrictTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "One", "Two" },
+ { "1", "2" },
+ null,
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ };
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Throws<MissingFieldException>(() => reader.GetField<string>(2));
+ }
+
+ [Fact]
+ public void GetMissingFieldByIndexStrictOffTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "One", "Two" },
+ { "1", "2" },
+ null,
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Null(reader.GetField(2));
+ }
+
+ [Fact]
+ public void GetMissingFieldGenericByIndexStrictOffTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "One", "Two" },
+ { "1", "2" },
+ null,
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Null(reader.GetField<string>(2));
+ }
+
+ [Fact]
+ public void GetFieldByNameNoHeaderExceptionTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2" }
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ Assert.Throws<ReaderException>(() => reader.GetField<int>("One"));
+ }
+
+ [Fact]
+ public void GetRecordWithDuplicateHeaderFields()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "Field1", "Field1" },
+ { "Field1", "Field1" },
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ }
+
+ [Fact]
+ public void GetRecordGenericTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ HeaderValidated = null,
+ };
+ var headerData = new[]
+ {
+ "IntColumn",
+ "String Column",
+ "GuidColumn",
+ };
+ var recordData = new[]
+ {
+ "1",
+ "string column",
+ Guid.NewGuid().ToString(),
+ };
+ var csvParserMock = new ParserMock(config)
+ {
+ headerData,
+ recordData,
+ null,
+ };
+
+ var csv = new CsvReader(csvParserMock);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+ csv.Read();
+ var record = csv.GetRecord<TestRecord>();
+
+ Assert.Equal(Convert.ToInt32(recordData[0]), record.IntColumn);
+ Assert.Equal(recordData[1], record.StringColumn);
+ Assert.Equal("test", record.TypeConvertedColumn);
+ Assert.Equal(Convert.ToInt32(recordData[0]), record.FirstColumn);
+ Assert.Equal(new Guid(recordData[2]), record.GuidColumn);
+ }
+
+ [Fact]
+ public void GetRecordTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ HeaderValidated = null,
+ };
+ var headerData = new[]
+ {
+ "IntColumn",
+ "String Column",
+ "GuidColumn",
+ };
+ var recordData = new[]
+ {
+ "1",
+ "string column",
+ Guid.NewGuid().ToString(),
+ };
+ var csvParserMock = new ParserMock(config)
+ {
+ headerData,
+ recordData,
+ null,
+ };
+
+ var csv = new CsvReader(csvParserMock);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+ csv.Read();
+ var record = (TestRecord)csv.GetRecord(typeof(TestRecord));
+
+ Assert.Equal(Convert.ToInt32(recordData[0]), record.IntColumn);
+ Assert.Equal(recordData[1], record.StringColumn);
+ Assert.Equal("test", record.TypeConvertedColumn);
+ Assert.Equal(Convert.ToInt32(recordData[0]), record.FirstColumn);
+ Assert.Equal(new Guid(recordData[2]), record.GuidColumn);
+ }
+
+ [Fact]
+ public void GetRecordsGenericTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ HeaderValidated = null,
+ };
+ var headerData = new[]
+ {
+ "IntColumn",
+ "String Column",
+ "GuidColumn",
+ };
+ var guid = Guid.NewGuid();
+ var csvParserMock = new ParserMock(config)
+ {
+ headerData,
+ { "1", "string column 1", guid.ToString() },
+ { "2", "string column 2", guid.ToString() },
+ };
+
+ var csv = new CsvReader(csvParserMock);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+ var records = csv.GetRecords<TestRecord>().ToList();
+
+ Assert.Equal(2, records.Count);
+
+ for (var i = 1; i <= records.Count; i++)
+ {
+ var record = records[i - 1];
+ Assert.Equal(i, record.IntColumn);
+ Assert.Equal("string column " + i, record.StringColumn);
+ Assert.Equal("test", record.TypeConvertedColumn);
+ Assert.Equal(i, record.FirstColumn);
+ Assert.Equal(guid, record.GuidColumn);
+ }
+ }
+
+ [Fact]
+ public void GetRecordsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ HeaderValidated = null,
+ };
+ var headerData = new[]
+ {
+ "IntColumn",
+ "String Column",
+ "GuidColumn",
+ };
+ var guid = Guid.NewGuid();
+ var csvParserMock = new ParserMock(config)
+ {
+ headerData,
+ { "1", "string column 1", guid.ToString() },
+ { "2", "string column 2", guid.ToString() },
+ };
+
+ var csv = new CsvReader(csvParserMock);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+ var records = csv.GetRecords(typeof(TestRecord)).ToList();
+
+ Assert.Equal(2, records.Count);
+
+ for (var i = 1; i <= records.Count; i++)
+ {
+ var record = (TestRecord)records[i - 1];
+ Assert.Equal(i, record.IntColumn);
+ Assert.Equal("string column " + i, record.StringColumn);
+ Assert.Equal("test", record.TypeConvertedColumn);
+ Assert.Equal(i, record.FirstColumn);
+ Assert.Equal(guid, record.GuidColumn);
+ }
+ }
+
+ [Fact]
+ public void GetRecordsWithDuplicateHeaderNames()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ var headerData = new[]
+ {
+ "Column",
+ "Column",
+ "Column"
+ };
+
+ var csvParserMock = new ParserMock(config)
+ {
+ headerData,
+ { "one", "two", "three" },
+ { "one", "two", "three" },
+ };
+
+ var csv = new CsvReader(csvParserMock);
+ csv.Context.RegisterClassMap<TestRecordDuplicateHeaderNamesMap>();
+ var records = csv.GetRecords<TestRecordDuplicateHeaderNames>().ToList();
+
+ Assert.Equal(2, records.Count);
+
+ for (var i = 1; i <= records.Count; i++)
+ {
+ var record = records[i - 1];
+ Assert.Equal("one", record.Column1);
+ Assert.Equal("two", record.Column2);
+ Assert.Equal("three", record.Column3);
+ }
+ }
+
+ [Fact]
+ public void GetRecordEmptyFileWithHeaderOnTest()
+ {
+ var parserMock = new ParserMock
+ {
+ null,
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ try
+ {
+ csvReader.Read();
+ csvReader.ReadHeader();
+ csvReader.Read();
+ throw new XUnitException();
+ }
+ catch (ReaderException) { }
+ }
+
+ [Fact]
+ public void GetRecordEmptyValuesNullableTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+
+ writer.WriteLine("StringColumn,IntColumn,GuidColumn");
+ writer.WriteLine("one,1,11111111-1111-1111-1111-111111111111");
+ writer.WriteLine(",,");
+ writer.WriteLine("three,3,33333333-3333-3333-3333-333333333333");
+ writer.Flush();
+ stream.Position = 0;
+
+ var reader = new StreamReader(stream);
+ var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
+
+ csvReader.Read();
+ var record = csvReader.GetRecord<TestNullable>();
+ Assert.NotNull(record);
+ Assert.Equal("one", record.StringColumn);
+ Assert.Equal(1, record.IntColumn);
+ Assert.Equal(new Guid("11111111-1111-1111-1111-111111111111"), record.GuidColumn);
+
+ csvReader.Read();
+ record = csvReader.GetRecord<TestNullable>();
+ Assert.NotNull(record);
+ Assert.Equal(string.Empty, record.StringColumn);
+ Assert.Null(record.IntColumn);
+ Assert.Null(record.GuidColumn);
+
+ csvReader.Read();
+ record = csvReader.GetRecord<TestNullable>();
+ Assert.NotNull(record);
+ Assert.Equal("three", record.StringColumn);
+ Assert.Equal(3, record.IntColumn);
+ Assert.Equal(new Guid("33333333-3333-3333-3333-333333333333"), record.GuidColumn);
+ }
+
+ [Fact]
+ public void CaseInsensitiveHeaderMatchingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => args.Header.ToLower(),
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("One,Two,Three");
+ writer.WriteLine("1,2,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+
+ Assert.Equal("1", csv.GetField("one"));
+ Assert.Equal("2", csv.GetField("TWO"));
+ Assert.Equal("3", csv.GetField("ThreE"));
+ }
+ }
+
+ [Fact]
+ public void SpacesInHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => Regex.Replace(args.Header, @"\s", string.Empty),
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { " Int Column ", " String Column " },
+ { "1", "one" },
+ };
+ var reader = new CsvReader(parserMock);
+ var data = reader.GetRecords<TestDefaultValues>().ToList();
+ Assert.NotNull(data);
+ Assert.Single(data);
+ Assert.Equal(1, data[0].IntColumn);
+ Assert.Equal("one", data[0].StringColumn);
+ }
+
+ [Fact]
+ public void BooleanTypeConverterTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+
+ writer.WriteLine("BoolColumn,BoolNullableColumn,StringColumn");
+ writer.WriteLine("true,true,1");
+ writer.WriteLine("True,True,2");
+ writer.WriteLine("1,1,3");
+ writer.WriteLine("false,false,4");
+ writer.WriteLine("False,False,5");
+ writer.WriteLine("0,0,6");
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var reader = new StreamReader(stream);
+ var csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
+
+ var records = csvReader.GetRecords<TestBoolean>().ToList();
+
+ Assert.True(records[0].BoolColumn);
+ Assert.True(records[0].BoolNullableColumn);
+ Assert.True(records[1].BoolColumn);
+ Assert.True(records[1].BoolNullableColumn);
+ Assert.True(records[2].BoolColumn);
+ Assert.True(records[2].BoolNullableColumn);
+ Assert.False(records[3].BoolColumn);
+ Assert.False(records[3].BoolNullableColumn);
+ Assert.False(records[4].BoolColumn);
+ Assert.False(records[4].BoolNullableColumn);
+ Assert.False(records[5].BoolColumn);
+ Assert.False(records[5].BoolNullableColumn);
+ }
+
+ [Fact]
+ public void SkipEmptyRecordsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ ShouldSkipRecord = args => args.Row.Parser.Record.All(string.IsNullOrWhiteSpace),
+ };
+
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2", "3" },
+ { "", "", "" },
+ { "4", "5", "6" },
+ };
+
+ var reader = new CsvReader(parserMock);
+
+ reader.Read();
+ Assert.Equal("1", reader.Parser.Record[0]);
+ Assert.Equal("2", reader.Parser.Record[1]);
+ Assert.Equal("3", reader.Parser.Record[2]);
+
+ reader.Read();
+ Assert.Equal("4", reader.Parser.Record[0]);
+ Assert.Equal("5", reader.Parser.Record[1]);
+ Assert.Equal("6", reader.Parser.Record[2]);
+
+ Assert.False(reader.Read());
+ }
+
+ [Fact]
+ public void SkipRecordCallbackTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ ShouldSkipRecord = args => args.Row[1] == "2",
+ };
+
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "2", "3" },
+ { " ", "", "" },
+ { "4", "5", "6" },
+ };
+
+ var reader = new CsvReader(parserMock);
+
+ reader.Read();
+ Assert.Equal(" ", reader.Parser.Record[0]);
+ Assert.Equal("", reader.Parser.Record[1]);
+ Assert.Equal("", reader.Parser.Record[2]);
+
+ reader.Read();
+ Assert.Equal("4", reader.Parser.Record[0]);
+ Assert.Equal("5", reader.Parser.Record[1]);
+ Assert.Equal("6", reader.Parser.Record[2]);
+
+ Assert.False(reader.Read());
+ }
+
+ [Fact]
+ public void MultipleGetRecordsCalls()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("IntColumn,String Column");
+ writer.WriteLine("1,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ csvReader.Context.RegisterClassMap<TestRecordMap>();
+ var records = csvReader.GetRecords<TestRecord>();
+ Assert.Equal(2, records.Count());
+ Assert.Empty(records);
+ }
+ }
+
+ [Fact]
+ public void IgnoreExceptionsTest()
+ {
+ var callbackCount = 0;
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ReadingExceptionOccurred = (ex) =>
+ {
+ callbackCount++;
+ return false;
+ },
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "BoolColumn", "BoolNullableColumn", "StringColumn" },
+ { "1", "1", "one" },
+ { "two", "1", "two" },
+ { "1", "1", "three" },
+ { "four", "1", "four" },
+ { "1", "1", "five" },
+ };
+ var csv = new CsvReader(parserMock);
+
+ var records = csv.GetRecords<TestBoolean>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(3, records.Count);
+ Assert.Equal(2, callbackCount);
+ Assert.Equal("one", records[0].StringColumn);
+ Assert.Equal("three", records[1].StringColumn);
+ Assert.Equal("five", records[2].StringColumn);
+ }
+
+ [Fact]
+ public void ReadStructRecordsTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+ var csv = new CsvReader(parserMock);
+ var records = csv.GetRecords<TestStruct>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ Assert.Equal(2, records[1].Id);
+ Assert.Equal("two", records[1].Name);
+ }
+
+ [Fact]
+ public void WriteStructReferenceRecordsTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+ var csv = new CsvReader(parserMock);
+ csv.Context.RegisterClassMap<TestStructParentMap>();
+ var records = csv.GetRecords<TestStructParent>().ToList();
+ Assert.NotNull(records);
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Test.Id);
+ Assert.Equal("one", records[0].Test.Name);
+ }
+
+ [Fact]
+ public void ReadPrimitiveRecordsHasHeaderTrueTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ { "2" },
+ };
+ var csv = new CsvReader(parserMock);
+ var records = csv.GetRecords<int>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0]);
+ Assert.Equal(2, records[1]);
+ }
+
+ [Fact]
+ public void ReadPrimitiveRecordsHasHeaderFalseTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1" },
+ { "2" },
+ };
+ var csv = new CsvReader(parserMock);
+ var records = csv.GetRecords<int>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0]);
+ Assert.Equal(2, records[1]);
+ }
+
+ [Fact]
+ public void TrimHeadersTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ PrepareHeaderForMatch = args => args.Header.Trim(),
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { " one ", " two three " },
+ { "1", "2" },
+ };
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+ Assert.Equal("1", reader.GetField("one"));
+ Assert.Equal("2", reader.GetField("two three"));
+ Assert.Null(reader.GetField("twothree"));
+ }
+
+ [Fact]
+ public void RowTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csv = new CsvReader(parserMock);
+
+ csv.Read();
+ Assert.Equal(1, csv.Parser.Row);
+
+ csv.Read();
+ Assert.Equal(2, csv.Parser.Row);
+ }
+
+ [Fact]
+ public void DoNotIgnoreBlankLinesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ",",
+ IgnoreBlankLines = false,
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<SimpleMap>();
+
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine(",");
+ writer.WriteLine("");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<Simple>().ToList();
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ Assert.Null(records[1].Id);
+ Assert.Equal("", records[1].Name);
+ Assert.Null(records[2].Id);
+ Assert.Equal("", records[2].Name);
+ Assert.Equal(2, records[3].Id);
+ Assert.Equal("two", records[3].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteNestedHeadersTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ReferenceHeaderPrefix = args => $"{args.MemberName}.",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Simple1.Id,Simple1.Name,Simple2.Id,Simple2.Name");
+ writer.WriteLine("1,one,2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<Nested>().ToList();
+ Assert.NotNull(records);
+ Assert.Equal(1, records[0].Simple1.Id);
+ Assert.Equal("one", records[0].Simple1.Name);
+ Assert.Equal(2, records[0].Simple2.Id);
+ Assert.Equal("two", records[0].Simple2.Name);
+ }
+ }
+
+ [Fact]
+ public void ReaderDynamicHasHeaderTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ null
+ };
+
+ var csv = new CsvReader(parserMock);
+ csv.Read();
+ var row = csv.GetRecord<dynamic>();
+
+ Assert.Equal("1", row.Id);
+ Assert.Equal("one", row.Name);
+ }
+
+ [Fact]
+ public void ReaderDynamicNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+
+ var parserMock = new ParserMock(config)
+ {
+ { "1", "one" },
+ { "2", "two" },
+ null,
+ };
+
+ var csv = new CsvReader(parserMock);
+ csv.Read();
+ var row = csv.GetRecord<dynamic>();
+
+ Assert.Equal("1", row.Field1);
+ Assert.Equal("one", row.Field2);
+ }
+
+ [Fact]
+ public void TryGetFieldNotInHeaderTest() // https://github.com/JoshClose/CsvHelper/issues/1981
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "piz z/a"},
+ { "1", "one" },
+ { "Id" },
+ { "2" }
+ };
+ var csv = new CsvReader(parserMock);
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ csv.GetField<string>("piz z/a");
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+
+ Assert.False(csv.TryGetField<string>("piz z/a", out var tmp));
+ }
+ private class Nested
+ {
+ public Simple Simple1 { get; set; }
+
+ public Simple Simple2 { get; set; }
+ }
+
+ private class Simple
+ {
+ public int? Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class SimpleMap : ClassMap<Simple>
+ {
+ public SimpleMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+
+ private class TestStructParent
+ {
+ public TestStruct Test { get; set; }
+ }
+
+ private sealed class TestStructParentMap : ClassMap<TestStructParent>
+ {
+ public TestStructParentMap()
+ {
+ References<TestStructMap>(m => m.Test);
+ }
+ }
+
+ private struct TestStruct
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class TestStructMap : ClassMap<TestStruct>
+ {
+ public TestStructMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+
+ private class OnlyFields
+ {
+ public string Name;
+ }
+
+ private sealed class OnlyFieldsMap : ClassMap<OnlyFields>
+ {
+ public OnlyFieldsMap()
+ {
+ Map(m => m.Name);
+ }
+ }
+
+ private class TestBoolean
+ {
+ public bool BoolColumn { get; set; }
+
+ public bool BoolNullableColumn { get; set; }
+
+ public string StringColumn { get; set; }
+ }
+
+ private class TestDefaultValues
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+ }
+
+ private sealed class TestDefaultValuesMap : ClassMap<TestDefaultValues>
+ {
+ public TestDefaultValuesMap()
+ {
+ Map(m => m.IntColumn).Default(-1);
+ Map(m => m.StringColumn).Default((string)null);
+ }
+ }
+
+ private class TestNullable
+ {
+ public int? IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+
+ public Guid? GuidColumn { get; set; }
+ }
+
+ [DebuggerDisplay("IntColumn = {IntColumn}, StringColumn = {StringColumn}, IgnoredColumn = {IgnoredColumn}, TypeConvertedColumn = {TypeConvertedColumn}, FirstColumn = {FirstColumn}")]
+ private class TestRecord
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+
+ public string IgnoredColumn { get; set; }
+
+ public string TypeConvertedColumn { get; set; }
+
+ public int FirstColumn { get; set; }
+
+ public Guid GuidColumn { get; set; }
+
+ public int NoMatchingFields { get; set; }
+ }
+
+ private sealed class TestRecordMap : ClassMap<TestRecord>
+ {
+ public TestRecordMap()
+ {
+ Map(m => m.IntColumn).TypeConverter<Int32Converter>();
+ Map(m => m.StringColumn).Name("String Column");
+ Map(m => m.TypeConvertedColumn).Index(1).TypeConverter<TestTypeConverter>();
+ Map(m => m.FirstColumn).Index(0);
+ Map(m => m.GuidColumn);
+ Map(m => m.NoMatchingFields);
+ }
+ }
+
+ private class TestRecordDuplicateHeaderNames
+ {
+ public string Column1 { get; set; }
+
+ public string Column2 { get; set; }
+
+ public string Column3 { get; set; }
+ }
+
+ private sealed class TestRecordDuplicateHeaderNamesMap : ClassMap<TestRecordDuplicateHeaderNames>
+ {
+ public TestRecordDuplicateHeaderNamesMap()
+ {
+ Map(m => m.Column1).Name("Column").NameIndex(0);
+ Map(m => m.Column2).Name("Column").NameIndex(1);
+ Map(m => m.Column3).Name("Column").NameIndex(2);
+ }
+ }
+
+ private class TestTypeConverter : DefaultTypeConverter
+ {
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData propertyMapData)
+ {
+ return "test";
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterBoxedTypesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterBoxedTypesTests.cs
new file mode 100644
index 0000000..2064889
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterBoxedTypesTests.cs
@@ -0,0 +1,65 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterBoxedTypesTests
+ {
+ [Fact]
+ public void TypeMixedWithBoxedTypeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var recordsTyped = new List<A>
+ {
+ new A { Id = 1, Name = "one" },
+ };
+ var recordsBoxed = new List<object>
+ {
+ new A { Id = 2, Name = "two" },
+ };
+
+ csv.Context.RegisterClassMap<AMap>();
+ csv.WriteRecords(recordsTyped);
+ csv.WriteRecords(recordsBoxed);
+ writer.Flush();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("1,one");
+ expected.AppendLine("2,two");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+ }
+
+ public class A
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ public sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.Id).Index(0);
+ Map(m => m.Name).Index(1);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterConstructorTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterConstructorTests.cs
new file mode 100644
index 0000000..47a887b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterConstructorTests.cs
@@ -0,0 +1,28 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterConstructorTests
+ {
+ [Fact]
+ public void EnsureInternalsAreSetupWhenPassingWriterAndConfigTest()
+ {
+ using( var stream = new MemoryStream() )
+ using( var writer = new StreamWriter( stream ) )
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ using( var csv = new CsvWriter( writer, config ) )
+ {
+ Assert.Same( config, csv.Configuration );
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterFormatTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterFormatTests.cs
new file mode 100644
index 0000000..08a2c43
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterFormatTests.cs
@@ -0,0 +1,201 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterFormatTests
+ {
+ [Fact]
+ public void WriteFieldTest()
+ {
+ var record = new TestRecord
+ {
+ IntColumn = 1,
+ DateColumn = new DateTime(2012, 10, 1, 12, 12, 12),
+ DecimalColumn = 150.99m,
+ FirstColumn = "first column",
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, new CultureInfo("en-US"));
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "first column,0001,10/1/2012,$150.99\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteFieldShouldQuoteNoTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+
+ csv.WriteField("a \"b\" c", false);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "a \"b\" c\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteFieldShouldQuoteYesTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+
+ csv.WriteField("a \"b\" c", true);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "\"a \"\"b\"\" c\"\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordWithReferencesTest()
+ {
+ var record = new Person
+ {
+ FirstName = "First Name",
+ LastName = "Last Name",
+ Updated = new DateTime(2012, 10, 1, 12, 12, 12, 123),
+ HomeAddress = new Address
+ {
+ Street = "Home Street",
+ City = "Home City",
+ State = "Home State",
+ Zip = 02201,
+ },
+ WorkAddress = new Address
+ {
+ Street = "Work Street",
+ City = "Work City",
+ State = "Work State",
+ Zip = 04100,
+ }
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<PersonMap>();
+
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+
+ var expected = "First Name,Last Name,2012-10-01 12:12:12.123,Home Street,Home City,Home State,02201,Work Street,Work City,Work State,04100\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ private class TestRecord
+ {
+ public int IntColumn { get; set; }
+
+ public DateTime DateColumn { get; set; }
+
+ public decimal DecimalColumn { get; set; }
+
+ public string FirstColumn { get; set; }
+ }
+
+ private sealed class TestRecordMap : ClassMap<TestRecord>
+ {
+ public TestRecordMap()
+ {
+ Map(m => m.IntColumn).Name("Int Column").Index(1).TypeConverterOption.Format("0000");
+ Map(m => m.DateColumn).Index(2).TypeConverterOption.Format("d");
+ Map(m => m.DecimalColumn).Index(3).TypeConverterOption.Format("c");
+ Map(m => m.FirstColumn).Index(0);
+ }
+ }
+
+ private class Person
+ {
+ public string FirstName { get; set; }
+
+ public string LastName { get; set; }
+
+ public DateTime Updated { get; set; }
+
+ public Address HomeAddress { get; set; }
+
+ public Address WorkAddress { get; set; }
+ }
+
+ private class Address
+ {
+ public string Street { get; set; }
+
+ public string City { get; set; }
+
+ public string State { get; set; }
+
+ public int Zip { get; set; }
+ }
+
+ private sealed class PersonMap : ClassMap<Person>
+ {
+ public PersonMap()
+ {
+ Map(m => m.FirstName);
+ Map(m => m.LastName);
+ Map(m => m.Updated).TypeConverterOption.Format("yyyy-MM-dd HH:mm:ss.fff");
+ References<HomeAddressMap>(m => m.HomeAddress);
+ References<WorkAddressMap>(m => m.WorkAddress);
+ }
+ }
+
+ private sealed class HomeAddressMap : ClassMap<Address>
+ {
+ public HomeAddressMap()
+ {
+ Map(m => m.Street).Name("HomeStreet");
+ Map(m => m.City).Name("HomeCity");
+ Map(m => m.State).Name("HomeState");
+ Map(m => m.Zip).Name("HomeZip").TypeConverterOption.Format("00000");
+ }
+ }
+
+ private sealed class WorkAddressMap : ClassMap<Address>
+ {
+ public WorkAddressMap()
+ {
+ Map(m => m.Street).Name("WorkStreet");
+ Map(m => m.City).Name("WorkCity");
+ Map(m => m.State).Name("WorkState");
+ Map(m => m.Zip).Name("WorkZip").TypeConverterOption.Format("00000");
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterMappingTests.cs
new file mode 100644
index 0000000..82ddc1f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterMappingTests.cs
@@ -0,0 +1,350 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterMappingTests
+ {
+ [Fact]
+ public void WriteMultipleNamesTest()
+ {
+ var records = new List<MultipleNamesClass>
+ {
+ new MultipleNamesClass { IntColumn = 1, StringColumn = "one" },
+ new MultipleNamesClass { IntColumn = 2, StringColumn = "two" }
+ };
+
+ string csv;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csvWriter.Context.RegisterClassMap<MultipleNamesClassMap>();
+ csvWriter.WriteRecords(records);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ csv = reader.ReadToEnd();
+ }
+
+ var expected = string.Empty;
+ expected += "int1,string1\r\n";
+ expected += "1,one\r\n";
+ expected += "2,two\r\n";
+
+ Assert.NotNull(csv);
+ Assert.Equal(expected, csv);
+ }
+
+ [Fact]
+ public void SameNameMultipleTimesTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<SameNameMultipleTimesClass>
+ {
+ new SameNameMultipleTimesClass
+ {
+ Name1 = "1",
+ Name2 = "2",
+ Name3 = "3"
+ }
+ };
+ csv.Context.RegisterClassMap<SameNameMultipleTimesClassMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+ var expected = "ColumnName,ColumnName,ColumnName\r\n1,2,3\r\n";
+ Assert.Equal(expected, text);
+ }
+ }
+
+ [Fact]
+ public void ConvertUsingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ string result;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<TestClass>
+ {
+ new TestClass { IntColumn = 1 }
+ };
+
+ csv.Context.RegisterClassMap<ConvertUsingMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ result = reader.ReadToEnd();
+ }
+
+ Assert.Equal("Converted1\r\n", result);
+ }
+
+ [Fact]
+ public void ConvertUsingBlockTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ string result;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<TestClass>
+ {
+ new TestClass { IntColumn = 1 }
+ };
+
+ csv.Context.RegisterClassMap<ConvertUsingBlockMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ result = reader.ReadToEnd();
+ }
+
+ Assert.Equal("Converted1\r\n", result);
+ }
+
+ [Fact]
+ public void ConvertUsingConstantTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ string result;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<TestClass>
+ {
+ new TestClass { IntColumn = 1 }
+ };
+
+ csv.Context.RegisterClassMap<ConvertUsingConstantMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ result = reader.ReadToEnd();
+ }
+
+ Assert.Equal("Constant\r\n", result);
+ }
+
+
+ [Fact]
+ public void ConvertUsingNullTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";",
+ HasHeaderRecord = false,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<MultipleNamesClass>
+ {
+ new MultipleNamesClass { IntColumn = 1, StringColumn = "test" }
+ };
+
+ csv.Context.RegisterClassMap<ConvertUsingNullMap>();
+ csv.WriteRecords(records);
+
+ Assert.Equal(";test\r\n", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void ConvertUsingInstanceMethodTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ string result;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<TestClass>
+ {
+ new TestClass { IntColumn = 1 }
+ };
+
+ csv.Context.RegisterClassMap<ConvertUsingInstanceMethodMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ result = reader.ReadToEnd();
+ }
+
+ Assert.Equal("Converted1\r\n", result);
+ }
+
+ [Fact]
+ public void ConvertUsingStaticFunctionTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ string result;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<TestClass>
+ {
+ new TestClass { IntColumn = 1 }
+ };
+
+ csv.Context.RegisterClassMap<ConvertUsingStaticFunctionMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ result = reader.ReadToEnd();
+ }
+
+ Assert.Equal("Converted1\r\n", result);
+ }
+
+ private class SameNameMultipleTimesClass
+ {
+ public string Name1 { get; set; }
+
+ public string Name2 { get; set; }
+
+ public string Name3 { get; set; }
+ }
+
+ private sealed class SameNameMultipleTimesClassMap : ClassMap<SameNameMultipleTimesClass>
+ {
+ public SameNameMultipleTimesClassMap()
+ {
+ Map(m => m.Name1).Name("ColumnName").NameIndex(1);
+ Map(m => m.Name2).Name("ColumnName").NameIndex(2);
+ Map(m => m.Name3).Name("ColumnName").NameIndex(0);
+ }
+ }
+
+ private class MultipleNamesClass
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+ }
+
+ private sealed class MultipleNamesClassMap : ClassMap<MultipleNamesClass>
+ {
+ public MultipleNamesClassMap()
+ {
+ Map(m => m.IntColumn).Name("int1", "int2", "int3");
+ Map(m => m.StringColumn).Name("string1", "string2", "string3");
+ }
+ }
+
+ private class TestClass
+ {
+ public int IntColumn { get; set; }
+ }
+
+ private sealed class ConvertUsingMap : ClassMap<TestClass>
+ {
+ public ConvertUsingMap()
+ {
+ Map(m => m.IntColumn).Convert(args => $"Converted{args.Value.IntColumn}");
+ }
+ }
+
+ private sealed class ConvertUsingBlockMap : ClassMap<TestClass>
+ {
+ public ConvertUsingBlockMap()
+ {
+ Map(m => m.IntColumn).Convert(args =>
+ {
+ var x = "Converted";
+ x += args.Value.IntColumn;
+ return x;
+ });
+ }
+ }
+
+ private sealed class ConvertUsingConstantMap : ClassMap<TestClass>
+ {
+ public ConvertUsingConstantMap()
+ {
+ Map(m => m.IntColumn).Convert(m => "Constant");
+ }
+ }
+
+ private sealed class ConvertUsingNullMap : ClassMap<MultipleNamesClass>
+ {
+ public ConvertUsingNullMap()
+ {
+ Map(m => m.IntColumn).Convert(m => (string)null);
+ Map(m => m.StringColumn).Convert(args => args.Value.StringColumn);
+ }
+ }
+
+ private sealed class ConvertUsingInstanceMethodMap : ClassMap<TestClass>
+ {
+ public ConvertUsingInstanceMethodMap()
+ {
+ Map(m => m.IntColumn).Convert(ConvertToStringFunction);
+ }
+
+ private string ConvertToStringFunction(ConvertToStringArgs<TestClass> args)
+ {
+ return $"Converted{args.Value.IntColumn}";
+ }
+ }
+
+ private sealed class ConvertUsingStaticFunctionMap : ClassMap<TestClass>
+ {
+ public ConvertUsingStaticFunctionMap()
+ {
+ Map(m => m.IntColumn).Convert(ConvertToStringFunction);
+ }
+
+ private static string ConvertToStringFunction(ConvertToStringArgs<TestClass> args)
+ {
+ return $"Converted{args.Value.IntColumn}";
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingPrefixTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingPrefixTests.cs
new file mode 100644
index 0000000..45a5243
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingPrefixTests.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterReferenceMappingPrefixTests
+ {
+ [Fact]
+ public void ReferencesWithPrefixTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<AMap>();
+
+ var list = new List<A>();
+ for (var i = 0; i < 4; i++)
+ {
+ var row = i + 1;
+ list.Add(new A
+ {
+ Id = "a" + row,
+ B = new B
+ {
+ Id = "b" + row,
+ C = new C
+ {
+ Id = "c" + row
+ }
+ }
+ });
+ }
+
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,BPrefix_Id,C.CId");
+ expected.AppendLine("a1,b1,c1");
+ expected.AppendLine("a2,b2,c2");
+ expected.AppendLine("a3,b3,c3");
+ expected.AppendLine("a4,b4,c4");
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ private class A
+ {
+ public string Id { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string Id { get; set; }
+
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string Id { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.Id);
+ References<BMap>(m => m.B).Prefix("BPrefix_", false);
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap()
+ {
+ Map(m => m.Id);
+ References<CMap>(m => m.C).Prefix();
+ }
+ }
+
+ private sealed class CMap : ClassMap<C>
+ {
+ public CMap()
+ {
+ Map(m => m.Id).Name("CId");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingTests.cs
new file mode 100644
index 0000000..4a0053f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterReferenceMappingTests.cs
@@ -0,0 +1,156 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterReferenceMappingTests
+ {
+ [Fact]
+ public void NestedReferencesTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<AMap>();
+
+ var list = new List<A>();
+ for (var i = 0; i < 4; i++)
+ {
+ var row = i + 1;
+ list.Add(
+ new A
+ {
+ Id = "a" + row,
+ B = new B
+ {
+ Id = "b" + row,
+ C = new C
+ {
+ Id = "c" + row,
+ D = new D
+ {
+ Id = "d" + row
+ }
+ }
+ }
+ });
+ };
+
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("AId,BId,CId,DId");
+ expected.AppendLine("a1,b1,c1,d1");
+ expected.AppendLine("a2,b2,c2,d2");
+ expected.AppendLine("a3,b3,c3,d3");
+ expected.AppendLine("a4,b4,c4,d4");
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ [Fact]
+ public void NullReferenceTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<AMap>();
+
+ var list = new List<A>
+ {
+ new A
+ {
+ Id = "1",
+ }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("AId,BId,CId,DId");
+ expected.AppendLine("1,,,");
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ private class A
+ {
+ public string Id { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string Id { get; set; }
+
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string Id { get; set; }
+
+ public D D { get; set; }
+ }
+
+ private class D
+ {
+ public string Id { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.Id).Name("AId");
+ References<BMap>(m => m.B);
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap()
+ {
+ Map(m => m.Id).Name("BId");
+ References<CMap>(m => m.C);
+ }
+ }
+
+ private sealed class CMap : ClassMap<C>
+ {
+ public CMap()
+ {
+ Map(m => m.Id).Name("CId");
+ References<DMap>(m => m.D);
+ }
+ }
+
+ private sealed class DMap : ClassMap<D>
+ {
+ public DMap()
+ {
+ Map(m => m.Id).Name("DId");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterSubClassingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterSubClassingTests.cs
new file mode 100644
index 0000000..fcd4241
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterSubClassingTests.cs
@@ -0,0 +1,42 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterSubClassingTests
+ {
+ [Fact]
+ public void WriteRecordTest()
+ {
+ var data = new List<Test>
+ {
+ new Test { Id = 1, Name = "one" },
+ new Test { Id = 2, Name = "two" }
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream);
+ var csvWriter = new MyCsvWriter(writer);
+
+ csvWriter.WriteRecords(data);
+ }
+
+ private class MyCsvWriter : CsvWriter
+ {
+ public MyCsvWriter(TextWriter writer) : base(writer, CultureInfo.InvariantCulture) { }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterTests.cs
new file mode 100644
index 0000000..2309ef7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/CsvWriterTests.cs
@@ -0,0 +1,1030 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Int32Converter = CsvHelper.TypeConversion.Int32Converter;
+using System.Dynamic;
+using Xunit;
+using System.Threading;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvWriterTests
+ {
+ public CsvWriterTests()
+ {
+ Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
+ }
+
+ [Fact]
+ public void WriteFieldTest()
+ {
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+
+ var date = DateTime.Now.ToString();
+ var guid = Guid.NewGuid().ToString();
+ csv.WriteField("one");
+ csv.WriteField("one, two");
+ csv.WriteField("one \"two\" three");
+ csv.WriteField(" one ");
+ csv.WriteField(date);
+ csv.WriteField((short)1);
+ csv.WriteField(2);
+ csv.WriteField((long)3);
+ csv.WriteField((float)4);
+ csv.WriteField((double)5);
+ csv.WriteField(guid);
+ csv.NextRecord();
+
+ var reader = new StreamReader(stream);
+ stream.Position = 0;
+ var data = reader.ReadToEnd();
+
+ Assert.Equal("one,\"one, two\",\"one \"\"two\"\" three\",\" one \"," + date + ",1,2,3,4,5," + guid + "\r\n", data);
+ }
+
+ [Fact]
+ public void WriteRecordTest()
+ {
+ var record = new TestRecord
+ {
+ IntColumn = 1,
+ StringColumn = "string column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first column",
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "first column,1,string column,test\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordNoIndexesTest()
+ {
+ var record = new TestRecordNoIndexes
+ {
+ IntColumn = 1,
+ StringColumn = "string column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first column",
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream) { AutoFlush = true })
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<TestRecordNoIndexesMap>();
+
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+
+ var expected = "1,string column,first column,test\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsTest()
+ {
+ var records = new List<TestRecord>
+ {
+ new TestRecord
+ {
+ IntColumn = 1,
+ StringColumn = "string column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first column",
+ },
+ new TestRecord
+ {
+ IntColumn = 2,
+ StringColumn = "string column 2",
+ IgnoredColumn = "ignored column 2",
+ FirstColumn = "first column 2",
+ },
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ csv.WriteRecords(records);
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "FirstColumn,Int Column,StringColumn,TypeConvertedColumn\r\n";
+ expected += "first column,1,string column,test\r\n";
+ expected += "first column 2,2,string column 2,test\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteEmptyArrayTest()
+ {
+ var records = new TestRecord[] { };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ csv.WriteRecords(records);
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "FirstColumn,Int Column,StringColumn,TypeConvertedColumn\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordsCalledWithTwoParametersTest()
+ {
+ var records = new List<object>
+ {
+ new TestRecord
+ {
+ IntColumn = 1,
+ StringColumn = "string column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first column",
+ },
+ new TestRecord
+ {
+ IntColumn = 2,
+ StringColumn = "string column 2",
+ IgnoredColumn = "ignored column 2",
+ FirstColumn = "first column 2",
+ },
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ csv.WriteRecords(records);
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = "FirstColumn,Int Column,StringColumn,TypeConvertedColumn\r\n";
+ expected += "first column,1,string column,test\r\n";
+ expected += "first column 2,2,string column 2,test\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, config);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+ csv.WriteRecord(new TestRecord());
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+
+ Assert.Equal(",0,,test\r\n", csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordWithNullRecordTest()
+ {
+ var record = new TestRecord
+ {
+ IntColumn = 1,
+ StringColumn = "string column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first column",
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ csv.WriteRecord((TestRecord)null);
+ csv.NextRecord();
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("first column,1,string column,test");
+ expected.AppendLine(",,,");
+ expected.AppendLine("first column,1,string column,test");
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordWithReferencesTest()
+ {
+ var record = new Person
+ {
+ FirstName = "First Name",
+ LastName = "Last Name",
+ HomeAddress = new Address
+ {
+ Street = "Home Street",
+ City = "Home City",
+ State = "Home State",
+ Zip = "Home Zip",
+ },
+ WorkAddress = new Address
+ {
+ Street = "Work Street",
+ City = "Work City",
+ State = "Work State",
+ Zip = "Work Zip",
+ }
+ };
+
+ var stream = new MemoryStream();
+ var writer = new StreamWriter(stream) { AutoFlush = true };
+ var csv = new CsvWriter(writer, CultureInfo.InvariantCulture);
+ csv.Context.RegisterClassMap<PersonMap>();
+
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ stream.Position = 0;
+ var reader = new StreamReader(stream);
+ var csvFile = reader.ReadToEnd();
+
+ var expected = "First Name,Last Name,Home Street,Home City,Home State,Home Zip,Work Street,Work City,Work State,Work Zip\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ [Fact]
+ public void WriteRecordsAllFieldsQuotedTest()
+ {
+ var record = new TestRecord
+ {
+ IntColumn = 1,
+ StringColumn = "string column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first column",
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = _ => true,
+ };
+
+ string csv;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ csvWriter.Context.RegisterClassMap<TestRecordMap>();
+ csvWriter.WriteRecord(record);
+ csvWriter.NextRecord();
+
+ writer.Flush();
+ stream.Position = 0;
+
+ csv = reader.ReadToEnd();
+ }
+
+ var expected = "\"first column\",\"1\",\"string column\",\"test\"\r\n";
+
+ Assert.Equal(expected, csv);
+ }
+
+ [Fact]
+ public void WriteRecordsNoFieldsQuotedTest()
+ {
+ var record = new TestRecord
+ {
+ IntColumn = 1,
+ StringColumn = "string \" column",
+ IgnoredColumn = "ignored column",
+ FirstColumn = "first, column",
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = _ => false,
+ };
+ string csv;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ csvWriter.Context.RegisterClassMap<TestRecordMap>();
+ csvWriter.WriteRecord(record);
+ csvWriter.NextRecord();
+
+ writer.Flush();
+ stream.Position = 0;
+
+ csv = reader.ReadToEnd();
+ }
+
+ var expected = "first, column,1,string \" column,test\r\n";
+
+ Assert.Equal(expected, csv);
+ }
+
+ [Fact]
+ public void WriteHeaderTest()
+ {
+ string csv;
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csvWriter.Context.RegisterClassMap<TestRecordMap>();
+ csvWriter.WriteHeader(typeof(TestRecord));
+ csvWriter.NextRecord();
+
+ writer.Flush();
+ stream.Position = 0;
+
+ csv = reader.ReadToEnd();
+ }
+
+ const string Expected = "FirstColumn,Int Column,StringColumn,TypeConvertedColumn\r\n";
+ Assert.Equal(Expected, csv);
+ }
+
+ [Fact]
+ public void WriteRecordWithDelimiterInFieldTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var record = new TestSinglePropertyRecord
+ {
+ Name = "one,two"
+ };
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("\"one,two\"\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordWithQuoteInFieldTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var record = new TestSinglePropertyRecord
+ {
+ Name = "one\"two"
+ };
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("\"one\"\"two\"\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordWithQuoteAllFieldsOnAndDelimiterInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = _ => true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var record = new TestSinglePropertyRecord
+ {
+ Name = "one,two"
+ };
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("\"one,two\"\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordWithQuoteAllFieldsOnAndQuoteInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = _ => true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var record = new TestSinglePropertyRecord
+ {
+ Name = "one\"two"
+ };
+ csv.WriteRecord(record);
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("\"one\"\"two\"\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsWithInvariantCultureTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<TestRecordMap>();
+
+ var record = new TestRecord
+ {
+ IntColumn = 1,
+ FirstColumn = "first column",
+ IgnoredColumn = "ignored column",
+ StringColumn = "string column",
+ };
+
+ csv.WriteRecord(record);
+ writer.Flush();
+ stream.Position = 0;
+
+ var csvString = reader.ReadToEnd();
+ }
+ }
+
+ [Fact]
+ public void WriteNoGetterTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<TestPrivateGet>
+ {
+ new TestPrivateGet
+ {
+ Id = 1,
+ Name = "one"
+ }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecord(new { Id = 1, Name = "one" });
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+ Assert.Equal("1,one\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WritePrimitivesRecordsHasHeaderTrueTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<int> { 1, 2, 3 };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("1\r\n2\r\n3\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WritePrimitivesRecordsHasHeaderFalseTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<int> { 1, 2, 3 };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("1\r\n2\r\n3\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteStructRecordsTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<TestStruct>
+ {
+ new TestStruct { Id = 1, Name = "one" },
+ new TestStruct { Id = 2, Name = "two" },
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+
+ Assert.Equal("Id,Name\r\n1,one\r\n2,two\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteStructReferenceRecordsTest()
+ {
+ var list = new List<TestStructParent>
+ {
+ new TestStructParent
+ {
+ Test = new TestStruct
+ {
+ Id = 1,
+ Name = "one",
+ },
+ },
+ };
+
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<TestStructParentMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ Assert.Equal("Id,Name\r\n1,one\r\n", data);
+ }
+ }
+
+ [Fact]
+ public void WriteNestedHeadersTest()
+ {
+ var list = new List<Person>
+ {
+ new Person
+ {
+ FirstName = "first",
+ LastName = "last",
+ HomeAddress = new Address
+ {
+ City = "home city",
+ State = "home state",
+ Street = "home street",
+ Zip = "home zip",
+ },
+ WorkAddress = new Address
+ {
+ City = "work city",
+ State = "work state",
+ Street = "work street",
+ Zip = "work zip",
+ },
+ },
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ReferenceHeaderPrefix = args => $"{args.MemberName}."
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("FirstName,LastName,HomeAddress.Street,HomeAddress.City,HomeAddress.State,HomeAddress.Zip,WorkAddress.Street,WorkAddress.City,WorkAddress.State,WorkAddress.Zip");
+ expected.AppendLine("first,last,home street,home city,home state,home zip,work street,work city,work state,work zip");
+ Assert.Equal(expected.ToString(), text);
+ }
+ }
+
+ [Fact]
+ public void WriteEmptyListTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<TestRecord>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ Assert.False(string.IsNullOrWhiteSpace(data));
+ }
+ }
+
+ [Fact]
+ public void ClassWithStaticAutoMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ TestWithStatic.Name = "one";
+ var records = new List<TestWithStatic>
+ {
+ new TestWithStatic
+ {
+ Id = 1
+ },
+ };
+
+ csv.WriteRecords(records);
+ }
+ }
+
+ [Fact]
+ public void ClassWithStaticUsingMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<TestWithStaticMap>();
+
+ TestWithStatic.Name = "one";
+ var records = new List<TestWithStatic>
+ {
+ new TestWithStatic
+ {
+ Id = 1
+ },
+ };
+
+ csv.WriteRecords(records);
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicListTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<dynamic>();
+ dynamic record = new { Id = 1, Name = "one" };
+ list.Add(record);
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+ Assert.Equal("Id,Name\r\n1,one\r\n", text);
+ }
+ }
+
+ [Fact]
+ public void WriteExpandoListTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<dynamic>();
+ dynamic record = new ExpandoObject();
+ record.Id = 1;
+ record.Name = "one";
+ list.Add(record);
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+ Assert.Equal("Id,Name\r\n1,one\r\n", text);
+ }
+ }
+
+
+ [Fact]
+ public void WriteInternalConstructorClassTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(new List<GetOnly>());
+ writer.Flush();
+ stream.Position = 0;
+
+ var text = reader.ReadToEnd();
+ Assert.Equal("One\r\n", text);
+ }
+ }
+
+ private class GetOnly
+ {
+ internal GetOnly(string someParam)
+ {
+ }
+
+ public int One { get; }
+ }
+
+ private class TestWithStatic
+ {
+ public int Id { get; set; }
+
+ public static string Name { get; set; }
+ }
+
+ private sealed class TestWithStaticMap : ClassMap<TestWithStatic>
+ {
+ public TestWithStaticMap()
+ {
+ Map(m => m.Id);
+ }
+ }
+
+ private class TestStructParent
+ {
+ public TestStruct Test { get; set; }
+ }
+
+ private sealed class TestStructParentMap : ClassMap<TestStructParent>
+ {
+ public TestStructParentMap()
+ {
+ References<TestStructMap>(m => m.Test);
+ }
+ }
+
+ private struct TestStruct
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class TestStructMap : ClassMap<TestStruct>
+ {
+ public TestStructMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+
+ private class TestPrivateGet
+ {
+ public int Id { get; set; }
+
+ public string Name { private get; set; }
+ }
+
+ private class TestSinglePropertyRecord
+ {
+ public string Name { get; set; }
+ }
+
+ private class TestRecord
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+
+ public string IgnoredColumn { get; set; }
+
+ public string FirstColumn { get; set; }
+
+ public string TypeConvertedColumn { get; set; }
+ }
+
+ private sealed class TestRecordMap : ClassMap<TestRecord>
+ {
+ public TestRecordMap()
+ {
+ Map(m => m.IntColumn).Name("Int Column").Index(1).TypeConverter<Int32Converter>();
+ Map(m => m.StringColumn);
+ Map(m => m.FirstColumn).Index(0);
+ Map(m => m.TypeConvertedColumn).TypeConverter<TestTypeConverter>();
+ }
+ }
+
+ private class TestRecordNoIndexes
+ {
+ public int IntColumn { get; set; }
+
+ public string StringColumn { get; set; }
+
+ public string IgnoredColumn { get; set; }
+
+ public string FirstColumn { get; set; }
+
+ public string TypeConvertedColumn { get; set; }
+ }
+
+ private sealed class TestRecordNoIndexesMap : ClassMap<TestRecordNoIndexes>
+ {
+ public TestRecordNoIndexesMap()
+ {
+ Map(m => m.IntColumn).Name("Int Column").TypeConverter<Int32Converter>();
+ Map(m => m.StringColumn);
+ Map(m => m.FirstColumn);
+ Map(m => m.TypeConvertedColumn).TypeConverter<TestTypeConverter>();
+ }
+ }
+
+ private class TestTypeConverter : ITypeConverter
+ {
+ public string ConvertToString(object value, IWriterRow row, MemberMapData propertyMapData)
+ {
+ return "test";
+ }
+
+ public object ConvertFromString(string text, IReaderRow row, MemberMapData propertyMapData)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool CanConvertFrom(Type type)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool CanConvertTo(Type type)
+ {
+ return true;
+ }
+ }
+
+ private class Person
+ {
+ public string FirstName { get; set; }
+
+ public string LastName { get; set; }
+
+ public Address HomeAddress { get; set; }
+
+ public Address WorkAddress { get; set; }
+ }
+
+ private class Address
+ {
+ public string Street { get; set; }
+
+ public string City { get; set; }
+
+ public string State { get; set; }
+
+ public string Zip { get; set; }
+ }
+
+ private sealed class PersonMap : ClassMap<Person>
+ {
+ public PersonMap()
+ {
+ Map(m => m.FirstName);
+ Map(m => m.LastName);
+ References<HomeAddressMap>(m => m.HomeAddress);
+ References<WorkAddressMap>(m => m.WorkAddress);
+ }
+ }
+
+ private sealed class HomeAddressMap : ClassMap<Address>
+ {
+ public HomeAddressMap()
+ {
+ Map(m => m.Street).Name("HomeStreet");
+ Map(m => m.City).Name("HomeCity");
+ Map(m => m.State).Name("HomeState");
+ Map(m => m.Zip).Name("HomeZip");
+ }
+ }
+
+ private sealed class WorkAddressMap : ClassMap<Address>
+ {
+ public WorkAddressMap()
+ {
+ Map(m => m.Street).Name("WorkStreet");
+ Map(m => m.City).Name("WorkCity");
+ Map(m => m.State).Name("WorkState");
+ Map(m => m.Zip).Name("WorkZip");
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs
new file mode 100644
index 0000000..05997bc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Culture/TypeConverterOptionsFactoryTests.cs
@@ -0,0 +1,229 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.Culture
+{
+
+ public class TypeConverterOptionsFactoryTests
+ {
+ [Fact]
+ public void AddGetRemoveTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var customOptions = new TypeConverterOptions
+ {
+ Formats = new string[] { "custom" },
+ };
+ context.TypeConverterOptionsCache.AddOptions<string>(customOptions);
+ var options = context.TypeConverterOptionsCache.GetOptions<string>();
+
+ Assert.Equal(customOptions.Formats, options.Formats);
+
+ context.TypeConverterOptionsCache.RemoveOptions<string>();
+
+ options = context.TypeConverterOptionsCache.GetOptions<string>();
+
+ Assert.NotEqual(customOptions.Formats, options.Formats);
+ }
+
+ [Fact]
+ public void GetFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("\"1,234\",\"5,678\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands };
+ csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvReader.Read();
+ Assert.Equal(1234, csvReader.GetField<int>(0));
+ Assert.Equal(5678, csvReader.GetField(typeof(int), 1));
+ }
+ }
+
+ [Fact]
+ public void GetFieldSwitchCulturesTest()
+ {
+ GetFieldForCultureTest("\"1234,32\",\"5678,44\"", "fr-FR", 1234.32M, 5678.44M);
+ GetFieldForCultureTest("\"9876.54\",\"3210.98\"", "en-GB", 9876.54M, 3210.98M);
+ GetFieldForCultureTest("\"4455,6677\",\"9988,77\"", "el-GR", 4455.6677M, 9988.77M);
+ }
+
+ private static void GetFieldForCultureTest(string csvText, string culture, decimal expected1, decimal expected2)
+ {
+ var config = new CsvConfiguration(new CultureInfo(culture))
+ {
+ HasHeaderRecord = false,
+ Delimiter = ",",
+ };
+ using (var reader = new StringReader(csvText))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ csvReader.Read();
+ Assert.Equal(expected1, csvReader.GetField<decimal>(0));
+ Assert.Equal(expected2, csvReader.GetField(typeof(decimal), 1));
+ }
+ }
+
+ [Fact]
+ public void GetRecordsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("\"1,234\",\"5,678\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands };
+ csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvReader.GetRecords<Test>().ToList();
+ }
+ }
+
+ [Fact]
+ public void GetRecordsAppliedWhenMappedTest()
+ {
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("\"1,234\",\"$5,678\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands };
+ csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvReader.Context.RegisterClassMap<TestMap>();
+ csvReader.GetRecords<Test>().ToList();
+ }
+ }
+
+ [Fact]
+ public void WriteFieldTest()
+ {
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ var options = new TypeConverterOptions { Formats = new string[] { "c" } };
+ csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvWriter.WriteField(1234);
+ csvWriter.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+ var record = reader.ReadToEnd();
+
+ Assert.Equal("\"$1,234.00\"\r\n", record);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsTest()
+ {
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Number = 1234, NumberOverridenInMap = 5678 },
+ };
+ var options = new TypeConverterOptions { Formats = new string[] { "c" } };
+ csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvWriter.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+ var record = reader.ReadToEnd();
+
+ Assert.Equal("\"$1,234.00\",\"$5,678.00\"\r\n", record);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsAppliedWhenMappedTest()
+ {
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Number = 1234, NumberOverridenInMap = 5678 },
+ };
+ var options = new TypeConverterOptions { Formats = new string[] { "c" } };
+ csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvWriter.Context.RegisterClassMap<TestMap>();
+ csvWriter.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+ var record = reader.ReadToEnd();
+
+ Assert.Equal("\"$1,234.00\",\"5,678.00\"\r\n", record);
+ }
+ }
+
+ private class Test
+ {
+ public int Number { get; set; }
+
+ public int NumberOverridenInMap { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Number);
+ Map(m => m.NumberOverridenInMap)
+ .TypeConverterOption.NumberStyles(NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol)
+ .TypeConverterOption.Format("N2");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DataTableTests/CsvDataReaderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DataTableTests/CsvDataReaderTests.cs
new file mode 100644
index 0000000..726862b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DataTableTests/CsvDataReaderTests.cs
@@ -0,0 +1,509 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.DataTableTests
+{
+
+ public class CsvDataReaderTests
+ {
+ [Fact]
+ public void GetValuesTest()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Boolean,Byte,Bytes,Char,Chars,DateTime,Decimal,Double,Float,Guid,Short,Int,Long,Null");
+ s.AppendLine("true,1,0x0102,a,ab,1/1/2019,1.23,4.56,7.89,eca0c8c6-9a2a-4e6c-8599-3561abda13f1,1,2,3,null");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");
+ var dataReader = new CsvDataReader(csv);
+ dataReader.Read();
+
+ Assert.True(dataReader.GetBoolean(0));
+ Assert.Equal(1, dataReader.GetByte(1));
+
+ byte[] byteBuffer = new byte[2];
+ dataReader.GetBytes(2, 0, byteBuffer, 0, byteBuffer.Length);
+ Assert.Equal(0x1, byteBuffer[0]);
+ Assert.Equal(0x2, byteBuffer[1]);
+
+ Assert.Equal('a', dataReader.GetChar(3));
+
+ char[] charBuffer = new char[2];
+ dataReader.GetChars(4, 0, charBuffer, 0, charBuffer.Length);
+ Assert.Equal('a', charBuffer[0]);
+ Assert.Equal('b', charBuffer[1]);
+
+ Assert.Throws<NotSupportedException>(() => dataReader.GetData(0));
+ Assert.Equal(DateTime.Parse("1/1/2019"), dataReader.GetDateTime(5));
+ Assert.Equal(typeof(string).Name, dataReader.GetDataTypeName(0));
+ Assert.Equal(1.23m, dataReader.GetDecimal(6));
+ Assert.Equal(4.56d, dataReader.GetDouble(7));
+ Assert.Equal(typeof(string), dataReader.GetFieldType(0));
+ Assert.Equal(7.89f, dataReader.GetFloat(8));
+ Assert.Equal(Guid.Parse("eca0c8c6-9a2a-4e6c-8599-3561abda13f1"), dataReader.GetGuid(9));
+ Assert.Equal(1, dataReader.GetInt16(10));
+ Assert.Equal(2, dataReader.GetInt32(11));
+ Assert.Equal(3, dataReader.GetInt64(12));
+ Assert.Equal("Boolean", dataReader.GetName(0));
+ Assert.Equal(0, dataReader.GetOrdinal("Boolean"));
+
+ Assert.Equal("true", dataReader.GetString(0));
+ Assert.Equal("true", dataReader.GetValue(0));
+
+ var objectBuffer = new object[14];
+ dataReader.GetValues(objectBuffer);
+ Assert.Equal("true", objectBuffer[0]);
+ Assert.Equal(DBNull.Value, objectBuffer[13]);
+ Assert.True(dataReader.IsDBNull(13));
+ }
+ }
+
+ [Fact]
+ public void GetSchemaTableTest()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Id,Name");
+ s.AppendLine("1,one");
+ s.AppendLine("2,two");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var dataReader = new CsvDataReader(csv);
+
+ var schemaTable = dataReader.GetSchemaTable();
+ Assert.Equal(25, schemaTable.Columns.Count);
+ Assert.Equal(2, schemaTable.Rows.Count);
+ }
+ }
+
+ [Fact]
+ public void DataTableLoadTest()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Id,Name");
+ s.AppendLine("1,one");
+ s.AppendLine("2,two");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var dataReader = new CsvDataReader(csv);
+
+ var dataTable = new DataTable();
+ dataTable.Columns.Add("Id", typeof(int));
+ dataTable.Columns.Add("Name", typeof(string));
+
+ dataTable.Load(dataReader);
+
+ Assert.Equal(2, dataTable.Rows.Count);
+ Assert.Equal(1, dataTable.Rows[0]["Id"]);
+ Assert.Equal("one", dataTable.Rows[0]["Name"]);
+ Assert.Equal(2, dataTable.Rows[1]["Id"]);
+ Assert.Equal("two", dataTable.Rows[1]["Name"]);
+ }
+ }
+
+ [Fact]
+ public void DataTableLoadHeaderAndRowsHaveDifferentLengthTest()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Id,Name");
+ s.AppendLine("1,one,a");
+ s.AppendLine("2,two,b");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var dataReader = new CsvDataReader(csv);
+
+ var dataTable = new DataTable();
+ dataTable.Columns.Add("Id", typeof(int));
+ dataTable.Columns.Add("Name", typeof(string));
+
+ dataTable.Load(dataReader);
+
+ Assert.Equal(2, dataTable.Rows.Count);
+ Assert.Equal(1, dataTable.Rows[0]["Id"]);
+ Assert.Equal("one", dataTable.Rows[0]["Name"]);
+ Assert.Equal(2, dataTable.Rows[1]["Id"]);
+ Assert.Equal("two", dataTable.Rows[1]["Name"]);
+ }
+ }
+
+ [Fact]
+ public void DataTableLoadNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var s = new StringBuilder();
+ s.AppendLine("1,one");
+ s.AppendLine("2,two");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var dataReader = new CsvDataReader(csv);
+
+ var dataTable = new DataTable();
+
+ dataTable.Load(dataReader);
+
+ Assert.Equal(0, dataTable.Rows.Count);
+ }
+ }
+
+ [Fact]
+ public void ReadWithNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var s = new StringBuilder();
+ s.AppendLine("1,one");
+ s.AppendLine("2,two");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var dataReader = new CsvDataReader(csv);
+
+ dataReader.Read();
+ Assert.Equal(1, dataReader.GetInt32(0));
+ Assert.Equal("one", dataReader.GetString(1));
+
+ dataReader.Read();
+ Assert.Equal(2, dataReader.GetInt32(0));
+ Assert.Equal("two", dataReader.GetString(1));
+ }
+ }
+
+ [Fact]
+ public void IsNullTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var s = new StringBuilder();
+ s.AppendLine(",null");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");
+
+ var dataReader = new CsvDataReader(csv);
+ Assert.False(dataReader.IsDBNull(0));
+ Assert.True(dataReader.IsDBNull(1));
+ }
+ }
+
+ [Fact]
+ public void DbNullTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var s = new StringBuilder();
+ s.AppendLine(",null");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");
+
+ var dataReader = new CsvDataReader(csv);
+ Assert.Equal(string.Empty, dataReader.GetValue(0));
+ Assert.Equal(DBNull.Value, dataReader.GetValue(1));
+
+ var values = new object[2];
+ dataReader.GetValues(values);
+ Assert.Equal(string.Empty, values[0]);
+ Assert.Equal(DBNull.Value, values[1]);
+ }
+ }
+
+ [Fact]
+ public void GetOrdinalCaseInsensitiveTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ null,
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ using (var dr = new CsvDataReader(csv))
+ {
+ var ordinal = dr.GetOrdinal("name");
+
+ Assert.Equal(1, ordinal);
+ }
+ }
+ }
+
+ [Fact]
+ public void GetOrdinalMissingTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ null,
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ using (var dr = new CsvDataReader(csv))
+ {
+ Assert.Throws<IndexOutOfRangeException>(() =>
+ {
+ dr.GetOrdinal("Foo");
+ });
+ }
+ }
+ }
+
+ [Fact]
+ public void DataTableLoadEmptyTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StringReader(string.Empty))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var dataReader = new CsvDataReader(csv);
+ Assert.Equal(0, dataReader.FieldCount);
+ }
+ }
+
+ [Fact]
+ public void DataTableNullableValueTypeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var parser = new ParserMock(config)
+ {
+ { "Id", "Name", "DateTime" },
+ { "1", "one", DateTime.Now.ToString() },
+ };
+ using (var csv = new CsvReader(parser))
+ using (var dr = new CsvDataReader(csv))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("");
+
+ var table = new DataTable();
+ table.Columns.Add("Id", typeof(int));
+ table.Columns.Add("Name", typeof(string));
+ var column = table.Columns.Add("DateTime", typeof(DateTime));
+ column.AllowDBNull = true;
+
+ table.Load(dr);
+ }
+ }
+
+ [Theory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public void GetDataTypeNameTest(bool useDefaultSchema)
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Boolean,Byte,Int,Decimal,Double,DateTime,String,Guid");
+ s.AppendLine("true,1,2,4.56,7.89,2/17/2022,foo,eca0c8c6-9a2a-4e6c-8599-3561abda13f1");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ if (useDefaultSchema)
+ {
+ var dataReader = new CsvDataReader(csv);
+ dataReader.Read();
+ for (var i = 0; i < dataReader.FieldCount; ++i)
+ {
+ Assert.Equal(typeof(string).Name, dataReader.GetDataTypeName(i));
+ }
+ }
+ else
+ {
+ var expectedDataTypeNames = new[]
+ {
+ typeof(bool).Name,
+ typeof(byte).Name,
+ typeof(int).Name,
+ typeof(decimal).Name,
+ typeof(double).Name,
+ typeof(DateTime).Name,
+ typeof(string).Name,
+ typeof(Guid).Name,
+ };
+ var dataReader = new CsvDataReader(csv, GetOverridingSchemaTable());
+ for (var i = 0; i < expectedDataTypeNames.Length; ++i)
+ {
+ Assert.Equal(expectedDataTypeNames[i], dataReader.GetDataTypeName(i));
+ }
+ }
+ }
+ }
+
+ [Fact]
+ public void GetDataTypeNameThrowsArgumentOutOfRangeExceptionWhenGivenAnEmptySchema()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Boolean,Byte,Int,Decimal,Double,DateTime,String,Guid");
+ s.AppendLine("true,1,2,4.56,7.89,2/17/2022,foo,eca0c8c6-9a2a-4e6c-8599-3561abda13f1");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var badSchema = new DataTable();
+ var dataReader = new CsvDataReader(csv, badSchema);
+ dataReader.Read();
+ Assert.Throws<IndexOutOfRangeException>(() => dataReader.GetDataTypeName(0));
+ }
+ }
+
+ [Fact]
+ public void GetDataTypeNameThrowsArgumentExceptionWhenGivenASchemaMissingDataType()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Boolean,Byte,Int,Decimal,Double,DateTime,String,Guid");
+ s.AppendLine("true,1,2,4.56,7.89,2/17/2022,foo,eca0c8c6-9a2a-4e6c-8599-3561abda13f1");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var badSchema = new DataTable();
+ badSchema.Rows.Add(badSchema.NewRow());
+ var dataReader = new CsvDataReader(csv, badSchema);
+ dataReader.Read();
+ Assert.Throws<ArgumentException>(() => dataReader.GetDataTypeName(0));
+ }
+ }
+
+ [Fact]
+ public void GetDataTypeNameThrowsInvalidCastExceptionWhenGivenASchemaWithAnUnexpectedDataTypeValue()
+ {
+ var s = new StringBuilder();
+ s.AppendLine("Boolean,Byte,Int,Decimal,Double,DateTime,String,Guid");
+ s.AppendLine("true,1,2,4.56,7.89,2/17/2022,foo,eca0c8c6-9a2a-4e6c-8599-3561abda13f1");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var badSchema = new DataTable();
+ badSchema.Columns.Add("DataType");
+ var row = badSchema.NewRow();
+ row["DataType"] = "foo";
+ badSchema.Rows.Add(row);
+ var dataReader = new CsvDataReader(csv, badSchema);
+ dataReader.Read();
+ Assert.Throws<InvalidOperationException>(() => dataReader.GetDataTypeName(0));
+ }
+ }
+
+ private DataTable GetOverridingSchemaTable()
+ {
+ var columnTypeMapping = new Tuple<string, Type, DbType>[]
+ {
+ new Tuple<string, Type, DbType>("Boolean", typeof(bool), DbType.Boolean),
+ new Tuple<string, Type, DbType>("Byte", typeof(byte), DbType.Byte),
+ new Tuple<string, Type, DbType>("Int", typeof(int), DbType.Int32),
+ new Tuple<string, Type, DbType>("Decimal", typeof(decimal), DbType.Decimal),
+ new Tuple<string, Type, DbType>("Double", typeof(double), DbType.Double),
+ new Tuple<string, Type, DbType>("DateTime", typeof(DateTime), DbType.DateTime),
+ new Tuple<string, Type, DbType>("String", typeof(string), DbType.String),
+ new Tuple<string, Type, DbType>("Guid", typeof(Guid), DbType.Guid),
+ };
+
+ // https://docs.microsoft.com/en-us/dotnet/api/system.data.datatablereader.getschematable?view=netframework-4.7.2
+ var dt = new DataTable("SchemaTable");
+ dt.Columns.Add("AllowDBNull", typeof(bool));
+ dt.Columns.Add("AutoIncrementSeed", typeof(long));
+ dt.Columns.Add("AutoIncrementStep", typeof(long));
+ dt.Columns.Add("BaseCatalogName");
+ dt.Columns.Add("BaseColumnName");
+ dt.Columns.Add("BaseColumnNamespace");
+ dt.Columns.Add("BaseSchemaName");
+ dt.Columns.Add("BaseTableName");
+ dt.Columns.Add("BaseTableNamespace");
+ dt.Columns.Add("ColumnName");
+ dt.Columns.Add("ColumnMapping", typeof(MappingType));
+ dt.Columns.Add("ColumnOrdinal", typeof(int));
+ dt.Columns.Add("ColumnSize", typeof(int));
+ dt.Columns.Add("DataType", typeof(Type));
+ dt.Columns.Add("DefaultValue", typeof(object));
+ dt.Columns.Add("Expression");
+ dt.Columns.Add("IsAutoIncrement", typeof(bool));
+ dt.Columns.Add("IsKey", typeof(bool));
+ dt.Columns.Add("IsLong", typeof(bool));
+ dt.Columns.Add("IsReadOnly", typeof(bool));
+ dt.Columns.Add("IsRowVersion", typeof(bool));
+ dt.Columns.Add("IsUnique", typeof(bool));
+ dt.Columns.Add("NumericPrecision", typeof(short));
+ dt.Columns.Add("NumericScale", typeof(short));
+ dt.Columns.Add("ProviderType", typeof(int));
+
+ for (var i = 0; i < columnTypeMapping.Length; i++)
+ {
+ var row = dt.NewRow();
+ row["AllowDBNull"] = true;
+ row["AutoIncrementSeed"] = DBNull.Value;
+ row["AutoIncrementStep"] = DBNull.Value;
+ row["BaseCatalogName"] = null;
+ row["BaseColumnName"] = columnTypeMapping[i].Item1;
+ row["BaseColumnNamespace"] = null;
+ row["BaseSchemaName"] = null;
+ row["BaseTableName"] = null;
+ row["BaseTableNamespace"] = null;
+ row["ColumnName"] = columnTypeMapping[i].Item1;
+ row["ColumnMapping"] = MappingType.Element;
+ row["ColumnOrdinal"] = i;
+ row["ColumnSize"] = int.MaxValue;
+ row["DataType"] = columnTypeMapping[i].Item2;
+ row["DefaultValue"] = null;
+ row["Expression"] = null;
+ row["IsAutoIncrement"] = false;
+ row["IsKey"] = false;
+ row["IsLong"] = false;
+ row["IsReadOnly"] = true;
+ row["IsRowVersion"] = false;
+ row["IsUnique"] = false;
+ row["NumericPrecision"] = columnTypeMapping[i].Item3 == DbType.Decimal ? 10 : DBNull.Value;
+ row["NumericScale"] = columnTypeMapping[i].Item3 == DbType.Decimal ? 2 : DBNull.Value;
+ row["ProviderType"] = columnTypeMapping[i].Item3;
+
+ dt.Rows.Add(row);
+ }
+
+ return dt;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Defaults/WritingDefaultsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Defaults/WritingDefaultsTests.cs
new file mode 100644
index 0000000..85ab8ea
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Defaults/WritingDefaultsTests.cs
@@ -0,0 +1,118 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Defaults
+{
+
+ public class WritingDefaultsTests
+ {
+ [Fact]
+ public void EmptyFieldsOnNullReferencePropertyTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ UseNewObjectForNullReferenceMembers = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<A>
+ {
+ new A
+ {
+ AId = 1,
+ },
+ new A
+ {
+ AId = 2,
+ B = new B
+ {
+ BId = 3,
+ },
+ },
+ };
+
+ csv.Context.RegisterClassMap<AMap>();
+ csv.WriteRecords(records);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ var expected = "AId,BId,CId\r\n" +
+ "1,,\r\n" +
+ "2,3,0\r\n";
+ Assert.Equal(expected, data);
+ }
+ }
+
+ [Fact]
+ public void DefaultFieldsOnNullReferencePropertyTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<A>
+ {
+ new A
+ {
+ AId = 1,
+ },
+ new A
+ {
+ AId = 2,
+ B = new B
+ {
+ BId = 3,
+ },
+ },
+ };
+
+ csv.Context.RegisterClassMap<AMap>();
+ csv.WriteRecords(records);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ var expected = "AId,BId,CId\r\n" +
+ "1,0,0\r\n" +
+ "2,3,0\r\n";
+ Assert.Equal(expected, data);
+ }
+ }
+
+ private class A
+ {
+ public int AId { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m => m.AId).Default(1);
+ }
+ }
+
+ public class B
+ {
+ public int BId { get; set; }
+ public int CId { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DisposeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DisposeTests.cs
new file mode 100644
index 0000000..b9d1f63
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DisposeTests.cs
@@ -0,0 +1,55 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+
+namespace CsvHelper.Tests
+{
+
+ public class DisposeTests
+ {
+ [Fact]
+ public void WriterFlushOnDisposeTest()
+ {
+ using (var writer = new StringWriter())
+ {
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("A");
+ }
+
+ Assert.Equal("A", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriterFlushOnDisposeWithFlushTest()
+ {
+ using (var writer = new StringWriter())
+ {
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("A");
+ csv.Flush();
+ }
+
+ Assert.Equal("A", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void DisposeShouldBeCallableMultipleTimes()
+ {
+ var parserMock = new ParserMock();
+ var reader = new CsvReader(parserMock);
+
+ reader.Dispose();
+ reader.Dispose();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DynamicProxyTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DynamicProxyTests.cs
new file mode 100644
index 0000000..aa501f2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/DynamicProxyTests.cs
@@ -0,0 +1,65 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class DynamicProxyTests
+ {
+ [Fact]
+ public void WriteDynamicProxyObjectTest()
+ {
+ var list = new List<TestClass>();
+ var proxyGenerator = new Castle.DynamicProxy.ProxyGenerator();
+ for (var i = 0; i < 1; i++)
+ {
+ var proxy = proxyGenerator.CreateClassProxy<TestClass>();
+ proxy.Id = i + 1;
+ proxy.Name = "name" + proxy.Id;
+ list.Add(proxy);
+ }
+
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<TestClassMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var data = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("id,name");
+ expected.AppendLine("1,name1");
+
+ Assert.Equal(expected.ToString(), data);
+ }
+ }
+
+ public class TestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class TestClassMap : ClassMap<TestClass>
+ {
+ public TestClassMap()
+ {
+ Map(m => m.Id).Name("id");
+ Map(m => m.Name).Name("name");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/EnumerateRecordsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/EnumerateRecordsTests.cs
new file mode 100644
index 0000000..5afdd52
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/EnumerateRecordsTests.cs
@@ -0,0 +1,181 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+
+namespace CsvHelper.Tests
+{
+
+ public class EnumerateRecordsTests
+ {
+ [Fact]
+ public void BasicTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var record = new Basic
+ {
+ Id = -1,
+ Name = "-one"
+ };
+
+ var count = 1;
+ foreach (var r in csv.EnumerateRecords(record))
+ {
+ if (count == 1)
+ {
+ Assert.Equal(1, r.Id);
+ Assert.Equal("one", r.Name);
+ }
+ else if (count == 2)
+ {
+ Assert.Equal(2, r.Id);
+ Assert.Equal("two", r.Name);
+ }
+
+ count++;
+ }
+ }
+ }
+
+ [Fact]
+ public void UnUsedPropertyTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var record = new UnUsedProperty
+ {
+ Id = -1,
+ Name = "-one",
+ UnUsed = "nothing",
+ };
+
+ var count = 1;
+ foreach (var r in csv.EnumerateRecords(record))
+ {
+ if (count == 1)
+ {
+ Assert.Equal(1, r.Id);
+ Assert.Equal("one", r.Name);
+ Assert.Equal("nothing", r.UnUsed);
+ }
+ else if (count == 2)
+ {
+ Assert.Equal(2, r.Id);
+ Assert.Equal("two", r.Name);
+ Assert.Equal("nothing", r.UnUsed);
+ }
+
+ count++;
+ }
+ }
+ }
+
+ [Fact]
+ public void ReferenceTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var record = new HasReferences
+ {
+ Id = -1,
+ Reference = new Reference
+ {
+ Name = "one"
+ }
+ };
+
+ var count = 1;
+ foreach (var r in csv.EnumerateRecords(record))
+ {
+ if (count == 1)
+ {
+ Assert.Equal(1, r.Id);
+ Assert.Equal("one", r.Reference.Name);
+ }
+ else if (count == 2)
+ {
+ Assert.Equal(2, r.Id);
+ Assert.Equal("two", r.Reference.Name);
+ }
+
+ count++;
+ }
+ }
+ }
+
+ private class Basic
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private class UnUsedProperty
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public string UnUsed { get; set; }
+ }
+
+ public class HasReferences
+ {
+ public int Id { get; set; }
+
+ public Reference Reference { get; set; }
+ }
+
+ public class Reference
+ {
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionMessageTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionMessageTests.cs
new file mode 100644
index 0000000..acf3c25
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionMessageTests.cs
@@ -0,0 +1,208 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.Exceptions
+{
+
+ public class ExceptionMessageTests
+ {
+ [Fact]
+ public void GetMissingFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+ var reader = new CsvReader(parser);
+ reader.Read();
+ reader.Read();
+ try
+ {
+ reader.GetField(2);
+ throw new XUnitException();
+ }
+ catch (MissingFieldException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ Assert.Equal(2, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ [Fact]
+ public void GetGenericMissingFieldWithTypeTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+
+ var reader = new CsvReader(parser);
+ reader.Read();
+ reader.Read();
+ try
+ {
+ reader.GetField<int>(2);
+ throw new XUnitException();
+ }
+ catch (MissingFieldException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ Assert.Equal(2, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ [Fact]
+ public void GetRecordGenericTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+
+ var reader = new CsvReader(parser);
+ reader.Read();
+ try
+ {
+ reader.GetRecord<Simple>();
+ throw new XUnitException();
+ }
+ catch (TypeConverterException ex)
+ {
+ //var expected = "Row: '2' (1 based)\r\n" +
+ // "Type: 'CsvHelper.Tests.Exceptions.ExceptionMessageTests+Simple'\r\n" +
+ // "Field Index: '0' (0 based)\r\n" +
+ // "Field Name: 'Id'\r\n" +
+ // "Field Value: 'a'\r\n";
+ //Assert.Equal( expected, ex.Data["CsvHelper"] );
+
+ Assert.Equal(2, ex.Context.Parser.Row);
+ //Assert.Equal( typeof( Simple ), ex.Type );
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ [Fact]
+ public void GetRecordTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+
+ var reader = new CsvReader(parser);
+ reader.Read();
+ try
+ {
+ reader.GetRecord(typeof(Simple));
+ throw new XUnitException();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ [Fact]
+ public void GetRecordsGenericTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+
+ var reader = new CsvReader(parser);
+ try
+ {
+ reader.GetRecords<Simple>().ToList();
+ throw new XUnitException();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ [Fact]
+ public void GetRecordsTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+
+ var reader = new CsvReader(parser);
+ try
+ {
+ reader.GetRecords(typeof(Simple)).ToList();
+ throw new XUnitException();
+ }
+ catch (TypeConverterException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ //Assert.Equal( typeof( Simple ), ex.Type );
+ Assert.Equal(0, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ [Fact]
+ public void GetFieldIndexTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "a", "b" },
+ null
+ };
+
+ var reader = new CsvReader(parser);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ try
+ {
+ reader.GetField("c");
+ throw new XUnitException();
+ }
+ catch (MissingFieldException ex)
+ {
+ Assert.Equal(2, ex.Context.Parser.Row);
+ Assert.Equal(-1, ex.Context.Reader.CurrentIndex);
+ }
+ }
+
+ private class Simple
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionTests.cs
new file mode 100644
index 0000000..bec1ee5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Exceptions/ExceptionTests.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Exceptions
+{
+
+ public class ExceptionTests
+ {
+ [Fact]
+ public void NoDefaultConstructorTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,2");
+ writer.WriteLine("3,4");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.Throws<MissingFieldException>(() => csv.GetRecords<NoDefaultConstructor>().ToList());
+ }
+ }
+
+ private class NoDefaultConstructor
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ public NoDefaultConstructor(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/HeaderValidationTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/HeaderValidationTests.cs
new file mode 100644
index 0000000..a1775ac
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/HeaderValidationTests.cs
@@ -0,0 +1,280 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace CsvHelper.Tests
+{
+
+ public class HeaderValidationTests
+ {
+ [Fact]
+ public void ValidateHeader_ValidHeaders_NoException()
+ {
+ using (var csv = new CsvReader(new StringReader("Id,Name"), CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ csv.ReadHeader();
+ csv.ValidateHeader<Test>();
+ }
+ }
+
+ [Fact]
+ public void ValidateHeader_PropertiesDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ csv.ReadHeader();
+ try
+ {
+ csv.ValidateHeader<Test>();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void ValidateHeader_ReferencePropertiesDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ csv.ReadHeader();
+ try
+ {
+ csv.ValidateHeader<HasReference>();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void ValidateHeader_ConstructorParametersDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ csv.ReadHeader();
+ try
+ {
+ csv.ValidateHeader<HasConstructor>();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void GetRecord_PropertiesDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ try
+ {
+ csv.GetRecord(typeof(Test));
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void GetRecordGeneric_PropertiesDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ try
+ {
+ csv.GetRecord<Test>();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void GetRecords_PropertiesDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ try
+ {
+ csv.GetRecords(typeof(Test)).ToList();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void GetRecordsGeneric_PropertiesDontMatch_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("bad data"), CultureInfo.InvariantCulture))
+ {
+ try
+ {
+ csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Equal(2, ex.InvalidHeaders.Length);
+ }
+ }
+ }
+
+ [Fact]
+ public void GetRecordsGeneric_PrivateSetter_NoException()
+ {
+ var data = new StringBuilder();
+ data.AppendLine("Number");
+ data.AppendLine("1");
+ using (var csv = new CsvReader(new StringReader(data.ToString()), CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<HasPrivateSetter>().ToList();
+ var record = records[0];
+ Assert.Equal(1, record.Number);
+ Assert.Equal(2, record.Double);
+ }
+ }
+
+ [Fact]
+ public void GetRecordsGeneric_IgnoreProperty_NoException()
+ {
+ var data = new StringBuilder();
+ data.AppendLine("Id");
+ data.AppendLine("1");
+ using (var csv = new CsvReader(new StringReader(data.ToString()), CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<HasIgnoredPropertyMap>();
+ var records = csv.GetRecords<Test>().ToList();
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Null(record.Name);
+ }
+ }
+
+ [Fact]
+ public void ValidateHeader_NoNamesMapped_NoException()
+ {
+ using (var csv = new CsvReader(new StringReader("Id"), CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<HasIndexNoNameMap>();
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.ValidateHeader<Test>();
+ }
+ }
+
+ [Fact]
+ public void ValidateHeader_HasIndexAndName_ThrowsHeaderValidationException()
+ {
+ using (var csv = new CsvReader(new StringReader("Id"), CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<HasIndexAndNameMap>();
+
+ csv.Read();
+ csv.ReadHeader();
+ try
+ {
+ csv.ValidateHeader<Test>();
+ throw new XUnitException();
+ }
+ catch (HeaderValidationException ex)
+ {
+ Assert.Single(ex.InvalidHeaders);
+ Assert.Equal("Name", ex.InvalidHeaders[0].Names[0]);
+ }
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private class HasReference
+ {
+ public Test Reference { get; set; }
+ }
+
+ private class HasConstructor
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public HasConstructor(int Id, string Name)
+ {
+ this.Id = Id;
+ this.Name = Name;
+ }
+ }
+
+ private class HasPrivateSetter
+ {
+ public int Number { get; set; }
+
+ public int Double => Number * 2;
+ }
+
+ private sealed class HasIgnoredPropertyMap : ClassMap<Test>
+ {
+ public HasIgnoredPropertyMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m => m.Name).Ignore();
+ }
+ }
+
+ private sealed class HasIndexNoNameMap : ClassMap<Test>
+ {
+ public HasIndexNoNameMap()
+ {
+ Map(m => m.Id).Index(0);
+ Map(m => m.Name).Index(1);
+ }
+ }
+
+ private sealed class HasIndexAndNameMap : ClassMap<Test>
+ {
+ public HasIndexAndNameMap()
+ {
+ Map(m => m.Id).Index(0).Name("Id");
+ Map(m => m.Name).Index(1).Name("Name");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue1954.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue1954.cs
new file mode 100644
index 0000000..0fc4b55
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue1954.cs
@@ -0,0 +1,178 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.Issues
+{
+ public class Issue1954
+ {
+ [Fact]
+ public void Test1()
+ {
+ var data = @"field1, field2, field3
+1, 2, ""test""
+3, 4, ""TEST""";
+
+ var opts = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ",",
+ TrimOptions = TrimOptions.Trim,
+ BufferSize = 44
+ };
+
+ using (var sr = new StringReader(data))
+ using (var csv = new CsvReader(sr, opts))
+ {
+ var records = csv.GetRecords<Row>().ToArray();
+
+ Assert.Equal(2, records.Length);
+
+ Assert.Equal(1, records[0].Field1);
+ Assert.Equal(2, records[0].Field2);
+ Assert.Equal("test", records[0].Field3);
+
+ Assert.Equal(3, records[1].Field1);
+ Assert.Equal(4, records[1].Field2);
+ Assert.Equal("TEST", records[1].Field3);
+ }
+ }
+
+ [Fact]
+ public void Test2()
+ {
+ var data = @"field1, field2, field3
+1, 2, ""test""
+3, 4, ""TEST""";
+
+ var opts = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ",",
+ TrimOptions = TrimOptions.Trim,
+ BufferSize = 45
+ };
+
+ using (var sr = new StringReader(data))
+ using (var csv = new CsvReader(sr, opts))
+ {
+ var records = csv.GetRecords<Row>().ToArray();
+
+ Assert.Equal(2, records.Length);
+
+ Assert.Equal(1, records[0].Field1);
+ Assert.Equal(2, records[0].Field2);
+ Assert.Equal("test", records[0].Field3);
+
+ Assert.Equal(3, records[1].Field1);
+ Assert.Equal(4, records[1].Field2);
+ Assert.Equal("TEST", records[1].Field3);
+ }
+ }
+
+ [Fact]
+ public void Test3()
+ {
+ var data = @"field1, field2, field3
+1, 2, ""test""
+3, 4, ""TEST""";
+
+ var opts = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ",",
+ TrimOptions = TrimOptions.Trim,
+ BufferSize = 44
+ };
+
+ using (var sr = new StringReader(data))
+ using (var csv = new CsvReader(sr, opts))
+ {
+ var records = csv.GetRecords<Row>().ToArray();
+
+ Assert.Equal(2, records.Length);
+
+ Assert.Equal(1, records[0].Field1);
+ Assert.Equal(2, records[0].Field2);
+ Assert.Equal("test", records[0].Field3);
+
+ Assert.Equal(3, records[1].Field1);
+ Assert.Equal(4, records[1].Field2);
+ Assert.Equal("TEST", records[1].Field3);
+ }
+ }
+
+ [Fact]
+ public void Test4()
+ {
+ var data = @"field1, field2, field3
+1, 2, ""test""
+3, 4,""TEST""";
+
+ var opts = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ",",
+ TrimOptions = TrimOptions.Trim,
+ BufferSize = 44
+ };
+
+ using (var sr = new StringReader(data))
+ using (var csv = new CsvReader(sr, opts))
+ {
+ var records = csv.GetRecords<Row>().ToArray();
+
+ Assert.Equal(2, records.Length);
+
+ Assert.Equal(1, records[0].Field1);
+ Assert.Equal(2, records[0].Field2);
+ Assert.Equal("test", records[0].Field3);
+
+ Assert.Equal(3, records[1].Field1);
+ Assert.Equal(4, records[1].Field2);
+ Assert.Equal("TEST", records[1].Field3);
+ }
+ }
+
+ [Fact]
+ public void Test5()
+ {
+ var data = @"field1, field2, field3
+1, 2, ""test""
+3, 4, TEST";
+
+ var opts = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ",",
+ TrimOptions = TrimOptions.Trim,
+ BufferSize = 44
+ };
+
+ using (var sr = new StringReader(data))
+ using (var csv = new CsvReader(sr, opts))
+ {
+ var records = csv.GetRecords<Row>().ToArray();
+
+ Assert.Equal(2, records.Length);
+
+ Assert.Equal(1, records[0].Field1);
+ Assert.Equal(2, records[0].Field2);
+ Assert.Equal("test", records[0].Field3);
+
+ Assert.Equal(3, records[1].Field1);
+ Assert.Equal(4, records[1].Field2);
+ Assert.Equal("TEST", records[1].Field3);
+ }
+ }
+
+ private class Row
+ {
+ [Name("field1")] public int Field1 { get; set; }
+ [Name("field2")] public int Field2 { get; set; }
+ [Name("field3")] public string Field3 { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue920.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue920.cs
new file mode 100644
index 0000000..1ae38db
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Issues/Issue920.cs
@@ -0,0 +1,59 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+
+namespace CsvHelper.Tests.Issues
+{
+
+ public class Issue920
+ {
+ [Fact]
+ public void Test1()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ GetConstructor = args =>
+ args.ClassType.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance)
+ .OrderBy(c => c.GetParameters().Length)
+ .First(),
+ IncludePrivateMembers = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("A,B");
+ writer.WriteLine("1,one");
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<Sample>().ToList();
+
+ Assert.Equal(2, records.Count);
+ }
+ }
+
+ private class Sample
+ {
+ public int A { get; private set; }
+ public string B { get; private set; }
+
+ private Sample() { }
+
+ public Sample(int a, string b)
+ {
+ A = a;
+ B = b;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/LocalCultureTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/LocalCultureTests.cs
new file mode 100644
index 0000000..f99540e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/LocalCultureTests.cs
@@ -0,0 +1,72 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class LocalCultureTests
+ {
+ // In 'uk-UA' decimal separator is the ','
+ // For 'Invariant' and many other cultures decimal separator is '.'
+
+ [Fact]
+ public void ReadRecordsTest()
+ {
+ const string source = "DateTimeColumn;DecimalColumn\r\n" +
+ "11.11.2010;12,0\r\n";
+
+ var configuration = new CsvHelper.Configuration.CsvConfiguration(new CultureInfo("uk-UA"))
+ {
+ Delimiter = ";",
+ };
+ var reader = new CsvReader(new CsvParser(new StringReader(source), configuration));
+
+ var records = reader.GetRecords<TestRecordWithDecimal>().ToList();
+
+ Assert.Single(records);
+ var record = records.First();
+ Assert.Equal(12.0m, record.DecimalColumn);
+ Assert.Equal(new DateTime(2010, 11, 11), record.DateTimeColumn);
+ }
+
+ [Fact]
+ public void WriteRecordsTest()
+ {
+ var records = new List<TestRecordWithDecimal>
+ {
+ new TestRecordWithDecimal
+ {
+ DecimalColumn = 12.0m,
+ DateTimeColumn = new DateTime( 2003, 1, 4, 15, 9, 26 )
+ }
+ };
+
+ var writer = new StringWriter();
+ var culture = new CultureInfo("uk-UA");
+ var csv = new CsvWriter(writer, new CsvHelper.Configuration.CsvConfiguration(culture) { Delimiter = ";" });
+
+ csv.WriteRecords(records);
+
+ var csvFile = writer.ToString();
+
+ const string expected = "DecimalColumn;DateTimeColumn\r\n" +
+ "12,0;04.01.2003 15:09:26\r\n";
+
+ Assert.Equal(expected, csvFile);
+ }
+
+ private class TestRecordWithDecimal
+ {
+ public decimal DecimalColumn { get; set; }
+ public DateTime DateTimeColumn { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MapPropertyMultipleTimesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MapPropertyMultipleTimesTests.cs
new file mode 100644
index 0000000..b330cd0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MapPropertyMultipleTimesTests.cs
@@ -0,0 +1,87 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class MapPropertyMultipleTimesTests
+ {
+ [Fact]
+ public void MapPropertiesToMultipleFieldsWhenWritingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Test>
+ {
+ new Test { Id = 1, Name = "one" }
+ };
+
+ csv.Context.RegisterClassMap<TestMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id1,Name1,Id2,Name2");
+ expected.AppendLine("1,one,1,one");
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void MapPropertiesToMultipleFieldsWhenReadingTest()
+ {
+ // This is not something that anyone should do, but this
+ // is the expected behavior if they do.
+
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id1,Name1,Id2,Name2");
+ writer.WriteLine("1,one,2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Equal(2, records[0].Id);
+ Assert.Equal("two", records[0].Name);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Id).Name("Id1");
+ Map(m => m.Name).Name("Name1");
+ Map(m => m.Id, false).Name("Id2");
+ Map(m => m.Name, false).Name("Name2");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MappingInheritedClassTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MappingInheritedClassTests.cs
new file mode 100644
index 0000000..82c5ef5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/MappingInheritedClassTests.cs
@@ -0,0 +1,42 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+
+namespace CsvHelper.Tests
+{
+
+ public class MappingInheritedClassTests
+ {
+ [Fact]
+ public void Test()
+ {
+ var map = new AMap<A>();
+ Assert.Equal( 2, map.MemberMaps.Count );
+ }
+
+ private interface IA
+ {
+ int Id { get; set; }
+ }
+
+ private class A : IA
+ {
+ public int Id { get; set; }
+
+ public int Name { get; set; }
+ }
+
+ private sealed class AMap<T> : ClassMap<T> where T : IA
+ {
+ public AMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map( m => m.Id );
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/AllowCommentsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/AllowCommentsTests.cs
new file mode 100644
index 0000000..e5fb1eb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/AllowCommentsTests.cs
@@ -0,0 +1,29 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class AllowCommentsTests
+ {
+ [Fact]
+ public void AllowCommentsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(AllowCommentsTestClass));
+ Assert.True(config.AllowComments);
+ }
+
+ [AllowComments(true)]
+ private class AllowCommentsTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BooleanValuesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BooleanValuesTests.cs
new file mode 100644
index 0000000..b2eefde
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BooleanValuesTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class BooleanValuesTests
+ {
+ [Fact]
+ public void BooleanValuesTest()
+ {
+ using (var reader = new StringReader("IsTrue,IsFalse\r\ntrue,false\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<BooleanValuesTestClass>().ToList();
+ Assert.Equal(true, records[0].IsTrue);
+ Assert.Equal(false, records[0].IsFalse);
+ }
+ }
+
+ private class BooleanValuesTestClass
+ {
+ [BooleanTrueValues("true")]
+ public bool? IsTrue { get; set; }
+
+ [BooleanFalseValues("false")]
+ public bool? IsFalse { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BufferSizeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BufferSizeTests.cs
new file mode 100644
index 0000000..dd35498
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/BufferSizeTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class BufferSizeTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(2, config.BufferSize);
+ }
+
+ [BufferSize(2)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CacheFieldsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CacheFieldsTests.cs
new file mode 100644
index 0000000..bfc1c52
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CacheFieldsTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class CacheFieldsTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.True(config.CacheFields);
+ }
+
+ [CacheFields(true)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CommentTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CommentTests.cs
new file mode 100644
index 0000000..64baf14
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CommentTests.cs
@@ -0,0 +1,28 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class CommentTests
+ {
+ [Fact]
+ public void CommentTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(CommentTestClass));
+ Assert.Equal('x', config.Comment);
+ }
+
+ [Comment('x')]
+ private class CommentTestClass
+ {
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ConstantTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ConstantTests.cs
new file mode 100644
index 0000000..5ab6381
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ConstantTests.cs
@@ -0,0 +1,50 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class ConstantTests
+ {
+ [Fact]
+ public void ConstantTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<ConstantTestClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("two", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void ConstantOnMissingFieldTest()
+ {
+ using (var reader = new StringReader("Id\r\n1\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<ConstantTestClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("two", records[0].Name);
+ }
+ }
+
+ private class ConstantTestClass
+ {
+ public int Id { get; set; }
+
+ [Constant("two")]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CountBytesTest.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CountBytesTest.cs
new file mode 100644
index 0000000..c4847cd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/CountBytesTest.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class CountBytesTest
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.True(config.CountBytes);
+ }
+
+ [CountBytes(true)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DateTimeStylesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DateTimeStylesTests.cs
new file mode 100644
index 0000000..3e5a25d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DateTimeStylesTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class DateTimeStylesTests
+ {
+ [Fact]
+ public void DateTimeStylesTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<DateTimeStylesTestClass>().ToList();
+ var actual = csv.Context.Maps.Find<DateTimeStylesTestClass>().MemberMaps[1].Data.TypeConverterOptions.DateTimeStyle;
+
+ Assert.Equal(DateTimeStyles.AdjustToUniversal, actual);
+ }
+ }
+
+ private class DateTimeStylesTestClass
+ {
+ public int Id { get; set; }
+
+ [DateTimeStyles(DateTimeStyles.AdjustToUniversal)]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DefaultTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DefaultTests.cs
new file mode 100644
index 0000000..4718c66
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DefaultTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class DefaultTests
+ {
+ [Fact]
+ public void DefaultTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<DefaultTestClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ private class DefaultTestClass
+ {
+ public int Id { get; set; }
+
+ [Default("one")]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DelimiterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DelimiterTests.cs
new file mode 100644
index 0000000..3315126
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DelimiterTests.cs
@@ -0,0 +1,32 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class DelimiterTests
+ {
+ [Fact]
+ public void DelimiterReaderTest()
+ {
+ var configuration = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(DelimiterTestClass));
+
+ Assert.Equal("§", configuration.Delimiter);
+ }
+
+ [Delimiter("§")]
+ private class DelimiterTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectColumnCountChangesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectColumnCountChangesTests.cs
new file mode 100644
index 0000000..4fad816
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectColumnCountChangesTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class DetectColumnCountChangesTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.True(config.DetectColumnCountChanges);
+ }
+
+ [DetectColumnCountChanges(true)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterTests.cs
new file mode 100644
index 0000000..1ccc0fb
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class DetectDelimiterTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.True(config.DetectDelimiter);
+ }
+
+ [DetectDelimiter(true)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterValuesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterValuesTests.cs
new file mode 100644
index 0000000..a160001
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/DetectDelimiterValuesTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class DetectDelimiterValuesTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(new[] { "a", "b" }, config.DetectDelimiterValues);
+ }
+
+ [DetectDelimiterValues("a b")]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EncodingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EncodingTests.cs
new file mode 100644
index 0000000..557775b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EncodingTests.cs
@@ -0,0 +1,33 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class EncodingTests
+ {
+ [Fact]
+ public void EncodingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(EncodingTestClass));
+
+ Assert.Equal(Encoding.ASCII, config.Encoding);
+ }
+
+ [Encoding("ASCII")]
+ private class EncodingTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EnumIgnoreCaseTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EnumIgnoreCaseTests.cs
new file mode 100644
index 0000000..e12f3cd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EnumIgnoreCaseTests.cs
@@ -0,0 +1,91 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class EnumIgnoreCaseTests
+ {
+ [Fact]
+ public void GetRecords_UsingEnumIgnoreCaseFromClassMap_ReadsEnumValueWithDifferentCasing()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Enum\r\n");
+ s.Append("1,one");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+ }
+ }
+
+ [Fact]
+ public void GetRecords_UsingEnumIgnoreCaseFromAttribute_ReadsEnumValueWithDifferentCasing()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Enum\r\n");
+ s.Append("1,one");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<Bar>().ToList();
+ }
+ }
+
+ [Fact]
+ public void GetRecords_UsingEnumIgnoreCaseFromGlobal_ReadsEnumValueWithDifferentCasing()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Enum\r\n");
+ s.Append("1,one");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.TypeConverterOptionsCache.AddOptions<TestEnum>(new TypeConverterOptions { EnumIgnoreCase = true });
+ var records = csv.GetRecords<Foo>().ToList();
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+ public TestEnum Enum { get; set; }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Enum).TypeConverterOption.EnumIgnoreCase();
+ }
+ }
+
+ private class Bar
+ {
+ public int Id { get; set; }
+ [EnumIgnoreCase]
+ public TestEnum Enum { get; set; }
+ }
+
+ private enum TestEnum
+ {
+ None = 0,
+ One = 1
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EscapeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EscapeTests.cs
new file mode 100644
index 0000000..b3c3e7f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/EscapeTests.cs
@@ -0,0 +1,32 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class EscapeTests
+ {
+ [Fact]
+ public void EscapeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(EscapeTestClass));
+
+ Assert.Equal('x', config.Escape);
+ }
+
+ [Escape('x')]
+ private class EscapeTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ExceptionMessagesContainRawDataTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ExceptionMessagesContainRawDataTests.cs
new file mode 100644
index 0000000..ce3688e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ExceptionMessagesContainRawDataTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class ExceptionMessagesContainRawDataTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.False(config.ExceptionMessagesContainRawData);
+ }
+
+ [ExceptionMessagesContainRawData(false)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/FormatTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/FormatTests.cs
new file mode 100644
index 0000000..c2e2b5f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/FormatTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class FormatTests
+ {
+ [Fact]
+ public void FormatTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<FormatTestClass>().ToList();
+ var actual = csv.Context.Maps.Find<FormatTestClass>().MemberMaps[1].Data.TypeConverterOptions.Formats[0];
+
+ Assert.Equal("abc", actual);
+ }
+ }
+
+ private class FormatTestClass
+ {
+ public int Id { get; set; }
+
+ [Format("abc")]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HasHeaderRecordTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HasHeaderRecordTests.cs
new file mode 100644
index 0000000..9fae872
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HasHeaderRecordTests.cs
@@ -0,0 +1,30 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class HasHeaderRecordTests
+ {
+ [Fact]
+ public void HasHeaderRecordTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(HasHeaderRecordTestClass));
+
+ Assert.False(config.HasHeaderRecord);
+ }
+
+ [HasHeaderRecord(false)]
+ private class HasHeaderRecordTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HeaderPrefixTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HeaderPrefixTests.cs
new file mode 100644
index 0000000..fe5cb61
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/HeaderPrefixTests.cs
@@ -0,0 +1,205 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class HeaderPrefixTests
+ {
+ [Fact]
+ public void WriteHeader_PrefixCustom_WritesCustomPrefixesOwnLevelOnly()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteHeader<ACustom>();
+ csv.Flush();
+
+ Assert.Equal("AId,b_BId,c_CId", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteHeader_PrefixInherit_WritesPrefixesForEachLevel()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteHeader<AInherit>();
+ csv.Flush();
+
+ Assert.Equal("AId,B.BId,B.C.CId", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteHeader_PrefixNoInherit_WritesPrefixesOwnLevelOnly()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteHeader<ANoInherit>();
+ csv.Flush();
+
+ Assert.Equal("AId,B.BId,C.CId", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteHeader_PrefixDefaultInherit_WritesPrefixesOwnLevelOnly()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteHeader<ADefaultInherit>();
+ csv.Flush();
+
+ Assert.Equal("AId,B.BId,C.CId", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void GetRecords_PrefixCustom_ReadsCustomHeader()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("AId,b_BId,c_CId");
+ s.AppendLine("aid,bid,cid");
+ using (var reader = new StringReader(s))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var records = csv.GetRecords<ACustom>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal("aid", records[0].AId);
+ Assert.Equal("bid", records[0].B.BId);
+ Assert.Equal("cid", records[0].B.C.CId);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_PrefixInherit_ReadsInheritedHeader()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("AId,B.BId,B.C.CId");
+ s.AppendLine("aid,bid,cid");
+ using (var reader = new StringReader(s))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var records = csv.GetRecords<AInherit>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal("aid", records[0].AId);
+ Assert.Equal("bid", records[0].B.BId);
+ Assert.Equal("cid", records[0].B.C.CId);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_PrefixNoInherit_ReadsNonInheritedHeader()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("AId,B.BId,C.CId");
+ s.AppendLine("aid,bid,cid");
+ using (var reader = new StringReader(s))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var records = csv.GetRecords<ANoInherit>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal("bid", records[0].B.BId);
+ Assert.Equal("aid", records[0].AId);
+ Assert.Equal("cid", records[0].B.C.CId);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_PrefixDefaultInherit_ReadsNonInheritedHeader()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("AId,B.BId,C.CId");
+ s.AppendLine("aid,bid,cid");
+ using (var reader = new StringReader(s))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var records = csv.GetRecords<ADefaultInherit>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal("aid", records[0].AId);
+ Assert.Equal("bid", records[0].B.BId);
+ Assert.Equal("cid", records[0].B.C.CId);
+ }
+ }
+
+ private class ACustom
+ {
+ public string AId { get; set; }
+ [HeaderPrefix("b_")]
+ public BCustom B { get; set; }
+ }
+
+ private class BCustom
+ {
+ public string BId { get; set; }
+ [HeaderPrefix("c_")]
+ public C C { get; set; }
+ }
+
+ private class AInherit
+ {
+ public string AId { get; set; }
+ [HeaderPrefix(true)]
+ public BInherit B { get; set; }
+ }
+
+ private class BInherit
+ {
+ public string BId { get; set; }
+ [HeaderPrefix(true)]
+ public C C { get; set; }
+ }
+
+ private class ANoInherit
+ {
+ public string AId { get; set; }
+ [HeaderPrefix(false)]
+ public BInherit B { get; set; }
+ }
+
+ private class BNoInherit
+ {
+ public string BId { get; set; }
+ [HeaderPrefix(false)]
+ public C C { get; set; }
+ }
+
+ private class ADefaultInherit
+ {
+ public string AId { get; set; }
+ [HeaderPrefix]
+ public BInherit B { get; set; }
+ }
+
+ private class BDefaultInherit
+ {
+ public string BId { get; set; }
+ [HeaderPrefix]
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string CId { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBaseTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBaseTests.cs
new file mode 100644
index 0000000..9f49082
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBaseTests.cs
@@ -0,0 +1,71 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class IgnoreBaseTests
+ {
+ [Fact]
+ public void GetRecordsWithProperties_IgnoreBaseAttribute_DoesNotMapBaseClass()
+ {
+ var map = new DefaultClassMap<ChildProperties>();
+ map.AutoMap(CultureInfo.InvariantCulture);
+
+ Assert.Single(map.MemberMaps);
+ Assert.Null(map.MemberMaps.Find<ChildProperties>(m => m.Id));
+ Assert.NotNull(map.MemberMaps.Find<ChildProperties>(m => m.Name));
+ }
+
+ [Fact]
+ public void GetRecordsWithFields_IgnoreBaseAttribute_DoesNotMapBaseClass()
+ {
+ var map = new DefaultClassMap<ChildFields>();
+ map.AutoMap(new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Fields,
+ });
+
+ Assert.Single(map.MemberMaps);
+ Assert.Null(map.MemberMaps.Find<ChildFields>(m => m.Id));
+ Assert.NotNull(map.MemberMaps.Find<ChildFields>(m => m.Name));
+ }
+
+ private class ParentProperties
+ {
+ public int Id { get; set; }
+ }
+
+ [IgnoreBase]
+ private class ChildProperties : ParentProperties
+ {
+ public string Name { get; set; }
+ }
+
+ private class ParentFields
+ {
+#pragma warning disable CS0649
+ public int Id;
+#pragma warning restore CS0649
+ }
+
+ [IgnoreBase]
+ private class ChildFields: ParentFields
+ {
+#pragma warning disable CS0649
+ public string Name;
+#pragma warning restore CS0649
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBlankLinesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBlankLinesTests.cs
new file mode 100644
index 0000000..b2ec8e0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreBlankLinesTests.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class IgnoreBlankLinesTests
+ {
+ [Fact]
+ public void IgnoreBlankLinesTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<IgnoreBlankLinesTestClass>().ToList();
+ var actual = csv.Configuration.IgnoreBlankLines;
+
+ Assert.True(actual);
+ }
+ }
+
+ [IgnoreBlankLines(true)]
+ private class IgnoreBlankLinesTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreReferencesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreReferencesTests.cs
new file mode 100644
index 0000000..f2839b6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreReferencesTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class IgnoreReferencesTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.True(config.IgnoreReferences);
+ }
+
+ [IgnoreReferences(true)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreTests.cs
new file mode 100644
index 0000000..4849ad1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IgnoreTests.cs
@@ -0,0 +1,93 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class IgnoreTests
+ {
+ [Fact]
+ public void IgnoreTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void IgnoreReferenceTest()
+ {
+ var records = new List<Parent>
+ {
+ new Parent
+ {
+ Id = 1,
+ Child = new Child
+ {
+ Name = "one",
+ GrandChild = new GrandChild
+ {
+ Date = DateTimeOffset.Now
+ }
+ }
+ }
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+
+ [CsvHelper.Configuration.Attributes.Ignore]
+ public DateTime Date { get; set; }
+ }
+
+ private class Parent
+ {
+ public int Id { get; set; }
+
+ [CsvHelper.Configuration.Attributes.Ignore]
+ public Child Child { get; set; }
+ }
+
+ private class Child
+ {
+ public string Name { get; set; }
+
+ public GrandChild GrandChild { get; set; }
+ }
+
+ private class GrandChild
+ {
+ public DateTimeOffset Date { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IncludePrivateMembersTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IncludePrivateMembersTests.cs
new file mode 100644
index 0000000..2b219dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IncludePrivateMembersTests.cs
@@ -0,0 +1,29 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class IncludePrivateMembersTests
+ {
+ [Fact]
+ public void TrimOptionsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(IncludePrivateMembersTestClass));
+ Assert.True(config.IncludePrivateMembers);
+ }
+
+ [IncludePrivateMembers(true)]
+ private class IncludePrivateMembersTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IndexTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IndexTests.cs
new file mode 100644
index 0000000..1dc9112
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/IndexTests.cs
@@ -0,0 +1,42 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class IndexTests
+ {
+ [Fact]
+ public void IndexTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StringReader("a,1,b,one,c\r\n"))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var records = csv.GetRecords<IndexTestClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ private class IndexTestClass
+ {
+ [Index(1)]
+ public int Id { get; set; }
+
+ [Index(3)]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionCharactersTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionCharactersTests.cs
new file mode 100644
index 0000000..b4fc82c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionCharactersTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class InjectionCharactersTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(new[] { 'a', 'b' }, config.InjectionCharacters);
+ }
+
+ [InjectionCharacters("a b")]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionEscapeCharacterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionEscapeCharacterTests.cs
new file mode 100644
index 0000000..e118ea2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionEscapeCharacterTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class InjectionEscapeCharacterTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal('a', config.InjectionEscapeCharacter);
+ }
+
+ [InjectionEscapeCharacter('a')]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionOptionsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionOptionsTests.cs
new file mode 100644
index 0000000..7a03003
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/InjectionOptionsTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class InjectionOptionsTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(InjectionOptions.Escape, config.InjectionOptions);
+ }
+
+ [InjectionOptions(InjectionOptions.Escape)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/LineBreakInQuotedFieldIsBadDataTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/LineBreakInQuotedFieldIsBadDataTests.cs
new file mode 100644
index 0000000..b939780
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/LineBreakInQuotedFieldIsBadDataTests.cs
@@ -0,0 +1,25 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class LineBreakInQuotedFieldIsBadDataTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.True(config.LineBreakInQuotedFieldIsBadData);
+ }
+
+ [LineBreakInQuotedFieldIsBadData(true)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MaxFieldSizeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MaxFieldSizeTests.cs
new file mode 100644
index 0000000..b0a9231
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MaxFieldSizeTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class MaxFieldSizeTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(2, config.MaxFieldSize);
+ }
+
+ [MaxFieldSize(2)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MemberTypesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MemberTypesTests.cs
new file mode 100644
index 0000000..be21b32
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/MemberTypesTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class MemberTypesTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(MemberTypes.Fields, config.MemberTypes);
+ }
+
+ [MemberTypes(MemberTypes.Fields)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ModeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ModeTests.cs
new file mode 100644
index 0000000..ca35863
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ModeTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class ModeTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(CsvMode.Escape, config.Mode);
+ }
+
+ [Mode(CsvMode.Escape)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameIndexTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameIndexTests.cs
new file mode 100644
index 0000000..07cda20
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameIndexTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class NameIndexTests
+ {
+ [Fact]
+ public void NameIndexTest()
+ {
+ using (var reader = new StringReader("Id,Name,Name\r\n1,one,two\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<NameIndexClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("two", records[0].Name);
+ }
+ }
+
+ private class NameIndexClass
+ {
+ public int Id { get; set; }
+
+ [NameIndex(1)]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameTests.cs
new file mode 100644
index 0000000..3957442
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NameTests.cs
@@ -0,0 +1,38 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class NameTests
+ {
+ [Fact]
+ public void NameTest()
+ {
+ using (var reader = new StringReader("id,name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<NameTestClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ private class NameTestClass
+ {
+ [Name("id")]
+ public int Id { get; set; }
+
+ [Name("name")]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NewLineTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NewLineTests.cs
new file mode 100644
index 0000000..5d9ba80
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NewLineTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class NewLineTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal("a", config.NewLine);
+ }
+
+ [NewLine("a")]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NullValuesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NullValuesTests.cs
new file mode 100644
index 0000000..8694172
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NullValuesTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class NullValuesTests
+ {
+ [Fact]
+ public void NullValuesTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\nNULL,null\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<NullValuesTestClass>().ToList();
+ Assert.Null(records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ private class NullValuesTestClass
+ {
+ [NullValues("NULL")]
+ public int? Id { get; set; }
+
+ [NullValues("null")]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NumberStylesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NumberStylesTests.cs
new file mode 100644
index 0000000..3740f54
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/NumberStylesTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class NumberStylesTests
+ {
+ [Fact]
+ public void DateTimeStylesTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<NumberStylesTestClass>().ToList();
+ var actual = csv.Context.Maps.Find<NumberStylesTestClass>().MemberMaps[1].Data.TypeConverterOptions.NumberStyles;
+
+ Assert.Equal(NumberStyles.AllowCurrencySymbol, actual);
+ }
+ }
+
+ private class NumberStylesTestClass
+ {
+ public int Id { get; set; }
+
+ [NumberStyles(NumberStyles.AllowCurrencySymbol)]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/OptionalTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/OptionalTests.cs
new file mode 100644
index 0000000..466e6b5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/OptionalTests.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class OptionalTests
+ {
+ [Fact]
+ public void OptionalTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<OptionalTestClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ private class OptionalTestClass
+ {
+ public int Id { get; set; }
+
+ [Optional]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ProcessFieldBufferSizeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ProcessFieldBufferSizeTests.cs
new file mode 100644
index 0000000..63ea433
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ProcessFieldBufferSizeTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class ProcessFieldBufferSizeTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(2, config.ProcessFieldBufferSize);
+ }
+
+ [ProcessFieldBufferSize(2)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/QuoteTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/QuoteTests.cs
new file mode 100644
index 0000000..3b6fb41
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/QuoteTests.cs
@@ -0,0 +1,29 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class QuoteTests
+ {
+ [Fact]
+ public void QuoteTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(QuoteTestClass));
+ Assert.Equal('x', config.Quote);
+ }
+
+ [Quote('x')]
+ private class QuoteTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ReferenceTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ReferenceTests.cs
new file mode 100644
index 0000000..97c64a0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/ReferenceTests.cs
@@ -0,0 +1,43 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration.Attributes;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class ReferenceTests
+ {
+ [Fact]
+ public void ReferenceTest()
+ {
+ using (var reader = new StringReader("id,name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<ReferenceTestClassA>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].B.Name);
+ }
+ }
+
+ private class ReferenceTestClassA
+ {
+ [Name("id")]
+ public int Id { get; set; }
+
+ public ReferenceTestClassB B { get; set; }
+ }
+
+ private class ReferenceTestClassB
+ {
+ [Name("name")]
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TrimOptionsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TrimOptionsTests.cs
new file mode 100644
index 0000000..6e7595f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TrimOptionsTests.cs
@@ -0,0 +1,31 @@
+// Copyright 2009-2015 Josh Close and Contributors
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// http://csvhelper.com
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.AttributeMapping
+{
+ public class TrimOptionsTests
+ {
+ [Fact]
+ public void TrimOptionsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(TrimOptionsTestClass));
+ Assert.Equal(TrimOptions.InsideQuotes, config.TrimOptions);
+ }
+
+ [TrimOptions(TrimOptions.InsideQuotes)]
+ private class TrimOptionsTestClass
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TypeConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TypeConverterTests.cs
new file mode 100644
index 0000000..afa2cd9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/TypeConverterTests.cs
@@ -0,0 +1,125 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+
+ public class TypeConverterTests
+ {
+ [Fact]
+ public void TypeConverterTest()
+ {
+ using (var reader = new StringReader("Id,Name\r\n1,one\r\n"))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ var records = csv.GetRecords<TypeConverterClass>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("two", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void TypeConverterOnClassReferenceTest()
+ {
+ var records = new List<AClass>
+ {
+ new AClass { Id = 1, Name = new BClass() },
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = "Id,Name\r\n1,two\r\n";
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void TypeConverterOnStructReferenceTest()
+ {
+ var records = new List<AStruct>
+ {
+ new AStruct { Id = 1, Name = new BStruct() },
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = "Id,Name\r\n1,two\r\n";
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void Constructor_TypeConverterWithConstructorArgs_Creates()
+ {
+ var attribute = new TypeConverterAttribute(typeof(TypeConverterWithConstructorArgs), 2);
+ Assert.IsType<TypeConverterWithConstructorArgs>(attribute.TypeConverter);
+ Assert.Equal(2, ((TypeConverterWithConstructorArgs)attribute.TypeConverter).Value);
+ }
+
+ private class TypeConverterClass
+ {
+ public int Id { get; set; }
+
+ [TypeConverter(typeof(StringTypeConverter))]
+ public string Name { get; set; }
+ }
+
+ private class StringTypeConverter : ITypeConverter
+ {
+ public object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return "two";
+ }
+
+ public string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
+ {
+ return "two";
+ }
+ }
+
+ private class AClass
+ {
+ public int Id { get; set; }
+ [TypeConverter(typeof(StringTypeConverter))]
+ public BClass Name { get; set; }
+ }
+
+ private class BClass { }
+
+ private class AStruct
+ {
+ public int Id { get; set; }
+ [TypeConverter(typeof(StringTypeConverter))]
+ public BStruct Name { get; set; }
+ }
+
+ private class BStruct { }
+
+ private class TypeConverterWithConstructorArgs : DefaultTypeConverter
+ {
+ public int Value { get; private set; }
+
+ public TypeConverterWithConstructorArgs(int value)
+ {
+ Value = value;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/UseNewObjectForNullReferenceMembersTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/UseNewObjectForNullReferenceMembersTests.cs
new file mode 100644
index 0000000..d560872
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/UseNewObjectForNullReferenceMembersTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class UseNewObjectForNullReferenceMembersTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.False(config.UseNewObjectForNullReferenceMembers);
+ }
+
+ [UseNewObjectForNullReferenceMembers(false)]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/WhiteSpaceCharsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/WhiteSpaceCharsTests.cs
new file mode 100644
index 0000000..3abb027
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Attribute/WhiteSpaceCharsTests.cs
@@ -0,0 +1,20 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings.Attribute
+{
+ public class WhiteSpaceCharsTests
+ {
+ [Fact]
+ public void ConstructorAttributeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture, typeof(Foo));
+ Assert.Equal(new[] { 'a', 'b' }, config.WhiteSpaceChars);
+ }
+
+ [WhiteSpaceChars("a b")]
+ private class Foo { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesAttributeTests.cs
new file mode 100644
index 0000000..d05b601
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesAttributeTests.cs
@@ -0,0 +1,110 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class BooleanFalseValuesAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithBooleanFalseValuesAttribute_CreatesParameterMaps()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Empty(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.TypeConverterOptions.BooleanFalseValues[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "boolean" },
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.False(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.False(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithBooleanFalseValuesAttribute_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, false),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Boolean\r\n");
+ expected.Append("1,False\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public bool Boolean { get; private set; }
+
+ public Foo(int id, [BooleanFalseValues("Bar")] bool boolean)
+ {
+ Id = id;
+ Boolean = boolean;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesMapTests.cs
new file mode 100644
index 0000000..c477a17
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanFalseValuesMapTests.cs
@@ -0,0 +1,125 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class BooleanFalseValuesMapTests
+ {
+ [Fact]
+ public void AutoMap_WithBooleanFalseValuesAttribute_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("boolean").TypeConverterOption.BooleanValues(false, true, "Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Empty(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.TypeConverterOptions.BooleanFalseValues[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "boolean" },
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.False(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.False(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithBooleanFalseValuesAttribute_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, false),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Boolean\r\n");
+ expected.Append("1,False\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public bool Boolean { get; private set; }
+
+ public Foo(int id, bool boolean)
+ {
+ Id = id;
+ Boolean = boolean;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Boolean);
+ Parameter("id");
+ Parameter("boolean").TypeConverterOption.BooleanValues(false, true, "Bar");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesAttributeTests.cs
new file mode 100644
index 0000000..4149e9d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesAttributeTests.cs
@@ -0,0 +1,110 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class BooleanTrueValuesAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithBooleanTrueValuesAttribute_CreatesParameterMaps()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Empty(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.TypeConverterOptions.BooleanTrueValues[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanTrueValuesAttribute_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "boolean" },
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.True(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanTrueValuesAttribute_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.True(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithBooleanTrueValuesAttribute_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, true),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Boolean\r\n");
+ expected.Append("1,True\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public bool Boolean { get; private set; }
+
+ public Foo(int id, [BooleanTrueValues("Bar")]bool boolean)
+ {
+ Id = id;
+ Boolean = boolean;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesMapTests.cs
new file mode 100644
index 0000000..318b439
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/BooleanTrueValuesMapTests.cs
@@ -0,0 +1,125 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class BooleanTrueValuesMapTests
+ {
+ [Fact]
+ public void AutoMap_WithBooleanFalseValuesAttribute_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("boolean").TypeConverterOption.BooleanValues(true, true, "Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanTrueValues);
+ Assert.Empty(map.ParameterMaps[1].Data.TypeConverterOptions.BooleanFalseValues);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.TypeConverterOptions.BooleanTrueValues[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "boolean" },
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.True(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "Bar" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.True(records[0].Boolean);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithBooleanFalseValuesAttribute_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, true),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Boolean\r\n");
+ expected.Append("1,True\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public bool Boolean { get; private set; }
+
+ public Foo(int id, bool boolean)
+ {
+ Id = id;
+ Boolean = boolean;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Boolean);
+ Parameter("id");
+ Parameter("boolean").TypeConverterOption.BooleanValues(true, true, "Bar");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantAttributeTests.cs
new file mode 100644
index 0000000..bf42bdc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantAttributeTests.cs
@@ -0,0 +1,109 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class ConstantAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithConstantAttributes_ConfiguresParameterMaps()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsConstantSet);
+ Assert.Null(map.ParameterMaps[0].Data.Constant);
+ Assert.True(map.ParameterMaps[1].Data.IsConstantSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Constant);
+ }
+
+ [Fact]
+ public void GetRecords_WithConstantAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithConstantAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithConstantAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, [Constant("Bar")] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantMapTests.cs
new file mode 100644
index 0000000..523f383
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/ConstantMapTests.cs
@@ -0,0 +1,193 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class ConstantMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("name").Constant("Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsConstantSet);
+ Assert.True(map.ParameterMaps[1].Data.IsConstantSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Constant);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").Constant("Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsConstantSet);
+ Assert.True(map.ParameterMaps[1].Data.IsConstantSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Constant);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).Constant("Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsConstantSet);
+ Assert.True(map.ParameterMaps[1].Data.IsConstantSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Constant);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_FieldMissing_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_FieldMissing_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id");
+ Parameter("name").Constant("Bar");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoAttributeTests.cs
new file mode 100644
index 0000000..a76883d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoAttributeTests.cs
@@ -0,0 +1,119 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Threading;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class CultureInfoAttributeTests
+ {
+ private const decimal AMOUNT = 123_456.789M;
+ private const string CULTURE = "fr-FR";
+ private readonly string amount = AMOUNT.ToString(new CultureInfo(CULTURE));
+
+ [Fact]
+ public void AutoMap_WithCultureInfoAttributes_ConfiguresParameterMaps()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.CultureInfo);
+ Assert.Equal(new CultureInfo(CULTURE), map.ParameterMaps[1].Data.TypeConverterOptions.CultureInfo);
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "amount" },
+ { "1", amount },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(AMOUNT, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", amount },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(AMOUNT, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithCultureInfoAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, AMOUNT),
+ };
+
+ var prevCulture = Thread.CurrentThread.CurrentCulture;
+ try {
+ Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Amount\r\n");
+ expected.Append($"1,{AMOUNT}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ } finally {
+ Thread.CurrentThread.CurrentCulture = prevCulture;
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public decimal Amount { get; private set; }
+
+ public Foo(int id, [CultureInfo(CULTURE)] decimal amount)
+ {
+ Id = id;
+ Amount = amount;
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoMapTests.cs
new file mode 100644
index 0000000..71ae189
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/CultureInfoMapTests.cs
@@ -0,0 +1,160 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Threading;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class CultureInfoMapTests
+ {
+ private const decimal AMOUNT = 123_456.789M;
+ private const string CULTURE = "fr-FR";
+ private readonly string amount = AMOUNT.ToString(new CultureInfo(CULTURE));
+
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("amount").TypeConverterOption.CultureInfo(new CultureInfo(CULTURE));
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.CultureInfo);
+ Assert.Equal(new CultureInfo(CULTURE), map.ParameterMaps[1].Data.TypeConverterOptions.CultureInfo);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "amount").TypeConverterOption.CultureInfo(new CultureInfo(CULTURE));
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.CultureInfo);
+ Assert.Equal(new CultureInfo(CULTURE), map.ParameterMaps[1].Data.TypeConverterOptions.CultureInfo);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).TypeConverterOption.CultureInfo(new CultureInfo(CULTURE));
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.CultureInfo);
+ Assert.Equal(new CultureInfo(CULTURE), map.ParameterMaps[1].Data.TypeConverterOptions.CultureInfo);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "amount" },
+ { "1", amount },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(AMOUNT, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", amount },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(AMOUNT, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, AMOUNT),
+ };
+
+ var prevCulture = Thread.CurrentThread.CurrentCulture;
+ try {
+ Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Amount\r\n");
+ expected.Append($"1,{AMOUNT}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ } finally {
+ Thread.CurrentThread.CurrentCulture = prevCulture;
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public decimal Amount { get; private set; }
+
+ public Foo(int id, decimal amount)
+ {
+ Id = id;
+ Amount = amount;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Amount);
+ Parameter("id");
+ Parameter("amount").TypeConverterOption.CultureInfo(new CultureInfo(CULTURE));
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesAttributeTests.cs
new file mode 100644
index 0000000..7207853
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesAttributeTests.cs
@@ -0,0 +1,109 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class DateTimeStylesAttributeTests
+ {
+ private const string DATE = "12/25/2020";
+ private readonly DateTimeOffset date = DateTimeOffset.Parse(DATE, CultureInfo.InvariantCulture);
+
+ [Fact]
+ public void AutoMap_WithCultureInfoAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.DateTimeStyle);
+ Assert.Equal(DateTimeStyles.AllowLeadingWhite, map.ParameterMaps[1].Data.TypeConverterOptions.DateTimeStyle);
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "date" },
+ { "1", $" {DATE}" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", $" {DATE}" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithCultureInfoAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, date),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Date\r\n");
+ expected.Append($"1,{date.ToString(null, CultureInfo.InvariantCulture)}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public DateTimeOffset Date { get; private set; }
+
+ public Foo(int id, [DateTimeStyles(DateTimeStyles.AllowLeadingWhite)] DateTimeOffset date)
+ {
+ Id = id;
+ Date = date;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesMapTests.cs
new file mode 100644
index 0000000..d94b75f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DateTimeStylesMapTests.cs
@@ -0,0 +1,152 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class DateTimeStylesMapTests
+ {
+ private const string DATE = "12/25/2020";
+ private readonly DateTimeOffset date = DateTimeOffset.Parse(DATE, CultureInfo.InvariantCulture);
+
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("date").TypeConverterOption.DateTimeStyles(DateTimeStyles.AllowLeadingWhite);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.DateTimeStyle);
+ Assert.Equal(DateTimeStyles.AllowLeadingWhite, map.ParameterMaps[1].Data.TypeConverterOptions.DateTimeStyle);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "date").TypeConverterOption.DateTimeStyles(DateTimeStyles.AllowLeadingWhite);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.DateTimeStyle);
+ Assert.Equal(DateTimeStyles.AllowLeadingWhite, map.ParameterMaps[1].Data.TypeConverterOptions.DateTimeStyle);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).TypeConverterOption.DateTimeStyles(DateTimeStyles.AllowLeadingWhite);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.DateTimeStyle);
+ Assert.Equal(DateTimeStyles.AllowLeadingWhite, map.ParameterMaps[1].Data.TypeConverterOptions.DateTimeStyle);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "date" },
+ { "1", DATE },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", DATE },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, date),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Date\r\n");
+ expected.Append($"1,{date.ToString(null, CultureInfo.InvariantCulture)}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public DateTimeOffset Date { get; private set; }
+
+ public Foo(int id, DateTimeOffset date)
+ {
+ Id = id;
+ Date = date;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Date);
+ Parameter("id");
+ Parameter("date").TypeConverterOption.DateTimeStyles(DateTimeStyles.AllowLeadingWhite);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultAttributeTests.cs
new file mode 100644
index 0000000..226878d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultAttributeTests.cs
@@ -0,0 +1,108 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class DefaultAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithDefaultAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsDefaultSet);
+ Assert.Null(map.ParameterMaps[0].Data.Default);
+ Assert.True(map.ParameterMaps[1].Data.IsDefaultSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Default);
+ }
+
+ [Fact]
+ public void GetRecords_WithDefaultAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithDefaultAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithDefaultAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, [Default("Bar")] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultMapTests.cs
new file mode 100644
index 0000000..3b6f76d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/DefaultMapTests.cs
@@ -0,0 +1,152 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class DefaultMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("name").Default("Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsDefaultSet);
+ Assert.True(map.ParameterMaps[1].Data.IsDefaultSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Default);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").Default("Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsDefaultSet);
+ Assert.True(map.ParameterMaps[1].Data.IsDefaultSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Default);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).Default("Bar");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsDefaultSet);
+ Assert.True(map.ParameterMaps[1].Data.IsDefaultSet);
+ Assert.Equal("Bar", map.ParameterMaps[1].Data.Default);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id");
+ Parameter("name").Default("Bar");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/EnumIgnoreCaseTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/EnumIgnoreCaseTests.cs
new file mode 100644
index 0000000..af23233
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/EnumIgnoreCaseTests.cs
@@ -0,0 +1,113 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class EnumIgnoreCaseTests
+ {
+ [Fact]
+ public void AutoMap_WithEnumIgnoreCaseAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal("id", map.ParameterMaps[0].Data.Names.First());
+ Assert.Equal("bar", map.ParameterMaps[1].Data.Names.First());
+ Assert.True(map.ParameterMaps[1].Data.TypeConverterOptions.EnumIgnoreCase.GetValueOrDefault());
+ }
+
+ [Fact]
+ public void GetRecords_WithEnumIgnoreCaseAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "bar" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(Bar.One, records[0].Bar);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithEnumIgnoreCaseAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(Bar.One, records[0].Bar);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithIgnoreAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, Bar.None),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Bar\r\n");
+ expected.Append("1,None\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public Bar Bar { get; private set; }
+
+ public Foo(int id, [EnumIgnoreCase] Bar bar)
+ {
+ Id = id;
+ Bar = bar;
+ }
+ }
+
+ private enum Bar
+ {
+ None = 0,
+ One = 1
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatAttributeTests.cs
new file mode 100644
index 0000000..b3fa1ac
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatAttributeTests.cs
@@ -0,0 +1,111 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class FormatAttributeTests
+ {
+ private const string FORMAT = "MM|dd|yyyy";
+ private const string DATE = "12|25|2020";
+ private readonly DateTimeOffset date = DateTimeOffset.ParseExact(DATE, FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None);
+
+ [Fact]
+ public void AutoMap_WithCultureInfoAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.Formats);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.Formats);
+ Assert.Equal(FORMAT, map.ParameterMaps[1].Data.TypeConverterOptions.Formats[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "date" },
+ { "1", DATE },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", DATE },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithCultureInfoAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, date),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Date\r\n");
+ expected.Append($"1,{date.ToString(null, CultureInfo.InvariantCulture)}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public DateTimeOffset Date { get; private set; }
+
+ public Foo(int id, [Format(FORMAT)] DateTimeOffset date)
+ {
+ Id = id;
+ Date = date;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatMapTests.cs
new file mode 100644
index 0000000..673a1f7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/FormatMapTests.cs
@@ -0,0 +1,156 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class FormatMapTests
+ {
+ private const string FORMAT = "MM|dd|yyyy";
+ private const string DATE = "12|25|2020";
+ private readonly DateTimeOffset date = DateTimeOffset.ParseExact(DATE, FORMAT, CultureInfo.InvariantCulture, DateTimeStyles.None);
+
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("date").TypeConverterOption.Format(FORMAT);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.Formats);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.Formats);
+ Assert.Equal(FORMAT, map.ParameterMaps[1].Data.TypeConverterOptions.Formats[0]);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "date").TypeConverterOption.Format(FORMAT);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.Formats);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.Formats);
+ Assert.Equal(FORMAT, map.ParameterMaps[1].Data.TypeConverterOptions.Formats[0]);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).TypeConverterOption.Format(FORMAT);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.Formats);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.Formats);
+ Assert.Equal(FORMAT, map.ParameterMaps[1].Data.TypeConverterOptions.Formats[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "date" },
+ { "1", DATE },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", DATE },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(date, records[0].Date);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, date),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Date\r\n");
+ expected.Append($"1,{date.ToString(null, CultureInfo.InvariantCulture)}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public DateTimeOffset Date { get; private set; }
+
+ public Foo(int id, DateTimeOffset date)
+ {
+ Id = id;
+ Date = date;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Date);
+ Parameter("id");
+ Parameter("date").TypeConverterOption.Format(FORMAT);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixAttributeTests.cs
new file mode 100644
index 0000000..051f9f5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixAttributeTests.cs
@@ -0,0 +1,111 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class HeaderPrefixAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithCultureInfoAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].ReferenceMap);
+ Assert.Equal("Bar_", map.ParameterMaps[1].ReferenceMap.Data.Prefix);
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "Bar_Name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Bar.Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Bar.Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithCultureInfoAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, new Bar { Name = "one" }),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public Bar Bar { get; private set; }
+
+ public Foo(int id, [HeaderPrefix("Bar_")]Bar bar)
+ {
+ Id = id;
+ Bar = bar;
+ }
+ }
+
+ private class Bar
+ {
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixMapTests.cs
new file mode 100644
index 0000000..4c5e0be
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/HeaderPrefixMapTests.cs
@@ -0,0 +1,6 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+
+// It doesn't make sense to map a prefix as you would just set the header name you want including the prefix.
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreAttributeTests.cs
new file mode 100644
index 0000000..3ee4cd9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreAttributeTests.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class IgnoreAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithIgnoreAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal("id", map.ParameterMaps[0].Data.Names.First());
+ Assert.Equal("name", map.ParameterMaps[1].Data.Names.First());
+ Assert.True(map.ParameterMaps[1].Data.Ignore);
+ }
+
+ [Fact]
+ public void GetRecords_WithIgnoreAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithIgnoreAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithIgnoreAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, [CsvHelper.Configuration.Attributes.Ignore] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreMapTests.cs
new file mode 100644
index 0000000..247f4ab
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IgnoreMapTests.cs
@@ -0,0 +1,150 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class IgnoreMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("name").Ignore();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.Ignore);
+ Assert.True(map.ParameterMaps[1].Data.Ignore);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").Ignore();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.Ignore);
+ Assert.True(map.ParameterMaps[1].Data.Ignore);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).Ignore();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.Ignore);
+ Assert.True(map.ParameterMaps[1].Data.Ignore);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id");
+ Parameter("name").Ignore();
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexAttributeTests.cs
new file mode 100644
index 0000000..b2a236c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexAttributeTests.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class IndexAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithIndexAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.Index);
+ Assert.Equal(1, map.ParameterMaps[1].Data.Index);
+ }
+
+ [Fact]
+ public void GetRecords_WithIndexAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithIndexAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithIndexAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo([Index(0)] int id, [Index(1)] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexMapTests.cs
new file mode 100644
index 0000000..fcb4c6e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/IndexMapTests.cs
@@ -0,0 +1,149 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class IndexMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id").Index(0);
+ map.Parameter("name").Index(1);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.Index);
+ Assert.Equal(1, map.ParameterMaps[1].Data.Index);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id").Index(0);
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").Index(1);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.Index);
+ Assert.Equal(1, map.ParameterMaps[1].Data.Index);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]).Index(0);
+ map.Parameter(constructor, parameters[1]).Index(1);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.Index);
+ Assert.Equal(1, map.ParameterMaps[1].Data.Index);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id").Index(0);
+ Parameter("name").Index(1);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameAttributeTests.cs
new file mode 100644
index 0000000..25c3586
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameAttributeTests.cs
@@ -0,0 +1,85 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NameAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithNameAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal("Id", map.ParameterMaps[0].Data.Names[0]);
+ Assert.Equal("Name", map.ParameterMaps[1].Data.Names[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithNameAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithNameAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo([Name("Id")] int id, [Name("Name")] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexAttributeTests.cs
new file mode 100644
index 0000000..55f009f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexAttributeTests.cs
@@ -0,0 +1,85 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NameIndexAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithNameAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.NameIndex);
+ Assert.Equal(1, map.ParameterMaps[1].Data.NameIndex);
+ }
+
+ [Fact]
+ public void GetRecords_WithNameAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name", "Name" },
+ { "1", "", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithNameAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo([Name("Id")]int id, [Name("Name")][NameIndex(1)] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexMapTests.cs
new file mode 100644
index 0000000..5c8ed87
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameIndexMapTests.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NameIndexMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id").NameIndex(0);
+ map.Parameter("name").NameIndex(1);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.NameIndex);
+ Assert.Equal(1, map.ParameterMaps[1].Data.NameIndex);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id").NameIndex(0);
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").NameIndex(1);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.NameIndex);
+ Assert.Equal(1, map.ParameterMaps[1].Data.NameIndex);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]).NameIndex(0);
+ map.Parameter(constructor, parameters[1]).NameIndex(1);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal(0, map.ParameterMaps[0].Data.NameIndex);
+ Assert.Equal(1, map.ParameterMaps[1].Data.NameIndex);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name", "Name" },
+ { "1", "", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id").Name("Id");
+ Parameter("name").Name("Name").NameIndex(1);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameMapTests.cs
new file mode 100644
index 0000000..0413be7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NameMapTests.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NameMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id").Name("Id");
+ map.Parameter("name").Name("Name");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal("Id", map.ParameterMaps[0].Data.Names[0]);
+ Assert.Equal("Name", map.ParameterMaps[1].Data.Names[0]);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id").Name("Id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").Name("Name");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal("Id", map.ParameterMaps[0].Data.Names[0]);
+ Assert.Equal("Name", map.ParameterMaps[1].Data.Names[0]);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]).Name("Id");
+ map.Parameter(constructor, parameters[1]).Name("Name");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Equal("Id", map.ParameterMaps[0].Data.Names[0]);
+ Assert.Equal("Name", map.ParameterMaps[1].Data.Names[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id").Name("Id");
+ Parameter("name").Name("Name");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesAttributeTests.cs
new file mode 100644
index 0000000..0f9dd76
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesAttributeTests.cs
@@ -0,0 +1,107 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NullValuesAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithBooleanFalseValuesAttribute_CreatesParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.NullValues);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.NullValues);
+ Assert.Equal("NULL", map.ParameterMaps[1].Data.TypeConverterOptions.NullValues[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "NULL" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "NULL" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithBooleanFalseValuesAttribute_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, [NullValues("NULL")] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesMapTests.cs
new file mode 100644
index 0000000..2362248
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NullValuesMapTests.cs
@@ -0,0 +1,122 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NullValuesMapTests
+ {
+ [Fact]
+ public void AutoMap_WithBooleanFalseValuesAttribute_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("name").TypeConverterOption.NullValues("NULL");
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Empty(map.ParameterMaps[0].Data.TypeConverterOptions.NullValues);
+ Assert.Single(map.ParameterMaps[1].Data.TypeConverterOptions.NullValues);
+ Assert.Equal("NULL", map.ParameterMaps[1].Data.TypeConverterOptions.NullValues[0]);
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ new [] { "id", "name" },
+ new [] { "1", "NULL" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithBooleanFalseValuesAttribute_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "NULL" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithBooleanFalseValuesAttribute_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id");
+ Parameter("name").TypeConverterOption.NullValues("NULL");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesAttributeTests.cs
new file mode 100644
index 0000000..c805b41
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesAttributeTests.cs
@@ -0,0 +1,108 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NumberStylesAttributeTests
+ {
+ private const decimal amount = 123;
+
+ [Fact]
+ public void AutoMap_WithCultureInfoAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.NumberStyles);
+ Assert.Equal(NumberStyles.AllowParentheses, map.ParameterMaps[1].Data.TypeConverterOptions.NumberStyles);
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "amount" },
+ { "1", $"({amount})" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(-amount, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithCultureInfoAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", $"({amount})" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(-amount, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithCultureInfoAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, amount),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Amount\r\n");
+ expected.Append($"1,{amount}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public decimal Amount { get; private set; }
+
+ public Foo(int id, [NumberStyles(NumberStyles.AllowParentheses)] decimal amount)
+ {
+ Id = id;
+ Amount = amount;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesMapTests.cs
new file mode 100644
index 0000000..19fdae8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/NumberStylesMapTests.cs
@@ -0,0 +1,151 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class NumberStylesMapTests
+ {
+ private const decimal amount = 123;
+
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("amount").TypeConverterOption.NumberStyles(NumberStyles.AllowParentheses);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.NumberStyles);
+ Assert.Equal(NumberStyles.AllowParentheses, map.ParameterMaps[1].Data.TypeConverterOptions.NumberStyles);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "amount").TypeConverterOption.NumberStyles(NumberStyles.AllowParentheses);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.NumberStyles);
+ Assert.Equal(NumberStyles.AllowParentheses, map.ParameterMaps[1].Data.TypeConverterOptions.NumberStyles);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).TypeConverterOption.NumberStyles(NumberStyles.AllowParentheses);
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverterOptions.NumberStyles);
+ Assert.Equal(NumberStyles.AllowParentheses, map.ParameterMaps[1].Data.TypeConverterOptions.NumberStyles);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "amount" },
+ { "1", $"({amount})" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(-amount, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", $"({amount})" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(-amount, records[0].Amount);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, amount),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Amount\r\n");
+ expected.Append($"1,{amount}\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public decimal Amount { get; private set; }
+
+ public Foo(int id, decimal amount)
+ {
+ Id = id;
+ Amount = amount;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Amount);
+ Parameter("id");
+ Parameter("amount").TypeConverterOption.NumberStyles(NumberStyles.AllowParentheses);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalAttributeTests.cs
new file mode 100644
index 0000000..2e7b8b4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalAttributeTests.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class OptionalAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithConstantAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsOptional);
+ Assert.True(map.ParameterMaps[1].Data.IsOptional);
+ }
+
+ [Fact]
+ public void GetRecords_WithConstantAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithConstantAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithConstantAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, [Optional] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalMapTests.cs
new file mode 100644
index 0000000..bae94d1
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/OptionalMapTests.cs
@@ -0,0 +1,150 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class OptionalMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("name").Optional();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsOptional);
+ Assert.True(map.ParameterMaps[1].Data.IsOptional);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").Optional();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsOptional);
+ Assert.True(map.ParameterMaps[1].Data.IsOptional);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).Optional();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.False(map.ParameterMaps[0].Data.IsOptional);
+ Assert.True(map.ParameterMaps[1].Data.IsOptional);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id");
+ Parameter("name").Optional();
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterAttributeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterAttributeTests.cs
new file mode 100644
index 0000000..4d6cd2a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterAttributeTests.cs
@@ -0,0 +1,115 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class TypeConverterAttributeTests
+ {
+ [Fact]
+ public void AutoMap_WithConstantAttributes_ConfiguresParameterMaps()
+ {
+ var context = new CsvContext(new CsvConfiguration(CultureInfo.InvariantCulture));
+ var map = context.AutoMap<Foo>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.IsType<Int32Converter>(map.ParameterMaps[0].Data.TypeConverter);
+ Assert.IsType<CustomConverter>(map.ParameterMaps[1].Data.TypeConverter);
+ }
+
+ [Fact]
+ public void GetRecords_WithConstantAttributes_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithConstantAttributes_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithConstantAttributes_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, null),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, [TypeConverter(typeof(CustomConverter))] string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class CustomConverter : DefaultTypeConverter
+ {
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return "Bar";
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterMapTests.cs
new file mode 100644
index 0000000..98bc4dd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ConstructorParameter/TypeConverterMapTests.cs
@@ -0,0 +1,158 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.ConstructorParameter
+{
+
+ public class TypeConverterMapTests
+ {
+ [Fact]
+ public void Parameter_WithName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter("id");
+ map.Parameter("name").TypeConverter<CustomConverter>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverter);
+ Assert.IsType<CustomConverter>(map.ParameterMaps[1].Data.TypeConverter);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorFunctionAndName_CreatesParameterMaps()
+ {
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "id");
+ map.Parameter(() => ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo))), "name").TypeConverter<CustomConverter>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverter);
+ Assert.IsType<CustomConverter>(map.ParameterMaps[1].Data.TypeConverter);
+ }
+
+ [Fact]
+ public void Parameter_WithConstructorAndProperty_CreatesParameterMaps()
+ {
+ var constructor = ConfigurationFunctions.GetConstructor(new GetConstructorArgs(typeof(Foo)));
+ var parameters = constructor.GetParameters();
+
+ var map = new DefaultClassMap<Foo>();
+ map.Parameter(constructor, parameters[0]);
+ map.Parameter(constructor, parameters[1]).TypeConverter<CustomConverter>();
+
+ Assert.Equal(2, map.ParameterMaps.Count);
+ Assert.Null(map.ParameterMaps[0].Data.TypeConverter);
+ Assert.IsType<CustomConverter>(map.ParameterMaps[1].Data.TypeConverter);
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_HasHeader_CreatesRecords()
+ {
+ var parser = new ParserMock
+ {
+ { "id", "name" },
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var map = csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_WithParameterMap_NoHeader_CreatesRecords()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_WithParameterMap_DoesntUseParameterMaps()
+ {
+ var records = new List<Foo>
+ {
+ new Foo(1, "one"),
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+
+ csv.WriteRecords(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Parameter("id");
+ Parameter("name").TypeConverter<CustomConverter>();
+ }
+ }
+
+ private class CustomConverter : DefaultTypeConverter
+ {
+ public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
+ {
+ return "Bar";
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/CsvClassMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/CsvClassMappingTests.cs
new file mode 100644
index 0000000..dc10243
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/CsvClassMappingTests.cs
@@ -0,0 +1,239 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class CsvClassMappingTests
+ {
+ [Fact]
+ public void MapTest()
+ {
+ var map = new TestMappingDefaultClass();
+ //map.CreateMap();
+
+ Assert.Equal(3, map.MemberMaps.Count);
+
+ Assert.Equal(0, map.MemberMaps[0].Data.Names.Count);
+ Assert.Equal(0, map.MemberMaps[0].Data.Index);
+ Assert.Null(map.MemberMaps[0].Data.TypeConverter);
+
+ Assert.Equal(0, map.MemberMaps[1].Data.Names.Count);
+ Assert.Equal(1, map.MemberMaps[1].Data.Index);
+ Assert.Null(map.MemberMaps[1].Data.TypeConverter);
+
+ Assert.Equal(0, map.MemberMaps[2].Data.Names.Count);
+ Assert.Equal(2, map.MemberMaps[2].Data.Index);
+ Assert.Null(map.MemberMaps[2].Data.TypeConverter);
+ }
+
+ [Fact]
+ public void MapNameTest()
+ {
+ var map = new TestMappingNameClass();
+ //map.CreateMap();
+
+ Assert.Equal(3, map.MemberMaps.Count);
+
+ Assert.Equal("Guid Column", map.MemberMaps[0].Data.Names.FirstOrDefault());
+ Assert.Equal("Int Column", map.MemberMaps[1].Data.Names.FirstOrDefault());
+ Assert.Equal("String Column", map.MemberMaps[2].Data.Names.FirstOrDefault());
+ }
+
+ [Fact]
+ public void MapIndexTest()
+ {
+ var map = new TestMappingIndexClass();
+ //map.CreateMap();
+
+ Assert.Equal(3, map.MemberMaps.Count);
+
+ Assert.Equal(2, map.MemberMaps[0].Data.Index);
+ Assert.Equal(3, map.MemberMaps[1].Data.Index);
+ Assert.Equal(1, map.MemberMaps[2].Data.Index);
+ }
+
+ [Fact]
+ public void MapIgnoreTest()
+ {
+ var map = new TestMappingIgnoreClass();
+ //map.CreateMap();
+
+ Assert.Equal(3, map.MemberMaps.Count);
+
+ Assert.True(map.MemberMaps[0].Data.Ignore);
+ Assert.False(map.MemberMaps[1].Data.Ignore);
+ Assert.True(map.MemberMaps[2].Data.Ignore);
+ }
+
+ [Fact]
+ public void MapTypeConverterTest()
+ {
+ var map = new TestMappingTypeConverterClass();
+ //map.CreateMap();
+
+ Assert.Equal(3, map.MemberMaps.Count);
+
+ Assert.IsType<Int16Converter>(map.MemberMaps[0].Data.TypeConverter);
+ Assert.IsType<StringConverter>(map.MemberMaps[1].Data.TypeConverter);
+ Assert.IsType<Int64Converter>(map.MemberMaps[2].Data.TypeConverter);
+ }
+
+ [Fact]
+ public void MapMultipleNamesTest()
+ {
+ var map = new TestMappingMultipleNamesClass();
+ //map.CreateMap();
+
+ Assert.Equal(3, map.MemberMaps.Count);
+
+ Assert.Equal(3, map.MemberMaps[0].Data.Names.Count);
+ Assert.Equal(3, map.MemberMaps[1].Data.Names.Count);
+ Assert.Equal(3, map.MemberMaps[2].Data.Names.Count);
+
+ Assert.Equal("guid1", map.MemberMaps[0].Data.Names[0]);
+ Assert.Equal("guid2", map.MemberMaps[0].Data.Names[1]);
+ Assert.Equal("guid3", map.MemberMaps[0].Data.Names[2]);
+
+ Assert.Equal("int1", map.MemberMaps[1].Data.Names[0]);
+ Assert.Equal("int2", map.MemberMaps[1].Data.Names[1]);
+ Assert.Equal("int3", map.MemberMaps[1].Data.Names[2]);
+
+ Assert.Equal("string1", map.MemberMaps[2].Data.Names[0]);
+ Assert.Equal("string2", map.MemberMaps[2].Data.Names[1]);
+ Assert.Equal("string3", map.MemberMaps[2].Data.Names[2]);
+ }
+
+ [Fact]
+ public void MapMultipleTypesTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ context.RegisterClassMap<AMap>();
+ context.RegisterClassMap<BMap>();
+
+ Assert.NotNull(context.Maps[typeof(A)]);
+ Assert.NotNull(context.Maps[typeof(B)]);
+ }
+
+ [Fact]
+ public void PropertyMapAccessTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ context.RegisterClassMap<AMap>();
+ context.Maps.Find<A>().Map(m => m.AId).Ignore();
+
+ Assert.True(context.Maps[typeof(A)].MemberMaps[0].Data.Ignore);
+ }
+
+ private class A
+ {
+ public int AId { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.AId);
+ }
+ }
+
+ private class B
+ {
+ public int BId { get; set; }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap()
+ {
+ Map(m => m.BId);
+ }
+ }
+
+ private class TestClass
+ {
+ public string StringColumn { get; set; }
+ public int IntColumn { get; set; }
+ public Guid GuidColumn { get; set; }
+ public string NotUsedColumn { get; set; }
+
+ public TestClass() { }
+
+ public TestClass(string stringColumn)
+ {
+ StringColumn = stringColumn;
+ }
+ }
+
+ private sealed class TestMappingDefaultClass : ClassMap<TestClass>
+ {
+ public TestMappingDefaultClass()
+ {
+ Map(m => m.GuidColumn);
+ Map(m => m.IntColumn);
+ Map(m => m.StringColumn);
+ }
+ }
+
+ private sealed class TestMappingNameClass : ClassMap<TestClass>
+ {
+ public TestMappingNameClass()
+ {
+ Map(m => m.GuidColumn).Name("Guid Column");
+ Map(m => m.IntColumn).Name("Int Column");
+ Map(m => m.StringColumn).Name("String Column");
+ }
+ }
+
+ private sealed class TestMappingIndexClass : ClassMap<TestClass>
+ {
+ public TestMappingIndexClass()
+ {
+ Map(m => m.GuidColumn).Index(3);
+ Map(m => m.IntColumn).Index(2);
+ Map(m => m.StringColumn).Index(1);
+ }
+ }
+
+ private sealed class TestMappingIgnoreClass : ClassMap<TestClass>
+ {
+ public TestMappingIgnoreClass()
+ {
+ Map(m => m.GuidColumn).Ignore();
+ Map(m => m.IntColumn);
+ Map(m => m.StringColumn).Ignore();
+ }
+ }
+
+ private sealed class TestMappingTypeConverterClass : ClassMap<TestClass>
+ {
+ public TestMappingTypeConverterClass()
+ {
+ Map(m => m.GuidColumn).TypeConverter<Int16Converter>();
+ Map(m => m.IntColumn).TypeConverter<StringConverter>();
+ Map(m => m.StringColumn).TypeConverter(new Int64Converter());
+ }
+ }
+
+ private sealed class TestMappingMultipleNamesClass : ClassMap<TestClass>
+ {
+ public TestMappingMultipleNamesClass()
+ {
+ Map(m => m.GuidColumn).Name("guid1", "guid2", "guid3");
+ Map(m => m.IntColumn).Name("int1", "int2", "int3");
+ Map(m => m.StringColumn).Name("string1", "string2", "string3");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/FieldMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/FieldMappingTests.cs
new file mode 100644
index 0000000..3d52839
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/FieldMappingTests.cs
@@ -0,0 +1,397 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+#pragma warning disable 649
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class FieldMappingTests
+ {
+ [Fact]
+ public void ReadPublicFieldsWithAutoMapTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Fields,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("IdField,NameField");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<APublic>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].IdField);
+ Assert.Equal("one", records[0].BField.NameField);
+ }
+ }
+
+ [Fact]
+ public void WritePublicFieldsWithAutoMapTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Fields,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<APublic>
+ {
+ new APublic
+ {
+ IdField = 1,
+ BField = new BPublic
+ {
+ NameField = "one"
+ }
+ }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("IdField,NameField");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void ReadPublicFieldsWithMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("IdField,NameField");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<APublicMap>();
+ var records = csv.GetRecords<APublic>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].IdField);
+ Assert.Equal("one", records[0].BField.NameField);
+ }
+ }
+
+ [Fact]
+ public void WritePublicFieldsWithMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<APublic>
+ {
+ new APublic
+ {
+ IdField = 1,
+ BField = new BPublic
+ {
+ NameField = "one"
+ }
+ }
+ };
+ csv.Context.RegisterClassMap<APublicMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("IdField,NameField");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void ReadPrivateFieldsWithAutoMapTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Fields,
+ IncludePrivateMembers = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("idField,nameField");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<APrivate>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].GetId());
+ Assert.Equal("one", records[0].GetB().GetName());
+ }
+ }
+
+ [Fact]
+ public void WritePrivateFieldsWithAutoMapTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Fields,
+ IncludePrivateMembers = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<APrivate>
+ {
+ new APrivate( 1, "one" )
+ };
+
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("idField,nameField");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void ReadPrivateFieldsWithMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("idField,nameField");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<APrivateMap>();
+ var records = csv.GetRecords<APrivate>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].GetId());
+ Assert.Equal("one", records[0].GetB().GetName());
+ }
+ }
+
+ [Fact]
+ public void WritePrivateFieldsWithMappingTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<APrivate>
+ {
+ new APrivate( 1, "one" )
+ };
+ csv.Context.RegisterClassMap<APrivateMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("idField,nameField");
+ expected.AppendLine("1,one");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void ReadPublicFieldsAndPropertiesWithAutoMapTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Properties | MemberTypes.Fields,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("IdField,NameField,IdProp,NameProp");
+ writer.WriteLine("1,one,2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<APublic>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].IdField);
+ Assert.Equal("one", records[0].BField.NameField);
+ }
+ }
+
+ [Fact]
+ public void WritePublicFieldsAndPropertiesWithAutoMapTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MemberTypes = MemberTypes.Properties | MemberTypes.Fields,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<APublic>
+ {
+ new APublic
+ {
+ IdField = 1,
+ BField = new BPublic
+ {
+ NameField = "one",
+ NameProp = "two"
+ },
+ IdProp = 2
+ }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("IdProp,IdField,NameProp,NameField");
+ expected.AppendLine("2,1,two,one");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ private class APublic
+ {
+ public int IdField;
+ public BPublic BField;
+
+ public int IdProp { get; set; }
+ }
+
+ private class BPublic
+ {
+ public string NameField;
+
+ public string NameProp { get; set; }
+ }
+
+ private sealed class APublicMap : ClassMap<APublic>
+ {
+ public APublicMap()
+ {
+ Map(m => m.IdField);
+ References<BPublicMap>(m => m.BField);
+ }
+ }
+
+ private sealed class BPublicMap : ClassMap<BPublic>
+ {
+ public BPublicMap()
+ {
+ Map(m => m.NameField);
+ }
+ }
+
+ private class APrivate
+ {
+ private int idField;
+ private BPrivate bField;
+
+ private int IdProp { get; set; }
+ private BPrivate BProp { get; set; }
+
+ public int GetId()
+ {
+ return idField;
+ }
+
+ public BPrivate GetB()
+ {
+ return bField;
+ }
+
+ public APrivate() { }
+
+ public APrivate(int id, string name)
+ {
+ this.idField = id;
+ bField = new BPrivate(name);
+ }
+ }
+
+ private class BPrivate
+ {
+ private string nameField;
+
+ public string GetName()
+ {
+ return nameField;
+ }
+
+ public BPrivate() { }
+
+ public BPrivate(string name)
+ {
+ this.nameField = name;
+ }
+ }
+
+ private sealed class APrivateMap : ClassMap<APrivate>
+ {
+ public APrivateMap()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IncludePrivateMembers = true,
+ MemberTypes = MemberTypes.Fields
+ };
+ AutoMap(config);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/HiddenBaseMembersTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/HiddenBaseMembersTests.cs
new file mode 100644
index 0000000..518bcd4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/HiddenBaseMembersTests.cs
@@ -0,0 +1,117 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class HiddenBaseMembersTests
+ {
+ [Fact]
+ public void ReadWithAutoMapTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parserMock))
+ {
+ var records = csv.GetRecords<Bar>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ }
+ }
+
+ [Fact]
+ public void ReadWithClassMapTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ };
+ using (var csv = new CsvReader(parserMock))
+ {
+ csv.Context.RegisterClassMap<BarMap>();
+ var records = csv.GetRecords<Bar>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ }
+ }
+
+ [Fact]
+ public void WriteWithAutoMapTest()
+ {
+ var records = new List<Bar>
+ {
+ new Bar { Id = 1 },
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteWithClassMapTest()
+ {
+ var records = new List<Bar>
+ {
+ new Bar { Id = 1 },
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<BarMap>();
+ csv.WriteRecords(records);
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private abstract class Foo
+ {
+ public string Id { get; set; }
+ }
+
+ private class Bar : Foo
+ {
+ public new int Id { get; set; }
+ }
+
+ private class BarMap : ClassMap<Bar>
+ {
+ public BarMap()
+ {
+ Map(m => m.Id);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/IgnoreHeaderWhiteSpaceTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/IgnoreHeaderWhiteSpaceTests.cs
new file mode 100644
index 0000000..330ace9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/IgnoreHeaderWhiteSpaceTests.cs
@@ -0,0 +1,52 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class IgnoreHeaderWhiteSpaceTests
+ {
+ [Fact]
+ public void Blah()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("The Id,The Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Id).Name("The Id");
+ Map(m => m.Name).Name("The Name");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MapConstructorTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MapConstructorTests.cs
new file mode 100644
index 0000000..4429f1d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MapConstructorTests.cs
@@ -0,0 +1,42 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class MapConstructorTests
+ {
+ [Fact]
+ public void NoConstructor()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ Assert.Throws<MissingMethodException>(() => csv.Context.RegisterClassMap<TestMap>());
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ private TestMap(string test)
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MappingWithNoHeaderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MappingWithNoHeaderTests.cs
new file mode 100644
index 0000000..0b97af6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/MappingWithNoHeaderTests.cs
@@ -0,0 +1,243 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings
+{
+ public class MappingWithNoHeaderTests
+ {
+ [Fact]
+ public void Read_NoHeader_HasNameAttribute_Reads()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" }
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<FooAttribute>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void Read_NoHeader_HasNameMap_Reads()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" }
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void Read_NoHeader_HasParameterAttribute_Reads()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" }
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<FooParameterAttribute>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void Read_NoHeader_HasParameterMap_Reads()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "1", "one" }
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.RegisterClassMap<FooParameterMap>();
+ var records = csv.GetRecords<FooParameter>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void Write_HasHeader_HasNameAttribute_Writes()
+ {
+ var records = new List<FooAttribute>
+ {
+ new FooAttribute { Id = 1, Name = "one" },
+ };
+
+ var writer = new StringWriter();
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = "New Id,New Name\r\n1,one\r\n";
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void Write_HasHeader_HasNameMap_Writes()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+
+ var writer = new StringWriter();
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.WriteRecords(records);
+
+ var expected = "New Id,New Name\r\n1,one\r\n";
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void Write_HasHeader_HasParameterAttribute_Writes()
+ {
+ var records = new List<FooParameterAttribute>
+ {
+ new FooParameterAttribute(1, "one"),
+ };
+
+ var writer = new StringWriter();
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteRecords(records);
+
+ var expected = "Id,Name\r\n1,one\r\n";
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void Write_HasHeader_HasParameterMap_Writes()
+ {
+ var records = new List<FooParameterAttribute>
+ {
+ new FooParameterAttribute(1, "one"),
+ };
+
+ var writer = new StringWriter();
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooParameterMap>();
+ csv.WriteRecords(records);
+
+ var expected = "Id,Name\r\n1,one\r\n";
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ private class FooAttribute
+ {
+ [Index(0)]
+ [Name("New Id")]
+ public int Id { get; set; }
+
+ [Index(1)]
+ [Name("New Name")]
+ public string Name { get; set; }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(x => x.Id).Name("New Id").Index(0);
+ Map(x => x.Name).Name("New Name").Index(1);
+ }
+ }
+
+ private class FooParameterAttribute
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public FooParameterAttribute([Name("New Id")]int id, [Name("New Name")]string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooParameter
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public FooParameter(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class FooParameterMap : ClassMap<FooParameter>
+ {
+ public FooParameterMap()
+ {
+ Parameter("id").Name("New Id").Index(0);
+ Parameter("name").Name("New Name").Index(1);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/OptionalTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/OptionalTests.cs
new file mode 100644
index 0000000..66ea742
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/OptionalTests.cs
@@ -0,0 +1,220 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using CsvHelper;
+using CsvHelper.Configuration;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class OptionalTests
+ {
+ [Fact]
+ public void OptionalWithExistingColumnTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<FooOptionalIntMap>();
+
+ var records = csvReader.GetRecords<Foo>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ Assert.Equal(2, records[1].Id);
+ Assert.Equal("two", records[1].Name);
+ }
+
+ [Fact]
+ public void OptionalIntTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Name" },
+ { "one" },
+ { "two" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<FooOptionalIntMap>();
+
+ var records = csvReader.GetRecords<Foo>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+
+ Assert.Equal(0, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+
+ Assert.Equal(0, records[1].Id);
+ Assert.Equal("two", records[1].Name);
+ }
+
+ [Fact]
+ public void OptionalIntDefaultTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Name" },
+ { "one" },
+ { "two" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<FooOptionalIntDefaultMap>();
+
+ var records = csvReader.GetRecords<Foo>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+
+ Assert.Equal(int.MinValue, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+
+ Assert.Equal(int.MinValue, records[1].Id);
+ Assert.Equal("two", records[1].Name);
+ }
+
+ [Fact]
+ public void OptionalStringIntDefaultTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Name" },
+ { "one" },
+ { "two" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<FooOptionalStringIntDefaultMap>();
+
+ var records = csvReader.GetRecords<Foo>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+
+ Assert.Equal(int.MinValue, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+
+ Assert.Equal(int.MinValue, records[1].Id);
+ Assert.Equal("two", records[1].Name);
+ }
+
+ [Fact]
+ public void OptionalStringTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ { "2" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<FooOptionalStringMap>();
+
+ var records = csvReader.GetRecords<Foo>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+
+ Assert.Equal(2, records[1].Id);
+ Assert.Null(records[1].Name);
+ }
+
+ [Fact]
+ public void OptionalStringDefaultTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id" },
+ { "1" },
+ { "2" },
+ };
+
+ var csvReader = new CsvReader(parserMock);
+ csvReader.Context.RegisterClassMap<FooOptionalStringDefaultMap>();
+
+ var records = csvReader.GetRecords<Foo>().ToList();
+
+ Assert.NotNull(records);
+ Assert.Equal(2, records.Count);
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("bar", records[0].Name);
+
+ Assert.Equal(2, records[1].Id);
+ Assert.Equal("bar", records[1].Name);
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class FooOptionalIntMap : ClassMap<Foo>
+ {
+ public FooOptionalIntMap()
+ {
+ Map(m => m.Id).Optional();
+ Map(m => m.Name);
+ }
+ }
+
+ private sealed class FooOptionalIntDefaultMap : ClassMap<Foo>
+ {
+ public FooOptionalIntDefaultMap()
+ {
+ Map(m => m.Id).Optional().Default(int.MinValue);
+ Map(m => m.Name);
+ }
+ }
+
+ private sealed class FooOptionalStringIntDefaultMap : ClassMap<Foo>
+ {
+ public FooOptionalStringIntDefaultMap()
+ {
+ Map(m => m.Id).Optional().Default(int.MinValue.ToString());
+ Map(m => m.Name);
+ }
+ }
+
+ private sealed class FooOptionalStringMap : ClassMap<Foo>
+ {
+ public FooOptionalStringMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Optional();
+ }
+ }
+
+ private sealed class FooOptionalStringDefaultMap : ClassMap<Foo>
+ {
+ public FooOptionalStringDefaultMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Optional().Default("bar");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Property/ConstantTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Property/ConstantTests.cs
new file mode 100644
index 0000000..9aab105
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/Property/ConstantTests.cs
@@ -0,0 +1,74 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mappings.Property
+{
+
+ public class ConstantTests
+ {
+ [Fact]
+ public void GetRecords_ConstantSet_FieldExists_ReturnsRecordsWithConstant()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\r\n");
+ s.Append("1,one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_ConstantSet_FieldMissing_ReturnsRecordsWithConstant()
+ {
+ var s = new StringBuilder();
+ s.Append("Id\r\n");
+ s.Append("1\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Equal("Bar", records[0].Name);
+ }
+ }
+
+ private class Foo
+ {
+ public string Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id).Index(0);
+ Map(m => m.Name).Index(1).Constant("Bar");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ReferenceConstructorArgsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ReferenceConstructorArgsTests.cs
new file mode 100644
index 0000000..6bd33f7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/ReferenceConstructorArgsTests.cs
@@ -0,0 +1,50 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class ReferenceConstructorArgsTests
+ {
+ [Fact]
+ public void Test()
+ {
+ var map = new AMap( "A Field" );
+ var name = map.ReferenceMaps[0].Data.Mapping.MemberMaps.Find<B>( m => m.Name ).Data.Names[0];
+ Assert.Equal( "B Field", name );
+ }
+
+ private class A
+ {
+ public string Name { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string Name { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap( string name )
+ {
+ Map( m => m.Name ).Name( name );
+ References<BMap>( m => m.B, "B Field" );
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap( string name )
+ {
+ Map( m => m.Name ).Name( name );
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/RuntimeMapping.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/RuntimeMapping.cs
new file mode 100644
index 0000000..41f0714
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/RuntimeMapping.cs
@@ -0,0 +1,199 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class RuntimeMapping
+ {
+ [Fact]
+ public void ConstantTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("AId,BId,CId");
+ writer.WriteLine("1,2,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ var map = new DefaultClassMap<A>();
+ var type = typeof(A);
+ var member = type.GetProperty("AId");
+ map.Map(type, member).Constant(4);
+
+ csv.Context.RegisterClassMap(map);
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Equal(4, records[0].AId);
+ }
+ }
+
+ [Fact]
+ public void DefaultTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("AId,BId,CId");
+ writer.WriteLine(",2,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ var map = new DefaultClassMap<A>();
+ var type = typeof(A);
+ var member = type.GetProperty("AId");
+ map.Map(type, member).Default(4);
+
+ csv.Context.RegisterClassMap(map);
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Equal(4, records[0].AId);
+ }
+ }
+
+ [Fact]
+ public void ConstantNullableTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("AId,BId,CId,NullableNum");
+ writer.WriteLine("1,2,3,1");
+ writer.Flush();
+ stream.Position = 0;
+
+ var map = new DefaultClassMap<A>();
+ var type = typeof(A);
+ var member = type.GetProperty("NullableNum");
+ map.Map(type, member).Constant(4);
+
+ csv.Context.RegisterClassMap(map);
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Equal(4, records[0].NullableNum);
+ }
+ }
+
+ [Fact]
+ public void DefaultNullableTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("AId,BId,CId,NullableNum");
+ writer.WriteLine("1,2,3,");
+ writer.Flush();
+ stream.Position = 0;
+
+ var map = new DefaultClassMap<A>();
+ var type = typeof(A);
+ var member = type.GetProperty("NullableNum");
+ map.Map(type, member).Default(4);
+
+ csv.Context.RegisterClassMap(map);
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Equal(4, records[0].NullableNum);
+ }
+ }
+
+ [Fact]
+ public void ConstantValueTypeNullTest()
+ {
+ Assert.Throws<ArgumentException>(() => new ConstantValueTypeNullMap());
+ }
+
+ [Fact]
+ public void ConstantTypeMismatchTest()
+ {
+ Assert.Throws<ArgumentException>(() => new ConstantTypeMismatchMap());
+ }
+
+ [Fact]
+ public void DefaultValueTypeNullTest()
+ {
+ Assert.Throws<ArgumentException>(() => new DefaultValueTypeNullMap());
+ }
+
+ [Fact]
+ public void DefaultTypeMismatchTest()
+ {
+ Assert.Throws<ArgumentException>(() => new DefaultTypeMismatchMap());
+ }
+
+ private class A
+ {
+ public int AId { get; set; }
+
+ public int? NullableNum { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public int BId { get; set; }
+
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public int CId { get; set; }
+ }
+
+ private class ObjectProperty
+ {
+ public object O { get; set; }
+ }
+
+ private class ConstantValueTypeNullMap : ClassMap<A>
+ {
+ public ConstantValueTypeNullMap()
+ {
+ Map(m => m.AId).Constant(null);
+ }
+ }
+
+ private class ConstantTypeMismatchMap : ClassMap<A>
+ {
+ public ConstantTypeMismatchMap()
+ {
+ Map(m => m.AId).Constant((uint)1);
+ }
+ }
+
+ private class DefaultValueTypeNullMap : ClassMap<A>
+ {
+ public DefaultValueTypeNullMap()
+ {
+ Map(m => m.AId).Constant(null);
+ }
+ }
+
+ private class DefaultTypeMismatchMap : ClassMap<A>
+ {
+ public DefaultTypeMismatchMap()
+ {
+ Map(m => m.AId).Constant((uint)1);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/SubPropertyMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/SubPropertyMappingTests.cs
new file mode 100644
index 0000000..d1c3f8c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mappings/SubPropertyMappingTests.cs
@@ -0,0 +1,127 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Mappings
+{
+
+ public class SubPropertyMappingTests
+ {
+ [Fact]
+ public void ReadTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("P3,P1,P2");
+ writer.WriteLine("p3,p1,p2");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<AMap>();
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Equal("p1", records[0].P1);
+ Assert.Equal("p2", records[0].B.P2);
+ Assert.Equal("p3", records[0].B.C.P3);
+ }
+ }
+
+ [Fact]
+ public void WriteTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<A>()
+ {
+ new A
+ {
+ P1 = "p1",
+ B = new B
+ {
+ P2 = "p2",
+ C = new C
+ {
+ P3 = "p3"
+ }
+ }
+ }
+ };
+
+ csv.Context.RegisterClassMap<AMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = "P3,P1,P2\r\n";
+ expected += "p3,p1,p2\r\n";
+ var result = reader.ReadToEnd();
+
+ Assert.Equal(expected, result);
+ }
+ }
+
+ [Fact]
+ public void ChangeMemberMapTest()
+ {
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture);
+ var context = new CsvContext(config);
+ var map = context.AutoMap<A>();
+ map.Map(m => m.B.C.P3).Index(3);
+ }
+
+ [Fact]
+ public void AutoMapInClassMapTest()
+ {
+ var map = new AAutoMap();
+ }
+
+ private class A
+ {
+ public string P1 { get; set; }
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string P2 { get; set; }
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string P3 { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.B.C.P3).Index(0);
+ Map(m => m.P1).Index(1);
+ Map(m => m.B.P2).Index(2);
+ }
+ }
+
+ private sealed class AAutoMap : ClassMap<A>
+ {
+ public AAutoMap()
+ {
+ AutoMap(CultureInfo.InvariantCulture);
+ Map(m => m.B.C.P3).Index(3);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/DynamicObjectMock.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/DynamicObjectMock.cs
new file mode 100644
index 0000000..c54a1f3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/DynamicObjectMock.cs
@@ -0,0 +1,31 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Dynamic;
+
+namespace CsvHelper.Tests.Mocks
+{
+ public class DynamicObjectMock : DynamicObject
+ {
+ private Dictionary<string, object> dictionary = new Dictionary<string, object>();
+
+ public override bool TryGetMember(GetMemberBinder binder, out object result)
+ {
+ return dictionary.TryGetValue(binder.Name, out result);
+ }
+
+ public override bool TrySetMember(SetMemberBinder binder, object value)
+ {
+ dictionary[binder.Name] = value;
+
+ return true;
+ }
+
+ public override IEnumerable<string> GetDynamicMemberNames()
+ {
+ return dictionary.Keys;
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMock.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMock.cs
new file mode 100644
index 0000000..3dba8b2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMock.cs
@@ -0,0 +1,96 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using CsvHelper.Configuration;
+using System.Threading.Tasks;
+using System.Globalization;
+using System.Linq;
+
+namespace CsvHelper.Tests.Mocks
+{
+ public class ParserMock : IParser, IEnumerable<string[]>
+ {
+ private readonly Queue<string[]> records = new Queue<string[]>();
+ private string[] record;
+ private int row;
+
+ public CsvContext Context { get; private set; }
+
+ public IParserConfiguration Configuration { get; private set; }
+
+ public int Count => record?.Length ?? 0;
+
+ public string[] Record => record;
+
+ public string RawRecord => string.Empty;
+
+ public int Row => row;
+
+ public int RawRow => row;
+
+ public long ByteCount => 0;
+
+ public long CharCount => 0;
+
+ public string Delimiter => Configuration.Delimiter;
+
+ public string this[int index] => record[index];
+
+ public ParserMock() : this(new CsvConfiguration(CultureInfo.InvariantCulture)) { }
+
+ public ParserMock(CsvConfiguration configuration)
+ {
+ Configuration = configuration;
+ Context = new CsvContext(this);
+ }
+
+ public bool Read()
+ {
+ if (records.Count == 0)
+ {
+ return false;
+ }
+
+ row++;
+ record = records.Dequeue();
+
+ return true;
+ }
+
+ public Task<bool> ReadAsync()
+ {
+ row++;
+ record = records.Dequeue();
+
+ return Task.FromResult(records.Count > 0);
+ }
+
+ public void Dispose()
+ {
+ }
+
+ #region Mock Methods
+
+ public void Add(params string[] record)
+ {
+ records.Enqueue(record);
+ }
+
+ public IEnumerator<string[]> GetEnumerator()
+ {
+ return records.GetEnumerator();
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+
+ #endregion Mock Methods
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMockTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMockTests.cs
new file mode 100644
index 0000000..3b779c9
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ParserMockTests.cs
@@ -0,0 +1,37 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mocks
+{
+
+ public class ParserMockTests
+ {
+ [Fact]
+ public void Test()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ Assert.False(parser.Read());
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ReaderRowMock.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ReaderRowMock.cs
new file mode 100644
index 0000000..b73c81e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Mocks/ReaderRowMock.cs
@@ -0,0 +1,226 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Mocks
+{
+ public class ReaderRowMock : IReaderRow
+ {
+ public string this[int index] => throw new NotImplementedException();
+
+ public string this[string name] => throw new NotImplementedException();
+
+ public string this[string name, int index] => throw new NotImplementedException();
+
+ public int ColumnCount => throw new NotImplementedException();
+
+ public int CurrentIndex => throw new NotImplementedException();
+
+ public string[] HeaderRecord => throw new NotImplementedException();
+
+ public IParser Parser => throw new NotImplementedException();
+
+ public CsvContext Context => throw new NotImplementedException();
+
+ public IReaderConfiguration Configuration { get; private set; }
+
+ public ReaderRowMock()
+ {
+ Configuration = new CsvConfiguration(CultureInfo.InvariantCulture);
+ }
+
+ public ReaderRowMock(CsvConfiguration configuration)
+ {
+ Configuration = configuration;
+ }
+
+ public string GetField(int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetField(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public string GetField(string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetField(Type type, string name, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, int index)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T>(string name, int index, ITypeConverter converter)
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(int index) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(string name) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetField<T, TConverter>(string name, int index) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetRecord<T>()
+ {
+ throw new NotImplementedException();
+ }
+
+ public T GetRecord<T>(T anonymousTypeDefinition)
+ {
+ throw new NotImplementedException();
+ }
+
+ public object GetRecord(Type type)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, int index, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, int index, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, int index, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField(Type type, string name, int index, ITypeConverter converter, out object field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(int index, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, int index, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(int index, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T>(string name, int index, ITypeConverter converter, out T field)
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(int index, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(string name, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool TryGetField<T, TConverter>(string name, int index, out T field) where TConverter : ITypeConverter
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectCreatorTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectCreatorTests.cs
new file mode 100644
index 0000000..add5a72
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectCreatorTests.cs
@@ -0,0 +1,351 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Reflection.Emit;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.ObjectCreatorTests
+{
+
+ public class CreateInstance_ValueType
+ {
+ [Fact]
+ public void CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var value = creator.CreateInstance<int>();
+
+ Assert.Equal(default(int), value);
+ }
+
+ [Fact]
+ public void ParameterSupplied_ThrowsMissingMethodExcepetion()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<MissingMethodException>(() => creator.CreateInstance<int>(1));
+ }
+ }
+
+
+ public class CreateInstance_DefaultConstructor
+ {
+ [Fact]
+ public void CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>();
+ creator.CreateInstance<Foo>();
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(default(int), foo.Id);
+ }
+
+ [Fact]
+ public void ParameterSupplied_ThrowsMissingMethodExcepetion()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<MissingMethodException>(() => creator.CreateInstance<Foo>(1));
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public Foo() { }
+ }
+ }
+
+
+ public class CreateInstance_OneParameterConstructor
+ {
+ [Fact]
+ public void OneParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>(1);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(1, foo.Id);
+ }
+
+ [Fact]
+ public void NoParameter_ThrowsMissingMethodException()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<MissingMethodException>(() => creator.CreateInstance<Foo>());
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public Foo(int id)
+ {
+ Id = id;
+ }
+ }
+ }
+
+
+ public class CreateInstance_DefaultConstructorAndOneParameterConstructor
+ {
+ [Fact]
+ public void NoParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>();
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(default(int), foo.Id);
+ }
+
+ [Fact]
+ public void OneParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>(1);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(1, foo.Id);
+ }
+
+ [Fact]
+ public void OneParameterWrongType_ThrowsMissingMethodException()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<MissingMethodException>(() => creator.CreateInstance<Foo>(string.Empty));
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public Foo() { }
+
+ public Foo(int id)
+ {
+ Id = id;
+ }
+ }
+ }
+
+
+ public class CreateInstance_ValueTypeAndReferenceTypeParameters
+ {
+ [Fact]
+ public void FirstSignature_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>(1, "one");
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(1, foo.Id);
+ Assert.Equal("one", foo.Name);
+ }
+
+ [Fact]
+ public void SecondSignature_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>("one", 1);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(1, foo.Id);
+ Assert.Equal("one", foo.Name);
+ }
+
+ [Fact]
+ public void FirstSignature_NullReferenceType_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>(1, null);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(1, foo.Id);
+ Assert.Null(foo.Name);
+ }
+
+ [Fact]
+ public void SecondSignature_NullReferenceType_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>(null, 1);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(1, foo.Id);
+ Assert.Null(foo.Name);
+ }
+
+ [Fact]
+ public void FirstSignature_NullValueType_ThrowsMissingMethodException()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<MissingMethodException>(() => creator.CreateInstance<Foo>(null, "one"));
+ }
+
+ [Fact]
+ public void SecondSignature_NullValueType_ThrowsMissingMethodException()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<MissingMethodException>(() => creator.CreateInstance<Foo>("one", null));
+ }
+
+ private class Foo
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public Foo(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+
+ public Foo(string name, int id)
+ {
+ Name = name;
+ Id = id;
+ }
+ }
+ }
+
+
+ public class CreateInstance_TwoReferenceTypeParameters
+ {
+ [Fact]
+ public void FirstSignature_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var bar = new Bar();
+ var foo = creator.CreateInstance<Foo>("one", bar);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal("one", foo.Name);
+ Assert.Equal(bar, foo.Bar);
+ }
+
+ [Fact]
+ public void SecondSignature_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var bar = new Bar();
+ var foo = creator.CreateInstance<Foo>(bar, "one");
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal("one", foo.Name);
+ Assert.Equal(bar, foo.Bar);
+ }
+
+ [Fact]
+ public void FirstSignature_NullFirstParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var bar = new Bar();
+ var foo = creator.CreateInstance<Foo>(null, bar);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Null(foo.Name);
+ Assert.Equal(bar, foo.Bar);
+ }
+
+ [Fact]
+ public void FirstSignature_NullSecondParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>("one", null);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal("one", foo.Name);
+ Assert.Null(foo.Bar);
+ }
+
+ [Fact]
+ public void SecondSignature_NullFirstParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var foo = creator.CreateInstance<Foo>(null, "one");
+
+ Assert.IsType<Foo>(foo);
+ Assert.Null(foo.Bar);
+ Assert.Equal("one", foo.Name);
+ }
+
+ [Fact]
+ public void SecondSignature_NullSecondParameter_CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+ var bar = new Bar();
+ var foo = creator.CreateInstance<Foo>(bar, null);
+
+ Assert.IsType<Foo>(foo);
+ Assert.Equal(bar, foo.Bar);
+ Assert.Null(foo.Name);
+ }
+
+ [Fact]
+ public void FirstSignature_BothNullParameters_ThrowsAmbiguousMatchException()
+ {
+ var creator = new ObjectCreator();
+
+ Assert.Throws<AmbiguousMatchException>(() => creator.CreateInstance<Foo>(null, null));
+ }
+
+ private class Foo
+ {
+ public string Name { get; set; }
+
+ public Bar Bar { get; set; }
+
+ public Foo(string name, Bar bar)
+ {
+ Name = name;
+ Bar = bar;
+ }
+
+ public Foo(Bar bar, string name)
+ {
+ Bar = bar;
+ Name = name;
+ }
+ }
+
+ private class Bar { }
+ }
+
+
+ public class CreateInstance_PrivateConstructor
+ {
+ [Fact]
+ public void CreatesInstance()
+ {
+ var creator = new ObjectCreator();
+
+ var foo = creator.CreateInstance<Foo>();
+
+ Assert.IsType<Foo>(foo);
+ }
+
+ private class Foo
+ {
+ private Foo() { }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/Issue1073.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/Issue1073.cs
new file mode 100644
index 0000000..cf4cec4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/Issue1073.cs
@@ -0,0 +1,72 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Tests.Issues
+{
+
+ public class Issue1073
+ {
+ [Fact]
+ public void GetFieldTest()
+ {
+ var originalResolver = ObjectResolver.Current;
+ try
+ {
+ ObjectResolver.Current = new ObjectResolver(type => true, (type, args) =>
+ {
+ throw new XUnitException();
+ });
+
+ var s = new StringBuilder();
+ s.Append("Id,Name\r\n");
+ s.Append("1,one\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Read();
+ csv.ReadHeader();
+ while (csv.Read())
+ {
+ csv.GetField<int>("Id");
+ csv.GetField<string>("Name");
+ }
+ }
+ }
+ finally
+ {
+ ObjectResolver.Current = originalResolver;
+ }
+ }
+
+ [Fact]
+ public void WriteFieldTest()
+ {
+ var originalResolver = ObjectResolver.Current;
+ try
+ {
+ ObjectResolver.Current = new ObjectResolver(type => true, (type, args) =>
+ {
+ throw new XUnitException();
+ });
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField(1);
+ csv.WriteField("one");
+ csv.NextRecord();
+ }
+ }
+ finally
+ {
+ ObjectResolver.Current = originalResolver;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/ResolveSingleTypeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/ResolveSingleTypeTests.cs
new file mode 100644
index 0000000..4413c3f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ObjectResolverTests/ResolveSingleTypeTests.cs
@@ -0,0 +1,59 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Linq;
+
+namespace CsvHelper.Tests.ObjectResolverTests
+{
+
+ public class ResolverSingleTypeTests
+ {
+ [Fact]
+ public void Test()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ };
+
+ var originalResolver = ObjectResolver.Current;
+
+ try
+ {
+ using (var csv = new CsvReader(parser))
+ {
+ ObjectResolver.Current = new ObjectResolver(CanResolve, Resolve);
+ var records = csv.GetRecords<A>().ToList();
+
+ Assert.Single(records);
+ }
+ }
+ finally
+ {
+ ObjectResolver.Current = originalResolver;
+ }
+ }
+
+ private bool CanResolve(Type type)
+ {
+ return type == typeof(A);
+ }
+
+ private object Resolve(Type type, object[] args)
+ {
+ return new A();
+ }
+
+ private class A
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BadDataTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BadDataTests.cs
new file mode 100644
index 0000000..8f6ccb4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BadDataTests.cs
@@ -0,0 +1,153 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class BadDataTests
+ {
+ [Fact]
+ public void CallbackTest()
+ {
+ string rawRecord = null;
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = args => rawRecord = args.Context.Parser.RawRecord.ToString(),
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write(" a\"bc\",d\r\n"); // a"bc",d\r\n
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ var record = parser.Record;
+ Assert.Equal(" a\"bc\",d\r\n", rawRecord);
+
+ rawRecord = null;
+ parser.Read();
+ record = parser.Record;
+ Assert.Null(rawRecord);
+ }
+ }
+
+ [Fact]
+ public void ThrowExceptionTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("1,2");
+ writer.WriteLine(" a\"bc\",d");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ try
+ {
+ parser.Read();
+ var record = parser.Record;
+ throw new XUnitException("Failed to throw exception on bad data.");
+ }
+ catch (BadDataException) { }
+ }
+ }
+
+ [Fact]
+ public void IgnoreQuotesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("one,2\"two,three\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("2\"two", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void LineBreakInQuotedFieldIsBadDataCrTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ LineBreakInQuotedFieldIsBadData = true,
+ };
+ using (var reader = new StringReader("\"a\rb\""))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Throws<BadDataException>(() => parser.Record);
+ }
+ }
+
+ [Fact]
+ public void LineBreakInQuotedFieldIsBadDataLfTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ LineBreakInQuotedFieldIsBadData = true,
+ };
+ using (var reader = new StringReader("\"a\nb\""))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Throws<BadDataException>(() => parser.Record);
+ }
+ }
+
+ [Fact]
+ public void LineBreakInQuotedFieldIsBadDataCrLfTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ LineBreakInQuotedFieldIsBadData = true,
+ };
+ using (var reader = new StringReader("\"a\r\nb\""))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Throws<BadDataException>(() => parser.Record);
+ }
+ }
+
+ [Fact]
+ public void Read_AccessingParserRecordInBadDataFound_ThrowsParserException()
+ {
+ var badstring = new StringReader("Fish,\"DDDD");
+
+ string[] record = new string[0];
+ var cfg = new CsvConfiguration(CultureInfo.CurrentCulture)
+ {
+ BadDataFound = args => record = args.Context.Parser.Record
+ };
+ var parser = new CsvParser(badstring, cfg);
+
+ parser.Read();
+
+ Assert.Throws<ParserException>(() => parser[1]);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingEscapeAndQuoteTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingEscapeAndQuoteTests.cs
new file mode 100644
index 0000000..007df34
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingEscapeAndQuoteTests.cs
@@ -0,0 +1,38 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class BufferSplittingEscapeAndQuoteTests
+ {
+ [Fact]
+ public void Read_BufferEndsAtEscape_FieldIsNotBadData()
+ {
+ var s = new StringBuilder();
+ s.Append("a,\"bcdefghijklm\"\"nopqrstuvwxyz\"\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("a", parser[0]);
+ Assert.Equal("bcdefghijklm\"nopqrstuvwxyz", parser[1]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingLineEndingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingLineEndingTests.cs
new file mode 100644
index 0000000..c4457f4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingLineEndingTests.cs
@@ -0,0 +1,98 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Text;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class BufferSplittingLineEndingTests
+ {
+ [Fact]
+ public void Read_BufferSplitsCrLf_BufferNeedsResize_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("1,0000000000321\r\n");
+ s.Append("3,4\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("0000000000321", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void Read_BufferSplitsCrLf_NoBufferResize_DoesntAddExtraField()
+ {
+ var s = new StringBuilder();
+ s.Append("1,200000\r\n");
+ s.Append("3,400000\r\n");
+ s.Append("5,600\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ Assert.Equal(2, parser.Count);
+ }
+ }
+
+ [Fact]
+ public void Read_BufferSplitsCrLf_NoBufferResize_RawRecordIsCorrect()
+ {
+ var s = new StringBuilder();
+ s.Append("1,200000\r\n");
+ s.Append("3,400000\r\n");
+ s.Append("5,600\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ Assert.Equal("5,600\r\n", parser.RawRecord);
+ }
+ }
+
+ [Fact]
+ public void BufferSplitsCrLfWithLastFieldQuotedTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,200000\r\n");
+ s.Append("3,4000\r\n");
+ s.Append("5,\"600\"\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("5,\"600\"\r\n", parser.RawRecord);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingNewLineEndingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingNewLineEndingTests.cs
new file mode 100644
index 0000000..a3d40b4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/BufferSplittingNewLineEndingTests.cs
@@ -0,0 +1,102 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Text;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class BufferSplittingCrLnTests
+ {
+ [Fact]
+ public void Read_BufferSplitsCrLf_BufferNeedsResize_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("1,0000000000321\r\n");
+ s.Append("3,4\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ NewLine = "\r\n",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("0000000000321", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void Read_BufferSplitsCrLf_NoBufferResize_DoesntAddExtraField()
+ {
+ var s = new StringBuilder();
+ s.Append("1,200000\r\n");
+ s.Append("3,400000\r\n");
+ s.Append("5,600\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ NewLine = "\r\n",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ Assert.Equal(2, parser.Count);
+ }
+ }
+
+ [Fact]
+ public void Read_BufferSplitsCrLf_NoBufferResize_RawRecordIsCorrect()
+ {
+ var s = new StringBuilder();
+ s.Append("1,200000\r\n");
+ s.Append("3,400000\r\n");
+ s.Append("5,600\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ NewLine = "\r\n",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ Assert.Equal("5,600\r\n", parser.RawRecord);
+ }
+ }
+
+ [Fact]
+ public void BufferSplitsCrLfWithLastFieldQuotedTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,200000\r\n");
+ s.Append("3,4000\r\n");
+ s.Append("5,\"600\"\r\n");
+ var config = new CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ NewLine = "\r\n",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ parser.Read();
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("5,\"600\"\r\n", parser.RawRecord);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ByteCountTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ByteCountTests.cs
new file mode 100644
index 0000000..dc3bd8d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ByteCountTests.cs
@@ -0,0 +1,137 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class ByteCountTests
+ {
+ [Fact]
+ public void Read_CRLF_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Encoding = Encoding.Unicode,
+ CountBytes = true,
+ };
+ var s = new StringBuilder();
+ s.Append("1,2\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(config.Encoding.GetByteCount(s.ToString()), parser.ByteCount);
+ }
+ }
+
+ [Fact]
+ public void Read_CR_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Encoding = Encoding.Unicode,
+ CountBytes = true,
+ };
+ var s = new StringBuilder();
+ s.Append("1,2\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(config.Encoding.GetByteCount(s.ToString()), parser.ByteCount);
+ }
+ }
+
+ [Fact]
+ public void Read_LF_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Encoding = Encoding.Unicode,
+ CountBytes = true,
+ };
+ var s = new StringBuilder();
+ s.Append("1,2\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(config.Encoding.GetByteCount(s.ToString()), parser.ByteCount);
+ }
+ }
+
+ [Fact]
+ public void Read_NoLineEnding_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Encoding = Encoding.Unicode,
+ CountBytes = true,
+ };
+ var s = new StringBuilder();
+ s.Append("1,2");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(config.Encoding.GetByteCount(s.ToString()), parser.ByteCount);
+ }
+ }
+
+ [Fact]
+ public void CharCountFirstCharOfDelimiterNextToDelimiterTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Encoding = Encoding.Unicode,
+ CountBytes = true,
+ Delimiter = "!#",
+ };
+ var s = new StringBuilder();
+ s.Append("1!!#2\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(config.Encoding.GetByteCount(s.ToString()), parser.ByteCount);
+ }
+ }
+
+ [Fact]
+ public void Read_Trimmed_WhiteSpaceCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Encoding = Encoding.Unicode,
+ CountBytes = true,
+ TrimOptions = TrimOptions.Trim
+ };
+ var s = new StringBuilder();
+ s.Append("1, 2\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(config.Encoding.GetByteCount(s.ToString()), parser.ByteCount);
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CharCountTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CharCountTests.cs
new file mode 100644
index 0000000..06b469e
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CharCountTests.cs
@@ -0,0 +1,124 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class CharCountTests
+ {
+ [Fact]
+ public void Read_CRLF_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var s = new StringBuilder();
+ s.Append("1,2\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(5, parser.CharCount);
+ }
+ }
+
+ [Fact]
+ public void Read_CR_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var s = new StringBuilder();
+ s.Append("1,2\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(4, parser.CharCount);
+ }
+ }
+
+ [Fact]
+ public void Read_LF_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var s = new StringBuilder();
+ s.Append("1,2\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(4, parser.CharCount);
+ }
+ }
+
+ [Fact]
+ public void Read_NoLineEnding_CharCountCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var s = new StringBuilder();
+ s.Append("1,2");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(3, parser.CharCount);
+ }
+ }
+
+ [Fact]
+ public void CharCountFirstCharOfDelimiterNextToDelimiterTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "!#",
+ };
+ var s = new StringBuilder();
+ s.Append("1!!#2\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(7, parser.CharCount);
+ }
+ }
+
+ [Fact]
+ public void Read_Trimmed_WhiteSpaceCorrect()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim
+ };
+ var s = new StringBuilder();
+ s.Append("1, 2");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(4, parser.CharCount);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CommentTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CommentTests.cs
new file mode 100644
index 0000000..cd4db53
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CommentTests.cs
@@ -0,0 +1,125 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class CommentTests
+ {
+ [Fact]
+ public void CommentThatCrossesBuffersShouldNotAddToFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ BufferSize = 16
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1,2\r\n");
+ writer.Write("#abcdefghijklmnop\r\n");
+ writer.Write("3,4");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void WriteCommentCharInFieldWithCommentsOffTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("#no comment");
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal("#no comment\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void WriteCommentCharInFieldWithCommentsOnTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("#no comment");
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal("#no comment\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void WriteCommentWithCommentsOffTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteComment("comment\"has\" quote");
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal("#comment\"has\" quote\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void WriteCommentWithCommentsOnTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ AllowComments = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteComment("comment\"has\" quote");
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal("#comment\"has\" quote\r\n", result);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CrTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CrTests.cs
new file mode 100644
index 0000000..e14d619
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CrTests.cs
@@ -0,0 +1,235 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class CrTests
+ {
+ [Fact]
+ public void SingleFieldAndSingleRowTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void SingleFieldAndSingleRowAndFieldIsQuotedTest()
+ {
+ var s = new StringBuilder();
+ s.Append("\"1\"\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void SingleFieldAndMultipleRowsAndFirstFieldInFirstRowIsQuotedAndNoLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("\"1\"\r");
+ s.Append("2");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+
+ parser.Read();
+ Assert.Equal("2", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void SingleFieldAndMultipleRowsAndFirstFieldInFirstRowIsQuotedAndHasLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("\"1\"\r");
+ s.Append("2\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+
+ parser.Read();
+ Assert.Equal("2", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void SingleFieldAndMultipleRowsTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1\r");
+ s.Append("2\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+
+ parser.Read();
+ Assert.Equal("2", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void SingleFieldAndMultipleRowsAndLastRowHasNoLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1\r");
+ s.Append("2");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+
+ parser.Read();
+ Assert.Equal("2", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void SingleFieldAndSecondRowIsQuotedAndLastRowHasNoLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1\r");
+ s.Append("\"2\"");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+
+ parser.Read();
+ Assert.Equal("2", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void MultipleFieldsAndSingleRowAndLastRowHasNoLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void MultipleFieldsAndMultipleRowsAndLastRowHasNoLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\r");
+ s.Append("3,4");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void MultipleFieldsAndMultipleRowsAndLastRowHasLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\r");
+ s.Append("3,4\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void MultipleFieldsAndMultipleRowsAndLastFieldInFirstRowIsQuotedAndLastRowHasLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,\"2\"\r");
+ s.Append("3,4\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void MultipleFieldsAndMultipleRowsAndSecondRowFirstFieldIsQuotedAndLastRowHasLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\r");
+ s.Append("\"3\",4\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void MultipleFieldsAndMultipleRowsAndAllFieldsQuotedAndHasLineEndingTest()
+ {
+ var s = new StringBuilder();
+ s.Append("\"1\",\"2\"\r");
+ s.Append("\"3\",\"4\"\r");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ parser.Read();
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+
+ parser.Read();
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CsvModeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CsvModeTests.cs
new file mode 100644
index 0000000..f561f68
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/CsvModeTests.cs
@@ -0,0 +1,109 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class CsvModeTests
+ {
+ [Fact]
+ public void Read_HasEscapedDelimiter_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("a\\,b,c\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("a,b", parser[0]);
+ Assert.Equal("c", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_HasEscapedLineEnding_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("a\\\nb,c\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("a\nb", parser[0]);
+ Assert.Equal("c", parser[1]);
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_NoEscapeMode_HasRFC4180Format_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("a,\"b,\"\"c\r\nd\",e");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.NoEscape,
+ Escape = '"',
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("a", parser[0]);
+ Assert.Equal("\"b", parser[1]);
+ Assert.Equal("\"\"c", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("d\"", parser[0]);
+ Assert.Equal("e", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void Read_NoEscapeMode_HasEscapeFormat_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("a,\\b\\,c\\\nd,e");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.NoEscape,
+ Escape = '\\',
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("a", parser[0]);
+ Assert.Equal("\\b\\", parser[1]);
+ Assert.Equal("c\\", parser[2]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("d", parser[0]);
+ Assert.Equal("e", parser[1]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DelimiterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DelimiterTests.cs
new file mode 100644
index 0000000..66f599b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DelimiterTests.cs
@@ -0,0 +1,81 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class DelimiterTests
+ {
+ [Fact]
+ public void MultipleCharDelimiterWithPartOfDelimiterInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "<|>",
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ writer.Write("1<|>2<3<|>4\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2<3", parser[1]);
+ Assert.Equal("4", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void NullDelimiterTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "\0",
+ };
+ var s = new StringBuilder();
+ s.Append("1\02\03\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.Equal("3", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void FirstCharOfDelimiterNextToDelimiterTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "!#",
+ };
+ var s = new StringBuilder();
+ s.AppendLine("1!!#2");
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("1!", parser[0]);
+ Assert.Equal("2", parser[1]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DetectDelimiterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DetectDelimiterTests.cs
new file mode 100644
index 0000000..facc030
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/DetectDelimiterTests.cs
@@ -0,0 +1,286 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+ public class DetectDelimiterTests
+ {
+ [Fact]
+ public void GetDelimiter_TextHasCommas_DetectsComma()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\r\n");
+ s.Append("1,one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ };
+ Assert.Equal(",", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_TextHasSemicolons_DetectsSemicolon()
+ {
+ var s = new StringBuilder();
+ s.Append("Id;Name\r\n");
+ s.Append("1;one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(";", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+ }
+
+ [Fact]
+ public void GetDelimiter_TextHasPipes_DetectsPipe()
+ {
+ var s = new StringBuilder();
+ s.Append("Id|Name\r\n");
+ s.Append("1|one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("|", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+ }
+
+ [Fact]
+ public void GetDelimiter_TextHasTabs_DetectsTab()
+ {
+ var s = new StringBuilder();
+ s.Append("Id\tName\r\n");
+ s.Append("1\tone\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("\t", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+ }
+
+ [Fact]
+ public void GetDelimiter_EqualAmountOfDelimiters_DetectsFirstInDelimiterValuesList()
+ {
+ var s = new StringBuilder();
+ s.Append(";;,,\t\t||\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ DetectDelimiter = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(",", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+ }
+
+ [Fact]
+ public void GetDelimiter_TextHas2CharDelimiter_DetectsDelimiter()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,,Name\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ DetectDelimiter = true,
+ DetectDelimiterValues = new[] { ",," },
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(",,", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+ }
+
+ [Fact]
+ public void GetDelimiter_TextHasRegularCharDelimiter_DetectsDelimiter()
+ {
+ var s = new StringBuilder();
+ s.Append("IdþName\r\n");
+ s.Append("1þone\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ DetectDelimiterValues = new[] { "þ" }
+ };
+ Assert.Equal("þ", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_MultipleLines_DetectsDelimiterThatIsOnEveryLine()
+ {
+ var s = new StringBuilder();
+ s.Append("Id;Name\r\n");
+ s.Append("1,2,3,4;5,6,7,8\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ DetectDelimiterValues = new[] { ",", ";" }
+ };
+ Assert.Equal(";", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_NoDelimiter_DoesNotDetect()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\r\n");
+ s.Append("1,one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ DetectDelimiterValues = new[] { ";" }
+ };
+ Assert.Equal("`", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_CulturesSeparatorOccursLessButIsOnEveryLine_CulturesSeparatorIsDetected()
+ {
+ var s = new StringBuilder();
+ s.Append("1;2,3;4\r\n");
+ s.Append("5;6,7;8\r\n");
+ s.Append("9;10,11;12\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ Assert.Equal(CultureInfo.InvariantCulture.TextInfo.ListSeparator, ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_CulturesSeparatorOccursLessAndIsOnFirstLine_CulturesSeparatorIsNotDetected()
+ {
+ var s = new StringBuilder();
+ s.Append("1;2,3;4\r\n");
+ s.Append("5;6;7;8\r\n");
+ s.Append("9;10,11;12\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ Assert.NotEqual(CultureInfo.InvariantCulture.TextInfo.ListSeparator, ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_CulturesSeparatorOccursLessAndHasSingleLine_CulturesSeparatorIsNotDetected()
+ {
+ var s = new StringBuilder();
+ s.Append("1;2,3;4\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ Assert.NotEqual(CultureInfo.InvariantCulture.TextInfo.ListSeparator, ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_CulturesSeparatorOccursLessAndHas2LinesAndIsOnEveryLine_CulturesSeparatorIsNotDetected()
+ {
+ var s = new StringBuilder();
+ s.Append("1;2,3;4\r\n");
+ s.Append("5;6,7;8\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ Assert.NotEqual(CultureInfo.InvariantCulture.TextInfo.ListSeparator, ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_CulturesSeparatorOccursLessAndIsOnSecondLine_CulturesSeparatorIsDetected()
+ {
+ var s = new StringBuilder();
+ s.Append("1;2;3;4\r\n");
+ s.Append("5;6,7;8\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ Assert.Equal(";", ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config)));
+ }
+
+ [Fact]
+ public void GetDelimiter_TextHasLF_NewLineIsCRLF_DetectsDelimiter()
+ {
+ var s = new StringBuilder();
+ s.Append("name;num;date\nLily;1,005.25;2021-02-03\nJack;3.5;2021-02-04");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var delimeter = ConfigurationFunctions.GetDelimiter(new Delegates.GetDelimiterArgs(s.ToString(), config));
+ Assert.Equal(";", delimeter);
+ }
+
+ [Fact]
+ public void CsvParserConstructor_DelimiterValuesEmpty_ThrowsException()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\r\n");
+ s.Append("1,one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DetectDelimiter = true,
+ DetectDelimiterValues = new string[0],
+ };
+ using (var reader = new StringReader(s.ToString()))
+ {
+ Assert.Throws<ConfigurationException>(() => new CsvParser(reader, config));
+ }
+ }
+
+ [Fact]
+ public void Read_TextHasCommas_ParsesRows()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\r\n");
+ s.Append("1,one\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = "`",
+ DetectDelimiter = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var row = parser.Read();
+
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ row = parser.Read();
+
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EndBufferTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EndBufferTests.cs
new file mode 100644
index 0000000..9b1e2dd
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EndBufferTests.cs
@@ -0,0 +1,79 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class EndBufferTests
+ {
+ [Fact]
+ public void Read_BufferEndsInOneCharDelimiter_ParsesFieldCorrectly()
+ {
+ var s = new StringBuilder();
+ s.Append("abcdefghijklmno,pqrs\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("abcdefghijklmno", parser[0]);
+ Assert.Equal("pqrs", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void Read_BufferEndsInFirstCharOfTwoCharDelimiter_ParsesFieldCorrectly()
+ {
+ var s = new StringBuilder();
+ s.Append("abcdefghijklmnop;;qrs\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ Delimiter = ";;",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("abcdefghijklmnop", parser[0]);
+ Assert.Equal("qrs", parser[1]);
+ }
+ }
+
+ [Fact]
+ public void Read_BufferEndsInSecondCharOfTwoCharDelimiter_ParsesFieldCorrectly()
+ {
+ var s = new StringBuilder();
+ s.Append("abcdefghijklmno;;pqrs\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16,
+ Delimiter = ";;",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal(2, parser.Count);
+ Assert.Equal("abcdefghijklmno", parser[0]);
+ Assert.Equal("pqrs", parser[1]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EscapeCharacterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EscapeCharacterTests.cs
new file mode 100644
index 0000000..bf0b801
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/EscapeCharacterTests.cs
@@ -0,0 +1,110 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class EscapeCharacterTests
+ {
+ [Fact]
+ public void EscapeTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Escape = '|',
+ };
+ using (var reader = new StringReader("\"|\"a|\"\"\r\n"))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("\"a\"", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void EscapeNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Escape = '|',
+ };
+ using (var reader = new StringReader("\"|\"a|\"\""))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("\"a\"", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void EscapeTrimOutsideTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Escape = '|',
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var reader = new StringReader(" \"|\"a|\"\" \r\n")) // ` "|"a|"" \r\n`
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("\"a\"", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void EscapeTrimInsideTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Escape = '|',
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var reader = new StringReader("\" |\"a|\" \"\r\n"))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("\"a\"", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void EscapeTrimBothTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Escape = '|',
+ TrimOptions = TrimOptions.Trim | TrimOptions.InsideQuotes,
+ };
+ using (var reader = new StringReader(" \" |\"a|\" \" \r\n"))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ Assert.Equal("\"a\"", parser[0]);
+ }
+ }
+
+ [Fact]
+ public void EscapeWriteTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Escape = '|',
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("\"a\"");
+ csv.Flush();
+
+ Assert.Equal("\"|\"a|\"\"", writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ExcelCompatibilityTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ExcelCompatibilityTests.cs
new file mode 100644
index 0000000..801443d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/ExcelCompatibilityTests.cs
@@ -0,0 +1,123 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class ExcelCompatibilityTests
+ {
+ [Fact]
+ public void Parse_EscapedFieldHasSpaceAfterLastQuote_FieldProcessedLeavingSpaceAtEnd()
+ {
+ var s = new StringBuilder();
+ s.Append("one,\"two\" ,three\r\n"); // one,"two" ,three
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = null,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("one", parser[0]);
+ Assert.Equal("two ", parser[1]);
+ Assert.Equal("three", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void Parse_EscapedFieldHasSpaceBeforeFirstQuote_FieldIsNotProcessed()
+ {
+ var s = new StringBuilder();
+ s.Append("one, \"two\",three\r\n"); // one, "two",three
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = null,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("one", parser[0]);
+ Assert.Equal(" \"two\"", parser[1]);
+ Assert.Equal("three", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void Parse_EscapedFieldHasExtraQuoteAfterLastQuote_CharsAfterLastQuoteAreNotProcessed()
+ {
+ var s = new StringBuilder();
+ s.Append("1,\"two\" \"2,3\r\n"); // 1,"two" "2,3
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = null,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("two \"2", parser[1]);
+ Assert.Equal("3", parser[2]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Parse_EscapedFieldHasNoEndingQuote_GoesToEndOfFile()
+ {
+ var s = new StringBuilder();
+ s.Append("a,b,\"c\r\n"); // a,b,"c\r\nd,e,f\r\n
+ s.Append("d,e,f\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = null,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal("b", parser[1]);
+ Assert.Equal("c\r\nd,e,f\r\n", parser[2]);
+ }
+ }
+
+ [Fact]
+ public void Parse_NonEscapedFieldHasQuotesInIt_IgnoresQuotes()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\"3\"4,5\r\n"); // 1,2"3"4,5
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BadDataFound = null,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal(3, parser.Count);
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2\"3\"4", parser[1]);
+ Assert.Equal("5", parser[2]);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/FieldCacheTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/FieldCacheTests.cs
new file mode 100644
index 0000000..38bea21
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/FieldCacheTests.cs
@@ -0,0 +1,94 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class FieldCacheTests
+ {
+ [Fact]
+ public void Read_WithFieldCacheEnabled_ReturnsSameFieldInstance()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\r\n");
+ s.Append("2,1\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CacheFields = true,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ var a = parser[0];
+ parser.Read();
+ var b = parser[1];
+
+ Assert.Same(a, b);
+ }
+ }
+
+ [Fact]
+ public void Read_WithFieldCacheDisabled_ReturnsDifferentFieldInstance()
+ {
+ var s = new StringBuilder();
+ s.Append("1,2\r\n");
+ s.Append("2,1\r\n");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ CacheFields = false,
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ var a = parser[0];
+ parser.Read();
+ var b = parser[1];
+
+ Assert.NotSame(a, b);
+ }
+ }
+
+ [Fact]
+ public void Test1()
+ {
+ // "542008", "27721116", "98000820" have hash code 3769566006
+
+ var value1 = "542008";
+ var value2 = "27721116";
+ var value3 = "98000820";
+ var value4 = "542008";
+
+ var cache = new FieldCache(1);
+
+ var field1 = cache.GetField(value1.ToCharArray(), 0, value1.Length);
+ var field2 = cache.GetField(value2.ToCharArray(), 0, value2.Length);
+ var field3 = cache.GetField(value3.ToCharArray(), 0, value3.Length);
+ var field4 = cache.GetField(value4.ToCharArray(), 0, value4.Length);
+
+ Assert.Equal(value1, field1);
+ Assert.Equal(value2, field2);
+ Assert.Equal(value3, field3);
+ Assert.Equal(value4, field4);
+
+ Assert.NotSame(value1, field1);
+ Assert.NotSame(value2, field2);
+ Assert.NotSame(value3, field3);
+ Assert.NotSame(value4, field4);
+
+ Assert.Same(field1, field4);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/MaxFieldSizeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/MaxFieldSizeTests.cs
new file mode 100644
index 0000000..98567c6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/MaxFieldSizeTests.cs
@@ -0,0 +1,50 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests.Parsing
+{
+ public class MaxFieldSizeTests
+ {
+ [Fact]
+ public void LargeRecordFieldThrowsMaxFieldSizeExceptionTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MaxFieldSize = 10
+ };
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("1,2,3");
+ s.AppendLine("ok,1234567890,x");
+ s.AppendLine("nok,12345678901,y");
+ using (var reader = new StringReader(s))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+ parser.Read();
+ Assert.Throws<MaxFieldSizeException>(() => parser.Read());
+ }
+ }
+
+ [Fact]
+ public void LargeHeaderFieldThrowsMaxFieldSizeExceptionTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MaxFieldSize = 10
+ };
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("1,very long header name");
+ using (var reader = new StringReader(s))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.Throws<MaxFieldSizeException>(() => parser.Read());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/NewLineTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/NewLineTests.cs
new file mode 100644
index 0000000..b943450
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/NewLineTests.cs
@@ -0,0 +1,176 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class NewLineTests
+ {
+ [Fact]
+ public void Read_RfcMode_2CharNewLine_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\a\b");
+ s.Append("1,one\a\b");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.RFC4180,
+ NewLine = "\a\b",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_RfcMode_1CharNewLine_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\a");
+ s.Append("1,one\a");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.RFC4180,
+ NewLine = "\a",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_RfcMode_2CharNewLine_NoneOnLastLine_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\a\b");
+ s.Append("1,one");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.RFC4180,
+ NewLine = "\a\b",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_EscapeMode_2CharNewLine_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\a\b");
+ s.Append("1,one\a\b");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ NewLine = "\a\b",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_EscapeMode_1CharNewLine_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\a");
+ s.Append("1,one\a");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ NewLine = "\a",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+
+ [Fact]
+ public void Read_EscapeMode_2CharNewLine_NoneOnLastLine_Parses()
+ {
+ var s = new StringBuilder();
+ s.Append("Id,Name\a\b");
+ s.Append("1,one");
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ NewLine = "\a\b",
+ };
+ using (var reader = new StringReader(s.ToString()))
+ using (var parser = new CsvParser(reader, config))
+ {
+ Assert.True(parser.Read());
+ Assert.Equal("Id", parser[0]);
+ Assert.Equal("Name", parser[1]);
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("one", parser[1]);
+
+ Assert.False(parser.Read());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/RefillingTextReaderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/RefillingTextReaderTests.cs
new file mode 100644
index 0000000..9ad8c6f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/RefillingTextReaderTests.cs
@@ -0,0 +1,59 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class RefillingTextReaderTests
+ {
+ [Fact]
+ public void RefillTextReaderMultipleTimesTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var parser = new CsvParser(reader, CultureInfo.InvariantCulture))
+ {
+ writer.Write("1,2\r\n");
+ writer.Flush();
+ stream.Position = 0;
+
+ Assert.True(parser.Read());
+ Assert.Equal("1", parser[0]);
+ Assert.Equal("2", parser[1]);
+ Assert.False(parser.Read());
+
+ var position = stream.Position;
+ writer.Write("3,4\r\n");
+ writer.Flush();
+ stream.Position = position;
+
+ Assert.True(parser.Read());
+ Assert.Equal("3", parser[0]);
+ Assert.Equal("4", parser[1]);
+ Assert.False(parser.Read());
+
+ position = stream.Position;
+ writer.Write("5,6\r\n");
+ writer.Flush();
+ stream.Position = position;
+
+ Assert.True(parser.Read());
+ Assert.Equal("5", parser[0]);
+ Assert.Equal("6", parser[1]);
+ Assert.False(parser.Read());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/TrimTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/TrimTests.cs
new file mode 100644
index 0000000..a4a4370
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Parsing/TrimTests.cs
@@ -0,0 +1,1206 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Parsing
+{
+
+ public class TrimTests
+ {
+ [Fact]
+ public void OutsideStartTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a,b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideStartNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a,b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideStartSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a b c,d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideStartSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a b c,d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideEndTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "a ,b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideEndNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "a ,b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideEndSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "a b c ,d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideEndSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "a b c ,d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideBothTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a ,b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideBothNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a ,b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideBothSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a b c ,d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideBothSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a b c ,d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesStartTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a\",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesStartNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a\",b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesStartSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a b c\",d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesStartSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a b c\",d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesEndTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a\" ,b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesEndNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a\" ,b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesEndSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a b c\" ,d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesEndSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a b c\" ,d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesBothTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a\" ,b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesBothNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a\" ,b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesBothSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a b c\" ,d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesBothSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \"a b c\" ,d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesBothSpacesInFieldMultipleRecordsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a b c , d e f \r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal("d e f", parser[1]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesBothSpacesInFieldMultipleRecordsNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " a b c , d e f ";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal("d e f", parser[1]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesStartTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a\",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesStartNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a\",b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesStartSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a b c\",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesStartSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a b c\",b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesStartSpacesInFieldDelimiterInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a ,b c\",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a ,b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesStartSpacesInFieldDelimiterInFieldSmallBufferNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ BufferSize = 1,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a ,b c\",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a ,b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesEndTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a \",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesEndNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a \",b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesEndSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a b c \",d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesEndSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\"a b c \",d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a \",b\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a \",b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothSpacesInFieldTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a b c \",d\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothSpacesInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a b c \",d";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothSpacesInFieldMultipleRecordsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a b c \",\" d e f \"\r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal("d e f", parser[1]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothSpacesInFieldMultipleRecordsNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "\" a b c \",\" d e f \"";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal("d e f", parser[1]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideAndInsideQuotesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim | TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \" a b c \" , \" d e f \" \r\n";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal("d e f", parser[1]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideAndInsideQuotesNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim | TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = " \" a b c \" , \" d e f \" ";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b c", parser[0]);
+ Assert.Equal("d e f", parser[1]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesNoSpacesNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "abc";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("abc", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void OutsideQuotesNoSpacesHasSpaceInFieldNoNewlineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var parser = new CsvParser(reader, config))
+ {
+ var line = "a b";
+ writer.Write(line);
+ writer.Flush();
+ stream.Position = 0;
+
+ parser.Read();
+
+ Assert.Equal("a b", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideNoSpacesQuotesFieldHasEscapedQuotesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ var line = "\"a \"\"b\"\" c\"";
+ using (var reader = new StringReader(line))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("a \"b\" c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothSpacesFieldHasEscapedQuotesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ var line = "\" a \"\"b\"\" c \"\r\n";
+ using (var reader = new StringReader(line))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("a \"b\" c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void InsideQuotesBothSpacesFieldHasEscapedQuotesNoNewLineTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.InsideQuotes,
+ };
+ var line = "\" a \"\"b\"\" c \"";
+ using (var reader = new StringReader(line))
+ using (var parser = new CsvParser(reader, config))
+ {
+ parser.Read();
+
+ Assert.Equal("a \"b\" c", parser[0]);
+ Assert.Equal(line, parser.RawRecord.ToString());
+ }
+ }
+
+ [Fact]
+ public void ReadingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim | TrimOptions.InsideQuotes,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("A,B");
+ writer.WriteLine(" \" a b c \" , \" d e f \" ");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<dynamic>().ToList();
+
+ var record = records[0];
+ Assert.Equal("a b c", record.A);
+ Assert.Equal("d e f", record.B);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/AnonymousTypesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/AnonymousTypesTests.cs
new file mode 100644
index 0000000..79e537c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/AnonymousTypesTests.cs
@@ -0,0 +1,707 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class AnonymousTypesTests
+ {
+ [Fact]
+ public void ValueTypeSingleRecordTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ Name = string.Empty
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+ }
+
+ [Fact]
+ public void ValueTypeAllRecordsTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ Name = string.Empty
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+ }
+
+ [Fact]
+ public void ValueTypeAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ Name = string.Empty
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+
+ }
+
+ [Fact]
+ public void ReferenceTypeSingleRecordTest()
+ {
+ var definition = new
+ {
+ Reference = new Test()
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(1, record.Reference.Id);
+ Assert.Equal("one", record.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void ReferenceTypeAllRecordsTest()
+ {
+ var definition = new
+ {
+ Reference = new Test()
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Reference.Id);
+ Assert.Equal("one", record.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void ReferenceTypeAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ Reference = new Test()
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Reference.Id);
+ Assert.Equal("one", record.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void ValueAndReferenceTypeSingleRecordTest()
+ {
+ var definition = new
+ {
+ A = 0,
+ B = string.Empty,
+ Reference = new Test()
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("A,Id,Name,B");
+ writer.WriteLine("-1,1,one,b");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(-1, record.A);
+ Assert.Equal("b", record.B);
+ Assert.Equal(1, record.Reference.Id);
+ Assert.Equal("one", record.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void ValueAndReferenceTypeAllRecordsTest()
+ {
+ var definition = new
+ {
+ A = 0,
+ B = string.Empty,
+ Reference = new Test()
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("A,Id,Name,B");
+ writer.WriteLine("-1,1,one,b");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(-1, record.A);
+ Assert.Equal("b", record.B);
+ Assert.Equal(1, record.Reference.Id);
+ Assert.Equal("one", record.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void ValueAndReferenceTypeAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ A = 0,
+ B = string.Empty,
+ Reference = new Test()
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("-1,b,1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(-1, record.A);
+ Assert.Equal("b", record.B);
+ Assert.Equal(1, record.Reference.Id);
+ Assert.Equal("one", record.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceSingleRecordTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ AnonymousReference = new
+ {
+ Name = string.Empty
+ }
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.AnonymousReference.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceAllRecordsTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ AnonymousReference = new
+ {
+ Name = string.Empty
+ }
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.AnonymousReference.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ AnonymousReference = new
+ {
+ Name = string.Empty
+ }
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.AnonymousReference.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceHasAnonymousReferenceSingleRecordTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ AnonymousReference = new
+ {
+ AnonymousReference2 = new
+ {
+ Name = string.Empty
+ }
+ }
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.AnonymousReference.AnonymousReference2.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceHasAnonymousReferenceAllRecordsTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ AnonymousReference = new
+ {
+ AnonymousReference2 = new
+ {
+ Name = string.Empty
+ }
+ }
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.AnonymousReference.AnonymousReference2.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceHasAnonymousReferenceAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ Id = 0,
+ AnonymousReference = new
+ {
+ AnonymousReference2 = new
+ {
+ Name = string.Empty
+ }
+ }
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.AnonymousReference.AnonymousReference2.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceHasReferenceSingleRecordTest()
+ {
+ var definition = new
+ {
+ A = 0,
+ AnonymousReference = new
+ {
+ Reference = new Test()
+ }
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name,A");
+ writer.WriteLine("1,one,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(2, record.A);
+ Assert.Equal(1, record.AnonymousReference.Reference.Id);
+ Assert.Equal("one", record.AnonymousReference.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceHasReferenceAllRecordsTest()
+ {
+ var definition = new
+ {
+ A = 0,
+ AnonymousReference = new
+ {
+ Reference = new Test()
+ }
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name,A");
+ writer.WriteLine("1,one,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(2, record.A);
+ Assert.Equal(1, record.AnonymousReference.Reference.Id);
+ Assert.Equal("one", record.AnonymousReference.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void AnonymousReferenceHasReferenceAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ A = 0,
+ AnonymousReference = new
+ {
+ Reference = new Test()
+ }
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("2,1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(2, record.A);
+ Assert.Equal(1, record.AnonymousReference.Reference.Id);
+ Assert.Equal("one", record.AnonymousReference.Reference.Name);
+ }
+ }
+
+ [Fact]
+ public void ParentChildReferenceSingleRecordTest()
+ {
+ var definition = new
+ {
+ Reference = new Child()
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("ParentId,ChildId,ParentName,ChildName");
+ writer.WriteLine("1,2,one,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ var record = csv.GetRecord(definition);
+
+ Assert.Equal(1, record.Reference.ParentId);
+ Assert.Equal("one", record.Reference.ParentName);
+ Assert.Equal(2, record.Reference.ChildId);
+ Assert.Equal("two", record.Reference.ChildName);
+ }
+ }
+
+ [Fact]
+ public void ParentChildReferenceAllRecordsTest()
+ {
+ var definition = new
+ {
+ Reference = new Child()
+ };
+
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("ParentId,ChildId,ParentName,ChildName");
+ writer.WriteLine("1,2,one,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Reference.ParentId);
+ Assert.Equal("one", record.Reference.ParentName);
+ Assert.Equal(2, record.Reference.ChildId);
+ Assert.Equal("two", record.Reference.ChildName);
+ }
+ }
+
+ [Fact]
+ public void ParentChildReferenceAllRecordsNoHeaderTest()
+ {
+ var definition = new
+ {
+ Reference = new Child()
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,one,2,two");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords(definition).ToList();
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Reference.ChildId);
+ Assert.Equal("one", record.Reference.ChildName);
+ Assert.Equal(2, record.Reference.ParentId);
+ Assert.Equal("two", record.Reference.ParentName);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private class ContainsReference
+ {
+ public Test Test { get; set; }
+ }
+
+ private class Parent
+ {
+ public int ParentId { get; set; }
+
+ public string ParentName { get; set; }
+ }
+
+ private class Child : Parent
+ {
+ public int ChildId { get; set; }
+
+ public string ChildName { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/BadDataTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/BadDataTests.cs
new file mode 100644
index 0000000..b127478
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/BadDataTests.cs
@@ -0,0 +1,64 @@
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+ public class BadDataTests
+ {
+ [Fact]
+ public void GetRecord_BadDataCountNotDuplicted()
+ {
+ var errorCount = 0;
+ var csvConfiguration = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ReadingExceptionOccurred = args => false,
+ BadDataFound = args =>
+ {
+ ++errorCount;
+ },
+ Delimiter = ";",
+ };
+ var csv = "SKU;Min quantity;List price;Sale price\r\nTestSku1;2;10.99;9.99\r\nTestSku2;2;10.99;9\r\nXXX;\"9;10.9;9";
+ var stream = new MemoryStream();
+ using (var writer = new StreamWriter(stream, leaveOpen: true))
+ {
+ writer.Write(csv);
+ writer.Flush();
+ stream.Position = 0;
+ }
+ var textReader = new StreamReader(stream, leaveOpen: true);
+
+ var csvReader = new CsvReader(textReader, csvConfiguration);
+
+ while (csvReader.Read())
+ {
+ csvReader.GetRecord<CsvPrice>();
+ }
+
+ Assert.Equal(1, errorCount);
+ }
+
+ public sealed class CsvPrice
+ {
+ [Name("SKU")]
+ public string Sku { get; set; }
+
+ [Name("Min quantity")]
+ public int MinQuantity { get; set; }
+
+ [Name("List price")]
+ public decimal ListPrice { get; set; }
+
+ [Name("Sale price")]
+ public decimal? SalePrice { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstantTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstantTests.cs
new file mode 100644
index 0000000..9a9d3ac
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstantTests.cs
@@ -0,0 +1,114 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System.IO;
+using System.Globalization;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class ConstantTests
+ {
+ [Fact]
+ public void ConstantAlwaysReturnsSameValueTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csv = new CsvReader(parser);
+ csv.Context.RegisterClassMap<TestStringMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("constant", records[0].Name);
+ Assert.Equal(2, records[1].Id);
+ Assert.Equal("constant", records[1].Name);
+ }
+
+ [Fact]
+ public void ConstantIsNullTest()
+ {
+ var rows = new Queue<string[]>();
+ rows.Enqueue(new[] { "Id", "Name" });
+ rows.Enqueue(new[] { "1", "one" });
+ rows.Enqueue(new[] { "2", "two" });
+ rows.Enqueue(null);
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "one" },
+ { "2", "two" },
+ };
+
+ var csv = new CsvReader(parser);
+ csv.Context.RegisterClassMap<TestNullMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Equal(1, records[0].Id);
+ Assert.Null(records[0].Name);
+ Assert.Equal(2, records[1].Id);
+ Assert.Null(records[1].Name);
+ }
+
+ [Fact]
+ public void IntConstantTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var reader = new StringReader("1,one\r\n"))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<TestIntMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Equal(-1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestStringMap : ClassMap<Test>
+ {
+ public TestStringMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Constant("constant");
+ }
+ }
+
+ private sealed class TestNullMap : ClassMap<Test>
+ {
+ public TestNullMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Constant(null);
+ }
+ }
+
+ private sealed class TestIntMap : ClassMap<Test>
+ {
+ public TestIntMap()
+ {
+ Map(m => m.Id).Constant(-1);
+ Map(m => m.Name);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstructorParametersTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstructorParametersTests.cs
new file mode 100644
index 0000000..a96df82
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ConstructorParametersTests.cs
@@ -0,0 +1,220 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class ConstructorParametersTests
+ {
+ [Fact]
+ public void ValueTypesParamsMatchPropsTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<ValueTypesParamsMatchProps>().ToList();
+
+ Assert.Single(records);
+
+ var record = records[0];
+
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+ }
+
+ [Fact]
+ public void ValueTypesParamsDontMatchPropsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(args.Header)
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<ValueTypesParamsDontMatchProps>().ToList();
+
+ Assert.Single(records);
+
+ var record = records[0];
+
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+ }
+
+ [Fact]
+ public void MultipleConstructorsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(args.Header)
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<MultipleConstructors>().ToList();
+
+ Assert.Single(records);
+
+ var record = records[0];
+
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+ }
+
+ [Fact]
+ public void UseDifferentConstructorTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(args.Header),
+ GetConstructor = args => args.ClassType.GetConstructors().First(),
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<MultipleConstructors>().ToList();
+
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Null(record.Name);
+ }
+ }
+
+ [Fact]
+ public void UseDifferentConstructorWhenDefaultIsAvailableTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => CultureInfo.CurrentCulture.TextInfo.ToTitleCase(args.Header),
+ ShouldUseConstructorParameters = args =>
+ !args.ParameterType.IsUserDefinedStruct()
+ && !args.ParameterType.IsInterface
+ && Type.GetTypeCode(args.ParameterType) == TypeCode.Object,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<MultipleConstructorsWithDefault>().ToList();
+
+ Assert.Single(records);
+
+ var record = records[0];
+ Assert.Equal(1, record.Id);
+ Assert.Equal("one", record.Name);
+ }
+ }
+
+ private class ValueTypesParamsMatchProps
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public ValueTypesParamsMatchProps(int Id, string Name)
+ {
+ this.Id = Id;
+ this.Name = Name;
+ }
+ }
+
+ private class ValueTypesParamsDontMatchProps
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public ValueTypesParamsDontMatchProps(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class MultipleConstructors
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public MultipleConstructors(int id)
+ {
+ Id = id;
+ }
+
+ public MultipleConstructors(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+
+ public MultipleConstructors(string name)
+ {
+ Name = name;
+ }
+ }
+
+ private class MultipleConstructorsWithDefault
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; private set; }
+
+ public MultipleConstructorsWithDefault() { }
+
+ public MultipleConstructorsWithDefault(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DetectColumnCountChangesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DetectColumnCountChangesTests.cs
new file mode 100644
index 0000000..7139409
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DetectColumnCountChangesTests.cs
@@ -0,0 +1,199 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class DetectColumnCountChangesTests
+ {
+ [Fact]
+ public void ConsistentColumnsWithDetectColumnChangesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DetectColumnCountChanges = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Column 1,Column 2");
+ writer.WriteLine("1,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ while (!csv.Read())
+ {
+ }
+ }
+ }
+
+ [Fact]
+ public void InconsistentColumnsMultipleRowsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DetectColumnCountChanges = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Column 1,Column 2");
+ writer.WriteLine("1,2"); // Valid
+ writer.WriteLine("1,2,3"); // Error - too many fields
+ writer.WriteLine("1,2"); // Valid
+ writer.WriteLine("1"); // Error - not enough fields
+ writer.WriteLine("1,2,3,4"); // Error - too many fields
+ writer.WriteLine("1,2"); // Valid
+ writer.WriteLine("1,2"); // Valid
+ writer.Flush();
+ stream.Position = 0;
+
+ var failCount = 0;
+
+ while (true)
+ {
+ try
+ {
+ if (!csv.Read())
+ {
+ break;
+ }
+ }
+ catch (BadDataException)
+ {
+ failCount++;
+ }
+ }
+
+ // Expect only 3 errors
+ Assert.Equal<int>(3, failCount);
+ }
+ }
+
+ [Fact]
+ public void InconsistentColumnsSmallerTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DetectColumnCountChanges = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3,4");
+ writer.WriteLine("5,6,7");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+
+ try
+ {
+ csv.Read();
+ throw new XUnitException();
+ }
+ catch (BadDataException)
+ {
+ }
+ }
+ }
+
+ [Fact]
+ public void InconsistentColumnsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DetectColumnCountChanges = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Column 1,Column 2");
+ writer.WriteLine("1,2,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+
+ try
+ {
+ csv.Read();
+ throw new XUnitException();
+ }
+ catch (BadDataException)
+ {
+ }
+ }
+ }
+
+ [Fact]
+ public void WillThrowOnMissingFieldStillWorksTest()
+ {
+ var missingFieldExceptionCount = 0;
+ var columnCountChangeExceptionCount = 0;
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DetectColumnCountChanges = true,
+ HeaderValidated = null,
+ ReadingExceptionOccurred = (args) =>
+ {
+ if (args.Exception is MissingFieldException)
+ {
+ missingFieldExceptionCount++;
+ }
+ else if (args.Exception is BadDataException)
+ {
+ columnCountChangeExceptionCount++;
+ }
+
+ return false;
+ },
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3");
+ writer.WriteLine("4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestMap>();
+ var records = csv.GetRecords<Test>().ToList();
+ Assert.Equal(1, missingFieldExceptionCount);
+ Assert.Equal(1, columnCountChangeExceptionCount);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DynamicTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DynamicTests.cs
new file mode 100644
index 0000000..d843eb0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/DynamicTests.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class DynamicTests
+ {
+ [Fact]
+ public void PrepareHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args => args.Header.Replace(" ", string.Empty),
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("O ne,Tw o,Thr ee");
+ writer.WriteLine("1,2,3");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<dynamic>().ToList();
+ Assert.Equal("1", records[0].One);
+ Assert.Equal("2", records[0].Two);
+ Assert.Equal("3", records[0].Three);
+ }
+ }
+
+ [Fact]
+ public void BlankHeadersTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ PrepareHeaderForMatch = args =>
+ {
+ if (string.IsNullOrWhiteSpace(args.Header))
+ {
+ return $"Blank{args.FieldIndex}";
+ }
+
+ return args.Header;
+ },
+ };
+ var s = new StringBuilder();
+ s.AppendLine("Id,,");
+ s.AppendLine("1,2");
+ s.AppendLine("3");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, config))
+ {
+ var records = csv.GetRecords<dynamic>().ToList();
+
+ var record = records[0];
+ Assert.Equal("1", record.Id);
+ Assert.Equal("2", record.Blank1);
+ Assert.Equal(null, record.Blank2);
+
+ record = records[1];
+ Assert.Equal("3", record.Id);
+ Assert.Equal(null, record.Blank1);
+ Assert.Equal(null, record.Blank2);
+ }
+ }
+
+ [Fact]
+ public void DuplicateFieldNamesTest()
+ {
+ var headerNameCounts = new Dictionary<string, int>();
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ GetDynamicPropertyName = args =>
+ {
+ var header = args.Context.Reader.HeaderRecord[args.FieldIndex];
+ var prepareHeaderForMatchArgs = new PrepareHeaderForMatchArgs(header, args.FieldIndex);
+ header = args.Context.Reader.Configuration.PrepareHeaderForMatch(prepareHeaderForMatchArgs);
+ var name = headerNameCounts[header] > 1 ? $"{header}{args.FieldIndex}" : header;
+
+ return name;
+ },
+ };
+ var parser = new ParserMock(config)
+ {
+ { "Id", "Name", "Name" },
+ { "1", "foo", "bar" },
+ null
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Read();
+ csv.ReadHeader();
+ var counts =
+ (from header in csv.Context.Reader.HeaderRecord.Select((h, i) => csv.Configuration.PrepareHeaderForMatch(new PrepareHeaderForMatchArgs(h, i)))
+ group header by header into g
+ select new
+ {
+ Header = g.Key,
+ Count = g.Count()
+ }).ToDictionary(x => x.Header, x => x.Count);
+ foreach (var count in counts)
+ {
+ headerNameCounts.Add(count.Key, count.Value);
+ }
+
+ var records = csv.GetRecords<dynamic>().ToList();
+ var record = records[0];
+ Assert.Equal("1", record.Id);
+ Assert.Equal("foo", record.Name1);
+ Assert.Equal("bar", record.Name2);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/EmptyTextReaderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/EmptyTextReaderTests.cs
new file mode 100644
index 0000000..0400092
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/EmptyTextReaderTests.cs
@@ -0,0 +1,25 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class EmptyTextReaderTests
+ {
+ [Fact]
+ public void EmptyStreamDoesntFailTest()
+ {
+ using( var stream = new MemoryStream() )
+ using( var reader = new StreamReader( stream ) )
+ using( var csv = new CsvReader(reader, CultureInfo.InvariantCulture) )
+ {
+ Assert.False( csv.Read() );
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleGetRecordsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleGetRecordsTests.cs
new file mode 100644
index 0000000..5aeed79
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleGetRecordsTests.cs
@@ -0,0 +1,60 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class MultipleGetRecordsTests
+ {
+ [Fact]
+ public void GetRecordsAfterRefillingReaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<Test>().ToList();
+
+ var position = stream.Position;
+ writer.WriteLine("2,two");
+ writer.Flush();
+ stream.Position = position;
+
+ records = csv.GetRecords<Test>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(2, records[0].Id);
+ Assert.Equal("two", records[0].Name);
+
+ position = stream.Position;
+ writer.WriteLine("3,three");
+ writer.Flush();
+ stream.Position = position;
+
+ records = csv.GetRecords<Test>().ToList();
+
+ Assert.Single(records);
+ Assert.Equal(3, records[0].Id);
+ Assert.Equal("three", records[0].Name);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleHeadersTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleHeadersTests.cs
new file mode 100644
index 0000000..49a0b22
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/MultipleHeadersTests.cs
@@ -0,0 +1,114 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class MultipleHeadersTests
+ {
+ [Fact]
+ public void ReadWithoutMapTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("A,B");
+ writer.WriteLine("1,one");
+ writer.WriteLine("Y,Z");
+ writer.WriteLine("two,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+
+ Assert.Equal(1, csv.GetField<int>("A"));
+ Assert.Equal("one", csv.GetField("B"));
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+
+ Assert.Equal("two", csv.GetField("Y"));
+ Assert.Equal(2, csv.GetField<int>("Z"));
+ }
+ }
+
+ [Fact]
+ public void ReadWithMapTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("A,B");
+ writer.WriteLine("1,one");
+ writer.WriteLine("Y,Z");
+ writer.WriteLine("two,2");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<AlphaMap>();
+ csv.Context.RegisterClassMap<OmegaMap>();
+
+ csv.Read();
+ csv.ReadHeader();
+
+ csv.Read();
+ var alphaRecord = csv.GetRecord<Alpha>();
+
+ Assert.Equal(1, alphaRecord.A);
+ Assert.Equal("one", alphaRecord.B);
+
+ csv.Read();
+ csv.ReadHeader();
+
+ csv.Read();
+ var omegaRecord = csv.GetRecord<Omega>();
+
+ Assert.Equal("two", omegaRecord.Y);
+ Assert.Equal(2, omegaRecord.Z);
+ }
+ }
+
+ private class Alpha
+ {
+ public int A { get; set; }
+ public string B { get; set; }
+ }
+
+ private class Omega
+ {
+ public string Y { get; set; }
+ public int Z { get; set; }
+ }
+
+ private sealed class AlphaMap : ClassMap<Alpha>
+ {
+ public AlphaMap()
+ {
+ Map(m => m.A);
+ Map(m => m.B);
+ }
+ }
+
+ private sealed class OmegaMap : ClassMap<Omega>
+ {
+ public OmegaMap()
+ {
+ Map(m => m.Y);
+ Map(m => m.Z);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/NullableValuesInEmptyColumnsInputTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/NullableValuesInEmptyColumnsInputTests.cs
new file mode 100644
index 0000000..c5fcdd5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/NullableValuesInEmptyColumnsInputTests.cs
@@ -0,0 +1,224 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System.Globalization;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class NullableValuesInEmptyColumnsInputTests
+ {
+ [Fact]
+ public void SingleColumnCsvWithHeadersAndSingleNullDataRowTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ MissingFieldFound = null,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "NullableInt32Field" },
+ { new string[0] },
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<int?>().NullValues.Add(string.Empty);
+
+ // Read header row, assert header row columns:
+ Assert.True(csv.Read());
+ Assert.True(csv.ReadHeader());
+ Assert.Single(csv.HeaderRecord);
+ Assert.Equal("NullableInt32Field", csv.HeaderRecord[0]);
+
+ // Read single data row, assert single null value:
+ Assert.True(csv.Read());
+
+ var nullableIntValueByIndex = csv.GetField<int?>(index: 0);
+ var nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.False(nullableIntValueByIndex.HasValue);
+ Assert.False(nullableIntValueByName.HasValue);
+
+ // Read to end of file:
+ Assert.False(csv.Read());
+ }
+ }
+
+ [Fact]
+ public void SingleColumnCsvWithHeadersAndPresentAndNullDataRowTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ MissingFieldFound = null,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "NullableInt32Field" },
+ { "1" },
+ { new string[0] },
+ { "3" },
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<int?>().NullValues.Add(string.Empty);
+
+ // Read header row, assert header row columns:
+ Assert.True(csv.Read());
+ Assert.True(csv.ReadHeader());
+ Assert.Single(csv.HeaderRecord);
+ Assert.Equal("NullableInt32Field", csv.HeaderRecord[0]);
+
+ // Read first data row, assert "1" value:
+ Assert.True(csv.Read());
+
+ var nullableIntValueByIndex = csv.GetField<int?>(0);
+ var nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.True(nullableIntValueByIndex.HasValue);
+ Assert.True(nullableIntValueByName.HasValue);
+
+ Assert.Equal(1, nullableIntValueByIndex);
+ Assert.Equal(1, nullableIntValueByName);
+
+ // Read second data row, assert null value:
+ Assert.True(csv.Read());
+
+ nullableIntValueByIndex = csv.GetField<int?>(0);
+ nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.False(nullableIntValueByIndex.HasValue);
+ Assert.False(nullableIntValueByName.HasValue);
+
+ // Read third data row, assert "3" value:
+ Assert.True(csv.Read());
+
+ nullableIntValueByIndex = csv.GetField<int?>(0);
+ nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.True(nullableIntValueByIndex.HasValue);
+ Assert.True(nullableIntValueByName.HasValue);
+
+ Assert.Equal(3, nullableIntValueByIndex);
+ Assert.Equal(3, nullableIntValueByName);
+
+ // Read to end of file:
+ Assert.False(csv.Read());
+ }
+ }
+
+ [Fact]
+ public void TwoColumnCsvWithHeadersAndPresentAndNullDataRowTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IgnoreBlankLines = false,
+ MissingFieldFound = null,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "NullableInt32Field", "NullableStringField" },
+ { "1" },
+ { "", "Foo" },
+ { "", "" },
+ { "4", "Bar" },
+ };
+
+ using (var csv = new CsvReader(parser))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add(string.Empty); // Read empty fields as nulls instead of `""`.
+
+ // Read header row, assert header row columns:
+ Assert.True(csv.Read());
+ Assert.True(csv.ReadHeader());
+ Assert.Equal(2, csv.HeaderRecord.Length);
+ Assert.Equal("NullableInt32Field", csv.HeaderRecord[0]);
+ Assert.Equal("NullableStringField", csv.HeaderRecord[1]);
+
+ // Read first data row:
+ Assert.True(csv.Read());
+
+ // Read `Int32?`, assert "1" value:
+ var nullableIntValueByIndex = csv.GetField<int?>(0);
+ var nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.True(nullableIntValueByIndex.HasValue);
+ Assert.True(nullableIntValueByName.HasValue);
+
+ Assert.Equal(1, nullableIntValueByIndex);
+ Assert.Equal(1, nullableIntValueByName);
+
+ // Read nullable String, assert null value:
+ var strByIndex = csv.GetField<string>(1);
+ var strByName = csv.GetField<string>("NullableStringField");
+
+ Assert.Null(strByIndex);
+ Assert.Null(strByName);
+
+ // Read second data row:
+ Assert.True(csv.Read());
+
+ // Read `Int32?`, assert NULL value:
+ nullableIntValueByIndex = csv.GetField<int?>(0);
+ nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.False(nullableIntValueByIndex.HasValue);
+ Assert.False(nullableIntValueByName.HasValue);
+
+ // Read nullable String, assert "Foo" value:
+ strByIndex = csv.GetField<string>(1);
+ strByName = csv.GetField<string>("NullableStringField");
+
+ Assert.Equal("Foo", strByIndex);
+ Assert.Equal("Foo", strByName);
+
+ // Read third data row:
+ Assert.True(csv.Read());
+
+ // Read `Int32?`, assert NULL value:
+ nullableIntValueByIndex = csv.GetField<int?>(0);
+ nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.False(nullableIntValueByIndex.HasValue);
+ Assert.False(nullableIntValueByName.HasValue);
+
+ // Read nullable String, assert "Foo" value:
+ strByIndex = csv.GetField<string>(1);
+ strByName = csv.GetField<string>("NullableStringField");
+
+ Assert.Null(strByIndex);
+ Assert.Null(strByName);
+
+ // Read fourth data row:
+ Assert.True(csv.Read());
+
+ // Read `Int32?`, assert "3" value:
+ nullableIntValueByIndex = csv.GetField<int?>(0);
+ nullableIntValueByName = csv.GetField<int?>("NullableInt32Field");
+
+ Assert.True(nullableIntValueByIndex.HasValue);
+ Assert.True(nullableIntValueByName.HasValue);
+
+ Assert.Equal(4, nullableIntValueByIndex);
+ Assert.Equal(4, nullableIntValueByName);
+
+ // Read nullable String, assert "Bar" value:
+ strByIndex = csv.GetField<string>(1);
+ strByName = csv.GetField<string>("NullableStringField");
+
+ Assert.Equal("Bar", strByIndex);
+ Assert.Equal("Bar", strByName);
+
+ // Read to end of file:
+ Assert.False(csv.Read());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/PrivateSettersInParentTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/PrivateSettersInParentTests.cs
new file mode 100644
index 0000000..af192f0
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/PrivateSettersInParentTests.cs
@@ -0,0 +1,90 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class PrivateSettersInParentTests
+ {
+ [Fact]
+ public void AutoMappingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IncludePrivateMembers = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ var records = csv.GetRecords<Child>().ToList();
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void ClassMappingTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ IncludePrivateMembers = true,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<ChildMap>();
+
+ var records = csv.GetRecords<Child>().ToList();
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal("one", records[0].Name);
+ }
+ }
+
+ private class Parent
+ {
+ public int Id { get; private set; }
+
+ public string Name { get; set; }
+
+ public Parent() { }
+
+ public Parent(int id, string name)
+ {
+ Id = id;
+ Name = name;
+ }
+ }
+
+ private class Child : Parent { }
+
+ private sealed class ChildMap : ClassMap<Child>
+ {
+ public ChildMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ReadHeaderTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ReadHeaderTests.cs
new file mode 100644
index 0000000..a502db4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ReadHeaderTests.cs
@@ -0,0 +1,166 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class ReadHeaderTests
+ {
+ [Fact]
+ public void ReadHeaderReadsHeaderTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "One" },
+ { "2", "two" },
+ null
+ };
+
+ var csv = new CsvReader(parser);
+ csv.Read();
+ csv.ReadHeader();
+
+ Assert.NotNull(csv.HeaderRecord);
+ Assert.Equal("Id", csv.HeaderRecord[0]);
+ Assert.Equal("Name", csv.HeaderRecord[1]);
+ }
+
+ [Fact]
+ public void ReadHeaderDoesNotAffectCurrentRecordTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "One" },
+ { "2", "two" },
+ null,
+ };
+
+ var csv = new CsvReader(parser);
+ csv.Read();
+ csv.ReadHeader();
+
+ Assert.Equal("Id", csv.Parser[0]);
+ Assert.Equal("Name", csv.Parser[1]);
+ }
+
+ [Fact]
+ public void ReadingHeaderFailsWhenReaderIsDoneTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "Id", "Name" },
+ { "1", "One" },
+ { "2", "two" },
+ null,
+ };
+
+ var csv = new CsvReader(parser);
+ while (csv.Read()) { }
+
+ Assert.Throws<ReaderException>(() => csv.ReadHeader());
+ }
+
+ [Fact]
+ public void ReadingHeaderFailsWhenNoHeaderRecordTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "Id", "Name" },
+ { "1", "One" },
+ { "2", "two" },
+ null
+ };
+
+ var csv = new CsvReader(parser);
+
+ Assert.Throws<ReaderException>(() => csv.ReadHeader());
+ }
+
+ [Fact]
+ public void ReadingHeaderDoesNotFailWhenHeaderAlreadyReadTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1", "One" },
+ { "2", "two" },
+ null
+ };
+
+ var csv = new CsvReader(parser);
+ csv.Read();
+ csv.ReadHeader();
+ csv.ReadHeader();
+ }
+
+ [Fact]
+ public void ReadHeaderResetsNamedIndexesTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name" },
+ { "Name", "Id" },
+ };
+ var csv = new CsvReader(parser);
+ csv.Read();
+ csv.ReadHeader();
+
+ Assert.Equal(0, csv.GetFieldIndex("Id"));
+ Assert.Equal(1, csv.GetFieldIndex("Name"));
+
+ csv.Read();
+ csv.ReadHeader();
+
+ Assert.Equal(1, csv.GetFieldIndex("Id"));
+ Assert.Equal(0, csv.GetFieldIndex("Name"));
+ }
+
+ [Fact]
+ public void MultipleReadHeaderCallsWorksWithNamedIndexCacheTest()
+ {
+ var parser = new ParserMock
+ {
+ { "Id", "Name", "Id", "Name" },
+ { "1", "one", "2", "two" },
+ { "Name", "Id", "Name", "Id" },
+ { "three", "3", "four", "4" },
+ };
+ var csv = new CsvReader(parser);
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+
+ Assert.Equal(1, csv.GetField<int>("Id"));
+ Assert.Equal("one", csv.GetField("Name"));
+ Assert.Equal(2, csv.GetField<int>("Id", 1));
+ Assert.Equal("two", csv.GetField("Name", 1));
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+
+ Assert.Equal(3, csv.GetField<int>("Id"));
+ Assert.Equal("three", csv.GetField("Name"));
+ Assert.Equal(4, csv.GetField<int>("Id", 1));
+ Assert.Equal("four", csv.GetField("Name", 1));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ShouldSkipRecordTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ShouldSkipRecordTests.cs
new file mode 100644
index 0000000..cac1fd8
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ShouldSkipRecordTests.cs
@@ -0,0 +1,87 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class ShouldSkipRecordTests
+ {
+ [Fact]
+ public void SkipEmptyHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldSkipRecord = args => args.Row.Parser.Record.All(string.IsNullOrWhiteSpace),
+ };
+ var parser = new ParserMock(config)
+ {
+ { " " },
+ { "First,Second" },
+ { "1", "2" },
+ };
+
+ var csv = new CsvReader(parser);
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ Assert.Equal("1", csv.GetField(0));
+ Assert.Equal("2", csv.GetField(1));
+ }
+
+ [Fact]
+ public void SkipEmptyRowTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldSkipRecord = args => args.Row.Parser.Record.All(string.IsNullOrWhiteSpace),
+ };
+ var parser = new ParserMock(config)
+ {
+ { "First,Second" },
+ { " " },
+ { "1", "2" },
+ };
+
+ var csv = new CsvReader(parser);
+
+ csv.Read();
+ csv.ReadHeader();
+ csv.Read();
+ Assert.Equal("1", csv.GetField(0));
+ Assert.Equal("2", csv.GetField(1));
+ }
+
+ [Fact]
+ public void ShouldSkipWithEmptyRows()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldSkipRecord = args => args.Row[0].StartsWith("skipme") || args.Row.Parser.Record.All(string.IsNullOrWhiteSpace),
+ };
+
+ var parser = new ParserMock(config)
+ {
+ { "First,Second" },
+ { "skipme," },
+ { "" },
+ { "1", "2" },
+ };
+
+ var csv = new CsvReader(parser);
+
+ csv.Read();
+ csv.Read();
+ Assert.Equal("1", csv.GetField(0));
+ Assert.Equal("2", csv.GetField(1));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/TryGetTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/TryGetTests.cs
new file mode 100644
index 0000000..2814fb2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/TryGetTests.cs
@@ -0,0 +1,228 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class TryGetTests
+ {
+ [Fact]
+ public void TryGetFieldInvalidIndexTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "One", "Two" },
+ new[] { "one", "two" },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ var got = reader.TryGetField(0, out int field);
+ Assert.False(got);
+ Assert.Equal(default(int), field);
+ }
+
+ [Fact]
+ public void TryGetFieldInvalidNameTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "One", "Two" },
+ new[] { "one", "two" },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+
+ var got = reader.TryGetField("One", out int field);
+ Assert.False(got);
+ Assert.Equal(default(int), field);
+ }
+
+ [Fact]
+ public void TryGetFieldTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "One", "Two" },
+ new[] { "1", "2" },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ var got = reader.TryGetField(0, out int field);
+ Assert.True(got);
+ Assert.Equal(1, field);
+ }
+
+ [Fact]
+ public void TryGetFieldStrictTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "One", "Two" },
+ new[] { "1", "2" },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ var got = reader.TryGetField("One", out int field);
+ Assert.True(got);
+ Assert.Equal(1, field);
+ }
+
+ [Fact]
+ public void TryGetFieldEmptyDate()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+
+ // DateTimeConverter.IsValid() doesn't work correctly
+ // so we need to test and make sure that the conversion
+ // fails for an empty string for a date.
+ var parserMock = new ParserMock(config)
+ {
+ new[] { " " },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ var got = reader.TryGetField(0, out DateTime field);
+
+ Assert.False(got);
+ Assert.Equal(DateTime.MinValue, field);
+ }
+
+ [Fact]
+ public void TryGetNullableFieldEmptyDate()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+
+ // DateTimeConverter.IsValid() doesn't work correctly
+ // so we need to test and make sure that the conversion
+ // fails for an empty string for a date.
+ var parserMock = new ParserMock(config)
+ {
+ new[] { " " },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+
+ var got = reader.TryGetField(0, out DateTime? field);
+
+ Assert.False(got);
+ Assert.Null(field);
+ }
+
+ [Fact]
+ public void TryGetDoesNotThrowWhenWillThrowOnMissingFieldIsEnabled()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+
+ var parserMock = new ParserMock(config)
+ {
+ new[] { "1" },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ Assert.False(reader.TryGetField("test", out string field));
+ }
+
+ [Fact]
+ public void TryGetFieldIndexTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "One", "Two", "Two" },
+ { "1", "2", "3" }
+ };
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ var got = reader.TryGetField("Two", 0, out int field);
+ Assert.True(got);
+ Assert.Equal(2, field);
+
+ got = reader.TryGetField("Two", 1, out field);
+ Assert.True(got);
+ Assert.Equal(3, field);
+ }
+
+ [Fact]
+ public void TryGetMissingDateTimeFieldTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "Name" },
+ { "1" },
+ null
+ };
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ var got = reader.TryGetField(typeof(DateTime), "Name", out object field);
+
+ Assert.False(got);
+ Assert.Equal(DateTime.MinValue, field);
+ }
+
+ [Fact]
+ public void TryGetMissingDateTimeOffsetFieldTest()
+ {
+ var parserMock = new ParserMock
+ {
+ { "Id", "DateTime" },
+ { "1" },
+ null
+ };
+ var reader = new CsvReader(parserMock);
+ reader.Read();
+ reader.ReadHeader();
+ reader.Read();
+
+ var got = reader.TryGetField(typeof(DateTimeOffset), "DateTime", out object field);
+
+ Assert.False(got);
+ Assert.Equal(DateTimeOffset.MinValue, field);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ValidateTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ValidateTests.cs
new file mode 100644
index 0000000..1b9da38
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/ValidateTests.cs
@@ -0,0 +1,197 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using Xunit;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class ValidateTests
+ {
+ [Fact]
+ public void GenericValidateTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine(",one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<GenericValidateMap>();
+ Assert.Throws<FieldValidationException>(() => csv.GetRecords<Test>().ToList());
+ }
+ }
+
+ [Fact]
+ public void NonGenericValidateTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine(",one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<NonGenericValidateMap>();
+ Assert.Throws<FieldValidationException>(() => csv.GetRecords<Test>().ToList());
+ }
+ }
+
+ [Fact]
+ public void LogInsteadTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine("1,");
+ writer.Flush();
+ stream.Position = 0;
+
+ var logger = new StringBuilder();
+ csv.Context.RegisterClassMap(new LogInsteadMap(logger));
+ csv.GetRecords<Test>().ToList();
+
+ var expected = new StringBuilder();
+ expected.AppendLine("Field '' is not valid!");
+
+ Assert.Equal(expected.ToString(), logger.ToString());
+ }
+ }
+
+ [Fact]
+ public void CustomExceptionTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ MissingFieldFound = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Id,Name");
+ writer.WriteLine(",one");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<CustomExceptionMap>();
+ Assert.Throws<CustomException>(() => csv.GetRecords<Test>().ToList());
+ }
+ }
+
+ [Fact]
+ public void ValidateMessageTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ };
+ var s = new TestStringBuilder(config.NewLine);
+ s.AppendLine("Id,Name");
+ s.AppendLine("1,one");
+ using (var reader = new StringReader(s))
+ using (var csv = new CsvReader(reader, config))
+ {
+ csv.Context.RegisterClassMap<ValidationMessageMap>();
+ var exception = Assert.Throws<FieldValidationException>(() => csv.GetRecords<Test>().ToList());
+ Assert.StartsWith("Field 'one' was not foo.", exception.Message);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class GenericValidateMap : ClassMap<Test>
+ {
+ public GenericValidateMap()
+ {
+ Map(m => m.Id).Validate(args => !string.IsNullOrEmpty(args.Field));
+ Map(m => m.Name);
+ }
+ }
+
+ private sealed class NonGenericValidateMap : ClassMap<Test>
+ {
+ public NonGenericValidateMap()
+ {
+ AutoMap(System.Globalization.CultureInfo.InvariantCulture);
+ foreach (var memberMap in MemberMaps)
+ {
+ Map(typeof(Test), memberMap.Data.Member).Validate(args => !string.IsNullOrEmpty(args.Field));
+ }
+ }
+ }
+
+ private sealed class LogInsteadMap : ClassMap<Test>
+ {
+ public LogInsteadMap(StringBuilder logger)
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Validate(args =>
+ {
+ var isValid = !string.IsNullOrEmpty(args.Field);
+ if (!isValid)
+ {
+ logger.AppendLine($"Field '{args.Field}' is not valid!");
+ }
+
+ return true;
+ });
+ }
+ }
+
+ private sealed class CustomExceptionMap : ClassMap<Test>
+ {
+ public CustomExceptionMap()
+ {
+ Map(m => m.Id).Validate(field => throw new CustomException());
+ Map(m => m.Name);
+ }
+ }
+
+ private class CustomException : CsvHelperException
+ {
+ }
+
+ private class ValidationMessageMap : ClassMap<Test>
+ {
+ public ValidationMessageMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Validate(args => args.Field == "foo", args => $"Field '{args.Field}' was not foo.");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/YieldTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/YieldTests.cs
new file mode 100644
index 0000000..a39d899
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reading/YieldTests.cs
@@ -0,0 +1,142 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Reading
+{
+
+ public class YieldTests
+ {
+ [Fact]
+ public void GetRecordsGeneric_Disposed_ThrowsObjectDisposedExceptionTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "Id", "Name" },
+ new[] { "1", "one" },
+ null
+ };
+
+ IEnumerable<Foo> records;
+ using (var csv = new CsvReader(parserMock))
+ {
+ records = csv.GetRecords<Foo>();
+ }
+ Assert.Throws<ObjectDisposedException>(() => records.ToList());
+ }
+
+ [Fact]
+ public void GetRecords_Disposed_ThrowsObjectDisposedExceptionTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "Id", "Name" },
+ new[] { "1", "one" },
+ null
+ };
+
+ IEnumerable<object> records;
+ using (var csv = new CsvReader(parserMock))
+ {
+ records = csv.GetRecords(typeof(Foo));
+ }
+
+ Assert.Throws<ObjectDisposedException>(() => records.ToList());
+ }
+
+ [Fact]
+ public void EnumerateRecords_Disposed_ThrowsObjectDisposedExceptionTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "Id", "Name" },
+ new[] { "1", "one" },
+ null
+ };
+
+ Foo record = null;
+ IEnumerable<Foo> records;
+ using (var csv = new CsvReader(parserMock))
+ {
+ records = csv.EnumerateRecords(record);
+ }
+
+ Assert.Throws<ObjectDisposedException>(() => records.ToList());
+ }
+
+#if !NET45
+ [Fact]
+ public async Task GetRecordsAsyncGeneric_Disposed_ThrowsObjectDisposedExceptionTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "Id", "Name" },
+ new[] { "1", "one" },
+ null
+ };
+
+ IAsyncEnumerable<Foo> records;
+ using (var csv = new CsvReader(parserMock))
+ {
+ records = csv.GetRecordsAsync<Foo>();
+ }
+
+ await Assert.ThrowsAsync<ObjectDisposedException>(async () => await records.GetAsyncEnumerator().MoveNextAsync());
+ }
+
+ [Fact]
+ public async Task GetRecordsAsync_Disposed_ThrowsObjectDisposedExceptionTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "Id", "Name" },
+ new[] { "1", "one" },
+ null
+ };
+
+ IAsyncEnumerable<object> records;
+ using (var csv = new CsvReader(parserMock))
+ {
+ records = csv.GetRecordsAsync(typeof(Foo));
+ }
+
+ await Assert.ThrowsAsync<ObjectDisposedException>(async () => await records.GetAsyncEnumerator().MoveNextAsync());
+ }
+
+ [Fact]
+ public async Task EnumerateRecordsAsync_Disposed_ThrowsObjectDisposedExceptionTest()
+ {
+ var parserMock = new ParserMock
+ {
+ new[] { "Id", "Name" },
+ new[] { "1", "one" },
+ null
+ };
+
+ Foo record = null;
+ IAsyncEnumerable<Foo> records;
+ using (var csv = new CsvReader(parserMock))
+ {
+ records = csv.EnumerateRecordsAsync(record);
+ }
+
+ await Assert.ThrowsAsync<ObjectDisposedException>(async () => await records.GetAsyncEnumerator().MoveNextAsync());
+ }
+#endif
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingClassMapTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingClassMapTests.cs
new file mode 100644
index 0000000..bc0b210
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingClassMapTests.cs
@@ -0,0 +1,169 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class ReferenceMappingClassMapTests
+ {
+ [Fact]
+ public void ReferenceMappingTest()
+ {
+ var parserMock = new ParserMock
+ {
+ {
+ "FirstName",
+ "LastName",
+ "HomeStreet",
+ "HomeCity",
+ "HomeState",
+ "HomeZip",
+ "WorkStreet",
+ "WorkCity",
+ "WorkState",
+ "WorkZip"
+ },
+ };
+ var row = new[]
+ {
+ "John",
+ "Doe",
+ "1234 Home St",
+ "Home Town",
+ "Home State",
+ "12345",
+ "5678 Work Rd",
+ "Work City",
+ "Work State",
+ "67890"
+ };
+ parserMock.Add(row);
+
+ var reader = new CsvReader(parserMock);
+ reader.Context.RegisterClassMap<PersonMap>();
+ reader.Read();
+ var person = reader.GetRecord<Person>();
+
+ Assert.Equal(row[0], person.FirstName);
+ Assert.Equal(row[1], person.LastName);
+ Assert.Equal(row[2], person.HomeAddress.Street);
+ Assert.Equal(row[3], person.HomeAddress.City);
+ Assert.Equal(row[4], person.HomeAddress.State);
+ Assert.Equal(row[5], person.HomeAddress.Zip);
+ Assert.Equal(row[6], person.WorkAddress.Street);
+ Assert.Equal(row[7], person.WorkAddress.City);
+ Assert.Equal(row[8], person.WorkAddress.State);
+ Assert.Equal(row[9], person.WorkAddress.Zip);
+ }
+
+ [Fact]
+ public void OnlyReferencesTest()
+ {
+ var parserMock = new ParserMock()
+ {
+ new[]
+ {
+ "FirstName",
+ "LastName",
+ "HomeStreet",
+ "HomeCity",
+ "HomeState",
+ "HomeZip",
+ "WorkStreet",
+ "WorkCity",
+ "WorkState",
+ "WorkZip"
+ },
+ new[]
+ {
+ "John",
+ "Doe",
+ "1234 Home St",
+ "Home Town",
+ "Home State",
+ "12345",
+ "5678 Work Rd",
+ "Work City",
+ "Work State",
+ "67890"
+ },
+ null
+ };
+
+ var reader = new CsvReader(parserMock);
+ reader.Context.RegisterClassMap<OnlyReferencesMap>();
+ reader.Read();
+ var person = reader.GetRecord<Person>();
+ }
+
+ private class Person
+ {
+ public string FirstName { get; set; }
+
+ public string LastName { get; set; }
+
+ public Address HomeAddress { get; set; }
+
+ public Address WorkAddress { get; set; }
+ }
+
+ private class Address
+ {
+ public string Street { get; set; }
+
+ public string City { get; set; }
+
+ public string State { get; set; }
+
+ public string Zip { get; set; }
+ }
+
+ private sealed class PersonMap : ClassMap<Person>
+ {
+ public PersonMap()
+ {
+ Map(m => m.FirstName);
+ Map(m => m.LastName);
+ References<HomeAddressMap>(m => m.HomeAddress);
+ References<WorkAddressMap>(m => m.WorkAddress);
+ }
+ }
+
+ private sealed class HomeAddressMap : ClassMap<Address>
+ {
+ public HomeAddressMap()
+ {
+ Map(m => m.Street).Name("HomeStreet");
+ Map(m => m.City).Name("HomeCity");
+ Map(m => m.State).Name("HomeState");
+ Map(m => m.Zip).Name("HomeZip");
+ }
+ }
+
+ private sealed class WorkAddressMap : ClassMap<Address>
+ {
+ public WorkAddressMap()
+ {
+ Map(m => m.Street).Name("WorkStreet");
+ Map(m => m.City).Name("WorkCity");
+ Map(m => m.State).Name("WorkState");
+ Map(m => m.Zip).Name("WorkZip");
+ }
+ }
+
+ private sealed class OnlyReferencesMap : ClassMap<Person>
+ {
+ public OnlyReferencesMap()
+ {
+ References<HomeAddressMap>(m => m.HomeAddress);
+ References<WorkAddressMap>(m => m.WorkAddress);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingIndexTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingIndexTests.cs
new file mode 100644
index 0000000..e926f79
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/ReferenceMappingIndexTests.cs
@@ -0,0 +1,69 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests
+{
+
+ public class ReferenceMappingIndexTests
+ {
+ [Fact]
+ public void MapByIndexTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ new[] { "0", "1" },
+ new[] { "2", "3" },
+ };
+
+ var csv = new CsvReader(parserMock);
+ csv.Context.RegisterClassMap<AMap>();
+
+ var records = csv.GetRecords<A>().ToList();
+ Assert.Equal(1, records[0].Id);
+ Assert.Equal(0, records[0].B.Id);
+ Assert.Equal(3, records[1].Id);
+ Assert.Equal(2, records[1].B.Id);
+ }
+
+ private class A
+ {
+ public int Id { get; set; }
+
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public int Id { get; set; }
+ }
+
+ private sealed class AMap : ClassMap<A>
+ {
+ public AMap()
+ {
+ Map(m => m.Id).Index(1);
+ References<BMap>(m => m.B);
+ }
+ }
+
+ private sealed class BMap : ClassMap<B>
+ {
+ public BMap()
+ {
+ Map(m => m.Id).Index(0);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reflection/GetMemberExpressionStackTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reflection/GetMemberExpressionStackTests.cs
new file mode 100644
index 0000000..a779081
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Reflection/GetMemberExpressionStackTests.cs
@@ -0,0 +1,56 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+
+namespace CsvHelper.Tests.Reflection
+{
+
+ public class GetPropertiesTests
+ {
+ [Fact]
+ public void FirstLevelTest()
+ {
+ var stack = ReflectionHelper.GetMembers<A, string>(a => a.P1);
+
+ Assert.Single(stack);
+ Assert.Equal("P1", stack.Pop().Name);
+ }
+
+ [Fact]
+ public void LastLevelTest()
+ {
+ var stack = ReflectionHelper.GetMembers<A, string>(a => a.B.C.D.P4);
+
+ Assert.Equal(4, stack.Count);
+ Assert.Equal("B", stack.Pop().Name);
+ Assert.Equal("C", stack.Pop().Name);
+ Assert.Equal("D", stack.Pop().Name);
+ Assert.Equal("P4", stack.Pop().Name);
+ }
+
+ private class A
+ {
+ public string P1 { get; set; }
+ public B B { get; set; }
+ }
+
+ private class B
+ {
+ public string P2 { get; set; }
+ public C C { get; set; }
+ }
+
+ private class C
+ {
+ public string P3 { get; set; }
+ public D D { get; set; }
+ }
+
+ private class D
+ {
+ public string P4 { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringBuilder.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringBuilder.cs
new file mode 100644
index 0000000..43bfc75
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringBuilder.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Text;
+
+namespace CsvHelper.Tests
+{
+ /// <summary>
+ /// A <see cref="StringBuilder"/> like class with configurable line ending for unit tests.
+ /// </summary>
+ public class TestStringBuilder
+ {
+ private readonly string newLine;
+ private readonly StringBuilder builder;
+
+ public TestStringBuilder(string newLine)
+ {
+ this.newLine = newLine ?? throw new ArgumentNullException(nameof(newLine));
+ builder = new StringBuilder();
+ }
+
+ public TestStringBuilder AppendLine(string value)
+ {
+ builder.Append(value).Append(newLine);
+ return this;
+ }
+
+ public override string ToString() => builder.ToString();
+
+ public static implicit operator string(TestStringBuilder sb) => sb.ToString();
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringWriter.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringWriter.cs
new file mode 100644
index 0000000..7691faa
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TestStringWriter.cs
@@ -0,0 +1,28 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.IO;
+
+namespace CsvHelper.Tests
+{
+ /// <summary>
+ /// A <see cref="StreamWriter"/> class with configurable line ending for unit tests.
+ /// </summary>
+ public class TestStreamWriter : StreamWriter
+ {
+ private readonly string newLine;
+
+ public TestStreamWriter(Stream stream, string newLine = "\r\n") : base(stream)
+ {
+ this.newLine = newLine ?? throw new ArgumentNullException(nameof(newLine));
+ }
+
+ public override void WriteLine(string value)
+ {
+ base.Write(value);
+ base.Write(newLine);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ArrayConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ArrayConverterTests.cs
new file mode 100644
index 0000000..7f98b0d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ArrayConverterTests.cs
@@ -0,0 +1,211 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System.Collections.Generic;
+using System.IO;
+using Xunit;
+using System.Reflection;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.Configuration.Attributes;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class ArrayConverterTests
+ {
+ [Fact]
+ public void FullReadNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithDefaultHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestDefaultMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithNamedHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderListItemsScattered()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,A,List,B,List,After");
+ writer.WriteLine("1,2,3,4,5,6,7");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(4, list[1]);
+ Assert.Equal(6, list[2]);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_NullValuesAttributeWithIndex_UsesCustomNullValue()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "NULL", "", "2" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<NullValuesAttributeIndexTest>().ToList();
+ }
+ }
+
+ private class NullValuesAttributeIndexTest
+ {
+ [Index(0, 2)]
+ [NullValues("NULL")]
+ public int?[] List { get; set; }
+ }
+
+ private class Test
+ {
+ public string Before { get; set; }
+ public int?[] List { get; set; }
+ public string After { get; set; }
+ }
+
+ private sealed class TestIndexMap : ClassMap<Test>
+ {
+ public TestIndexMap()
+ {
+ Map(m => m.Before).Index(0);
+ Map(m => m.List).Index(1, 3);
+ Map(m => m.After).Index(4);
+ }
+ }
+
+ private sealed class TestNamedMap : ClassMap<Test>
+ {
+ public TestNamedMap()
+ {
+ Map(m => m.Before).Name("Before");
+ Map(m => m.List).Name("List");
+ Map(m => m.After).Name("After");
+ }
+ }
+
+ private sealed class TestDefaultMap : ClassMap<Test>
+ {
+ public TestDefaultMap()
+ {
+ Map(m => m.Before);
+ Map(m => m.List);
+ Map(m => m.After);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BigIntegerConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BigIntegerConverterTests.cs
new file mode 100644
index 0000000..6b0c580
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BigIntegerConverterTests.cs
@@ -0,0 +1,40 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class BigIntegerConverterTests
+ {
+ [Fact]
+ public void RoundTripMaxValueTest()
+ {
+ var converter = new BigIntegerConverter();
+ var s = converter.ConvertToString((BigInteger)long.MaxValue + 1, null, new MemberMapData(null));
+ var bi = converter.ConvertFromString(s, null, new MemberMapData(null));
+
+ Assert.Equal((BigInteger)long.MaxValue + 1, bi);
+ }
+
+ [Fact]
+ public void RoundTripMinValueTest()
+ {
+ var converter = new BigIntegerConverter();
+ var s = converter.ConvertToString((BigInteger)long.MinValue - 1, null, new MemberMapData(null));
+ var bi = converter.ConvertFromString(s, null, new MemberMapData(null));
+
+ Assert.Equal((BigInteger)long.MinValue - 1, bi);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BooleanConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BooleanConverterTests.cs
new file mode 100644
index 0000000..4cb9769
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/BooleanConverterTests.cs
@@ -0,0 +1,166 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class BooleanConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new BooleanConverter();
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ Assert.Equal("True", converter.ConvertToString(true, null, memberMapData));
+
+ Assert.Equal("False", converter.ConvertToString(false, null, memberMapData));
+
+ Assert.Equal("", converter.ConvertToString(null, null, memberMapData));
+ Assert.Equal("1", converter.ConvertToString(1, null, memberMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new BooleanConverter();
+
+ var memberMapData = new MemberMapData(null);
+ memberMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ Assert.True((bool)converter.ConvertFromString("true", null, memberMapData));
+ Assert.True((bool)converter.ConvertFromString("True", null, memberMapData));
+ Assert.True((bool)converter.ConvertFromString("TRUE", null, memberMapData));
+ Assert.True((bool)converter.ConvertFromString("1", null, memberMapData));
+ Assert.True((bool)converter.ConvertFromString(" true ", null, memberMapData));
+
+ Assert.False((bool)converter.ConvertFromString("false", null, memberMapData));
+ Assert.False((bool)converter.ConvertFromString("False", null, memberMapData));
+ Assert.False((bool)converter.ConvertFromString("FALSE", null, memberMapData));
+ Assert.False((bool)converter.ConvertFromString("0", null, memberMapData));
+ Assert.False((bool)converter.ConvertFromString(" false ", null, memberMapData));
+ Assert.False((bool)converter.ConvertFromString(" 0 ", null, memberMapData));
+
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, memberMapData));
+ }
+
+ [Fact]
+ public void ConvertToString_SingleBooleanTrueValue_UsesValue()
+ {
+ var converter = new BooleanConverter();
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions =
+ {
+ BooleanTrueValues = { "Foo" },
+ },
+ };
+
+ var value = converter.ConvertToString(true, null, memberMapData);
+
+ Assert.Equal("Foo", value);
+ }
+
+ [Fact]
+ public void ConvertToString_MultipleBooleanTrueValues_UsesFirstValue()
+ {
+ var converter = new BooleanConverter();
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions =
+ {
+ BooleanTrueValues = { "Foo", "Bar" },
+ },
+ };
+
+ var value = converter.ConvertToString(true, null, memberMapData);
+
+ Assert.Equal("Foo", value);
+ }
+
+ [Fact]
+ public void ConvertToString_SingleBooleanFalseValue_UsesValue()
+ {
+ var converter = new BooleanConverter();
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions =
+ {
+ BooleanFalseValues = { "Foo" },
+ },
+ };
+
+ var value = converter.ConvertToString(false, null, memberMapData);
+
+ Assert.Equal("Foo", value);
+ }
+
+ [Fact]
+ public void ConvertToString_MultipleBooleanFalseValues_UsesFirstValue()
+ {
+ var converter = new BooleanConverter();
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions =
+ {
+ BooleanFalseValues = { "Foo", "Bar" },
+ },
+ };
+
+ var value = converter.ConvertToString(false, null, memberMapData);
+
+ Assert.Equal("Foo", value);
+ }
+
+ [Fact]
+ public void WriteField_TrueValue_UsesValue()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<bool>().BooleanTrueValues.Add("Foo");
+
+ csv.WriteField(true);
+ csv.Flush();
+ writer.Flush();
+
+ Assert.Equal("Foo", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_FalseValue_UsesValue()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<bool>().BooleanFalseValues.Add("Foo");
+
+ csv.WriteField(false);
+ csv.Flush();
+ writer.Flush();
+
+ Assert.Equal("Foo", writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteArrayConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteArrayConverterTests.cs
new file mode 100644
index 0000000..58d1920
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteArrayConverterTests.cs
@@ -0,0 +1,139 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Linq;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class ByteArrayConverterTests
+ {
+ [Fact]
+ public void WhenConverting_FromStringToByteArray_ReturnsCorrectValues()
+ {
+ var testCases = new[]
+ {
+ new
+ {
+ Options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexInclude0x,
+ FieldStrings = new[] { "0xDEAD", "0xB33FBEEF", "0xEA5EEA5EEA5E", "0xCA75CA75CA75CA75" },
+ Expected = new []
+ {
+ new byte[] { 0xDE, 0xAD },
+ new byte[] { 0xB3, 0x3F, 0xBE, 0xEF },
+ new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E },
+ new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 }
+ }
+ },
+ new
+ {
+ Options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexDashes,
+ FieldStrings = new[] { "DE-AD", "B3-3F-BE-EF", "EA-5E-EA-5E-EA-5E", "CA-75-CA-75-CA-75-CA-75" },
+ Expected = new []
+ {
+ new byte[] { 0xDE, 0xAD },
+ new byte[] { 0xB3, 0x3F, 0xBE, 0xEF },
+ new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E },
+ new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 }
+ }
+ },
+ new
+ {
+ Options = ByteArrayConverterOptions.Base64,
+ FieldStrings = new []
+ {
+ Convert.ToBase64String( new byte[] { 0xDE, 0xAD } ),
+ Convert.ToBase64String( new byte[] { 0xB3, 0x3F, 0xBE, 0xEF } ),
+ Convert.ToBase64String( new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E } ),
+ Convert.ToBase64String( new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 } )
+ },
+ Expected = new []
+ {
+ new byte[] { 0xDE, 0xAD },
+ new byte[] { 0xB3, 0x3F, 0xBE, 0xEF },
+ new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E },
+ new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 }
+ }
+ }
+ };
+
+ foreach( var t in testCases )
+ {
+ var converter = new ByteArrayConverter( t.Options );
+ foreach( var f in t.FieldStrings.Zip( t.Expected, ( test, expected ) => new { test, expected } ) )
+ {
+ var actual = (byte[])converter.ConvertFromString( f.test, null, null );
+ foreach( var b in actual.Zip( f.expected, ( a, e ) => new { a, e } ) )
+ {
+ Assert.Equal( b.e, b.a );
+ }
+ }
+ }
+ }
+
+ [Fact]
+ public void WhenConverting_FromByteArrayToString_ReturnsCorrectValues()
+ {
+ var testCases = new[]
+ {
+ new
+ {
+ Options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexInclude0x,
+ Expected = new[] { "0xDEAD", "0xB33FBEEF", "0xEA5EEA5EEA5E", "0xCA75CA75CA75CA75" },
+ FieldBytes = new []
+ {
+ new byte[] { 0xDE, 0xAD },
+ new byte[] { 0xB3, 0x3F, 0xBE, 0xEF },
+ new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E },
+ new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 }
+ }
+ },
+ new
+ {
+ Options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexDashes,
+ Expected = new[] { "DE-AD", "B3-3F-BE-EF", "EA-5E-EA-5E-EA-5E", "CA-75-CA-75-CA-75-CA-75" },
+ FieldBytes = new []
+ {
+ new byte[] { 0xDE, 0xAD },
+ new byte[] { 0xB3, 0x3F, 0xBE, 0xEF },
+ new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E },
+ new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 }
+ }
+ },
+ new
+ {
+ Options = ByteArrayConverterOptions.Base64,
+ Expected = new []
+ {
+ Convert.ToBase64String( new byte[] { 0xDE, 0xAD } ),
+ Convert.ToBase64String( new byte[] { 0xB3, 0x3F, 0xBE, 0xEF } ),
+ Convert.ToBase64String( new byte[] { 0xEA, 0x5E, 0xEA, 0x5E, 0xEA, 0x5E } ),
+ Convert.ToBase64String( new byte[] { 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 } )
+ },
+ FieldBytes = new []
+ {
+ new byte[] { 0xDE, 0xAD },
+ new byte[] { 0xB3, 0x3F , 0xBE, 0xEF },
+ new byte[] { 0xEA, 0x5E , 0xEA, 0x5E, 0xEA, 0x5E },
+ new byte[] { 0xCA, 0x75 , 0xCA, 0x75, 0xCA, 0x75, 0xCA, 0x75 }
+ }
+ }
+ };
+
+ foreach( var t in testCases )
+ {
+ var converter = new ByteArrayConverter( t.Options );
+ foreach( var f in t.Expected.Zip( t.FieldBytes, ( expected, test ) => new { test, expected } ) )
+ {
+ var actual = converter.ConvertToString( f.test, null, null );
+
+ Assert.Equal( actual, f.expected );
+ }
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteConverterTests.cs
new file mode 100644
index 0000000..cbeb016
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/ByteConverterTests.cs
@@ -0,0 +1,47 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class ByteConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new ByteConverter();
+ var propertyMapData = new MemberMapData( null )
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ Assert.Equal( "123", converter.ConvertToString( (byte)123, null, propertyMapData ) );
+
+ Assert.Equal( "", converter.ConvertToString( null, null, propertyMapData ) );
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new ByteConverter();
+
+ var propertyMapData = new MemberMapData( null );
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ Assert.Equal( (byte)123, converter.ConvertFromString( "123", null, propertyMapData ) );
+ Assert.Equal( (byte)123, converter.ConvertFromString( " 123 ", null, propertyMapData ) );
+
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CharConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CharConverterTests.cs
new file mode 100644
index 0000000..aefa138
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CharConverterTests.cs
@@ -0,0 +1,50 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class CharConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new CharConverter();
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ Assert.Equal("a", converter.ConvertToString('a', null, propertyMapData));
+
+ Assert.Equal("True", converter.ConvertToString(true, null, propertyMapData));
+
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new CharConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ Assert.Equal('a', converter.ConvertFromString("a", null, propertyMapData));
+ Assert.Equal('a', converter.ConvertFromString(" a ", null, propertyMapData));
+ Assert.Equal(' ', converter.ConvertFromString(" ", null, propertyMapData));
+
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CollectionGenericConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CollectionGenericConverterTests.cs
new file mode 100644
index 0000000..c5efd01
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/CollectionGenericConverterTests.cs
@@ -0,0 +1,101 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System.Collections.Generic;
+using System.IO;
+using Xunit;
+using System.Reflection;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.Configuration.Attributes;
+using System.Linq;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class CollectionGenericConverterTests
+ {
+ [Fact]
+ public void FullWriteTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { List = new List<int?> { 1, 2, 3 } }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal("1,2,3\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_NullValuesAttributeWithIndex_UsesCustomNullValue()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "NULL", "", "2" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<NullValuesAttributeIndexTest>().ToList();
+ }
+ }
+
+ private class Test
+ {
+ public List<int?> List { get; set; }
+ }
+
+ private sealed class TestIndexMap : ClassMap<Test>
+ {
+ public TestIndexMap()
+ {
+ Map(m => m.List).Index(1, 3);
+ }
+ }
+
+ private sealed class TestNamedMap : ClassMap<Test>
+ {
+ public TestNamedMap()
+ {
+ Map(m => m.List).Name("List");
+ }
+ }
+
+ private sealed class TestDefaultMap : ClassMap<Test>
+ {
+ public TestDefaultMap()
+ {
+ Map(m => m.List);
+ }
+ }
+
+ private class NullValuesAttributeIndexTest
+ {
+ [Index(0, 2)]
+ [NullValues("NULL")]
+ public List<int?> List { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateOnlyConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateOnlyConverterTests.cs
new file mode 100644
index 0000000..4c567ba
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateOnlyConverterTests.cs
@@ -0,0 +1,59 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+#if NET6_0
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using System;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+ public class DateOnlyConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new DateOnlyConverter();
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var date = DateOnly.FromDateTime(DateTime.Now);
+
+ // Valid conversions.
+ Assert.Equal(date.ToString(), converter.ConvertToString(date, null, propertyMapData));
+
+ // Invalid conversions.
+ Assert.Equal("1", converter.ConvertToString(1, null, propertyMapData));
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new DateOnlyConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ var date = DateOnly.FromDateTime(DateTime.Now);
+
+ // Valid conversions.
+ Assert.Equal(date.ToString(), converter.ConvertFromString(date.ToString(), null, propertyMapData).ToString());
+ Assert.Equal(date.ToString(), converter.ConvertFromString(date.ToString("o"), null, propertyMapData).ToString());
+ Assert.Equal(date.ToString(), converter.ConvertFromString(" " + date + " ", null, propertyMapData).ToString());
+
+ // Invalid conversions.
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ }
+ }
+}
+#endif
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeConverterTests.cs
new file mode 100644
index 0000000..8f44627
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeConverterTests.cs
@@ -0,0 +1,76 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class DateTimeConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new DateTimeConverter();
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var dateTime = DateTime.Now;
+
+ // Valid conversions.
+ Assert.Equal(dateTime.ToString(), converter.ConvertToString(dateTime, null, propertyMapData));
+
+ // Invalid conversions.
+ Assert.Equal("1", converter.ConvertToString(1, null, propertyMapData));
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new DateTimeConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ var dateTime = DateTime.Now;
+
+ // Valid conversions.
+ Assert.Equal(dateTime.ToString(), converter.ConvertFromString(dateTime.ToString(), null, propertyMapData).ToString());
+ Assert.Equal(dateTime.ToString(), converter.ConvertFromString(dateTime.ToString("o"), null, propertyMapData).ToString());
+ Assert.Equal(dateTime.ToString(), converter.ConvertFromString(" " + dateTime + " ", null, propertyMapData).ToString());
+
+ // Invalid conversions.
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(" ", row, propertyMapData));
+ }
+
+ [Fact]
+ public void ComponentModelCompatibilityTest()
+ {
+ var converter = new DateTimeConverter();
+ var cmConverter = new System.ComponentModel.DateTimeConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ Assert.Throws<NotSupportedException>(() => cmConverter.ConvertFromString(null));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ Assert.Throws<FormatException>(() => cmConverter.ConvertFromString("blah"));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString("blah", row, propertyMapData));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeOffsetConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeOffsetConverterTests.cs
new file mode 100644
index 0000000..b829361
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DateTimeOffsetConverterTests.cs
@@ -0,0 +1,75 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class DateTimeOffsetConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new DateTimeOffsetConverter();
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var dateTime = DateTimeOffset.Now;
+
+ // Valid conversions.
+ Assert.Equal(dateTime.ToString(), converter.ConvertToString(dateTime, null, propertyMapData));
+
+ // Invalid conversions.
+ Assert.Equal("1", converter.ConvertToString(1, null, propertyMapData));
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new DateTimeOffsetConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ var dateTime = DateTimeOffset.Now;
+
+ // Valid conversions.
+ Assert.Equal(dateTime.ToString(), converter.ConvertFromString(dateTime.ToString(), null, propertyMapData).ToString());
+ Assert.Equal(dateTime.ToString(), converter.ConvertFromString(dateTime.ToString("o"), null, propertyMapData).ToString());
+ Assert.Equal(dateTime.ToString(), converter.ConvertFromString(" " + dateTime + " ", null, propertyMapData).ToString());
+
+ // Invalid conversions.
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ }
+
+ [Fact]
+ public void ComponentModelCompatibilityTest()
+ {
+ var converter = new DateTimeOffsetConverter();
+ var cmConverter = new System.ComponentModel.DateTimeOffsetConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ Assert.Throws<NotSupportedException>(() => cmConverter.ConvertFromString(null));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ Assert.Throws<FormatException>(() => cmConverter.ConvertFromString("blah"));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString("blah", row, propertyMapData));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultConverterTests.cs
new file mode 100644
index 0000000..07818d2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultConverterTests.cs
@@ -0,0 +1,81 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class DefaultConverterTests
+ {
+ [Fact]
+ public void ConvertToString_ValueIsNull_ReturnsEmptyString()
+ {
+ var converter = new DefaultTypeConverter();
+
+ var memberMapData = new MemberMapData(null)
+ {
+ };
+
+ var value = converter.ConvertToString(null, null, memberMapData);
+
+ Assert.Equal(string.Empty, value);
+ }
+
+ [Fact]
+ public void ConvertToString_SingleNullValue_UsesValue()
+ {
+ var converter = new DefaultTypeConverter();
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { NullValues = { "Foo" } },
+ };
+
+ var value = converter.ConvertToString(null, null, memberMapData);
+
+ Assert.Equal("Foo", value);
+ }
+
+ [Fact]
+ public void ConvertToString_MultipleNullValues_UsesFirstValue()
+ {
+ var converter = new DefaultTypeConverter();
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { NullValues = { "Foo", "Bar" } },
+ };
+
+ var value = converter.ConvertToString(null, null, memberMapData);
+
+ Assert.Equal("Foo", value);
+ }
+
+ [Fact]
+ public void WriteField_NullValue_UsesValue()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("Foo");
+
+ csv.WriteField<string>(null);
+ csv.Flush();
+ writer.Flush();
+
+ Assert.Equal("Foo", writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultValueTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultValueTests.cs
new file mode 100644
index 0000000..8b17420
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DefaultValueTests.cs
@@ -0,0 +1,67 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+ public class DefaultValueTests
+ {
+ [Fact]
+ public void BigIntegerConverter_ConvertFromString_InvalidValue_UsesDefault()
+ {
+ var converter = new BigIntegerConverter();
+
+ var data = new MemberMapData(typeof(Foo).GetProperty(nameof(Foo.Property)));
+ data.IsDefaultSet = true;
+ data.Default = (BigInteger)1;
+ data.UseDefaultOnConversionFailure = true;
+
+ var result = converter.ConvertFromString("foo", null, data);
+
+ Assert.Equal(data.Default, result);
+ }
+
+ [Fact]
+ public void GetRecords_EmptyValue_DefaultSet_UsesDefault()
+ {
+ var s = new StringBuilder();
+ s.Append("Property\r\n");
+ s.Append("foo\r\n");
+ using (var reader = new StringReader(s.ToString()))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ var records = csv.GetRecords<Foo>().ToList();
+
+ Assert.Equal(1, records[0].Property);
+ }
+ }
+
+ private class Foo
+ {
+ public BigInteger Property { get; set; }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Property).Default(1, useOnConversionFailure: true);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DoubleConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DoubleConverterTests.cs
new file mode 100644
index 0000000..12a3cc3
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/DoubleConverterTests.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class DoubleConverterTests
+ {
+ [Fact]
+ public void RoundTripMaxValueTest()
+ {
+ var converter = new DoubleConverter();
+ var s = converter.ConvertToString(double.MaxValue, null, new MemberMapData(null));
+ var d = converter.ConvertFromString(s, null, new MemberMapData(null));
+
+ Assert.Equal(double.MaxValue, d);
+ }
+
+ [Fact]
+ public void RoundTripMinValueTest()
+ {
+ var converter = new DoubleConverter();
+ var s = converter.ConvertToString(double.MinValue, null, new MemberMapData(null));
+ var d = converter.ConvertFromString(s, null, new MemberMapData(null));
+
+ Assert.Equal(double.MinValue, d);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumConverterTests.cs
new file mode 100644
index 0000000..b70d02c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumConverterTests.cs
@@ -0,0 +1,367 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+using Xunit;
+using CsvHelper.TypeConversion;
+using CsvHelper.Configuration.Attributes;
+using CsvHelper.Tests.Mocks;
+using System.Text;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class EnumConverterTests
+ {
+ [Fact]
+ public void ConstructorTest()
+ {
+ try
+ {
+ new EnumConverter(typeof(string));
+ throw new XUnitException();
+ }
+ catch (ArgumentException ex)
+ {
+ Assert.Equal("'System.String' is not an Enum.", ex.Message);
+ }
+ }
+
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new EnumConverter(typeof(TestEnum));
+ var propertyMapData = new MemberMapData(null);
+
+ Assert.Equal("None", converter.ConvertToString((TestEnum)0, null, propertyMapData));
+ Assert.Equal("None", converter.ConvertToString(TestEnum.None, null, propertyMapData));
+ Assert.Equal("One", converter.ConvertToString((TestEnum)1, null, propertyMapData));
+ Assert.Equal("One", converter.ConvertToString(TestEnum.One, null, propertyMapData));
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new EnumConverter(typeof(TestEnum));
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { EnumIgnoreCase = true },
+ };
+
+ var row = new CsvReader(new ParserMock());
+
+ Assert.Equal(TestEnum.One, converter.ConvertFromString("One", null, propertyMapData));
+ Assert.Equal(TestEnum.One, converter.ConvertFromString("one", null, propertyMapData));
+ Assert.Equal(TestEnum.One, converter.ConvertFromString("1", null, propertyMapData));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString("", row, propertyMapData));
+ Assert.Throws<TypeConverterException>(() => Assert.Equal(TestEnum.One, converter.ConvertFromString(null, row, propertyMapData)));
+ }
+
+ [Fact]
+ public void ConvertToString_NameAttribute_ReturnsNameFromNameAttribute()
+ {
+ var converter = new EnumConverter(typeof(NameAttributeEnum));
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var value = converter.ConvertToString(NameAttributeEnum.Foo, null, propertyMapData);
+
+ Assert.Equal("Bar", value);
+ }
+
+ [Fact]
+ public void ConvertFromString_NameAttribute_ReturnsValueFromNameAttribute()
+ {
+ var converter = new EnumConverter(typeof(NameAttributeEnum));
+ var propertyMapData = new MemberMapData(null)
+ {
+ };
+
+ var value = converter.ConvertFromString("Bar", null, propertyMapData);
+
+ Assert.Equal(NameAttributeEnum.Foo, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_Int16Enum_ReturnsEnumValue()
+ {
+ var converter = new EnumConverter(typeof(Int16Enum));
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var value = converter.ConvertFromString("1", null, propertyMapData);
+
+ Assert.Equal(Int16Enum.One, value);
+ }
+
+ [Fact]
+ public void ConvertToString_Int16Enum_ReturnsString()
+ {
+ var converter = new EnumConverter(typeof(Int16Enum));
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var value = converter.ConvertToString(Int16Enum.One, null, propertyMapData);
+
+ Assert.Equal("One", value);
+ }
+
+ [Fact]
+ public void ConvertFromString_Int16EnumWithNameAttribute_ReturnsEnumValue()
+ {
+ var converter = new EnumConverter(typeof(Int16Enum));
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var value = converter.ConvertFromString("Bar", null, propertyMapData);
+
+ Assert.Equal(Int16Enum.Foo, value);
+ }
+
+ [Fact]
+ public void ConvertToString_Int16EnumWithNameAttribute_ReturnsString()
+ {
+ var converter = new EnumConverter(typeof(Int16Enum));
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var value = converter.ConvertToString(Int16Enum.Foo, null, propertyMapData);
+
+ Assert.Equal("Bar", value);
+ }
+
+ [Fact]
+ public void ConvertFromString_DuplicateNames_IgnoreCase_ReturnsNameWithLowestValue()
+ {
+ var converter = new EnumConverter(typeof(DuplicateNames));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { EnumIgnoreCase = true },
+ };
+
+ var value = converter.ConvertFromString("oNe", null, memberMapData);
+
+ Assert.Equal(DuplicateNames.one, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_DuplicateValues_ReturnsNameThatAppearsFirst()
+ {
+ var converter = new EnumConverter(typeof(DuplicateValues));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ };
+
+ var value = converter.ConvertFromString("1", null, memberMapData);
+
+ Assert.Equal(DuplicateValues.One, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_UsingValue_DuplicateNamesAndValues_ReturnsNameThatAppearsFirst()
+ {
+ var converter = new EnumConverter(typeof(DuplicateNamesAndValues));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ };
+
+ var value = converter.ConvertFromString("1", null, memberMapData);
+
+ Assert.Equal(DuplicateNamesAndValues.One, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_UsingName_DuplicateNamesAndValues_ReturnsNameThatAppearsFirst()
+ {
+ var converter = new EnumConverter(typeof(DuplicateNamesAndValues));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { EnumIgnoreCase = true },
+ };
+
+ var value = converter.ConvertFromString("oNe", null, memberMapData);
+
+ Assert.Equal(DuplicateNamesAndValues.One, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_DuplicateAttributeNames_IgnoreCase_ReturnsNameWithLowestValue()
+ {
+ var converter = new EnumConverter(typeof(DuplicateNamesAttributeEnum));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { EnumIgnoreCase = true },
+ };
+
+ var value = converter.ConvertFromString("oNe", null, memberMapData);
+
+ Assert.Equal(DuplicateNamesAttributeEnum.One, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_DuplicateAttributeValues_ReturnsNameThatAppearsFirst()
+ {
+ var converter = new EnumConverter(typeof(DuplicateValuesAttributeEnum));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ };
+
+ var value = converter.ConvertFromString("1", null, memberMapData);
+
+ Assert.Equal(DuplicateValuesAttributeEnum.One, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_UsingValue_DuplicateAttributeNamesAndValues_ReturnsNameThatAppearsFirst()
+ {
+ var converter = new EnumConverter(typeof(DuplicateNamesAndValuesAttributeEnum));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ };
+
+ var value = converter.ConvertFromString("1", null, memberMapData);
+
+ Assert.Equal(DuplicateNamesAndValuesAttributeEnum.One, value);
+ }
+
+ [Fact]
+ public void ConvertFromString_UsingName_DuplicateAttributeNamesAndValues_ReturnsNameThatAppearsFirst()
+ {
+ var converter = new EnumConverter(typeof(DuplicateNamesAndValuesAttributeEnum));
+
+ var memberMapData = new MemberMapData(null)
+ {
+ TypeConverterOptions = { EnumIgnoreCase = true },
+ };
+
+ var value = converter.ConvertFromString("oNe", null, memberMapData);
+
+ Assert.Equal(DuplicateNamesAndValuesAttributeEnum.One, value);
+ }
+
+ private class TestClass
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ public TestEnum TestEnum { get; set; }
+ }
+
+ private class TestClassMap : ClassMap<TestClass>
+ {
+ public TestClassMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name);
+ Map(m => m.TestEnum).TypeConverterOption.EnumIgnoreCase();
+ }
+ }
+
+ private enum TestEnum
+ {
+ None = 0,
+ One = 1,
+ }
+
+ private enum NameAttributeEnum
+ {
+ None = 0,
+ [Name("Bar")]
+ Foo = 1
+ }
+
+ private enum Int16Enum : short
+ {
+ None = 0,
+ One = 1,
+ [Name("Bar")]
+ Foo = 2
+ }
+
+ private enum DuplicateNames
+ {
+ None = 0,
+ One = 2,
+ one = 1,
+ Three = 3
+ }
+
+ private enum DuplicateValues
+ {
+ None = 0,
+ One = 1,
+ Two = 1,
+ Three = 3
+ }
+
+ private enum DuplicateNamesAndValues
+ {
+ None = 0,
+ One = 1,
+ one = 1,
+ Two = 2
+ }
+
+ private enum DuplicateNamesAttributeEnum
+ {
+ None = 0,
+ [Name("Foo")]
+ One = 2,
+ [Name("foo")]
+ Two = 1,
+ Three = 3
+ }
+
+ private enum DuplicateValuesAttributeEnum
+ {
+ None = 0,
+ [Name("Foo")]
+ One = 1,
+ [Name("Bar")]
+ Two = 1,
+ Three = 3
+ }
+
+ private enum DuplicateNamesAndValuesAttributeEnum
+ {
+ None = 0,
+ [Name("Foo")]
+ One = 1,
+ [Name("foo")]
+ Two = 1,
+ Three = 3
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumerableConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumerableConverterTests.cs
new file mode 100644
index 0000000..3f1d4f5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/EnumerableConverterTests.cs
@@ -0,0 +1,32 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using Xunit;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using CsvHelper.Tests.Mocks;
+using System.IO;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class EnumerableConverterTests
+ {
+ [Fact]
+ public void ConvertTest()
+ {
+ var converter = new EnumerableConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var readerRow = new CsvReader(new ParserMock());
+ var writerRow = new CsvWriter(new StringWriter(), CultureInfo.InvariantCulture);
+
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString("", readerRow, propertyMapData));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertToString(5, writerRow, propertyMapData));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryConverterTests.cs
new file mode 100644
index 0000000..75915b2
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryConverterTests.cs
@@ -0,0 +1,303 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class IDictionaryConverterTests
+ {
+ [Fact]
+ public void FullWriteTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Dictionary = new Dictionary<string, int> { { "Prop1", 1 }, { "Prop2", 2 }, { "Prop3", 3 } } }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal(",1,2,3,\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void FullReadTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Prop1,Prop2,Prop3,Prop4,Prop5");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var dict = records[0].Dictionary;
+
+ Assert.Equal(3, dict.Count);
+ Assert.Equal("2", dict["Prop2"]);
+ Assert.Equal("3", dict["Prop3"]);
+ Assert.Equal("4", dict["Prop4"]);
+ }
+ }
+
+ [Fact]
+ public void FullReadNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // You can't read into a dictionary without a header.
+ // You need to header value to use as the key.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderIndexDifferentNamesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Before,Dictionary1,Dictionary2,Dictionary3,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].Dictionary;
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal("2", list["Dictionary1"]);
+ Assert.Equal("3", list["Dictionary2"]);
+ Assert.Equal("4", list["Dictionary3"]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderIndexSameNamesTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,Dictionary,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Can't have same name with Dictionary.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithDefaultHeaderDifferentNamesTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Before,Dictionary1,Dictionary2,Dictionary3,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestDefaultMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Indexes must be specified for dictionaries.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithDefaultHeaderSameNamesTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,Dictionary,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestDefaultMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Headers can't have the same name.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithNamedHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,Dictionary,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Header's can't have the same name.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderListItemsScattered()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,A,Dictionary,B,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5,6,7");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Header's can't have the same name.
+ }
+ }
+ }
+
+ private class Test
+ {
+ public string Before { get; set; }
+ public IDictionary Dictionary { get; set; }
+ public string After { get; set; }
+ }
+
+ private sealed class TestIndexMap : ClassMap<Test>
+ {
+ public TestIndexMap()
+ {
+ Map(m => m.Before).Index(0);
+ Map(m => m.Dictionary).Index(1, 3);
+ Map(m => m.After).Index(4);
+ }
+ }
+
+ private sealed class TestNamedMap : ClassMap<Test>
+ {
+ public TestNamedMap()
+ {
+ Map(m => m.Before).Name("Before");
+ Map(m => m.Dictionary).Name("Dictionary");
+ Map(m => m.After).Name("After");
+ }
+ }
+
+ private sealed class TestDefaultMap : ClassMap<Test>
+ {
+ public TestDefaultMap()
+ {
+ Map(m => m.Before);
+ Map(m => m.Dictionary);
+ Map(m => m.After);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryGenericConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryGenericConverterTests.cs
new file mode 100644
index 0000000..b135632
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IDictionaryGenericConverterTests.cs
@@ -0,0 +1,198 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System.Reflection;
+using CsvHelper.Tests.Mocks;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class IDictionaryGenericConverterTests
+ {
+ [Fact]
+ public void FullReadNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // You can't read into a dictionary without a header.
+ // You need to header value to use as the key.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HeaderValidated = null,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("Before,Dictionary1,Dictionary2,Dictionary3,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].Dictionary;
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list["Dictionary1"]);
+ Assert.Equal(3, list["Dictionary2"]);
+ Assert.Equal(4, list["Dictionary3"]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithDefaultHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,Dictionary,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestDefaultMap>();
+
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Can't have same name with Dictionary.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithNamedHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,Dictionary,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Can't have same name with Dictionary.
+ }
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderListItemsScattered()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,Dictionary,A,Dictionary,B,Dictionary,After");
+ writer.WriteLine("1,2,3,4,5,6,7");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ try
+ {
+ var records = csv.GetRecords<Test>().ToList();
+ throw new XUnitException();
+ }
+ catch (ReaderException)
+ {
+ // Can't have same name with Dictionary.
+ }
+ }
+ }
+
+ private class Test
+ {
+ public string Before { get; set; }
+ public Dictionary<string, int?> Dictionary { get; set; }
+ public string After { get; set; }
+ }
+
+ private sealed class TestIndexMap : ClassMap<Test>
+ {
+ public TestIndexMap()
+ {
+ Map(m => m.Before).Index(0);
+ Map(m => m.Dictionary).Index(1, 3);
+ Map(m => m.After).Index(4);
+ }
+ }
+
+ private sealed class TestNamedMap : ClassMap<Test>
+ {
+ public TestNamedMap()
+ {
+ Map(m => m.Before).Name("Before");
+ Map(m => m.Dictionary).Name("Dictionary");
+ Map(m => m.After).Name("After");
+ }
+ }
+
+ private sealed class TestDefaultMap : ClassMap<Test>
+ {
+ public TestDefaultMap()
+ {
+ Map(m => m.Before);
+ Map(m => m.Dictionary);
+ Map(m => m.After);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableConverterTests.cs
new file mode 100644
index 0000000..22a7bd5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableConverterTests.cs
@@ -0,0 +1,261 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Linq;
+using CsvHelper.Configuration;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using Xunit;
+using System.Globalization;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class IEnumerableConverterTests
+ {
+ [Fact]
+ public void FullReadNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.Cast<string>().ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal("2", list[0]);
+ Assert.Equal("3", list[1]);
+ Assert.Equal("4", list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.Cast<string>().ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal("2", list[0]);
+ Assert.Equal("3", list[1]);
+ Assert.Equal("4", list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithDefaultHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestDefaultMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.Cast<string>().ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal("2", list[0]);
+ Assert.Equal("3", list[1]);
+ Assert.Equal("4", list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithNamedHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.Cast<string>().ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal("2", list[0]);
+ Assert.Equal("3", list[1]);
+ Assert.Equal("4", list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderListItemsScattered()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,A,List,B,List,After");
+ writer.WriteLine("1,2,3,4,5,6,7");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.Cast<string>().ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal("2", list[0]);
+ Assert.Equal("4", list[1]);
+ Assert.Equal("6", list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullWriteNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { List = new List<int> { 1, 2, 3 } }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal(",1,2,3,\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void FullWriteWithHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Test>
+ {
+ new Test { List = new List<int> { 1, 2, 3 } }
+ };
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Before,List1,List2,List3,After");
+ expected.AppendLine(",1,2,3,");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void FullWriteWithHeaderAutoMapTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Test>
+ {
+ new Test { List = new List<int> { 1, 2, 3 } }
+ };
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Before,After");
+ expected.AppendLine(",");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ private class Test
+ {
+ public string Before { get; set; }
+ public IEnumerable List { get; set; }
+ public string After { get; set; }
+ }
+
+ private sealed class TestIndexMap : ClassMap<Test>
+ {
+ public TestIndexMap()
+ {
+ Map(m => m.Before).Index(0);
+ Map(m => m.List).Index(1, 3);
+ Map(m => m.After).Index(4);
+ }
+ }
+
+ private sealed class TestNamedMap : ClassMap<Test>
+ {
+ public TestNamedMap()
+ {
+ Map(m => m.Before).Name("Before");
+ Map(m => m.List).Name("List");
+ Map(m => m.After).Name("After");
+ }
+ }
+
+ private sealed class TestDefaultMap : ClassMap<Test>
+ {
+ public TestDefaultMap()
+ {
+ Map(m => m.Before);
+ Map(m => m.List);
+ Map(m => m.After);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableGenericConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableGenericConverterTests.cs
new file mode 100644
index 0000000..deebb6d
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/IEnumerableGenericConverterTests.cs
@@ -0,0 +1,265 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using Xunit;
+using System.Reflection;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.Configuration.Attributes;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class IEnumerableGenericConverterTests
+ {
+ [Fact]
+ public void FullReadNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithDefaultHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestDefaultMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithNamedHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,List,List,After");
+ writer.WriteLine("1,2,3,4,5");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(3, list[1]);
+ Assert.Equal(4, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullReadWithHeaderListItemsScattered()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("Before,List,A,List,B,List,After");
+ writer.WriteLine("1,2,3,4,5,6,7");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestNamedMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ var list = records[0].List.ToList();
+
+ Assert.Equal(3, list.Count);
+ Assert.Equal(2, list[0]);
+ Assert.Equal(4, list[1]);
+ Assert.Equal(6, list[2]);
+ }
+ }
+
+ [Fact]
+ public void FullWriteNoHeaderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { List = new List<int?> { 1, 2, 3 } }
+ };
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal(",1,2,3,\r\n", result);
+ }
+ }
+
+ [Fact]
+ public void FullWriteWithHeaderTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Test>
+ {
+ new Test { List = new List<int?> { 1, 2, 3 } }
+ };
+ csv.Context.RegisterClassMap<TestIndexMap>();
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Before,List1,List2,List3,After");
+ expected.AppendLine(",1,2,3,");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void GetRecords_NullValuesAttributeWithIndex_UsesCustomNullValue()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parser = new ParserMock(config)
+ {
+ { "NULL", "", "2" },
+ };
+ using (var csv = new CsvReader(parser))
+ {
+ var records = csv.GetRecords<NullValuesAttributeIndexTest>().ToList();
+ }
+ }
+
+ private class NullValuesAttributeIndexTest
+ {
+ [Index(0, 2)]
+ [NullValues("NULL")]
+ public List<int?> List { get; set; }
+ }
+
+ private class Test
+ {
+ public string Before { get; set; }
+ public IEnumerable<int?> List { get; set; }
+ public string After { get; set; }
+ }
+
+ private sealed class TestIndexMap : ClassMap<Test>
+ {
+ public TestIndexMap()
+ {
+ Map(m => m.Before).Index(0);
+ Map(m => m.List).Index(1, 3);
+ Map(m => m.After).Index(4);
+ }
+ }
+
+ private sealed class TestNamedMap : ClassMap<Test>
+ {
+ public TestNamedMap()
+ {
+ Map(m => m.Before).Name("Before");
+ Map(m => m.List).Name("List");
+ Map(m => m.After).Name("After");
+ }
+ }
+
+ private sealed class TestDefaultMap : ClassMap<Test>
+ {
+ public TestDefaultMap()
+ {
+ Map(m => m.Before);
+ Map(m => m.List);
+ Map(m => m.After);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/SingleConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/SingleConverterTests.cs
new file mode 100644
index 0000000..38b86ea
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/SingleConverterTests.cs
@@ -0,0 +1,39 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class SingleConverterTests
+ {
+ [Fact]
+ public void RoundTripMaxValueTest()
+ {
+ var converter = new SingleConverter();
+ var s = converter.ConvertToString(float.MaxValue, null, new MemberMapData(null));
+ var f = converter.ConvertFromString(s, null, new MemberMapData(null));
+
+ Assert.Equal(float.MaxValue, f);
+ }
+
+ [Fact]
+ public void RoundTripMinValueTest()
+ {
+ var converter = new SingleConverter();
+ var s = converter.ConvertToString(float.MinValue, null, new MemberMapData(null));
+ var f = converter.ConvertFromString(s, null, new MemberMapData(null));
+
+ Assert.Equal(float.MinValue, f);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeOnlyConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeOnlyConverterTests.cs
new file mode 100644
index 0000000..7792868
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeOnlyConverterTests.cs
@@ -0,0 +1,59 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+#if NET6_0
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using System;
+using System.Globalization;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+ public class TimeOnlyConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new TimeOnlyConverter();
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var date = DateOnly.FromDateTime(DateTime.Now);
+
+ // Valid conversions.
+ Assert.Equal(date.ToString(), converter.ConvertToString(date, null, propertyMapData));
+
+ // Invalid conversions.
+ Assert.Equal("1", converter.ConvertToString(1, null, propertyMapData));
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new TimeOnlyConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+
+ var row = new CsvReader(new ParserMock());
+
+ var time = TimeOnly.FromDateTime(DateTime.Now);
+
+ // Valid conversions.
+ Assert.Equal(time.ToString(), converter.ConvertFromString(time.ToString(), null, propertyMapData).ToString());
+ Assert.Equal(time.ToString(), converter.ConvertFromString(time.ToString("o"), null, propertyMapData).ToString());
+ Assert.Equal(time.ToString(), converter.ConvertFromString(" " + time + " ", null, propertyMapData).ToString());
+
+ // Invalid conversions.
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ }
+ }
+}
+#endif
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeSpanConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeSpanConverterTests.cs
new file mode 100644
index 0000000..21af674
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TimeSpanConverterTests.cs
@@ -0,0 +1,54 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Globalization;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class TimeSpanConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new TimeSpanConverter();
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture }
+ };
+
+ var dateTime = DateTime.Now;
+ var timeSpan = new TimeSpan(dateTime.Hour, dateTime.Minute, dateTime.Second, dateTime.Millisecond);
+
+ // Valid conversions.
+ Assert.Equal(timeSpan.ToString(), converter.ConvertToString(timeSpan, null, propertyMapData));
+
+ // Invalid conversions.
+ Assert.Equal("1", converter.ConvertToString(1, null, propertyMapData));
+ Assert.Equal("", converter.ConvertToString(null, null, propertyMapData));
+ }
+
+ [Fact]
+ public void ComponentModelCompatibilityTest()
+ {
+ var converter = new TimeSpanConverter();
+ var cmConverter = new System.ComponentModel.TimeSpanConverter();
+
+ var propertyMapData = new MemberMapData(null);
+ propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;
+ var row = new CsvReader(new ParserMock());
+
+ Assert.Throws<FormatException>(() => cmConverter.ConvertFromString(""));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString("", row, propertyMapData));
+ Assert.Throws<NotSupportedException>(() => cmConverter.ConvertFromString(null));
+ Assert.Throws<TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterCacheTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterCacheTests.cs
new file mode 100644
index 0000000..499013a
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterCacheTests.cs
@@ -0,0 +1,243 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class TypeConverterCacheTests
+ {
+ [Fact]
+ public void GetConverterForUnknownTypeTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(TestUnknownClass));
+
+ Assert.IsType<DefaultTypeConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForKnownTypeTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter<TestKnownClass>();
+
+ Assert.IsType<DefaultTypeConverter>(converter);
+
+ typeConverterFactory.AddConverter<TestKnownClass>(new TestKnownConverter());
+ converter = typeConverterFactory.GetConverter<TestKnownClass>();
+
+ Assert.IsType<TestKnownConverter>(converter);
+ }
+
+ [Fact]
+ public void RemoveConverterForUnknownTypeTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ typeConverterFactory.RemoveConverter<TestUnknownClass>();
+ typeConverterFactory.RemoveConverter(typeof(TestUnknownClass));
+ }
+
+ [Fact]
+ public void GetConverterForByteTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(byte));
+
+ Assert.IsType<ByteConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForByteArrayTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(byte[]));
+
+ Assert.IsType<ByteArrayConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForCharTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(char));
+
+ Assert.IsType<CharConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForDateTimeTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(DateTime));
+
+ Assert.IsType<DateTimeConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForDecimalTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(decimal));
+
+ Assert.IsType<DecimalConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForDoubleTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(double));
+
+ Assert.IsType<DoubleConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForFloatTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(float));
+
+ Assert.IsType<SingleConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForGuidTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(Guid));
+
+ Assert.IsType<GuidConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForInt16Test()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(short));
+
+ Assert.IsType<Int16Converter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForInt32Test()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(int));
+
+ Assert.IsType<Int32Converter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForInt64Test()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(long));
+
+ Assert.IsType<Int64Converter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForNullableTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(int?));
+
+ Assert.IsType<NullableConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForSByteTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(sbyte));
+
+ Assert.IsType<SByteConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForStringTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(string));
+
+ Assert.IsType<StringConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForUInt16Test()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(ushort));
+
+ Assert.IsType<UInt16Converter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForUInt32Test()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(uint));
+
+ Assert.IsType<UInt32Converter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForUInt64Test()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(ulong));
+
+ Assert.IsType<UInt64Converter>(converter);
+ }
+
+ [Fact]
+ public void GetConverterForEnumTest()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ var converter = typeConverterFactory.GetConverter(typeof(FooEnum));
+
+ Assert.IsType<EnumConverter>(converter);
+ }
+
+ [Fact]
+ public void GetConverter_ConverterRegisteredForEnum_ReturnCustomConverterForAllEnums()
+ {
+ var typeConverterFactory = new TypeConverterCache();
+ typeConverterFactory.AddConverter<Enum>(new TestKnownConverter());
+ var fooConverter = typeConverterFactory.GetConverter(typeof(FooEnum));
+ var barConverter = typeConverterFactory.GetConverter(typeof(BarEnum));
+
+ Assert.IsType<TestKnownConverter>(fooConverter);
+ Assert.IsType<TestKnownConverter>(barConverter);
+ }
+
+ private class TestListConverter : DefaultTypeConverter
+ {
+ }
+
+ private class TestUnknownClass
+ {
+ }
+
+ private class TestKnownClass
+ {
+ }
+
+ private class TestKnownConverter : DefaultTypeConverter
+ {
+ }
+
+ private enum FooEnum
+ {
+ }
+
+ private enum BarEnum
+ {
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsFactoryTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsFactoryTests.cs
new file mode 100644
index 0000000..d0beeee
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsFactoryTests.cs
@@ -0,0 +1,211 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class TypeConverterOptionsFactoryTests
+ {
+ [Fact]
+ public void AddGetRemoveTest()
+ {
+ var customOptions = new TypeConverterOptions
+ {
+ Formats = new string[] { "custom" },
+ };
+ var typeConverterOptionsFactory = new TypeConverterOptionsCache();
+
+ typeConverterOptionsFactory.AddOptions<string>(customOptions);
+ var options = typeConverterOptionsFactory.GetOptions<string>();
+
+ Assert.Equal(customOptions.Formats, options.Formats);
+
+ typeConverterOptionsFactory.RemoveOptions<string>();
+
+ options = typeConverterOptionsFactory.GetOptions<string>();
+
+ Assert.NotEqual(customOptions.Formats, options.Formats);
+ }
+
+ [Fact]
+ public void GetFieldTest()
+ {
+ var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("\"1,234\",\"5,678\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvReader.Read();
+ Assert.Equal(1234, csvReader.GetField<int>(0));
+ Assert.Equal(5678, csvReader.GetField(typeof(int), 1));
+ }
+ }
+
+ [Fact]
+ public void GetRecordsTest()
+ {
+ var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("\"1,234\",\"5,678\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvReader.GetRecords<Test>().ToList();
+ }
+ }
+
+ [Fact]
+ public void GetRecordsAppliedWhenMappedTest()
+ {
+ var options = new TypeConverterOptions { NumberStyles = NumberStyles.AllowThousands };
+
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvReader = new CsvReader(reader, config))
+ {
+ writer.WriteLine("\"1,234\",\"$5,678\"");
+ writer.Flush();
+ stream.Position = 0;
+
+ csvReader.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvReader.Context.RegisterClassMap<TestMap>();
+ csvReader.GetRecords<Test>().ToList();
+ }
+ }
+
+ [Fact]
+ public void WriteFieldTest()
+ {
+ var options = new TypeConverterOptions { Formats = new string[] { "c" } };
+
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvWriter.WriteField(1234);
+ csvWriter.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+ var record = reader.ReadToEnd();
+
+ Assert.Equal("\"$1,234.00\"\r\n", record);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsTest()
+ {
+ var options = new TypeConverterOptions { Formats = new string[] { "c" } };
+
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Number = 1234, NumberOverridenInMap = 5678 },
+ };
+ csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvWriter.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+ var record = reader.ReadToEnd();
+
+ Assert.Equal("\"$1,234.00\",\"$5,678.00\"\r\n", record);
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsAppliedWhenMappedTest()
+ {
+ var options = new TypeConverterOptions { Formats = new string[] { "c" } };
+
+ var config = new CsvConfiguration(new CultureInfo("en-US"))
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csvWriter = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Number = 1234, NumberOverridenInMap = 5678 },
+ };
+ csvWriter.Context.TypeConverterOptionsCache.AddOptions<int>(options);
+ csvWriter.Context.RegisterClassMap<TestMap>();
+ csvWriter.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+ var record = reader.ReadToEnd();
+
+ Assert.Equal("\"$1,234.00\",\"5,678.00\"\r\n", record);
+ }
+ }
+
+ private class Test
+ {
+ public int Number { get; set; }
+
+ public int NumberOverridenInMap { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Number);
+ Map(m => m.NumberOverridenInMap)
+ .TypeConverterOption.NumberStyles(NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol)
+ .TypeConverterOption.Format("N2");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsTests.cs
new file mode 100644
index 0000000..90f8f0b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterOptionsTests.cs
@@ -0,0 +1,110 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class TypeConverterOptionsTests
+ {
+ [Fact]
+ public void GlobalNullValueTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine(",");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add(string.Empty);
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Null(records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void MappingNullValueTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine(",");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Null(records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ [Fact]
+ public void GlobalAndMappingNullValueTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var writer = new StreamWriter(stream))
+ using (var reader = new StreamReader(stream))
+ using (var csv = new CsvReader(reader, config))
+ {
+ writer.WriteLine(",");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.TypeConverterOptionsCache.GetOptions<string>().NullValues.Add("null");
+ csv.Context.RegisterClassMap<TestMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Null(records[0].Id);
+ Assert.Null(records[0].Name);
+ }
+ }
+
+ private class Test
+ {
+ public int? Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).TypeConverterOption.NullValues(string.Empty);
+ }
+ }
+
+ // auto map options have defaults
+ // map options could be default or custom if set
+ // global has defaults or custom
+ // merge global with map
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterTests.cs
new file mode 100644
index 0000000..da71236
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/TypeConverterTests.cs
@@ -0,0 +1,51 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Linq;
+using Xunit;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using CsvHelper.TypeConversion;
+using System.Globalization;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class TypeConverterTests
+ {
+ [Fact]
+ public void ReaderInheritedConverter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ var parserMock = new ParserMock(config)
+ {
+ { "1" },
+ };
+ var csv = new CsvReader(parserMock);
+ csv.Context.RegisterClassMap<TestMap>();
+ var list = csv.GetRecords<Test>().ToList();
+ }
+
+ private class Test
+ {
+ public int IntColumn { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.IntColumn).Index(0).TypeConverter<Converter>();
+ }
+ }
+
+ private class Converter : Int32Converter
+ {
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/UriConverterTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/UriConverterTests.cs
new file mode 100644
index 0000000..d55baed
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/TypeConversion/UriConverterTests.cs
@@ -0,0 +1,106 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.TypeConversion;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.IO;
+
+namespace CsvHelper.Tests.TypeConversion
+{
+
+ public class UriConverterTests
+ {
+ [Fact]
+ public void ConvertToStringTest()
+ {
+ var converter = new UriConverter();
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture },
+ };
+
+ Assert.Equal("https://test.com/", converter.ConvertToString(new Uri("https://test.com"), null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringTest()
+ {
+ var converter = new UriConverter();
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture },
+ };
+
+ Assert.Equal(new Uri("https://test.com"), converter.ConvertFromString("https://test.com", null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringUriKindRelativeTest()
+ {
+ var converter = new UriConverter();
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture, UriKind = UriKind.Relative },
+ };
+
+ Assert.Equal(new Uri("/a/b/c", UriKind.Relative), converter.ConvertFromString("/a/b/c", null, propertyMapData));
+ }
+
+ [Fact]
+ public void ConvertFromStringUriKindAbsoluteTest()
+ {
+ var converter = new UriConverter();
+
+ var propertyMapData = new MemberMapData(null)
+ {
+ TypeConverter = converter,
+ TypeConverterOptions = { CultureInfo = CultureInfo.CurrentCulture, UriKind = UriKind.Absolute },
+ };
+
+ Assert.Equal(new Uri("https://test.com"), converter.ConvertFromString("https://test.com", null, propertyMapData));
+ }
+
+ [Fact]
+ public void TypeConverterCacheTest()
+ {
+ var cache = new TypeConverterCache();
+ var converter = cache.GetConverter<Uri>();
+
+ Assert.IsType<UriConverter>(converter);
+ }
+
+ [Fact]
+ public void AnonymousTypeTest()
+ {
+ var sw = new StringWriter();
+ var entries = new[]
+ {
+ new { Uri = new Uri("http://host/path") }
+ };
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Delimiter = ";",
+ };
+ using (var cw = new CsvWriter(sw, config))
+ {
+ cw.WriteRecords(entries);
+ }
+
+ Assert.Equal("Uri\r\nhttp://host/path\r\n", sw.ToString());
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/AnonymousTypesTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/AnonymousTypesTests.cs
new file mode 100644
index 0000000..8ad8682
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/AnonymousTypesTests.cs
@@ -0,0 +1,34 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections;
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class AnonymousTypesTests
+ {
+ [Fact]
+ public void AnonymousIEnumerableTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ IEnumerable records = new ArrayList
+ {
+ new
+ {
+ Id = 1,
+ Name = "one",
+ }
+ };
+
+ csv.WriteRecords(records);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ConstantTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ConstantTests.cs
new file mode 100644
index 0000000..6bf29e4
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ConstantTests.cs
@@ -0,0 +1,126 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class ConstantTests
+ {
+ [Fact]
+ public void StringConstantTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<Test>
+ {
+ new Test { Id = 1, Name = "one" },
+ new Test { Id = 2, Name = "two" }
+ };
+
+ csv.Context.RegisterClassMap<TestStringMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,constant");
+ expected.AppendLine("2,constant");
+
+ var result = reader.ReadToEnd();
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void NullConstantTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<Test>
+ {
+ new Test { Id = 1, Name = "one" },
+ };
+
+ csv.Context.RegisterClassMap<TestNullMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+
+ Assert.Equal("1,\r\n", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void IntConstantTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var records = new List<Test>
+ {
+ new Test { Id = 1, Name = "one" },
+ };
+
+ csv.Context.RegisterClassMap<TestIntMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+
+ Assert.Equal("-1,one\r\n", writer.ToString());
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+
+ private sealed class TestIntMap : ClassMap<Test>
+ {
+ public TestIntMap()
+ {
+ Map(m => m.Id).Constant(-1);
+ Map(m => m.Name);
+ }
+ }
+
+ private sealed class TestNullMap : ClassMap<Test>
+ {
+ public TestNullMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Constant(null);
+ }
+ }
+
+ private sealed class TestStringMap : ClassMap<Test>
+ {
+ public TestStringMap()
+ {
+ Map(m => m.Id);
+ Map(m => m.Name).Constant("constant");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/CsvModeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/CsvModeTests.cs
new file mode 100644
index 0000000..65e5e49
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/CsvModeTests.cs
@@ -0,0 +1,145 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class CsvModeTests
+ {
+ [Fact]
+ public void WriteField_EscapeMode_ContainsQuote_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a\"b", true);
+ csv.Flush();
+
+ Assert.Equal("a\\\"b", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoEscapeMode_ContainsQuote_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.NoEscape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a\"b", true);
+ csv.Flush();
+
+ Assert.Equal("a\"b", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_EscapeMode_ContainsDelimiter_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a,b", true);
+ csv.Flush();
+
+ Assert.Equal("a\\,b", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoEscapeMode_ContainsDelimiter_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.NoEscape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a,b", true);
+ csv.Flush();
+
+ Assert.Equal("a,b", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_EscapeMode_ContainsNewline_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ NewLine = "\n",
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a\nb", true);
+ csv.Flush();
+
+ Assert.Equal("a\\\nb", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_EscapeMode_Contains2CharNewline_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.Escape,
+ Escape = '\\',
+ NewLine = "\r\n",
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a\r\nb", true);
+ csv.Flush();
+
+ Assert.Equal("a\\\r\\\nb", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoEscapeMode_ContainsNewline_EscapesWithoutQuotingField()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ Mode = CsvMode.NoEscape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("a\r\nb", true);
+ csv.Flush();
+
+ Assert.Equal("a\r\nb", writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/DynamicTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/DynamicTests.cs
new file mode 100644
index 0000000..1cf33dc
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/DynamicTests.cs
@@ -0,0 +1,218 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Dynamic;
+using System.Globalization;
+using System.IO;
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class DynamicTests
+ {
+ [Fact]
+ public void WriteDynamicExpandoObjectsTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<dynamic>();
+
+ dynamic obj = new ExpandoObject();
+ obj.Id = 1;
+ obj.Name = "one";
+ list.Add(obj);
+
+ obj = new ExpandoObject();
+ obj.Id = 2;
+ obj.Name = "two";
+ list.Add(obj);
+
+ csv.WriteRecords(list);
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = "Id,Name\r\n";
+ expected += "1,one\r\n";
+ expected += "2,two\r\n";
+
+ Assert.Equal(expected, reader.ReadToEnd());
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicExpandoObjectTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ dynamic obj = new ExpandoObject();
+ obj.Id = 1;
+ obj.Name = "one";
+
+ csv.WriteDynamicHeader(obj);
+ csv.NextRecord();
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ obj = new ExpandoObject();
+ obj.Id = 2;
+ obj.Name = "two";
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = "Id,Name\r\n";
+ expected += "1,one\r\n";
+ expected += "2,two\r\n";
+
+ Assert.Equal(expected, reader.ReadToEnd());
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicExpandoObjectHasDifferentPropertyOrderingTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ dynamic obj = new ExpandoObject();
+ obj.Name = "one";
+ obj.Id = 1;
+
+ csv.WriteDynamicHeader(obj);
+ csv.NextRecord();
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ obj = new ExpandoObject();
+ obj.Name = "two";
+ obj.Id = 2;
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ var expected = "Name,Id\r\n";
+ expected += "one,1\r\n";
+ expected += "two,2\r\n";
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicIDynamicMetaObjectProviderHasDifferentPropertyOrderingTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ dynamic obj = new DynamicObjectMock();
+ obj.Name = "one";
+ obj.Id = 1;
+
+ csv.WriteDynamicHeader(obj);
+ csv.NextRecord();
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ obj = new ExpandoObject();
+ obj.Name = "two";
+ obj.Id = 2;
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ var expected = "Name,Id\r\n";
+ expected += "one,1\r\n";
+ expected += "two,2\r\n";
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicExpandoObjectHasDifferentPropertyOrderingWithDynamicSortTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DynamicPropertySort = Comparer<string>.Create((x, y) => x.CompareTo(y)),
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ dynamic obj = new ExpandoObject();
+ obj.Name = "one";
+ obj.Id = 1;
+
+ csv.WriteDynamicHeader(obj);
+ csv.NextRecord();
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ obj = new ExpandoObject();
+ obj.Id = 2;
+ obj.Name = "two";
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ var expected = "Id,Name\r\n";
+ expected += "1,one\r\n";
+ expected += "2,two\r\n";
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteDynamicIDynamicMetaObjectProviderHasDifferentPropertyOrderingWithDynamicSortTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ DynamicPropertySort = Comparer<string>.Create((x, y) => x.CompareTo(y)),
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ dynamic obj = new DynamicObjectMock();
+ obj.Name = "one";
+ obj.Id = 1;
+
+ csv.WriteDynamicHeader(obj);
+ csv.NextRecord();
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ obj = new ExpandoObject();
+ obj.Id = 2;
+ obj.Name = "two";
+
+ csv.WriteRecord(obj);
+ csv.NextRecord();
+
+ var expected = "Id,Name\r\n";
+ expected += "1,one\r\n";
+ expected += "2,two\r\n";
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/FieldTypeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/FieldTypeTests.cs
new file mode 100644
index 0000000..507bd44
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/FieldTypeTests.cs
@@ -0,0 +1,87 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class FieldTypeTests
+ {
+ [Fact]
+ public void WriteField_ShouldQuote_HasCorrectFieldType()
+ {
+ Type type = null;
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = args =>
+ {
+ type = args.FieldType;
+ return ConfigurationFunctions.ShouldQuote(args);
+ },
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField(string.Empty);
+ Assert.Equal(typeof(string), type);
+
+ csv.WriteField(1);
+ Assert.Equal(typeof(int), type);
+
+ csv.WriteField(string.Empty);
+ Assert.Equal(typeof(string), type);
+ }
+ }
+
+ [Fact]
+ public void WriteRecords_ShouldQuote_HasCorrectFieldType()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = args =>
+ {
+ if (args.Row.Row > 1)
+ {
+ switch (args.Row.Index)
+ {
+ case 0:
+ Assert.Equal(typeof(int), args.FieldType);
+ break;
+ case 1:
+ Assert.Equal(typeof(string), args.FieldType);
+ break;
+ }
+ }
+
+ return ConfigurationFunctions.ShouldQuote(args);
+ },
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IAsyncEnumerableTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IAsyncEnumerableTests.cs
new file mode 100644
index 0000000..dc5fd61
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IAsyncEnumerableTests.cs
@@ -0,0 +1,50 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+#if !NET45
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+ public class IAsyncEnumerableTests
+ {
+ [Fact]
+ public async Task Test()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ new Foo { Id = 2, Name = "two" },
+ }.ToAsyncEnumerable();
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ await csv.WriteRecordsAsync(records);
+
+ var expected = new StringBuilder();
+ expected.Append("Id,Name\r\n");
+ expected.Append("1,one\r\n");
+ expected.Append("2,two\r\n");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+ }
+}
+#endif
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IgnoreTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IgnoreTests.cs
new file mode 100644
index 0000000..3fbe5e7
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/IgnoreTests.cs
@@ -0,0 +1,51 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class IgnoreTests
+ {
+ [Fact]
+ public void WritingWithAllPropertiesIgnoredTest()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1 },
+ };
+
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<FooMap>();
+ csv.WriteRecords(records);
+
+ Assert.Equal("\r\n\r\n", writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+ }
+
+ private class FooMap : ClassMap<Foo>
+ {
+ public FooMap()
+ {
+ Map(m => m.Id).Ignore();
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/InterfaceTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/InterfaceTests.cs
new file mode 100644
index 0000000..b3f2cad
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/InterfaceTests.cs
@@ -0,0 +1,90 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class InterfaceTests
+ {
+ [Fact]
+ public void WriteRecordsGenericTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var records = new List<IRecord>();
+ IRecord record = new Record { A = 1, B = 2 };
+ records.Add(record);
+ record = new Record { A = 3, B = 4 };
+ records.Add(record);
+
+ csv.Context.RegisterClassMap<RecordMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = "RenameA\r\n1\r\n3\r\n";
+ Assert.Equal(expected, reader.ReadToEnd());
+ }
+ }
+
+ [Fact]
+ public void WriteRecordTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.Context.RegisterClassMap<RecordMap>();
+
+ csv.WriteHeader<IRecord>();
+ csv.NextRecord();
+
+ IRecord record = new Record { A = 1, B = 2 };
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ record = new Record { A = 3, B = 4 };
+ csv.WriteRecord(record);
+ csv.NextRecord();
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = "RenameA\r\n1\r\n3\r\n";
+ Assert.Equal(expected, reader.ReadToEnd());
+ }
+ }
+
+ private interface IRecord
+ {
+ int A { get; set; }
+ int B { get; set; }
+ }
+
+ private class Record : IRecord
+ {
+ public int A { get; set; }
+ public int B { get; set; }
+ }
+
+ private sealed class RecordMap : ClassMap<IRecord>
+ {
+ public RecordMap()
+ {
+ Map(m => m.A).Name("RenameA");
+ }
+ }
+
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleFieldsFromOnePropertyTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleFieldsFromOnePropertyTests.cs
new file mode 100644
index 0000000..f33508b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleFieldsFromOnePropertyTests.cs
@@ -0,0 +1,79 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class MultipleFieldsFromOnePropertyTests
+ {
+ [Fact]
+ public void WriteMultipleFieldsFromSinglePropertyTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, new CultureInfo("en-US")))
+ {
+ var records = new List<Test>
+ {
+ new Test { Dob = DateTime.Parse("9/6/2017", new CultureInfo("en-US")) }
+ };
+ csv.Context.RegisterClassMap<TestMap>();
+ csv.WriteRecords(records);
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("A,B,C");
+ expected.AppendLine("9/6/2017 12:00:00 AM,9/6/2017 12:00:00 AM,9/6/2017 12:00:00 AM");
+
+ Assert.Equal(expected.ToString(), reader.ReadToEnd());
+ }
+ }
+
+ [Fact]
+ public void ReadingWhenMultipleMapsForAPropertyAreSpecifiedUsesTheLastMapTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
+ {
+ writer.WriteLine("A,B,C");
+ writer.WriteLine("9/6/2017 12:00:00 AM,9/7/2017 12:00:00 AM,9/8/2017 12:00:00 AM");
+ writer.Flush();
+ stream.Position = 0;
+
+ csv.Context.RegisterClassMap<TestMap>();
+ var records = csv.GetRecords<Test>().ToList();
+
+ Assert.Equal(DateTime.Parse("9/8/2017", CultureInfo.InvariantCulture), records[0].Dob);
+ }
+ }
+
+ private class Test
+ {
+ public DateTime Dob { get; set; }
+ }
+
+ private sealed class TestMap : ClassMap<Test>
+ {
+ public TestMap()
+ {
+ Map(m => m.Dob, false).Name("A");
+ Map(m => m.Dob, false).Name("B");
+ Map(m => m.Dob, false).Name("C");
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleHeadersTest.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleHeadersTest.cs
new file mode 100644
index 0000000..086bb86
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/MultipleHeadersTest.cs
@@ -0,0 +1,84 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using Xunit;
+using System.Dynamic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class MultipleHeadersTest
+ {
+ [Fact]
+ public void GenericTypeTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteHeader<A>();
+ csv.NextRecord();
+ csv.WriteRecord(new A { Id = 1 });
+ csv.NextRecord();
+
+ csv.WriteHeader<B>();
+ csv.NextRecord();
+ csv.WriteRecord(new B { Name = "one" });
+ csv.NextRecord();
+ writer.Flush();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+ expected.AppendLine("Name");
+ expected.AppendLine("one");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void DynamicTypeTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ dynamic a = new ExpandoObject();
+ a.Id = 1;
+ csv.WriteDynamicHeader(a);
+ csv.NextRecord();
+ csv.WriteRecord(a);
+ csv.NextRecord();
+
+ dynamic b = new ExpandoObject();
+ b.Name = "one";
+ csv.WriteDynamicHeader(b);
+ csv.NextRecord();
+ csv.WriteRecord(b);
+ csv.NextRecord();
+ writer.Flush();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id");
+ expected.AppendLine("1");
+ expected.AppendLine("Name");
+ expected.AppendLine("one");
+
+ Assert.Equal(expected.ToString(), writer.ToString());
+ }
+ }
+
+ private class A
+ {
+ public int Id { get; set; }
+ }
+
+ private class B
+ {
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NewLineTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NewLineTests.cs
new file mode 100644
index 0000000..34e1e0b
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NewLineTests.cs
@@ -0,0 +1,92 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using CsvHelper.Tests.Mocks;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class NewLineTests
+ {
+ [Fact]
+ public void CRLFTest()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+
+ Assert.Equal("1,one\r\n", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void CRTest()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ NewLine = "\r",
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+
+ Assert.Equal("1,one\r", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void LFTest()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one" },
+ };
+
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ NewLine = "\n",
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+
+ Assert.Equal("1,one\n", writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NoPropertyMappingTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NoPropertyMappingTests.cs
new file mode 100644
index 0000000..e284836
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/NoPropertyMappingTests.cs
@@ -0,0 +1,218 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using CsvHelper.Configuration;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class NoPropertyMappingTests
+ {
+ [Fact]
+ public void NoPropertyWithHeaderAndNameTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Test>
+ {
+ new Test { Id = 1 },
+ new Test { Id = 2 }
+ };
+
+ csv.Context.RegisterClassMap<TestWithNameMap>();
+ csv.WriteRecords(list);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,Constant,Name");
+ expected.AppendLine("1,const,");
+ expected.AppendLine("2,const,");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void NoPropertyWithHeaderAndNoNameTest()
+ {
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ var list = new List<Test>
+ {
+ new Test { Id = 1 },
+ new Test { Id = 2 }
+ };
+
+ csv.Context.RegisterClassMap<TestWithNoNameMap>();
+ csv.WriteRecords(list);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("Id,");
+ expected.AppendLine("1,const");
+ expected.AppendLine("2,const");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void NoPropertyWithNoHeaderAndNameTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Id = 1 },
+ new Test { Id = 2 }
+ };
+
+ csv.Context.RegisterClassMap<TestWithNameMap>();
+ csv.WriteRecords(list);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("1,const,");
+ expected.AppendLine("2,const,");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void NoPropertyWithNoHeaderAndNoNameTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Id = 1 },
+ new Test { Id = 2 }
+ };
+
+ csv.Context.RegisterClassMap<TestWithNoNameMap>();
+ csv.WriteRecords(list);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("1,const");
+ expected.AppendLine("2,const");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ [Fact]
+ public void OutOfOrderTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var list = new List<Test>
+ {
+ new Test { Id = 1, Name = "one" },
+ new Test { Id = 2, Name = "two" }
+ };
+
+ csv.Context.RegisterClassMap<TestMapOutOfOrderWithEmptyFieldsMap>();
+ csv.WriteRecords(list);
+
+ writer.Flush();
+ stream.Position = 0;
+
+ var result = reader.ReadToEnd();
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("one,,,1");
+ expected.AppendLine("two,,,2");
+
+ Assert.Equal(expected.ToString(), result);
+ }
+ }
+
+ private class Test
+ {
+ public int Id { get; set; }
+
+ public string Name { get; set; }
+ }
+
+ private sealed class TestWithNameMap : ClassMap<Test>
+ {
+ public TestWithNameMap()
+ {
+ Map(m => m.Id);
+ Map().Name("Constant").Constant("const");
+ Map(m => m.Name);
+ }
+ }
+
+ private sealed class TestWithNoNameMap : ClassMap<Test>
+ {
+ public TestWithNoNameMap()
+ {
+ Map(m => m.Id);
+ Map().Constant("const");
+ }
+ }
+
+ private sealed class TestMapOutOfOrderWithEmptyFieldsMap : ClassMap<Test>
+ {
+ public TestMapOutOfOrderWithEmptyFieldsMap()
+ {
+ Map(m => m.Name).Index(0);
+ Map().Index(1).Constant(null);
+ Map().Index(2).Constant(string.Empty);
+ Map(m => m.Id).Index(3);
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/SanitizationTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/SanitizationTests.cs
new file mode 100644
index 0000000..1442cd5
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/SanitizationTests.cs
@@ -0,0 +1,422 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+
+namespace CsvHelper.Tests.Serializing
+{
+
+ public class SanitizationTests
+ {
+ [Fact]
+ public void WriteField_NoQuotes_OptionsNone_DoesNotSanitize()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.None,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{ch}foo", false);
+ }
+
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{ch}foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsNone_DoesNotSanitize()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.None,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_OptionsException_ThrowsException()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Exception,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ Assert.Throws<WriterException>(() => csv.WriteField($"{ch}foo", false));
+ }
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsException_ThrowsException()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Exception,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ Assert.Throws<WriterException>(() => csv.WriteField($"{config.Quote}{ch}foo{config.Quote}", false));
+ }
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_OptionsException_CharIsNotFirst_DoesNotThrowException()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Exception,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"a{ch}foo", false);
+ }
+
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"a{ch}foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsException_CharIsNotFirst_DoesNotThrowException()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Exception,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}a{ch}foo{config.Quote}", false);
+ }
+
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}a{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_OptionsStrip_StripsCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{ch}foo", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_OptionsStrip_CharIsNotFirst_DoesNotStripCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"a{ch}foo", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"a{ch}foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_MultipleChars_OptionsStrip_StripsCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{ch}{ch}{ch}foo", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_MultipleChars_OptionsStrip_CharIsNotFirst_DoesNotStripCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"a{ch}{ch}{ch}foo", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"a{ch}{ch}{ch}foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsStrip_StripsCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsStrip_CharIsNotFirst_DoesNotStripCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}a{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}a{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_MultipleChars_OptionsStrip_StripsCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}{ch}{ch}{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_MultipleChars_OptionsStripCharIsNotFirst_DoesNotStripCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Strip,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}a{ch}{ch}{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}a{ch}{ch}{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_OptionsEscape_QuotesFieldAndEscapes()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Escape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{ch}foo", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}{config.InjectionEscapeCharacter}{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_NoQuotes_OptionsEscape_CharIsNotFirst_DoesNotQuoteFieldAndEscape()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Escape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"a{ch}foo", false);
+ }
+
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"a{ch}foo"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsEscape_EscapesInsideQuotes()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Escape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}{config.InjectionEscapeCharacter}{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_Quotes_OptionsEscape_CharIsNotFirst_DoesNotEscapeInsideQuotes()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ InjectionOptions = InjectionOptions.Escape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ foreach (var ch in config.InjectionCharacters)
+ {
+ csv.WriteField($"{config.Quote}a{ch}foo{config.Quote}", false);
+ }
+ csv.Flush();
+ writer.Flush();
+
+ var expected = string.Join(config.Delimiter, config.InjectionCharacters.Select(ch => $"{config.Quote}a{ch}foo{config.Quote}"));
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ShouldQuoteTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ShouldQuoteTests.cs
new file mode 100644
index 0000000..a97d2c6
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/ShouldQuoteTests.cs
@@ -0,0 +1,187 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class ShouldQuoteTests
+ {
+ [Fact]
+ public void QuoteAllFieldsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = _ => true,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("one");
+ csv.Flush();
+
+ Assert.Equal("\"one\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void QuoteNoFieldsTest()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = _ => false,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("o\"e");
+ csv.Flush();
+
+ Assert.Equal("o\"e", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void ContainsQuoteTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField($"o{csv.Configuration.Quote}e");
+ csv.Flush();
+
+ Assert.Equal($"\"o{csv.Configuration.Quote}{csv.Configuration.Quote}e\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void StartsWithSpaceTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField(" one");
+ csv.Flush();
+
+ Assert.Equal("\" one\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void EndsWithSpaceTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("one ");
+ csv.Flush();
+
+ Assert.Equal("\"one \"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void ContainsCrTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("o\re");
+ csv.Flush();
+
+ Assert.Equal("\"o\re\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void ContainsLfTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("o\ne");
+ csv.Flush();
+
+ Assert.Equal("\"o\ne\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void ContainsCrLfTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField("o\r\ne");
+ csv.Flush();
+
+ Assert.Equal("\"o\r\ne\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void ContainsDelimiterTest()
+ {
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
+ {
+ csv.WriteField($"o{csv.Configuration.Delimiter}e");
+ csv.Flush();
+
+ Assert.Equal($"\"o{csv.Configuration.Delimiter}e\"", writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void Test1()
+ {
+ var data = new List<(int row, int column, string field)>();
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ ShouldQuote = args =>
+ {
+ data.Add((args.Row.Row, args.Row.Index, args.Field));
+
+ return ConfigurationFunctions.ShouldQuote(args);
+ },
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField("Id");
+ csv.WriteField("Name");
+ csv.NextRecord();
+
+ csv.WriteField("1");
+ csv.WriteField("one");
+ csv.NextRecord();
+
+ csv.Flush();
+ }
+
+ Assert.Equal(4, data.Count);
+
+ Assert.Equal(1, data[0].row);
+ Assert.Equal(0, data[0].column);
+ Assert.Equal("Id", data[0].field);
+
+ Assert.Equal(1, data[1].row);
+ Assert.Equal(1, data[1].column);
+ Assert.Equal("Name", data[1].field);
+
+ Assert.Equal(2, data[2].row);
+ Assert.Equal(0, data[2].column);
+ Assert.Equal("1", data[2].field);
+
+ Assert.Equal(2, data[3].row);
+ Assert.Equal(1, data[3].column);
+ Assert.Equal("one", data[3].field);
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/TrimTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/TrimTests.cs
new file mode 100644
index 0000000..836f7df
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/TrimTests.cs
@@ -0,0 +1,41 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System.Globalization;
+using System.IO;
+using System.Text;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class TrimTests
+ {
+ [Fact]
+ public void Test()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ TrimOptions = TrimOptions.Trim,
+ };
+ using (var stream = new MemoryStream())
+ using (var reader = new StreamReader(stream))
+ using (var writer = new StreamWriter(stream))
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteField(" a b c ");
+ csv.WriteField(" d e f ");
+ csv.NextRecord();
+ writer.Flush();
+ stream.Position = 0;
+
+ var expected = new TestStringBuilder(csv.Configuration.NewLine);
+ expected.AppendLine("a b c,d e f");
+
+ Assert.Equal(expected.ToString(), reader.ReadToEnd());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteBufferTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteBufferTests.cs
new file mode 100644
index 0000000..4e73fab
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteBufferTests.cs
@@ -0,0 +1,36 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using CsvHelper.Configuration;
+using Xunit;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests.Writing
+{
+
+ public class WriteBufferTests
+ {
+ [Fact]
+ public void Write_FieldThatIsLargerThenTwiceTheBuffer_Writes()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ BufferSize = 16
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ var random = new Random();
+ csv.WriteField("one");
+ csv.WriteField(new string(Enumerable.Range(0, 1000).Select(i => (char)random.Next((int)'a', (int)'z' + 1)).ToArray()));
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteCustomEscapeTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteCustomEscapeTests.cs
new file mode 100644
index 0000000..f45da08
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteCustomEscapeTests.cs
@@ -0,0 +1,63 @@
+using CsvHelper.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.Json;
+using System.Text.Json.Nodes;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+ public class WriteCustomEscapeTests
+ {
+ [Fact]
+ public void WriteField_CustomEscapeChar_ModeRFC4180_EscapesQuotesAndEscapeCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ Escape = '\\',
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ // {"json":"{\"name\":\"foo\"}"}
+ // json string -> csv field
+ // "{\"json\":\"{\\\"name\\\":\\\"foo\\\"}\"}"
+ csv.WriteField(@"{""json"":""{\""name\"":\""foo\""}""}");
+ csv.Flush();
+
+ var expected = @"""{\""json\"":\""{\\\""name\\\"":\\\""foo\\\""}\""}""";
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteField_CustomEscapeChar_ModeEscape_EscapesQuotesAndEscapeCharacter()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture)
+ {
+ HasHeaderRecord = false,
+ Escape = '\\',
+ Mode = CsvMode.Escape,
+ };
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ // {"json":"{\"name\":\"foo\"}"}
+ // json string -> csv field
+ // {\"json\":\"{\\\"name\\\":\\\"foo\\\"}\"}
+ csv.WriteField(@"{""json"":""{\""name\"":\""foo\""}""}");
+ csv.Flush();
+
+ var expected = @"{\""json\"":\""{\\\""name\\\"":\\\""foo\\\""}\""}";
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteNullTests.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteNullTests.cs
new file mode 100644
index 0000000..7d7f23f
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/Writing/WriteNullTests.cs
@@ -0,0 +1,84 @@
+using CsvHelper.Configuration;
+using System.Collections;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using Xunit;
+
+namespace CsvHelper.Tests.Writing
+{
+ public class WriteNullTests
+ {
+ [Fact]
+ public void WriteRecordsEnumerableGeneric_RecordIsNull_WritesEmptyRecord()
+ {
+ var records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one"},
+ null,
+ new Foo { Id = 2, Name = "two" },
+ };
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+ csv.Flush();
+
+ var expected = new TestStringBuilder(config.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+ expected.AppendLine(",");
+ expected.AppendLine("2,two");
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteRecordsEnumerable_RecordIsNull_WritesEmptyRecord()
+ {
+ IEnumerable records = new List<Foo>
+ {
+ new Foo { Id = 1, Name = "one"},
+ null,
+ new Foo { Id = 2, Name = "two" },
+ };
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecords(records);
+ csv.Flush();
+
+ var expected = new TestStringBuilder(config.NewLine);
+ expected.AppendLine("Id,Name");
+ expected.AppendLine("1,one");
+ expected.AppendLine("");
+ expected.AppendLine("2,two");
+
+ Assert.Equal(expected, writer.ToString());
+ }
+ }
+
+ [Fact]
+ public void WriteRecord_RecordIsNull_WritesEmptyRecord()
+ {
+ var config = new CsvConfiguration(CultureInfo.InvariantCulture);
+ using (var writer = new StringWriter())
+ using (var csv = new CsvWriter(writer, config))
+ {
+ csv.WriteRecord((Foo)null);
+ csv.Flush();
+
+ Assert.Equal(",", writer.ToString());
+ }
+ }
+
+ private class Foo
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/XunitException.cs b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/XunitException.cs
new file mode 100644
index 0000000..d209d41
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/XunitException.cs
@@ -0,0 +1,19 @@
+// Copyright 2009-2022 Josh Close
+// This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0.
+// See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0.
+// https://github.com/JoshClose/CsvHelper
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CsvHelper.Tests
+{
+ public class XUnitException : Exception
+ {
+ public XUnitException() : base() { }
+
+ public XUnitException(string message) : base(message) { }
+ }
+}
diff --git a/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/xunit.runner.json b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/xunit.runner.json
new file mode 100644
index 0000000..d4e998c
--- /dev/null
+++ b/ThirdParty/CsvHelper-master/tests/CsvHelper.Tests/xunit.runner.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://xunit.net/schema/current/xunit.runner.schema.json",
+ "parallelizeTestCollections": false
+} \ No newline at end of file
diff --git a/marching/Assets/Bundle/metadata/default_stats.csv b/marching/Assets/Bundle/metadata/default_stats.csv
index 66d44b8..a935859 100644
--- a/marching/Assets/Bundle/metadata/default_stats.csv
+++ b/marching/Assets/Bundle/metadata/default_stats.csv
@@ -1,12 +1,13 @@
-uid,name_key,icon,type
-#ĬϵĽɫԣչ,,,
-level,LEVEL,,int
-max_level,MAX_LEVEL,,int
-health,HEALTH,,int
-max_health,MAX_HEALTH,,int
-exp,EXP,,int
-max_exp,MAX_EXP,,int
-health_recover,HEALTH_RECOVER,,int
-move_speed,MOVE_SPEED,,int
-damage,DAMAGE,,int
-attack_speed,ATTACK_SPEED,,int
+uid,name_key,desc_key,icon,type
+#ĬϵĽɫԣչ,,,,
+level,LEVEL,LEVEL_DESC,,int
+max_level,MAX_LEVEL,,,int
+health,HEALTH,,,int
+max_health,MAX_HEALTH,,,int
+exp,EXP,,,int
+max_exp,MAX_EXP,,,int
+health_recover,HEALTH_RECOVER,,,int
+move_speed,MOVE_SPEED,,,int
+damage,DAMAGE,,,int
+attack_speed,ATTACK_SPEED,,,int
+revive_max_count,,,,
diff --git a/marching/Assets/Scenes/Test.unity b/marching/Assets/Scenes/Test.unity
index 6474326..5ecba8b 100644
--- a/marching/Assets/Scenes/Test.unity
+++ b/marching/Assets/Scenes/Test.unity
@@ -9992,6 +9992,50 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1525966912}
m_CullTransparentMesh: 1
+--- !u!1 &1552119908
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1552119910}
+ - component: {fileID: 1552119909}
+ m_Layer: 0
+ m_Name: GameObject
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1552119909
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1552119908}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5e9d405b1bd5e604db9cc8638d465aaf, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!4 &1552119910
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1552119908}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: -14.039074, y: 3.1774442, z: -0.025952239}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 68
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1566097397
GameObject:
m_ObjectHideFlags: 0
diff --git a/marching/Assets/Scripts/Buffs/Buff.cs b/marching/Assets/Scripts/Buffs/Buff.cs
index 2320176..430fa70 100644
--- a/marching/Assets/Scripts/Buffs/Buff.cs
+++ b/marching/Assets/Scripts/Buffs/Buff.cs
@@ -1,6 +1,8 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+using WK;
+using WK.Data;
/// <summary>
/// Buffṹ
@@ -8,7 +10,7 @@ using UnityEngine;
public abstract class Buff
{
// Ԫ
- public BuffDef metadata;
+ public BuffMetadata metadata;
// buffЧ
public BuffEfectorBase effector;
diff --git a/marching/Assets/Scripts/Buffs/BuffDef.cs b/marching/Assets/Scripts/Buffs/BuffDef.cs
deleted file mode 100644
index 835589b..0000000
--- a/marching/Assets/Scripts/Buffs/BuffDef.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class BuffDef
-{
-
- public string uid;
-
- public string name_key;
-
- public string icon;
-
-}
diff --git a/marching/Assets/Scripts/Buffs/BuffMetadata.cs b/marching/Assets/Scripts/Buffs/BuffMetadata.cs
new file mode 100644
index 0000000..de7c391
--- /dev/null
+++ b/marching/Assets/Scripts/Buffs/BuffMetadata.cs
@@ -0,0 +1,22 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace WK.Data
+{
+
+ public class BuffMetadata
+ {
+
+ public string uid;
+
+ public string name_key;
+
+ public string icon;
+
+ //
+ public string extra_data;
+
+ }
+
+}
diff --git a/marching/Assets/Scripts/Buffs/BuffDef.cs.meta b/marching/Assets/Scripts/Buffs/BuffMetadata.cs.meta
index 2fbd7ff..2fbd7ff 100644
--- a/marching/Assets/Scripts/Buffs/BuffDef.cs.meta
+++ b/marching/Assets/Scripts/Buffs/BuffMetadata.cs.meta
diff --git a/marching/Assets/Scripts/Data.meta b/marching/Assets/Scripts/Data.meta
new file mode 100644
index 0000000..3622fa8
--- /dev/null
+++ b/marching/Assets/Scripts/Data.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 9dac4e9417c4a4343926c0fd48551b07
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/Scripts/Data/DataManager.cs b/marching/Assets/Scripts/Data/DataManager.cs
new file mode 100644
index 0000000..e56c80b
--- /dev/null
+++ b/marching/Assets/Scripts/Data/DataManager.cs
@@ -0,0 +1,37 @@
+using System.Collections;
+using System.Collections.Generic;
+using Unity.VisualScripting;
+using UnityEngine;
+
+namespace WK.Data
+{
+
+ public class DataManager : Singleton<DataManager>
+ {
+
+ private Dictionary<string/*uid*/, CharacterStatsMetadata> m_CharacterStatsMetadata;
+ private Dictionary<string/*uid*/, BuffMetadata> m_BuffMetadata;
+
+ public CharacterStatsMetadata GetCharacterStats(string uid)
+ {
+ CharacterStatsMetadata metadata;
+ if(m_CharacterStatsMetadata.TryGetValue(uid, out metadata))
+ {
+ return metadata;
+ }
+ return null;
+ }
+
+ public BuffMetadata GetBuffMetadata(string uid)
+ {
+ BuffMetadata metadata;
+ if(m_BuffMetadata.TryGetValue(uid, out metadata))
+ {
+ return metadata;
+ }
+ return null;
+ }
+
+ }
+
+} \ No newline at end of file
diff --git a/marching/Assets/Scripts/Data/DataManager.cs.meta b/marching/Assets/Scripts/Data/DataManager.cs.meta
new file mode 100644
index 0000000..e2f87df
--- /dev/null
+++ b/marching/Assets/Scripts/Data/DataManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 426d62970250f0f41b68370ced13105b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/Scripts/Managers/ResourceManager.cs b/marching/Assets/Scripts/Managers/ResourceManager.cs
new file mode 100644
index 0000000..4b318ca
--- /dev/null
+++ b/marching/Assets/Scripts/Managers/ResourceManager.cs
@@ -0,0 +1,32 @@
+using System.Collections;
+using System.Collections.Generic;
+#if UNITY_EDITOR
+using UnityEditor;
+#endif
+using UnityEngine;
+
+namespace WK
+{
+
+ public class ResourceManager : Singleton<ResourceManager>
+ {
+
+ // ԴĿ¼Assets/Bundle/ܻѲԴƶstreamingAssetsĿ¼
+ public const string kAssetRoot = "Assets/Bundle/";
+
+ public T LoadAsset<T>(string relativePath) where T : UnityEngine.Object
+ {
+#if UNITY_EDITOR
+ string path = kAssetRoot + relativePath;
+ T obj = AssetDatabase.LoadAssetAtPath(path, typeof(T)) as T;
+ return obj;
+#else
+ return null ;
+#endif
+ }
+
+
+
+ }
+
+}
diff --git a/marching/Assets/Scripts/Managers/ResourceManager.cs.meta b/marching/Assets/Scripts/Managers/ResourceManager.cs.meta
new file mode 100644
index 0000000..b3c985b
--- /dev/null
+++ b/marching/Assets/Scripts/Managers/ResourceManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 928e39b9448c1c74caa349620602617b
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/Scripts/Physics/PhysicsManager.cs b/marching/Assets/Scripts/Physics/PhysicsManager.cs
index 0225443..279ebbb 100644
--- a/marching/Assets/Scripts/Physics/PhysicsManager.cs
+++ b/marching/Assets/Scripts/Physics/PhysicsManager.cs
@@ -8,7 +8,6 @@ public enum ColliderType
{
Collider,
Hurtbox,
- //Hitbox,
}
public partial class PhysicsManager : Singleton<PhysicsManager>
diff --git a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs
index 22c2f4e..d5fd913 100644
--- a/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs
+++ b/marching/Assets/Scripts/Physics/PhysicsManager_CollisionDetection.cs
@@ -1,7 +1,6 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
-using static UnityEditor.Rendering.CameraUI;
/// <summary>
/// ײ
diff --git a/marching/Assets/Scripts/Stats/CharacterStatsBase.cs b/marching/Assets/Scripts/Stats/CharacterStatsBase.cs
index a2e5fe2..b4869cb 100644
--- a/marching/Assets/Scripts/Stats/CharacterStatsBase.cs
+++ b/marching/Assets/Scripts/Stats/CharacterStatsBase.cs
@@ -1,16 +1,58 @@
using System.Collections;
using System.Collections.Generic;
+using System.Runtime.InteropServices;
using UnityEngine;
+using WK.Data;
-/// <summary>
-/// ɫ
-/// </summary>
-public abstract class CharacterStatsBase
+namespace WK
{
+
+ [System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
+ public struct CharacterStatsValue
+ {
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public int i;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public float f;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public bool boolean;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public char c;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public Vector2 v2;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public Vector3 v3;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public Vector4 v4;
+ [System.Runtime.InteropServices.FieldOffset(0)]
+ public Color color;
+ }
+
+
/// <summary>
- /// Ψһʶ
+ /// ʱɫ
/// </summary>
- public string UID;
+ public abstract class CharacterStats
+ {
+
+ /// <summary>
+ ///
+ /// </summary>
+ public CharacterStatsMetadata metadata;
+
+ /// <summary>
+ /// ǰֵ
+ /// </summary>
+ public CharacterStatsValue value;
+
+ public string uid
+ {
+ get
+ {
+ return metadata.uid;
+ }
+ }
+ }
}
diff --git a/marching/Assets/Scripts/Stats/CharacterStatsDef.cs b/marching/Assets/Scripts/Stats/CharacterStatsDef.cs
deleted file mode 100644
index 87eeecd..0000000
--- a/marching/Assets/Scripts/Stats/CharacterStatsDef.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-public class CharacterStatsDef
-{
- public string uid;
-
- public string name_key;
-
- public int type;
-
-}
diff --git a/marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs b/marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs
new file mode 100644
index 0000000..3b0b13b
--- /dev/null
+++ b/marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace WK.Data
+{
+
+ /// <summary>
+ /// ɫԪ
+ /// </summary>
+ public class CharacterStatsMetadata
+ {
+ public string uid;
+
+ public string name_key;
+
+ public int type;
+
+ //
+ public string extra_data;
+ }
+
+}
diff --git a/marching/Assets/Scripts/Stats/CharacterStatsDef.cs.meta b/marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs.meta
index a8d9a08..a8d9a08 100644
--- a/marching/Assets/Scripts/Stats/CharacterStatsDef.cs.meta
+++ b/marching/Assets/Scripts/Stats/CharacterStatsMetadata.cs.meta
diff --git a/marching/Assets/Scripts/Tests.meta b/marching/Assets/Scripts/Tests.meta
new file mode 100644
index 0000000..3219e35
--- /dev/null
+++ b/marching/Assets/Scripts/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: f6e9b28f26f6aee49be2a1c0676abaf1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/Scripts/Tests/TestCSV.cs b/marching/Assets/Scripts/Tests/TestCSV.cs
new file mode 100644
index 0000000..068d235
--- /dev/null
+++ b/marching/Assets/Scripts/Tests/TestCSV.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Resources;
+using System.Text;
+using UnityEngine;
+using yutokun;
+
+public class TestCSV : MonoBehaviour
+{
+ #region 序列化
+
+ #endregion
+
+ #region 公共字段
+
+ #endregion
+
+ #region 私有字段
+
+ #endregion
+
+ private void OnEnable()
+ {
+ // 私有字段赋值
+
+ // 公共字段赋值
+
+ // 初始化
+
+ TextAsset text = WK.ResourceManager.Instance.LoadAsset<TextAsset>("metadata/default_stats.csv");
+
+ var sheet = CSVParser.LoadFromString(text.text);
+
+ var styled = new StringBuilder();
+ foreach (var row in sheet)
+ {
+ styled.Append("| ");
+
+ if (row[0][0] == '#')
+ continue;
+
+ foreach (var cell in row)
+ {
+ styled.Append(cell);
+ styled.Append(" | ");
+ }
+
+ styled.AppendLine();
+ }
+
+ Debug.Log(styled.ToString()); // Unity
+ Console.WriteLine(styled.ToString()); // C#
+
+ }
+
+}
diff --git a/marching/Assets/Scripts/Tests/TestCSV.cs.meta b/marching/Assets/Scripts/Tests/TestCSV.cs.meta
new file mode 100644
index 0000000..48e6de1
--- /dev/null
+++ b/marching/Assets/Scripts/Tests/TestCSV.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5e9d405b1bd5e604db9cc8638d465aaf
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/Scripts/Unit/Characters/CharacterInfo.cs b/marching/Assets/Scripts/Unit/Characters/CharacterInfo.cs
index 4a39895..950b7ae 100644
--- a/marching/Assets/Scripts/Unit/Characters/CharacterInfo.cs
+++ b/marching/Assets/Scripts/Unit/Characters/CharacterInfo.cs
@@ -3,35 +3,92 @@ using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
+using WK.Data;
+using WK;
-public class CharacterInfo
+namespace WK
{
- /// <summary>
- /// ɫ
- /// </summary>
- private List<CharacterStatsBase> m_Stats;
+ public class CharacterStatsCollection
+ {
+
+ }
+
+ public class CharacterBuffsCollection
+ {
+
+ }
+
+ public class CharacterPerksCollection
+ {
+
+ }
/// <summary>
- /// ɫǰbuff
- /// </summary>
- private List<Buff> m_Buffs;
-
- /// <summary>
- /// ɫǰб
+ /// ɫǰ״̬
/// </summary>
- private List<PerkBase> m_Perks;
-
- public CharacterStatsBase GetStats(string statsUID)
+ public class CharacterInfo
{
- for(int i = 0; i < m_Stats.Count; ++i)
+
+ /// <summary>
+ /// ɫǰ
+ /// </summary>
+ private List<CharacterStats> m_Stats;
+
+ public CharacterStatsCollection stats { get { return m_AllStats; } }
+ private CharacterStatsCollection m_AllStats;
+
+ /// <summary>
+ /// ɫǰbuff
+ /// </summary>
+ private List<Buff> m_Buffs;
+
+ /// <summary>
+ /// ɫǰб
+ /// </summary>
+ private List<PerkBase> m_Perks;
+
+ public CharacterStats this[string statsUID]
{
- if (m_Stats[i].UID == statsUID)
+ get
{
- return m_Stats[i];
+ if (m_Stats == null)
+ {
+ return null;
+ }
+ return GetStats(statsUID);
}
}
- return null;
+
+ public CharacterStats GetStats(string statsUID)
+ {
+ for (int i = 0; i < m_Stats.Count; ++i)
+ {
+ if (m_Stats[i].uid == statsUID)
+ {
+ return m_Stats[i];
+ }
+ }
+ return null;
+ }
+
+ public bool HasStats(string statsUID)
+ {
+ for (int i = 0; i < m_Stats.Count; ++i)
+ {
+ if (m_Stats[i].uid == statsUID)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public bool HasBuff(string buffUID)
+ {
+ return false;
+ }
+
}
}
diff --git a/marching/Assets/StreamingAssets/languages.meta b/marching/Assets/StreamingAssets/languages.meta
new file mode 100644
index 0000000..07fb091
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3f821e76af7ad0d4eae16d3f24ea1b88
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/de.csv b/marching/Assets/StreamingAssets/languages/de.csv
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/de.csv
diff --git a/marching/Assets/StreamingAssets/languages/de.csv.meta b/marching/Assets/StreamingAssets/languages/de.csv.meta
new file mode 100644
index 0000000..d4b02ae
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/de.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 91f0a160fca2b8e47ba82b3fa2f7e8d3
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/en.csv b/marching/Assets/StreamingAssets/languages/en.csv
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/en.csv
diff --git a/marching/Assets/StreamingAssets/languages/en.csv.meta b/marching/Assets/StreamingAssets/languages/en.csv.meta
new file mode 100644
index 0000000..afdfcfe
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/en.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: b62c767356e24514a94c9604a4e7a208
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/fr.csv b/marching/Assets/StreamingAssets/languages/fr.csv
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/fr.csv
diff --git a/marching/Assets/StreamingAssets/languages/fr.csv.meta b/marching/Assets/StreamingAssets/languages/fr.csv.meta
new file mode 100644
index 0000000..f4a5e31
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/fr.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4f4dd986cc6bfb649b9986bb3766be56
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/jp.csv b/marching/Assets/StreamingAssets/languages/jp.csv
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/jp.csv
diff --git a/marching/Assets/StreamingAssets/languages/jp.csv.meta b/marching/Assets/StreamingAssets/languages/jp.csv.meta
new file mode 100644
index 0000000..a262ae2
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/jp.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f65f57e009a824a4784ea5273c02be09
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/kr.csv b/marching/Assets/StreamingAssets/languages/kr.csv
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/kr.csv
diff --git a/marching/Assets/StreamingAssets/languages/kr.csv.meta b/marching/Assets/StreamingAssets/languages/kr.csv.meta
new file mode 100644
index 0000000..0b40d31
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/kr.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: a3e9c19a47f073343a82326effdb3faf
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/ru.csv b/marching/Assets/StreamingAssets/languages/ru.csv
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/ru.csv
diff --git a/marching/Assets/StreamingAssets/languages/ru.csv.meta b/marching/Assets/StreamingAssets/languages/ru.csv.meta
new file mode 100644
index 0000000..35459c6
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/ru.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 46d1df3639a540a49ba9ea723db585bc
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/languages/zh_cn.csv b/marching/Assets/StreamingAssets/languages/zh_cn.csv
new file mode 100644
index 0000000..a12e39e
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/zh_cn.csv
@@ -0,0 +1,2 @@
+key value
+LEVEL ȼ
diff --git a/marching/Assets/StreamingAssets/languages/zh_cn.csv.meta b/marching/Assets/StreamingAssets/languages/zh_cn.csv.meta
new file mode 100644
index 0000000..d4b77c6
--- /dev/null
+++ b/marching/Assets/StreamingAssets/languages/zh_cn.csv.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 11eb447a92983664ea690f86e938e3a1
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/StreamingAssets/setting.json b/marching/Assets/StreamingAssets/setting.json
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/marching/Assets/StreamingAssets/setting.json
diff --git a/marching/Assets/StreamingAssets/setting.json.meta b/marching/Assets/StreamingAssets/setting.json.meta
new file mode 100644
index 0000000..57266fe
--- /dev/null
+++ b/marching/Assets/StreamingAssets/setting.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: f27d86eeddc5935418f70ae650c527bc
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser.meta b/marching/Assets/ThirdParty/CSV-Parser.meta
new file mode 100644
index 0000000..c49c672
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4f2fe36487065064e821650e6429d9d9
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/.gitignore b/marching/Assets/ThirdParty/CSV-Parser/.gitignore
new file mode 100644
index 0000000..19f0983
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/.gitignore
@@ -0,0 +1,15 @@
+obj/
+bin/
+.vs/
+.vscode/
+.idea/
+*.DotSettings
+*.user
+
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db \ No newline at end of file
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.meta
new file mode 100644
index 0000000..1b9c4db
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 85cabb48324945548a8b18124ed3918a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln
new file mode 100644
index 0000000..9e25d75
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CSV Parser", "CSV Parser\CSV Parser.csproj", "{BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{C7E7ACFD-66DB-4296-8536-4418728F3A5D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BB50E0DE-75A1-4E9A-AEFA-A823A434EFF3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C7E7ACFD-66DB-4296-8536-4418728F3A5D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta
new file mode 100644
index 0000000..3f5d3cf
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser.sln.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2d428b7f5708308489ff910a5977b13c
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj
new file mode 100644
index 0000000..bf48c73
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj
@@ -0,0 +1,13 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>net6.0</TargetFramework>
+ <RootNamespace>CSV_Parser</RootNamespace>
+ <LangVersion>7.3</LangVersion>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="System.Memory" Version="4.5.4" />
+ </ItemGroup>
+
+</Project>
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta
new file mode 100644
index 0000000..da4f4a8
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/CSV Parser.csproj.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: c9cc963a877064748a9e6fe4397c807f
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta
new file mode 100644
index 0000000..8e65917
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3e17c685928714443973ed558020bdee
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs
new file mode 100644
index 0000000..c886c19
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs
@@ -0,0 +1,181 @@
+/*
+ * CSV Parser for C#.
+ *
+ * These codes are licensed under CC0.
+ * https://github.com/yutokun/CSV-Parser
+ */
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.IO;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+
+namespace yutokun
+{
+ public static class CSVParser
+ {
+ /// <summary>
+ /// Load CSV data from specified path.
+ /// </summary>
+ /// <param name="path">CSV file path.</param>
+ /// <param name="delimiter">Delimiter.</param>
+ /// <param name="encoding">Type of text encoding. (default UTF-8)</param>
+ /// <returns>Nested list that CSV parsed.</returns>
+ public static List<List<string>> LoadFromPath(string path, Delimiter delimiter = Delimiter.Auto, Encoding encoding = null)
+ {
+ encoding = encoding ?? Encoding.UTF8;
+
+ if (delimiter == Delimiter.Auto)
+ {
+ delimiter = EstimateDelimiter(path);
+ }
+
+ var data = File.ReadAllText(path, encoding);
+ return Parse(data, delimiter);
+ }
+
+ /// <summary>
+ /// Load CSV data asynchronously from specified path.
+ /// </summary>
+ /// <param name="path">CSV file path.</param>
+ /// <param name="delimiter">Delimiter.</param>
+ /// <param name="encoding">Type of text encoding. (default UTF-8)</param>
+ /// <returns>Nested list that CSV parsed.</returns>
+ public static async Task<List<List<string>>> LoadFromPathAsync(string path, Delimiter delimiter = Delimiter.Auto, Encoding encoding = null)
+ {
+ encoding = encoding ?? Encoding.UTF8;
+
+ if (delimiter == Delimiter.Auto)
+ {
+ delimiter = EstimateDelimiter(path);
+ }
+
+ using (var reader = new StreamReader(path, encoding))
+ {
+ var data = await reader.ReadToEndAsync();
+ return Parse(data, delimiter);
+ }
+ }
+
+ static Delimiter EstimateDelimiter(string path)
+ {
+ var extension = Path.GetExtension(path);
+ if (extension.Equals(".csv", StringComparison.OrdinalIgnoreCase))
+ {
+ return Delimiter.Comma;
+ }
+
+ if (extension.Equals(".tsv", StringComparison.OrdinalIgnoreCase))
+ {
+ return Delimiter.Tab;
+ }
+
+ throw new Exception($"Delimiter estimation failed. Unknown Extension: {extension}");
+ }
+
+ /// <summary>
+ /// Load CSV data from string.
+ /// </summary>
+ /// <param name="data">CSV string</param>
+ /// <param name="delimiter">Delimiter.</param>
+ /// <returns>Nested list that CSV parsed.</returns>
+ public static List<List<string>> LoadFromString(string data, Delimiter delimiter = Delimiter.Comma)
+ {
+ if (delimiter == Delimiter.Auto) throw new InvalidEnumArgumentException("Delimiter estimation from string is not supported.");
+ return Parse(data, delimiter);
+ }
+
+ static List<List<string>> Parse(string data, Delimiter delimiter)
+ {
+ ConvertToCrlf(ref data);
+
+ var sheet = new List<List<string>>();
+ var row = new List<string>();
+ var cell = new StringBuilder();
+ var insideQuoteCell = false;
+ var start = 0;
+
+ var delimiterSpan = delimiter.ToChar().ToString().AsSpan();
+ var crlfSpan = "\r\n".AsSpan();
+ var oneDoubleQuotSpan = "\"".AsSpan();
+ var twoDoubleQuotSpan = "\"\"".AsSpan();
+
+ while (start < data.Length)
+ {
+ var length = start <= data.Length - 2 ? 2 : 1;
+ var span = data.AsSpan(start, length);
+
+ if (span.StartsWith(delimiterSpan))
+ {
+ if (insideQuoteCell)
+ {
+ cell.Append(delimiter.ToChar());
+ }
+ else
+ {
+ AddCell(row, cell);
+ }
+
+ start += 1;
+ }
+ else if (span.StartsWith(crlfSpan))
+ {
+ if (insideQuoteCell)
+ {
+ cell.Append("\r\n");
+ }
+ else
+ {
+ AddCell(row, cell);
+ AddRow(sheet, ref row);
+ }
+
+ start += 2;
+ }
+ else if (span.StartsWith(twoDoubleQuotSpan))
+ {
+ cell.Append("\"");
+ start += 2;
+ }
+ else if (span.StartsWith(oneDoubleQuotSpan))
+ {
+ insideQuoteCell = !insideQuoteCell;
+ start += 1;
+ }
+ else
+ {
+ cell.Append(span[0]);
+ start += 1;
+ }
+ }
+
+ if (row.Count > 0 || cell.Length > 0)
+ {
+ AddCell(row, cell);
+ AddRow(sheet, ref row);
+ }
+
+ return sheet;
+ }
+
+ static void AddCell(List<string> row, StringBuilder cell)
+ {
+ row.Add(cell.ToString());
+ cell.Length = 0; // Old C#.
+ }
+
+ static void AddRow(List<List<string>> sheet, ref List<string> row)
+ {
+ sheet.Add(row);
+ row = new List<string>();
+ }
+
+ static void ConvertToCrlf(ref string data)
+ {
+ data = Regex.Replace(data, @"\r\n|\r|\n", "\r\n");
+ }
+ }
+}
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta
new file mode 100644
index 0000000..fb3cd58
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/CSVParser.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1dcf43e5bd8e0204580fc6899a086b00
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs
new file mode 100644
index 0000000..b32dcc3
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs
@@ -0,0 +1,9 @@
+namespace yutokun
+{
+ public enum Delimiter
+ {
+ Auto,
+ Comma,
+ Tab
+ }
+}
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta
new file mode 100644
index 0000000..8f7cf00
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/Delimiter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e0e2bb27fdbb714468ca87aeaf607331
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs
new file mode 100644
index 0000000..a38371d
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs
@@ -0,0 +1,24 @@
+using System;
+using System.ComponentModel;
+
+namespace yutokun
+{
+ public static class DelimiterExtensions
+ {
+ public static char ToChar(this Delimiter delimiter)
+ {
+ // C# 7.3: Unity 2018.2 - 2020.1 Compatible
+ switch (delimiter)
+ {
+ case Delimiter.Auto:
+ throw new InvalidEnumArgumentException("Could not return char of Delimiter.Auto.");
+ case Delimiter.Comma:
+ return ',';
+ case Delimiter.Tab:
+ return '\t';
+ default:
+ throw new ArgumentOutOfRangeException(nameof(delimiter), delimiter, null);
+ }
+ }
+ }
+}
diff --git a/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta
new file mode 100644
index 0000000..d98b86d
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/CSV Parser/src/DelimiterExtensions.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b9ab5b183dd311459e9893fe735bea6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/LICENSE b/marching/Assets/ThirdParty/CSV-Parser/LICENSE
new file mode 100644
index 0000000..8a9b3dc
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/LICENSE
@@ -0,0 +1,35 @@
+For unique parts of the repository
+
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org>
+
+--------------------------------------------------------------------------------------------
+
+For .NET Runtimes (included in the .unitypackage for old Unity)
+
+The MIT License
+Copyright (c) .NET Foundation and Contributors
+
+https://github.com/dotnet/runtime/blob/main/LICENSE.TXT \ No newline at end of file
diff --git a/marching/Assets/ThirdParty/CSV-Parser/LICENSE.meta b/marching/Assets/ThirdParty/CSV-Parser/LICENSE.meta
new file mode 100644
index 0000000..1df5cd4
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/LICENSE.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e44599b63f0a77d408c64fcf15e388e1
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/README.md b/marching/Assets/ThirdParty/CSV-Parser/README.md
new file mode 100644
index 0000000..c87aaef
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/README.md
@@ -0,0 +1,102 @@
+# CSV Parser for C#
+
+[![Test](https://github.com/yutokun/CSV-Parser/actions/workflows/test.yml/badge.svg)](https://github.com/yutokun/CSV-Parser/actions/workflows/test.yml)
+
+CSV Parser with CC0 License.
+
+Best for:
+
+- [Unity](https://unity3d.com/) projects that requires cross-platform CSV parser. (maybe works on any platform supported by Unity)
+- Commercial products that you could not display the license.
+
+## Prerequisites
+
+| Environment | Prerequisites |
+| ----------------------- | ------------------------------------------------------------------------- |
+| Unity 2019.2 or later | None |
+| Unity 2019.1 or earlier | .NET 4.x Equivalent |
+| .NET Project | [System.Memory](https://www.nuget.org/packages/System.Memory/) from NuGet |
+
+## Download
+
+Download zip or unitypackage from [**Releases**](https://github.com/yutokun/CSV-Parser/releases).
+
+## Usage
+
+### Methods
+
+This returns CSV data as `List<List<string>>`.
+
+```c#
+CSVParser.LoadFromString(string data)
+```
+
+or
+
+```c#
+CSVParser.LoadFromPath(string path, Encoding encoding = null)
+```
+
+### Examples
+
+```c#
+var sheet = CSVParser.LoadFromString(csvString);
+
+var styled = new StringBuilder();
+foreach (var row in sheet)
+{
+ styled.Append("| ");
+
+ foreach (var cell in row)
+ {
+ styled.Append(cell);
+ styled.Append(" | ");
+ }
+
+ styled.AppendLine();
+}
+
+Debug.Log(styled.ToString()); // Unity
+Console.WriteLine(styled.ToString()); // C#
+```
+
+## Specs
+
+Compliant with [RFC 4180](http://www.ietf.org/rfc/rfc4180.txt).
+
+- Correctly parse new lines, commas, quotation marks inside cell.
+- Escaped double quotes.
+- Some encoding types. (default UTF-8)
+
+## Beta
+
+- Tab delimiter support
+
+- Async loading
+
+## Development
+
+The repository contains multiple types of newline code. Run `git config core.autocrlf false` in your local repository.
+
+## Why this repo has multiple Unity Examples?
+
+One of the reasons is to check operation in different Unity versions. Another one is to build .unitypackage with CI.
+
+Unity changes a lot between their Tech Streams. It leads different requisites / dependency to the parser. Affected changes below.
+
+| Versions | Difference |
+| ----------------- | ---------------------------------------------- |
+| 2019.1 and 2019.2 | Has Scripting Runtime Version selector or not. |
+| 2021.1 and 2021.2 | Requires additional DLLs or not. |
+
+## License
+
+### Unique part of the repository
+
+[CC0](https://creativecommons.org/publicdomain/zero/1.0/) or [Public Domain](LICENSE)
+
+### .NET Runtimes (included in the .unitypackage for old Unity)
+
+[The MIT License](https://github.com/dotnet/runtime/blob/main/LICENSE.TXT)
+
+Copyright (c) .NET Foundation and Contributors
diff --git a/marching/Assets/ThirdParty/CSV-Parser/README.md.meta b/marching/Assets/ThirdParty/CSV-Parser/README.md.meta
new file mode 100644
index 0000000..97d3fa3
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/README.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 369bbbb3341b6ec4583dce723dc805f4
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/RELEASE.md b/marching/Assets/ThirdParty/CSV-Parser/RELEASE.md
new file mode 100644
index 0000000..99ec2e9
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/RELEASE.md
@@ -0,0 +1,14 @@
+# Change
+
+- Updated project to .NET 6. It because deprecation of .NET 5 by GitHub Actions.
+ - CSV Parser itself has same prerequisites as before.
+
+# Fix
+
+- Fixed a bug that last cell will be ignored when single cell rows not ending with CRLF. (Thank you so much @gmichaudAniki !)
+
+# Misc. Changes
+
+- Fixed some errors in README.
+
+- Updated CI to compliant with Node.js 16. \ No newline at end of file
diff --git a/marching/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta b/marching/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta
new file mode 100644
index 0000000..cc47df1
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/RELEASE.md.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: baea5598d0dce0441a1b60a3364f3cc7
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/Tests.meta b/marching/Assets/ThirdParty/CSV-Parser/Tests.meta
new file mode 100644
index 0000000..c219211
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/Tests.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 229bb474319e02440b7fde15814d354e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/Unity Examples.meta b/marching/Assets/ThirdParty/CSV-Parser/Unity Examples.meta
new file mode 100644
index 0000000..eb2f7be
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/Unity Examples.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6e45f679bb3e6f54a8ae2adea95ddc1e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/marching/Assets/ThirdParty/CSV-Parser/global.json b/marching/Assets/ThirdParty/CSV-Parser/global.json
new file mode 100644
index 0000000..1bcf6c0
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/global.json
@@ -0,0 +1,7 @@
+{
+ "sdk": {
+ "version": "6.0.0",
+ "rollForward": "latestMinor",
+ "allowPrerelease": false
+ }
+} \ No newline at end of file
diff --git a/marching/Assets/ThirdParty/CSV-Parser/global.json.meta b/marching/Assets/ThirdParty/CSV-Parser/global.json.meta
new file mode 100644
index 0000000..b2d9917
--- /dev/null
+++ b/marching/Assets/ThirdParty/CSV-Parser/global.json.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: d4150b58aa163dc4d8a2aa3241ae51ea
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant: