diff --git a/.gitignore b/.gitignore
index b31a349ad..e878845f5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -187,3 +187,7 @@ temp/gh-pages
/.fsdocs
/tmp/watch
/output
+/src/Plotly.NET.ImageExport/.local-chromium
+/src/Plotly.NET.ImageExport/testrenders
+/src/Plotly.NET.Interactive/.local-chromium/
+/docs/.local-chromium/
diff --git a/Plotly.NET.sln b/Plotly.NET.sln
index da7661dcc..9568ab057 100644
--- a/Plotly.NET.sln
+++ b/Plotly.NET.sln
@@ -51,6 +51,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{60FB82C0-F472-494E-BCF7-7B3C54212406}"
ProjectSection(SolutionItems) = preProject
docs\0_0_basics.fsx = docs\0_0_basics.fsx
+ docs\0_1_image-export.fsx = docs\0_1_image-export.fsx
docs\1_0_axis-styling.fsx = docs\1_0_axis-styling.fsx
docs\1_1_errorbars.fsx = docs\1_1_errorbars.fsx
docs\1_2_multiple-charts.fsx = docs\1_2_multiple-charts.fsx
@@ -102,6 +103,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "img", "img", "{CDB973F2-0F6
docs\img\logo.png = docs\img\logo.png
EndProjectSection
EndProject
+Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Plotly.NET.ImageExport", "src\Plotly.NET.ImageExport\Plotly.NET.ImageExport.fsproj", "{6CFC629E-1A0C-4EF3-8495-BA00A356A381}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -127,6 +130,12 @@ Global
{0F135E3B-B0E1-42A9-B180-18C0221DC7B8}.Dotnet|Any CPU.Build.0 = Debug|Any CPU
{0F135E3B-B0E1-42A9-B180-18C0221DC7B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F135E3B-B0E1-42A9-B180-18C0221DC7B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6CFC629E-1A0C-4EF3-8495-BA00A356A381}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6CFC629E-1A0C-4EF3-8495-BA00A356A381}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6CFC629E-1A0C-4EF3-8495-BA00A356A381}.Dotnet|Any CPU.ActiveCfg = Debug|Any CPU
+ {6CFC629E-1A0C-4EF3-8495-BA00A356A381}.Dotnet|Any CPU.Build.0 = Debug|Any CPU
+ {6CFC629E-1A0C-4EF3-8495-BA00A356A381}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6CFC629E-1A0C-4EF3-8495-BA00A356A381}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/build.fsx.lock b/build.fsx.lock
index cfe87901e..73316be79 100644
--- a/build.fsx.lock
+++ b/build.fsx.lock
@@ -144,11 +144,11 @@ NUGET
FSharp.Core (>= 4.7.2)
FParsec (1.1.1)
FSharp.Core (>= 4.3.4)
- FSharp.Compiler.Service (39.0)
- FSharp.Core (5.0.1)
- Microsoft.Build.Framework (>= 16.6)
- Microsoft.Build.Tasks.Core (>= 16.6)
- Microsoft.Build.Utilities.Core (>= 16.6)
+ FSharp.Compiler.Service (40.0)
+ FSharp.Core (5.0.2)
+ Microsoft.Build.Framework (>= 16.9)
+ Microsoft.Build.Tasks.Core (>= 16.9)
+ Microsoft.Build.Utilities.Core (>= 16.9)
System.Buffers (>= 4.5.1)
System.Collections.Immutable (>= 5.0)
System.Diagnostics.Process (>= 4.3)
@@ -173,7 +173,7 @@ NUGET
FSharp.Control.Reactive (5.0.2)
FSharp.Core (>= 4.7.2)
System.Reactive (>= 5.0)
- FSharp.Core (5.0.1)
+ FSharp.Core (5.0.2)
Microsoft.Build (16.10)
Microsoft.Build.Framework (16.10)
System.Security.Permissions (>= 4.7)
@@ -213,27 +213,27 @@ NUGET
System.Security.AccessControl (>= 5.0)
System.Security.Principal.Windows (>= 5.0)
Mono.Posix.NETStandard (1.0)
- MSBuild.StructuredLogger (2.1.500)
+ MSBuild.StructuredLogger (2.1.507)
Microsoft.Build (>= 16.4)
Microsoft.Build.Framework (>= 16.4)
Microsoft.Build.Tasks.Core (>= 16.4)
Microsoft.Build.Utilities.Core (>= 16.4)
Newtonsoft.Json (13.0.1)
- NuGet.Common (5.9.1)
- NuGet.Frameworks (>= 5.9.1)
- NuGet.Configuration (5.9.1)
- NuGet.Common (>= 5.9.1)
+ NuGet.Common (5.10)
+ NuGet.Frameworks (>= 5.10)
+ NuGet.Configuration (5.10)
+ NuGet.Common (>= 5.10)
System.Security.Cryptography.ProtectedData (>= 4.4)
- NuGet.Frameworks (5.9.1)
- NuGet.Packaging (5.9.1)
+ NuGet.Frameworks (5.10)
+ NuGet.Packaging (5.10)
Newtonsoft.Json (>= 9.0.1)
- NuGet.Configuration (>= 5.9.1)
- NuGet.Versioning (>= 5.9.1)
+ NuGet.Configuration (>= 5.10)
+ NuGet.Versioning (>= 5.10)
System.Security.Cryptography.Cng (>= 5.0)
System.Security.Cryptography.Pkcs (>= 5.0)
- NuGet.Protocol (5.9.1)
- NuGet.Packaging (>= 5.9.1)
- NuGet.Versioning (5.9.1)
+ NuGet.Protocol (5.10)
+ NuGet.Packaging (>= 5.10)
+ NuGet.Versioning (5.10)
Octokit (0.50)
runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3)
diff --git a/docs/0_1_image-export.fsx b/docs/0_1_image-export.fsx
new file mode 100644
index 000000000..6df06f805
--- /dev/null
+++ b/docs/0_1_image-export.fsx
@@ -0,0 +1,185 @@
+(**
+---
+title: Static image export
+category: General
+categoryindex: 1
+index: 2
+---
+*)
+
+
+(*** hide ***)
+
+(*** condition: prepare ***)
+#r "nuget: Newtonsoft.JSON, 12.0.3"
+#r "nuget: PuppeteerSharp"
+#r "../bin/Plotly.NET/netstandard2.0/Plotly.NET.dll"
+#r "../bin/Plotly.NET.ImageExport/netstandard2.0/Plotly.NET.ImageExport.dll"
+
+(*** condition: ipynb ***)
+#if IPYNB
+#r "nuget: Plotly.NET, {{fsdocs-package-version}}"
+#r "nuget: Plotly.NET.Interactive, {{fsdocs-package-version}}"
+#r "nuget: Plotly.NET.ImageExport, {{fsdocs-package-version}}"
+#endif // IPYNB
+
+
+(**
+[](https://mybinder.org/v2/gh/plotly/Plotly.NET/gh-pages?filepath={{fsdocs-source-basename}}.ipynb)
+[]({{root}}{{fsdocs-source-basename}}.fsx)
+[]({{root}}{{fsdocs-source-basename}}.ipynb)
+
+# Static image export
+
+### Table of contents
+
+- [Saving static images](#Saving-static-images)
+- [Generating URIs for static chart images](#Generating-URIs-for-static-chart-images)
+- [Including static images in dotnet interactive notebooks](#Including-static-images-in-dotnet-interactive-notebooks)
+
+As Plotly.NET generates static html pages that contain charts rendered by plotly.js, static image export needs a lot more overhead under the hood
+than you might expect. The underlying renderer needs to execute javascript, leading to the usage of headless browsers.
+
+The package `Plotly.NET.ImageExport` contains extensions for Plotly.NET to render static images. It is designed with extensibility in mind and
+it is very easy to add a new rendering engine. The current engines are provided:
+
+| Rendering engine | Type | Prerequisites |
+|-|-|-|
+| [PuppeteerSharp](https://github.com/hardkoded/puppeteer-sharp) | headless browser | [read more here](https://github.com/hardkoded/puppeteer-sharp#prerequisites) |
+
+## Saving static images
+
+By referencing the `Plotly.NET.ImageExport` package, you get access to:
+
+ - jpg via `Chart.SaveJPG`
+ - png via `Chart.SavePNG`
+ - svg via `Chart.SaveSVG`
+
+(and Extensions for C# style fluent interfaces by opening the `GenericChartExtensions` namespace)
+
+The parameters for all three functions are exactly the same.
+*)
+
+open Plotly.NET
+open Plotly.NET.ImageExport
+
+let exampleChart =
+ Chart.Histogram2dContour(
+ [1.;2.;2.;4.;5.],
+ [1.;2.;2.;4.;5.]
+ )
+
+(***do-not-eval***)
+exampleChart
+|> Chart.saveJPG(
+ "/your/path/without/extension/here",
+ Width=300,
+ Height=300
+)
+
+(*** condition: ipynb ***)
+#if IPYNB
+let imgString = $"""
"""
+DisplayExtensions.DisplayAs(imgString,"text/html")
+#endif // IPYNB
+
+(***hide***)
+$"""
"""
+(***include-it-raw***)
+
+(**
+## Generating URIs for static chart images
+
+By referencing the `Plotly.NET.ImageExport` package, you get access to:
+
+ - jpg via `Chart.toBase64JPGString`
+ - png via `Chart.toBase64PNGString`
+ - svg via `Chart.toSVGString`
+
+(and Extensions for C# style fluent interfaces by opening the `GenericChartExtensions` namespace)
+
+*)
+
+let base64JPG =
+ exampleChart
+ |> Chart.toBase64JPGString(
+ Width=300,
+ Height=300
+ )
+
+(**
+It is very easy to construct a html tag that includes this image via a base64 uri. For SVGs,
+not even that is necessary and just the SVG string can be used.
+*)
+
+(***do-not-eval***)
+$"""
"""
+
+(*** condition: ipynb ***)
+#if IPYNB
+let imgString = $"""
"""
+DisplayExtensions.DisplayAs(imgString,"text/html")
+#endif // IPYNB
+
+(***hide***)
+$"""
"""
+
+(***include-it-raw***)
+
+(**
+SVGs can be included without the image tag:
+*)
+
+let svgString =
+ exampleChart
+ |> Chart.toSVGString(
+ Width=300,
+ Height=300
+ )
+
+svgString.Substring(0,300)
+|> printfn "%s"
+
+(***include-output***)
+
+(**
+In fact, the images shown on this site are included just the same way.
+
+## Including static images in dotnet interactive notebooks
+
+To include the images in dotnet interactive, convert them to html tags as above and include them via
+dotnet interactive's `DisplayAs` function. The content type for PNG/JPB is "text/html", and "image/svg+xml" for SVG.
+*)
+
+let base64PNG =
+ exampleChart
+ |> Chart.toBase64PNGString(
+ Width=300,
+ Height=300
+ )
+
+let svgString2 =
+ exampleChart
+ |> Chart.toSVGString(
+ Width=300,
+ Height=300
+ )
+
+// DisplayExtensions.DisplayAs(base64PNG,"text/html")
+// DisplayExtensions.DisplayAs(svgString,"image/svg+xml")
+
+(*** condition: ipynb ***)
+#if IPYNB
+DisplayExtensions.DisplayAs(base64PNG,"text/html")
+DisplayExtensions.DisplayAs(svgString,"image/svg+xml")
+#endif // IPYNB
\ No newline at end of file
diff --git a/src/Plotly.NET.ImageExport/ChartExtensions.fs b/src/Plotly.NET.ImageExport/ChartExtensions.fs
new file mode 100644
index 000000000..b4c7dffbc
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/ChartExtensions.fs
@@ -0,0 +1,251 @@
+namespace Plotly.NET.ImageExport
+
+open System
+open System.IO
+
+open Plotly.NET
+open GenericChart
+open System.Runtime.InteropServices
+open System.Runtime.CompilerServices
+
+/// Extensions methods from Plotly.NET.ImageExport for the Chart module, supporting the fluent pipeline style
+[]
+module ChartExtensions =
+
+ type internal RenderOptions
+ (
+ ?EngineType: ExportEngine,
+ ?Width : int,
+ ?Height : int
+ ) =
+ member _.Engine = (defaultArg EngineType ExportEngine.PuppeteerSharp) |> ExportEngine.getEngine
+ member _.Width = defaultArg Width 600
+ member _.Height = defaultArg Height 600
+
+ type Chart with
+
+ ///
+ /// Returns an async function that converts a GenericChart to a base64 encoded JPG string
+ ///
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member toBase64JPGStringAsync
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ let opts = RenderOptions(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ fun (gChart:GenericChart) -> opts.Engine.RenderJPGAsync(opts.Width, opts.Height, gChart)
+
+ ///
+ /// Returns a function that converts a GenericChart to a base64 encoded JPG string
+ ///
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member toBase64JPGString
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ fun (gChart:GenericChart) ->
+ gChart
+ |> Chart.toBase64JPGStringAsync(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+ |> Async.RunSynchronously
+
+ ///
+ /// Returns an async function that saves a GenericChart as JPG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member saveJPGAsync
+ (
+ path: string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ let opts = RenderOptions(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ fun (gChart:GenericChart) -> opts.Engine.SaveJPGAsync(path, opts.Width, opts.Height, gChart)
+
+ ///
+ /// Returns a function that saves a GenericChart as JPG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member saveJPG
+ (
+ path: string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ fun (gChart:GenericChart) ->
+ gChart
+ |> Chart.saveJPGAsync(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+ |> Async.RunSynchronously
+
+ ///
+ /// Returns an async function that converts a GenericChart to a base64 encoded PNG string
+ ///
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member toBase64PNGStringAsync
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ let opts = RenderOptions(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ fun (gChart:GenericChart) -> opts.Engine.RenderPNGAsync(opts.Width, opts.Height, gChart)
+
+ ///
+ /// Returns a function that converts a GenericChart to a base64 encoded PNG string
+ ///
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member toBase64PNGString
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ fun (gChart:GenericChart) ->
+ gChart
+ |> Chart.toBase64PNGStringAsync(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+ |> Async.RunSynchronously
+
+ ///
+ /// Returns an async function that saves a GenericChart as PNG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member savePNGAsync
+ (
+ path: string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ let opts = RenderOptions(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ fun (gChart:GenericChart) -> opts.Engine.SavePNGAsync(path, opts.Width, opts.Height, gChart)
+
+
+ ///
+ /// Returns a function that saves a GenericChart as PNG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member savePNG
+ (
+ path: string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ fun (gChart:GenericChart) ->
+ gChart
+ |> Chart.savePNGAsync(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+ |> Async.RunSynchronously
+
+ ///
+ /// Returns an async function that converts a GenericChart to a SVG string
+ ///
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member toSVGStringAsync
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ let opts = RenderOptions(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ fun (gChart:GenericChart) -> opts.Engine.RenderSVGAsync(opts.Width, opts.Height, gChart)
+
+ ///
+ /// Returns a function that converts a GenericChart to a SVG string
+ ///
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member toSVGString
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ fun (gChart:GenericChart) ->
+ gChart
+ |> Chart.toSVGStringAsync(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+ |> Async.RunSynchronously
+
+ ///
+ /// Returns an async function that saves a GenericChart as SVG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member saveSVGAsync
+ (
+ path: string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ let opts = RenderOptions(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ fun (gChart:GenericChart) -> opts.Engine.SaveSVGAsync(path, opts.Width, opts.Height, gChart)
+
+ ///
+ /// Returns a function that saves a GenericChart as SVG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ static member saveSVG
+ (
+ path: string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ fun (gChart:GenericChart) ->
+ gChart
+ |> Chart.saveSVGAsync(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+ |> Async.RunSynchronously
\ No newline at end of file
diff --git a/src/Plotly.NET.ImageExport/ExportEngine.fs b/src/Plotly.NET.ImageExport/ExportEngine.fs
new file mode 100644
index 000000000..3a0a2da8c
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/ExportEngine.fs
@@ -0,0 +1,12 @@
+namespace Plotly.NET.ImageExport
+
+///DU containing the available static image export engines for Plotly.NET
+type ExportEngine =
+ /// Using this engine will use PuppeteerSharp with a Chromium headless browser to render GenericCharts from Plotly.NET.
+ | PuppeteerSharp
+
+ static member getEngine (engineType: ExportEngine) =
+ match engineType with
+ ///This engine uses PuppeteerSharp to render GenericCharts as static images using a chromium headless browser.
+ | PuppeteerSharp ->
+ PuppeteerSharpRenderer() :> IGenericChartRenderer
\ No newline at end of file
diff --git a/src/Plotly.NET.ImageExport/GenericChartExtensions.fs b/src/Plotly.NET.ImageExport/GenericChartExtensions.fs
new file mode 100644
index 000000000..604fc6f10
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/GenericChartExtensions.fs
@@ -0,0 +1,224 @@
+namespace Plotly.NET.ImageExport
+
+open Plotly.NET
+open GenericChart
+open System
+open System.Runtime.InteropServices
+open System.Runtime.CompilerServices
+
+///Extension methods for providing a Plotly.NET.ImageExport fluent interface pattern for C#
+[]
+module GenericChartExtensions =
+
+ type GenericChart with
+
+ ///
+ /// Converts the GenericChart to a base64 encoded JPG string (async)
+ ///
+ ///
+ ///
+ ///
+ []
+ []
+ member this.ToBase64JPGStringAsync
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ this |> Chart.toBase64JPGStringAsync(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Converts the GenericChart to a base64 encoded JPG string
+ ///
+ ///
+ ///
+ ///
+ []
+ []
+ member this.ToBase64JPGString
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ this |> Chart.toBase64JPGString(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Saves the GenericChart as JPG image (async)
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ []
+ member this.SaveJPGAsync
+ (
+ path:string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ this |> Chart.saveJPGAsync(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Saves the GenericChart as JPG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ []
+ member this.SaveJPG
+ (
+ path:string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ this |> Chart.saveJPG(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Converts the GenericChart to a base64 encoded PNG string (async)
+ ///
+ ///
+ ///
+ ///
+ []
+ []
+ member this.ToBase64PNGStringAsync
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ this |> Chart.toBase64PNGStringAsync(?EngineType = EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Converts the GenericChart to a base64 encoded PNG string
+ ///
+ ///
+ ///
+ ///
+ []
+ []
+ member this.ToBase64PNGString
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ this |> Chart.toBase64PNGString(?EngineType = EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Saves the GenericChart as PNG image (async)
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ []
+ member this.SavePNGAsync
+ (
+ path:string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ this |> Chart.savePNG(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Saves the GenericChart as PNG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ []
+ member this.SavePNG
+ (
+ path:string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ this |> Chart.savePNG(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Converts the GenericChart to a SVG string (async)
+ ///
+ ///
+ ///
+ ///
+ []
+ []
+ member this.ToSVGStringAsync
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ this |> Chart.toSVGStringAsync(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Converts the GenericChart to a SVG string
+ ///
+ ///
+ ///
+ ///
+ []
+ []
+ member this.ToSVGString
+ (
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+
+ this |> Chart.toSVGString(?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Saves the GenericChart as SVG image (async)
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ []
+ member this.SaveSVGAsync
+ (
+ path:string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ this |> Chart.saveSVGAsync(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
+ ///
+ /// Saves the GenericChart as SVG image
+ ///
+ /// The path (without extension) where the image will be saved
+ /// The Render engine to use
+ /// width of the resulting image
+ /// height of the resulting image
+ []
+ []
+ member this.SaveSVG
+ (
+ path:string,
+ [] ?EngineType: ExportEngine,
+ [] ?Width : int,
+ [] ?Height : int
+ ) =
+ this |> Chart.saveSVG(path, ?EngineType=EngineType, ?Width=Width, ?Height=Height)
+
\ No newline at end of file
diff --git a/src/Plotly.NET.ImageExport/IGenericChartRenderer.fs b/src/Plotly.NET.ImageExport/IGenericChartRenderer.fs
new file mode 100644
index 000000000..f366d9c15
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/IGenericChartRenderer.fs
@@ -0,0 +1,36 @@
+namespace Plotly.NET.ImageExport
+open Plotly.NET
+///
+/// Interface for Engines that render Plotly.NET's GenericChart to static images.
+///
+type IGenericChartRenderer =
+
+ ///Async function that returns a base64 encoded string representing the input chart as JPG file with the given width and height
+ abstract member RenderJPGAsync: int * int * GenericChart.GenericChart -> Async
+ ///Function that returns a base64 encoded string representing the input chart as JPG file with the given width and height
+ abstract member RenderJPG: int * int * GenericChart.GenericChart -> string
+
+ ///Async function that saves the input chart as JPG file with the given width and height at the given path
+ abstract member SaveJPGAsync: string * int * int * GenericChart.GenericChart -> Async
+ ///Function that saves the input chart as JPG file with the given width and height at the given path
+ abstract member SaveJPG: string * int * int * GenericChart.GenericChart -> unit
+
+ ///Async function that returns a base64 encoded string representing the input chart as PNG file with the given width and height
+ abstract member RenderPNGAsync: int * int * GenericChart.GenericChart -> Async
+ ///Function that returns a base64 encoded string representing the input chart as PNG file with the given width and height
+ abstract member RenderPNG: int * int * GenericChart.GenericChart -> string
+
+ ///Async function that saves the input chart as PNG file with the given width and height at the given path
+ abstract member SavePNGAsync: string * int * int * GenericChart.GenericChart -> Async
+ ///Function that saves the input chart as PNG file with the given width and height at the given path
+ abstract member SavePNG: string * int * int * GenericChart.GenericChart -> unit
+
+ ///Async function that returns a string representing the input chart as SVG file with the given width and height
+ abstract member RenderSVGAsync: int * int * GenericChart.GenericChart -> Async
+ ///Function that returns string representing the input chart as SVG file with the given width and height
+ abstract member RenderSVG: int * int * GenericChart.GenericChart -> string
+
+ ///Async function that saves the input chart as SVG file with the given width and height at the given path
+ abstract member SaveSVGAsync: string * int * int * GenericChart.GenericChart -> Async
+ ///Function that saves the input chart as SVG file with the given width and height at the given path
+ abstract member SaveSVG: string * int * int * GenericChart.GenericChart -> unit
diff --git a/src/Plotly.NET.ImageExport/Playground.fsx b/src/Plotly.NET.ImageExport/Playground.fsx
new file mode 100644
index 000000000..8f0975d50
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/Playground.fsx
@@ -0,0 +1,165 @@
+#r "nuget: FSharp.Data"
+#r "nuget: Deedle"
+#r "nuget: FSharpAux"
+#r "nuget: Newtonsoft.Json, 12.0.3"
+
+#load "../Plotly.NET/StyleParams.fs"
+#load "../Plotly.NET/DynamicObj.fs"
+#load "../Plotly.NET/Frame.fs"
+#load "../Plotly.NET/Colors.fs"
+#load "../Plotly.NET/StockData.fs"
+#load "../Plotly.NET/Font.fs"
+#load "../Plotly.NET/Pathbar.fs"
+#load "../Plotly.NET/TreemapTiling.fs"
+#load "../Plotly.NET/Colorbar.fs"
+#load "../Plotly.NET/RangeSlider.fs"
+#load "../Plotly.NET/Light.fs"
+#load "../Plotly.NET/Legend.fs"
+#load "../Plotly.NET/Contours.fs"
+#load "../Plotly.NET/Dimensions.fs"
+#load "../Plotly.NET/Domain.fs"
+#load "../Plotly.NET/Line.fs"
+#load "../Plotly.NET/WaterfallConnector.fs"
+#load "../Plotly.NET/FunnelConnector.fs"
+#load "../Plotly.NET/Box.fs"
+#load "../Plotly.NET/Meanline.fs"
+#load "../Plotly.NET/Marker.fs"
+#load "../Plotly.NET/Hoverlabel.fs"
+#load "../Plotly.NET/Axis.fs"
+#load "../Plotly.NET/Bins.fs"
+#load "../Plotly.NET/Cumulative.fs"
+#load "../Plotly.NET/Scene.fs"
+#load "../Plotly.NET/Selected.fs"
+#load "../Plotly.NET/Shape.fs"
+#load "../Plotly.NET/Error.fs"
+#load "../Plotly.NET/Table.fs"
+#load "../Plotly.NET/Trace.fs"
+#load "../Plotly.NET/Trace3d.fs"
+#load "../Plotly.NET/GeoProjection.fs"
+#load "../Plotly.NET/Geo.fs"
+#load "../Plotly.NET/MapboxLayerSymbol.fs"
+#load "../Plotly.NET/MapboxLayer.fs"
+#load "../Plotly.NET/Mapbox.fs"
+#load "../Plotly.NET/LayoutGrid.fs"
+#load "../Plotly.NET/Annotation.fs"
+#load "../Plotly.NET/Layout.fs"
+#load "../Plotly.NET/Template.fs"
+#load "../Plotly.NET/Config.fs"
+#load "../Plotly.NET/DisplayOptions.fs"
+#load "../Plotly.NET/GenericChart.fs"
+#load "../Plotly.NET/Chart.fs"
+#load "../Plotly.NET/ChartExtensions.fs"
+#load "../Plotly.NET/GenericChartExtensions.fs"
+#load "../Plotly.NET/CandelstickExtension.fs"
+#load "../Plotly.NET/SankeyExtension.fs"
+
+open Plotly.NET
+open GenericChart
+
+open FSharp.Data
+open Newtonsoft.Json
+open System.Text
+open System.IO
+open Deedle
+open FSharpAux
+
+
+#r "nuget: PuppeteerSharp"
+
+open PuppeteerSharp
+
+#load "IGenericChartRenderer.fs"
+#load "PuppeteerSharpRenderer.fs"
+#load "ExportEngine.fs"
+#load "ChartExtensions.fs"
+#load "GenericChartExtensions.fs"
+
+open Plotly.NET.ImageExport
+open GenericChartExtensions
+
+let x = [1.; 2.; 3.; 4.; 5.; 6.; 7.; 8.; 9.; 10.; ]
+let y = [2.; 1.5; 5.; 1.5; 3.; 2.5; 2.5; 1.5; 3.5; 1.]
+let xyz = Seq.zip3 x y x
+
+let simpleChart = Chart.Point([1.,1.])
+
+let complexChart =
+ Chart.Grid(
+ [
+ [Chart.Line(x,y); Chart.Line(x,y); Chart.Line(x,y)]
+ [Chart.Histogram2dContour(x,y); Chart.Point(x,y); Chart.Point(x,y)]
+ [Chart.Spline(x,y); Chart.Spline(x,y); Chart.Spline(x,y)]
+ ]
+ )
+
+complexChart
+|> Chart.Show
+
+simpleChart
+|> Chart.saveJPG (
+ __SOURCE_DIRECTORY__ + "/testrenders/simple",
+ EngineType = ExportEngine.PuppeteerSharp,
+ Width= 1000,
+ Height= 1000
+)
+
+open FSharp.Data
+open Deedle
+
+let dataDensityMapbox =
+ Http.RequestString "https://raw.githubusercontent.com/plotly/datasets/master/earthquakes-23k.csv"
+ |> fun d -> Frame.ReadCsvString(d,true,separators=",")
+
+dataDensityMapbox.Print()
+
+let lonDensity = dataDensityMapbox.["Longitude"] |> Series.values
+let latDensity = dataDensityMapbox.["Latitude"] |> Series.values
+let magnitudes = dataDensityMapbox.["Magnitude"] |> Series.values
+
+let map =
+ Chart.DensityMapbox(
+ lonDensity,
+ latDensity,
+ Z = magnitudes,
+ Radius=8.,
+ Colorscale=StyleParam.Colorscale.Viridis
+ )
+ |> Chart.withMapbox(
+ Mapbox.init(
+ Style = StyleParam.MapboxStyle.StamenTerrain,
+ Center = (60.,30.)
+ )
+ )
+
+
+map.SaveSVG(__SOURCE_DIRECTORY__ + "/testrenders/map")
+
+complexChart.SaveJPG (__SOURCE_DIRECTORY__ + "/testrenders/complex")
+
+simpleChart
+|> Chart.savePNG (__SOURCE_DIRECTORY__ + "/testrenders/simple")
+
+complexChart
+ .WithTitle("soos")
+ .SavePNG(__SOURCE_DIRECTORY__ + "/testrenders/complex")
+
+simpleChart
+|> Chart.saveSVG (__SOURCE_DIRECTORY__ + "/testrenders/simple")
+
+complexChart.SaveSVG (__SOURCE_DIRECTORY__ + "/testrenders/complex")
+
+let jpgString =
+ Chart.Point([1.,1.])
+
+ |> Chart.toBase64JPGString()
+ |> fun f -> File.WriteAllText(@"C:\Users\Kevin\source\repos\plotly\Plotly.NET\tests\Plotly.NET.Tests\data\testBase64JPG.txt", f)
+
+let pngString =
+ Chart.Point([1.,1.])
+ |> Chart.toBase64PNGString()
+ |> fun f -> File.WriteAllText(@"C:\Users\Kevin\source\repos\plotly\Plotly.NET\tests\Plotly.NET.Tests\data\testBase64PNG.txt", f)
+
+let svgString =
+ Chart.Point([1.,1.])
+ |> Chart.toSVGString()
+ |> fun f -> File.WriteAllText(@"C:\Users\Kevin\source\repos\plotly\Plotly.NET\tests\Plotly.NET.Tests\data\testSVGURI.txt", f)
diff --git a/src/Plotly.NET.ImageExport/Plotly.NET.ImageExport.fsproj b/src/Plotly.NET.ImageExport/Plotly.NET.ImageExport.fsproj
new file mode 100644
index 000000000..248a3dcba
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/Plotly.NET.ImageExport.fsproj
@@ -0,0 +1,43 @@
+
+
+
+ net5.0; netstandard2.0
+ true
+ 3390;$(WarnOn)
+
+
+
+ Kevin Schneider, F# open source contributors
+ An easily extensible library to render static images from Plotly.NET charts.
+ An easily extensible library to render static images from Plotly.NET charts.
+ MIT
+ https://plotly.net
+ logo.png
+ visualization charting plotly fsharp csharp jpg png svg image
+ https://github.com/plotly/Plotly.NET/
+ git
+ https://github.com/plotly/Plotly.NET/blob/dev/LICENSE
+ https://github.com/plotly/Plotly.NET/blob/dev/RELEASE_NOTES.md
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Plotly.NET.ImageExport/PuppeteerSharpRenderer.fs b/src/Plotly.NET.ImageExport/PuppeteerSharpRenderer.fs
new file mode 100644
index 000000000..426049204
--- /dev/null
+++ b/src/Plotly.NET.ImageExport/PuppeteerSharpRenderer.fs
@@ -0,0 +1,195 @@
+namespace Plotly.NET.ImageExport
+
+open Plotly.NET
+open PuppeteerSharp
+
+open System
+open System.IO
+open System.Text
+open System.Text.RegularExpressions
+
+type PuppeteerSharpRenderer() =
+
+ /// adapted from the original C# implementation by @ilyalatt : https://github.com/ilyalatt/Plotly.NET.PuppeteerRenderer
+ ///
+ /// creates a full screen html site for the given chart
+ let toFullScreenHtml (gChart: GenericChart.GenericChart) =
+
+ gChart
+ |> GenericChart.mapConfig(fun c ->
+ DynObj.setValue c "responsive" true
+ c
+ )
+ |> GenericChart.mapLayout(fun l ->
+ DynObj.setValue l "width" "100%"
+ DynObj.setValue l "height" "100%"
+ l
+ )
+ |> GenericChart.toChartHTML
+ |> fun html -> html.Replace("width: 600px; height: 600px;", "width: 100%; height: 100%;")
+
+ /// adapted from the original C# implementation by @ilyalatt : https://github.com/ilyalatt/Plotly.NET.PuppeteerRenderer
+ ///
+ /// adds the necessary js function calls to render an image with plotly.js
+ let patchHtml width height (format: StyleParam.ImageFormat) html =
+ let regex = Regex(@"(Plotly\.newPlot\(.+?\))")
+ let patchedHtml =
+ regex.Replace(
+ html,
+ (
+ fun (x:Match) ->
+ x.Result(
+ "$1"
+ + $".then(x => Plotly.toImage(x, {{ format: '{StyleParam.ImageFormat.toString format}', scale: 2, width: {width}, height: {height} }}))"
+ + ".then(img => window.plotlyImage = img)"
+ )
+ )
+ )
+ patchedHtml
+
+ /// adapted from the original C# implementation by @ilyalatt : https://github.com/ilyalatt/Plotly.NET.PuppeteerRenderer
+ ///
+ /// attempts to render a chart as static image of the given format with the given dimensions from the given html string
+ let tryRenderAsync (browser:Browser) (width: int) (height: int) (format: StyleParam.ImageFormat) (html: string) =
+ async {
+ let! page = browser.NewPageAsync() |> Async.AwaitTask
+ try
+ let! _ = page.SetContentAsync(patchHtml width height format html) |> Async.AwaitTask
+ let! imgHandle = page.WaitForExpressionAsync("window.plotlyImage") |> Async.AwaitTask
+ let! imgStr = imgHandle.JsonValueAsync() |> Async.AwaitTask
+ return imgStr
+
+ finally
+ page.CloseAsync() |> Async.AwaitTask |> Async.RunSynchronously
+ }
+
+ /// attempts to render a chart as static image of the given format with the given dimensions from the given html string
+ let tryRender (browser:Browser) (width: int) (height: int) (format: StyleParam.ImageFormat) (html: string) =
+ tryRenderAsync browser width height format html
+ |> Async.RunSynchronously
+
+ /// Initalizes headless browser
+ let fetchAndLaunchBrowserAsync() =
+ async {
+ let browserFetcher = BrowserFetcher()
+
+ let! revision = browserFetcher.DownloadAsync() |> Async.AwaitTask
+
+ let launchOptions = LaunchOptions()
+ launchOptions.ExecutablePath <- revision.ExecutablePath
+ launchOptions.Timeout <- 60000
+
+ return!
+ Puppeteer.LaunchAsync(launchOptions)
+ |> Async.AwaitTask
+ }
+
+ /// Initalizes headless browser
+ let fetchAndLaunchBrowser() =
+ fetchAndLaunchBrowserAsync()
+ |> Async.RunSynchronously
+
+ /// skips the data type part of the given URI
+ let skipDataTypeString (base64:string) =
+ let imgBase64StartIdx =base64.IndexOf(",", StringComparison.Ordinal) + 1
+ base64.Substring(imgBase64StartIdx)
+
+ /// converst a base64 encoded string URI to a byte array
+ let getBytesFromBase64String (base64:string) =
+ base64
+ |> skipDataTypeString
+ |> Convert.FromBase64String
+
+ interface IGenericChartRenderer with
+
+ member this.RenderJPGAsync (width:int, height: int, gChart:GenericChart.GenericChart) =
+ async {
+ use! browser = fetchAndLaunchBrowserAsync()
+
+ return!
+ tryRenderAsync
+ browser
+ width
+ height
+ StyleParam.ImageFormat.JPEG
+ (gChart |> toFullScreenHtml)
+ }
+
+ member this.RenderJPG (width:int, height: int, gChart:GenericChart.GenericChart) =
+ (this :> IGenericChartRenderer).RenderJPGAsync(width, height, gChart)
+ |> Async.RunSynchronously
+
+ member this.SaveJPGAsync (path:string, width:int, height: int, gChart:GenericChart.GenericChart) =
+ async {
+ let! rendered = (this :> IGenericChartRenderer).RenderJPGAsync(width, height, gChart)
+ return
+ rendered
+ |> getBytesFromBase64String
+ |> fun base64 -> File.WriteAllBytes($"{path}.jpg", base64)
+ }
+
+ member this.SaveJPG (path:string, width:int, height: int, gChart:GenericChart.GenericChart) =
+ (this :> IGenericChartRenderer).SaveJPGAsync(path, width, height, gChart)
+ |> Async.RunSynchronously
+
+ member this.RenderPNGAsync (width:int, height: int, gChart:GenericChart.GenericChart) =
+ async {
+ use! browser = fetchAndLaunchBrowserAsync()
+
+ return!
+ tryRenderAsync
+ browser
+ width
+ height
+ StyleParam.ImageFormat.PNG
+ (gChart |> toFullScreenHtml)
+ }
+
+ member this.RenderPNG (width:int, height: int, gChart:GenericChart.GenericChart) =
+ (this :> IGenericChartRenderer).RenderPNGAsync(width, height, gChart)
+ |> Async.RunSynchronously
+
+ member this.SavePNGAsync (path:string, width:int, height: int, gChart:GenericChart.GenericChart) =
+ async {
+ let! rendered = (this :> IGenericChartRenderer).RenderPNGAsync(width, height, gChart)
+
+ return
+ rendered
+ |> getBytesFromBase64String
+ |> fun base64 -> File.WriteAllBytes($"{path}.png", base64)
+ }
+
+ member this.SavePNG (path:string, width:int, height: int, gChart:GenericChart.GenericChart) =
+ (this :> IGenericChartRenderer).SavePNGAsync(path, width, height, gChart)
+ |> Async.RunSynchronously
+
+ member this.RenderSVGAsync (width:int, height: int, gChart:GenericChart.GenericChart) =
+ async {
+ use! browser = fetchAndLaunchBrowserAsync()
+
+ let! renderedString =
+ tryRenderAsync
+ browser
+ width
+ height
+ StyleParam.ImageFormat.SVG
+ (gChart |> toFullScreenHtml)
+ return
+ renderedString
+ |> fun svg -> System.Uri.UnescapeDataString(svg)
+ |> skipDataTypeString
+ }
+
+ member this.RenderSVG (width:int, height: int, gChart:GenericChart.GenericChart) =
+ (this :> IGenericChartRenderer).RenderSVGAsync(width, height, gChart)
+ |> Async.RunSynchronously
+
+ member this.SaveSVGAsync(path:string, width:int, height: int, gChart:GenericChart.GenericChart) =
+ async {
+ let! rendered = (this :> IGenericChartRenderer).RenderSVGAsync(width, height, gChart)
+ return rendered |> fun svg -> File.WriteAllText($"{path}.svg", svg)
+ }
+
+ member this.SaveSVG (path:string, width:int, height: int, gChart:GenericChart.GenericChart) =
+ (this :> IGenericChartRenderer).SaveSVGAsync(path, width, height, gChart)
+ |> Async.RunSynchronously
\ No newline at end of file
diff --git a/src/Plotly.NET.Interactive/ExtensionVisualTest.ipynb b/src/Plotly.NET.Interactive/ExtensionVisualTest.ipynb
index fb7d3ebd9..26e3a5ece 100644
--- a/src/Plotly.NET.Interactive/ExtensionVisualTest.ipynb
+++ b/src/Plotly.NET.Interactive/ExtensionVisualTest.ipynb
@@ -3,15 +3,9 @@
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "dotnet_interactive": {
- "language": "pwsh"
- }
- },
- "outputs": [],
"source": [
"# notebook paths should be absolute - change this for your setup\r\n",
- "$projectRootDir = \"/path/to/your/project/Plotly.NET\"\r\n",
+ "$projectRootDir = \"C:/Users/Kevin/source/repos/plotly/Plotly.NET\"\r\n",
"cd $projectRootDir\r\n",
"\r\n",
"dotnet tool restore\r\n",
@@ -19,74 +13,1506 @@
"\r\n",
"# changing versions here if you try out a new version helps you to bust the nuget cache\r\n",
"# you still have to restart your notebook kernel, though, if you already loaded a package\r\n",
- "dotnet pack /p:PackageVersion=2.0.0-dev4 -o \"$projectRootDir/pkg\"\r\n",
+ "dotnet pack /p:PackageVersion=2.0.0-dev5 -o \"$projectRootDir/pkg\"\r\n",
"\r\n",
"ls \"$projectRootDir/pkg\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "dotnet_interactive": {
- "language": "fsharp"
- }
- },
+ ],
"outputs": [
{
"data": {
- "text/html": "Restore sources- C:/Users/grego/source/repos/Plotly.NET/pkg
"
+ "text/plain": [
+ "Tool 'fake-cli' (version '5.20.4') was restored. Available commands: fake\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Tool 'paket' (version '5.257.0') was restored. Available commands: paket\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Tool 'fsharp.formatting.commandtool' (version '11.1.0') was restored. Available commands: fsdocs\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Restore was successful.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "The last restore is still up to date. Nothing left to do.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "run CopyBinaries\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Building project with version: LocalBuild\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Shortened DependencyGraph for Target CopyBinaries:\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "<== CopyBinaries\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " <== Clean\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " <== Build\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "The running order is:\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Group - 1\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Clean\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Group - 2\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Build\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Group - 3\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - CopyBinaries\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Starting target 'Clean'\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Finished (Success) 'Clean' in 00:00:00.1997738\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Starting target 'Build'\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Starting task 'DotNet:build': Plotly.NET.sln\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET> \"dotnet.exe\" msbuild /version /nologo (In: false, Out: true, Err: true)\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "16.10.1.27001\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET> \"dotnet.exe\" build Plotly.NET.sln --configuration Release /nodeReuse:False \"/bl:C:\\Users\\Kevin\\AppData\\Local\\Temp\\tmpBE44.tmp.binlog\" (In: false, Out: false, Err: false)\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Microsoft (R) Build Engine version 16.10.1+2fd48ab73 for .NET\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Copyright (C) Microsoft Corporation. All rights reserved.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Program Files\\dotnet\\sdk\\5.0.301\\MSBuild.dll -consoleloggerparameters:Summary -distributedlogger:Microsoft.DotNet.Tools.MSBuild.MSBuildLogger,C:\\Program Files\\dotnet\\sdk\\5.0.301\\dotnet.dll*Microsoft.DotNet.Tools.MSBuild.MSBuildForwardingLogger,C:\\Program Files\\dotnet\\sdk\\5.0.301\\dotnet.dll -maxcpucount -property:Configuration=Release -restore -verbosity:m /bl:C:\\Users\\Kevin\\AppData\\Local\\Temp\\tmpBE44.tmp.binlog /nodeReuse:False Plotly.NET.sln\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Determining projects to restore...\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj (in 310 ms).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.ImageExport\\Plotly.NET.ImageExport.fsproj (in 745 ms).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.Interactive\\Plotly.NET.Interactive.fsproj (in 815 ms).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\tests\\Plotly.NET.Tests\\Plotly.NET.Tests.fsproj (in 1.45 sec).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\bin\\Release\\netstandard2.0\\Plotly.NET.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\bin\\Release\\net5.0\\Plotly.NET.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET.Interactive -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.Interactive\\bin\\Release\\net5.0\\Plotly.NET.Interactive.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET.ImageExport -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.ImageExport\\bin\\Release\\net5.0\\Plotly.NET.ImageExport.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET.Tests -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\tests\\Plotly.NET.Tests\\bin\\Release\\net5.0\\Plotly.NET.Tests.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Build succeeded.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " 16 Warning(s)\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " 0 Error(s)\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Time Elapsed 00:00:33.10\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Fsc: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Fsc: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Fsc: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Fsc: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Fsc: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Fsc: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Finished (Success) 'DotNet:build' in 00:00:35.1270633\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Finished (Success) 'Build' in 00:00:35.1342112\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Starting target 'CopyBinaries'\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(\"C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\bin\\Release\",\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " \"bin\\Plotly.NET\")\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(\"C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.ImageExport\\bin\\Release\",\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " \"bin\\Plotly.NET.ImageExport\")\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "(\"C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.Interactive\\bin\\Release\",\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " \"bin\\Plotly.NET.Interactive\")\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Finished (Success) 'CopyBinaries' in 00:00:00.4017069\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "---------------------------------------------------------------------\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Build Time Report\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "---------------------------------------------------------------------\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Target Duration\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "------ --------\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Clean 00:00:00.1951835\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Build 00:00:35.1340651\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "CopyBinaries 00:00:00.4015674\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Total: 00:00:35.8823875\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Status: Ok\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "---------------------------------------------------------------------\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\build.fsx (141,12)-(141,26): FSharpErrorSeverity.Warning FS1182: The value 'standardParams' is unused\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Performance:\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Cli parsing: 322 milliseconds\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Packages: 94 milliseconds\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Script analyzing: 36 milliseconds\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Script running: 36 seconds\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Script cleanup: 23 milliseconds\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " - Runtime: 37 seconds\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Microsoft (R) Build Engine version 16.10.1+2fd48ab73 for .NET\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Copyright (C) Microsoft Corporation. All rights reserved.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Determining projects to restore...\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj (in 390 ms).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.ImageExport\\Plotly.NET.ImageExport.fsproj (in 593 ms).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.Interactive\\Plotly.NET.Interactive.fsproj (in 700 ms).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Restored C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\tests\\Plotly.NET.Tests\\Plotly.NET.Tests.fsproj (in 1.5 sec).\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Chart.fs(616,9): warning FS0044: This construct is deprecated. Use the constructors with the mandatory mode argument for full functionality [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\bin\\Debug\\netstandard2.0\\Plotly.NET.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(32,50): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(39,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(40,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(41,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\CandelstickExtension.fs(42,74): warning FS0044: This construct is deprecated. this type will be removed in favor of the 'StockData' type in 2.0. [C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\Plotly.NET.fsproj]\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET\\bin\\Debug\\net5.0\\Plotly.NET.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Successfully created package 'C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\pkg\\Plotly.NET.2.0.0-dev5.nupkg'.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Successfully created package 'C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\pkg\\Plotly.NET.2.0.0-dev5.snupkg'.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET.Interactive -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.Interactive\\bin\\Debug\\net5.0\\Plotly.NET.Interactive.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Successfully created package 'C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\pkg\\Plotly.NET.Interactive.2.0.0-dev5.nupkg'.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Successfully created package 'C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\pkg\\Plotly.NET.Interactive.2.0.0-dev5.snupkg'.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Plotly.NET.ImageExport -> C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\src\\Plotly.NET.ImageExport\\bin\\Debug\\net5.0\\Plotly.NET.ImageExport.dll\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Successfully created package 'C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\pkg\\Plotly.NET.ImageExport.2.0.0-dev5.nupkg'.\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ " Directory: C:\\Users\\Kevin\\source\\repos\\plotly\\Plotly.NET\\pkg\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "Mode LastWriteTime Length Name\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "---- ------------- ------ ----\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "-a--- 7/9/2021 2:40 PM 856987 Plotly.NET.2.0.0-dev5.nupkg\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/plain": [
+ "-a--- 7/9/2021 2:40 PM 83819 Plotly.NET.2.0.0-dev5.snupkg\r\n"
+ ]
},
- "output_type": "unknown"
+ "metadata": {},
+ "output_type": "display_data"
},
{
"data": {
- "text/plain": "Installed package Plotly.NET.Interactive version 2.0.0-dev4"
+ "text/plain": [
+ "-a--- 7/9/2021 2:40 PM 51671 Plotly.NET.ImageExport.2.0.0-dev5.nupkg\r\n"
+ ]
},
- "output_type": "unknown"
+ "metadata": {},
+ "output_type": "display_data"
},
{
"data": {
- "text/plain": "Installed package Plotly.NET version 2.0.0-dev4"
+ "text/plain": [
+ "-a--- 7/9/2021 2:40 PM 41265 Plotly.NET.Interactive.2.0.0-dev5.nupkg\r\n"
+ ]
},
- "output_type": "unknown"
+ "metadata": {},
+ "output_type": "display_data"
},
{
"data": {
- "text/markdown": "Loading extensions from `Plotly.NET.Interactive.dll`"
+ "text/plain": [
+ "-a--- 7/9/2021 2:40 PM 2684 Plotly.NET.Interactive.2.0.0-dev5.snupkg\r\n"
+ ]
},
- "output_type": "unknown"
+ "metadata": {},
+ "output_type": "display_data"
},
{
"data": {
- "text/markdown": "Added Kernel Extension including formatters for GenericChart"
+ "text/plain": [
+ "\r\n"
+ ]
},
- "output_type": "unknown"
+ "metadata": {},
+ "output_type": "display_data"
}
],
- "source": [
- "// be advised, that you always should set absolute paths for local nuget packages - change this to reflect your own setup\r\n",
- "#i \"nuget: /path/to/your/project/Plotly.NET/pkg\"\r\n",
- "#r \"nuget: Plotly.NET, 2.0.0-dev4\"\r\n",
- "#r \"nuget: Plotly.NET.Interactive, 2.0.0-dev4\""
- ]
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "pwsh"
+ }
+ }
},
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "dotnet_interactive": {
- "language": "fsharp"
- }
- },
+ "source": [
+ "// be advised, that you always should set absolute paths for local nuget packages - change this to reflect your own setup\r\n",
+ "#i \"nuget: C:/Users/Kevin/source/repos/plotly/Plotly.NET/pkg\"\r\n",
+ "#r \"nuget: Plotly.NET, 2.0.0-dev5\"\r\n",
+ "#r \"nuget: Plotly.NET.ImageExport, 2.0.0-dev5\"\r\n",
+ "#r \"nuget: Plotly.NET.Interactive, 2.0.0-dev5\""
+ ],
"outputs": [
{
"data": {
- "text/html": "\r\n\r\n"
+ "text/html": [
+ "Restore sources- C:/Users/Kevin/source/repos/plotly/Plotly.NET/pkg
Installed Packages- fsharp.core, 5.0.0
- humanizer.core, 2.2.0
- microsoft.aspnetcore.html.abstractions, 2.2.0
- microsoft.aspnetcore.webutilities, 2.0.2
- microsoft.bcl.asyncinterfaces, 5.0.0
- microsoft.codeanalysis.common, 3.9.0
- microsoft.codeanalysis.csharp, 3.9.0
- microsoft.codeanalysis.csharp.workspaces, 3.9.0
- microsoft.codeanalysis.visualbasic, 3.9.0
- microsoft.codeanalysis.visualbasic.workspaces, 3.9.0
- microsoft.codeanalysis.workspaces.common, 3.9.0
- microsoft.dotnet.interactive, 1.0.0-beta.21330.2
- microsoft.dotnet.interactive.formatting, 1.0.0-beta.21330.2
- microsoft.extensions.dependencyinjection.abstractions, 2.0.0
- microsoft.extensions.logging, 2.0.2
- microsoft.extensions.logging.abstractions, 2.0.2
- microsoft.extensions.options, 2.0.2
- microsoft.extensions.primitives, 2.0.0
- microsoft.net.http.headers, 2.0.2
- newtonsoft.json, 12.0.3
- nuget.frameworks, 5.0.0
- Plotly.NET, 2.0.0-dev5
- Plotly.NET.ImageExport, 2.0.0-dev5
- Plotly.NET.Interactive, 2.0.0-dev5
- puppeteersharp, 4.0.0
- sharpziplib, 1.3.1
- system.commandline, 2.0.0-beta1.21308.1
- system.commandline.rendering, 0.3.0-alpha.20427.1
- system.composition.attributedmodel, 1.0.31
- system.composition.convention, 1.0.31
- system.composition.hosting, 1.0.31
- system.composition.runtime, 1.0.31
- system.composition.typedparts, 1.0.31
- system.io.pipelines, 5.0.0
- system.reactive, 5.0.0
- system.text.encodings.web, 5.0.1
- system.text.json, 5.0.2
"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/markdown": [
+ "Loading extensions from `Plotly.NET.Interactive.dll`"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/markdown": [
+ "Added Kernel Extension including formatters for Plotly.NET charts."
+ ]
},
- "output_type": "unknown"
+ "metadata": {},
+ "output_type": "display_data"
}
],
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "fsharp"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
"source": [
"open Plotly.NET\r\n",
"\r\n",
@@ -95,7 +1521,112 @@
"\r\n",
"List.zip xs ys\r\n",
"|> Chart.Point"
- ]
+ ],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\r\n",
+ "\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "fsharp"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "source": [
+ "open Plotly.NET\r\n",
+ "open Plotly.NET.ImageExport\r\n",
+ "\r\n",
+ "let chartJPEG = \r\n",
+ " Chart.Point([1.,2.])\r\n",
+ " |> Chart.toBase64JPGString(Width=400, Height=400)\r\n",
+ "\r\n",
+ "let chartPNG = \r\n",
+ " Chart.Point([1.,2.])\r\n",
+ " |> Chart.toBase64PNGString(Width=400, Height=400)\r\n",
+ "\r\n",
+ "let chartSVG = \r\n",
+ " Chart.Point([1.,2.])\r\n",
+ " |> Chart.toSVGString(Width=400, Height=400)\r\n",
+ "\r\n",
+ "let imageHtml chartImage = $\"\"\"
\r\n",
+ "\"\"\"\r\n",
+ "\r\n",
+ "DisplayExtensions.DisplayAs(imageHtml chartJPEG,\"text/html\")\r\n",
+ "DisplayExtensions.DisplayAs(imageHtml chartPNG,\"text/html\")\r\n",
+ "DisplayExtensions.DisplayAs(chartSVG,\"image/svg+xml\")\r\n"
+ ],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "text/html": [
+ "
\r\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/svg+xml": ""
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "metadata": {
+ "dotnet_interactive": {
+ "language": "fsharp"
+ }
+ }
}
],
"metadata": {
diff --git a/src/Plotly.NET.Interactive/Untitled-1.html b/src/Plotly.NET.Interactive/Untitled-1.html
new file mode 100644
index 000000000..3117e262b
--- /dev/null
+++ b/src/Plotly.NET.Interactive/Untitled-1.html
@@ -0,0 +1,243 @@
+
\ No newline at end of file
diff --git a/src/Plotly.NET/GenericChart.fs b/src/Plotly.NET/GenericChart.fs
index a6294be79..8b6e9edf7 100644
--- a/src/Plotly.NET/GenericChart.fs
+++ b/src/Plotly.NET/GenericChart.fs
@@ -392,8 +392,15 @@ module GenericChart =
let mapLayout f gChart =
match gChart with
| Chart (trace, layout, config, displayOpts) -> Chart (trace,f layout,config, displayOpts)
- | MultiChart (traces, layout, config, displayOpts) -> MultiChart (traces,f layout,config, displayOpts) ///
+ | MultiChart (traces, layout, config, displayOpts) -> MultiChart (traces,f layout,config, displayOpts)
+
+ ///
+ let mapConfig f gChart =
+ match gChart with
+ | Chart (trace, layout, config, displayOpts) -> Chart (trace, layout, f config, displayOpts)
+ | MultiChart (traces, layout, config, displayOpts) -> MultiChart (traces, layout, f config, displayOpts)
+ ///
let mapDisplayOptions f gChart =
match gChart with
| Chart (trace, layout, config, displayOpts) -> Chart (trace, layout, config, f displayOpts)
diff --git a/src/Plotly.NET/Plotly.NET.fsproj b/src/Plotly.NET/Plotly.NET.fsproj
index 30f3a8f20..5848525ee 100644
--- a/src/Plotly.NET/Plotly.NET.fsproj
+++ b/src/Plotly.NET/Plotly.NET.fsproj
@@ -84,7 +84,6 @@
-
diff --git a/src/Plotly.NET/TestScript.fsx b/src/Plotly.NET/TestScript.fsx
deleted file mode 100644
index 496b1c612..000000000
--- a/src/Plotly.NET/TestScript.fsx
+++ /dev/null
@@ -1,69 +0,0 @@
-//#I "./bin/Debug"
-//#r "./bin/Debug/netstandard2.0/Newtonsoft.Json.dll"
-#r @"..\..\bin\Plotly.NET\netstandard2.0\Plotly.NET.dll"
-#r "netstandard"
-
-open Plotly.NET
-
-
-let x = seq [1.; 2.; 3.; 4.; 5.; 6.; 7.; 8.; 9.; 10.; ] // 9.; 8.; 7.; 6.; 5.; 4.; 3.; 2.; 1.]
-let y = seq [5.; 2.5; 5.; 7.5; 5.; 2.5; 7.5; 4.5; 5.5; 5.]
-let y' = seq [2.; 1.5; 5.; 1.5; 3.; 2.5; 2.5; 1.5; 3.5; 1.]
-
-Chart.Spline(x,y',Name="spline")
-|> Chart.withConfig
- (Config.init
- (
- Autosizable = true,
- ShowEditInChartStudio = true,
- ToImageButtonOptions =
- ToImageButtonOptions.init
- (
- Format = StyleParam.ImageFormat.SVG,
- Filename = "SOOOOS"
- )
- )
- )
-|> Chart.Show
-//|> Chart.withYError(Options.Error(Array=[1.; 2.; 3.; 4.; 5.; 6.; 7.; 8.; 9.; 10.; ]))
-
-
-//|> Chart.withLineStyle(Width=2,Dash=StyleParam.DrawingStyle.Dot)
-//|> Chart.withLineOption(Options.Line(Width=10))
-//|> Chart.withX_AxisStyle("x axis title")
-//|> Chart.withY_AxisStyle("y axis title")
-//|> layoutJson
-//|> GenericChart.toChartHtmlWithSize 500 500
-
-//|> Chart.ShowAsImage StyleParam.ImageFormat.SVG
-
-let dims' =
- [
- Dimensions.init(["Cat1";"Cat1";"Cat1";"Cat1";"Cat2";"Cat2";"Cat3"],Label="A")
- Dimensions.init([0;1;0;1;0;0;0],Label="B",TickText=["YES","NO"])
- ]
-
-Chart.ParallelCategories(dims=dims',Color=[0.;1.;0.;1.;0.;0.;0.],Colorscale = StyleParam.Colorscale.Blackbody)
-|> Chart.Show
-
-let data3d = List.zip3 [0 .. 15] [0 .. 15] [0 .. 15]
-let data2d = List.zip [0 .. 15] [0 .. 15]
-
-[
- Chart.Point (data2d)
- Chart.Scatter3d(xyz=data3d,mode = StyleParam.Mode.Markers)
- Chart.Scatter3d(xyz=data3d,mode = StyleParam.Mode.Markers)
- Chart.Scatter3d(xyz=data3d,mode = StyleParam.Mode.Markers)
- Chart.Scatter3d(xyz=data3d,mode = StyleParam.Mode.Markers)
-]
-|> Chart.Stack 2
-|> Chart.Show
-
-
-
-
-
-
-
-
-
diff --git a/tests/Plotly.NET.Tests/BasicHtmlGeneration.fs b/tests/Plotly.NET.Tests/BasicHtmlGeneration.fs
index cae1ce2b7..f1096b334 100644
--- a/tests/Plotly.NET.Tests/BasicHtmlGeneration.fs
+++ b/tests/Plotly.NET.Tests/BasicHtmlGeneration.fs
@@ -1,4 +1,4 @@
-module Tests
+module Tests.Core
open Expecto
open Plotly.NET
diff --git a/tests/Plotly.NET.Tests/ImageExport.fs b/tests/Plotly.NET.Tests/ImageExport.fs
new file mode 100644
index 000000000..731d6d7b4
--- /dev/null
+++ b/tests/Plotly.NET.Tests/ImageExport.fs
@@ -0,0 +1,34 @@
+module Tests.ImageExport
+
+open Expecto
+open Plotly.NET
+open Plotly.NET.ImageExport
+
+open System.IO
+
+let testBase64JPG = File.ReadAllText (__SOURCE_DIRECTORY__ + "/data/testBase64JPG.txt")
+let testBase64PNG = File.ReadAllText (__SOURCE_DIRECTORY__ + "/data/testBase64PNG.txt")
+
+let testChart = Chart.Point([1.,1.])
+
+//[]
+//let jpgTests =
+// testList "ImageExport_JPG" [
+// testCase "Chart.toBase64JPGString should create valid base64 JPG string" ( fun () ->
+// Expect.equal
+// (testChart |> Chart.toBase64JPGString())
+// testBase64JPG
+// "Nope"
+// )
+// ]
+
+//[]
+//let pngTests =
+// testList "ImageExport_PNG" [
+// testCase "Chart.toBase64PNGString should create valid base64 PNG string" ( fun () ->
+// Expect.equal
+// (testChart |> Chart.toBase64PNGString())
+// testBase64PNG
+// "Nope"
+// )
+// ]
\ No newline at end of file
diff --git a/tests/Plotly.NET.Tests/Main.fs b/tests/Plotly.NET.Tests/Main.fs
index 11e78d2f3..1f34e91d4 100644
--- a/tests/Plotly.NET.Tests/Main.fs
+++ b/tests/Plotly.NET.Tests/Main.fs
@@ -3,4 +3,4 @@ open Expecto
[]
let main argv =
- Tests.runTestsInAssembly defaultConfig argv
+ Tests.runTestsInAssemblyWithCLIArgs [] argv
diff --git a/tests/Plotly.NET.Tests/Plotly.NET.Tests.fsproj b/tests/Plotly.NET.Tests/Plotly.NET.Tests.fsproj
index 34f460526..2df61741f 100644
--- a/tests/Plotly.NET.Tests/Plotly.NET.Tests.fsproj
+++ b/tests/Plotly.NET.Tests/Plotly.NET.Tests.fsproj
@@ -7,6 +7,7 @@
+
@@ -19,5 +20,6 @@
+
diff --git a/tests/Plotly.NET.Tests/data/testBase64JPG.txt b/tests/Plotly.NET.Tests/data/testBase64JPG.txt
new file mode 100644
index 000000000..6b0561973
--- /dev/null
+++ b/tests/Plotly.NET.Tests/data/testBase64JPG.txt
@@ -0,0 +1 @@
+data:image/jpeg;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9k=
\ No newline at end of file
diff --git a/tests/Plotly.NET.Tests/data/testBase64PNG.txt b/tests/Plotly.NET.Tests/data/testBase64PNG.txt
new file mode 100644
index 000000000..250a6560b
--- /dev/null
+++ b/tests/Plotly.NET.Tests/data/testBase64PNG.txt
@@ -0,0 +1 @@
+data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABLAAAASwCAYAAADrIbPPAAAgAElEQVR4XuzdT+yvaVkm+JcAQgenreqKFdPAwsE/C6OzkAhtoq6IGqOmQhtXMxttOik3E49DLBUXEoRgSHRhYtu7ITEz9Exk4UJTu5rEQSkXo2FnNYuCif/QagJBAkrnnDREbKDO+9b3d1/P+14fkk46zXm/93N/rudOPblTnH7ZF77whS9s/kOAAAECBAgQIECAAAECBAgQIEBgUYGXWWAtmoxjESBAgAABAgQIECBAgAABAgQIPBCwwHIRCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHCBAgQIAAAQIECBAgQIAAAQIElhawwFo6HocjQIAAAQIECBAgQIAAAQIECBCwwHIHXrLA5z//+e0jH/nI9vTTT2/PPvvs9olPfOLBbz7yyCPb933f921vfetbt9e+9rUvuY4fIECAAAECBAgQIECAAAECBDoFLLA6c79Z13//93+/vetd79o+9KEPfdXffNWrXrX9zM/8zPZDP/RD28te9rKb1fZDBAgQIECAAAECBAgQIECAQIeABVZHznfW5f0F1jvf+c4H/wbWj//4j28//MM/vD3++OMP6n3sYx/bfuu3fmv78Ic/vL3mNa/Z3vve927f9m3fdmdn8cMECBAgQIAAAQIECBAgQIDANQUssK6Z61hX9xdYH/zgB7e3vOUt22OPPfbf1X3hhRe2p556avvzP//z7Sd/8ie3n/7pnx47m0IECBAgQIAAAQIECBAgQIDANQQssK6R49Jd/MZv/Mb2e7/3e9v3f//3bz//8z+/vfKVr1z6vA5HgAABAgQIECBAgAABAgQIrCVggbVWHpc8zRcXWPf/La179+5tL3/5yy/Zp6YIECBAgAABAgQIECBAgACBuxGwwLobV7/63wS++Hdk/fEf/7H/CaFbQYAAAQIECBAgQIAAAQIECBwSsMA6xOajhxX40z/90+0XfuEXtle84hX+EveHRfPnCBAgQIAAAQIECBAgQIAAgS8TsMByIe5M4K//+q+3d7zjHdtzzz23/eiP/uj25JNPPlhk+Q8BAgQIECBAgAABAgQIECBAYI+ABdYeLX/2oQU+/elPb+95z3u2D33oQ9sb3vCG7Z3vfOf2jd/4jQ/9vT9IgAABAgQIECBAgAABAgQIEPiigAWWu3BzgfvLq9/8zd/cnn766e3xxx/ffuVXfuXBEuuf/+f+X+p+/z/3/5z/ECBwtwJ/93d/96DAo48+ereF/DoBApt5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MVUPHTqUrrvuunT++ecvPl119tlnn7K35mJx5ZVXpocffjhdf/316c1vfvPiawRYxRwDG5mBgAv+DJrkFYsRMG/FtNJGZiBg3mbQJK9IgACBgQQEWANB1vqYu+66a/HbB7du3ZquvfbatHbt2lMonnrqqUXIdd999y1+RtaOHTsEWLUeGPvOJuCCn41e4QoFzFuFTbflbALmLRu9wgQIEAgXEGCFk5dVUIBVVj/tplwBF/xye2tn0xMwb9PriTcqV8C8ldtbOyNAgMAPCgiwnIleAkMEWL1ewGICBAgQIECAAAECBAgQCBG49957Q+ooQmA5AQGWc9FLoE+A1RRe+jlYvV7CYgIECBAgQIAAAQIECBAYXUCANTqxAi8hIMByPHoJHDx4cPHD2y+88MK0d+/etH79+lOe92I/xL1XYYsJECBAgAABAgQIECBAgACBagQEWNW0epyNPvjgg2n37t1p48aNad++femcc845pdCRI0fSVVddlY4ePboIuTZv3jzOy3gqAQIECBAgQIAAAQIECBAgUKSAAKvItsZtaiXh1AMPPJD27NmzCLc+9alPpde85jVxL6gSAQIECBAgQIAAAQIECBAgMHsBAdbsW5h3AydOnEi33HJLOnDgQLrkkkvSRz7ykbRmzZrnX+qZZ55J+/fvT823Gm7bti3t2rUrrV69Ou9Lq06AAAECBAgQIECAAAECBAjMSkCANat2TfNlm28jYO4RVgAAGI1JREFUbD5hdfz48fTBD34wXXrppWndunXp2LFj6fbbb0933nlnOuOMM9INN9zg2wen2UJvRYAAAQIECBAgQIAAAQIEJi0gwJp0e+bxcs8991y6++6702233ZaeffbZU166+cTV5ZdfnrZv355WrVo1j015SwIECBAgQIAAAQIECBAgQGAyAgKsybRi3i/ShFiHDx9On/vc59JDDz2Unn766cWnsLZs2ZJ27tyZNm3aJLyad4u9PQECBAgQIECAAAECBAgQyCYgwMpGX2fh73//++lLX/pS+ou/+Iv07//+7+mHfuiH0ute97rFp7Oan6H18pe/vE4YuyawAoH/+Z//SX/zN3+TvvjFL6Zvfetbi088nnvuuentb3/74lt3N2zYsIKnLP8lv/3bv52+/OUvn3b91q1b07XXXpvWrl172q/1BQRqFWj+jvut3/qtxaePd+zYUSuD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DwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYXEGCNb6wCAQIECBAgQIAAAQIECBAgQIBADwEBVg88SwkQIECAAAECBAgQIECAAAECBMYX+H8wJo/tPQXuQQAAAABJRU5ErkJggg==
\ No newline at end of file