diff --git a/BikeSharingSystem.sln b/BikeSharingSystem.sln
new file mode 100644
index 0000000..ed38b74
--- /dev/null
+++ b/BikeSharingSystem.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25123.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BikeSharingSystem", "BikeSharingSystem\BikeSharingSystem.csproj", "{30229ED5-2C30-4FF6-AF9D-3DBE32D09320}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {30229ED5-2C30-4FF6-AF9D-3DBE32D09320}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {30229ED5-2C30-4FF6-AF9D-3DBE32D09320}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {30229ED5-2C30-4FF6-AF9D-3DBE32D09320}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {30229ED5-2C30-4FF6-AF9D-3DBE32D09320}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/BikeSharingSystem/2ndCrossOver.cs b/BikeSharingSystem/2ndCrossOver.cs
new file mode 100644
index 0000000..54b1d15
--- /dev/null
+++ b/BikeSharingSystem/2ndCrossOver.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ public enum _2ndCrossOver
+ {
+ LVD,
+ TES,
+ SVD,
+ FBMS,
+ pheromone
+ }
+}
diff --git a/BikeSharingSystem/App.config b/BikeSharingSystem/App.config
new file mode 100644
index 0000000..deaa9e2
--- /dev/null
+++ b/BikeSharingSystem/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/BikeSharingSystem/BikeSharingSystem.csproj b/BikeSharingSystem/BikeSharingSystem.csproj
new file mode 100644
index 0000000..9ce015d
--- /dev/null
+++ b/BikeSharingSystem/BikeSharingSystem.csproj
@@ -0,0 +1,181 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {30229ED5-2C30-4FF6-AF9D-3DBE32D09320}
+ WinExe
+ Properties
+ BikeSharingSystem
+ BikeSharingSystem
+ v4.6
+ 512
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\packages\Newtonsoft.Json.10.0.2\lib\net45\Newtonsoft.Json.dll
+ True
+
+
+ ..\packages\Thrower.4.0.6\lib\net46\PommaLabs.Thrower.dll
+ True
+
+
+ ..\packages\OptimizedPriorityQueue.4.0.0\lib\net45\Priority Queue.dll
+ True
+
+
+
+ ..\packages\System.Collections.NonGeneric.4.3.0\lib\net46\System.Collections.NonGeneric.dll
+ True
+
+
+
+
+ ..\packages\System.Data.Common.4.3.0\lib\net451\System.Data.Common.dll
+ True
+
+
+ ..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
+ True
+
+
+ ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
+ True
+
+
+ ..\packages\System.Reflection.TypeExtensions.4.3.0\lib\net46\System.Reflection.TypeExtensions.dll
+ True
+
+
+
+ ..\packages\System.Runtime.Serialization.Formatters.4.3.0\lib\net46\System.Runtime.Serialization.Formatters.dll
+ True
+
+
+ ..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\TeeChart Library\bin\Release\TeeChart.dll
+
+
+ ..\packages\Troschuetz.Random.4.1.3\lib\net46\Troschuetz.Random.dll
+ True
+
+
+
+
+
+ Form
+
+
+ MainForm.cs
+
+
+
+
+
+
+
+
+
+
+
+
+ MainForm.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}
+ 2
+ 8
+ 0
+ primary
+ False
+ True
+
+
+ {00020813-0000-0000-C000-000000000046}
+ 1
+ 9
+ 0
+ primary
+ False
+ True
+
+
+ {0002E157-0000-0000-C000-000000000046}
+ 5
+ 3
+ 0
+ primary
+ False
+ True
+
+
+
+
+
\ No newline at end of file
diff --git a/BikeSharingSystem/ClassDiagram1.cd b/BikeSharingSystem/ClassDiagram1.cd
new file mode 100644
index 0000000..a6b6259
--- /dev/null
+++ b/BikeSharingSystem/ClassDiagram1.cd
@@ -0,0 +1,94 @@
+
+
+
+
+
+ jBCgAACEUGAQABCgAECEYFgLAgAAEQAAAAAIQCABZAA=
+ Form1.cs
+
+
+
+
+
+ ABIGcAIEABAAEBAACogsBAIMAIQIpoCQKCAEAAhAACA=
+ GA.cs
+
+
+
+
+
+ CAABQAAAABAAAAAAAAJAAAAAAAACAAABAiAAAAgAAAA=
+ PermutationGA.cs
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA=
+ Program.cs
+
+
+
+
+
+ QAAwgEAgAsAAAQYAAAIAAAACAAAEAAAAAAAAABAAIAA=
+ Station.cs
+
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAIgAABAAAAAAAAAAAAAAAAAAAg=
+ Truck.cs
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAABEAAAAQAAAAAAAAAAAAAAAIA=
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAAIAAAAAABAAAAAAAAAAAAAAA=
+
+
+
+
+
+ AQAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ GA.cs
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAA=
+ GA.cs
+
+
+
+
+
+ AAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA=
+ GA.cs
+
+
+
+
+
+ AQAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAA=
+ optimizationtype.cs
+
+
+
+
+
+ AAAAAAAAAAAAAAAAAAAABCAAAAAAAAAAAAAAAAAAAAA=
+ selectionmode.cs
+
+
+
+
\ No newline at end of file
diff --git a/BikeSharingSystem/Form1.Designer.cs b/BikeSharingSystem/Form1.Designer.cs
new file mode 100644
index 0000000..feea3d6
--- /dev/null
+++ b/BikeSharingSystem/Form1.Designer.cs
@@ -0,0 +1,605 @@
+namespace BikeSharingSystem
+{
+ partial class MainForm
+ {
+ ///
+ /// 設計工具所需的變數。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清除任何使用中的資源。
+ ///
+ /// 如果應該處置 Managed 資源則為 true,否則為 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form 設計工具產生的程式碼
+
+ ///
+ /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改
+ /// 這個方法的內容。
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
+ System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
+ System.Windows.Forms.DataVisualization.Charting.Series series5 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series6 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series7 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.Windows.Forms.DataVisualization.Charting.Series series8 = new System.Windows.Forms.DataVisualization.Charting.Series();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.label4 = new System.Windows.Forms.Label();
+ this.dataGridView = new System.Windows.Forms.DataGridView();
+ this.labelMax = new System.Windows.Forms.Label();
+ this.labelBO = new System.Windows.Forms.Label();
+ this.chart = new System.Windows.Forms.DataVisualization.Charting.Chart();
+ this.butpga = new System.Windows.Forms.Button();
+ this.ppg = new System.Windows.Forms.PropertyGrid();
+ this.butrun1 = new System.Windows.Forms.Button();
+ this.butreset = new System.Windows.Forms.Button();
+ this.butrunend = new System.Windows.Forms.Button();
+ this.tabPage = new System.Windows.Forms.TabPage();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.richTextBox = new System.Windows.Forms.RichTextBox();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.tabControl3 = new System.Windows.Forms.TabControl();
+ this.tabPage5 = new System.Windows.Forms.TabPage();
+ this.checkBoxGreedy = new System.Windows.Forms.CheckBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txbspeed = new System.Windows.Forms.TextBox();
+ this.label8 = new System.Windows.Forms.Label();
+ this.label7 = new System.Windows.Forms.Label();
+ this.txbcapacity = new System.Windows.Forms.TextBox();
+ this.txbtimehorizon = new System.Windows.Forms.TextBox();
+ this.label6 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.label1 = new System.Windows.Forms.Label();
+ this.tabPage6 = new System.Windows.Forms.TabPage();
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
+ this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+ this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+ this.checkBox = new System.Windows.Forms.CheckBox();
+ this.tabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.chart)).BeginInit();
+ this.tabPage.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.tabControl3.SuspendLayout();
+ this.tabPage5.SuspendLayout();
+ this.toolStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tabControl1
+ //
+ this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage);
+ this.tabControl1.Location = new System.Drawing.Point(4, 1);
+ this.tabControl1.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(2365, 977);
+ this.tabControl1.TabIndex = 2;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.label4);
+ this.tabPage1.Controls.Add(this.dataGridView);
+ this.tabPage1.Controls.Add(this.labelMax);
+ this.tabPage1.Controls.Add(this.labelBO);
+ this.tabPage1.Controls.Add(this.chart);
+ this.tabPage1.Controls.Add(this.butpga);
+ this.tabPage1.Controls.Add(this.ppg);
+ this.tabPage1.Controls.Add(this.butrun1);
+ this.tabPage1.Controls.Add(this.butreset);
+ this.tabPage1.Controls.Add(this.butrunend);
+ this.tabPage1.Location = new System.Drawing.Point(4, 34);
+ this.tabPage1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage1.Size = new System.Drawing.Size(2357, 939);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "reslut";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(340, 465);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(340, 25);
+ this.label4.TabIndex = 14;
+ this.label4.Text = "unsatisfied amount of each station";
+ //
+ // dataGridView
+ //
+ this.dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ this.dataGridView.Location = new System.Drawing.Point(345, 493);
+ this.dataGridView.Name = "dataGridView";
+ this.dataGridView.RowTemplate.Height = 27;
+ this.dataGridView.Size = new System.Drawing.Size(1113, 279);
+ this.dataGridView.TabIndex = 13;
+ //
+ // labelMax
+ //
+ this.labelMax.AutoSize = true;
+ this.labelMax.Location = new System.Drawing.Point(926, 27);
+ this.labelMax.Name = "labelMax";
+ this.labelMax.Size = new System.Drawing.Size(62, 25);
+ this.labelMax.TabIndex = 12;
+ this.labelMax.Text = "Max :";
+ //
+ // labelBO
+ //
+ this.labelBO.AutoSize = true;
+ this.labelBO.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.labelBO.ForeColor = System.Drawing.Color.Navy;
+ this.labelBO.Location = new System.Drawing.Point(355, 27);
+ this.labelBO.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.labelBO.Name = "labelBO";
+ this.labelBO.Size = new System.Drawing.Size(117, 25);
+ this.labelBO.TabIndex = 8;
+ this.labelBO.Text = "BestObject";
+ //
+ // chart
+ //
+ this.chart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ chartArea2.AxisX.Title = "iteration";
+ chartArea2.AxisX2.Title = "objective";
+ chartArea2.AxisY.Title = "objective";
+ chartArea2.AxisY2.Title = "objective";
+ chartArea2.BackColor = System.Drawing.Color.White;
+ chartArea2.Name = "ChartArea1";
+ this.chart.ChartAreas.Add(chartArea2);
+ legend2.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
+ legend2.Name = "Legend1";
+ this.chart.Legends.Add(legend2);
+ this.chart.Location = new System.Drawing.Point(297, 57);
+ this.chart.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.chart.Name = "chart";
+ series5.BorderColor = System.Drawing.Color.Black;
+ series5.BorderWidth = 5;
+ series5.ChartArea = "ChartArea1";
+ series5.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+ series5.Color = System.Drawing.Color.Lime;
+ series5.Legend = "Legend1";
+ series5.MarkerBorderWidth = 5;
+ series5.Name = "iteration average";
+ series6.BorderWidth = 5;
+ series6.ChartArea = "ChartArea1";
+ series6.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+ series6.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
+ series6.Legend = "Legend1";
+ series6.Name = "iteration best";
+ series7.BorderWidth = 5;
+ series7.ChartArea = "ChartArea1";
+ series7.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+ series7.Color = System.Drawing.Color.Red;
+ series7.Legend = "Legend1";
+ series7.Name = "sofar the best";
+ series8.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Dash;
+ series8.BorderWidth = 5;
+ series8.ChartArea = "ChartArea1";
+ series8.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
+ series8.Color = System.Drawing.Color.DarkOrchid;
+ series8.Legend = "Legend1";
+ series8.Name = "not do anything cost";
+ this.chart.Series.Add(series5);
+ this.chart.Series.Add(series6);
+ this.chart.Series.Add(series7);
+ this.chart.Series.Add(series8);
+ this.chart.Size = new System.Drawing.Size(1161, 441);
+ this.chart.TabIndex = 8;
+ this.chart.Text = "chart";
+ //
+ // butpga
+ //
+ this.butpga.Font = new System.Drawing.Font("新細明體", 13.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butpga.Location = new System.Drawing.Point(31, 39);
+ this.butpga.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butpga.Name = "butpga";
+ this.butpga.Size = new System.Drawing.Size(249, 78);
+ this.butpga.TabIndex = 7;
+ this.butpga.Text = "create permutation GA";
+ this.butpga.UseVisualStyleBackColor = true;
+ this.butpga.Click += new System.EventHandler(this.createPGA);
+ //
+ // ppg
+ //
+ this.ppg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.ppg.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
+ this.ppg.Location = new System.Drawing.Point(31, 429);
+ this.ppg.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.ppg.Name = "ppg";
+ this.ppg.Size = new System.Drawing.Size(258, 329);
+ this.ppg.TabIndex = 7;
+ //
+ // butrun1
+ //
+ this.butrun1.Font = new System.Drawing.Font("新細明體", 16.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butrun1.Location = new System.Drawing.Point(31, 215);
+ this.butrun1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butrun1.Name = "butrun1";
+ this.butrun1.Size = new System.Drawing.Size(249, 88);
+ this.butrun1.TabIndex = 11;
+ this.butrun1.Text = "one iteration";
+ this.butrun1.UseVisualStyleBackColor = true;
+ this.butrun1.Click += new System.EventHandler(this.oneIteration);
+ //
+ // butreset
+ //
+ this.butreset.Font = new System.Drawing.Font("新細明體", 16.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butreset.Location = new System.Drawing.Point(31, 127);
+ this.butreset.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butreset.Name = "butreset";
+ this.butreset.Size = new System.Drawing.Size(249, 72);
+ this.butreset.TabIndex = 10;
+ this.butreset.Text = "reset";
+ this.butreset.UseVisualStyleBackColor = true;
+ this.butreset.Click += new System.EventHandler(this.reset);
+ //
+ // butrunend
+ //
+ this.butrunend.Font = new System.Drawing.Font("新細明體", 16.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butrunend.Location = new System.Drawing.Point(31, 320);
+ this.butrunend.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butrunend.Name = "butrunend";
+ this.butrunend.Size = new System.Drawing.Size(249, 80);
+ this.butrunend.TabIndex = 9;
+ this.butrunend.Text = "run to end";
+ this.butrunend.UseVisualStyleBackColor = true;
+ this.butrunend.Click += new System.EventHandler(this.runToEnd);
+ //
+ // tabPage
+ //
+ this.tabPage.Controls.Add(this.button3);
+ this.tabPage.Controls.Add(this.button2);
+ this.tabPage.Controls.Add(this.button1);
+ this.tabPage.Controls.Add(this.richTextBox);
+ this.tabPage.Location = new System.Drawing.Point(4, 34);
+ this.tabPage.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage.Name = "tabPage";
+ this.tabPage.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage.Size = new System.Drawing.Size(2357, 939);
+ this.tabPage.TabIndex = 1;
+ this.tabPage.Text = "solutions";
+ this.tabPage.UseVisualStyleBackColor = true;
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(958, 330);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(216, 97);
+ this.button3.TabIndex = 3;
+ this.button3.Text = "neighbor Search";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.NBS);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(958, 198);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(216, 86);
+ this.button2.TabIndex = 2;
+ this.button2.Text = "Dijkstra";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.nearestInsert);
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(958, 42);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(216, 101);
+ this.button1.TabIndex = 1;
+ this.button1.Text = "Route By Emergency Rate";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.getlowerbound);
+ //
+ // richTextBox
+ //
+ this.richTextBox.Location = new System.Drawing.Point(20, 42);
+ this.richTextBox.Name = "richTextBox";
+ this.richTextBox.Size = new System.Drawing.Size(879, 499);
+ this.richTextBox.TabIndex = 0;
+ this.richTextBox.Text = "";
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.splitContainer1.Location = new System.Drawing.Point(0, 30);
+ this.splitContainer1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.splitContainer1.Name = "splitContainer1";
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.tabControl3);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.tabControl1);
+ this.splitContainer1.Size = new System.Drawing.Size(2078, 986);
+ this.splitContainer1.SplitterDistance = 407;
+ this.splitContainer1.SplitterWidth = 6;
+ this.splitContainer1.TabIndex = 3;
+ //
+ // tabControl3
+ //
+ this.tabControl3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl3.Controls.Add(this.tabPage5);
+ this.tabControl3.Controls.Add(this.tabPage6);
+ this.tabControl3.Location = new System.Drawing.Point(4, 5);
+ this.tabControl3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabControl3.Name = "tabControl3";
+ this.tabControl3.SelectedIndex = 0;
+ this.tabControl3.Size = new System.Drawing.Size(403, 1023);
+ this.tabControl3.TabIndex = 0;
+ //
+ // tabPage5
+ //
+ this.tabPage5.Controls.Add(this.checkBoxGreedy);
+ this.tabPage5.Controls.Add(this.label2);
+ this.tabPage5.Controls.Add(this.txbspeed);
+ this.tabPage5.Controls.Add(this.label8);
+ this.tabPage5.Controls.Add(this.label7);
+ this.tabPage5.Controls.Add(this.txbcapacity);
+ this.tabPage5.Controls.Add(this.txbtimehorizon);
+ this.tabPage5.Controls.Add(this.label6);
+ this.tabPage5.Controls.Add(this.label3);
+ this.tabPage5.Controls.Add(this.label1);
+ this.tabPage5.Location = new System.Drawing.Point(4, 34);
+ this.tabPage5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage5.Name = "tabPage5";
+ this.tabPage5.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage5.Size = new System.Drawing.Size(395, 985);
+ this.tabPage5.TabIndex = 0;
+ this.tabPage5.Text = "參數設定";
+ this.tabPage5.UseVisualStyleBackColor = true;
+ //
+ // checkBoxGreedy
+ //
+ this.checkBoxGreedy.AutoSize = true;
+ this.checkBoxGreedy.Location = new System.Drawing.Point(12, 351);
+ this.checkBoxGreedy.Name = "checkBoxGreedy";
+ this.checkBoxGreedy.Size = new System.Drawing.Size(291, 29);
+ this.checkBoxGreedy.TabIndex = 9;
+ this.checkBoxGreedy.Text = "reset with greedy algorithm";
+ this.checkBoxGreedy.UseVisualStyleBackColor = true;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(285, 155);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(95, 25);
+ this.label2.TabIndex = 8;
+ this.label2.Text = "km/mins";
+ //
+ // txbspeed
+ //
+ this.txbspeed.Location = new System.Drawing.Point(175, 152);
+ this.txbspeed.Name = "txbspeed";
+ this.txbspeed.Size = new System.Drawing.Size(100, 34);
+ this.txbspeed.TabIndex = 7;
+ this.txbspeed.Text = "0.6666";
+ this.txbspeed.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(285, 98);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(86, 25);
+ this.label8.TabIndex = 6;
+ this.label8.Text = "amount";
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(285, 42);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(57, 25);
+ this.label7.TabIndex = 5;
+ this.label7.Text = "mins";
+ //
+ // txbcapacity
+ //
+ this.txbcapacity.Location = new System.Drawing.Point(175, 98);
+ this.txbcapacity.Name = "txbcapacity";
+ this.txbcapacity.Size = new System.Drawing.Size(100, 34);
+ this.txbcapacity.TabIndex = 4;
+ this.txbcapacity.Text = "14";
+ this.txbcapacity.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // txbtimehorizon
+ //
+ this.txbtimehorizon.Location = new System.Drawing.Point(175, 39);
+ this.txbtimehorizon.Name = "txbtimehorizon";
+ this.txbtimehorizon.Size = new System.Drawing.Size(100, 34);
+ this.txbtimehorizon.TabIndex = 3;
+ this.txbtimehorizon.Text = "120";
+ this.txbtimehorizon.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(7, 161);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(127, 25);
+ this.label6.TabIndex = 2;
+ this.label6.Text = "Truck Speed";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(3, 98);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(148, 25);
+ this.label3.TabIndex = 1;
+ this.label3.Text = "Truck Capacity";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(4, 42);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(179, 25);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Planning Horizon";
+ //
+ // tabPage6
+ //
+ this.tabPage6.Location = new System.Drawing.Point(4, 25);
+ this.tabPage6.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage6.Name = "tabPage6";
+ this.tabPage6.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage6.Size = new System.Drawing.Size(395, 994);
+ this.tabPage6.TabIndex = 1;
+ this.tabPage6.Text = "tabPage6";
+ this.tabPage6.UseVisualStyleBackColor = true;
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton1,
+ this.toolStripButton2});
+ this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(1906, 27);
+ this.toolStrip1.TabIndex = 4;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // toolStripButton1
+ //
+ this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+ this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton1.Name = "toolStripButton1";
+ this.toolStripButton1.Size = new System.Drawing.Size(95, 24);
+ this.toolStripButton1.Text = "OpenFile";
+ this.toolStripButton1.Click += new System.EventHandler(this.openfile);
+ //
+ // toolStripButton2
+ //
+ this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
+ this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton2.Name = "toolStripButton2";
+ this.toolStripButton2.Size = new System.Drawing.Size(117, 24);
+ this.toolStripButton2.Text = "SaveToExcel";
+ //
+ // openFileDialog
+ //
+ this.openFileDialog.FileName = "openFileDialog1";
+ //
+ // checkBox
+ //
+ this.checkBox.AutoSize = true;
+ this.checkBox.Location = new System.Drawing.Point(291, 0);
+ this.checkBox.Name = "checkBox";
+ this.checkBox.Size = new System.Drawing.Size(212, 29);
+ this.checkBox.TabIndex = 5;
+ this.checkBox.Text = "Create Status Table";
+ this.checkBox.UseVisualStyleBackColor = true;
+ //
+ // MainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1906, 904);
+ this.Controls.Add(this.checkBox);
+ this.Controls.Add(this.toolStrip1);
+ this.Controls.Add(this.splitContainer1);
+ this.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.Name = "MainForm";
+ this.Text = "tester";
+ this.tabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage1.PerformLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.chart)).EndInit();
+ this.tabPage.ResumeLayout(false);
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+ this.splitContainer1.ResumeLayout(false);
+ this.tabControl3.ResumeLayout(false);
+ this.tabPage5.ResumeLayout(false);
+ this.tabPage5.PerformLayout();
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.TabPage tabPage;
+ private System.Windows.Forms.DataVisualization.Charting.Chart chart;
+ private System.Windows.Forms.Button butrun1;
+ private System.Windows.Forms.Button butreset;
+ private System.Windows.Forms.Button butrunend;
+ private System.Windows.Forms.PropertyGrid ppg;
+ private System.Windows.Forms.Label labelBO;
+ private System.Windows.Forms.Button butpga;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.TabControl tabControl3;
+ private System.Windows.Forms.TabPage tabPage5;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.TextBox txbcapacity;
+ private System.Windows.Forms.TextBox txbtimehorizon;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TabPage tabPage6;
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.ToolStripButton toolStripButton1;
+ private System.Windows.Forms.ToolStripButton toolStripButton2;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txbspeed;
+ private System.Windows.Forms.OpenFileDialog openFileDialog;
+ private System.Windows.Forms.SaveFileDialog saveFileDialog;
+ private System.Windows.Forms.RichTextBox richTextBox;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Label labelMax;
+ private System.Windows.Forms.CheckBox checkBox;
+ private System.Windows.Forms.DataGridView dataGridView;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.CheckBox checkBoxGreedy;
+ }
+}
+
diff --git a/BikeSharingSystem/Form1.cs b/BikeSharingSystem/Form1.cs
new file mode 100644
index 0000000..ae5588d
--- /dev/null
+++ b/BikeSharingSystem/Form1.cs
@@ -0,0 +1,898 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Windows.Forms.DataVisualization.Charting;
+
+namespace BikeSharingSystem
+{
+ public partial class MainForm : Form
+ {
+ public MainForm()
+ {
+ InitializeComponent();
+ }
+ public static double MovingTime = 1;
+ PermutationGA pga = null;
+ double[,] distanceMatrix;
+ double[] startTOvertex;
+ string[] initialGoods;
+ int[] PandD;
+ int[] BestRouting; //其實是因為懶得再decode一次 所以用額外的記憶體印出答案
+ double timehorizon;
+ double totalDistance = 0;
+ double speed;
+ double NotDoAnything = 0;
+ int truckcapacity;
+ int totalStation;
+ int finishStation;
+ int soFarfinishStation; //so far the best solution complete station amount
+ Station[] stations;
+ private void reset(object sender, EventArgs e)
+ {
+ //pga = new PermutationGA(totalStation*2+2, OptimizationType.Min,ComputeTimeAverageHoldingShortageLevel,stations);
+ //timehorizon = Convert.ToDouble(txbtimehorizon.Text.ToString());
+ speed = Convert.ToDouble(txbspeed.Text.ToString());
+ truckcapacity = pga.TruckCapacity;
+ //truckcapacity = Convert.ToInt32(txbcapacity.Text.ToString());
+ //pga.TruckCapacity = truckcapacity;
+ //pga.TimeHorizon = timehorizon;
+ if (checkBoxGreedy.Checked == true)
+ {
+ pga.Greedyinitialize(distanceMatrix,startTOvertex);
+ }
+ else
+ {
+ pga.reset();
+ }
+
+ for(int i = 0; i < stations.Length; i++)
+ {
+ stations[i].currentGoods = Convert.ToInt32(initialGoods[i]);
+ stations[i].Locker = (int)stations[i].Capacity - stations[i].currentGoods;
+ }
+ foreach (Series s in chart.Series)
+ {
+ s.Points.Clear();
+ }
+ richTextBox.Clear();
+ min = Double.MaxValue;
+ labelBO.Text = "BestObjective ";
+ NotDoAnything = 0;
+ Truck uselesstruck = new Truck(truckcapacity, 0);
+ for (int i = 0; i < totalStation; i++)
+ {
+ NotDoAnything += HoldingShortageSurplus(timehorizon, i, 0, ref uselesstruck);
+ }
+ //update data grid view
+ //dataGridView.Rows.Clear();
+ //dataGridView.Columns.Clear();
+
+ //for (int m = 0; m < this.numberOfJobs; m = c + 1)
+ //{
+ // dataGridView1.Rows[l].Cells[m].Value = this.setupTimes[l, m];
+ // c = m;
+ //}
+
+
+ }
+
+ private void createPGA(object sender, EventArgs e)
+ {
+ butreset.Enabled = true;
+ butrun1.Enabled = true;
+ butrunend.Enabled = true;
+ pga = new PermutationGA(totalStation*2+2, OptimizationType.Min, new GA.ObjectiveFunctionDelegate(ComputeTimeAverageHoldingShortageLevel),stations,distanceMatrix);
+ this.ppg.SelectedObject = this.pga;
+ }
+
+ private void oneIteration(object sender, EventArgs e)
+ {
+ pga.executeOneIteration();
+ chart.Series[0].Points.AddXY((double)pga.IterationCount, pga.IterationAverage);
+ chart.Series[1].Points.AddXY((double)pga.IterationCount, pga.IterationBestObjective);
+ chart.Series[2].Points.AddXY((double)pga.IterationCount, pga.SoFarTheBestObjective);
+
+ double unsatisfiedAmount = pga.SoFarTheBestObjective;
+ labelBO.Text = "BestObjective " + Convert.ToString(unsatisfiedAmount);
+ labelBO.Text.ToString();
+ richTextBox.Text = "繞站順序: depot " ;
+ for(int i = 0; i < soFarfinishStation+1; i++)
+ {
+ //我忘記解碼fuck fuck fuck fuck fuck fuck !!
+ // richTextBox.Text += pga.SoFarTheBestSolution[i].ToString()+" ";
+ richTextBox.Text += BestRouting[i].ToString() + " ";
+ }
+ // int[] a = Decode(pga.SoFarTheBestSolution); debug用
+ if (soFarfinishStation == totalStation - 1)
+ {
+ richTextBox.Text += "depot";
+ }
+ double totalPandD = 0;
+ richTextBox.Text +="\n"+"pickup & delivery amount: ";
+ for(int i = 0; i <= soFarfinishStation; i++)
+ {
+ richTextBox.Text += PandD[i].ToString() + " ";
+ totalPandD += Math.Abs(PandD[i]);
+ }
+
+ richTextBox.Text += "\n" + "truck start time: " + pga.SoFarTheBestSolution[totalStation * 2 + 1];
+ richTextBox.Text += "\n" + "truck initial common goods: " + pga.SoFarTheBestSolution[totalStation * 2];
+ totalDistance = 0;
+ // totalDistance += startTOvertex[pga.SoFarTheBestSolution[0]]; //抵達第一站的距離
+ //string dist = null;
+ totalDistance += startTOvertex[BestRouting[0]]; //抵達第一站的距離
+ //dist = totalDistance.ToString()+"->";
+ for (int i = 0; i < soFarfinishStation; i++)
+ {
+ totalDistance += distanceMatrix[BestRouting[i], BestRouting[i + 1]];
+ //dist += distanceMatrix[BestRouting[i], BestRouting[i + 1]].ToString() + "->";
+ }
+ if(totalDistance >= speed*timehorizon) { throw new Exception("bug!!!"); }
+ //全部跑完要回去depot
+ if (soFarfinishStation == totalStation - 1)
+ {
+ totalDistance += startTOvertex[BestRouting[soFarfinishStation]];
+ //dist += startTOvertex[BestRouting[soFarfinishStation]].ToString() + "->";
+ }
+ richTextBox.Text +="\n"+ "*******performance*******";
+ richTextBox.Text += "\n" + "Total pickup & delivery : " + (totalPandD+ pga.SoFarTheBestSolution[totalStation * 2]);
+ richTextBox.Text += "\n" + "total distance :" + totalDistance;
+ richTextBox.Text += "\n" + "unsatisfication amount :" + unsatisfiedAmount;
+ richTextBox.Text += "\n"+"without action :"+NotDoAnything;
+ richTextBox.Text += "\n" + "improvement rate :" + Math.Round((unsatisfiedAmount / NotDoAnything),2)+"\n";
+ //richTextBox.AppendText("routing distance "+dist);
+
+
+ labelMax.Text ="Max :" + NotDoAnything.ToString();
+ chart.Series[3].Points.AddXY((double)pga.IterationCount, NotDoAnything);
+
+ // chart.Update();
+ //讓圖形跑超過50代次時可跑的較緩慢
+ //if ((pga.IterationCount > 50) && (!pga.terminationConditionMet())) { Cursor = System.Windows.Forms.Cursors.WaitCursor; }
+ //else { Cursor = System.Windows.Forms.Cursors.Default; }
+ }
+
+ private void runToEnd(object sender, EventArgs e)
+ {
+ for (int i = 0; i < pga.IterationLimit; i++)
+ {
+ oneIteration(null, null);
+ }
+ ppg.Update();
+ }
+ double min = Double.MaxValue;
+
+ private double ComputeTimeAverageHoldingShortageLevel(int[] chromosomes)
+ {
+
+ Truck truck = new Truck(truckcapacity, chromosomes[totalStation * 2]);
+ //period為卡車起始出發時間
+ double USA = 0; //USA = unsatisfied amount
+ double period = chromosomes[totalStation * 2 + 1]; //利用distancematrix除以車速即可得到現在的時間
+ double totalUSA = NotDoAnything;
+ totalDistance = 0;
+ int[] routingSequence = Decode(chromosomes);
+ period += (startTOvertex[routingSequence[0]] / speed);//抵達第一站的時間
+ // totalDistance += startTOvertex[routingSequence[0]]; //抵達第一站的距離
+ int i = 0; int[] temp = new int[totalStation];
+ while (period <= timehorizon && i < totalStation - 1)
+ {
+ if(i == 0) { totalUSA = 0; }
+ temp[i] = truck.PickupDelivery(chromosomes[routingSequence[i] + totalStation]);
+ USA = HoldingShortageSurplus(period, routingSequence[i], temp[i],ref truck);
+ totalUSA += USA;
+ period += ((distanceMatrix[routingSequence[i], routingSequence[i + 1]] / speed ));//到下一站的時間點
+ //totalDistance += distanceMatrix[routingSequence[i], routingSequence[i + 1]];
+ i++;
+ //update datagrid view for debugging
+ if(checkBox.Checked == true)
+ {
+ dataGridView.Rows[0].Cells[routingSequence[i]].Value = USA.ToString();
+ }
+ }
+ if (i != 0 && period <= timehorizon)
+ {
+ //因為上面最後一次不會做到所以...
+ temp[i] = truck.PickupDelivery(chromosomes[routingSequence[i] + totalStation]);
+ USA = HoldingShortageSurplus(period, routingSequence[i], temp[i], ref truck);
+ totalUSA += USA;
+ finishStation = i;
+ }else if(i != 0) { finishStation = i-1; }
+
+
+ if (finishStation != totalStation - 1)
+ {
+ //沒有跑完的車站繼續算成本
+ for (int a = finishStation; a < totalStation ; a++)
+ {
+ USA= HoldingShortageSurplus(timehorizon, routingSequence[a], 0,ref truck);
+ totalUSA += USA;
+ if (checkBox.Checked == true)
+ {
+ dataGridView.Rows[0].Cells[routingSequence[a]].Value = USA.ToString();
+ }
+ }
+ }
+ if(min > totalUSA)
+ {
+ min = totalUSA;
+ soFarfinishStation = finishStation;
+ temp.CopyTo(PandD,0);
+ routingSequence.CopyTo(BestRouting, 0);
+ }
+ return totalUSA;
+ }
+ //其實該list的第0個的值是第1站被繞行的順序
+ private int[]Decode(int[] chromosome)
+ {
+ int[] routingSequence = new int[totalStation];
+ int[] temp = new int[totalStation];
+ for(int i = 0; i < totalStation; i++)
+ {
+ temp[i] = chromosome[i];routingSequence[i] = i ; //when you add depot location just amend it
+ }
+ Array.Sort(temp, routingSequence);
+ return routingSequence;
+ }
+ ///
+ /// 其實還沒考慮過初始站點的bike amount為0時的情況,如果有會fail
+ ///
+ /// 卡車出發時點
+ /// station id
+ /// GA求解後pick up or delivery的數量
+ ///
+ private double HoldingShortageSurplus(double starttime,int stationID ,int commodity,ref Truck truck)
+ {
+ double bikeAmount = 0;
+ double accumulatedtime = 0;
+ // Truck t = truck;
+ if (stations[stationID].Declinebymin < 0) //deliver bicycle to the station commodity must be positive
+ {
+ double lackTime = 0.0;
+ //卡車到達該站時該站的腳踏車就沒ㄌ
+ if ( stations[stationID].currentGoods / stations[stationID].Declinebymin * -1 < starttime)
+ {
+ lackTime = stations[stationID].currentGoods / stations[stationID].Declinebymin * -1;
+ accumulatedtime = starttime - lackTime;
+ bikeAmount += stations[stationID].Declinebymin * accumulatedtime*-1;
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ if (stations[stationID].Capacity >= commodity)//如果給的數量超過站的容量就G囉
+ {
+ stations[stationID].currentGoods = commodity;
+ }
+ else
+ {
+ stations[stationID].currentGoods = stations[stationID].Capacity;
+ truck.CurrentGoods += (commodity - (int)stations[stationID].Capacity);
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ }
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if(stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ if (commodity != 0)
+ {
+ lackTime = stations[stationID].currentGoods / stations[stationID].Declinebymin * -1 + starttime;//又缺為0時
+ if (timehorizon >= lackTime)
+ {
+ bikeAmount += stations[stationID].Declinebymin * (timehorizon - lackTime) * -1;
+ }
+ }
+ else
+ {
+ if (timehorizon >= lackTime)
+ {
+ bikeAmount = (timehorizon - lackTime) * stations[stationID].Declinebymin * -1;
+ }
+ }
+ }
+ else
+ {
+ stations[stationID].currentGoods = Convert.ToInt32( stations[stationID].currentGoods + starttime * stations[stationID].Declinebymin);
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ if (stations[stationID].currentGoods + commodity <= stations[stationID].Capacity)
+ {
+ stations[stationID].currentGoods += (commodity);
+ }
+ else //卡車送的超出站可以負荷的輛
+ {
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (int)(commodity - stations[stationID].Locker);
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ stations[stationID].currentGoods = stations[stationID].Capacity;
+ if (truck.CurrentGoods > truckcapacity || truck.CurrentSpace < 0)
+ {
+ throw new Exception();
+ }
+ }
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ lackTime = stations[stationID].currentGoods / stations[stationID].Declinebymin*-1 + starttime;
+ if (timehorizon > lackTime)
+ {
+ bikeAmount += stations[stationID].Declinebymin * (timehorizon - lackTime)*-1;
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ }
+ }
+ stations[stationID].currentGoods = Convert.ToInt32(initialGoods[stationID]);
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ return bikeAmount;
+ }
+ else if(stations[stationID].Surplusbymin > 0) //pickup bicycle station commodity must be negative
+ {
+ double surplustime;
+ //卡車到達該站時該站的腳踏車就滿ㄌ
+ if (stations[stationID].Locker/stations[stationID].Surplusbymin < starttime)
+ {
+ surplustime = stations[stationID].Locker/stations[stationID].Surplusbymin;
+ accumulatedtime = starttime - surplustime;
+ bikeAmount += stations[stationID].Surplusbymin * accumulatedtime;
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ if (stations[stationID].Capacity >= -commodity)
+ {
+ stations[stationID].Locker = -1 * commodity;
+ }
+ else
+ {
+ stations[stationID].Locker = stations[stationID].Capacity;
+ truck.CurrentSpace -= (int)(commodity + stations[stationID].Capacity);
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ }
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ if (commodity != 0)
+ {
+ stations[stationID].currentGoods = stations[stationID].Capacity - stations[stationID].Locker;
+ surplustime = stations[stationID].Locker / stations[stationID].Surplusbymin + starttime;//又滿時
+ if (surplustime < timehorizon)
+ {
+ bikeAmount += stations[stationID].Surplusbymin * (timehorizon - surplustime);
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ }
+ }
+ else
+ {
+ stations[stationID].currentGoods = stations[stationID].Capacity - stations[stationID].Locker;
+ if (surplustime < timehorizon)
+ {
+ bikeAmount = (timehorizon - surplustime) * stations[stationID].Surplusbymin;
+ }
+ }
+ }
+ else
+ {
+ stations[stationID].currentGoods = Convert.ToInt32(stations[stationID].currentGoods + starttime * stations[stationID].Surplusbymin);
+ if (stations[stationID].currentGoods + commodity >= 0)
+ {
+ stations[stationID].Locker = stations[stationID].Capacity - (stations[stationID].currentGoods + commodity);
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ }
+ else //該站已經不能再拿走貨物ㄌ不然就會變成負的
+ {
+ truck.CurrentSpace -= (int)(commodity + stations[stationID].currentGoods);
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ stations[stationID].Locker = 0;
+ //改變卡車上的貨物數量
+ if (truck.CurrentGoods > truckcapacity || truck.CurrentSpace < 0)
+ {
+ throw new Exception();
+ }
+ }
+ surplustime = stations[stationID].Locker / stations[stationID].Surplusbymin + starttime;
+ if (surplustime < timehorizon)
+ {
+ bikeAmount += stations[stationID].Surplusbymin * (timehorizon - surplustime);
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ }
+ }
+
+ stations[stationID].currentGoods = Convert.ToInt32(initialGoods[stationID]);
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (stations[stationID].Locker < 0) { throw new Exception("bug is here !!"); }
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ return bikeAmount;
+ }
+ return 0;
+ }
+
+ private void openfile(object sender, EventArgs e)
+ {
+ dataGridView.Rows.Clear();dataGridView.Columns.Clear();
+ if (openFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ StreamReader sr = new StreamReader(openFileDialog.FileName);
+ totalStation = Convert.ToInt32( sr.ReadLine().ToString());
+ timehorizon = Convert.ToDouble(sr.ReadLine());txbtimehorizon.Text = timehorizon.ToString();
+ truckcapacity = Convert.ToInt32(sr.ReadLine()); txbcapacity.Text = truckcapacity.ToString();
+ speed = Convert.ToDouble(sr.ReadLine());txbspeed.Text = speed.ToString();
+
+ initialGoods = sr.ReadLine().Split(',');
+ string[]capacity = sr.ReadLine().Split(',');
+ string[] rate = sr.ReadLine().Split(',');
+ string[] distance = sr.ReadLine().Split(',');
+ string[] startTOother = sr.ReadLine().Split(',');
+ stations = new Station[totalStation];
+ distanceMatrix = new double[totalStation, totalStation];
+ startTOvertex = new double[totalStation];
+
+ for(int i = 0; i < stations.Length; i++)
+ {
+ stations[i] = new Station(Convert.ToInt32(capacity[i]), Convert.ToInt32(initialGoods[i]), i, Convert.ToDouble(rate[i]));
+ }
+ //for benchmark
+ // stations[1].currentGoods = 40;stations[1].currentSpace = 0;
+ int c = 0;
+ //目前仍不知道倉儲的位子
+ for(int i = 0; i < totalStation; i++)
+ {
+ for(int j = 0; j < totalStation; j++)
+ {
+ distanceMatrix[i, j] = Convert.ToDouble(distance[c]);
+ c++;
+ }
+ }
+ //加入從depot到其他vertex的距離
+ for(int i = 0; i < totalStation; i++)
+ {
+ startTOvertex[i] = Convert.ToDouble(startTOother[i]);
+ }
+ PandD = new int[totalStation];
+ BestRouting = new int[totalStation];
+ sr.Close();
+
+ if (checkBox.Checked == true)
+ {
+ for (int k = 0; k < totalStation; k++)
+ {
+ dataGridView.Columns.Add("station"+stations[k].StationID.ToString(),"station"+stations[k].StationID.ToString());
+ dataGridView.Columns[k].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[k].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[k].HeaderCell.Value = "station" + stations[k].StationID.ToString();
+ }
+
+ dataGridView.Rows.Add();
+ dataGridView.Rows[0].HeaderCell.ValueType = typeof(string);
+ dataGridView.Rows[0].HeaderCell.Value = "cost";
+ }
+ }
+
+ }
+
+ private void getlowerbound(object sender, EventArgs e)
+ {
+ totalDistance = 0;
+ Station[] ss = new Station[totalStation];
+ //從0開始出發每次都找最短距離作為他的下一站
+ stations.CopyTo(ss, 0);
+ Array.Sort(ss);
+ Station[] Sequence = new Station[totalStation];
+ int j = 0;
+ for (int i = totalStation - 1; i > -1; i--)
+ {
+ Sequence[j] = ss[i];j++;
+ }
+ double period = 0; //利用distancematrix除以車速即可得到現在的時間
+ double cost = 0.0;
+ period += (startTOvertex[Sequence[0].StationID] / speed );//抵達第一站的時間
+ totalDistance += startTOvertex[Sequence[0].StationID]; //抵達第一站的距離
+ int a = 0;Truck truck = new Truck(truckcapacity, truckcapacity/2);
+ int[] temp = new int[totalStation];
+ while(period <= timehorizon && a < totalStation - 1)
+ {
+
+ if (Sequence[a].Declinebymin < 0)
+ {
+ temp[a] = truck.PickupDelivery(truckcapacity/2);
+ cost += HoldingShortageSurplus(period, Sequence[a].StationID,temp[a],ref truck);
+ }
+ else if (Sequence[a].Surplusbymin > 0)
+ {
+ temp[a] = truck.PickupDelivery(-truckcapacity/2);
+ cost += HoldingShortageSurplus(period, Sequence[a].StationID,temp[a], ref truck);
+ }
+
+ period += distanceMatrix[Sequence[a].StationID, Sequence[a + 1].StationID] /speed;//到下一站的時間點
+ totalDistance += distanceMatrix[Sequence[a].StationID, Sequence[a + 1].StationID];
+ a++;
+ }
+ if(totalDistance >= speed * timehorizon) { totalDistance-= distanceMatrix[Sequence[a-1].StationID, Sequence[a].StationID]; }
+ //因為上面最後一次部會做所以...
+ if (Sequence[a].Declinebymin < 0 && period <= timehorizon)
+ {
+ temp[a] = truck.PickupDelivery(truckcapacity/2);
+ cost += HoldingShortageSurplus(period, Sequence[a].StationID, temp[a], ref truck);
+ }
+ else if(Sequence[a].Surplusbymin > 0 && period <= timehorizon)
+ {
+ temp[a] = truck.PickupDelivery(-truckcapacity/2);
+ cost += HoldingShortageSurplus(period, Sequence[a].StationID, temp[a], ref truck);
+ }
+ else { a--; }
+
+ //全部跑完要回去depot
+ if (a == totalStation - 1)
+ {
+ totalDistance += startTOvertex[Sequence[a].StationID];
+ }
+ else
+ {
+ //沒有跑完的車站繼續算成本
+ for (int b = a; b < totalStation - 1; b++)
+ {
+ cost += HoldingShortageSurplus(timehorizon, Sequence[b].StationID, 0, ref truck);
+ }
+ }
+ int totalpnd = 0;
+ richTextBox.Text = "routing path is depot ";
+ for(int i = 0; i < a+1; i++)
+ {
+ richTextBox.Text += (Sequence[i].StationID + " ");
+ }
+ richTextBox.Text += ("\n " + "pickup and delivery amount : ");
+ for (int i = 0; i <= a; i++)
+ {
+ richTextBox.Text += (temp[i] + " ");
+ totalpnd += Math.Abs(temp[i]);
+ }
+ richTextBox.Text +=("\n" +"********performance********");
+ richTextBox.Text += ("\n" + "total unsatisfied amount is :" + cost);
+ richTextBox.Text += ("\n" + "total distance is :" + totalDistance );
+ richTextBox.Text += ("\n" + "total pickup & delivery: " + totalpnd);
+ }
+
+ private void nearestInsert(object sender, EventArgs e)
+ {
+ totalDistance = 0;
+ List seq = new List();
+ double min = double.MaxValue; int last = -1;int next = -1;
+ double[,] d = new double[totalStation, totalStation];
+ //seq.Add(0); //must begin at 0
+ for(int a = 0;a < totalStation; a++)
+ {
+ for(int b = 0;b < totalStation; b++)
+ {
+ d[a, b] = distanceMatrix[a, b];
+ }
+ }
+ for(int i = 1; i < totalStation; i++)
+ {
+ if (min > startTOvertex[i]) { min = startTOvertex[i]; last = i; }
+ }
+ //for(int j = 0;j < totalStation; j++)
+ //{
+ // d[j, 0] = 0;
+ //}
+ seq.Add(last);
+ do
+ {
+ min = double.MaxValue;
+ for (int i = 0; i < totalStation; i++)
+ {
+ if (d[last, i] != 0 && min > d[last, i])
+ {
+ min = d[last, i]; next = i;
+ }
+ }
+ for (int j = 0; j < totalStation; j++)
+ {
+ d[j, last] = 0;
+ }
+ seq.Add(next);
+ last = next;
+ } while (check(d,next));
+ int[] routing = new int[seq.Count];
+ seq.CopyTo(routing);
+ double period = 0; //利用distancematrix除以車速即可得到現在的時間
+ double cost = 0.0;
+ Truck truck = new Truck(truckcapacity,truckcapacity/2);
+ period += (startTOvertex[routing[0]] / speed );//抵達第一站的時間
+ totalDistance += startTOvertex[routing[0]]; //抵達第一站的距離
+ int c = 0;int[] temp = new int[totalStation];
+ while (c < totalStation-1 && period <= timehorizon)
+ {
+ if (stations[routing[c]].Declinebymin < 0)
+ {
+ temp[c] = truck.PickupDelivery(truckcapacity / 2);
+ cost += HoldingShortageSurplus(period, routing[c],temp[c], ref truck);
+ }
+ else
+ {
+ temp[c] = truck.PickupDelivery(-truckcapacity / 2);
+ cost += HoldingShortageSurplus(period, routing[c], temp[c], ref truck);
+ }
+ period += distanceMatrix[routing[c], routing[c + 1]]/speed;//到下一站的時間點
+ totalDistance += distanceMatrix[routing[c], routing[c + 1]];
+ c++;
+ }
+ //因為上面最後一次部會做所以...
+ if (stations[routing[c]].Declinebymin < 0 && period <= timehorizon)
+ {
+ temp[c] = truck.PickupDelivery(truckcapacity / 2);
+ cost += HoldingShortageSurplus(period, routing[c], temp[c], ref truck);
+ }
+ else if(stations[routing[c]].Surplusbymin > 0 && period <= timehorizon)
+ {
+ temp[c] = truck.PickupDelivery(-truckcapacity / 2);
+ cost += HoldingShortageSurplus(period, routing[c], temp[c], ref truck);
+ }
+ else { c--; }
+
+ //全部跑完要回去depot
+ if (c == totalStation - 1)
+ {
+ totalDistance += startTOvertex[routing[c]];
+ }
+ else
+ {
+ //沒有跑完的車站繼續算成本
+ for (int b = c; b < totalStation - 1; b++)
+ {
+ cost += HoldingShortageSurplus(timehorizon, routing[b], 0, ref truck);
+ }
+ }
+ richTextBox.Text = "routing path is: depot ";
+ for (int i = 0; i < c+1; i++)
+ {
+ richTextBox.Text += (routing[i] + " ");
+ }
+ int tpnd = 0;
+ richTextBox.Text += "\n" + "pickup and delivery ";
+ for (int i = 0; i < c + 1; i++)
+ {
+ richTextBox.Text += (temp[i] + " ");
+ tpnd += Math.Abs( temp[i] );
+ }
+ richTextBox.Text += "\n" + "********performance********";
+ richTextBox.Text += ("\n" + "total unsatisfied amount is :" + cost);
+ richTextBox.Text += ("\n" + "total distance is " + totalDistance);
+ richTextBox.Text += ("\n" + "total pickup & delivery is " + tpnd);
+
+ }
+ private bool check(double[,] m,int n)
+ { bool flag = false;
+ for (int i = 0; i < totalStation; i++)
+ {
+ if (m[n, i] != 0) { flag = true; break; }
+ }
+ return flag;
+ }
+
+ private void NBS(object sender, EventArgs e)
+ {
+ totalDistance = 0;
+ Station[] ss = new Station[stations.Length];
+ stations.CopyTo(ss,0);
+ Array.Sort(ss);
+ //找出不需要用送的站點作為補給站之用
+ List supplyStation = new List();
+ Priority_Queue.SimplePriorityQueue pq = new Priority_Queue.SimplePriorityQueue();
+
+ for (int i = 0; i < ss.Length; i++)
+ {
+ if (ss[i].Rate != 0)
+ {
+ pq.Enqueue(ss[i],1);
+ }
+ if (ss[i].Rate == 0)
+ {
+ supplyStation.Add(ss[i]);
+ }
+ }
+
+ int[] Sequence = new int[totalStation];
+ for(int i = 0; i < Sequence.Length; i++)
+ {
+ Sequence[i] = -1;
+ }
+ //確定第一站為最需要先被服務的並且直接先決定卡車上的貨物數量
+ //直接先決定到的時間點剛好為最需要被服務的剛好缺的時點
+ int[] temp = new int[totalStation];
+ double time = 0;
+ double cost = 0;
+ Truck truck = null;
+ for(int k = ss.Length -1; k >-1 ;k--)
+ {
+ if (ss[k].Rate != 0)
+ {
+ if (ss[k].Rate < 0) //rate < 0 => need to delivery
+ {
+ truck = new Truck(truckcapacity, truckcapacity);
+ temp[0] = truckcapacity / 2;
+ //cost = HoldingShortageSurplus(time, Sequence[0], truck.PickupDelivery(14));
+ }
+ else if (ss[k].Rate > 0)
+ {
+ truck = new Truck(truckcapacity, 0);
+ temp[0] = -truckcapacity / 2;
+ //cost = HoldingShortageSurplus(time, Sequence[0], truck.PickupDelivery(-14));
+ }
+ time = startTOvertex[ss[k].StationID] / speed;
+ Sequence[0] = ss[k].StationID;
+ temp[0] = truck.PickupDelivery(temp[0]);
+ cost += HoldingShortageSurplus(time, Sequence[0], temp[0], ref truck);
+ break;
+ }
+ }
+
+
+ Station s = null;
+ //開始建構解
+ int a = 1;bool flag = false;
+ double min = double.MaxValue;double m = 0;int selected = -1;
+
+ while (time <= timehorizon && a < totalStation)
+ {
+ while (pq.Count != 0)
+ {
+ s = pq.Max();
+ pq.Remove(s); flag = false;
+ //s = pq.Dequeue();
+ if (Sequence.Contains(s.StationID) == false)
+ {
+ Sequence[a] = s.StationID;
+ break;
+ }
+ if (pq.Count == 0)
+ {
+ if(supplyStation.Count != 0)
+ {
+ s = supplyStation.Max();
+ supplyStation.Remove(s);
+ }
+ break;
+ }
+ }
+ min = double.MaxValue;
+ //下一站是需要貨物的可是你卻沒有貨ㄌ
+ if (s.Declinebymin < 0)
+ {
+ //find truck lack of goods
+ if (truck.CurrentGoods == 0 && supplyStation.Count != 0)
+ {
+ min = double.MaxValue;
+ //find the nearest supply station
+ for (int i = 0; i < supplyStation.Count; i++)
+ {
+ m = distanceMatrix[Sequence[a - 1], supplyStation.ElementAt(i).StationID];
+ if (min > m)
+ {
+ min = m; selected = i;
+ }
+ }
+ temp[a] = truck.SupplyTruck(supplyStation.ElementAt(selected));
+ flag = true;
+ Sequence[a] = supplyStation.ElementAt(selected).StationID;
+ supplyStation.RemoveAt(selected);
+ if (a != stations.Length - 1)
+ {
+ Sequence[a + 1] = s.StationID;
+ }
+ }
+ if (flag == true)
+ {
+ time += distanceMatrix[Sequence[a - 1], Sequence[a]] / speed;//到下一站的時間點
+ totalDistance += distanceMatrix[Sequence[a - 1], Sequence[a]];
+ if (a != stations.Length - 1)
+ {
+ time += distanceMatrix[Sequence[a], Sequence[a + 1]] / speed;//到下一站的時間點
+ totalDistance += distanceMatrix[Sequence[a], Sequence[a + 1]];
+ temp[a + 1] = truck.PickupDelivery(truckcapacity / 2);
+ cost += HoldingShortageSurplus(time, Sequence[a + 1], temp[a + 1], ref truck);
+ }
+ a+=2;
+ }
+ else
+ {
+ temp[a] = truck.PickupDelivery(truckcapacity / 2);
+ cost += HoldingShortageSurplus(time, Sequence[a], temp[a], ref truck);
+ }
+
+ }
+ else
+ {
+ //find truck full of goods
+ if (truck.CurrentSpace == 0 && supplyStation.Count != 0)
+ {
+ //find the nearest supply station
+ min = double.MaxValue;
+ for (int i = 0; i < supplyStation.Count; i++)
+ {
+ m = distanceMatrix[Sequence[a - 1], supplyStation.ElementAt(i).StationID];
+ if (min > m)
+ {
+ min = m; selected = i;
+ }
+
+ }
+ temp[a] = truck.SupplyTruck(supplyStation.ElementAt(selected));
+ flag = true;
+ Sequence[a] = supplyStation.ElementAt(selected).StationID;
+ supplyStation.RemoveAt(selected);
+ if (a != stations.Length - 1)
+ {
+ Sequence[a + 1] = s.StationID;
+ }
+
+ }
+ if (flag == true)
+ {
+ time += distanceMatrix[Sequence[a - 1], Sequence[a]] / speed;//到下一站的時間點
+ totalDistance += distanceMatrix[Sequence[a - 1], Sequence[a]];
+ if (a != stations.Length - 1)
+ {
+
+ time += distanceMatrix[Sequence[a], Sequence[a + 1]] / speed;//到下一站的時間點
+ totalDistance += distanceMatrix[Sequence[a], Sequence[a + 1]];
+ temp[a + 1] = truck.PickupDelivery(-truckcapacity / 2);
+ cost += HoldingShortageSurplus(time, Sequence[a + 1], temp[a + 1], ref truck);
+ }
+ a+=2;
+ }
+ else
+ {
+ temp[a] = truck.PickupDelivery(-truckcapacity / 2);
+ cost += HoldingShortageSurplus(time, Sequence[a], temp[a], ref truck);
+ }
+ }
+ if (flag == false)
+ {
+ time += distanceMatrix[Sequence[a - 1], Sequence[a]]/speed;//到下一站的時間點
+ totalDistance += distanceMatrix[Sequence[a - 1], Sequence[a]];
+ a++;
+ }
+ }
+ if (a >= totalStation) { a = totalStation - 1; }
+ //因為上面最後一次部會做所以...
+ if (flag==false && stations[Sequence[a - 1]].Declinebymin < 0 && time <= timehorizon)
+ {
+ temp[a-1] = truck.PickupDelivery(truckcapacity / 2);
+ cost += HoldingShortageSurplus(time, Sequence[a - 1], temp[a - 1], ref truck);
+ }
+ else if (flag == false && stations[Sequence[a - 1]].Surplusbymin > 0 && time <= timehorizon)
+ {
+ temp[a-1] = truck.PickupDelivery(-truckcapacity / 2);
+ cost += HoldingShortageSurplus(time, Sequence[a - 1], temp[a - 1], ref truck);
+ }
+ else { a--; }
+
+ //全部跑完要回去depot
+ if (a == totalStation - 1)
+ {
+ totalDistance += startTOvertex[Sequence[a]];
+ }
+ else
+ {
+ //沒有跑完的車站繼續算成本
+ for (int b = 0; b < pq.Count; b++)
+ {
+ cost += HoldingShortageSurplus(timehorizon, pq.ElementAt(b).StationID, 0, ref truck);
+ }
+ }
+ richTextBox.Text = "routing path is depot ";
+ for (int i = 0; i < a+1 ; i++)
+ {
+ richTextBox.Text += (Sequence[i] + " ");
+ }
+
+ double totalPandD = 0;
+ richTextBox.Text += "\n" + "pickup & delivery amount: ";
+ for (int i = 0; i < temp.Length; i++)
+ {
+ richTextBox.Text += temp[i].ToString() + " ";
+ totalPandD += Math.Abs(temp[i]);
+ }
+ richTextBox.Text += "\n" + "********performance********";
+ richTextBox.Text += "\n" + "unsatisfied amount :" + cost;
+ richTextBox.Text += ("\n" + "total distance is " + totalDistance);
+ richTextBox.Text += "\n" + "Total pickup & delivery : " + totalPandD;
+
+ }
+ }
+}
diff --git a/BikeSharingSystem/Form1.resx b/BikeSharingSystem/Form1.resx
new file mode 100644
index 0000000..2a1b048
--- /dev/null
+++ b/BikeSharingSystem/Form1.resx
@@ -0,0 +1,3164 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ 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
+ /0ok7R/g/wGLJXFFGjgZ5AAAAABJRU5ErkJggg==
+
+
+
+
+ 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
+ CkVo8R//8f/YeqMTQwBsawAAAABJRU5ErkJggg==
+
+
+
+ 146, 0
+
+
+ 146, 0
+
+
+ 52
+
+
+
+ AAABAAEAWlkAAAEAIAB8gQAAFgAAACgAAABaAAAAsgAAAAEAIAAAAAAAKH0AABMLAAATCwAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy
+ /wDCsv8AwrL/AMKy/wLCsv8GwrL/C8Ky/xPCsv8swrL/VMKy/3/Csv+hwrL/wcKy/8/Csv/iwrL//MKy
+ ///Csv//wrL//8Ky//bCsv/cwrL/0MKy/7vCsv+VwrL/c8Ky/1DCsv8iwrL/DsKy/wrCsv8FwrL/AcKy
+ /wDCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8AwrL/AMKy
+ /wHCsv8HwrL/D8Ky/yzCsv9mwrL/nsKy/9XCsv/zwrL/9cKy//jCsv/6wrL//MKy//zCsv/9wrL//8Ky
+ ///Csv//wrL//8Ky//7Csv/9wrL//MKy//vCsv/5wrL/98Ky//XCsv/wwrL/ycKy/5DCsv9YwrL/IcKy
+ /wzCsv8FwrL/AcKy/wDCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AMKy/wDCsv8EwrL/DcKy
+ /yXCsv9xwrL/w8Ky//LCsv/4wrL/+8Ky//3Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//cKy//rCsv/3wrL/6sKy
+ /6zCsv9ZwrL/HcKy/wvCsv8DwrL/AMKy/wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wDCsv8AwrL/BsKy/xTCsv9JwrL/q8Ky
+ /+nCsv/5wrL//cKy///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ //zCsv/4wrL/3MKy/5TCsv83wrL/DsKy/wPCsv8AwrL/AMKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AMKy/wXCsv8YwrL/VMKy/7fCsv/3wrL//MKy
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//sKy//vCsv/vwrL/oMKy/zvCsv8QwrL/A8Ky/wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wDCsv8CwrL/EsKy/03Csv++wrL/+cKy//3Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//MKy//HCsv+kwrL/NsKy/wvCsv8BwrL/AMKy/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy/wnCsv8vwrL/m8Ky//TCsv/9wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/8wrL/5sKy/3rCsv8hwrL/BcKy/wDCsv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAwrL/AMKy/wDCsv8CwrL/GMKy/2nCsv/ewrL//MKy///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//w7L//8Cw/f+8rfn/uar2/7ao9P+2qPT/t6n1/7mr
+ 9/+/sPz/wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//sKy//zCsv/FwrL/S8Ky/w7Csv8BwrL/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADCsv8AwrL/AMKy/wXCsv8rwrL/n8Ky//rCsv/+wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Gy/v+8rfn/tafy/5+U3v99eL7/ZGOm/1NUlf9TVJX/Wlqc/2hm
+ qf+Yj9f/tKbx/7yt+f/Bsf7/wrL//8Ky///Csv//wrL//8Ky///Csv/+wrL/78Ky/3fCsv8cwrL/AsKy
+ /wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy
+ /wDCsv8AwrL/C8Ky/0fCsv/KwrL//cKy///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Oz
+ ///Ds///wrL//7+v/P+/r/z/wbH+/8Oz///Ds///w7L//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//vK35/6me5/98d73/RUmJ/yszb/8sNW7/Mjpx/zU9c/80PXP/Mzty/y84
+ b/8wN3P/SkyN/4F7wf+xo+7/wbH9/8Oz///Ds///w7P//8Oz///Csv//wrL//8Ky//3Csv+nwrL/MMKy
+ /wXCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy
+ /wHCsv8RwrL/ZMKy/+rCsv/+wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//+9rvv/tqjz/7Cj
+ 7v+toev/pprk/5WL1P+SidL/n5Td/62g6v+uoez/sqXw/7ep9f+9rvv/wrL//8Oz///Csv//wrL//8Ky
+ ///Csv//w7L//7+w/P+toOv/fHe8/zo/fv8pMmz/Nz91/1Zdif+Bh6b/o6e6/7i8xv+3u8T/rbG8/5Wa
+ rP9UW4T/JzBq/zY7ev9raaz/qp7o/7Om8P+vou3/r6Lt/7Cj7v+4qvb/wbH+/8Ky///Csv/+wrL/0sKy
+ /0LCsv8HwrL/AMKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy
+ /xXCsv9xwrL/8sKy///Csv//wrL//8Ky///Csv//wrL//8Ky///Bsv//vK35/62g6/+Igsn/Wlqc/zk+
+ ff8kLWn/Iyxo/ycwa/8oMWv/JS5p/yEqZv8rMnD/Q0iI/2Jipf+Jgsn/pZnj/7Om8f+9rvr/wrL//8Ky
+ ///Ds///vq/6/5iO1/9HSov/Ji9p/zU+dP93faH/ztDb//T28//5+/P/9/jt//T25//y9OL/8PPf//Dz
+ 3f/m6dj/cHaT/yYvaf8vNnT/Y2Kl/0dLiv8xN3b/Mjh2/ztAf/9raaz/pZrk/7mq9v/Bsf7/wrL//8Ky
+ /9zCsv9PwrL/CsKy/wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8BwrL/GMKy
+ /37Csv/5wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Gx/f+uoez/f3nA/0dKiv8oMWv/Nj50/z5G
+ ev9CSn3/TVSF/2RqlP9nbpf/Vl2L/0JKff9BSX3/O0N4/zM8c/8pMmz/KjNv/01PkP+Gf8b/raDr/72u
+ +v/AsPr/i4TL/ztBgP8mL2n/Zm2W/8vN2//7/Pv//v76//v89v/4+u//9ffo//L04f/v8tz/7vHY/+3x
+ 1//t8df/8fXb/3R7lf8mL2n/KDBu/y02bv85QnT/PkZ2/zI6cP8nMGz/PEB//3NwtP+vou3/wbH+/8Ky
+ ///Csv/nwrL/WMKy/wzCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wHCsv8WwrL/gMKy
+ //3Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL+/6qe6f9aWpz/Iyxn/z5Gev9zeZ//s7bL/+Di
+ 6v/7/P3////////////////////////////z8/b/0dPf/6irwv90eZ//TlWF/zlBd/8nMGr/PUKB/4+H
+ z/+Ph8//PEGB/ycwav90ep//3N7m///////+/v3//f35//r79P/3+O3/8/bk/+/z3P/t8Nf/7PDU/+zw
+ 1P/s8NT/7PDU/+7x1/9yeZP/JC1o/2pxjv/Hy8D/3ODM/52jq/9RWIH/Ji9p/zo/fv9zcLT/t6n1/8Sz
+ ///Ds///w7P/68Ky/1rCsv8KwrL/AMKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AMKy/xHCsv9ywrL/+cKy
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Ds///uKr2/3NwtP8hK2b/TlWG/7u90P//////////////
+ ////////////////////////////////////////////////////////9fb4/8TH1/9udJv/Mjpx/0RJ
+ hv88QYH/JS5p/3+Ep//n6O7///////7+/f/9/vz//P35//r79P/3+Oz/8/Ti/+7y2v/s8NT/6+/S/+vv
+ 0//r79P/6+/T/+zw1P/v8tb/bXSQ/7vAuf/u8tT/6+/T/+zw1P/r7tT/Zm2M/yYvaf88QYD/mI7X/6uf
+ 6f+rn+n/tafz/8Ky/+XGtv9L3cn/BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/DMKy/2XCsv/0wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Ds///pJnj/0FFhf9ETH7/vL/R////////////////////
+ ///////////////////////////////////////////////////////////////////u7/P/rrLI/1Zd
+ i/8yOnL/e4Gk/+Dh6v/////////+//7+/f/+/vz//f35//r79P/2+Oz/8/Xi/+/y2v/s8NX/6+/T/+vv
+ 0//r79P/6+/T/+zw1f/t8NX/7PDV/+zv1P/r79L/6+/T/+vv0//s8NP/xsrA/0BIeP8rM3D/MTh2/zA2
+ df8zOXj/Y2Kk/56U3f+lmuPYkYjQR6SY4gQpMG0AICllAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8FwrL/TsKy/+zCsv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Oz//+9rvv/hH7E/yYvaf97gKT/////////////////////////
+ ////////////////////////////////////////////////////////////////////////8vL2/7W5
+ zf+2uc3/8vP2///////////////+//7//v/+/v3//f75//r79P/3+O7/9PXl//Dz3f/u8dj/7fDV/+zw
+ 1f/s8NX/7PDV/+3w1v/t8df/7fDX/+zw1P/r79P/6+/S/+vv0v/u8dT/SlJ9/x0mZP8gKWb/LTZt/0BI
+ d/80PHD/Iitn/yMraf8wN3X/V1ia409RkkEoMG0RGiRfASEqZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wLCsv8wwrL/0cKy///Csv//wrL//8Ky
+ ///Csv//w7P//8Oz///Ds///vq/8/7+w/P+0p/L/Z2Wo/zU9c/+ipr//////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////v/+/v3//v77//v89//4+vH/9vfq//P14//w897/7/La/+7x
+ 2f/u8dn/7vHZ/+/y2v/u8tv/7vLZ/+7x1v/s8NX/6+/T/+vv0v/s8NP/bHOO/0dPe/9JUXz/gIea/87T
+ xP+boaj/VFyC/0hQe/80PXH/JzBs/zI5d+YqMm92JC1pFyApZQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy/xzCsv+kwrL//8Ky///Csv//wrL//8Ky
+ ///Csv//uKr2/6ue6f+fld7/jITM/4uEzP+RidH/V1ea/zpCd/+ussj/////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////////////////////////v/+//3//v77//z++f/6+/X/+Pnv//b36v/z9uX/8vXi//H0
+ 4P/x9N//8vTg//L04P/x9N//8PPd/+/z2v/u8df/7PDU/+vv0//r79L/7PDS/+zw0//u8dT/7fHU/+vv
+ 0//s8NP/7fHU/+js0v+boaj/UlqB/yUtaP8qMm7ZJi5rayQsaQgiK2cAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/CsKy/3TCsv/8wrL//8Ky///Csv//wrL//76v
+ +/+mm+X/dHC1/0FFhf8mLmz/JS5o/yUuaP8nMGz/OD59/zlBdv+orMP/////////////////////////
+ ///////////////////////////+/////v////7////+////////////////////////////////////
+ /////////////////////////////////v/+//3//v78//39+v/8/Pf/+vvz//j67//2+ez/9vjq//T3
+ 6P/09uf/9Pbn//T25v/z9eX/8vTi//H03v/v8tr/7fHW/+zv1P/r79L/6+/S/+vv0//r79P/6+/S/+vv
+ 0v/r79L/6+/S/+vv0v/t8NP/5urR/15liP8lLmn/Ji5ryiQtaSYgKmUCAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8DwrL/NsKy/+XCsv//wrL//8Ky///Csv//vK35/5mP
+ 2P9KTY3/KzRt/0FJfP9WXYr/cHac/3F3nf9XXov/OUF3/ztDef+3us7/////////////////////////
+ /v////7////+//7//f/+/v3//v79//7+/f/+/v3//v78//7+/f/+//3////+/////v//////////////
+ ///////////+/////v/+//7//v79//7+/P/+/vz//f37//39+v/8/Pj/+vv0//n68v/4+u//9/ju//b4
+ 7f/2+Oz/9vfq//X36f/09+j/8/bk//L04P/w89z/7vHZ/+zw1f/s79T/6+/T/+vv0//s79P/6+/S/+vv
+ 0v/r79L/6+/S/+vv0v/r79L/7O/T/+To0f9IUHz/JzBs+SYuaoolLWoLKjFuAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8WwrL/q8Ky//7Csv//wrL//8Ky//++r/v/korS/0xP
+ j/8+Rnr/f4Sn/8rM2v/5+fr////////////6+vz/srXK/3h9ov/z8/f///////////////7//v/+//7+
+ /f/+/vz//v78//3++//9/fr//f36//39+v/9/fn//f35//3++v/9/vr//v77//3+/f/+/v3////9//7+
+ /f/+/v3//v78//7++//9/vr//f35//z9+f/8/fj/+/z3//v89v/6+/T/+fry//j68P/3+u7/9/jt//b4
+ 6//2+Or/9fjp//X36P/09+b/8vXk//L14f/x9N7/7/Lb/+3x2P/t8Nf/7PDV/+zw1f/s8NT/6+/T/+vv
+ 0v/r79L/6+/S/+vv0v/r79L/6+/S/+rv0/+boar/LTZt/igwbeEpMG0mKC9rAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wbCsv9YwrL/+cKy///Csv//wrL//8Cw/f+il+H/TE+P/0NL
+ ff+rrsX/8/P2///////////////////////////////////////////////9//7+/f/+/vz//f77//39
+ +v/8/fj/+/z3//v79v/6+/X/+vv0//r79P/6+/P/+vv0//r79f/7/PX/+/z2//z8+P/8/Pn//f35//z9
+ +f/8/fj//P34//v89v/7+/X/+vv0//n78v/5+vH/+Prw//f57//3+e3/9vjs//b36v/19+j/9Pfn//T2
+ 5f/z9uT/8/Xj//L14v/y9OH/8fTf//H03v/w893/7/Lb/+7x2f/u8dj/7vHY/+3w1//t8Nb/7PDU/+vv
+ 0//r79L/6+/S/+vv0v/r79L/6+/S/+vv0//n69L/SVF9/yYva/suNXKCLzZzCv/6/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwrL/AcKy/x/Csv/LwrL//sKy///Csv//wrL//7Om8f9UVZf/Ljdv/5md
+ uf/6+vv//////////////////////////////////////////v/+/vz//f77//z9+v/8/Pj/+/z2//r7
+ 9P/6+vL/+frw//j57v/3+e3/9/js//b47P/2+Ov/9vjr//f47P/3+e3/+Pnw//n68f/5+vL/+vvz//r7
+ 8//5+vL/+frx//j67//3+e3/9vjs//X46v/19+n/9Pfn//P25f/z9eT/8vXi//L14f/x9OD/8fTf//Dz
+ 3v/w893/7/Pc/+/y2//v8tr/7vHa/+7x2f/u8dj/7vLY/+7x2P/u8tn/7vLZ/+7y2v/u8dj/7fHW/+zw
+ 1f/r79P/6+/S/+vv0v/r79L/6+/S/+vv0//q7tP/l52n/y02bv41O3rhPEGAFQAA/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCsv8AwrL/CMKy/23Csv/8wrL//8Ky///Csv//wLD9/5iP2P8jLGf/UViH/+Dh
+ 6f////////////////////////////////////7//v79//3+/P/8/fn/+/z3//r79f/5+vL/+Pnv//f4
+ 7P/2+On/9fjo//X35v/09+X/9Pfk//P24//z9eL/8vXh//L14v/z9eP/9Pbm//T36P/19+r/9vfr//b3
+ 6//1+Or/9ffo//T25v/z9uT/8/Xi//L14f/y9d//8vXf//L13v/y9d3/8vXc//L13P/y9Nv/8fTa//H0
+ 2f/x9Nj/8PPY/+/z1//v8tb/7vHW/+3x1f/t8NT/7fDV/+3w1f/t8df/7vHZ/+/z3P/v8tz/7vLa/+3x
+ 2P/s8NX/6+/T/+vv0v/r79L/6+/S/+vv0v/r79P/1NnJ/zU9cv8zOXf3hH3EM9DB/wLCsv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCsv8BwrL/HMKy/9HCsv/+wrL//8Ky///Csv//uKr2/2poq/8yOnL/nqK8////
+ /////////////////////////////////f/9/vz//f36//z8+P/6+/T/+frx//f57f/19+n/9Pbm//X2
+ 5//z9ej/6uzg/+Pl2P/c3dH/3d7R/9/h0//j5Nb/6Ona/+/w4f/y9eL/8PPd//H03v/x9eD/8vXi//L0
+ 4f/y9eD/8vXf//P14//x8+T/6+3e/+nq2//k5tb/29zN/9HTxv/JzcH/wci8/7zEuf+5w7n/ucS6/7jD
+ uf+7xLn/v8e6/8bMvf/Q1MP/293M/+Pl0v/r7tv/7fDW/+zw0//s8NT/7vHY//Dz3P/w89//8fTf/+/z
+ 3P/u8dj/7PDV/+vv0//r79P/6+/S/+vv0v/s79P/3uLO/zY+cv8tNHH7q57pkca1/wvCsv8AAAAAAAAA
+ AAAAAAAAAAAAAMKy/wDCsv8GwrL/XsKy//vCsv//wrL//8Ky///Dsv//s6Xw/0dKi/86Qnj/zM/c////
+ ///////////////////////////9//7+/P/8/fr/+/z3//r68v/4+e7/9ffp//P25P/y9OH/8PPg/+jp
+ 4v/MzNT/o6i3/4uXq/95iJ//eYig/4KQpv+Omaz/oae1/8HDzP/d3tr/5+jY/+/x3f/v89n/8PPa//Dy
+ 3v/r7N3/4uTU/9vc2P/JydP/r7K+/6Gnt/+RnK//eYig/2B3lf9MbI7/OWGI/ypahf8kWoj/I1yL/yJa
+ if8pXIn/M1+I/0Zqjv9geZb/fIui/5ifsP/Bw83/29zR/+fq1//t8db/7vHX//Dz3P/y9OH/8vXj//L0
+ 4f/w89z/7vHY/+zw1f/r79P/6+/S/+vv0v/s79P/4ubQ/zY/cv8rMm/+s6Xx58Oz/y3Csv8CAAAAAAAA
+ AAAAAAAAAAAAAMKy/wDCsv8SwrL/v8Ky//3Csv//wrL//8Ky///Dsv//saPv/zxAgP89RXn/3N3n////
+ //////////////////////7//v79//39+//7/Pf/+fry//f57P/09+b/8fXh//Dz3f/s8Nr/19nS/52i
+ sv9YcI3/KVuF/xhdkP8WY5n/EmCW/xVfk/8bXY7/KlyG/0xtjf92iJ//pam5/87OzP/i5dP/4uTT/9DQ
+ zf+xs7//kJmr/3OFnf9VcpH/OmOI/yVah/8aXI//FmOa/xRtqP8TdrT/EXq7/xB+wP8QgcT/D4LF/w+C
+ xf8Pf8L/D3q8/w92tv8Sbaj/FmGW/yNah/9MbY7/fYyj/62wvv/T1Mr/6eva//H04P/09uT/9ffo//T2
+ 5v/y9eH/7/Pb/+3x1//s8NT/6+/T/+vv0v/r79P/4ubP/zY/cv8rMnD/tKby+8Ky/4HCsv8JwrL/AAAA
+ AAAAAAAAAAAAAMKy/wPCsv82wrL/9MKy///Csv//wrL//8Ky///Dsv//s6Xw/0dKiv86Qnj/zc/d////
+ //////////////////////7//v78//z9+P/6+/T/9/nt//T25v/x9N//7/La/+7y2v/W19D/gIib/zJb
+ gv8SaqP/EIDC/w6Fy/8Oh8//D4jP/w+Izf8Phcr/EH/C/xF1s/8XZZv/MWGK/2R3kv+Xm6v/lZqr/2V4
+ kv89Yof/IF2N/xRlnP8Scq7/EXq7/xCAxP8PhMv/DofP/w6J0P8OidD/D4jP/w+Hzf8Qhsz/EIbL/xCG
+ zP8Qh83/D4jO/w+J0P8PitH/D4jO/xCBxP8Qc7L/FV+U/zlhhv9vfpb/rrG+/93e2P/19+3/+Pnt//b4
+ 6//09uX/8fTe/+7x2P/s8NT/6+/T/+vv0v/r79P/4OTP/zY/cv8tNXL/tKfy/cKy/8/Csv8WwrL/AAAA
+ AAAAAAAAwrL/AMKy/wnCsv+EwrL/+sKy///Csv//wrL//8Ky///Csv//uKr2/2lnq/8xOXH/n6O9////
+ /////////////////v/+/v3//f77//v89v/5+vH/9ffp//H04f/v8tr/7/La/+Xn3f+Um6//JVaA/xF6
+ uv8Ojdb/DovS/xCGzP8QhMn/EIPI/xCEyP8Qhcr/D4fN/w+J0P8OiM7/D3y+/xZkm/8sWID/K1qE/xZm
+ nf8ReLj/D4LH/w+Izv8Pic//D4jO/w+HzP8Qhcr/EITI/xGDx/8Rg8b/EYPG/xGDxv8Rg8f/EYPH/xGD
+ x/8Rg8b/EYPG/xGDxv8Rg8b/EYTI/xCHzP8PidD/D4bM/xF3t/8WYJT/PmOH/4KMof/MzNT/8vLu//j6
+ 7//2+On/8/bi//H02//u8tb/7fHU/+3x1P/s8NP/wMS9/zI7cP80Onj/tafz/8Ky//fCsv9HwrL/BAAA
+ AAAAAAAAwrL/AcKy/xfCsv/QwrL//cKy///Csv//wrL//8Ky///Csv//v7D8/5eO1v8xOHT/XWSQ/+Pk
+ 7P///////////////v/+/v3//f36//r79f/4+e7/9Pbl//Dz3f/u8db/7/He/77AzP8+XYD/FHCs/xCH
+ zP8SgsT/EoHE/xCFyv8Phs3/D4bN/w+Fy/8Qg8j/EYPG/xGDxv8QhMn/D4jO/xCGzP8RfL3/EXy9/xCG
+ zP8PiM//EIbM/xGEyP8Rg8f/EYPG/xGDxv8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDxv8Rg8b/EYTJ/xCHzv8Phsv/EXa0/yBbiv9ba4f/trbB/+/w
+ 7f/09ez/4uLY/9fYzP/T1Mf/09TF/9fYyP/R1Mf/ZWuL/ykxa/9SU5T/t6n1/8Oz//vCsv+awrL/CsKy
+ /wAAAAAAwrL/BMKy/0TCsv/3wrL//8Ky///Csv//wrL//8Ky///Csv//w7P//7ao9P9YWZr/KTJr/3yB
+ pf/n6O7//////////v/+/vz//f35//r79P/3+O3/8/bk//H13//q7dz/yMfA/3Z6jv8hQmb/ImGQ/yRc
+ iv8jXIn/Il+P/x5onP8Zc63/FXu5/xGCxf8Phs3/D4fN/xCEyf8Rg8b/EYPG/xCEyf8Ph83/EIfN/xGE
+ yf8Rg8b/EYPG/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Qhcr/D4jO/xGAxP8XYJX/UGaE/66v
+ u/+4vMf/ipKk/3GBmf9rfZn/bX2X/3mDmv9vcZP/KC9p/yMrZ/9aWpz/gHrA/6yg6v7Csv/cxLP/GMKy
+ /wHCsv8AwrL/CcKy/4jCsv/6wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//76v+/+Ti9P/Nzx7/yky
+ a/+Ch6n/4+Xs//////////3//f35//r79f/5+u//8vTl/9bX0v+srrz/aXiR/zRSdf8lUnv/JFqH/yVZ
+ hv8kWYX/JlaA/ylRef8oUnn/J1aA/yJfj/8cbqb/FH2+/xCGzP8Ph8z/EYTI/xGDxv8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xCGzP8Qhcn/Gmie/0Va
+ d/9IW3n/JWGP/xZlmv8TZp7/F2OY/x1fkv8ZRoP/HUF9/yA4cv8fKGP/IChk/11cn/+jmOH3wrL/Pc27
+ /wPCsv8AwrL/DsKy/8bCsv/9wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Oy//+9rvr/hX/F/zg+
+ fP8nMGr/eH6i/9TW4f/09Pb////9//z9+P/v8Ov/vb7A/3aCmP86Y4n/HGed/xV1sf8VfLv/E37A/xN/
+ wv8Tf8H/FH29/xh2sv8bbqX/IWSV/yVYg/8pUXn/JleD/xxsov8SgMH/D4bM/xCEyf8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xKDx/8ShMf/EoPH/xGD
+ x/8Rg8f/EYPH/xKDx/8ShMf/EoTH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Qhsz/EYTJ/x1c
+ jP8mSG7/FHe1/w6Izv8Qhsz/EIXK/xCDyP8QgcT/E3i4/xdopP8cS4n/IDlz/yEqZv9RUpP5iYLJhpKK
+ 0QnCsv8BwrL/IMKy/+zCsv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Ds///vq/7/4qC
+ yf9FSIn/MTh0/1dei/+YnLj/2tzk/+jo6v+oqrb/T2aD/yJklP8Sebn/D4TK/xCGzP8Qhsv/D4bM/xCG
+ y/8Phsz/EIbM/xCGzP8Qhsv/EYTI/xN/wP8acav/JFuJ/ypOc/8lWYT/F3ax/xCGy/8Qhcv/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Sg8f/EILH/wuAxf8IfsT/B33E/wZ8
+ xP8GfMT/BnzE/wd8xP8IfcT/Cn/F/w+Cx/8Sg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EIfN/xZ7
+ uv8oU3r/ImCQ/xGFyv8Qhcv/EITK/xCFyv8Qhsv/EIbM/w+HzP8Qgsb/F2mm/x88dv8hLGf+TE+Q101Q
+ kA/Csv8EwrL/SMKy//bCsv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//w7P//8Cx
+ /f+hluD/cm+0/zg9ff8nMGr/ZWuU/4CGo/9CXX7/F2ee/xCDxv8Qhsz/EYXJ/xGDyP8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8RhMj/EIXK/xCGzP8Qhsz/EYHF/xttpf8oUnn/KVB3/xxtpP8Rg8f/D4bL/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Lf8X/B37F/xOEx/8ojcz/NpXP/zyY
+ 0f8/mtH/PpnR/zmWz/8qj8z/FoXI/wl+xf8HfsX/DoHG/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYTJ/xCF
+ y/8fZZj/LEpt/xd4tf8Qhsz/EYPH/xGDx/8Rg8f/EYPH/xGDyP8Qhcv/DojQ/xdnpP8iMGz/LDNw8VFS
+ kxfCsv8HwrL/csKy//jCsv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///FtP//va76/3h0uf8gKWX/HiZj/xwwbP8XbKT/EIXK/xCFyv8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8j/EIXL/w+GzP8Verj/JFyJ/ytMcv8fZJb/EoDC/xCG
+ y/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EILH/wp/xf8Zh8n/S6LV/4K+4v+q0+v/wd/x/8zl
+ 9P/Q5/X/z+b0/8bi8v+u1e3/isLk/16r2f8vks7/DoHG/wuAxv8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xCG
+ zP8Xd7X/K01y/x9lmP8PidD/D4jO/xCHzf8Ph83/EIbL/xGEyP8Rg8b/EIXL/xKDyP8hMm//Iitn9ImC
+ yTDCsv8KwrL/k8Ky//rCsv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Ds///uqv3/3NvtP8hKWX/ITBs/xhamv8Qhcv/EYTJ/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGEyf8Phsz/EoDD/x9lmP8qTXL/I16N/xR9
+ vv8Qhsv/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Qgsf/Cn/G/yGLy/97u+D/1+v2//n8/f/+/v//////////
+ ///////////////////+/v//+/3+/+n0+v+12O7/Zq/b/xyJyv8MgMb/EYPH/xGDx/8Rg8f/EYPH/xGE
+ yf8Rg8b/ImCQ/ylRef8Ycav/Fmyq/xdqqf8VcK//En2//xCGy/8Qh83/D4nQ/xVzs/8hMW3/KDBt9qOY
+ 4VbCsv8MwrL/tMKy//zCsv//wrL//8Ky///Csv//w7P//8a2///Gtf//xbX//8W1///Gtf//xrX//8Oz
+ ///AsPz/mY/Y/zs/fv8hLmr/GVOR/w+Gyv8RhMn/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EIbL/xGFyf8cbKL/Kk5z/yNd
+ i/8Ufb7/EIXL/xGDx/8Rg8f/EYPH/xGDx/8MgMb/EILH/3O23//k8fn/////////////////////////
+ ////////////////////////////////////////5/L6/4jB4/8kjMv/DoHG/xGDx/8Rg8f/EYPH/xGD
+ x/8Qhsz/F3Wx/ypIbf8lPm7/IzVq/yM0av8hO3H/HE6J/xljof8WcK//FXCw/x9Ifv8kL2r/Sk2O+LGk
+ 73zCsv8PwrL/1sKy//7Csv//wrL//8Oy///Gtf//uav3/3x3vf96dbv/eXW6/3l1uv95dbr/hH7E/7ut
+ +f+uoez/TlCQ/x8sZv8dSIH/EX2+/xCGy/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYTI/xCE
+ yf8Rg8j/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xCFyv8Qhcr/G2+o/yhR
+ eP8jXIr/FXy9/xGFy/8Rg8f/EYPH/xCDx/8Jf8X/M5XP/7vc7///////////////////////////////
+ //////////////////////////////////////////////L4/P+BveH/GIfJ/w6Cx/8Rg8f/EYPH/xGD
+ x/8QhMr/EYPH/x5Yi/8iLmj/Iipm/yIqZ/8iKmb/HiVh/yAsZP8fOXH/Hzdu/yAqYf8jLGf/j4fO+r2u
+ +6LCsv8UwrL/7cKy///Csv//w7L//76u+/97drv/aWeq/x4nY/8dJWH/HSRg/x0kYP8cJGD/KDBt/2tp
+ rP9iYaT/Hydj/yA1cf8Ubqv/EIfN/xGDyP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/FH29/xh0
+ sP8Ufr//EYTJ/xGEyP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDxv8QhMn/D4bM/xpw
+ qf8pT3b/JFuK/xV8vf8Qhcr/EYPH/w6Bxv8Jf8X/V6fX/9bq9f//////////////////////////////
+ ///////////////////////////////////////////////////h8Pj/SZ7Q/w6AxP8Qg8f/EYPH/xGD
+ x/8Rg8f/EIbM/xJ4uf8dRH7/Iixo/yIrZ/8jLGj/YF+i/1JTlP87P37/Oj59/1NVlv9saa3/va36+8Ky
+ /7zCsv8hwrL/88Ky///Csv//vq/7/3Bssf8fKGT/HiZh/yQuZf8gO3D/H0V6/x5Fef8gOm//Ii5m/x4j
+ X/8eJmP/IS5q/xxNiP8PhMn/EYXK/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGEyP8Webf/I1uJ/ydU
+ fv8gYpX/FH29/xGFyv8RhMn/EYTI/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8b/EITJ/xCG
+ y/8ab6j/Kk51/yNdi/8Uf8D/EIbL/w2Bx/8KgMb/Y67a/93t9///////////////////////////////
+ /////////////////////////////////////////////////////v7/iqe//x1qoP8OgMX/EYTJ/xGD
+ x/8Rg8f/EYPI/xCHzf8Vca//H0F5/yIsaP8kLGj/a2is/1xcnv+LhMv/j4fP/62g6//EtP//wrL//MKy
+ /8zCsv8wwrL/88Ky//+8rfn/b2uw/yApZf8jLWT/Hkd6/xOFsv8Pmb//DaTK/wykyv8Omb//EYex/xhg
+ lP8jNWj/JDxv/xdxrf8Ph83/EYPI/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xCEyf8Zc63/LUhr/y9D
+ Y/8uRmj/JFuI/xZ4tf8Qhcr/EYPH/xGEyf8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xCF
+ yf8Qhsv/G22l/ylPdv8hYpP/E4HF/w2Dyv8Kf8b/Ya3a/9zt9///////////////////////////////
+ ///////////////////////////////////////////////////+/v7/wr/H/z1Xd/8Scq//EIXL/xGE
+ x/8Rg8f/EYPH/xGEyP8PitD/G2Wd/yU8bP8jL2T/HiVg/yEqZv9xbrL/wrL//8S0///Csv//wrL//cKy
+ /9zCsv85wrL/9MCw/f+WjdX/Iitn/yMtZP8mPGn/HmyQ/wDb//8A3v//ANn//wDa//8A2///ANv//we9
+ 3/8hYIT/JlF9/xOBw/8Qhsz/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDyP8Tf8H/IWGS/zI9
+ Wf8zO1f/MjxX/yVXgv8Ve7r/EYPH/xCGy/8Rg8j/D4LH/wyBxf8LgMX/Cn/F/wyAxv8Qgsb/EYPH/xGD
+ x/8Qhcn/EIXK/xxrof8pT3X/IGWX/xCBxf8IgMj/TaLV/9Hn9P//////////////////////////////
+ ////////////////////////////////////////////////////////8fHy/4CDlf8hV4T/EH/B/xGF
+ yf8Rg8f/EYPH/xGDx/8OiM//GHSx/yhOc/8caZH/G1OG/yIsaP8gKWX/bWuu/7us+P/Csv//wrL//cKy
+ /+TCsv87wrL/9LWn8v9MT4//Iy5q/x9EeP8dY5j/KFt7/w2x0v8A2///ANL+/wDP/f8Az/3/ANb+/wfG
+ 6P8ibZD/IGKW/xCGy/8Rhcj/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Qhcv/FXq5/ylP
+ dv81Nk7/NDhS/zE/XP8iX4//EYLG/xCFyv8Mg8n/Cn/F/xKEx/8fi8r/IYzM/xSGyf8KgMX/DoHG/xGD
+ x/8Rg8b/EIXJ/xCEyP8fZZj/K0xx/xxrov8Hgcn/KJDO/6/V7P/8/v7/////////////////////////
+ /////////////////////////////////////////////////////////////9LR2P9MWnX/F2qh/xCG
+ zP8RhMn/EYPG/xGDx/8Phsz/E32//ydRe/8ah6n/CrLT/xhbjP8hLmn/Iyto/6mc5//Bsf7/wrL//cKy
+ /+PCsv85wLD99JeO1v8lLWn/ITRt/xVwrv8Sgcb/JleD/yRohv8LvNz/Adj8/wDX//8A1///Adv8/w+p
+ zf8nVnv/Gm2o/xCIzv8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8RhMj/EYPH/xh0
+ rv8qTnT/NTdR/zQ3UP8uRmf/GXOt/wuDyf8Ng8r/OJbQ/3q64P+jz+r/ptLs/4G/5f86mdL/DYHG/w2B
+ xv8Rg8f/EYPG/xCGy/8SgcT/JFyK/yhTe/8Qdrb/C4TN/3O33v/n8/n/////////////////////////
+ ///////////////////////////////////////////////////////////////+/v+QkaD/KFB4/xF7
+ u/8QiM7/EITI/xGDxv8RhMj/D4jO/x9jmP8nW33/C8HZ/wmmy/8gNnD/Jy9r/5qQ2f/AsP3/wrL//cKy
+ /+TCsv8wvK3683Fusv8lL2v/IEN5/xCHzf8QhMr/Fna1/ydVf/8kaIn/EqHB/wjB5v8EzvH/BtHq/xqI
+ p/8oUHj/Fni4/w+Izf8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8RhMj/EYPI/xKC
+ xf8XdrL/KVB4/zQ4Uv8rTXL/FXKt/wqDy/9IoNX/stbt/+z1+////v3/4N7h/8fK0/+u0OX/SqLW/wyA
+ xv8Ogsb/EYPH/xGDx/8Qhsz/Fnm3/yhTfP8gX4//B37F/zGX0v+42u3//f7/////////////////////
+ ////////////////////////////////////////////////////////7u7x/8nL1v9tcpT/KTZm/xtJ
+ hf8Se73/D4jO/xCGy/8RhMj/EIfM/xN/wP8mVID/H3iY/w6Vu/8gNnD/Jy9r/5iP2P/AsP3/wrL//cKy
+ /9zCsv8huqv381VWl/8kMGv/HVKJ/xCHzv8Qg8f/EIXK/xZ4uP8jWor/Jlh9/yFtj/8cgqP/HISg/ypV
+ cv8nVH7/En/C/w+HzP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYTI/xGD
+ yP8Rg8f/GXKs/yVah/8Zcqz/B3/G/yePz/+lz+r//P3+///////z8/X/k5el/2xtgP/Q0NX/ut7w/z2a
+ 0v8JfsX/EILH/xGDx/8RhMj/EIXL/x5onv8qT3b/FW6p/wiEzP9kr9z/3u73////////////////////
+ ////////////////////////////////////////+Pj5/9zd5P+0uMb/e4Cg/1FYhP8kLWf/HCZi/yIo
+ ZP8cR4T/FW6s/w+EyP8PiM7/EIjO/w6M1P8UfLz/I1uI/yBIcf8iLmj/Iyxo/6SZ4v/Bsf7/wrL//MKy
+ /8zCsv8UuKr270VIh/8jMGz/Gl2U/xCGzP8Rg8f/EITI/w+Hzf8SgcT/G2uk/yJcjf8kWYf/JlWA/y5C
+ ZP8lWIT/EYLF/w+Gy/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPI/xCE
+ yv8Rg8j/EoHD/xKCxP8MhMv/B3/H/1Cj1v/W6vb////////////y8/X/gYia/ztEYf+0t8H/+P3+/5vL
+ 6P8kjMv/Cn/F/xGDx/8Rg8f/EIXL/xN+wP8mWIP/JFuI/wl7wf8Yi87/icHj/+31+///////////////
+ /////////////////////////////+Xm6/+9wM3/hImo/2FnkP9ASXf/Hylj/xgiX/9KTY7/Z2ap/yoy
+ b/8eJWH/Hjx2/xxZk/8Xaab/FXGx/xN2t/8RdLb/H1CD/yMrX/8hKmX/ZmWo/7ep9f/Csv//wrL/+8Ky
+ /7zDsv8PuKr22UpMjP4jMGv/G1mQ/xCGzf8Rg8f/EYPH/xGDx/8Phsz/D4jO/xGCx/8TfcD/FXe2/yZU
+ fv8lWYb/EYLF/w+Gy/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8j/EIXJ/xCHzP8Lgcf/Cn/F/2Su2//j8Pj////////////09ff/hoye/1Vddf/Jy9P//////+nz
+ +v9xtd7/EYPI/w6Bx/8Rg8f/EIPI/w+GzP8bbqb/KVB3/xptpf8Fgcr/J4/O/4vD5f/Y7/z/+///////
+ ////////9fX2/9nb4v+9wM3/naK3/210l/9HT33/IStl/xgiX/81O3r/VFWW/29ssP+glt//uKr2/4J8
+ wv9UVpf/JSxo/yAtZf8gOHH/Hz95/x5BfP8dPnj/HzJq/x8pZf9aWp3/s6Xw/8Ky///Csv//wrL/+sKy
+ /6HCsv8Muqv3tWtprPwlL2v/H0V6/xGGzP8Rg8j/EYPH/xGDx/8Rg8b/EYTI/xCGy/8OitD/EIbL/yRb
+ h/8lWYX/EYHF/w+GzP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xKDxv8LgMX/Cn/G/2Ot2v/h8Pj//v7+/+Xm6v+tsb3/Vl53/1hgd/+/wsv/8PHz////
+ ///A3vH/O5jR/wl/xf8Rg8f/EYPH/xCFy/8Tf8H/JViD/yVYhP8RfsD/BYLL/x2Kyv9eqNT/qsbY/5Wc
+ t/+VmK//foOi/11jjf9IUH7/MDls/x0nYv8YIl//SUuM/2lnq/+Ph8//qZ3n/76v+//EtP//w7P//8Oz
+ //+pnej/dXG2/1NVlv8kK2j/HSVg/x0lYf8eJmL/RkmJ/3Btsf+qnun/wbH+/8Ky///Csv//wrL/+MKy
+ /3/Csv8Kvq/7k5eO1volLmn/ITRt/xVwr/8PiM7/EYLG/xGDx/8Rg8f/EYPH/xGDxv8Rhcn/EoLF/yRa
+ h/8mV4P/EoDD/w+GzP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Ngcb/B37F/0yi1f/U6vb/8O/x/5edq/9ASmT/KDJQ/zZAXP9WXnb/fIOW/8TF
+ zv/l7fP/brTe/wuAxv8Qgsf/EYPH/xGEyf8Qhsv/HWqf/ylPdP8acqz/DYnR/wt0tf8bXI3/Ol6B/yg4
+ bP8sM2n/Iitk/xkjYP8YIl//QkWF/2JhpP93c7j/oJXf/7iq9v/Ds///xLT//8Oz///Csv//wrL//8Ky
+ ///EtP//vK36/6ic5/+BfML/dHG1/3Fus/91cbb/nZPc/7yt+f/Ds///wrL//8Ky///Csv//wrL/9sKy
+ /1zCsv8HwbH+crWn8vhRU5P/Iy5q/x1Jf/8Qh8v/EIfM/xGCxv8Rg8b/EYPH/xGDx/8Rhcn/EoLG/yRb
+ if8mVoD/E3/B/w+GzP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/B37E/yqPzP+w1+7/6unr/3d8j/8RHD3/JzFO/2Fpf/9iaoD/OkRg/21y
+ h//d3uL/isXm/xGDx/8Pgsb/EYPH/xGDx/8Qhsv/Fnq4/ydUff8gY5T/EIbL/xZ5tv8cX5D/FVuO/xxA
+ d/8fKmT/Sk2O/2tprf94dLn/m5Ha/7Ol8P/Csv//xbT//8Oz///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//w7P//8S0///EtP//v7D9/72u+/+/sPz/xLT//8Oz///Csv//wrL//8Ky///Csv//wrL/9MKy
+ /zLCsv8EwrL/SsCw/faXjtb/Iyxo/yExaf8ZW5P/EIXL/w6J0f8Qhcr/EYPH/xGDx/8Qhcv/D4jO/yFj
+ k/8oVHz/FH29/w+Hzf8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8ShMf/DIHG/w2Axf9nsdz/3uzz/7y8wv9haH7/e4KU/8zP1v/Z2+D/p6u3/6Wn
+ tP/h5Oj/gr/j/w+Cx/8Pgsf/EYPH/xGDx/8Qhcr/EYPH/yFjlP8mWIL/FXu6/xCEyf8UgML/D4bM/xhV
+ kP8gLmf/OD18/5mP2P/Ds/7/xLT//8Oz///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//w7L//8Oz///Dsv//wrL//8Ky///Csv//wrL//8Ky///Csv/+wrL/5MKy
+ /xXCsv8BwrL/IcKy/+66rPj/Z2Wo/yEqZv8hMmr/HFWO/xNztP8Ph8z/DonR/w6K0v8OidH/EX6//yJO
+ ff8pR27/F3m2/w+Hzv8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/wh+xP8eisr/jMXl/+fu8v/e3uP/5OXp//z8/f//////+fn6//X0
+ 9v/V5/L/VKbW/wp/xf8Rg8f/EYPH/xGDx/8RhMj/EIbM/xpvqP8oUnn/Gm+o/w+Hzv8Ph83/DYvU/xda
+ lf8fL2j/PkKB/6GW4P/FtP//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/8wrL/uMKy
+ /wzCsv8AwrL/DsKy/8fBsf79sKPu/2JhpP8gKWT/Ii9n/x4/ef8cUYv/GVqV/xhcmP8aVpH/HUWB/yIx
+ aP8kN2r/G2ig/xCHzv8Rg8j/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/w+Cxv8Jf8X/J4/N/4G/4//d7/r//////////////////////+r1
+ +/+AvuH/HorK/wyBxv8Rg8f/EYPH/xGDx/8Rg8f/D4bM/xZ3tP8oU3z/Hmec/xCFyv8Qhcv/D4jO/xlY
+ kv8fLmb/WVmb/62g6//Es///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/5wrL/fcKy
+ /wjCsv8AwrL/CcKy/4jCsv/6wrL//6+i7f90cLX/Hyhk/x4mYf8fKWL/Ii9o/yEwaf8hLWb/HiZh/x4n
+ Y/8iLWj/HkaA/xGBxf8Qhcv/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xKDx/8Pgsf/CX7F/xqIyv9YqNn/mcrn/7bZ7v+52+7/ptHq/260
+ 3P8ljsv/DIDG/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/D4bM/xR8vf8lWYX/IGOW/xGCxv8PiM//D4TI/xxL
+ h/8fKWP/Y2Kl/7Gk7//Ds///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/3wrL/QMKy
+ /wMAAAAAwrL/BMKy/0TCsv/4wrL//8Oz//+6q/f/iYLJ/3p1uv9gX6L/Hidj/xwmYf8pMW7/cG2x/2hm
+ qf8iKmb/IDZy/xNxsP8Qh87/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/D4LH/wp/xv8Ogcf/IozL/zWWz/83l9D/K5PR/xaJ
+ zP8Ngsf/EILH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EIbL/xN/wf8jXIr/IWCR/xKBxP8OjNT/EnKy/x08
+ eP8eJmL/eHO4/7qs+P/Ds///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//7Csv/gwrL/GMKy
+ /wEAAAAAwrL/AcKy/xjCsv/YwrL//sKy///Ds///xLT//72u+v+vou3/ioPK/4mCyf+RidH/uar2/5+V
+ 3v8fKGP/ITJs/xlclP8Qh8z/EITI/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Ogcf/C4DG/wmByP8KgMb/FG6p/xZy
+ rv8Phcv/EYTJ/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EIbL/xN/wP8kW4j/IWCQ/xGDx/8Oi9P/GVuV/yEy
+ a/8aJF//iYLJ/8Oz/v/Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//vCsv+ewrL/CsKy
+ /wAAAAAAwrL/AMKy/wrCsv+TwrL/+8Ky///Csv//wrL//8Oz///Ds///xLT//8S0///FtP//w7P//7Om
+ 8f9cXJ7/ISxn/x5Be/8Rerz/EIfM/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EIPH/xKAw/8ba6H/KU90/ydT
+ e/8Zcav/EYTI/xGEyf8Rg8f/EYPH/xGDx/8Rg8f/D4bM/xR+v/8lWYX/IWGS/xCIz/8QeLv/HUF7/yAp
+ Y/9aW53/raDr/8Sz///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//nCsv9KwrL/BAAA
+ AAAAAAAAAAAAAMKy/wTCsv8/wrL/9sKy///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Gx
+ /f+Yj9f/Hidj/yExbP8ZXZX/EIbL/xCFyf8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8RhMj/EIXJ/xOAwv8kW4f/MztW/y9D
+ Yv8mVoD/F3Ww/xGEyP8RhMn/EYPH/xGDx/8Rg8f/EIbM/xZ6uP8nVH3/Hmic/xCFyP8aV5D/IjBo/xok
+ X/+Igcj/w7P+/8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//sKy/9HCsv8XwrL/AQAA
+ AAAAAAAAAAAAAMKy/wDCsv8UwrL/wsKy//3Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Oz
+ //+1p/L/YWCj/yAqZf8fPnj/E3a1/xCHzP8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDxv8Qhcn/EIbM/xGDyP8acKr/K0xx/zFA
+ Xf8tR2j/KFR7/xlzrf8Qhsv/EYPI/xGDx/8Rg8j/D4bM/xlzrv8nVH7/HWid/xpXlf8hM23/HCZg/2Zk
+ qP+0pvH/w7P//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL/+8Ky/4PCsv8JwrL/AAAA
+ AAAAAAAAAAAAAMKy/wDCsv8HwrL/ZcKy//vCsv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Bsf7/pZrk/0lMjP8hLWj/G0qH/xCDxv8Qhcr/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8QhMn/EIXL/xCFyv8Rgsb/G26m/ylR
+ d/8uR2j/KFR7/x9mmf8Ve7n/EYTJ/xGDx/8Qhcr/EYTI/x9jlP8mPW7/ITt2/yAwbP8cJGD/Wlqc/66h
+ 7P/EtP//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/+wrL/6cKy/y7Csv8CAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCsv8BwrL/H8Ky/9TCsv/+wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Dsv//va76/4N9w/8eJ2P/ITJt/xpgmf8Qhsv/EITJ/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EIXK/xCFyv8Rg8f/E4DC/xtw
+ p/8nVn//KFJ6/yZZg/8acKn/EITJ/xGDyP8Qh8z/FnOw/yFEev8iK2T/HSVh/0FEhP93c7j/q5/p/8Gx
+ /v/Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/8wrL/lsKy/wzCsv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCsv8AwrL/CMKy/3HCsv/8wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//6+i7f9eXqD/Hylk/yE6cv8ZZZ//EIXK/xCEyf8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPI/xCFyf8Rhcn/EYTI/xKB
+ xP8Webf/HGyi/xtvpv8Tfr//EYPH/xCFyv8SgML/HFGN/x8rZf9ESIf/dnK3/5+U3f+6rPf/wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/twrL/NMKy/wLCsv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwrL/AcKy/yHCsv/PwrL//sKy///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Gx/f+mm+X/VVaX/x8pZf8hOnL/G2Ca/xGDx/8Qhcv/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8RhMj/EIXJ/xCE
+ yf8RhMn/EoHD/xKBxP8Rg8j/EYTJ/xCGy/8ZW5r/IC5q/zo+ff+LhMv/u6z3/8Ky///Ds///wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//3Csv+bwrL/DsKy/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wbCsv9ZwrL/+cKy///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Asf3/o5ji/1VWmP8fKWT/IjNt/xxOjP8Tfr//EIfM/xCEyf8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPI/xGD
+ yP8Rg8f/EYPH/xGDx/8RhMn/D4fM/xdsqf8gO3T/HSVg/2Nipf+0pvL/xLT//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//sKy/+TCsv8ywrL/AsKy/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8WwrL/q8Ky//7Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wbH9/6aa5P9dXZ//Hidi/yEtaf8dSIP/FXKw/xCHzP8Qhsz/EYTI/xGD
+ x/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8Rg8f/EYPH/xGEyv8Qh83/FXCu/x5Ce/8eKWT/TU+Q/6CV3//Csv7/wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//cKy/3DCsv8JwrL/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8DwrL/O8Ky/+nCsv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Gx/v+rn+r/dnG3/0JFhf8fK2b/ID94/xtelv8SeLn/D4bM/xCG
+ zP8RhMj/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGD
+ x/8RhMj/EIfM/xCFy/8Xaqf/H0F5/x4qZf9HSor/mI/Y/8Cw/P/Dsv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/+wrL/v8Ky/x3Csv8BwrL/AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/DMKy/3fCsv/8wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Bsv//uar2/5qR2f9SU5T/Hylk/yEybP8fOXX/G1GP/xKA
+ wv8Ph8z/D4jO/xCFyv8Rg8f/EYPG/xGDxv8Rg8f/EYPH/xGDx/8Rg8f/EYPH/xGDx/8Rg8b/EYTI/xCG
+ zP8Ph83/Eny9/xtclP8iO3L/Hilk/0dKiv+Xjdb/v7D7/8Oz///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/twrL/ScKy/wTCsv8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy/x3Csv+owrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//w7P//8Cw/P+nnOb/dHC0/0FEhP8hKGX/JDFn/yVO
+ ef8dap7/FXu6/xCFyv8OiM//D4jP/xCHzf8Qhsr/EIXJ/xCFyf8Qhcn/EIXK/xCGy/8PiM//D4jP/xF+
+ wP8ZZJ7/H0V+/yExa/8eKGL/TlCR/52T2/+/r/v/w7P//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky//zCsv91wrL/DcKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wLCsv8xwrL/1cKy///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Bsf7/uav2/4J8wv8eJ2P/IjJo/yRJ
+ cv8oU3v/KFR7/yJfj/8bbKT/F3a1/xN+wP8Rg8f/EIXK/xCGzP8Qhsz/EIXL/xGDxv8UdbT/GV+Z/x5F
+ f/8hM27/Hytl/z5Cgf95dbr/qZ3n/8Cw/P/Ds///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//sKy/6XCsv8bwrL/AcKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8FwrL/T8Ky//DCsv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///EtP//npPc/zM6eP8hK2X/HUqC/xJ/
+ wv8Xd7X/IWOU/ydWf/8pUXn/KFJ7/ydUfv8lWIf/IlyO/yJcj/8iXI//IlyN/yFLgf8gNnP/ITJt/yEs
+ Z/8eJ2L/T1GR/5yS2/+7rPf/wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL/zsKy/y/Csv8CwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/DMKy/2jCsv/0wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Ds///kYjQ/x0mYf8hNG3/F2Gd/w2M
+ 1f8Qhsv/EYTI/xR+v/8YdLH/I1yM/ytPb/8ib4//HH6i/yBylf8ed5n/HnWW/yFJd/8gJ2P/Oj99/2po
+ rP+RiND/sKLu/8Cw/f/Ds///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv/fwrL/Q8Ky/wTCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy/xLCsv92wrL/+8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//j4fO/x4mYv8fPHf/FHOy/w+I
+ z/8Rg8f/EITJ/w+Hzv8Qhsz/HWif/yFsj/8Nt9T/BNLx/wXE7v8Fy+//Bcrs/xR1p/8fI1//Wlqc/62h
+ 6//AsPz/w7P//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky/+XCsv9PwrL/B8Ky/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wHCsv8XwrL/hcKy
+ //3Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//jYXN/x4mYv8ePnr/Ena2/w+H
+ zP8Rg8f/EYPH/xCGy/8Sgsf/H2SZ/x9zlv8Iw+P/AN3//wDT//8A2P//ANr//xGHt/8gKGD/WFia/7Cj
+ 7v/Es///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL/8MKy/1rCsv8KwrL/AMKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8BwrL/GsKy
+ /4LCsv/5wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//jobN/x4mYv8ePHj/E3Oz/w+H
+ zv8Rg8b/EYPH/xCGy/8Sgsf/H2Sa/yFwk/8Jv+D/ANr//wDO/f8A1///AtD0/xN1p/8fJF//Xl2g/7ao
+ 8//Ds///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv/pwrL/W8Ky/wzCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy
+ /xbCsv90wrL/9sKy///Csv//wrL//8Ky///Csv//wrL//8Ky///Ds///kIjP/x4nYv8gN3H/Fmmm/w+K
+ 0f8Rg8X/EYPH/xGFyf8Rhcn/HGqh/yNjiP8NsNH/ANv//wDP/v8A2v//B7bY/xpShf8eJGD/ZmWo/76v
+ /P/Ds///wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ /9/Csv9SwrL/C8Ky/wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy
+ /wHCsv8SwrL/Z8Ky/+7Csv/+wrL//8Ky///Csv//wrL//8Ky///EtP//k4vT/x8oZP8iLmf/GlWO/w+L
+ 0v8Qg8j/EYPH/xGDx/8Qh8z/F3a1/yZXgf8aian/A9X3/wDb//8A2f//DpK8/yAzaP8eJmL/bmuv/8W1
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/+wrL/0sKy
+ /0bCsv8IwrL/AMKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy
+ /wDCsv8AwrL/DMKy/0vCsv/OwrL//cKy///Csv//wrL//8Ky///Dsv//uqv3/3h0uP8fJ2P/Hzp0/xVs
+ qv8Oi9L/EIPI/xGDxv8Qhcr/EITI/x5mnP8oWXr/FJu8/wHc+/8Fvdz/F1eJ/x8mYf9ZWZv/saTv/8Oz
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//3Csv+swrL/M8Ky
+ /wXCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AADCsv8AwrL/AMKy/wbCsv8twrL/pMKy//zCsv/+wrL//8Ky///Csv//xLT//5OK0v8gKWX/Iitn/x88
+ dv8Xaqf/D4nP/xCGy/8Qg8j/EIbL/xN/wv8hYZL/KlR0/yJqif8dXYT/ITJo/x4nY/9ta6//xrX+/8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/+wrL/8cKy/3zCsv8ewrL/A8Ky
+ /wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAwrL/AMKy/wDCsv8CwrL/GsKy/27Csv/gwrL//cKy///Csv//wrL//7+w+v+Ff8X/ICpl/yIs
+ aP8hNm7/HFWL/xR6u/8QhMv/EIbM/w+Iz/8SgMP/HV+T/yU6Zv8jL2P/Hylk/2Jho/+6q/b/w7P//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky//zCsv/JwrL/UMKy/w/Csv8BwrL/AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAADCsv8AwrL/AcKy/wnCsv8ywrL/n8Ky//TCsv/9wrL//8Ky///AsPr/hX7F/yIr
+ Z/8kLWn/IS5q/yE2cP8iQHb/IEh7/x9IfP8hQHX/IzVs/yIsZ/8gKWT/XV2f/7Wo8//Ds///wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv/8wrL/6MKy/33Csv8iwrL/BsKy/wDCsv8AAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wDCsv8DwrL/E8Ky/0/Csv++wrL/+cKy//3Csv//vq77/62g
+ 6/91cbb/Iyxo/yYva/8lL2r/JC9q/yQvav8lL2r/Ji9r/yMsaP9iYaT/vKz2/8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//MKy//PCsv+nwrL/N8Ky/wvCsv8BwrL/AMKy/wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AMKy/wXCsv8YwrL/VcKy/7zCsv/4wrL//MKy
+ //+7rPn/raDr/5uR2f97drv/YV+i/2Fgo/97drv/m5Ha/6+i7f+6q/f/wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//sKy//vCsv/wwrL/p8Ky/z/Csv8RwrL/A8Ky/wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrL/AMKy/wDCsv8AwrL/BsKy/xbCsv9PwrL/sMKy
+ /+vCsv/5wrL//cCw/f+9rvr/uqv4/7qs+P+9rvr/wLD9/8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ //zCsv/4wrL/4MKy/5nCsv87wrL/D8Ky/wTCsv8AwrL/AMKy/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCsv8AwrL/AMKy/wDCsv8FwrL/DcKy
+ /yjCsv90wrL/xcKy//PCsv/4wrL/+8Ky//7Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky
+ ///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//8Ky///Csv//wrL//cKy//rCsv/3wrL/7MKy
+ /7HCsv9ewrL/H8Ky/wvCsv8DwrL/AMKy/wDCsv8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy/wDCsv8AwrL/AMKy
+ /wLCsv8IwrL/EMKy/y/Csv9owrL/osKy/9rCsv/zwrL/9sKy//jCsv/6wrL//MKy//3Csv/+wrL//8Ky
+ ///Csv//wrL//8Ky///Csv/9wrL//MKy//vCsv/5wrL/+MKy//XCsv/ywrL/zMKy/5TCsv9dwrL/I8Ky
+ /wzCsv8GwrL/AcKy/wDCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKy
+ /wDCsv8AwrL/AMKy/wLCsv8HwrL/C8Ky/xXCsv8xwrL/WcKy/4HCsv+nwrL/xMKy/9PCsv/rwrL//8Ky
+ ///Csv//wrL//8Ky//7Csv/iwrL/z8Ky/77Csv+bwrL/e8Ky/1PCsv8mwrL/D8Ky/wrCsv8GwrL/AcKy
+ /wDCsv8AwrL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD////+AAAAH////8D////4AAAAA////8D////AAAAAAP///8D///8AAAAAAD///8D///wAAAAAAA//
+ /8D///gAAAAAAAP//8D//+AAAAAAAAD//8D//8AAAAAAAAB//8D//4AAAAAAAAA//8D//gAAAAAAAAAf
+ /8D//AAAAAAAAAAH/8D/+AAAAAAAAAAD/8D/8AAAAAAAAAAB/8D/4AAAAAAAAAAB/8D/wAAAAAAAAAAA
+ /8D/gAAAAAAAAAAAf8D/gAAAAAAAAAAAH8D/AAAAAAAAAAAAD8D+AAAAAAAAAAAAD8D+AAAAAAAAAAAA
+ B8D8AAAAAAAAAAAAB8D4AAAAAAAAAAAAA8D4AAAAAAAAAAAAA8DwAAAAAAAAAAAAA8DwAAAAAAAAAAAA
+ AcDgAAAAAAAAAAAAAcDgAAAAAAAAAAAAAMDAAAAAAAAAAAAAAMDAAAAAAAAAAAAAAEDAAAAAAAAAAAAA
+ AECAAAAAAAAAAAAAAECAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAACAAAAAAAAAAAAAAEDAAAAAAAAAAAAA
+ AEDAAAAAAAAAAAAAAEDAAAAAAAAAAAAAAMDgAAAAAAAAAAAAAMDgAAAAAAAAAAAAAcDwAAAAAAAAAAAA
+ AcDwAAAAAAAAAAAAA8D4AAAAAAAAAAAAA8D4AAAAAAAAAAAAB8D8AAAAAAAAAAAAB8D+AAAAAAAAAAAA
+ D8D+AAAAAAAAAAAAD8D/AAAAAAAAAAAAH8D/gAAAAAAAAAAAP8D/gAAAAAAAAAAAf8D/wAAAAAAAAAAA
+ /8D/4AAAAAAAAAAA/8D/8AAAAAAAAAAB/8D/+AAAAAAAAAAD/8D//AAAAAAAAAAH/8D//gAAAAAAAAAf
+ /8D//4AAAAAAAAA//8D//8AAAAAAAAB//8D//+AAAAAAAAD//8D///gAAAAAAAP//8D///wAAAAAAA//
+ /8D///8AAAAAAB///8D////AAAAAAH///8D////4AAAAA////8D////+AAAAH////8A=
+
+
+
\ No newline at end of file
diff --git a/BikeSharingSystem/GA.cs b/BikeSharingSystem/GA.cs
new file mode 100644
index 0000000..4c1781d
--- /dev/null
+++ b/BikeSharingSystem/GA.cs
@@ -0,0 +1,600 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ public class GA
+ {
+ // A nested delegate (data Type) declaration defining a function returning a double value
+ // while taking an argument of an array of type T
+ public delegate double ObjectiveFunctionDelegate(T[]chromosome);
+
+ // Problem associated data, which are specified via constructor
+ // Delegate (function pointer in C) for the user-supplied objective evalution function.
+ public ObjectiveFunctionDelegate GetObjectiveValueFunction;
+ protected OptimizationType optimizationType = OptimizationType.Min;
+ protected int numberOfGenes; // The length of a chromosome 1
+ protected int anotherGenes; // the length of a chromosome (卡車出發時間點+初始貨物數量)
+ protected double goalValue;
+ protected int BestOne;
+ protected int populationSize = 100;
+ protected int numberOfCrossoveredChildren;
+ protected int numberOfMutatedChildren;
+ protected double crossoverRate = 0.8;
+ protected double mutationRate = 0.3;
+ protected int iterationLimit = 1000; // The default stopping condition
+ protected int iterationCount; // Current iteration index
+ SelectionMode selectionMode = SelectionMode.Deterministic;
+ PermutationCrossover crossoverType = PermutationCrossover.HeuristicServiceEmergecy;
+
+ protected T[][] chromosomes; // Parameterized type, specified by the derived class
+ protected double[] objectiveValues; // Positive or negative real numbers
+ protected double[] fitnessValues; // Must be positive values
+
+ protected double iterationBestObjective; // The best value obtained in the current iteration
+ protected double iterationAverage; // The objective average obtained in the current iteration
+
+ protected double soFarTheBestObjective; //in fact it is private
+ protected T[] soFarTheBestSolution;
+
+ // Used to stochastically select pairs of parents for crossover operation.
+ // Used in deterministic selection operation to sort the chromosome indices for ordered fitness
+ // Used in stochastic selection operation to store the indices of chosen chromosomes
+ protected int[] indices; // Store indices of chromosome, which are subject to shuffle, sorting, inversing operations
+
+ protected Random rnd = new Random(); // Shared by all derived classes
+
+
+ #region PropertiesRegion
+ [Category("GA Setting"), Description("染色體數量,建議值是不低於變數數量的1/4。")]
+ public int PopulationSize
+ {
+ get
+ {
+ return populationSize;
+ }
+ set
+ {
+ if (populationSize < 2) return;
+ populationSize = value;
+ }
+ }
+
+ // ...
+
+ [Browsable(false)]
+ public double SoFarTheBestObjective
+ {
+ get
+ {
+ return soFarTheBestObjective;
+ }
+ }
+
+ [Browsable(false)]
+ public T[] SoFarTheBestSolution
+ {
+ set
+ {
+ soFarTheBestSolution = value;
+ }
+ get
+ {
+ return soFarTheBestSolution;
+ }
+ }
+ [Browsable(false)]
+ public int IterationCount
+ {
+ get
+ {
+ return iterationCount;
+ }
+ }
+ [Category("GA Setting"), Description("the more the better ")]
+ public int IterationLimit
+ {
+ get
+ {
+ return iterationLimit;
+ }
+
+ set
+ {
+ if (value > 0)
+ { iterationLimit = value; }
+ }
+ }
+ //[Category("GA Setting"), Description("交配的方式")]
+ //public PermutationCrossover CrossOverMode
+ //{
+ // get
+ // {
+ // return crossoverType;
+ // }
+ // set
+ // {
+ // crossoverType = value;
+ // }
+ //}
+ [Category("GA Setting"), Description("篩選的模式")]
+ public SelectionMode SelectionMode
+ {
+ get
+ {
+ return selectionMode;
+ }
+ set
+ {
+ selectionMode = value;
+ }
+ }
+ [Category("GA Setting"),Description("突變機率建議不大於0.5")]
+ public double MutationRate
+ {
+ set
+ {
+ if (mutationRate <= 0.5)
+ { mutationRate = value; }
+ else { mutationRate = 0.5; }
+ }
+ get { return mutationRate; }
+ }
+ [Browsable(false)]
+ public double IterationBestObjective
+ {
+ get
+ {
+ return iterationBestObjective;
+ }
+ }
+
+ [Browsable(false)]
+ public double IterationAverage
+ {
+ get
+ {
+ return iterationAverage;
+ }
+ }
+ #endregion
+
+
+ ///
+ /// To employ a GA solver, user must provide the number of variables, the optimization type, and a function delegate
+ /// that compute and return the objective value for a given solution.
+ ///
+ /// Number of variables of the problem
+ /// The optimization problem type
+ /// The function delegate that computer the objective value for a given solution
+ public GA(int numberOfVariables, OptimizationType opType, GA.ObjectiveFunctionDelegate objectFunction)
+ {
+ numberOfGenes = numberOfVariables;
+ optimizationType = opType;
+ if (objectFunction == null) throw new Exception("You must prepare an objective function.");
+ GetObjectiveValueFunction = objectFunction;
+ }
+
+
+ ///
+ /// This function reallocate memeory for the GA computation subject to newly
+ /// specified properties; e.g, population size. In addition, the initial population
+ /// of chromosomes are initialized.
+ ///
+ T[,] temp;
+ public virtual void reset()
+ {
+ // Allocate memory for gene related data
+ chromosomes = new T[populationSize * 3][];
+ indices = new int[chromosomes.Length];
+ temp = new T[populationSize, numberOfGenes];
+ // Initialize the initial population
+ for (int i = 0; i < chromosomes.Length; i++)
+ {
+ chromosomes[i] = new T[numberOfGenes];
+ }
+
+ // Reset computation realted variables
+ soFarTheBestSolution = new T[numberOfGenes];
+ objectiveValues = new double[chromosomes.Length];
+ fitnessValues = new double[chromosomes.Length];
+ initializePopulation();
+ for (int j = 0; j < populationSize; j++)
+ {
+ objectiveValues[j] = GetObjectiveValueFunction(chromosomes[j]);
+ }
+ iterationCount = 0;
+ soFarTheBestObjective = ((optimizationType == OptimizationType.Min) ? double.MaxValue : double.MinValue);
+
+ }
+
+
+ ///
+ /// This function setup the indices from 0 to upLimit-1 in indice array (int[] indices).
+ /// Then, shuffle their orders randomly.
+ /// This function is called to shuffle the indice orders of parent population to support
+ /// pair-wise crossover operation. If x pairs of parents are to be crossovered, then
+ /// the first 2x indices are the chromosome indices of the x pair parents.
+ ///
+ ///
+ ///
+
+ protected void randomizeIndices(int upLimit)
+ {
+ for (int i = 0; i < populationSize*3; i++) { indices[i] = i; }
+ for (int j = upLimit-1; j > 0; j--) //做swap的洗牌
+ {
+ int temp = indices[j];
+ int pos = rnd.Next(j + 1);
+ indices[j] = indices[pos];
+ indices[pos] = temp;
+ }
+ }
+
+ ///
+ /// Called in reset function. Overriden by the derived classes to fill-in
+ /// populationSize chromosomes with gene values of their data types.
+ ///
+ public virtual void initializePopulation()
+ {
+
+ }
+
+
+ ///
+ /// Default method that carryout the whole GA computation without any interruption.
+ ///
+ public virtual void executeToEnd()
+ {
+ do
+ {
+ executeOneIteration();
+ } while (!terminationConditionMet());
+ }
+
+ ///
+ /// A function that determine wether stopping condition is met. By default, the iteration
+ /// limit is used and checked for termination. Derived calles can override it.
+ ///
+ ///
+ public virtual bool terminationConditionMet()
+ {
+ if (iterationCount < iterationLimit) return false;
+ else return true;
+ }
+
+
+ ///
+ /// Standard GA computation procedure. However, derived classes may override it.
+ ///
+ public virtual void executeOneIteration()
+ {
+ // Crossover operation
+ performCrossoverOperation();
+ // Mutation operation
+ performMutateOperation();
+ // Evaluate all objectives
+ computeObjectiveValues();
+ // Transform objectives to fitness values
+ setFitnessFromObjectives();
+ // Selection
+ performSelectionOperation();
+
+ iterationCount++;
+ }
+
+ //public virtual void updatePheromonetable()
+ //{
+
+ //}
+
+ ///
+ /// Standard function that evaluates original objective values for parent and children chromosomes.
+ /// During the computation, iteration best is identified and checked with the so far the best.
+ /// The so far the best objective and solution will be updated, if the iteration best surpass its value.
+ /// Specifically, this function calls the user-supplied objective value evalution function delegate to
+ /// evaluate each chromosome and put value to objectiveValues array.
+ ///
+ public virtual void computeObjectiveValues()
+ {
+ int parentPlusChildren = populationSize + numberOfCrossoveredChildren + numberOfMutatedChildren;
+ // parentPlusChildren = chromosomes.Length ;
+ for (int i = 0; i < parentPlusChildren ; i++)
+ {
+ objectiveValues[i] = GetObjectiveValueFunction(chromosomes[i]);
+ }
+
+
+ switch (optimizationType)
+ {
+ case OptimizationType.Min:
+ {
+ iterationBestObjective = double.MaxValue;
+ iterationAverage = 0.0;
+ for (int j = 0; j < parentPlusChildren; j++)
+ {
+ iterationAverage += objectiveValues[j];
+
+ if (objectiveValues[j] < iterationBestObjective)
+ {
+ iterationBestObjective = objectiveValues[j];
+ BestOne = j;
+ }
+ }
+ iterationAverage /= (double)parentPlusChildren;
+
+ if (iterationBestObjective < soFarTheBestObjective)
+ {
+ soFarTheBestObjective = iterationBestObjective;
+ for (int k = 0; k < numberOfGenes; k++)
+ {
+ soFarTheBestSolution[k] = chromosomes[BestOne][k];
+ }
+ }
+ break;
+ }
+ case OptimizationType.Max:
+ {
+ iterationBestObjective = double.MinValue;
+ iterationAverage = 0.0;
+ for (int i = 0; i < parentPlusChildren; i++)
+ {
+ iterationAverage += objectiveValues[i];
+
+ if (objectiveValues[i] > iterationBestObjective)
+ {
+ iterationBestObjective = objectiveValues[i];
+ BestOne = i;
+ }
+
+ }
+ iterationAverage /= (double)parentPlusChildren;
+
+ if (iterationBestObjective > soFarTheBestObjective)
+ {
+ this.soFarTheBestObjective = this.iterationBestObjective;
+
+ for (int i = 0; i < numberOfGenes; i++)
+ {
+ soFarTheBestSolution[i] = chromosomes[BestOne][i];
+ }
+ }
+ break;
+ }
+
+ }
+ }
+
+ ///
+ /// This function convert original objective values into positive fitness values, such that
+ /// the better chromosome receives the larger amount of fitness. Notice that the worest one
+ /// still receive the least amount of positive fitness value.
+ /// Sepcifically, the function transform each value in objectiveValues array to the value in
+ /// fitnessValues array.
+ ///
+ public void setFitnessFromObjectives()
+ {
+ int total = populationSize + numberOfCrossoveredChildren + numberOfMutatedChildren;
+ double max = double.MinValue, min = double.MaxValue;int[] pd = new int[objectiveValues.Length];
+ for (int i = 0; i < total; i++)
+ {
+ for (int a = (numberOfGenes - 2) / 2; a < numberOfGenes - 1; a++)
+ {
+ pd[i] += Math.Abs(Convert.ToInt32(chromosomes[i][a]));
+ pd[i] = pd[i]/2;
+ }
+ if (objectiveValues[i]+pd[i] < min)
+ {
+ min = objectiveValues[i]+pd[i];
+ }
+
+ if (objectiveValues[i] + pd[i] > max)
+ {
+ max = objectiveValues[i] + pd[i];
+ }
+ }
+ double bound;
+ switch (optimizationType)
+ {
+ case OptimizationType.Min:
+ for (int i = 0; i < total; i++)
+ {
+
+ bound = max + (max - min) * 0.01;
+ fitnessValues[i] = (bound - (objectiveValues[i] + pd[i]) / (bound - min));
+ indices[i] = i;
+ }
+ break;
+ case OptimizationType.Max:
+ for (int i = 0; i < total; i++)
+ {
+ bound = min - (max - min) * 0.01;
+ fitnessValues[i] = (bound - (objectiveValues[i] + pd[i]) / (bound - max));
+ indices[i] = i;
+ }
+ break;
+ }
+
+ }
+
+ ///
+ /// Standard crossover operation in a GA iteration. With the help of a shuffled index array (indices array)
+ /// parent chromosomes are paired for crossover operation.
+ /// This standard function calls derived class overriden generateAPairOfCrossoveredOffspring() function to
+ /// let that function access parent chromosome (via indices) and set gene values for the children chromosome
+ /// (via indices).
+ ///
+ public virtual void performCrossoverOperation()
+ {
+ // Calculate the number of crossovered chromosomes (must be even number)
+ numberOfCrossoveredChildren = (int)(crossoverRate * populationSize);
+ if (numberOfCrossoveredChildren % 2 == 1) numberOfCrossoveredChildren++;
+ if (numberOfCrossoveredChildren > populationSize) numberOfCrossoveredChildren = populationSize;
+ // Randomly sort the parent indices to select the parents for pair-wise crossover
+ randomizeIndices(populationSize);
+ // For a pair of parent indices, prepare the successive children indices,
+ // call generateAPairOfCrossoveredOffspring() to produce crossovered offspring
+ int child1 = populationSize, child2 = populationSize + 1;
+ for (int i = 0; i < numberOfCrossoveredChildren; i += 2)
+ {
+ generateAPairOfCrossoveredOffspring(indices[i], indices[i + 1], child1, child2);
+ child1 += 2;
+ child2 += 2;
+ } //避免選到相同的父母
+ }
+
+
+ ///
+ /// Given two parent indices, and two children indices, this function perform crossover operation. The gene values
+ /// of the children will be set by this function. This function must be overriden by the derived classes.
+ ///
+ /// index of farther chromosome
+ /// index of mother chromosome
+ /// index of child 1 chromosome
+ /// index of child 2 chromosome
+ public virtual void generateAPairOfCrossoveredOffspring(int fartherIdx, int motherIdx, int child1Idx, int child2Idx)
+ {
+ }
+
+ ///
+ /// This function conducts one of the primary operaion in GA compution. Since different GA codings had different
+ /// mutation operations, no standard mutation operation is available.
+ /// Derived class must override this function.
+ ///
+ public virtual void performMutateOperation()
+ {
+ }
+
+
+ ///
+ /// This function provide standard GA selection operation. However, it allowed derived classes to override it.
+ /// Two selection modes are provided in this funciton: deterministic and stochastic.
+ ///
+
+ public virtual void performSelectionOperation()
+ {
+ int Totalchromosons = populationSize + numberOfCrossoveredChildren + numberOfMutatedChildren;
+ if (selectionMode == SelectionMode.Deterministic)
+ {
+ // this.randomizeIndices(Totalchromosons);//why ??
+ Array.Sort(fitnessValues, indices, 0, Totalchromosons);
+ Array.Reverse(indices, 0, Totalchromosons);
+ // Array.Reverse(fitnessValues,0,Totalchromosons);
+ }
+ else if (selectionMode == SelectionMode.Stochastic)
+ {
+ double wheelarea = 0.0;double hit = 0;
+ for (int l = 0; l < Totalchromosons; l++)
+ {
+ fitnessValues[l]+=wheelarea;
+ wheelarea = fitnessValues[l];
+ }
+
+ for (int i = 0; i < populationSize; i++)
+ {
+ hit = rnd.NextDouble() * wheelarea;
+ for (int j = 0; j < Totalchromosons - 1; j++)
+ {
+ if (hit<= fitnessValues[1])
+ indices[i] = 0;
+ else if (fitnessValues[j] < hit && fitnessValues[j + 1] >= hit)
+ {
+ indices[i] = j + 1;
+ }
+ }
+ }
+ }
+ Array.Sort(indices, 0, populationSize);
+ //amend and provided by professor 難道可以信?!!!
+ if (selectionMode == SelectionMode.Deterministic)
+ {
+ for (int i = 0; i < populationSize; i++)
+ {
+ objectiveValues[i] = objectiveValues[indices[i]];
+ for (int j = 0; j < numberOfGenes; j++)
+ {
+ chromosomes[i][j] = chromosomes[indices[i]][j];
+ }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < populationSize; i++)
+ {
+ bool reserved = false;
+ for (int j = 0; j < populationSize; j++)
+ {
+ if (i == indices[j])
+ {
+ indices[j] = -1;
+ reserved = true;
+ break;
+ }
+ }
+ if (!reserved)
+ {
+ for (int k = 0; k < populationSize; k++)
+ {
+ if (indices[k] < 0) continue;
+ for (int m = 0; m < numberOfGenes; m++)
+ {
+ chromosomes[i][m] = chromosomes[indices[k]][m];
+ }
+ objectiveValues[i] = objectiveValues[indices[k]];
+ indices[k] = -1;
+ break;
+ }
+ }
+ }
+ }
+ //for (int i = 0; i < populationSize; i++)
+ //{
+ // bool reserved = false;
+ // for (int j = 0; j < populationSize; j++)
+ // {
+ // if (i == indices[j])
+ // {
+ // indices[j] = -1;
+ // reserved = true;
+ // break;
+ // }
+ // }
+ // if (!reserved)
+ // {
+ // int chosen = -1;
+ // for (int k = 0; k < populationSize; k++)
+ // {
+ // if (!(indices[k] < 0))
+ // {
+ // chosen = indices[k];
+ // indices[k] = -1;
+ // break;
+ // }
+ // }
+ // for (int m = 0; m < numberOfGenes; m++)
+ // {
+ // chromosomes[i][m] = chromosomes[chosen][m];
+ // }
+ // objectiveValues[i] = objectiveValues[chosen];
+ // }
+ //}
+
+ }
+ }
+
+
+ ///
+ /// Type of optimization problem.
+ ///
+ public enum OptimizationType { Min, Max}
+
+ ///
+ /// Type of GA selection procedure
+ ///
+ public enum SelectionMode { Deterministic, Stochastic }
+ public enum PermutationMutation { EmergentService, RandomAssignment , ReciprocalExchange,Inversion, TSPHeuristic ,Heuristic}
+}
diff --git a/BikeSharingSystem/HybridACOGA.cs b/BikeSharingSystem/HybridACOGA.cs
new file mode 100644
index 0000000..539ee0d
--- /dev/null
+++ b/BikeSharingSystem/HybridACOGA.cs
@@ -0,0 +1,322 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ class HybridACOGA:GA
+ {
+ protected int numberOfCity;
+ protected int[][] solutions; // Default solutions are of int type
+ protected double dropPheromone = 0.01; // Simplest method uses this amount to drop on each segment
+ protected double dropMultiplier = 1.0; // Q value; the drop amount is dropMultiplier/objective * dropPheromone
+ protected int selectedIdx = 0;
+ protected double[,] pheromone; // Rectangular matrix (square for nxn) of the pheromone values
+ protected double[,] heuristicValues; // Matrix of the heuristic values, usually initialized from the problem
+ protected ObjectiveFunctionDelegate getObjectiveValue = null; // Function delegate for computing the objective value, provided by the user
+ protected double[] probabilities; // Variables to keep the compued probabilities of the candidate elements
+ protected int[] candidateSet; // The indices of the candidate elements
+ protected int[] indicesOfAnts; // Used in pheromone updating to hold indices of ants, when objective values are sorted
+ protected double pheromoneFactor = 1.0; // 值越大越倚賴之前建構出來的經驗
+ protected double heuristicFactor = 1.0; // 值越大越像greedy
+ protected double evaporationRate = 0.1; // Pheromone evaporation rate
+ double[,] FromToDistanceMatrix = null;
+ double AverageDistance ;
+ Station[] station;
+ int truckcapacity;
+ int[] soFarTheBestSoluiton;
+ int[] BestAntRoute;
+ double[] ObjectiveValues;
+ double ITB;
+ public int[][] chromosome;
+ public double SFB = double.MaxValue;
+ public int TruckCapacity
+ {
+ set { truckcapacity = value; }
+ get { return truckcapacity; }
+ }
+ public int[][] Solution
+ {
+ get { return solutions; }
+ }
+ public int[] SoFarTheBestSoluiton
+ {
+ get { return soFarTheBestSoluiton; }
+ }
+ public void reset(int P)
+ {
+ indicesOfAnts = new int[P];
+ solutions = new int[P][];
+ for (int i = 0; i < P; i++)
+ {
+ indicesOfAnts[i] = i;
+ solutions[i] = new int[numberOfCity];
+ for (int j = 0; j < numberOfCity; j++)
+ {
+ solutions[i][j] = j;
+ }
+ KnuthShuffle(solutions[i]);
+ }
+ //set initial pheromone
+ for (int r = 0; r < numberOfCity; r++)
+ {
+ for (int c = 0; c < numberOfCity; c++)
+ {
+ pheromone[r, c] = 0.01;
+ }
+ }
+ for (int r = 0; r < numberOfCity; r++)
+ {
+ for (int c = 0; c < numberOfCity; c++)
+ {
+ AverageDistance += FromToDistanceMatrix[r, c];
+ }
+ }
+ AverageDistance = AverageDistance / (numberOfCity * numberOfCity);
+
+ heuristicValues = new double[numberOfCity, numberOfCity];
+ for (int r = 0; r < numberOfCity; r++)
+ {
+ for (int c = 0; c < numberOfCity; c++)
+ {
+ heuristicValues[r, c] = DistanceInverseHeuristic(r, c);
+ }
+ }
+ // Allocate memory for the arries used in ACO, whose length is
+ // depend on the number of variables. In contrast, those arraies
+ // with length depending on the number of ants are allocated in
+ // reset function.
+ probabilities = new double[numberOfCity];
+ candidateSet = new int[numberOfCity];
+ ObjectiveValues = new double[populationSize];
+ for (int j = 0; j < numberOfCity; j++)
+ {
+ candidateSet[j] = j;
+ }
+ // Set drop amount multiplier; which is the avarage length
+ //dropMultiplier = dropPheromone * dropMultiplier / getObjectiveValue(objectiveValues);
+ }
+
+ public HybridACOGA(int numberOfVariables, OptimizationType opType, GA.ObjectiveFunctionDelegate objectFunction, double[,] distance,Station[]s,int tc) : base(numberOfVariables, opType, objectFunction)
+ {
+ getObjectiveValue = objectFunction;
+ numberOfCity = numberOfVariables;
+ FromToDistanceMatrix = distance;
+ // Allocate memory for pheromone matrix and heuristic value matrix
+ // Heuristic values in the matrix are computed and assigned via
+ // the specified function delegate
+ station = s;
+ truckcapacity = tc;
+ pheromone = new double[numberOfCity, numberOfCity];
+ indicesOfAnts = new int[populationSize];
+ solutions = new int[populationSize][];
+ soFarTheBestSoluiton = new int[numberOfCity*2+2];
+ heuristicValues = new double[numberOfVariables, numberOfVariables];
+ //for (int r = 0; r < numberOfVariables; r++)
+ //{
+ // for (int c = 0; c < numberOfVariables; c++)
+ // {
+ // heuristicValues[r, c] = DistanceInverseHeuristic(r, c);
+ // }
+ //}
+ for (int r = 0; r < numberOfCity; r++)
+ {
+ for (int c = 0; c < numberOfCity; c++)
+ {
+ pheromone[r, c] = 0.01;
+ }
+ }
+ for (int r = 0; r < numberOfCity; r++)
+ {
+ for (int c = 0; c < numberOfCity; c++)
+ {
+ AverageDistance += FromToDistanceMatrix[r, c];
+ }
+ }
+ AverageDistance = AverageDistance / (numberOfCity * numberOfCity);
+
+ heuristicValues = new double[numberOfCity, numberOfCity];
+ for (int r = 0; r < numberOfCity; r++)
+ {
+ for (int c = 0; c < numberOfCity; c++)
+ {
+ heuristicValues[r, c] = DistanceInverseHeuristic(r, c);
+ }
+ }
+ for (int i = 0; i < populationSize; i++)
+ {
+ indicesOfAnts[i] = i;
+ solutions[i] = new int[numberOfCity];
+ for (int j = 0; j < numberOfCity; j++)
+ {
+ solutions[i][j] = j;
+ }
+ KnuthShuffle(solutions[i]);
+ }
+
+ //// Allocate memory for the arries used in ACO, whose length is
+ //// depend on the number of variables. In contrast, those arraies
+ //// with length depending on the number of ants are allocated in
+ //// reset function.
+ //probabilities = new double[numberOfCity];
+ //candidateSet = new int[numberOfCity];
+ //ObjectiveValues = new double[populationSize];
+ // Set drop amount multiplier; which is the avarage length
+ //dropMultiplier = dropPheromone * dropMultiplier / getObjectiveValue(objectiveValues);
+
+ }
+
+ public void KnuthShuffle(int[] array)
+ {
+ int temp;
+ for (int i = 0; i < (array.Length - 2) / 2; i++)
+ {
+ int j = rnd.Next(i, (array.Length - 2) / 2); // Don't select from the entire array on subsequent loops
+ temp = array[i]; array[i] = array[j]; array[j] = temp;
+ }
+ }
+
+ public double DistanceInverseHeuristic(int i, int j)
+ {
+ double B = AverageDistance / 50.0; // 100可調
+
+ return FromToDistanceMatrix[i, j] < 0.000001 ? 0.0 : B /FromToDistanceMatrix[i, j];
+ }
+
+ public virtual void antsConstructSolutions()
+ {
+ // Set the selection mode
+ int elementLeft = -1;
+ double[] cumulative = new double[numberOfCity];
+
+
+
+ // Loop through each ant to construt each solution
+
+ for (int i = 0; i < populationSize; i++)
+ {
+
+ // Prepare candidate set, using indicesOfVariables array.
+ for (int j = 0; j < candidateSet.Length; j++)
+ {
+ candidateSet[j] = j; //準備城市候選
+ }
+ elementLeft = numberOfCity; //城市ㄉ指標
+
+ selectedIdx = rnd.Next(elementLeft);
+
+ solutions[i][0] = candidateSet[selectedIdx]; //指定起始城市點
+ elementLeft--; // The candidate reduced by one
+ candidateSet[selectedIdx] = candidateSet[elementLeft];// Discard the selected index by moving back the last candidate to this position and then
+ for (int q = 1; q < numberOfCity; q++)//開始找出下一個城市和前一個城市的相配機率
+ { // Compute the probabilities for each candidate to succeed the previous element
+
+ for (int b = 0; b < elementLeft; b++)
+ {
+ //求算和下一個城市ㄉ適合機率
+ probabilities[b] = Math.Pow(pheromone[solutions[i][q - 1], candidateSet[b]], pheromoneFactor) * Math.Pow(heuristicValues[solutions[i][q - 1], candidateSet[b]], heuristicFactor);
+ }
+
+ // Repeatly select the next element to succeed the previous one, until the solution is completed.
+ // Deterministic method, find the best candidate, by evaluating their selection probability
+ //// Directly select the element with the largest probability
+ //Array.Sort(probabilities, candidateSet,0,elementLeft);
+ ////Array.Reverse(probabilities); Array.Reverse(candidateSet);
+ double m = double.MinValue;
+ selectedIdx = -1;
+ //找到機率大的城市做為下一個候選城市
+ for (int w = 0; w < elementLeft; w++)
+ {
+ if (probabilities[w] > m)
+ {
+ selectedIdx = w;
+ m = probabilities[w];
+ }
+
+ }
+ //已挑到下一個城市
+ solutions[i][q] = candidateSet[selectedIdx]; //將挑到的下一個城市指定給下一個位子
+ elementLeft--;//指標向左移一個
+ candidateSet[selectedIdx] = candidateSet[elementLeft];//將之前指標指向的那個城市index替換被選到ㄉ
+ }
+ }
+
+ }
+
+ public virtual void ComputeObjectiveValues()
+ {
+ // Compute the objective value for each solution contructed by the ants
+ chromosome = new int[populationSize][];
+ double[] tempObj = new double[populationSize];
+ for (int i = 0; i < populationSize; i++)
+ {
+ chromosome[i] = new int[numberOfCity * 2 + 2];
+ for (int j = 0; j < numberOfCity; j++)
+ { //encode
+ chromosome[i][solutions[i][j]] = j;
+ }
+ for(int k = numberOfCity; k < station.Length*2; k++)
+ {
+ if (station[k-numberOfCity].Rate < 0)
+ {
+ chromosome[i][k] = rnd.Next(1, truckcapacity+1);
+ }
+ else if(station[k-numberOfCity].Rate > 0)
+ {
+ chromosome[i][k] = rnd.Next(-truckcapacity, 0);
+ }
+ else
+ {
+ chromosome[i][k] = rnd.Next(-truckcapacity, truckcapacity + 1);
+ }
+
+ }
+ chromosome[i][numberOfCity * 2] = rnd.Next(0, truckcapacity + 1);
+ chromosome[i][numberOfCity * 2 + 1] = rnd.Next(0, 120);
+ //notice that decode problem
+ ObjectiveValues[i] = getObjectiveValue(chromosome[i]); //表示拿到第i隻螞蟻ㄉsolution
+ tempObj[i] = ObjectiveValues[i];
+ }
+ // Sort the objective values and ant indices in orders of superior to inferior
+ Array.Sort(ObjectiveValues, chromosome, 0, populationSize);
+ Array.Sort(tempObj, solutions, 0, populationSize);
+ ITB = ObjectiveValues[0];
+
+ if (ITB < SFB)
+ {
+ SFB = ITB;
+ soFarTheBestSoluiton = chromosome[0];
+ BestAntRoute = solutions[0];
+ }
+ }
+
+ public virtual void updatePheromone()
+ {
+ int k;
+ // Loop throught each solution, identify the element indices for each segment
+ // Add pheromone drop amount to the identified segment
+ //k = BestAntRoute[numberOfCity - 1];
+ //for (int j = 0; j < numberOfCity; j++)
+ //{
+ // pheromone[k, BestAntRoute[j]] += dropPheromone * dropMultiplier / SFB;
+ // k = BestAntRoute[j];
+ //}
+ for (int i = 0; i < populationSize; i++)
+ {
+ k = solutions[i][numberOfCity - 1];
+ for (int j = 0; j < numberOfCity; j++)
+ {
+ pheromone[k, solutions[i][j]] += dropPheromone * dropMultiplier / ObjectiveValues[i];
+ k = solutions[i][j];
+ }
+ }
+
+ // Evaporate the pheromone for all pheromone values
+ for (int r = 0; r < pheromone.GetLength(0); r++)
+ for (int c = 0; c < pheromone.GetLength(1); c++)
+ pheromone[r, c] *= (1.0 - evaporationRate);
+ }
+ }
+}
diff --git a/BikeSharingSystem/MainForm.Designer.cs b/BikeSharingSystem/MainForm.Designer.cs
new file mode 100644
index 0000000..679161b
--- /dev/null
+++ b/BikeSharingSystem/MainForm.Designer.cs
@@ -0,0 +1,1210 @@
+namespace BikeSharingSystem
+{
+ partial class MainForm
+ {
+ ///
+ /// 設計工具所需的變數。
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// 清除任何使用中的資源。
+ ///
+ /// 如果應該處置 Managed 資源則為 true,否則為 false。
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form 設計工具產生的程式碼
+
+ ///
+ /// 此為設計工具支援所需的方法 - 請勿使用程式碼編輯器修改
+ /// 這個方法的內容。
+ ///
+ private void InitializeComponent()
+ {
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.tabControl = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.splitContainer2 = new System.Windows.Forms.SplitContainer();
+ this.richTextBox = new System.Windows.Forms.RichTextBox();
+ this.labelMax = new System.Windows.Forms.Label();
+ this.labelBO = new System.Windows.Forms.Label();
+ this.tChart = new Steema.TeeChart.TChart();
+ this.fastLine1 = new Steema.TeeChart.Styles.FastLine();
+ this.fastLine2 = new Steema.TeeChart.Styles.FastLine();
+ this.fastLine3 = new Steema.TeeChart.Styles.FastLine();
+ this.butpga = new System.Windows.Forms.Button();
+ this.ppg = new System.Windows.Forms.PropertyGrid();
+ this.butreset = new System.Windows.Forms.Button();
+ this.butrunend = new System.Windows.Forms.Button();
+ this.tabPage = new System.Windows.Forms.TabPage();
+ this.dataGridView = new System.Windows.Forms.DataGridView();
+ this.button3 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.label11 = new System.Windows.Forms.Label();
+ this.label4 = new System.Windows.Forms.Label();
+ this.splitContainer1 = new System.Windows.Forms.SplitContainer();
+ this.tabControl3 = new System.Windows.Forms.TabControl();
+ this.tabPage5 = new System.Windows.Forms.TabPage();
+ this.labelstations = new System.Windows.Forms.Label();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.txbtimehorizon = new System.Windows.Forms.TextBox();
+ this.label7 = new System.Windows.Forms.Label();
+ this.txbcapacity = new System.Windows.Forms.TextBox();
+ this.label10 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.label3 = new System.Windows.Forms.Label();
+ this.textBoxPnDTime = new System.Windows.Forms.TextBox();
+ this.label8 = new System.Windows.Forms.Label();
+ this.label9 = new System.Windows.Forms.Label();
+ this.label6 = new System.Windows.Forms.Label();
+ this.txbspeed = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.labelIteration = new System.Windows.Forms.Label();
+ this.checkBox_times = new System.Windows.Forms.CheckBox();
+ this.txbCPUTime = new System.Windows.Forms.TextBox();
+ this.labelfilename = new System.Windows.Forms.Label();
+ this.labeltitle = new System.Windows.Forms.Label();
+ this.checkBoxGreedy = new System.Windows.Forms.CheckBox();
+ this.tabPage6 = new System.Windows.Forms.TabPage();
+ this.label12 = new System.Windows.Forms.Label();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
+ this.label14 = new System.Windows.Forms.Label();
+ this.textBoxSTD = new System.Windows.Forms.TextBox();
+ this.label26 = new System.Windows.Forms.Label();
+ this.textBoxMean = new System.Windows.Forms.TextBox();
+ this.button4 = new System.Windows.Forms.Button();
+ this.label15 = new System.Windows.Forms.Label();
+ this.textBoxGPT = new System.Windows.Forms.TextBox();
+ this.label16 = new System.Windows.Forms.Label();
+ this.textBoxGTC = new System.Windows.Forms.TextBox();
+ this.label17 = new System.Windows.Forms.Label();
+ this.label18 = new System.Windows.Forms.Label();
+ this.label19 = new System.Windows.Forms.Label();
+ this.textBoxGPDT = new System.Windows.Forms.TextBox();
+ this.label20 = new System.Windows.Forms.Label();
+ this.label21 = new System.Windows.Forms.Label();
+ this.label22 = new System.Windows.Forms.Label();
+ this.textBoxGTS = new System.Windows.Forms.TextBox();
+ this.label23 = new System.Windows.Forms.Label();
+ this.toolStrip1 = new System.Windows.Forms.ToolStrip();
+ this.toolStripButton1 = new System.Windows.Forms.ToolStripButton();
+ this.toolStripButton2 = new System.Windows.Forms.ToolStripButton();
+ this.openFileDialog = new System.Windows.Forms.OpenFileDialog();
+ this.saveFileDialog = new System.Windows.Forms.SaveFileDialog();
+ this.checkBox = new System.Windows.Forms.CheckBox();
+ this.tabControl.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();
+ this.splitContainer2.Panel1.SuspendLayout();
+ this.splitContainer2.Panel2.SuspendLayout();
+ this.splitContainer2.SuspendLayout();
+ this.tabPage.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
+ this.tabPage2.SuspendLayout();
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
+ this.splitContainer1.Panel1.SuspendLayout();
+ this.splitContainer1.Panel2.SuspendLayout();
+ this.splitContainer1.SuspendLayout();
+ this.tabControl3.SuspendLayout();
+ this.tabPage5.SuspendLayout();
+ this.groupBox2.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.tabPage6.SuspendLayout();
+ this.groupBox4.SuspendLayout();
+ this.toolStrip1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tabControl
+ //
+ this.tabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl.Controls.Add(this.tabPage1);
+ this.tabControl.Controls.Add(this.tabPage);
+ this.tabControl.Controls.Add(this.tabPage2);
+ this.tabControl.Location = new System.Drawing.Point(4, 1);
+ this.tabControl.Margin = new System.Windows.Forms.Padding(6, 8, 6, 8);
+ this.tabControl.Name = "tabControl";
+ this.tabControl.SelectedIndex = 0;
+ this.tabControl.Size = new System.Drawing.Size(2272, 977);
+ this.tabControl.TabIndex = 2;
+ //
+ // tabPage1
+ //
+ this.tabPage1.Controls.Add(this.splitContainer2);
+ this.tabPage1.Controls.Add(this.butpga);
+ this.tabPage1.Controls.Add(this.ppg);
+ this.tabPage1.Controls.Add(this.butreset);
+ this.tabPage1.Controls.Add(this.butrunend);
+ this.tabPage1.Location = new System.Drawing.Point(4, 34);
+ this.tabPage1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage1.Size = new System.Drawing.Size(2264, 939);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "GA Optimization";
+ this.tabPage1.UseVisualStyleBackColor = true;
+ //
+ // splitContainer2
+ //
+ this.splitContainer2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.splitContainer2.Location = new System.Drawing.Point(287, 8);
+ this.splitContainer2.Name = "splitContainer2";
+ this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;
+ //
+ // splitContainer2.Panel1
+ //
+ this.splitContainer2.Panel1.Controls.Add(this.richTextBox);
+ this.splitContainer2.Panel1.Controls.Add(this.labelMax);
+ this.splitContainer2.Panel1.Controls.Add(this.labelBO);
+ //
+ // splitContainer2.Panel2
+ //
+ this.splitContainer2.Panel2.Controls.Add(this.tChart);
+ this.splitContainer2.Size = new System.Drawing.Size(1171, 866);
+ this.splitContainer2.SplitterDistance = 319;
+ this.splitContainer2.TabIndex = 15;
+ //
+ // richTextBox
+ //
+ this.richTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.richTextBox.Location = new System.Drawing.Point(3, 35);
+ this.richTextBox.Name = "richTextBox";
+ this.richTextBox.Size = new System.Drawing.Size(1153, 281);
+ this.richTextBox.TabIndex = 0;
+ this.richTextBox.Text = "";
+ //
+ // labelMax
+ //
+ this.labelMax.AutoSize = true;
+ this.labelMax.Location = new System.Drawing.Point(665, 8);
+ this.labelMax.Name = "labelMax";
+ this.labelMax.Size = new System.Drawing.Size(62, 25);
+ this.labelMax.TabIndex = 12;
+ this.labelMax.Text = "Max :";
+ //
+ // labelBO
+ //
+ this.labelBO.AutoSize = true;
+ this.labelBO.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.labelBO.ForeColor = System.Drawing.Color.Navy;
+ this.labelBO.Location = new System.Drawing.Point(29, 7);
+ this.labelBO.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
+ this.labelBO.Name = "labelBO";
+ this.labelBO.Size = new System.Drawing.Size(117, 25);
+ this.labelBO.TabIndex = 8;
+ this.labelBO.Text = "BestObject";
+ //
+ // tChart
+ //
+ this.tChart.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ //
+ //
+ //
+ this.tChart.Aspect.View3D = false;
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ //
+ this.tChart.Axes.Bottom.Title.Caption = "Iteration";
+ this.tChart.Axes.Bottom.Title.Lines = new string[] {
+ "Iteration"};
+ //
+ //
+ //
+ this.tChart.Axes.Depth.LabelsAsSeriesTitles = true;
+ //
+ //
+ //
+ //
+ //
+ //
+ this.tChart.Axes.DepthTop.AxisPen.Color = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+ this.tChart.Axes.DepthTop.LabelsAsSeriesTitles = true;
+ //
+ //
+ //
+ //
+ //
+ //
+ this.tChart.Axes.Left.Title.Caption = "Objective value";
+ this.tChart.Axes.Left.Title.Lines = new string[] {
+ "Objective value"};
+ //
+ //
+ //
+ this.tChart.Axes.Right.Automatic = false;
+ this.tChart.Axes.Right.AutomaticMaximum = false;
+ this.tChart.Axes.Right.AutomaticMinimum = false;
+ this.tChart.Axes.Right.Maximum = 0D;
+ this.tChart.Axes.Right.Minimum = 0D;
+ //
+ //
+ //
+ this.tChart.Axes.Right.Title.Caption = "Schedule length";
+ this.tChart.Axes.Right.Title.Lines = new string[] {
+ "Schedule length"};
+ //
+ //
+ //
+ //
+ //
+ //
+ this.tChart.Axes.Top.AxisPen.Visible = false;
+ //
+ //
+ //
+ this.tChart.Axes.Top.Grid.Visible = false;
+ this.tChart.Axes.Top.MinorTickCount = 0;
+ //
+ //
+ //
+ this.tChart.Axes.Top.MinorTicks.Visible = false;
+ this.tChart.Axes.Top.TickOnLabelsOnly = false;
+ //
+ //
+ //
+ this.tChart.Axes.Top.Ticks.Visible = false;
+ //
+ //
+ //
+ this.tChart.Header.Lines = new string[] {
+ "Evolution Progress"};
+ //
+ //
+ //
+ this.tChart.Legend.Alignment = Steema.TeeChart.LegendAlignments.Bottom;
+ //
+ //
+ //
+ this.tChart.Legend.Brush.Visible = false;
+ //
+ //
+ //
+ this.tChart.Legend.DividingLines.Width = 0;
+ this.tChart.Legend.LegendStyle = Steema.TeeChart.LegendStyles.Series;
+ //
+ //
+ //
+ this.tChart.Legend.Pen.Visible = false;
+ //
+ //
+ //
+ //
+ //
+ //
+ this.tChart.Legend.Shadow.Brush.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0)))));
+ this.tChart.Legend.Shadow.Visible = false;
+ this.tChart.Location = new System.Drawing.Point(0, 0);
+ this.tChart.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.tChart.Name = "tChart";
+ this.tChart.Series.Add(this.fastLine1);
+ this.tChart.Series.Add(this.fastLine2);
+ this.tChart.Series.Add(this.fastLine3);
+ this.tChart.Size = new System.Drawing.Size(1171, 495);
+ this.tChart.TabIndex = 5;
+ //
+ //
+ //
+ this.tChart.Walls.Visible = false;
+ //
+ // fastLine1
+ //
+ this.fastLine1.Color = System.Drawing.Color.FromArgb(((int)(((byte)(68)))), ((int)(((byte)(102)))), ((int)(((byte)(163)))));
+ this.fastLine1.ColorEach = false;
+ //
+ //
+ //
+ this.fastLine1.LinePen.Color = System.Drawing.Color.Lime;
+ this.fastLine1.LinePen.Width = 2;
+ this.fastLine1.Title = "Iteration average";
+ this.fastLine1.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.Ignore;
+ //
+ //
+ //
+ this.fastLine1.XValues.DataMember = "X";
+ this.fastLine1.XValues.Order = Steema.TeeChart.Styles.ValueListOrder.Ascending;
+ //
+ //
+ //
+ this.fastLine1.YValues.DataMember = "Y";
+ //
+ // fastLine2
+ //
+ this.fastLine2.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
+ this.fastLine2.ColorEach = false;
+ //
+ //
+ //
+ this.fastLine2.LinePen.Color = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(192)))));
+ this.fastLine2.LinePen.Style = System.Drawing.Drawing2D.DashStyle.Dash;
+ this.fastLine2.LinePen.Width = 2;
+ this.fastLine2.Title = "Not do anything";
+ this.fastLine2.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.Ignore;
+ //
+ //
+ //
+ this.fastLine2.XValues.DataMember = "X";
+ this.fastLine2.XValues.Order = Steema.TeeChart.Styles.ValueListOrder.Ascending;
+ //
+ //
+ //
+ this.fastLine2.YValues.DataMember = "Y";
+ //
+ // fastLine3
+ //
+ this.fastLine3.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(76)))), ((int)(((byte)(20)))));
+ this.fastLine3.ColorEach = false;
+ //
+ //
+ //
+ this.fastLine3.LinePen.Color = System.Drawing.Color.FromArgb(((int)(((byte)(241)))), ((int)(((byte)(76)))), ((int)(((byte)(20)))));
+ this.fastLine3.LinePen.Width = 4;
+ this.fastLine3.Title = "So far the Best";
+ this.fastLine3.TreatNulls = Steema.TeeChart.Styles.TreatNullsStyle.Ignore;
+ //
+ //
+ //
+ this.fastLine3.XValues.DataMember = "X";
+ this.fastLine3.XValues.Order = Steema.TeeChart.Styles.ValueListOrder.Ascending;
+ //
+ //
+ //
+ this.fastLine3.YValues.DataMember = "Y";
+ //
+ // butpga
+ //
+ this.butpga.Font = new System.Drawing.Font("新細明體", 13.8F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butpga.Location = new System.Drawing.Point(8, 27);
+ this.butpga.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butpga.Name = "butpga";
+ this.butpga.Size = new System.Drawing.Size(249, 81);
+ this.butpga.TabIndex = 7;
+ this.butpga.Text = "create permutation GA";
+ this.butpga.UseVisualStyleBackColor = true;
+ this.butpga.Click += new System.EventHandler(this.createPGA);
+ //
+ // ppg
+ //
+ this.ppg.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.ppg.CategoryForeColor = System.Drawing.SystemColors.InactiveCaptionText;
+ this.ppg.Location = new System.Drawing.Point(8, 307);
+ this.ppg.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.ppg.Name = "ppg";
+ this.ppg.Size = new System.Drawing.Size(249, 493);
+ this.ppg.TabIndex = 7;
+ //
+ // butreset
+ //
+ this.butreset.Font = new System.Drawing.Font("新細明體", 16.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butreset.Location = new System.Drawing.Point(8, 118);
+ this.butreset.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butreset.Name = "butreset";
+ this.butreset.Size = new System.Drawing.Size(249, 80);
+ this.butreset.TabIndex = 10;
+ this.butreset.Text = "reset";
+ this.butreset.UseVisualStyleBackColor = true;
+ this.butreset.Click += new System.EventHandler(this.reset);
+ //
+ // butrunend
+ //
+ this.butrunend.Font = new System.Drawing.Font("新細明體", 16.2F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.butrunend.Location = new System.Drawing.Point(8, 208);
+ this.butrunend.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.butrunend.Name = "butrunend";
+ this.butrunend.Size = new System.Drawing.Size(249, 80);
+ this.butrunend.TabIndex = 9;
+ this.butrunend.Text = "run";
+ this.butrunend.UseVisualStyleBackColor = true;
+ this.butrunend.Click += new System.EventHandler(this.runToEnd);
+ //
+ // tabPage
+ //
+ this.tabPage.Controls.Add(this.dataGridView);
+ this.tabPage.Controls.Add(this.button3);
+ this.tabPage.Controls.Add(this.button2);
+ this.tabPage.Controls.Add(this.button1);
+ this.tabPage.Location = new System.Drawing.Point(4, 34);
+ this.tabPage.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage.Name = "tabPage";
+ this.tabPage.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage.Size = new System.Drawing.Size(2264, 939);
+ this.tabPage.TabIndex = 1;
+ this.tabPage.Text = "stations state";
+ this.tabPage.UseVisualStyleBackColor = true;
+ //
+ // dataGridView
+ //
+ this.dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)));
+ this.dataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
+ this.dataGridView.Location = new System.Drawing.Point(3, 8);
+ this.dataGridView.Name = "dataGridView";
+ dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleRight;
+ this.dataGridView.RowsDefaultCellStyle = dataGridViewCellStyle1;
+ this.dataGridView.RowTemplate.Height = 27;
+ this.dataGridView.Size = new System.Drawing.Size(1020, 738);
+ this.dataGridView.TabIndex = 15;
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(1044, 304);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(216, 97);
+ this.button3.TabIndex = 3;
+ this.button3.Text = "run ACO";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.NBS);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(1044, 175);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(216, 86);
+ this.button2.TabIndex = 2;
+ this.button2.Text = "reset";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.nearestInsert);
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(1044, 36);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(216, 101);
+ this.button1.TabIndex = 1;
+ this.button1.Text = "run 30 and save";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.getlowerbound);
+ //
+ // tabPage2
+ //
+ this.tabPage2.Controls.Add(this.label11);
+ this.tabPage2.Controls.Add(this.label4);
+ this.tabPage2.Location = new System.Drawing.Point(4, 25);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Size = new System.Drawing.Size(2264, 948);
+ this.tabPage2.TabIndex = 2;
+ this.tabPage2.Text = "Best Routes";
+ this.tabPage2.UseVisualStyleBackColor = true;
+ this.tabPage2.Paint += new System.Windows.Forms.PaintEventHandler(this.DrwaRoutes);
+ //
+ // label11
+ //
+ this.label11.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label11.AutoSize = true;
+ this.label11.Location = new System.Drawing.Point(14, 796);
+ this.label11.Name = "label11";
+ this.label11.Size = new System.Drawing.Size(291, 25);
+ this.label11.TabIndex = 1;
+ this.label11.Text = "Blue Circle: Decreasing station";
+ //
+ // label4
+ //
+ this.label4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(14, 766);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(299, 25);
+ this.label4.TabIndex = 0;
+ this.label4.Text = "Green Circle: Increasing station";
+ //
+ // splitContainer1
+ //
+ this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.splitContainer1.Location = new System.Drawing.Point(0, 30);
+ this.splitContainer1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.splitContainer1.Name = "splitContainer1";
+ //
+ // splitContainer1.Panel1
+ //
+ this.splitContainer1.Panel1.Controls.Add(this.tabControl3);
+ //
+ // splitContainer1.Panel2
+ //
+ this.splitContainer1.Panel2.Controls.Add(this.tabControl);
+ this.splitContainer1.Size = new System.Drawing.Size(2078, 986);
+ this.splitContainer1.SplitterDistance = 422;
+ this.splitContainer1.SplitterWidth = 6;
+ this.splitContainer1.TabIndex = 3;
+ //
+ // tabControl3
+ //
+ this.tabControl3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.tabControl3.Controls.Add(this.tabPage5);
+ this.tabControl3.Controls.Add(this.tabPage6);
+ this.tabControl3.Location = new System.Drawing.Point(4, 5);
+ this.tabControl3.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabControl3.Name = "tabControl3";
+ this.tabControl3.SelectedIndex = 0;
+ this.tabControl3.Size = new System.Drawing.Size(418, 1023);
+ this.tabControl3.TabIndex = 0;
+ //
+ // tabPage5
+ //
+ this.tabPage5.Controls.Add(this.labelstations);
+ this.tabPage5.Controls.Add(this.groupBox2);
+ this.tabPage5.Controls.Add(this.groupBox1);
+ this.tabPage5.Controls.Add(this.labelfilename);
+ this.tabPage5.Controls.Add(this.labeltitle);
+ this.tabPage5.Controls.Add(this.checkBoxGreedy);
+ this.tabPage5.Location = new System.Drawing.Point(4, 34);
+ this.tabPage5.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage5.Name = "tabPage5";
+ this.tabPage5.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage5.Size = new System.Drawing.Size(410, 985);
+ this.tabPage5.TabIndex = 0;
+ this.tabPage5.Text = "Original Problem Setting";
+ this.tabPage5.UseVisualStyleBackColor = true;
+ //
+ // labelstations
+ //
+ this.labelstations.AutoSize = true;
+ this.labelstations.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.labelstations.ForeColor = System.Drawing.SystemColors.HotTrack;
+ this.labelstations.Location = new System.Drawing.Point(4, 114);
+ this.labelstations.Name = "labelstations";
+ this.labelstations.Size = new System.Drawing.Size(152, 25);
+ this.labelstations.TabIndex = 22;
+ this.labelstations.Text = "Total Stations:";
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.label1);
+ this.groupBox2.Controls.Add(this.txbtimehorizon);
+ this.groupBox2.Controls.Add(this.label7);
+ this.groupBox2.Controls.Add(this.txbcapacity);
+ this.groupBox2.Controls.Add(this.label10);
+ this.groupBox2.Controls.Add(this.label5);
+ this.groupBox2.Controls.Add(this.label3);
+ this.groupBox2.Controls.Add(this.textBoxPnDTime);
+ this.groupBox2.Controls.Add(this.label8);
+ this.groupBox2.Controls.Add(this.label9);
+ this.groupBox2.Controls.Add(this.label6);
+ this.groupBox2.Controls.Add(this.txbspeed);
+ this.groupBox2.Controls.Add(this.label2);
+ this.groupBox2.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.groupBox2.Location = new System.Drawing.Point(0, 175);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(396, 309);
+ this.groupBox2.TabIndex = 19;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Problem Setting";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(8, 51);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(179, 25);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Planning Horizon";
+ //
+ // txbtimehorizon
+ //
+ this.txbtimehorizon.Location = new System.Drawing.Point(193, 48);
+ this.txbtimehorizon.Name = "txbtimehorizon";
+ this.txbtimehorizon.Size = new System.Drawing.Size(100, 34);
+ this.txbtimehorizon.TabIndex = 3;
+ this.txbtimehorizon.Text = "120";
+ this.txbtimehorizon.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label7
+ //
+ this.label7.AutoSize = true;
+ this.label7.Location = new System.Drawing.Point(302, 51);
+ this.label7.Name = "label7";
+ this.label7.Size = new System.Drawing.Size(57, 25);
+ this.label7.TabIndex = 5;
+ this.label7.Text = "mins";
+ //
+ // txbcapacity
+ //
+ this.txbcapacity.Location = new System.Drawing.Point(193, 88);
+ this.txbcapacity.Name = "txbcapacity";
+ this.txbcapacity.Size = new System.Drawing.Size(100, 34);
+ this.txbcapacity.TabIndex = 4;
+ this.txbcapacity.Text = "14";
+ this.txbcapacity.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label10
+ //
+ this.label10.AutoSize = true;
+ this.label10.Location = new System.Drawing.Point(8, 187);
+ this.label10.Name = "label10";
+ this.label10.Size = new System.Drawing.Size(324, 25);
+ this.label10.TabIndex = 13;
+ this.label10.Text = "Time cost on pickup and delivery";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(188, 254);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(115, 25);
+ this.label5.TabIndex = 12;
+ this.label5.Text = "piece/mins";
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(8, 91);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(148, 25);
+ this.label3.TabIndex = 1;
+ this.label3.Text = "Truck Capacity";
+ //
+ // textBoxPnDTime
+ //
+ this.textBoxPnDTime.Location = new System.Drawing.Point(88, 251);
+ this.textBoxPnDTime.Name = "textBoxPnDTime";
+ this.textBoxPnDTime.Size = new System.Drawing.Size(100, 34);
+ this.textBoxPnDTime.TabIndex = 11;
+ this.textBoxPnDTime.Text = "0.25";
+ this.textBoxPnDTime.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label8
+ //
+ this.label8.AutoSize = true;
+ this.label8.Location = new System.Drawing.Point(302, 91);
+ this.label8.Name = "label8";
+ this.label8.Size = new System.Drawing.Size(86, 25);
+ this.label8.TabIndex = 6;
+ this.label8.Text = "amount";
+ //
+ // label9
+ //
+ this.label9.AutoSize = true;
+ this.label9.Location = new System.Drawing.Point(51, 212);
+ this.label9.Name = "label9";
+ this.label9.Size = new System.Drawing.Size(206, 25);
+ this.label9.TabIndex = 10;
+ this.label9.Text = " one common good ";
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Location = new System.Drawing.Point(8, 131);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(127, 25);
+ this.label6.TabIndex = 2;
+ this.label6.Text = "Truck Speed";
+ //
+ // txbspeed
+ //
+ this.txbspeed.Location = new System.Drawing.Point(193, 128);
+ this.txbspeed.Name = "txbspeed";
+ this.txbspeed.Size = new System.Drawing.Size(100, 34);
+ this.txbspeed.TabIndex = 7;
+ this.txbspeed.Text = "0.6666";
+ this.txbspeed.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(302, 131);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(95, 25);
+ this.label2.TabIndex = 8;
+ this.label2.Text = "km/mins";
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.labelIteration);
+ this.groupBox1.Controls.Add(this.checkBox_times);
+ this.groupBox1.Controls.Add(this.txbCPUTime);
+ this.groupBox1.Location = new System.Drawing.Point(4, 593);
+ this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
+ this.groupBox1.Size = new System.Drawing.Size(382, 170);
+ this.groupBox1.TabIndex = 18;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Stop Criterion";
+ //
+ // labelIteration
+ //
+ this.labelIteration.AutoSize = true;
+ this.labelIteration.Location = new System.Drawing.Point(12, 109);
+ this.labelIteration.Name = "labelIteration";
+ this.labelIteration.Size = new System.Drawing.Size(105, 25);
+ this.labelIteration.TabIndex = 20;
+ this.labelIteration.Text = "Iterations:";
+ //
+ // checkBox_times
+ //
+ this.checkBox_times.AutoSize = true;
+ this.checkBox_times.Location = new System.Drawing.Point(10, 55);
+ this.checkBox_times.Name = "checkBox_times";
+ this.checkBox_times.Size = new System.Drawing.Size(130, 29);
+ this.checkBox_times.TabIndex = 13;
+ this.checkBox_times.Text = "CPU times";
+ this.checkBox_times.UseVisualStyleBackColor = true;
+ //
+ // txbCPUTime
+ //
+ this.txbCPUTime.Location = new System.Drawing.Point(159, 55);
+ this.txbCPUTime.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+ this.txbCPUTime.Name = "txbCPUTime";
+ this.txbCPUTime.Size = new System.Drawing.Size(70, 34);
+ this.txbCPUTime.TabIndex = 11;
+ this.txbCPUTime.Text = "2000";
+ this.txbCPUTime.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // labelfilename
+ //
+ this.labelfilename.AutoSize = true;
+ this.labelfilename.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.labelfilename.ForeColor = System.Drawing.SystemColors.HotTrack;
+ this.labelfilename.Location = new System.Drawing.Point(3, 23);
+ this.labelfilename.Name = "labelfilename";
+ this.labelfilename.Size = new System.Drawing.Size(118, 25);
+ this.labelfilename.TabIndex = 17;
+ this.labelfilename.Text = "File Name :";
+ //
+ // labeltitle
+ //
+ this.labeltitle.AutoSize = true;
+ this.labeltitle.Font = new System.Drawing.Font("微軟正黑體", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.labeltitle.ForeColor = System.Drawing.SystemColors.HotTrack;
+ this.labeltitle.Location = new System.Drawing.Point(3, 67);
+ this.labeltitle.Name = "labeltitle";
+ this.labeltitle.Size = new System.Drawing.Size(73, 30);
+ this.labeltitle.TabIndex = 14;
+ this.labeltitle.Text = "Title :";
+ //
+ // checkBoxGreedy
+ //
+ this.checkBoxGreedy.AutoSize = true;
+ this.checkBoxGreedy.Location = new System.Drawing.Point(22, 540);
+ this.checkBoxGreedy.Name = "checkBoxGreedy";
+ this.checkBoxGreedy.Size = new System.Drawing.Size(291, 29);
+ this.checkBoxGreedy.TabIndex = 9;
+ this.checkBoxGreedy.Text = "reset with greedy algorithm";
+ this.checkBoxGreedy.UseVisualStyleBackColor = true;
+ //
+ // tabPage6
+ //
+ this.tabPage6.Controls.Add(this.label12);
+ this.tabPage6.Controls.Add(this.comboBox1);
+ this.tabPage6.Controls.Add(this.groupBox4);
+ this.tabPage6.Controls.Add(this.button4);
+ this.tabPage6.Controls.Add(this.label15);
+ this.tabPage6.Controls.Add(this.textBoxGPT);
+ this.tabPage6.Controls.Add(this.label16);
+ this.tabPage6.Controls.Add(this.textBoxGTC);
+ this.tabPage6.Controls.Add(this.label17);
+ this.tabPage6.Controls.Add(this.label18);
+ this.tabPage6.Controls.Add(this.label19);
+ this.tabPage6.Controls.Add(this.textBoxGPDT);
+ this.tabPage6.Controls.Add(this.label20);
+ this.tabPage6.Controls.Add(this.label21);
+ this.tabPage6.Controls.Add(this.label22);
+ this.tabPage6.Controls.Add(this.textBoxGTS);
+ this.tabPage6.Controls.Add(this.label23);
+ this.tabPage6.Location = new System.Drawing.Point(4, 25);
+ this.tabPage6.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage6.Name = "tabPage6";
+ this.tabPage6.Padding = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.tabPage6.Size = new System.Drawing.Size(410, 994);
+ this.tabPage6.TabIndex = 1;
+ this.tabPage6.Text = "Problem Generator";
+ this.tabPage6.UseVisualStyleBackColor = true;
+ //
+ // label12
+ //
+ this.label12.AutoSize = true;
+ this.label12.Location = new System.Drawing.Point(7, 15);
+ this.label12.Name = "label12";
+ this.label12.Size = new System.Drawing.Size(117, 25);
+ this.label12.TabIndex = 42;
+ this.label12.Text = "Select City :";
+ //
+ // comboBox1
+ //
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Items.AddRange(new object[] {
+ "NewTaipeiCity",
+ "TaipeiCity",
+ "KaohsiungCity"});
+ this.comboBox1.Location = new System.Drawing.Point(192, 12);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(166, 33);
+ this.comboBox1.TabIndex = 41;
+ //
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.label14);
+ this.groupBox4.Controls.Add(this.textBoxSTD);
+ this.groupBox4.Controls.Add(this.label26);
+ this.groupBox4.Controls.Add(this.textBoxMean);
+ this.groupBox4.Location = new System.Drawing.Point(12, 333);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(364, 139);
+ this.groupBox4.TabIndex = 40;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Text = "Station increasing/decreasing rate(r)";
+ //
+ // label14
+ //
+ this.label14.AutoSize = true;
+ this.label14.Location = new System.Drawing.Point(77, 46);
+ this.label14.Name = "label14";
+ this.label14.Size = new System.Drawing.Size(75, 25);
+ this.label14.TabIndex = 28;
+ this.label14.Text = "mean :";
+ //
+ // textBoxSTD
+ //
+ this.textBoxSTD.Location = new System.Drawing.Point(180, 92);
+ this.textBoxSTD.Name = "textBoxSTD";
+ this.textBoxSTD.Size = new System.Drawing.Size(86, 34);
+ this.textBoxSTD.TabIndex = 29;
+ this.textBoxSTD.Text = "0.1";
+ this.textBoxSTD.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label26
+ //
+ this.label26.AutoSize = true;
+ this.label26.Location = new System.Drawing.Point(77, 95);
+ this.label26.Name = "label26";
+ this.label26.Size = new System.Drawing.Size(89, 25);
+ this.label26.TabIndex = 37;
+ this.label26.Text = "StdDev :";
+ //
+ // textBoxMean
+ //
+ this.textBoxMean.Location = new System.Drawing.Point(180, 43);
+ this.textBoxMean.Name = "textBoxMean";
+ this.textBoxMean.Size = new System.Drawing.Size(86, 34);
+ this.textBoxMean.TabIndex = 30;
+ this.textBoxMean.Text = "0.2";
+ this.textBoxMean.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(12, 512);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(364, 58);
+ this.button4.TabIndex = 35;
+ this.button4.Text = "Generate and Save";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.generateProblem);
+ //
+ // label15
+ //
+ this.label15.AutoSize = true;
+ this.label15.Location = new System.Drawing.Point(7, 70);
+ this.label15.Name = "label15";
+ this.label15.Size = new System.Drawing.Size(179, 25);
+ this.label15.TabIndex = 14;
+ this.label15.Text = "Planning Horizon";
+ //
+ // textBoxGPT
+ //
+ this.textBoxGPT.Location = new System.Drawing.Point(192, 67);
+ this.textBoxGPT.Name = "textBoxGPT";
+ this.textBoxGPT.Size = new System.Drawing.Size(100, 34);
+ this.textBoxGPT.TabIndex = 17;
+ this.textBoxGPT.Text = "120";
+ this.textBoxGPT.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label16
+ //
+ this.label16.AutoSize = true;
+ this.label16.Location = new System.Drawing.Point(301, 70);
+ this.label16.Name = "label16";
+ this.label16.Size = new System.Drawing.Size(57, 25);
+ this.label16.TabIndex = 19;
+ this.label16.Text = "mins";
+ //
+ // textBoxGTC
+ //
+ this.textBoxGTC.Location = new System.Drawing.Point(192, 107);
+ this.textBoxGTC.Name = "textBoxGTC";
+ this.textBoxGTC.Size = new System.Drawing.Size(100, 34);
+ this.textBoxGTC.TabIndex = 18;
+ this.textBoxGTC.Text = "14";
+ this.textBoxGTC.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label17
+ //
+ this.label17.AutoSize = true;
+ this.label17.Location = new System.Drawing.Point(7, 206);
+ this.label17.Name = "label17";
+ this.label17.Size = new System.Drawing.Size(324, 25);
+ this.label17.TabIndex = 26;
+ this.label17.Text = "Time cost on pickup and delivery";
+ //
+ // label18
+ //
+ this.label18.AutoSize = true;
+ this.label18.Location = new System.Drawing.Point(187, 273);
+ this.label18.Name = "label18";
+ this.label18.Size = new System.Drawing.Size(115, 25);
+ this.label18.TabIndex = 25;
+ this.label18.Text = "piece/mins";
+ //
+ // label19
+ //
+ this.label19.AutoSize = true;
+ this.label19.Location = new System.Drawing.Point(7, 110);
+ this.label19.Name = "label19";
+ this.label19.Size = new System.Drawing.Size(148, 25);
+ this.label19.TabIndex = 15;
+ this.label19.Text = "Truck Capacity";
+ //
+ // textBoxGPDT
+ //
+ this.textBoxGPDT.Location = new System.Drawing.Point(87, 270);
+ this.textBoxGPDT.Name = "textBoxGPDT";
+ this.textBoxGPDT.Size = new System.Drawing.Size(100, 34);
+ this.textBoxGPDT.TabIndex = 24;
+ this.textBoxGPDT.Text = "0.25";
+ this.textBoxGPDT.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label20
+ //
+ this.label20.AutoSize = true;
+ this.label20.Location = new System.Drawing.Point(301, 110);
+ this.label20.Name = "label20";
+ this.label20.Size = new System.Drawing.Size(86, 25);
+ this.label20.TabIndex = 20;
+ this.label20.Text = "amount";
+ //
+ // label21
+ //
+ this.label21.AutoSize = true;
+ this.label21.Location = new System.Drawing.Point(50, 231);
+ this.label21.Name = "label21";
+ this.label21.Size = new System.Drawing.Size(206, 25);
+ this.label21.TabIndex = 23;
+ this.label21.Text = " one common good ";
+ //
+ // label22
+ //
+ this.label22.AutoSize = true;
+ this.label22.Location = new System.Drawing.Point(7, 150);
+ this.label22.Name = "label22";
+ this.label22.Size = new System.Drawing.Size(127, 25);
+ this.label22.TabIndex = 16;
+ this.label22.Text = "Truck Speed";
+ //
+ // textBoxGTS
+ //
+ this.textBoxGTS.Location = new System.Drawing.Point(192, 147);
+ this.textBoxGTS.Name = "textBoxGTS";
+ this.textBoxGTS.Size = new System.Drawing.Size(100, 34);
+ this.textBoxGTS.TabIndex = 21;
+ this.textBoxGTS.Text = "0.6666";
+ this.textBoxGTS.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
+ //
+ // label23
+ //
+ this.label23.AutoSize = true;
+ this.label23.Location = new System.Drawing.Point(301, 150);
+ this.label23.Name = "label23";
+ this.label23.Size = new System.Drawing.Size(95, 25);
+ this.label23.TabIndex = 22;
+ this.label23.Text = "km/mins";
+ //
+ // toolStrip1
+ //
+ this.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
+ this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.toolStripButton1,
+ this.toolStripButton2});
+ this.toolStrip1.Location = new System.Drawing.Point(0, 0);
+ this.toolStrip1.Name = "toolStrip1";
+ this.toolStrip1.Size = new System.Drawing.Size(1906, 27);
+ this.toolStrip1.TabIndex = 4;
+ this.toolStrip1.Text = "toolStrip1";
+ //
+ // toolStripButton1
+ //
+ this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));
+ this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton1.Name = "toolStripButton1";
+ this.toolStripButton1.Size = new System.Drawing.Size(95, 24);
+ this.toolStripButton1.Text = "OpenFile";
+ this.toolStripButton1.Click += new System.EventHandler(this.openfile);
+ //
+ // toolStripButton2
+ //
+ this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image")));
+ this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
+ this.toolStripButton2.Name = "toolStripButton2";
+ this.toolStripButton2.Size = new System.Drawing.Size(117, 24);
+ this.toolStripButton2.Text = "SaveToExcel";
+ this.toolStripButton2.Click += new System.EventHandler(this.saveToExcel);
+ //
+ // openFileDialog
+ //
+ this.openFileDialog.FileName = "openFileDialog1";
+ //
+ // checkBox
+ //
+ this.checkBox.AutoSize = true;
+ this.checkBox.Checked = true;
+ this.checkBox.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.checkBox.Location = new System.Drawing.Point(365, 0);
+ this.checkBox.Name = "checkBox";
+ this.checkBox.Size = new System.Drawing.Size(282, 29);
+ this.checkBox.TabIndex = 5;
+ this.checkBox.Text = "Create Stations State Table";
+ this.checkBox.UseVisualStyleBackColor = true;
+ //
+ // MainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(12F, 25F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(1906, 904);
+ this.Controls.Add(this.checkBox);
+ this.Controls.Add(this.toolStrip1);
+ this.Controls.Add(this.splitContainer1);
+ this.Cursor = System.Windows.Forms.Cursors.Arrow;
+ this.Font = new System.Drawing.Font("微軟正黑體", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(136)));
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
+ this.Name = "MainForm";
+ this.Text = "BikeSharingSystem";
+ this.tabControl.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.splitContainer2.Panel1.ResumeLayout(false);
+ this.splitContainer2.Panel1.PerformLayout();
+ this.splitContainer2.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();
+ this.splitContainer2.ResumeLayout(false);
+ this.tabPage.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).EndInit();
+ this.tabPage2.ResumeLayout(false);
+ this.tabPage2.PerformLayout();
+ this.splitContainer1.Panel1.ResumeLayout(false);
+ this.splitContainer1.Panel2.ResumeLayout(false);
+ ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
+ this.splitContainer1.ResumeLayout(false);
+ this.tabControl3.ResumeLayout(false);
+ this.tabPage5.ResumeLayout(false);
+ this.tabPage5.PerformLayout();
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.tabPage6.ResumeLayout(false);
+ this.tabPage6.PerformLayout();
+ this.groupBox4.ResumeLayout(false);
+ this.groupBox4.PerformLayout();
+ this.toolStrip1.ResumeLayout(false);
+ this.toolStrip1.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.TabControl tabControl;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.TabPage tabPage;
+ private System.Windows.Forms.Button butreset;
+ private System.Windows.Forms.Button butrunend;
+ private System.Windows.Forms.PropertyGrid ppg;
+ private System.Windows.Forms.Label labelBO;
+ private System.Windows.Forms.Button butpga;
+ private System.Windows.Forms.SplitContainer splitContainer1;
+ private System.Windows.Forms.TabControl tabControl3;
+ private System.Windows.Forms.TabPage tabPage5;
+ private System.Windows.Forms.Label label8;
+ private System.Windows.Forms.Label label7;
+ private System.Windows.Forms.TextBox txbcapacity;
+ private System.Windows.Forms.TextBox txbtimehorizon;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TabPage tabPage6;
+ private System.Windows.Forms.ToolStrip toolStrip1;
+ private System.Windows.Forms.ToolStripButton toolStripButton1;
+ private System.Windows.Forms.ToolStripButton toolStripButton2;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txbspeed;
+ private System.Windows.Forms.OpenFileDialog openFileDialog;
+ private System.Windows.Forms.SaveFileDialog saveFileDialog;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.Label labelMax;
+ private System.Windows.Forms.CheckBox checkBox;
+ private System.Windows.Forms.CheckBox checkBoxGreedy;
+ private System.Windows.Forms.Label label10;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.TextBox textBoxPnDTime;
+ private System.Windows.Forms.Label label9;
+ private System.Windows.Forms.Label labeltitle;
+ private System.Windows.Forms.Label labelfilename;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.CheckBox checkBox_times;
+ private System.Windows.Forms.TextBox txbCPUTime;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.Label labelIteration;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.Label labelstations;
+ private System.Windows.Forms.SplitContainer splitContainer2;
+ private System.Windows.Forms.RichTextBox richTextBox;
+ private Steema.TeeChart.TChart tChart;
+ private Steema.TeeChart.Styles.FastLine fastLine1;
+ private Steema.TeeChart.Styles.FastLine fastLine2;
+ private Steema.TeeChart.Styles.FastLine fastLine3;
+ private System.Windows.Forms.DataGridView dataGridView;
+ private System.Windows.Forms.Label label11;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Button button4;
+ private System.Windows.Forms.TextBox textBoxMean;
+ private System.Windows.Forms.TextBox textBoxSTD;
+ private System.Windows.Forms.Label label14;
+ private System.Windows.Forms.Label label15;
+ private System.Windows.Forms.TextBox textBoxGPT;
+ private System.Windows.Forms.Label label16;
+ private System.Windows.Forms.TextBox textBoxGTC;
+ private System.Windows.Forms.Label label17;
+ private System.Windows.Forms.Label label18;
+ private System.Windows.Forms.Label label19;
+ private System.Windows.Forms.TextBox textBoxGPDT;
+ private System.Windows.Forms.Label label20;
+ private System.Windows.Forms.Label label21;
+ private System.Windows.Forms.Label label22;
+ private System.Windows.Forms.TextBox textBoxGTS;
+ private System.Windows.Forms.Label label23;
+ private System.Windows.Forms.Label label26;
+ private System.Windows.Forms.GroupBox groupBox4;
+ private System.Windows.Forms.Label label12;
+ private System.Windows.Forms.ComboBox comboBox1;
+ }
+}
+
diff --git a/BikeSharingSystem/MainForm.cs b/BikeSharingSystem/MainForm.cs
new file mode 100644
index 0000000..30e8cc1
--- /dev/null
+++ b/BikeSharingSystem/MainForm.cs
@@ -0,0 +1,1766 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Newtonsoft.Json;
+using Excel = Microsoft.Office.Interop.Excel;
+using System.Net;
+using System.Xml;
+using System.IO.Compression;
+
+namespace BikeSharingSystem
+{
+ public partial class MainForm : Form
+ {
+ public MainForm()
+ {
+ InitializeComponent();
+ mypen = new Pen(Color.Blue, 1.5f);
+ mypen.CustomEndCap = new System.Drawing.Drawing2D.AdjustableArrowCap(0, 6);
+ myfont = new Font("Arial", 10.0f);
+ }
+ System.Diagnostics.Stopwatch time = new System.Diagnostics.Stopwatch(); //time of each run
+ System.Diagnostics.Stopwatch Totaltime = new System.Diagnostics.Stopwatch(); //time of total run
+ public static double MovingTime = 1;
+ PermutationGA pga = null;
+ HybridACOGA hag = null;
+ Random rnd = new Random();
+ double[,] distanceMatrix;
+ double[] startTOvertex;
+ string[] initialGoods;
+ double[] withoutActionCL; //without action customer loss
+ int[] PandD;
+ int[] BestRouting; //其實是因為懶得再decode一次 所以用額外的記憶體印出答案
+ double timehorizon;
+ double totalDistance = 0;
+ double speed;
+ double NotDoAnything = 0;
+ double CPUBurstTime = 0.0;
+ double PDVelocity; //time cost to pickup and delivery one bike in one minute
+ int truckcapacity;
+ int totalStation;
+ int finishStation;
+ int soFarfinishStation; //so far the best solution complete station amount
+ double[] longitude;
+ double[] latitude;
+ double[] BUSA;
+ double[] BestUSA;
+ Station[] stations;
+ bool ShowDataGridView = false;
+ //繪圖需要的參數
+ double xmin = 0.0, ymax = 0.0, scale = 0.0, scale2 = 0.0, xmiddle = 0.0, ymiddle = 0.0;
+ int w = 0, h = 0;
+ double W = 0, H = 0;
+ Pen mypen;
+ Font myfont;
+ private void reset(object sender, EventArgs e)
+ {
+ //pga = new PermutationGA(totalStation*2+2, OptimizationType.Min,ComputeTimeAverageHoldingShortageLevel,stations);
+ //timehorizon = Convert.ToDouble(txbtimehorizon.Text.ToString());
+ speed = Convert.ToDouble(txbspeed.Text.ToString());
+ truckcapacity = Convert.ToInt32(txbcapacity.Text.ToString());
+ pga.TruckCapacity = truckcapacity;
+ timehorizon = Convert.ToDouble(txbtimehorizon.Text);
+ pga.TimeHorizon = timehorizon;
+ PDVelocity = 1/Convert.ToDouble(textBoxPnDTime.Text);
+ CPUBurstTime = Convert.ToDouble(txbCPUTime.Text);
+ if (double.IsInfinity(PDVelocity)) { PDVelocity = double.MaxValue; }
+ //pga.TruckCapacity = truckcapacity;
+ //pga.TimeHorizon = timehorizon;
+ ShowDataGridView = false;
+ withoutActionCL = new double[totalStation];
+ if (checkBoxGreedy.Checked == true)
+ {
+ pga.Greedyinitialize(distanceMatrix, startTOvertex);
+ }
+ else
+ {
+ pga.reset();
+ }
+
+ for(int i = 0; i < stations.Length; i++)
+ {
+ stations[i].currentGoods = Convert.ToInt32(initialGoods[i]);
+ stations[i].Locker = (int)stations[i].Capacity - stations[i].currentGoods;
+ }
+
+ richTextBox.Clear();
+ min = Double.MaxValue;
+ labelBO.Text = "BestObjective ";
+ NotDoAnything = 0;
+ Truck uselesstruck = new Truck(truckcapacity, 0);
+ for (int i = 0; i < totalStation; i++)
+ {
+ if (stations[i].Surplusbymin > 0)
+ {
+ withoutActionCL[i] = HoldingShortageSurplus(timehorizon, i, 0, ref uselesstruck, truckcapacity);
+ NotDoAnything += withoutActionCL[i];
+ }
+ else
+ {
+ withoutActionCL[i] = HoldingShortageSurplus(timehorizon, i, 0, ref uselesstruck, 0);
+ NotDoAnything += withoutActionCL[i];
+ }
+ }
+
+ //tchart線圖初始化
+ fastLine1.Clear();fastLine2.Clear();fastLine3.Clear();
+ tChart.Series[0].Add( fastLine1);
+ tChart.Series[1].Add(fastLine2);
+ tChart.Series[2].Add(fastLine3);
+ //update data grid view
+ dataGridView.Rows.Clear();
+ dataGridView.Columns.Clear();
+
+ //schedule_day_in_oneIteration.VertAxis = Steema.TeeChart.Styles.VerticalAxis.Right;
+ //tChart.Axes.Left.SetMinMax(170, 450);
+ //tChart.Axes.Right.SetMinMax(100, 200);
+ }
+
+ private void createPGA(object sender, EventArgs e)
+ {
+ butreset.Enabled = true;
+ butrunend.Enabled = true;
+ pga = new PermutationGA(totalStation*2+1, OptimizationType.Min, new GA.ObjectiveFunctionDelegate(ComputeTimeAverageHoldingShortageLevel),stations,distanceMatrix,startTOvertex);
+ this.ppg.SelectedObject = this.pga;
+ }
+
+ private void oneIteration(object sender, EventArgs e)
+ {
+ pga.executeOneIteration();
+ fastLine1.Add((double)pga.IterationCount, pga.IterationAverage);
+ fastLine3.Add((double)pga.IterationCount, pga.SoFarTheBestObjective);
+ //tChart.Refresh();
+ //tChart.Series[0].Add(fastLine1);
+ //tChart.Series[1].Add(fastLine2);
+ //tChart.Series[2].Add(fastLine3);
+ double unsatisfiedAmount = Math.Round( pga.SoFarTheBestObjective,2);
+ labelBO.Text = "BestObjective " + Convert.ToString(unsatisfiedAmount);
+ labelBO.Text.ToString();
+ richTextBox.Text = "繞站順序: depot " ;
+ for(int i = 0; i < soFarfinishStation+1; i++)
+ {
+ //我忘記解碼fuck fuck fuck fuck fuck fuck !!
+ // richTextBox.Text += pga.SoFarTheBestSolution[i].ToString()+" ";
+ richTextBox.Text += BestRouting[i].ToString() + ",";
+ }
+ if (soFarfinishStation == totalStation - 1)
+ {
+ richTextBox.Text += "depot";
+ }
+ double totalPandD = 0;
+ richTextBox.Text +="\n"+"pickup & delivery amount: ";
+ for(int i = 0; i <= soFarfinishStation; i++)
+ {
+ richTextBox.Text += PandD[i].ToString() + ",";
+ totalPandD += Math.Abs(PandD[i]);
+ }
+
+ //richTextBox.Text += "\n" + "truck start time: " + pga.SoFarTheBestSolution[totalStation * 2 + 1];
+ richTextBox.Text += "\n" + "truck initial common goods: " + pga.SoFarTheBestSolution[totalStation * 2];
+ totalDistance = 0;
+ // totalDistance += startTOvertex[pga.SoFarTheBestSolution[0]]; //抵達第一站的距離
+ //string dist = null;
+ totalDistance += startTOvertex[BestRouting[0]]; //抵達第一站的距離
+ //dist = totalDistance.ToString()+"->";
+ for (int i = 0; i < soFarfinishStation; i++)
+ {
+ totalDistance += distanceMatrix[BestRouting[i], BestRouting[i + 1]];
+ //dist += distanceMatrix[BestRouting[i], BestRouting[i + 1]].ToString() + "->";
+ }
+ //全部跑完要回去depot
+ if (soFarfinishStation == totalStation - 1)
+ {
+ totalDistance += startTOvertex[BestRouting[soFarfinishStation]];
+ //dist += startTOvertex[BestRouting[soFarfinishStation]].ToString() + "->";
+ }
+ richTextBox.Text +="\n"+ "*******performance*******";
+ richTextBox.Text += "\n" + "Total pickup & delivery : " + (totalPandD+ pga.SoFarTheBestSolution[totalStation * 2]);
+ richTextBox.Text += "\n" + "total distance : " + totalDistance+" km";
+ richTextBox.Text += "\n" + "unsatisfication amount : " + unsatisfiedAmount;
+ richTextBox.Text += "\n"+"without action : "+NotDoAnything;
+ richTextBox.Text += "\n" + "improvement rate : " + Math.Round(1-unsatisfiedAmount/NotDoAnything,2)*100+"%";
+ //richTextBox.AppendText("routing distance "+dist);
+
+
+ labelMax.Text ="Max : " + NotDoAnything.ToString();
+ fastLine2.Add((double)pga.IterationCount, NotDoAnything);
+ //tChart.Update();
+ ////讓圖形跑超過50代次時可跑的較緩慢
+ //if ((pga.IterationCount > 50) && (!pga.terminationConditionMet())) { Cursor = System.Windows.Forms.Cursors.WaitCursor; }
+ //else { Cursor = System.Windows.Forms.Cursors.Default; }
+ }
+
+
+ private void runToEnd(object sender, EventArgs e)
+ {
+ butrunend.Text = "running...";butrunend.Update();
+ if (checkBox.Checked == true)
+ {
+ ShowDataGridView = true;
+ dataGridView.Columns.Add("stationID", "stationID");
+ dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[0].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[0].HeaderCell.Value = "stationID";
+ dataGridView.Columns.Add("customer lost", "customer lost(個)");
+ dataGridView.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[1].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[1].HeaderCell.Value = "unsatisfied amount(U)";
+ dataGridView.Columns.Add("P&D", "P&D");
+ dataGridView.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[2].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[2].HeaderCell.Value = "Pickup & Delivery amount(個)";
+ dataGridView.Columns.Add("start service time", "start service time");
+ dataGridView.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[3].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[3].HeaderCell.Value = "start service time(mins)";
+ dataGridView.Columns.Add("end service time", "end service time");
+ dataGridView.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[4].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[4].HeaderCell.Value = "end service time(mins)";
+ dataGridView.Columns.Add("customer loss contribute", "customer loss contribute");
+ dataGridView.Columns[5].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[5].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[5].HeaderCell.Value = "unsatisfied amount contribute";
+ dataGridView.Columns.Add("station improvement rate", "station improvement rate");
+ dataGridView.Columns[6].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ dataGridView.Columns[6].HeaderCell.ValueType = typeof(string);
+ dataGridView.Columns[6].HeaderCell.Value = "station improvement rate";
+ for (int k = 0; k < totalStation; k++)
+ {
+ dataGridView.Rows.Add();
+ dataGridView.Rows[k].Cells[0].Value = k;
+ }
+ }
+ if (checkBox_times.Checked == true)
+ {
+ if (pga.IterationCount == 0)
+ {
+ Totaltime.Reset();
+ Totaltime.Start();
+ }
+ //time.Reset();
+ //time.Start();
+ while (true)
+ {
+ if (Totaltime.Elapsed.TotalSeconds >= CPUBurstTime)
+ {
+ Totaltime.Stop();
+ // time.Stop();
+ break;
+ }
+ else
+ {
+ oneIteration(null, null);
+ if (pga.SecondCrossOverType == _2ndCrossOver.pheromone)
+ {
+ pga.updatePheromonetable();
+ }
+ }
+ }
+ labelIteration.Text = "Iterations: " + pga.IterationCount;
+ }
+ else
+ {
+ for (int i = 0; i < pga.IterationLimit; i++)
+ {
+ oneIteration(null, null);
+ if(pga.SecondCrossOverType == _2ndCrossOver.pheromone)
+ {
+ pga.updatePheromonetable();
+ }
+ }
+ }
+ ppg.Update();
+
+ butrunend.Text = "run"; butrunend.Update();
+ }
+ double min = Double.MaxValue;
+
+ private double ComputeTimeAverageHoldingShortageLevel(int[] chromosomes)
+ {
+
+ Truck truck = new Truck(truckcapacity, chromosomes[totalStation * 2]);
+ //period為卡車起始出發時間
+ double USA = 0; //USA = unsatisfied amount
+ double period = chromosomes[totalStation * 2]/PDVelocity; //利用distancematrix除以車速即可得到現在的時間
+ double totalUSA = 0;
+ totalDistance = 0;
+ int[] routingSequence = Decode(chromosomes);
+ double[] periods = new double[totalStation];//record each stations start service time
+ //the following 5 line is for debug
+ //int[] bug = new int[totalStation];
+ //for (int a = 0; a < totalStation; a++)
+ //{
+ // routingSequence[a] = chromosomes[a];
+ //}
+ period += (startTOvertex[routingSequence[0]] / speed);//抵達第一站的時間
+ // totalDistance += startTOvertex[routingSequence[0]]; //抵達第一站的距離
+ int i = 0; int[] temp = new int[totalStation]; finishStation = -1;
+ while (period <= timehorizon && i <= totalStation - 1)
+ {
+ periods[routingSequence[i]] = period;
+ if (stations[routingSequence[i]].Declinebymin < 0 )
+ {
+ temp[i] = truck.CurrentGoods;
+ USA = HoldingShortageSurplus(period, routingSequence[i], truck.PickupDelivery(chromosomes[routingSequence[i] + totalStation]), ref truck,temp[i]);
+ temp[i] -= truck.CurrentGoods;
+ }
+ else if (stations[routingSequence[i]].Surplusbymin > 0 )
+ {
+ temp[i] = truck.CurrentSpace;
+ USA = HoldingShortageSurplus(period, routingSequence[i], truck.PickupDelivery(chromosomes[routingSequence[i] + totalStation]), ref truck,temp[i]);
+ temp[i] = truck.CurrentSpace - temp[i];
+ }
+ else if(stations[routingSequence[i]].Rate == 0 && chromosomes[routingSequence[i] + totalStation] >= 0)
+ {
+ temp[i] = truck.CurrentGoods;
+ USA = HoldingShortageSurplus(period, routingSequence[i], truck.PickupDelivery(chromosomes[routingSequence[i] + totalStation]), ref truck, temp[i]);
+ temp[i] -= truck.CurrentGoods;
+ }
+ else if(stations[routingSequence[i]].Rate == 0 && chromosomes[routingSequence[i] + totalStation] <= 0)
+ {
+ temp[i] = truck.CurrentSpace;
+ USA = HoldingShortageSurplus(period, routingSequence[i], truck.PickupDelivery(chromosomes[routingSequence[i] + totalStation]), ref truck, temp[i]);
+ temp[i] = truck.CurrentSpace - temp[i];
+ }
+ totalUSA += USA;
+ BUSA[i] = USA;
+ finishStation = i; ////幹他媽的 bug 在此 幹我找了一個禮拜阿幹!!!
+ ////update datagrid view for debugging
+ //if (checkBox.Checked == true && i < totalStation)
+ //{
+ // dataGridView.Rows[routingSequence[i]].Cells[1].Value = USA;
+ // dataGridView.Rows[routingSequence[i]].Cells[1].Style.BackColor = Color.Gray;
+ // dataGridView.Rows[routingSequence[i]].Cells[2].Value = temp[i];
+ // dataGridView.Rows[routingSequence[i]].Cells[3].Value = USA;
+ // dataGridView.Rows[routingSequence[i]].Cells[4].Value = period;
+ //}
+ if (i < totalStation - 1)
+ {
+ period += ((distanceMatrix[routingSequence[i], routingSequence[i + 1]] / speed) + Math.Abs(temp[i] / PDVelocity));//到下一站的時間點
+ }else { period += Math.Abs(temp[i] / PDVelocity); }
+ i++;
+
+ }
+
+
+
+ if (finishStation != totalStation - 1)
+ {
+ //沒有跑完的車站繼續算成本
+ truck.CurrentGoods = 0; truck.CurrentSpace = truckcapacity;
+ for (int a = finishStation+1; a < totalStation ; a++)
+ {
+ if (stations[routingSequence[a]].Surplusbymin > 0)
+ {
+ USA = HoldingShortageSurplus(timehorizon, routingSequence[a], 0, ref truck, truckcapacity);
+ }
+ else if (stations[routingSequence[a]].Declinebymin < 0)
+ {
+ USA = HoldingShortageSurplus(timehorizon, routingSequence[a], 0, ref truck, 0);
+ }else
+ {
+ USA = 0;
+ }
+ totalUSA += USA;
+ BUSA[a] = USA;
+ //if (checkBox.Checked == true)
+ //{
+ // dataGridView.Rows[routingSequence[a]].Cells[1].Value = USA;
+ // dataGridView.Rows[routingSequence[a]].Cells[1].Style.BackColor = Color.Orange;
+ // dataGridView.Rows[routingSequence[a]].Cells[2].Value = 0;
+ // dataGridView.Rows[routingSequence[a]].Cells[3].Value = "X";
+ // dataGridView.Rows[routingSequence[a]].Cells[4].Value = "X";
+ //}
+ }
+ }
+ if(min > totalUSA)
+ {
+ min = totalUSA;
+ soFarfinishStation = finishStation;
+ temp.CopyTo(PandD,0);
+ BUSA.CopyTo(BestUSA,0);
+ routingSequence.CopyTo(BestRouting, 0);
+ //update datagrid view for debugging
+ if (ShowDataGridView == true )
+ {
+ for(int a = 0;a <= finishStation; a++)
+ {
+ dataGridView.Rows[routingSequence[a]].Cells[1].Value = Math.Round(BUSA[a],2);
+ dataGridView.Rows[routingSequence[a]].Cells[2].Value = temp[a];
+ dataGridView.Rows[routingSequence[a]].Cells[3].Value = Math.Round( periods[routingSequence[a]],2);
+ dataGridView.Rows[routingSequence[a]].Cells[4].Value = Math.Round(periods[routingSequence[a]] +Math.Abs( temp[a])/PDVelocity,2);
+ dataGridView.Rows[routingSequence[a]].Cells[5].Value = Math.Round(BUSA[a]/min,4) * 100 + "%";
+ if (withoutActionCL[routingSequence[a]] != 0)
+ {
+ dataGridView.Rows[routingSequence[a]].Cells[6].Value = Math.Round(1 - BUSA[a] / withoutActionCL[routingSequence[a]], 4) * 100 + "%";
+ }
+ else
+ {
+ dataGridView.Rows[routingSequence[a]].Cells[6].Value = "0%";
+ }
+
+ }
+ for(int b = finishStation+1;b < totalStation;b++)
+ {
+ dataGridView.Rows[routingSequence[b]].Cells[1].Value = Math.Round(BUSA[b],2);
+ dataGridView.Rows[routingSequence[b]].Cells[2].Value = 0;
+ dataGridView.Rows[routingSequence[b]].Cells[3].Value = timehorizon;
+ dataGridView.Rows[routingSequence[b]].Cells[4].Value = timehorizon;
+ dataGridView.Rows[routingSequence[b]].Cells[5].Value = Math.Round(BUSA[b] / min,4)*100+"%";
+ dataGridView.Rows[routingSequence[b]].Cells[6].Value = "0%";
+ }
+ }
+ }
+ return totalUSA;
+ }
+ //其實該list的第0個的值是第1站被繞行的順序
+ private int[]Decode(int[] chromosome)
+ {
+ int[] routingSequence = new int[totalStation];
+ int[] temp = new int[totalStation];
+ for(int i = 0; i < totalStation; i++)
+ {
+ temp[i] = chromosome[i];routingSequence[i] = i ; //when you add depot location just amend it
+ }
+ Array.Sort(temp, routingSequence);
+ return routingSequence;
+ }
+ ///
+ /// 其實還沒考慮過初始站點的bike amount為0時的情況,如果有會fail
+ ///
+ /// 卡車出發時點
+ /// station id
+ /// GA求解後pick up or delivery的數量
+ ///
+ private double HoldingShortageSurplus(double starttime,int stationID ,int commodity,ref Truck truck,double TGS)
+ {
+ double bikeAmount = 0;
+ double accumulatedtime = 0;
+ double PnDTime = 0;
+ // Truck t = truck;
+ if(stations[stationID].Declinebymin < 0) //deliver bicycle to the station commodity must be positive
+ {
+ double lackTime = 0.0;
+ //卡車到達該站時該站的腳踏車就沒ㄌ
+ if ( stations[stationID].currentGoods / stations[stationID].Declinebymin * -1 < starttime)
+ {
+ lackTime = stations[stationID].currentGoods / stations[stationID].Declinebymin * -1;
+ accumulatedtime = starttime - lackTime;
+ bikeAmount += stations[stationID].Declinebymin * accumulatedtime*-1;
+ //commodity超過locker就要先塞回去不管後續的借還車= =凸操你媽的幹!!
+ if (commodity > stations[stationID].Capacity)
+ {
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)stations[stationID].Capacity);
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ commodity = (int)stations[stationID].Capacity;
+ }
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ PnDTime = commodity / PDVelocity;
+ if (starttime + PnDTime > timehorizon)
+ {
+ PnDTime = timehorizon - starttime;
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)(PnDTime*PDVelocity));
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ commodity = (int)(PnDTime * PDVelocity);
+ PnDTime = commodity / PDVelocity;//好像會有bug喔?!!!
+ }
+ if (PDVelocity + stations[stationID].Declinebymin < 0) //station decline rate > truck supply velocity
+ {
+ bikeAmount -= (PDVelocity + stations[stationID].Declinebymin) * PnDTime;
+ stations[stationID].currentGoods = 0;
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (PnDTime < 0) throw new Exception("bug!!!");
+ }
+ else
+ {
+ if (stations[stationID].Capacity >= (PDVelocity + stations[stationID].Declinebymin) * PnDTime)
+ {
+ stations[stationID].currentGoods = (PDVelocity + stations[stationID].Declinebymin) * PnDTime;
+ }
+ else//如果給的數量超過站的容量就G囉
+ {
+ stations[stationID].currentGoods = stations[stationID].Capacity;
+ truck.CurrentGoods += (commodity - (int)stations[stationID].Capacity);
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ }
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ // PnDTime = (TGS - truck.CurrentGoods) / PDVelocity;
+ if (PnDTime < 0) throw new Exception("bug!!!");
+ }
+ if (stations[stationID].Locker < 0) { throw new Exception("bug is here !!"); }
+ if (commodity != 0)
+ {
+ lackTime = starttime + PnDTime - stations[stationID].currentGoods / stations[stationID].Declinebymin;//又缺為0時
+ if (timehorizon >= lackTime)
+ {
+ bikeAmount += stations[stationID].Declinebymin * (timehorizon - lackTime) * -1;
+ }
+ }
+ else
+ {
+ if (timehorizon >= lackTime)
+ {
+ bikeAmount = (timehorizon - lackTime) * stations[stationID].Declinebymin * -1;
+ }
+ }
+ }
+ else
+ {
+ stations[stationID].currentGoods = stations[stationID].currentGoods + starttime * stations[stationID].Declinebymin;
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ //commodity超過locker就要先塞回去不管後續的借還車= =凸操你媽的幹!!
+ if (commodity > stations[stationID].Locker)
+ {
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)stations[stationID].Locker);
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ commodity = (int)stations[stationID].Locker;
+ }
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ PnDTime = (commodity / PDVelocity);
+ if (starttime + PnDTime > timehorizon)
+ {
+ PnDTime = timehorizon - starttime;
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)(PnDTime * PDVelocity));
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ commodity = (int)(PnDTime * PDVelocity);
+ PnDTime = commodity / PDVelocity;//好像會有bug喔?!!!
+ }
+ if (PDVelocity + stations[stationID].Declinebymin < 0 && stations[stationID].currentGoods + (PDVelocity + stations[stationID].Declinebymin) * PnDTime < 0)
+ { //decline to 0 time
+ lackTime = -stations[stationID].currentGoods / (PDVelocity + stations[stationID].Declinebymin) + starttime;
+
+ accumulatedtime = starttime + PnDTime - lackTime;
+ bikeAmount -= accumulatedtime * (PDVelocity + stations[stationID].Declinebymin);
+ stations[stationID].currentGoods = 0;
+ stations[stationID].Locker = stations[stationID].Capacity;
+ if (PnDTime < 0) throw new Exception("bug!!!");
+ }
+ else
+ {
+ if (stations[stationID].currentGoods + (PDVelocity + stations[stationID].Declinebymin) * PnDTime <= stations[stationID].Capacity)
+ {
+ stations[stationID].currentGoods += (PDVelocity + stations[stationID].Declinebymin) *PnDTime;
+ }
+ else //卡車送的超出站可以負荷的輛
+ {
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)stations[stationID].Locker);
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ stations[stationID].currentGoods = stations[stationID].Capacity;
+ if (truck.CurrentGoods > truckcapacity || truck.CurrentSpace < 0)
+ {
+ throw new Exception();
+ }
+ }
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ // PnDTime = (TGS - truck.CurrentGoods) / PDVelocity;
+ if (PnDTime < 0) throw new Exception("bug!!!");
+ }
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ lackTime = starttime + PnDTime-stations[stationID].currentGoods / stations[stationID].Declinebymin;
+ if (timehorizon > lackTime)
+ {
+ bikeAmount += stations[stationID].Declinebymin * (timehorizon - lackTime)*-1;
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ }
+ }
+ stations[stationID].currentGoods = Convert.ToInt32(initialGoods[stationID]);
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ return bikeAmount;
+ }
+ else if(stations[stationID].Surplusbymin > 0) //pickup bicycle station commodity must be negative
+ {
+ double surplustime;
+ //卡車到達該站時該站的腳踏車就滿ㄌ
+ if (stations[stationID].Locker/stations[stationID].Surplusbymin < starttime)
+ {
+ surplustime = stations[stationID].Locker/stations[stationID].Surplusbymin;
+ accumulatedtime = starttime - surplustime;
+ bikeAmount += stations[stationID].Surplusbymin * accumulatedtime;
+ //commodity超過locker就要先塞回去不管後續的借還車= =凸操你媽的幹!!
+ if (-commodity > stations[stationID].Capacity)
+ {
+ //把多出的space塞回去改變卡車上的數量
+ truck.CurrentSpace -= (commodity + (int)stations[stationID].Capacity);
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ commodity = -(int)stations[stationID].Capacity;
+ }
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ PnDTime = -commodity / PDVelocity;
+ if (starttime + PnDTime > timehorizon)
+ {
+ PnDTime = timehorizon - starttime;
+ //因為時間來不及ㄌ所以把多出的space塞回去改變卡車上的數量
+ truck.CurrentSpace -= (commodity+ (int)(PnDTime*PDVelocity));
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ commodity = -(int)(PnDTime * PDVelocity);
+ PnDTime = -commodity / PDVelocity;//好像會有bug喔?!!!
+ }
+ if (-PDVelocity + stations[stationID].Surplusbymin > 0) //station increase rate > truck pickup velocity
+ {
+
+ bikeAmount += (stations[stationID].Surplusbymin - PDVelocity) *PnDTime;
+ stations[stationID].currentGoods = stations[stationID].Capacity;
+ stations[stationID].Locker = 0;
+ if (PnDTime < 0) throw new Exception("bug!!!");
+ }
+ else
+ {
+ if (stations[stationID].Capacity >= (-PDVelocity + stations[stationID].Surplusbymin) * -PnDTime)
+ {
+ stations[stationID].Locker = (-PDVelocity + stations[stationID].Surplusbymin) * -PnDTime;
+ }
+ else
+ {
+ stations[stationID].Locker = stations[stationID].Capacity;
+ truck.CurrentSpace -= (commodity + (int)stations[stationID].Capacity);
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ }
+ if (stations[stationID].Locker < 0) { throw new Exception("big is here !!"); }
+ stations[stationID].currentGoods = stations[stationID].Capacity - stations[stationID].Locker;
+ // PnDTime = (TGS - truck.CurrentSpace) / PDVelocity;
+ if (PnDTime < 0) throw new Exception("bug!!!");
+ }
+ if (commodity != 0)
+ {
+ surplustime = stations[stationID].Locker / stations[stationID].Surplusbymin + starttime+PnDTime;//又滿時
+ if (surplustime < timehorizon)
+ {
+ bikeAmount += stations[stationID].Surplusbymin * (timehorizon - surplustime);
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ }
+ }
+ else
+ {
+ if (surplustime < timehorizon)
+ {
+ bikeAmount = (timehorizon - surplustime) * stations[stationID].Surplusbymin;
+ }
+ }
+ }
+ else
+ {
+ stations[stationID].currentGoods = stations[stationID].currentGoods + starttime * stations[stationID].Surplusbymin;
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ //commodity超過locker就要先塞回去不管後續的借還車= =凸操你媽的幹!!
+ if (-commodity > stations[stationID].currentGoods)
+ {
+ //把多出的space塞回去改變卡車上的數量
+ truck.CurrentSpace -= (commodity + (int)stations[stationID].currentGoods);
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ commodity = -(int)stations[stationID].currentGoods;
+ }
+ PnDTime = -(commodity / PDVelocity);
+ if (starttime + PnDTime > timehorizon)
+ {
+ PnDTime = timehorizon - starttime;
+ //把多出的space塞回去改變卡車上的數量
+ truck.CurrentSpace -= (commodity + (int)(PnDTime * PDVelocity));
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ commodity = -(int)(PnDTime * PDVelocity);
+ PnDTime = -commodity / PDVelocity;//好像會有bug喔?!!!
+ }
+ if (-PDVelocity + stations[stationID].Surplusbymin > 0 && stations[stationID].currentGoods + (-PDVelocity + stations[stationID].Surplusbymin) * PnDTime >= stations[stationID].Capacity)
+ { //increase to full time ==> there is something wrong here ?!!!
+ surplustime = stations[stationID].Locker / (-PDVelocity + stations[stationID].Surplusbymin) + starttime;
+
+ accumulatedtime = starttime + PnDTime - surplustime;
+ bikeAmount += accumulatedtime * (-PDVelocity + stations[stationID].Surplusbymin);
+ stations[stationID].currentGoods = stations[stationID].Capacity;
+ stations[stationID].Locker = 0;
+ if (PnDTime < 0)
+ {
+ throw new Exception("bug!!!");
+ }
+ }
+ else
+ {
+ if (stations[stationID].currentGoods - (-PDVelocity + stations[stationID].Surplusbymin) * -PnDTime >= 0)
+ {
+ stations[stationID].Locker = stations[stationID].Capacity - (stations[stationID].currentGoods - (-PDVelocity + stations[stationID].Surplusbymin) *-PnDTime);
+ if (stations[stationID].Locker < 0)
+ {
+ throw new Exception("big is here !!");
+ }
+ }
+ else //該站已經不能再拿走貨物ㄌ不然就會變成負的
+ {
+ truck.CurrentSpace -= (commodity + (int)stations[stationID].currentGoods);
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ stations[stationID].Locker = 0;
+ //改變卡車上的貨物數量
+ if (truck.CurrentGoods > truckcapacity || truck.CurrentSpace < 0)
+ {
+ throw new Exception();
+ }
+ }
+ // PnDTime = (TGS - truck.CurrentSpace) / PDVelocity;
+ if (PnDTime < 0)
+ {
+ throw new Exception("bug!!!");
+ }
+ }
+ surplustime = stations[stationID].Locker / stations[stationID].Surplusbymin + starttime+PnDTime;
+ if (surplustime < timehorizon)
+ {
+ bikeAmount += stations[stationID].Surplusbymin * (timehorizon - surplustime);
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ }
+ }
+
+ stations[stationID].currentGoods = Convert.ToInt32(initialGoods[stationID]);
+ stations[stationID].Locker = stations[stationID].Capacity - stations[stationID].currentGoods;
+ if (stations[stationID].Locker < 0) { throw new Exception("bug is here !!"); }
+ if (bikeAmount < 0) throw new Exception("bug!!!");
+ return bikeAmount;
+ }
+ else //該站點無增減率時
+ {
+ if (commodity < 0)
+ {
+ if(commodity+ stations[stationID].currentGoods<0)//無法拿的情況下
+ {
+
+ truck.CurrentSpace -= (commodity + (int)stations[stationID].currentGoods);
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ {
+ throw new Exception("bug");
+ }
+ commodity = -(int)stations[stationID].currentGoods;
+ }
+
+ PnDTime = -commodity / PDVelocity;
+ if (starttime + PnDTime > timehorizon)
+ {
+ PnDTime = timehorizon - starttime;
+ //因為時間來不及ㄌ所以把多出的space塞回去改變卡車上的數量
+ truck.CurrentSpace -= (commodity + (int)(PnDTime * PDVelocity));
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ truck.CurrentGoods = truckcapacity - truck.CurrentSpace;
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ commodity = -(int)(PnDTime * PDVelocity);
+ }
+ }
+ else if (commodity > 0)
+ {
+ if (commodity > stations[stationID].Locker)//無法放的情況下
+ {
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)stations[stationID].Locker);
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ commodity = (int)stations[stationID].Locker;
+ }
+
+ PnDTime = commodity / PDVelocity;
+ if (starttime + PnDTime > timehorizon)
+ {
+ PnDTime = timehorizon - starttime;
+ //把多出的或塞回去改變卡車上的數量
+ truck.CurrentGoods += (commodity - (int)(PnDTime * PDVelocity));
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ truck.CurrentSpace = truckcapacity - truck.CurrentGoods;
+ //if (truck.CurrentGoods > truckcapacity || truck.CurrentGoods < 0 || truck.CurrentSpace > truckcapacity || truck.CurrentSpace < 0)
+ //{
+ // throw new Exception("bug");
+ //}
+ commodity = (int)(PnDTime * PDVelocity);
+ }
+ }
+ return 0;
+ }
+ }
+
+ private void openfile(object sender, EventArgs e)
+ {
+ dataGridView.Rows.Clear();dataGridView.Columns.Clear();
+ if (openFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ StreamReader sr = new StreamReader(openFileDialog.FileName);
+ labelfilename.Text ="File: "+ openFileDialog.SafeFileName;
+ labeltitle.Text = "Title: "+ sr.ReadLine().ToString();
+ totalStation = Convert.ToInt32( sr.ReadLine().ToString());
+ labelstations.Text = "Total Stations: " + totalStation.ToString();
+ timehorizon = Convert.ToDouble(sr.ReadLine());txbtimehorizon.Text = timehorizon.ToString();
+ truckcapacity = Convert.ToInt32(sr.ReadLine()); txbcapacity.Text = truckcapacity.ToString();
+ speed = Convert.ToDouble(sr.ReadLine());txbspeed.Text = speed.ToString();
+ PDVelocity = 1 / Convert.ToDouble(sr.ReadLine()); textBoxPnDTime.Text = (1 / PDVelocity).ToString();
+
+ initialGoods = sr.ReadLine().Split(',');
+ string[]capacity = sr.ReadLine().Split(',');
+ string[] rate = sr.ReadLine().Split(',');
+ string[] distance = sr.ReadLine().Split(',');
+ string[] startTOother = sr.ReadLine().Split(',');
+ string[] location = sr.ReadLine().Split(',');
+ stations = new Station[totalStation];
+ distanceMatrix = new double[totalStation, totalStation];
+ startTOvertex = new double[totalStation];
+ BUSA = new double[totalStation];BestUSA = new double[totalStation];
+ for(int i = 0; i < stations.Length; i++)
+ {
+ stations[i] = new Station(Convert.ToInt32(capacity[i]), Convert.ToInt32(initialGoods[i]), i, Convert.ToDouble(rate[i]));
+ }
+ //for station location
+ int c = 0;
+ longitude = new double [totalStation+1];
+ double[] templong = new double[totalStation + 1];
+ latitude = new double[totalStation+ 1];
+ double[] templat = new double[totalStation + 1];
+ for(int a = 0; a < location.Length; a += 2)
+ {
+ templat[c] = latitude[c] = Convert.ToDouble(location[a]);
+ templong[c] = longitude[c] = Convert.ToDouble(location[a + 1]);
+ c++;
+ }
+ c = 0;
+ Array.Sort(templat);ymiddle = templat[(totalStation + 1) / 2];
+ Array.Sort(templong);xmiddle = templong[(totalStation + 1) / 2];
+
+ for (int i = 0; i < totalStation; i++)
+ {
+ for (int j = 0; j < totalStation; j++)
+ {
+ distanceMatrix[i, j] = Convert.ToDouble(distance[c]);
+ c++;
+ }
+ }
+ //加入從depot到其他vertex的距離
+ for(int i = 0; i < totalStation; i++)
+ {
+ startTOvertex[i] = Convert.ToDouble(startTOother[i]);
+ }
+ PandD = new int[totalStation];
+ BestRouting = new int[totalStation];
+ sr.Close();
+
+ //if (checkBox.Checked == true)
+ //{
+ // dataGridView.Columns.Add("stationID" , "stationID" );
+ // dataGridView.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ // dataGridView.Columns[0].HeaderCell.ValueType = typeof(string);
+ // dataGridView.Columns[0].HeaderCell.Value = "stationID";
+ // dataGridView.Columns.Add("customer lost", "customer lost");
+ // dataGridView.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ // dataGridView.Columns[1].HeaderCell.ValueType = typeof(string);
+ // dataGridView.Columns[1].HeaderCell.Value = "customer lost";
+ // dataGridView.Columns.Add("P&D", "P&D");
+ // dataGridView.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ // dataGridView.Columns[2].HeaderCell.ValueType = typeof(string);
+ // dataGridView.Columns[2].HeaderCell.Value = "P&D";
+ // dataGridView.Columns.Add("start service time", "start service time");
+ // dataGridView.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ // dataGridView.Columns[3].HeaderCell.ValueType = typeof(string);
+ // dataGridView.Columns[3].HeaderCell.Value = "start service time";
+ // dataGridView.Columns.Add("end service time", "end service time");
+ // dataGridView.Columns[4].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
+ // dataGridView.Columns[4].HeaderCell.ValueType = typeof(string);
+ // dataGridView.Columns[4].HeaderCell.Value = "end service time";
+
+ // for (int k = 0; k < totalStation; k++)
+ // {
+ // dataGridView.Rows.Add();
+ // dataGridView.Rows[k].Cells[0].Value = k;
+ // }
+
+ // //dataGridView.Rows.Add();
+ // //dataGridView.Rows[0].HeaderCell.ValueType = typeof(string);
+ // //dataGridView.Rows[0].HeaderCell.Value = "cost";
+ // //dataGridView.Rows[1].HeaderCell.Value = "Best obj";
+ //}
+ }
+
+ }
+
+ private void getlowerbound(object sender, EventArgs e)
+ {
+ double [] customerlost = new double[30];
+ int[] pandd = new int[30];
+ double[] dist = new double[30];
+ //for excel
+ Excel._Workbook wbk;
+ Excel._Worksheet wst;
+ for (int i = 0; i < 30; i++)
+ {
+ createPGA(sender, e);
+ pga.CrossOverType = PermutationCrossover.HeuristicServiceEmergecy;
+ pga.SecondCrossOverType = _2ndCrossOver.LVD;
+ pga.MutationType = PermutationMutation.EmergentService;
+ reset(sender, e);
+ runToEnd(sender, e);
+ // 開啟一個新的應用程式
+ Excel.Application app = new Excel.Application();
+ // 讓Excel文件可見
+ app.Visible = true;
+ // 停用警告訊息
+ app.DisplayAlerts = false;
+ // 加入新的活頁簿
+ app.Workbooks.Add(Type.Missing);
+ // 引用第一個活頁簿
+ wbk = app.Workbooks[1];
+ // 設定活頁簿焦點
+ wbk.Activate();
+ // seconds since 1970-01-01 00:00:00 UTC
+ // 現在時間轉秒數
+ double timestamp = (DateTime.Now.AddHours(-8) - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
+ // 秒數轉 DateTime
+ DateTime dt = (new DateTime(1970, 1, 1, 0, 0, 0)).AddHours(8).AddSeconds(timestamp);
+ string fn = dt.ToString().Replace('/','0').Replace(' ','a').Replace(':','a');
+ string savePath = "C:\\Users\\user\\Desktop\\outcome\\" + fn;
+ try
+ {
+ // 引用第一個工作表
+ wst = (Excel._Worksheet)wbk.Worksheets[1];
+ // 命名工作表的名稱
+ wst.Name = fn;
+ // 設定工作表焦點
+ wst.Activate();
+ //app.Cells[1, 1] = "ubike retrieve data";
+ // 設定metainfo
+ //app.Cells[1, 1] = "truck start time";
+ app.Cells[1, 1] = "truck initial goods";
+ app.Cells[2, 1] = "routing sequence";
+ app.Cells[3, 1] = "P&D amount";
+ app.Cells[4, 1] = "withoutaction";
+ app.Cells[5, 1] = "total distance";
+ app.Cells[6, 1] = "total P&D";
+ app.Cells[7, 1] = "unsatisfied amount";
+ app.Cells[8, 1] = "improvement rate";
+
+
+
+ //app.Cells[1, 2] = pga.SoFarTheBestSolution[totalStation * 2+1].ToString("0.00");
+ app.Cells[1, 2] = pga.SoFarTheBestSolution[totalStation * 2 ].ToString("0.00");
+ string r = "", pd = ""; double totalPandD = 0.0;
+ for (int j = 0; j < soFarfinishStation + 1; j++)
+ {
+ r += BestRouting[j].ToString() + ",";
+ pd += PandD[j] + ",";
+ //excelWS.Cells[3, 2 + i] = BestRouting[i];
+ //excelWS.Cells[4, 2 + i] = PandD[i];
+ totalPandD += Math.Abs(PandD[j]);
+ }
+ app.Cells[2, 2] = r;
+ app.Cells[3, 2] = pd;
+ app.Cells[4, 2] = NotDoAnything.ToString("0.00");
+ app.Cells[5, 2] = totalDistance.ToString("0.00");
+ app.Cells[6, 2] = (totalPandD + pga.SoFarTheBestSolution[totalStation * 2]).ToString();
+ app.Cells[7, 2] = Math.Round(pga.SoFarTheBestObjective, 2).ToString();
+ app.Cells[8, 2] = Math.Round(1 - pga.SoFarTheBestObjective / NotDoAnything, 2).ToString("0.00");
+
+ //record
+ customerlost[i] = Math.Round(pga.SoFarTheBestObjective, 2);
+ pandd[i] = (int)(totalPandD + pga.SoFarTheBestSolution[totalStation * 2]);
+ dist[i] = totalDistance;
+ try
+ {
+ //另存活頁簿
+ wbk.SaveAs(savePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
+ wbk.SaveCopyAs(fn);
+ Console.WriteLine("儲存文件於 " + Environment.NewLine + savePath);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("儲存檔案出錯,檔案可能正在使用" + Environment.NewLine + ex.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("產生報表時出錯!" + Environment.NewLine + ex.Message);
+ }
+
+ //關閉活頁簿
+ wbk.Close(false, Type.Missing, Type.Missing);
+ //關閉Excel
+ app.Quit();
+ //釋放Excel資源
+ System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
+ wbk = null;
+ wst = null;
+ app = null;
+ GC.Collect();
+ }
+ // 開啟一個新的應用程式
+ Excel.Application ap = new Excel.Application();
+ // 讓Excel文件可見
+ ap.Visible = true;
+ // 停用警告訊息
+ ap.DisplayAlerts = false;
+ // 加入新的活頁簿
+ ap.Workbooks.Add(Type.Missing);
+ // 引用第一個活頁簿
+ wbk = ap.Workbooks[1];
+ // 設定活頁簿焦點
+ wbk.Activate();
+ // seconds since 1970-01-01 00:00:00 UTC
+ // 現在時間轉秒數
+ double timestam = (DateTime.Now.AddHours(-8) - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
+ // 秒數轉 DateTime
+ DateTime d = (new DateTime(1970, 1, 1, 0, 0, 0)).AddHours(8).AddSeconds(timestam);
+ string f = d.ToString().Replace('/', '0').Replace(' ', 'a').Replace(':', 'a');
+ string savePat = "C:\\Users\\user\\Desktop\\outcome\\" + f;
+ try
+ {
+ // 引用第一個工作表
+ wst = (Excel._Worksheet)wbk.Worksheets[1];
+ // 命名工作表的名稱
+ wst.Name = f;
+ // 設定工作表焦點
+ wst.Activate();
+ // 設定metainfo
+
+ ap.Cells[7, 1] = "total distance";
+ ap.Cells[8, 1] = "total P&D";
+ ap.Cells[9, 1] = "unsatisfied amount";
+
+
+ ap.Cells[7, 2] = dist.Average();
+ ap.Cells[8, 2] = pandd.Average();
+ ap.Cells[9, 2] = customerlost.Average();
+
+ try
+ {
+ //另存活頁簿
+ wbk.SaveAs(savePat, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
+ wbk.SaveCopyAs(f);
+ Console.WriteLine("儲存文件於 " + Environment.NewLine + savePat);
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("儲存檔案出錯,檔案可能正在使用" + Environment.NewLine + ex.Message);
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine("產生報表時出錯!" + Environment.NewLine + ex.Message);
+ }
+
+ //關閉活頁簿
+ wbk.Close(false, Type.Missing, Type.Missing);
+ //關閉Excel
+ ap.Quit();
+ //釋放Excel資源
+ System.Runtime.InteropServices.Marshal.ReleaseComObject(ap);
+ wbk = null;
+ wst = null;
+ ap = null;
+ GC.Collect();
+
+ //totalDistance = 0;
+ //Station[] ss = new Station[totalStation];
+ ////從0開始出發每次都找最短距離作為他的下一站
+ //stations.CopyTo(ss, 0);
+ //Array.Sort(ss);
+ //Array.Reverse(ss);
+ //Station[] Sequence = new Station[totalStation];
+ //int j = 0;
+ //for (int i = totalStation - 1; i > -1; i--)
+ //{
+ // Sequence[j] = ss[i]; Console.Write(Sequence[j].StationID + " "); j++;
+
+ //}
+ //double period = 0; //利用distancematrix除以車速即可得到現在的時間
+ //double cost = 0.0;
+ //period = (startTOvertex[Sequence[0].StationID] / speed + (truckcapacity/2)/PDVelocity);//抵達第一站的時間
+ //totalDistance += startTOvertex[Sequence[0].StationID]; //抵達第一站的距離
+ //int a = 0;Truck truck = new Truck(truckcapacity, truckcapacity/2);
+ //int[] temp = new int[totalStation];
+ //while(period <= timehorizon && a < totalStation - 1)
+ //{
+
+ // if (Sequence[a].Declinebymin < 0)
+ // {
+ // temp[a] = truck.CurrentGoods;
+ // cost += HoldingShortageSurplus(period, Sequence[a].StationID, truck.PickupDelivery(truckcapacity / 2), ref truck, temp[a]);
+ // temp[a] -= truck.CurrentGoods;
+ // }
+ // else if (Sequence[a].Surplusbymin > 0)
+ // {
+ // temp[a] = truck.CurrentSpace;
+ // cost += HoldingShortageSurplus(period, Sequence[a].StationID, truck.PickupDelivery(-truckcapacity / 2), ref truck, temp[a]);
+ // temp[a] = truck.CurrentSpace - temp[a];
+ // }
+ // period += (distanceMatrix[Sequence[a].StationID, Sequence[a + 1].StationID] /speed+ Math.Abs(temp[a] / PDVelocity));//到下一站的時間點
+ // totalDistance += distanceMatrix[Sequence[a].StationID, Sequence[a + 1].StationID];
+ // a++;
+ //}
+ //if(period > timehorizon) { totalDistance-= distanceMatrix[Sequence[a-1].StationID, Sequence[a].StationID]; }
+ ////因為上面最後一次部會做所以...
+ //if (Sequence[a].Declinebymin < 0 && period <= timehorizon)
+ //{
+ // temp[a] = truck.CurrentGoods;
+ // cost += HoldingShortageSurplus(period, Sequence[a].StationID, truck.PickupDelivery(truckcapacity / 2), ref truck, temp[a]);
+ // temp[a] -= truck.CurrentGoods;
+ //}
+ //else if(Sequence[a].Surplusbymin > 0 && period <= timehorizon)
+ //{
+ // temp[a] = truck.CurrentSpace;
+ // cost += HoldingShortageSurplus(period, Sequence[a].StationID, truck.PickupDelivery(-truckcapacity / 2), ref truck, temp[a]);
+ // temp[a] = truck.CurrentSpace - temp[a];
+ //}
+ //else { a--; }
+
+ ////全部跑完要回去depot
+ //if (a == totalStation - 1)
+ //{
+ // totalDistance += startTOvertex[Sequence[a].StationID];
+ //}
+ //else
+ //{
+ // //沒有跑完的車站繼續算成本
+ // for (int b = a; b < totalStation - 1; b++)
+ // {
+ // truck.CurrentGoods = 0; truck.CurrentSpace = truckcapacity;
+ // if (stations[Sequence[b].StationID].Surplusbymin > 0)
+ // {
+ // cost += HoldingShortageSurplus(timehorizon, Sequence[b].StationID, 0, ref truck, truckcapacity);
+ // }
+ // else
+ // {
+ // cost += HoldingShortageSurplus(timehorizon, Sequence[b].StationID, 0, ref truck, 0);
+ // }
+
+ // }
+ //}
+ //int totalpnd = 0;
+ //richTextBox.Text = "routing path is depot ";
+ //for(int i = 0; i < a+1; i++)
+ //{
+ // richTextBox.Text += (Sequence[i].StationID + " ");
+ //}
+ //richTextBox.Text += ("\n " + "pickup and delivery amount : ");
+ //for (int i = 0; i <= a; i++)
+ //{
+ // richTextBox.Text += (temp[i] + " ");
+ // totalpnd += Math.Abs(temp[i]);
+ //}
+ //totalpnd += truckcapacity / 2;
+ //richTextBox.Text +=("\n" +"********performance********");
+ //richTextBox.Text += ("\n" + "total unsatisfied amount is :" + cost);
+ //richTextBox.Text += ("\n" + "total distance is :" + totalDistance );
+ //richTextBox.Text += ("\n" + "total pickup & delivery: " + totalpnd);
+ }
+
+ private void nearestInsert(object sender, EventArgs e)
+ {
+ //int[] bug = new int[] { 8, 95, 9, 7, 68, 78, 20, 230, 74, 70, 247, 75, 85, 69, 122, 145, 161, 79, 245, 127, 289, 335, 83, 19, 93, 67, 66, 366, 330, 240, 336, 89, 125, 88, 129, 18, 32,0,1,2,3,4,5,6,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,76,77,80,81,82,84,86,87,90,91,92,94,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,126,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,235,236,237,238,239,241,242,243,244,246,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,367,368,369,370,371
+ // };
+ //int[] pd = new int[] {
+ // 8, -14, 14, 0, 0, -14, 14, 0, -14, 0, 0, 14, -14, 14, -14, 14, -14, 6, 8, -14, 0, 14, -14, 14, -14, 14, 0, 0, -14, 0, 14, -14, 14, 0, -3, -11, 11,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ // };
+ //Array.Sort(bug, pd);
+ //for (int i = 0; i < 372; i++)
+ //{
+
+ // Console.Write(pd[i]+",");
+ //}
+ //int[] bug = new int[] {8, 95, 9, 7, 68, 78, 20, 230, 74, 70, 247, 75, 85, 69, 122, 145, 161, 79, 245, 127, 289, 335, 83, 19, 93, 67, 66, 366, 330, 240, 336, 89, 125, 88, 129, 18, 32,0,1,2,3,4,5,6,10,11,12,13,14,15,16,17,21,22,23,24,25,26,27,28,29,30,31,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,76,77,80,81,82,84,86,87,90,91,92,94,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,123,124,126,128,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,231,232,233,234,235,236,237,238,239,241,242,243,244,246,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,331,332,333,334,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,367,368,369,370,371,
+ // 1, 1, 1, 1, 1, 1, 1, 0, 8, 14, 1, 1, 1, 1, 1, 1, 1, 1, -11, 14, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 14, 0, 14, 0, 1, 1, 1, -14, 14, 1, 1, -14, 6, 1, 1, 1, -14, 1, -14, 1, 1, 0, -14, 1, 1, 1, -14, 1, -14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -14, 1, 1, 14, 1, -14, 1, -3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 8, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -14, 1, 1, 1, 1, 14, 14, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1 ,
+ // 8};
+ //MessageBox.Show(ComputeTimeAverageHoldingShortageLevel(bug).ToString());
+ hag.reset(pga.PopulationSize);
+ }
+
+ private void generateProblem(object sender, EventArgs e)
+ {
+ //start to port new tiapei city ubike information
+ //for taipei city is http://data.taipei/youbike
+ //for new taipei city http://data.ntpc.gov.tw/od/data/api/54DDDC93-589C-4858-9C95-18B2046CC1FC;jsessionid=F0ED2396EB17812173852C41E55F1906?$format=json
+ //for kaohsiung city http://www.c-bike.com.tw/xml/stationlistopendata.aspx
+ HttpWebRequest request = null;
+ if (comboBox1.SelectedIndex == 2)
+ {
+ request = (WebRequest.Create(@"http://www.c-bike.com.tw/xml/stationlistopendata.aspx")) as HttpWebRequest;
+ }
+ else if(comboBox1.SelectedIndex == 0)
+ {
+ request = (WebRequest.Create(@"http://data.ntpc.gov.tw/od/data/api/54DDDC93-589C-4858-9C95-18B2046CC1FC;jsessionid=F0ED2396EB17812173852C41E55F1906?$format=json")) as HttpWebRequest;
+ }
+ else
+ {
+ request = (WebRequest.Create(@"http://data.taipei/youbike")) as HttpWebRequest;
+ }
+ HttpWebResponse response = request.GetResponse() as HttpWebResponse;
+ string jsonString = "";
+ if (comboBox1.SelectedIndex == 1)
+ {
+ GZipStream gz = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);
+ string jSon = new StreamReader(gz).ReadToEnd();
+ jSon = jSon.Replace("{\"retCode\":1,\"retVal\":", "");jSon = jSon.Replace("}}}", "}]");
+ jSon = jSon.Replace("{\"0001\":", "[");
+ for (int i = 0; i < 10; i++)
+ {
+ jSon = jSon.Replace("},\"" + "000" + i + "\":{", "},{");
+ }
+ for (int i = 10; i < 100; i++)
+ {
+ jSon = jSon.Replace("},\"" + "00" + i + "\":{", "},{");
+ }
+ for (int i = 100; i < 1000; i++)
+ {
+ jSon = jSon.Replace("},\"" + "0" + i + "\":{", "},{");
+ }
+ jsonString = jSon;
+ }
+ else
+ {
+ Stream ReceiveStream = response.GetResponseStream();
+ Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
+ // Pipe the stream to a higher level stream reader with the required encoding format.
+ StreamReader readStream = new StreamReader(ReceiveStream, encode);
+ jsonString = readStream.ReadToEnd().ToString();
+ }
+
+ if (comboBox1.SelectedIndex == 2)
+ {
+ jsonString = jsonString.Remove(0, 39);
+ jsonString = jsonString.Replace("", ""); jsonString = jsonString.Replace("", "");
+ XmlDocument doc = new XmlDocument();
+ doc.LoadXml(jsonString);
+ jsonString = JsonConvert.SerializeXmlNode(doc);
+ jsonString = jsonString.Remove(0,26); jsonString = jsonString.Replace("}}","");
+ }
+ List datas = JsonConvert.DeserializeObject>(jsonString);
+ //start to create benchmark and then svae it
+ saveFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
+ Troschuetz.Random.Distributions.Continuous.GammaDistribution gd = new Troschuetz.Random.Distributions.Continuous.GammaDistribution(.339523,.0404096418);
+ Troschuetz.Random.Distributions.Continuous.ChiSquareDistribution cd = new Troschuetz.Random.Distributions.Continuous.ChiSquareDistribution(3);
+ Troschuetz.Random.Distributions.Continuous.ChiSquareDistribution chidistr = new Troschuetz.Random.Distributions.Continuous.ChiSquareDistribution(20);
+ if (saveFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ FileStream file = new FileStream(saveFileDialog.FileName, FileMode.Create);
+ StreamWriter sw = new StreamWriter(file);
+ // Add some text to the file.
+ sw.WriteLine("Generate NewTaipeiCity Benchmark");
+ int allstations = datas.Count;
+ double[] rate = new double[allstations];
+ double[] lat = new double[allstations + 1];
+ double[] lng = new double[allstations + 1];
+ double[,] dm = new double[allstations , allstations];
+ double[] dtv = new double[allstations];
+ int[] stationcapacity = new int[allstations];
+ int[] initialg = new int[allstations];
+ Console.WriteLine("==========================");
+ int count = 0;
+ if (comboBox1.SelectedIndex == 2)
+ {
+ foreach (var obj in datas)
+ {
+ stationcapacity[count] = datas[count].StationNums1 + datas[count].StationNums2;
+ initialg[count] = datas[count].StationNums1;
+ lng[count + 1] = datas[count].StationLon;
+ lat[count + 1] = datas[count].StationLat;
+ count++;
+ }
+ }
+ else
+ {
+ foreach (var obj in datas)
+ {
+ stationcapacity[count] = datas[count].tot;
+ initialg[count] = datas[count].sbi;
+ lng[count + 1] = datas[count].lng;
+ lat[count + 1] = datas[count].lat;
+ count++;
+ }
+ }
+ sw.WriteLine(allstations);
+ sw.WriteLine(textBoxGPT.Text);
+ sw.WriteLine(textBoxGTC.Text);
+ sw.WriteLine(textBoxGTS.Text);
+ sw.WriteLine(textBoxGPDT.Text);
+ //int upper = Convert.ToInt32(100 * Convert.ToDouble(textBoxMean.Text));
+ //int lower = Convert.ToInt32(100 * Convert.ToDouble(textBoxSTD.Text));
+ string initialgds = "";string stationc = "";string srate = "";
+ string slatlng = "";
+ if(comboBox1.SelectedIndex == 0)
+ {
+ lng[0] = 121.486143;
+ lat[0] = 25.018451;
+ }
+ else if(comboBox1.SelectedIndex == 1)
+ {
+ lng[0] = 121.58063199999992;
+ lat[0] = 25.049755;
+ }
+ else
+ {
+ lng[0] = 120.337010;
+ lat[0] = 22.651777;
+ }
+
+ //lat[i + 1] = NormalRandom(25.05425, .032676);
+
+ //lat[0] = 24.9863 + rnd.NextDouble() * .5;
+ //lat[0] = NormalRandom(25.05425, .032676);
+ //lng[0] = NormalRandom(121.5432, .031571);
+ slatlng = (lat[0] + "," + lng[0] + ",");
+
+ for (int i = 0; i < allstations; i++)
+ {
+ //for gamma distr we must maintain its skewness at 3.432379 and std 14.41948 so alpha must be 0.339523 beta = .0404096418
+ if(rnd.Next(0,2)%2 == 0)
+ {
+ rate[i] = NormalRandom(Convert.ToDouble(textBoxMean.Text),Convert.ToDouble(textBoxSTD.Text));
+ }
+ else
+ {
+ rate[i] = NormalRandom(Convert.ToDouble(textBoxMean.Text), Convert.ToDouble(textBoxSTD.Text))* -1;
+ }
+ }
+ for(int r = 0; r < allstations; r++)
+ {
+ dtv[r] = distanceHaversine(lat[0], lng[0], lat[r + 1], lng[r + 1]);
+ for (int c = 0; c < allstations; c++)
+ {
+ dm[r, c] = distanceHaversine(lat[r+1], lng[r+1], lat[c+1], lng[c+1]);
+ }
+ }
+ //start build string
+ string DM = ""; string DTV = "";
+ for(int a = 0; a < allstations; a++)
+ {
+
+ if (a == allstations - 1)
+ {
+ initialgds += initialg[a];
+ stationc += stationcapacity[a];
+ srate += rate[a];
+ DTV += dtv[a];
+ slatlng += (lat[a+1] + "," + lng[a+1]);
+ }
+ else
+ {
+ initialgds += (initialg[a] + ",");
+ stationc += (stationcapacity[a] + ",");
+ srate += (rate[a] + ",");
+ DTV += (dtv[a] + ",");
+ slatlng += (lat[a + 1] + "," + lng[a + 1] + ",");
+ }
+
+ for(int b = 0; b < allstations; b++)
+ {
+
+ if (a == allstations - 1 && b == allstations - 1)
+ {
+ DM += dm[a, b];
+ }
+ else
+ {
+ DM += (dm[a, b] + ",");
+ }
+ }
+
+ }
+ sw.WriteLine(initialgds);
+ // Arbitrary objects can also be written to the file.
+ sw.WriteLine(stationc);
+ sw.WriteLine(srate);
+ sw.WriteLine(DM);
+ sw.WriteLine(DTV);
+ sw.WriteLine(slatlng);
+ //清空緩衝區
+ sw.Flush();
+ //關閉流
+ sw.Close();
+ file.Close();
+ MessageBox.Show("BenchMark Created!");
+ }
+ }
+
+ private bool check(double[,] m,int n)
+ { bool flag = false;
+ for (int i = 0; i < totalStation; i++)
+ {
+ if (m[n, i] != 0) { flag = true; break; }
+ }
+ return flag;
+ }
+ // Functions of Haversine
+ private static Double rad2deg(Double rad)
+ {
+ return (rad / Math.PI * 180.0);
+ }
+
+ private static Double deg2rad(Double deg)
+ {
+ return (deg * Math.PI / 180.0);
+ }
+ public double distanceHaversine(double latitude1, double longitude1, double latitude2, double longitude2)
+ {
+ double theta = longitude1 - longitude2;
+ double dist = Math.Sin(deg2rad(latitude1)) * Math.Sin(deg2rad(latitude2)) + Math.Cos(deg2rad(latitude1)) * Math.Cos(deg2rad(latitude2)) * Math.Cos(deg2rad(theta));
+ dist = Math.Acos(dist);
+ dist = rad2deg(dist);
+ dist = dist * 60 * 1.1515;
+ dist = dist * 1.609344;
+ return (dist);
+ }
+ //generate normal random number generator
+ private double NormalRandom(double mean , double stdDev)
+ {
+ Random rand = new Random(); //reuse this if you are generating many
+ double u1 = 1.0 - rand.NextDouble(); //uniform(0,1] random doubles
+ double u2 = 1.0 - rand.NextDouble();
+ double randStdNormal = Math.Sqrt(-2.0 * Math.Log(u1)) *
+ Math.Sin(2.0 * Math.PI * u2); //random normal(0,1)
+
+ return mean + stdDev * randStdNormal; //random normal(mean,stdDev^2)
+ }
+ private List Greedy(int last)
+ {
+ List seq = new List();
+ double min = double.MaxValue; int next = -1;
+ double[,] d = new double[totalStation, totalStation];
+ //seq.Add(0); //must begin at 0
+ for (int a = 0; a < totalStation; a++)
+ {
+ for (int b = 0; b < totalStation; b++)
+ {
+ d[a, b] = distanceMatrix[a, b];
+ }
+ }
+ seq.Add(last);
+ do
+ {
+ min = double.MaxValue;
+ for (int i = 0; i < totalStation; i++)
+ {
+ if (d[last, i] != 0 && min > d[last, i])
+ {
+ min = d[last, i]; next = i;
+ }
+ }
+ for (int j = 0; j < totalStation; j++)
+ {
+ d[j, last] = 0;
+ }
+ seq.Add(next);
+ last = next;
+ } while (check(d, next));
+ return seq;
+ }
+
+ private void NBS(object sender, EventArgs e)
+ {
+ //int[] ans = new int[] {62, 110, 244, 52, 46, 99, 71, 58, 75, 98, 78, 217, 161, 34, 33, 51, 235, 172, 120, 252, 174, 226, 239, 184, 48, 84, 86, 37, 131, 44, 60, 65, 103, 97, 93, 68,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,35,36,38,39,40,41,42,43,45,47,49,50,53,54,55,56,57,59,61,63,64,66,67,69,70,72,73,74,76,77,79,80,81,82,83,85,87,88,89,90,91,92,94,95,96,100,101,102,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,173,175,176,177,178,179,180,181,182,183,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,218,219,220,221,222,223,224,225,227,228,229,230,231,232,233,234,236,237,238,240,241,242,243,245,246,247,248,249,250,251,253,254,255,
+ // 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-14,0,0,0,0,0,0,0,0,0,-8,0,29,0,27,0,0,-18,2,0,0,0,0,0,-27,0,-12,0,4,0,0,4,0,0,-21,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15,0,0,0,-18,25,1,0,0,0,16,0,0,0,0,0,0,-11,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,1,0,0,0,-24,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0
+ // ,16,0
+ //};
+ //initial good , start time
+ //int[] ans = new int[]
+ //{137, 236, 15, 12, 149, 87, 8, 18, 9, 11, 162, 220, 29, 246, 125, 31, 242, 74, 70, 10, 186, 1, 248, 32, 230, 171, 254, 173, 17, 54, 51, 235, 172, 33, 34, 59, 50, 13, 85, 240, 175, 120, 252, 174, 226, 239, 184, 48, 62, 110, 244, 52, 46, 100, 99, 71, 193, 57, 114, 159, 98, 78,0,2,3,4,5,6,7,14,16,19,20,21,22,23,24,25,26,27,28,30,35,36,37,38,39,40,41,42,43,44,45,47,49,53,55,56,58,60,61,63,64,65,66,67,68,69,72,73,75,76,77,79,80,81,82,83,84,86,88,89,90,91,92,93,94,95,96,97,101,102,103,104,105,106,107,108,109,111,112,113,115,116,117,118,119,121,122,123,124,126,127,128,129,130,131,132,133,134,135,136,138,139,140,141,142,143,144,145,146,147,148,150,151,152,153,154,155,156,157,158,160,161,163,164,165,166,167,168,169,170,176,177,178,179,180,181,182,183,185,187,188,189,190,191,192,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,221,222,223,224,225,227,228,229,231,232,233,234,237,238,241,243,245,247,249,250,251,253,255,
+ //0,5,0,0,0,0,0,0,14,-2,-6,-5,-2,0,0,-10,0,-8,-5,0,0,0,0,0,0,0,0,0,0,0,0,-6,5,0,-12,0,0,0,0,0,0,0,0,0,0,0,2,0,12,0,0,-1,12,0,-5,0,0,-4,0,-2,0,0,0,0,0,0,0,0,0,0,2,0,0,0,-8,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,0,0,0,-2,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,0,0,0,0,0,0,0,0,-2,0,0,0,0,0,0,0,0,14,12,0,7,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,0,0,-4,0,0,0,-5,0,0,0,0,2,0,0,0,-10,0,0,14,0,-2,0,0,0,-7,0,0,0,7,0,0,0,
+ //14,0 };
+ int count = 0;
+ //採用改良式 heuristic emergent service ㄉ作法
+ double [,]FromTo = new double[stations.Length, stations.Length];
+ for (int i = 0; i < stations.Length; i++)
+ {
+ for (int j = 0; j < stations.Length; j++)
+ {
+ if (stations[j].RatePerCapacity != 0)
+ {
+ //可以改進ㄉ地方
+ FromTo[i, j] = distanceMatrix[i, j] +0.01* (1/ stations[j].RatePerCapacity);
+ }
+ else
+ {
+ FromTo[i, j] = distanceMatrix[i, j] * 18000;
+ }
+ }
+ }
+ hag = new HybridACOGA(stations.Length, OptimizationType.Min, ComputeTimeAverageHoldingShortageLevel, FromTo, stations, truckcapacity);
+ if (count == 0) { hag.reset(pga.PopulationSize); count++; }
+ while(count <= pga.IterationLimit)
+ {
+ hag.antsConstructSolutions();
+ hag.ComputeObjectiveValues();
+ hag.updatePheromone();
+ count++;
+ }
+ double unsatisfiedAmount = Math.Round(hag.SFB, 2);
+ labelBO.Text = "BestObjective " + Convert.ToString(unsatisfiedAmount);
+ labelBO.Text.ToString();
+ richTextBox.Text = "繞站順序: depot ";
+ for (int i = 0; i < soFarfinishStation + 1; i++)
+ {
+ //我忘記解碼fuck fuck fuck fuck fuck fuck !!
+ // richTextBox.Text += pga.SoFarTheBestSolution[i].ToString()+" ";
+ richTextBox.Text += BestRouting[i].ToString() + ",";
+ }
+ if (soFarfinishStation == totalStation - 1)
+ {
+ richTextBox.Text += "depot";
+ }
+ double totalPandD = 0;
+ richTextBox.Text += "\n" + "pickup & delivery amount: ";
+ for (int i = 0; i ";
+ for (int i = 0; i < soFarfinishStation; i++)
+ {
+ totalDistance += distanceMatrix[BestRouting[i], BestRouting[i + 1]];
+ //dist += distanceMatrix[BestRouting[i], BestRouting[i + 1]].ToString() + "->";
+ }
+ //全部跑完要回去depot
+ if (soFarfinishStation == totalStation - 1)
+ {
+ totalDistance += startTOvertex[BestRouting[soFarfinishStation]];
+ //dist += startTOvertex[BestRouting[soFarfinishStation]].ToString() + "->";
+ }
+ richTextBox.Text += "\n" + "*******performance*******";
+ richTextBox.Text += "\n" + "Total pickup & delivery : " + (totalPandD + hag.SoFarTheBestSoluiton[totalStation * 2]);
+ richTextBox.Text += "\n" + "total distance :" + totalDistance;
+ richTextBox.Text += "\n" + "unsatisfication amount :" + unsatisfiedAmount;
+ richTextBox.Text += "\n" + "without action :" + NotDoAnything;
+ richTextBox.Text += "\n" + "improvement rate :" + Math.Round(1 - unsatisfiedAmount / 1349.4, 2);
+ //richTextBox.AppendText("routing distance "+dist);
+
+
+ labelMax.Text = "Max :" + NotDoAnything.ToString();
+ //richTextBox.Text += "\n" + "********performance********";
+ //richTextBox.Text += "\n" + "unsatisfied amount :" + ComputeTimeAverageHoldingShortageLevel(ans);
+ //richTextBox.Text += ("\n" + "total distance is " + totalDistance);
+ //richTextBox.Text += "\n" + "Total pickup & delivery : " + totalPandD;
+
+ }
+
+ private void saveToExcel(object sender, EventArgs e)
+ {
+ SaveFileDialog save = new SaveFileDialog();
+
+ Excel.Application excelApp = new Excel.Application();
+ Excel.Workbook excelWB;
+ Excel.Worksheet excelWS;
+ //Excel.Range oRng;
+ saveFileDialog.Filter = "Excel活頁簿(*.xlsx)|*.xlsx";
+ if (save.ShowDialog() == DialogResult.OK)
+ {
+ string fileName = save.FileName;
+ excelApp.Workbooks.Add();
+ excelWB = excelApp.Workbooks[1];
+ excelWS = excelWB.Worksheets[1];
+
+ //excelWS.Cells[1, 1] = "truck start time";
+ excelWS.Cells[1, 1] = "truck initial goods";
+ excelWS.Cells[2, 1] = "routing sequence";
+ excelWS.Cells[3, 1] = "P&D amount";
+ excelWS.Cells[4, 1] = "withoutaction";
+
+ excelWS.Cells[6, 1] = "total distance";
+ excelWS.Cells[7, 1] = "total P&D";
+ excelWS.Cells[8, 1] = "unsatisfied amount";
+ excelWS.Cells[9, 1] = "improvement rate";
+
+
+
+ //excelWS.Cells[1, 2] = pga.SoFarTheBestSolution[totalStation*2+1].ToString("0.00");
+ excelWS.Cells[1, 2] = pga.SoFarTheBestSolution[totalStation * 2].ToString("0.00");
+ string r = "", pd = "";double totalPandD = 0.0;
+ for (int i = 0; i < soFarfinishStation + 1; i++)
+ {
+ r += BestRouting[i].ToString() + ",";
+ pd += PandD[i] + ",";
+ //excelWS.Cells[3, 2 + i] = BestRouting[i];
+ //excelWS.Cells[4, 2 + i] = PandD[i];
+ totalPandD += Math.Abs(PandD[i]);
+ }
+ excelWS.Cells[2, 2] = r;
+ excelWS.Cells[3, 2] = pd;
+ excelWS.Cells[4, 2] = NotDoAnything.ToString("0.00");
+ excelWS.Cells[6, 2] = totalDistance.ToString("0.00");
+ excelWS.Cells[7, 2] = (totalPandD+ pga.SoFarTheBestSolution[totalStation * 2]).ToString();
+ excelWS.Cells[8, 2] = Math.Round(pga.SoFarTheBestObjective, 2).ToString();
+ excelWS.Cells[9, 2] = Math.Round(1 - pga.SoFarTheBestObjective/NotDoAnything, 2).ToString("0.00");
+
+ excelWB.SaveAs(fileName);
+ excelWB.Close();
+ }
+
+ excelApp.Quit();
+ //釋放Excel資源
+ System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
+ GC.Collect();
+ }
+
+ private void DrwaRoutes(object sender, PaintEventArgs e)
+ {
+ if (stations != null)
+ {
+ Station[] ss = new Station[totalStation];
+ //從0開始出發每次都找最短距離作為他的下一站
+ stations.CopyTo(ss,0);
+ Array.Sort(ss);
+ Array.Reverse(ss);
+ int [] s = new int[Convert.ToInt32( totalStation * 0.2)];
+ for(int i = 0; i < s.Length; i++)
+ {
+ s[i] = ss[i].StationID;
+ }
+
+ w = e.ClipRectangle.Width;
+ h = e.ClipRectangle.Height;
+
+ xmin = longitude.Min();
+ W = longitude.Max() - xmin; //最大經度與最小經度的差
+
+ ymax = latitude.Max();
+ H = ymax - latitude.Min(); //最大緯度與最小緯度的差
+
+ scale = w / W * 0.8; //算出width的scale
+ scale2 = h / H * 0.8; //算出hight的scale
+ //for taipei
+ //xmiddle = longitude[totalStation / 2]; //尚待修正
+ //ymiddle = latitude[17]; //尚待修正代表站點17的latitude當作中間值
+ //xmiddle = longitude[181]; //尚待修正
+ //ymiddle = latitude[27]; //尚待修正代表站點17的latitude當作中間值
+
+ Rectangle rec = new Rectangle(0, 0, 10, 10); //先初始化,x與y之後使用者自訂 裡面的數字即是圓的大小
+ Rectangle rec2 = new Rectangle(0, 0, 0, 0);
+ //繪製站點位置與名稱於UI
+ for (int i = 0; i < longitude.Length; i++)
+ {
+ if (i == 0)
+ {
+ //繪製站點位置圓圈線段
+ rec.X = getx(longitude[i]);
+ rec.Y = gety(latitude[i]);
+
+ e.Graphics.FillRectangle(Brushes.Red, rec);
+
+ //繪製站點名稱字樣
+ SizeF sz = e.Graphics.MeasureString("Depot", myfont);
+ rec2.Width = (int)sz.Width;
+ rec2.Height = (int)sz.Height;
+
+ rec2.X = (int)(getx(longitude[i]) - (rec2.Width) * 0.33);
+ rec2.Y = gety(latitude[i]) + 7;
+
+ e.Graphics.DrawString("Depot", myfont, Brushes.Red, rec2.Location);
+ }
+ else
+ {
+ //繪製站點位置圓圈線段
+ rec.X = getx(longitude[i]);
+ rec.Y = gety(latitude[i]);
+ if(stations[i-1].Rate < 0)
+ {
+ e.Graphics.DrawEllipse(Pens.Green, rec);
+ if(s.Contains(stations[i- 1].StationID))
+ {
+ e.Graphics.FillEllipse(Brushes.Green, rec);
+ }
+ }
+ else if(stations[i-1].Rate > 0)
+ {
+ e.Graphics.DrawEllipse(Pens.Blue, rec);
+ if (s.Contains( stations[i - 1].StationID))
+ {
+ e.Graphics.FillEllipse(Brushes.Blue, rec);
+ }
+ }
+ else
+ {
+ e.Graphics.DrawEllipse(Pens.Brown, rec);
+ }
+
+ //繪製站點名稱字樣
+ SizeF sz = e.Graphics.MeasureString(stations[i-1].StationID.ToString(), myfont);
+ rec2.Width = (int)sz.Width;
+ rec2.Height = (int)sz.Height;
+ //for youbike taipei city
+ rec2.X = (int)(getx(longitude[i]) - (rec2.Width) * 0.2);
+ rec2.Y = gety(latitude[i]) + 8;
+
+ e.Graphics.DrawString(stations[i-1].StationID.ToString(), myfont, Brushes.Black, rec2.Location);
+ }
+
+ }
+
+ mypen.Color = Color.FromArgb(0, 0, 0);
+
+ //繪製卡車移動路徑
+ e.Graphics.DrawLine(mypen, getx(longitude[0]) + 7, gety(latitude[0]) + 7, getx(longitude[BestRouting[0]+1]) + 7, gety(latitude[BestRouting[0]+1]) + 7); //畫出depot到第一站的路徑
+ for (int i = 0; i < soFarfinishStation; i++)
+ {
+ e.Graphics.DrawLine(mypen, getx(longitude[BestRouting[i]+1]) + 7, gety(latitude[BestRouting[i]+1]) + 7,
+ getx(longitude[BestRouting[i + 1]+1]) + 7, gety(latitude[BestRouting[i + 1]+1]) + 7); //畫出站與站間的路徑
+ e.Graphics.DrawLine(mypen, getx(longitude[BestRouting[i]+1]) + 7, gety(latitude[BestRouting[i]+1]) + 7,
+ getx(longitude[BestRouting[i + 1]+1]) + 7, gety(latitude[BestRouting[i + 1]+1]) + 7); //畫出最後一站的路徑
+
+ }
+ }
+ }
+
+ int getx(double x)
+ {
+ int temp = 0;
+ if (x == xmiddle)
+ temp = w / 2;
+ else if (x < xmiddle)
+ temp = (int)(w / 2 - (xmiddle - x) * scale);
+ else
+ temp = (int)(w / 2 + (x - xmiddle) * scale);
+
+ return temp;
+ }
+
+ int gety(double y)
+ {
+ int temp = 0;
+ if (y == ymiddle)
+ temp = (int)(h * 0.5);
+ else if (y > ymiddle) //若緯度較高,則繪製較上方位置(y減少)
+ temp = (int)(h * 0.5 - (y - ymiddle) * scale2);
+ else //若緯度較低,則繪製較下方位置(y增加)
+ temp = (int)(h * 0.5 + (ymiddle - y) * scale2);
+
+ return temp;
+ }
+ }
+}
diff --git a/BikeSharingSystem/MainForm.resx b/BikeSharingSystem/MainForm.resx
new file mode 100644
index 0000000..ab0d04d
--- /dev/null
+++ b/BikeSharingSystem/MainForm.resx
@@ -0,0 +1,5429 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 146, 17
+
+
+ 278, 17
+
+
+ 410, 17
+
+
+ 17, 17
+
+
+
+
+ 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
+ /0ok7R/g/wGLJXFFGjgZ5AAAAABJRU5ErkJggg==
+
+
+
+
+ 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
+ oiaVvhHdAAAAAElFTkSuQmCC
+
+
+
+ 146, 0
+
+
+ 146, 0
+
+
+ 48
+
+
+
+ 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
+ KVoQILa/GoipCCkpnUWzfg5miGOiLTHdoMGz/iCmqO7uWFK6hrtooVUfqWF0cN+gigtxaekILT8nspPw
+ o44lpGs4hZSW++UwgfsmTR4I3qYFy30LO3GjXVMUhZdwZkh1/HLZjPtGsRyIUqdlXB8YqY6/linc6F2q
+ dncB5+RUkjupGM4Y7pstkL/9rJcu4Np8q5f6IezDRT+tevCmajqFm0nadEHnqDKN+5a5rVFXcG07tX+M
+ iRSOQLHYhbtcYx/O+ynlDHwZOAH8EPgBzglEtI8u8CiuXe3GbRlScQvXpn6Ma1cnEr4rmJIHgNWM4Tz4
+ duEuiNiGG9m7xnxu4TwHF4EzwM+BD3DeX2L02Ibbf+/Ata8url1ZJ5tFXLv6EPgI19nP4Npb0TRlABhG
+ F+fa2x/N+39/jHPLhTtunVdrlk00k83ccR8HZ26cwrWfmyv/rf/3Ys2yCSGEEEIIIYQQQgghhBBCCCGE
+ EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGE
+ EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBDCm/8HVDXcmPANxvoAAAAASUVORK5CYIIoAAAAgAAAAAAB
+ AAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAAKAAAAFMAAAB3AAAAkgAAAJ8AAACqAAAAoAAAAJcAAACCAAAAYQAAADcAAAAKAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAKAAAANwAAAGEAAACCAAAAlwAAAKAAAACqAAAAnwAAAJIAAAB3AAAAUwAAACgAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAABhAAAArQAAAO4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAADFAAAAewAAACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACcAAAB7AAAAxQAAAPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO0AAACtAAAAYQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAClAAAA+AAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAMUAAABaAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAFoAAADFAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA9wAAAKQAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAC8AAAC3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADbAAAAXAAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAAFwAAADbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC3AAAALgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACSAAAA/AAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxQAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAADGAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAAkgAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAA1AAAA3AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6QAA
+ AMYAAACzAAAArwAAAK8AAADAAAAA2wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA+AAAAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABuAAAA+AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD7AAAA2wAA
+ AMAAAACvAAAArwAAALMAAADGAAAA6QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA3AAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYQAAAPgAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAOUAAACUAAAATQAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
+ ADkAAAB7AAAAzAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKcAAAAIAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAApwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAMwAAAB7AAAAOAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAA
+ AE4AAACUAAAA5QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+AAAAF8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AH4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAABNAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAJUAAAD2AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMQAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAA
+ AMQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA9gAAAJUAAAApAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAATQAAAL8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ ANEAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAACiAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AMgAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAADIAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA
+ AKIAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAADRAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAAB8AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABEAAAA5AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALwAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAvQAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOQAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAB9AAAA+wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADrAAAAPwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAwQAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADAAAAAFAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA6wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/AAAAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA6gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA4wAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAGAAAArQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAArAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAlAAAA4wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA6gAAABgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOYAAAAjAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAsgAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA7gAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAALIAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjAAAA5gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD2AAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAywAAAP8AAAD/AAAA/wAAAP8AAAD/AAAApQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAADKAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA9gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAATwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAANsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAGUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAfAAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD+AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAANgAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAB8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABlAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADbAAAABAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAC1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC2AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABfAAAAAAAAAAAAAAAAAAAAAQAAANUAAAD/AAAA/wAAAP8AAAD/AAAA+QAAACEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP4AAAArAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAxAAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAACEAAAD5AAAA/wAAAP8AAAD/AAAA/wAAANUAAAABAAAAAAAAAAAAAAA+AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAACPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAD0AAAAAAAAAAAAAAJkAAAD/AAAA/wAAAP8AAAD/AAAA+wAAAB4AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMUAAAD/AAAA/wAAAP8AAAD/AAAA6QAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAOoAAAD/AAAA/wAAAP8AAAD/AAAAxQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAAPwAAAD/AAAA/wAAAP8AAAD/AAAAlwAAAAAAAAACAAAA6QAA
+ AP8AAAD/AAAA/wAAAP8AAACyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXQAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsgAA
+ AP8AAAD/AAAA/wAAAP8AAADpAAAAAgAAADAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA9wAAAP8AAAD/AAAA/wAAAP8AAACFAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUAAAD/AAAA/wAAAP8AAAD/AAAA9wAAAAwAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAwAAAAawAA
+ AP8AAAD/AAAA/wAAAP8AAAD8AAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAC5AAAA/wAAAP8AAAD/AAAA/wAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwQAA
+ AP8AAAD/AAAA/wAAAP8AAAC5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ABEAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAGsAAACcAAAA/wAAAP8AAAD/AAAA/wAAANAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsAAAD/AAAA/wAAAP8AAAD/AAAA8AAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADxAAAA/wAAAP8AAAD/AAAA/wAAAHoAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANEAAAD/AAAA/wAAAP8AAAD/AAAAnAAA
+ AMMAAAD/AAAA/wAAAP8AAAD/AAAAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAASwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAnwAAAP8AAAD/AAAA/wAAAP8AAADCAAAA4AAAAP8AAAD/AAAA/wAAAP8AAAB7AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAnAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAEQAAAIEAAACiAAAAXgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7AAAA/wAAAP8AAAD/AAAA/wAA
+ AN8AAAD0AAAA/wAAAP8AAAD/AAAA/wAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAA8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADOAAAA/wAAAP8AAAD/AAAAggAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAGQAAAD/AAAA/wAAAP8AAAD/AAAA8gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAVwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAUwAAAP8AAAD/AAAA/wAAAP8AAADuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAALAAAAD4AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPUAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1AAAA/wAAAP8AAAD/AAAA/wAA
+ AO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABYAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAA/wAAAP8AAAD/AAAA/wAA
+ AGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEkAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAGwAAAPwAAAD/AAAA/wAAAP8AAAD/AAAAnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAD/AAAA/wAA
+ AP8AAAD/AAAA8gAAAOAAAAD/AAAA/wAAAP8AAAD/AAAAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOkAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAANgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAP8AAAD/AAAA/wAAAP8AAADfAAAAwwAAAP8AAAD/AAAA/wAA
+ AP8AAACfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAA1gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQAAANkAAAD/AAAA/wAAAP8AAAD/AAAA2gAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACfAAAA/wAA
+ AP8AAAD/AAAA/wAAAMIAAACcAAAA/wAAAP8AAAD/AAAA/wAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+QAAACMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADxAAAA/wAAAP8AAAD/AAAA/wAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANEAAAD/AAAA/wAAAP8AAAD/AAAAnAAAAGwAAAD/AAAA/wAA
+ AP8AAAD/AAAA/AAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD0AAAA/wAAAP8AAAD/AAAA/wAAAOQAAABPAAAATwAA
+ AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAA1gAA
+ AP8AAAD/AAAA/wAAAP8AAADOAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAA2QAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAAAD/AAAA/wAA
+ AP8AAAD/AAAAuQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAJ0AAAD/AAAA/wAAAP8AAAD/AAAA/AAAABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAA/AAA
+ AP8AAAD/AAAA/wAAAP8AAABrAAAAMAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAWAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AJcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAIUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAEQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAhgAAAP8AAAD/AAAA/wAAAP8AAAD3AAAADAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA8gAAAP8AAAD/AAAA/wAA
+ AP8AAAC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAADAAAAACAAAA6QAA
+ AP8AAAD/AAAA/wAAAP8AAACyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAogAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA0gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADRAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAGAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsgAA
+ AP8AAAD/AAAA/wAAAP8AAADpAAAAAgAAAAAAAACaAAAA/wAAAP8AAAD/AAAA/wAAAPsAAAAeAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAvAAAAP8AAAD/AAAA/wAAAP8AAAD5AAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADFAAAA/wAAAP8AAAD/AAAA/wAAAOkAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAGgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL0AAAC9AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABmAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADqAAAA/wAAAP8AAAD/AAAA/wAAAMUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAP8AAAD/AAAA/wAA
+ AP8AAADsAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAJgAAAAAAAAAAAAA
+ AD4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA6gAAAP8AAAD/AAAA/wAA
+ AP8AAAD8AAAALQAAAC0AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAOkAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AJIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAACQAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAJEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAPQAAAAAAAAAAAAAAAQAAANUAAAD/AAAA/wAAAP8AAAD/AAAA+AAA
+ ACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAADeAAAA/wAAAP8AAAD/AAAA/wAAAOYAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADFAAAA/wAAAP8AAAD/AAAA/wAAAP4AAAArAAAAAAAA
+ AAAAAAAAAAAAAAAAAI0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJgAAAAAAAAAAAAAAJgAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAAAAAAAAAAAALAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAxAAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAD5AAAA/wAAAP8AAAD/AAAA/wAAANUAAAABAAAAAAAA
+ AAAAAAAAAAAAYQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAtQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAFkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAtgAAAAAAAAAAAAAAAAAAAAAAAAAlAAAA+QAAAP8AAAD/AAAA/wAA
+ AP8AAADwAAAAFQAAAAAAAAAAAAAAFQAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA+QAAACMAAAAAAAAAAAAA
+ AAAAAAAAAAAAtwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAMAAADjAAAA/wAAAP8AAAD/AAAA/wAAAM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtQAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA2wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAPQAAAD/AAAA/wAAAP8AAAD/AAAAxwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAADvAAAA/wAAAP8AAAD/AAAA/wAAAP4AAAA2AAAAAAAA
+ AAAAAAAAAAAAAAAAALEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAdAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAAAAAAAAAAAAAAAAAAAAAAA2AAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAADvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARwAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAANsAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABQAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD2AAAAMgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlwAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAywAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAApgAAAAAAAAAAAAAAAAAAAAAAAABEAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADbAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQQAA
+ AAAAAAAAAAAAAAAAAAAAAACmAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADKAAAACgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACpAAAA/wAAAP8AAAD/AAAA/wAAAPgAAAASAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA9gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAADmAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqAAAA/gAAAP8AAAD/AAAA/wAAAP8AAACiAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAALIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAXAAAAAAAA
+ AAAAAAAAAAAABAAAANIAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADRAAAAAwAAAAAAAAAAAAAAAAAAABcAAADvAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAACxAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAPgAAAD/AAAA/wAA
+ AP8AAAD/AAAAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAOYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAALEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAADqAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADjAAAAJAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAC8AAAA/wAAAP8AAAD/AAAA/wAAAPkAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAYAAACsAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAVwAAAAAAAAAAAAAAAAAAAAAAAABoAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAC9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABmAAAAAAAAAAAAAAAAAAAAAAAAAFcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACrAAAABgAA
+ AAAAAAAAAAAAAAAAAAAAAABsAAAA/wAAAP8AAAD/AAAA/wAAAP8AAABIAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUAAADjAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAADqAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AEQAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADrAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AH4AAAAAAAAAAAAAAAAAAAAVAAAAwAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJYAAAAAAAAAAAAA
+ AAAAAAAAAAAAEAAAAOoAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAC0AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAOkAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AJcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADAAAAAFQAAAAAAAAAAAAAAAAAAAM0AAAD/AAAA/wAA
+ AP8AAAD/AAAA5AAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAA/AAAA6wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAEQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD7AAAAfAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAgAAAN4AAAD/AAAA/wAAAP8AAAD/AAAA5gAAAAYAAAAAAAAARAAAAOQAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAC8AAAABgAAAAAAAAAAAAAAAAAAAAAAAACNAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAAAAAAAAAAAABgAAAL0AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADjAAAARAAAAAAAAAAvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAACFAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAfAAAAPsAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAIQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA0QAAAEEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcgAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAdAAAAKIAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAyAAAAA4AAAAAAAAAAAAA
+ AAAAAAAAAAAAJQAAAPkAAAD/AAAA/wAAAP8AAAD/AAAA8AAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA+QAAACMAAAAAAAAAAAAA
+ AAAAAAAAAAAADgAAAMgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAAoQAAAKQAAAD/AAAA/wAA
+ AP8AAAD/AAAA/gAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAQQAAANEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAgwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAABLAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAQAAAA9AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAMQAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAMUAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADCAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAATQAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGEAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADlAAAAlAAAAE0AAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACwAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACnAAAACAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAQwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2wAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIcAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAABNAAAAlAAA
+ AOUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPgAAABhAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ADUAAADcAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADnAAAAxgAA
+ ALMAAACvAAAArwAAAL8AAADbAAAA+wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD4AAAAbgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAADRAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADRAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AG4AAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAADbAAAAvwAA
+ AK8AAACvAAAAswAAAMYAAADoAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADcAAAANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAACSAAAA/QAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxgAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAZgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAADGAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAAkgAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAvAAAAtwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5gAA
+ AFwAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAADpAAAA/wAAAP8AAAD/AAAA/wAA
+ APwAAAAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAC0AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAOkAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAABcAAAA5AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAtwAA
+ AC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAA
+ AKUAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADmAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAigAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADZAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD4AAAApQAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAABhAAAArQAAAO4AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPoAAADcAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAD5AAAA/wAAAP8AAAD/AAAA/wAA
+ APAAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA+QAAACMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAOwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA4AAAAPoAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAACtAAAAYQAAABEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAACIAAAAdwAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACcAAABUAAAAeQAAAJIAAACfAAAAqwAAAKEAAACYAAAAgwAA
+ AGIAAAA4AAAACQAAABAAAAD0AAAA/wAAAP8AAAD/AAAA/wAAAMcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACdAAAA/wAA
+ AP8AAAD/AAAA/wAAAPwAAAAbAAAACQAAADgAAABiAAAAgwAAAJgAAAChAAAAqwAAAJ8AAACSAAAAdwAA
+ AFQAAAAnAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOAAAA/QAA
+ AP8AAAD/AAAA7QAAAGcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJcAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ ANsAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAPIAAAD/AAAA/wAAAP8AAAD/AAAAtwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAANUAAABXAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAKgAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAogAAAAAAAAAAAAAAAAAA
+ AAAAAAADAAAA0QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADRAAAAAwAAAAAAAAAAAAAAAAAAAAAAAABgAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAABVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzwAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADYAAAAbwAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAA
+ AP8AAAD/AAAA/wAAAP8AAAD5AAAAFwAAAAAAAAAAAAAAAAAAAGYAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AL0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAABmAAAAAAAAAAAAAAAAAAAAAAAAAMEAAAD/AAAA/wAAAP8AAAD/AAAA7AAAAAcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA+AAAALIAAABeAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAB9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACDAAAAAAAA
+ AAAAAAAPAAAA6QAAAP8AAAD/AAAA/wAAAP8AAAD8AAAALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAC0AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAOkAAAAPAAAAAAAAAAAAAAAkAAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAACSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABkAAAA7QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2wAA
+ AKYAAAB5AAAAUgAAADcAAAAhAAAAEgAAABAAAAAQAAAAFwAAACgAAABCAAAAYgAAAI0AAADBAAAA9QAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO4AAAAGAAAAAAAAAIoAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIoAAAAAAAAAAAAAAIQAAAD/AAAA/wAAAP8AAAD/AAAA/wAAADEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAAAmQAAAPsAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AFoAAAAjAAAA+QAAAP8AAAD/AAAA/wAAAP8AAADwAAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA+QAAACMAAAADAAAA4wAA
+ AP8AAAD/AAAA/wAAAP8AAADPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAJ8AAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAxwAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAEcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAG0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ABkAAAB/AAAA4wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADbAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAA2wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA1QAA
+ AP8AAAD/AAAA/wAAAP8AAAD4AAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAPAAAAJIAAADfAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAPcAAAC9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKsAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAXwAAAJIAAAC/AAAA6gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPoAAADXAAAArgAAAHoAAABDAAAACAAAAAAAAAC8AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC9AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAASQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAACIAAAAzAAAAPwAAAEcAAABBAAAAPwAAAC0AAAAYAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AMsAAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAA
+ AK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAA
+ AK8AAACvAAAArwAAAMsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOQAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AN4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcgAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAAlAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAQAAAA+AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACNAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABhAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAEAAABpAAAAyQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAK8AAACvAAAArwAA
+ AK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAA
+ AK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAA
+ APEAAAD/AAAA/wAAAP8AAAD/AAAA8wAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA/AAAAP8AAAD/AAAA/wAAAP8AAACeAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AHgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATwAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA2QAAAP8AAAD/AAAA/wAAAP8AAADaAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ADsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AE8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQAAAP8AAAD/AAAA/wAAAP8AAAD8AAAAGwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABCAAAA1QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD5AAAAsgAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAwAAADyAAAA/wAAAP8AAAD/AAAA/wAAALcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAPMAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAsgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAVQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABNAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADBAAAA/wAAAP8AAAD/AAAA/wAAAOwAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ ANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAP4AAAD/AAAA/wAAAP8AAAD/AAAAkgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAIwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADyAAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAACEAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAABPAAAATwAA
+ AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATQAA
+ ABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAOMAAAD/AAAA/wAAAP8AAAD/AAAA+gAA
+ AK8AAACvAAAArwAAAK8AAACvAAAArwAAAKsAAACAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABHAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADOAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABCAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAlQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA9wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADOAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAwAAAAlwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAAAK8AAACvAAAArwAA
+ AK8AAACsAAAAgQAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////8AB//////////gAP/////4AAD/////////AAAf////4AAAH/
+ //////+AAAB////4AAAAf//////+AAAAH///4AAAAD///////AAAAAf//8AAAAAf//////gAAAAD//+A
+ AfwAB//////gAD+AAf//AA//wAP/////wAP/8AD//gB///AB/////4AP//4Af/wA///8AP////8AP///
+ AD/4A////gD/////AH///8Af8Af///8Af////gD////gD/AP////gD////wB////8A/gH////8A////8
+ A/////gHwD/////gH///+Af////8A8B/////8B////gP/////gOAf/////AP///wD/////4BgP/////4
+ D///8B//////AYD//////Af//+A//////wEB//////wH///gP/////+AAf/////8B///4D//////gAH/
+ /////gf//+B//////4AD//////4H///gf//////AA//////+A///wH//////wAP//////gP//8B//+D/
+ /8AD//////4D///Af//A///AA///////A///wP//wP//wAP//wAAAAAAP8D//8D//8AD//8AAAAAAB/A
+ f/+A///AA///AAAAAAAPwH//gP//wAP//wAAAAAAD8B//wD//8AD//8AAAAAAAfgf/8B///AAf//AAAA
+ AAAH4H//Af//gAH//4D//AfAA+A//gP//4AB//+A//wHgAHgP/4D//+AgP//wH/8B4AB4D/+A///AYD/
+ /8B/+A8AAPAf/Af//wGAf//AP/APAYDwD/wH//4BwH//4D/wHgGAeA/4D//+A8A//+A/4B4DwHgH+A//
+ /APgH//wH8A8A8A8A/gP//gH8A//8B+AOAfgHAHwH//wD/AH//gPAHgP8B4A8B//4A/4A//4DgDwD/AP
+ AHAf/8Af/AD/+AQA8B/4DwAgP/8AP/4Af/wAAeAf+AeAAD/+AH//AA/8AAPgP/wHwAB/8AD//4AB/AAH
+ wD/8A+AAP4AB///AAAAAD4B//gHwAAAAA///4AAAAD+A//8B/AAAAAf///gAAAB/AP//AP4AAAAf///+
+ AAAA/wH//4D/AAAAf////4AAAP4B//+AfwAAAf///D/wAAD+A///wH8AAA////gP///AfAP//8A+A///
+ ///4A///wHgH///gHgP/////+AD//+A4D///8B4D//////gAH//AMA////AMB//////8AAAAABAf///4
+ DAf//////gAAAAAAH///+AAP//////+AAAAAAD////wAD///////4AAAAAA////8AA////////gAAAAA
+ f////gAf////////gAAEAP////8AH/////////wA/AAAAAAAAB////////////wAAAAAAAA/////////
+ ///+AAAAAAAAP////////////gAAAAAAAH////////////8AAAAAAAB/////////////AAAAAAAAf///
+ /////////8D/////gP/////////////A/////4D/////////////wP////8A/////////////8D/////
+ Af/////////////A/////wH////////////gAAD///4D////////////wAAA///+A////////////8AA
+ AP///gP////////////AAAD///wH////////////4AAA///8B/////////////AAAf//+AAH////////
+ //////////gAA//////////////////4AAP/////////////////+AAD//////////////////gAA///
+ ///////////////8AAf/////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////KAAAAGAA
+ AADAAAAAAQAgAAAAAACAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAJAAAACQAA
+ AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAkAAAAJAAAABQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAOQAA
+ AHsAAACvAAAA1AAAAOoAAADxAAAA8QAAAOkAAADVAAAArwAAAHsAAAA5AAAABQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAA5AAAAewAAAK8AAADVAAAA6QAA
+ APEAAADxAAAA6gAAANQAAACvAAAAegAAADkAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAHQAAAIkAAADjAAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA4wAAAIYAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAhgAA
+ AOMAAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAADjAAAAiAAA
+ AB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAACWAAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD4AAAAlgAAABUAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAFgAAAJYAAAD4AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAACWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAOoAAAD+AAAA/wAA
+ AP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD2AAAA9gAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAOoAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZAAAA6gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAPcAAAD2AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA6gAA
+ AFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAUAAACWAAAA/QAAAP8AAAD+AAAA/wAAAP4AAAD+AAAA8AAAAKUAAABjAAAANAAAABMAAAALAAAACwAA
+ ABQAAAAzAAAAYwAAAKYAAADwAAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD9AAAAlwAAAAQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAJcAAAD9AAAA/gAA
+ AP8AAAD+AAAA/gAAAP8AAADwAAAApgAAAGIAAAAyAAAAFAAAAAsAAAALAAAAEwAAADQAAABkAAAApQAA
+ APAAAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP0AAACVAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAALYAAAD/AAAA/wAAAP8AAAD/AAAA/wAAANkAAABjAAAACgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAYQAAANgAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAALUAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAKAAAAtQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA2AAAAGEAAAAJAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAABjAAAA2QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAtgAA
+ AAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAtAAAAP8AAAD+AAAA/gAA
+ AP8AAADzAAAAdAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAcAAAB0AAAA9AAAAP8AAAD+AAAA/wAAAP4AAAC0AAAABgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAC0AAAA/gAAAP8AAAD+AAAA/gAAAPQAAAB0AAAABwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAA
+ AHUAAAD0AAAA/gAAAP8AAAD+AAAA/gAAALMAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAACWAAAA/gAAAP8AAAD+AAAA/gAAANoAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALgAAANwAAAD+AAAA/wAA
+ AP4AAAD+AAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJYAAAD+AAAA/gAA
+ AP8AAAD+AAAA2wAAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAA2gAAAP8AAAD+AAAA/gAAAP4AAACUAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFoAAAD+AAAA/wAAAP8AAAD/AAAAzwAAABQAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAABYAAADNAAAA/wAAAP8AAAD/AAAA/wAAAFkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAWQAAAP8AAAD/AAAA/wAAAP8AAADMAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAA
+ AM8AAAD/AAAA/wAAAP8AAAD+AAAAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAOsAAAD+AAAA/gAA
+ AP8AAADZAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAA2QAAAP4AAAD+AAAA/wAA
+ AOkAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAA6gAAAP8AAAD+AAAA/gAAANkAAAAYAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAADaAAAA/gAAAP8AAAD+AAAA6wAAABUAAAAAAAAAAAAA
+ AAAAAAAAAAAAlQAAAP8AAAD+AAAA/gAAAPQAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAALQAAAPYAAAD+AAAA/wAAAP4AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/gAA
+ AP8AAAD+AAAA9gAAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAA9AAA
+ AP8AAAD+AAAA/gAAAJUAAAAAAAAAAAAAAAAAAAAgAAAA9wAAAP8AAAD/AAAA/wAAAHMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAD/AAAA/wAAAP8AAAD3AAAAHwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAACAAAAD3AAAA/wAAAP8AAAD/AAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAAP8AAAD/AAAA/wAAAPYAAAAfAAAAAAAAAAAAAACIAAAA/gAA
+ AP8AAAD+AAAA2QAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAcAAADZAAAA/wAAAP4AAAD+AAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcAAAD+AAAA/gAAAP8AAADYAAAABwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAANkAAAD+AAAA/gAA
+ AP8AAACIAAAAAAAAAAUAAADiAAAA/gAAAP8AAAD+AAAAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAA/wAAAP4AAAD+AAAA5AAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AOQAAAD+AAAA/gAAAP8AAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAGMAAAD+AAAA/gAAAP8AAADhAAAABAAAADoAAAD/AAAA/wAAAP8AAADtAAAADAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA7QAA
+ AP8AAAD/AAAA/wAAADkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAP8AAAD/AAAA/wAAAO0AAAALAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADtAAAA/wAAAP8AAAD/AAAAOgAA
+ AHsAAAD+AAAA/gAAAP8AAAClAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAApQAAAP4AAAD+AAAA/wAAAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAewAAAP8AAAD+AAAA/gAA
+ AKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAClAAAA/gAAAP8AAAD+AAAAewAAAK8AAAD/AAAA/wAAAP8AAABjAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAP8AAAD/AAAA/wAA
+ AK4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAArgAAAP8AAAD/AAAA/wAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAA/wAAAP8AAAD/AAAArwAAANYAAAD+AAAA/gAA
+ AP8AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAMwAAAP4AAAD+AAAA/wAAANUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1gAAAP8AAAD+AAAA/gAAADIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA/gAA
+ AP8AAAD+AAAA1QAAAO8AAAD+AAAA/gAAAPoAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAP4AAAD+AAAA/wAAAO0AAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA7QAA
+ AP8AAAD+AAAA/gAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAATgAAAOIAAADiAAAAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAXAAAA+gAAAP8AAAD+AAAA7gAAAP4AAAD/AAAA/wAAAPUAAAAMAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
+ AP8AAAD/AAAA/wAAAPMAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAIAAAA8wAAAP8AAAD/AAAA/wAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAA5gAAAP8AAAD/AAAA6AAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAA9QAAAP8AAAD/AAAA/QAA
+ AP4AAAD+AAAA/gAAAPUAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAE4AAADlAAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAA
+ AP4AAAD+AAAA/wAAAOwAAABWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA8wAAAP8AAAD+AAAA/gAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVAAAA/gAA
+ AP8AAAD+AAAA6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAANAAAA9QAAAP8AAAD+AAAA/QAAAO4AAAD+AAAA/gAAAPoAAAAXAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOUAAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAA
+ AP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAADuAAAAFgAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAA7QAAAP8AAAD+AAAA/gAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAC1AAAA/gAAAP8AAAD+AAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAA+gAAAP8AAAD+AAAA7gAAANYAAAD/AAAA/wAA
+ AP8AAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AOgAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1gAAAP8AAAD/AAAA/wAAADIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAD5AAAA/wAAAP8AAAD+AAAAMQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAA/wAA
+ AP8AAAD/AAAA1QAAAK8AAAD+AAAA/gAAAP8AAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIcAAAD+AAAA/gAAAP8AAAD+AAAA8wAAAPIAAADyAAAA8gAA
+ APIAAADyAAAA8gAAAPIAAADyAAAA8gAAAPIAAADyAAAA+QAAAP4AAAD+AAAA/wAAAPkAAADyAAAA8gAA
+ APIAAADyAAAA+AAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA+wAAACwAAAAAAAAAAAAAAAAAAAAAAAAArgAA
+ AP8AAAD+AAAA/gAAAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AHkAAAD+AAAA/gAAAP8AAADMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABkAAAA/gAAAP8AAAD+AAAArwAAAHsAAAD+AAAA/gAAAP8AAAClAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAD4AAAA/gAA
+ AP8AAAD+AAAARgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAAqQAA
+ AP4AAAD+AAAA/wAAAH4AAAAHAAAABwAAAAcAAAAJAAAAvgAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAA
+ ALkAAAABAAAAAAAAAAAAAAAAAAAAfAAAAP8AAAD+AAAA/gAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAANkAAAD+AAAA/gAAAP8AAABtAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClAAAA/gAAAP8AAAD+AAAAegAA
+ ADoAAAD/AAAA/wAAAP8AAADtAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACsAAAA/wAAAP8AAAD/AAAAqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAALAAAA7QAAAP8AAAD/AAAA/wAAADgAAAAAAAAAAAAAAAAAAABPAAAA/gAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP0AAABNAAAAAAAAAAAAAAAAAAAAOQAAAP8AAAD/AAAA/wAA
+ AO0AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAP8AAAD/AAAA/wAA
+ APUAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAwAAADtAAAA/wAAAP8AAAD/AAAAOQAAAAUAAADiAAAA/gAAAP8AAAD+AAAAYgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/gAAAP8AAAD+AAAA+wAA
+ AB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjAAAA/wAAAP4AAAD+AAAA5AAA
+ AAEAAAAAAAAAAAAAAAgAAADYAAAA/wAAAP4AAAD+AAAAugAAALoAAAD+AAAA/wAAAP4AAADXAAAABwAA
+ AAAAAAAAAAAAAgAAAOQAAAD+AAAA/gAAAP8AAABjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAnQAAAP8AAAD+AAAA/gAAAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMAAAD+AAAA/gAAAP8AAADhAAAABQAAAAAAAACIAAAA/gAA
+ AP8AAAD+AAAA2AAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAAzwAAAP8AAAD+AAAA/gAAAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAcAAADZAAAA/wAAAP4AAAD+AAAAhwAAAAAAAAAAAAAAAAAAAHMAAAD+AAAA/wAAAP4AAAD5AAAALwAA
+ AC8AAAD5AAAA/wAAAP4AAAD+AAAAcQAAAAAAAAAAAAAAAAAAAIgAAAD+AAAA/gAAAP8AAADYAAAABwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAA7wAAAP8AAAD+AAAA/gAAAEgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAANkAAAD+AAAA/gAA
+ AP8AAACIAAAAAAAAAAAAAAAgAAAA9wAAAP8AAAD/AAAA/wAAAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAP8AAAD/AAAA/wAAAOkAAAALAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAAD/AAAA/wAAAP8AAAD3AAAAHwAAAAAAAAAAAAAAFQAA
+ AO4AAAD/AAAA/wAAAP8AAACXAAAAAAAAAAAAAACXAAAA/wAAAP8AAAD/AAAA7gAAABQAAAAAAAAAAAAA
+ ACAAAAD3AAAA/wAAAP8AAAD/AAAAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA/wAA
+ AP8AAAD/AAAA4wAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAcwAAAP8AAAD/AAAA/wAAAPcAAAAgAAAAAAAAAAAAAAAAAAAAlQAAAP8AAAD+AAAA/gAA
+ APQAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA
+ 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
+ AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAOkAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVAAAA/wAA
+ AP4AAAD+AAAA7gAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAA
+ AO4AAAD+AAAA/gAAAP8AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZAAAA6QAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAPcAAAD3AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA6gAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAACWAAAA+QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAAlwAAABYAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAC0AAAD5AAAA/wAAAP8AAAD/AAAAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIAAAD/AAAA/wAAAP8AAAD5AAAALQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAFgAAAJcAAAD8AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPkAAACWAAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAA
+ AIkAAADjAAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALoAAAD+AAAA/wAAAP4AAADXAAAABwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAADXAAAA/gAA
+ AP8AAAD+AAAAugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAADjAAAAiQAAAB0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAA
+ ABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAOAAAAHsAAACvAAAA1QAAAOoAAADxAAAA8QAA
+ AOoAAADVAAAArwAAAHsAAAC7AAAA/gAAAP8AAAD+AAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATAAA
+ AP4AAAD+AAAA/wAAAP0AAABOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABOAAAA/QAAAP8AAAD+AAAA/gAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AJEAAAD+AAAA/gAAAP8AAADEAAAAewAAAK8AAADVAAAA6gAAAPEAAADxAAAA6gAAANQAAACvAAAAewAA
+ ADgAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACWAAAA/AAAAPUAAACHAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUAAAAJAAAACQAAAAUAAAAAAAAAAAAAAAAAAABAAAAA/gAAAP8AAAD+AAAA+gAA
+ AB4AAAAAAAAAAAAAAAAAAAAHAAAA1gAAAP4AAAD+AAAA/wAAALoAAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAugAAAP8AAAD+AAAA/gAA
+ ANYAAAAHAAAAAAAAAAAAAAAAAAAABgAAAOsAAAD+AAAA/gAAAP8AAABWAAAAAAAAAAAAAAAAAAAABQAA
+ AAkAAAAJAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAD9AAAA/wAAAP8AAAD/AAAA5wAA
+ AHEAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAAzgAAAP8AAAD/AAAA/wAAAIgAAAAAAAAAAAAAAAAAAAByAAAA/wAAAP8AAAD/AAAA+wAA
+ ACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAALAAAAPsAAAD/AAAA/wAAAP8AAAByAAAAAAAAAAAAAAAAAAAAVAAAAP8AAAD/AAAA/wAA
+ AOkAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AA4AAADwAAAA/gAAAP8AAAD+AAAA/gAAAP8AAADsAAAAkwAAADsAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAP8AAAD+AAAA/gAAAOkAAAAMAAAAAAAA
+ ABYAAADsAAAA/wAAAP4AAAD+AAAAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJcAAAD+AAAA/gAAAP8AAADsAAAAFgAA
+ AAAAAAAAAAAAtQAAAP8AAAD+AAAA/gAAAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGAAAA4QAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/wAA
+ AP4AAADnAAAArAAAAHcAAABLAAAALQAAABYAAAALAAAACwAAABIAAAAnAAAARQAAAHEAAAClAAAA5AAA
+ AP8AAAD+AAAA/gAAAP8AAABpAAAAAAAAAJUAAAD+AAAA/wAAAP4AAADtAAAAFwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ABcAAADtAAAA/gAAAP8AAAD+AAAAlQAAAAAAAAAdAAAA+AAAAP8AAAD+AAAA/gAAADEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAA
+ AIQAAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADOAAAALwAAAPsAAAD/AAAA/wAA
+ AP8AAAByAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAByAAAA/wAAAP8AAAD/AAAA+wAAACwAAAB5AAAA/wAA
+ AP8AAAD/AAAAzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAgQAAAOQAAAD+AAAA/wAAAP4AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA2wAAAP4AAAD+AAAA/wAAANcAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA1wAA
+ AP8AAAD+AAAA/gAAALsAAADWAAAA/gAAAP8AAAD+AAAAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAgAAABNAAAAogAAAO0AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAPIAAADhAAAA/gAAAP8AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAE4AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD2AAAAFgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAvAAAAZwAAAJUAAAC6AAAA1QAA
+ AOgAAADvAAAA8AAAAOwAAADaAAAAwAAAAJwAAABvAAAAOgAAAAUAAABAAAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAAwQAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAA
+ AAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAMEAAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAACqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAACAAAAzwAAAP8AAAD+AAAA/wAAAP4AAAD+AAAA+gAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAA
+ APcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA9wAA
+ APcAAAD3AAAA9wAAAPoAAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAABJAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAP8AAAD+AAAA/wAAAP4AAAD+AAAA/wAA
+ AP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAA
+ AP4AAAD+AAAA/wAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AOEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAA
+ AO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAADpAAAA/gAAAP4AAAD+AAAA/wAAAPYAAAD2AAAA9wAA
+ APYAAAD2AAAA9wAAAPYAAAD2AAAA9wAAAPYAAAD2AAAA9wAAAPYAAAD2AAAA9wAAAPYAAAD2AAAA9wAA
+ APYAAAD2AAAA9gAAAPcAAAD2AAAA9gAAAPcAAAD5AAAA/gAAAP8AAAD+AAAA/QAAACYAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAA8wAA
+ AP4AAAD+AAAA/gAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAA
+ AAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAAALAAAACwAAAAsAAACMAAAA/gAA
+ AP8AAAD+AAAAwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAIAAAA8wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUAAADgAAAA/wAAAP8AAAD/AAAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA8wAAAP4AAAD+AAAA/gAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAD+AAAA/gAAAP8AAADwAAAADwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAIAAAA8wAAAP4AAAD+AAAA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AKkAAAD+AAAA/gAAAP8AAACeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAATwAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADmAAAATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAPcAAAD/AAAA/wAAAP4AAAA9AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA5AAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/wAA
+ AP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAP8AAAD+AAAA/gAA
+ ANgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAA5AAA
+ AP8AAAD+AAAA/gAAAP8AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA/wAAAP4AAAD+AAAA5gAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAzAAAAP8AAAD+AAAA/gAAAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAATgAAAOQAAADyAAAA8gAAAPMAAADyAAAA8wAAAPIAAADyAAAA8wAA
+ APIAAADyAAAA8wAAAPIAAADjAAAATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAA/QAAAP8AAAD/AAAA/AAAACgAAAAMAAAADAAA
+ AAwAAAAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAHAAAABwAA
+ AAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACRAAAA/gAA
+ AP8AAAD+AAAA/gAAAPcAAAD3AAAA9wAAAPcAAAD3AAAA4gAAAE4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAQAAADiAAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AOMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADhAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABOAAAA4QAAAPcAAAD2AAAA9gAAAPcAAAD2AAAA9gAAAPcAAAD2AAAA4gAAAE4AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAsAAAALAAAACwAAAAsAAAALAAAACwAA
+ AAsAAAALAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ w////////8P////4AB//////+AAf///gAAf/////4AAH//+AAAH/////gAAB//8AAAD/////AAAA//wA
+ AAA////8AAAAP/gB/4Af///4Af+AH/AH/+AP///wB//gD/Af//gP///wH//4D+A///wH///gP//8B8B/
+ //4D///Af//+A8D///8D///A////A4H///+B//+B////gYH///+B//+B////gQP////A//8D////wAP/
+ ///A//8D////wAf////g//8H////4Af////g//8H////4Af////g//8H/+f/4Af////gf/4H/8P/4Af/
+ ///gf/4H/4P/4Af/wAAAAD4H/4P/4Af/wAAAAB4H/4P/4Af/wAAAAB8H/wP/4Af/wAAAAA8H/wP/4Af/
+ wAAAAAcH/gf/4AP/4P/A4AcD/gf/wAP/4H/AwAMD/g//wIH/4H+BwAOB/A//gYH/8D+BgYGB/A//gcD/
+ 8D8DgYHA/B//A8B/+B4DA8DAeB/+A+A/+BwGA8BgOD/8B/Af/BgOB+BwED/4D/AH/AAMB+AwAD/gD/gB
+ /AAcD/A4AH+AH/wAAAA4H/gcAAAAP/8AAAD4H/gfAAAA//+AAAHwP/wPgAAB///gAAPwP/wPwAAH//n4
+ AAPgf/4HwAAf//B/w4HAf/4DgcP//+Af/4HA//8Dgf///+AD/8CB//+Bg/////AAAACB//+BA/////gA
+ AAAD///AB/////4AAAAD///AB/////+AAAAH///gB//////wAAAAAAAAD///////9/AAAAAAD///////
+ //gAAAAAD/////////gAAAAAH/////////wAAAAAH/////////4AAAAAP/////////4P///wP///////
+ //4P///wP/////////4P///wf////////8AAP//gf////////4AAP//gf////////4AAP//g////////
+ /8AAP//AB////////+AAf//AA/////////////+AAf////////////+AAf/////////////AA///////
+ ///////gB///////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ /////////////ygAAABIAAAAkAAAAAEAIAAAAAAAYFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAGAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAIAAAATQAAAJQAAADIAAAA6AAAAPQAAAD0AAAA6AAAAMgAAACUAAAATQAAAAgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAATQAA
+ AJQAAADIAAAA6AAAAPQAAAD0AAAA6AAAAMgAAACUAAAATQAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAIIAAADqAAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAOkAAACAAAAAEQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAIEAAADpAAAA/gAAAP4AAAD/AAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAOkAAACBAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA6AAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ APoAAAD6AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA6AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABYAAAA6AAAAP4AAAD+AAAA/gAAAP4AAAD/AAAA/gAAAPoAAAD6AAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD/AAAA6AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAAAJYAAAD+AAAA/gAAAP8AAAD+AAAA3QAAAIYAAABEAAAAGQAAAAkAAAAJAAAAGAAA
+ AEQAAACGAAAA3QAAAP4AAAD+AAAA/gAAAP4AAACVAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
+ AJYAAAD+AAAA/gAAAP4AAAD+AAAA3QAAAIYAAABEAAAAGAAAAAkAAAAJAAAAGQAAAEQAAACGAAAA3QAA
+ AP4AAAD/AAAA/gAAAP4AAACVAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAArAAA
+ AP4AAAD+AAAA/gAAAN8AAABYAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ AFcAAADeAAAA/gAAAP4AAAD+AAAAqwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAqwAAAP4AAAD+AAAA/gAA
+ AN4AAABXAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAFgAAADfAAAA/gAA
+ AP4AAAD+AAAAqwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAApAAA
+ AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAApAAA
+ AP8AAAD/AAAA/wAAAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACWAAAA/wAAAP8AAAD/AAAApAAAAA0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAApAAAAP8AAAD/AAAA/wAA
+ AJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAD+AAAA/gAAAP4AAACLAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIsAAAD+AAAA/gAA
+ AP8AAABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAFgAAAD/AAAA/gAAAP4AAACLAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAIsAAAD+AAAA/gAAAP4AAABYAAAAAAAA
+ AAAAAAAAAAAAEQAAAOkAAAD+AAAA/gAAAKMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACjAAAA/gAAAP8AAADpAAAAEAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA
+ AOkAAAD/AAAA/gAAAKMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACkAAAA/gAAAP4AAADoAAAAEAAAAAAAAAAAAAAAgQAA
+ AP4AAAD+AAAA3gAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAA3gAAAP8AAAD+AAAAgQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggAAAP4AAAD/AAAA3gAA
+ AA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAANAAAA3gAAAP4AAAD+AAAAgQAAAAAAAAAHAAAA6gAAAP4AAAD+AAAAVwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAP4AAAD+AAAA6QAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA6QAAAP4AAAD+AAAAWAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAVwAAAP4AAAD+AAAA6gAAAAcAAABNAAAA/gAAAP4AAADcAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAwAAAN0AAAD+AAAA/gAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABNAAAA/gAAAP4AAADdAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA
+ AN0AAAD+AAAA/gAAAE0AAACUAAAA/gAAAP4AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AIYAAAD+AAAA/gAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAACUAAAA/gAAAP4AAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUAAAD+AAAA/gAA
+ AJQAAADIAAAA/gAAAP4AAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAD+AAAA/gAA
+ AMcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAA/gAA
+ AP4AAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAD+AAAA/gAAAMgAAADqAAAA/gAA
+ AP0AAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAD+AAAA/gAAAOoAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADqAAAA/gAAAP4AAAAYAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAF8AAABfAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAD+AAAA/gAAAOoAAAD8AAAA/wAAAPgAAAAKAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAD/AAAA/wAAAPUAAAAFAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAD1AAAA/wAAAP8AAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAP8AAAD+AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAoAAAD4AAAA/wAAAPwAAAD8AAAA/gAAAPgAAAAKAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAAAN0AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ AP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAADkAAAAKQAA
+ AAAAAAAAAAAAAAAAAAUAAAD1AAAA/gAAAP4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAygAAAP4AAAD+AAAAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAoAAAD4AAAA/gAAAPwAAADqAAAA/gAAAP4AAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAdgAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD+AAAAuQAAAAAAAAAAAAAAAAAA
+ AAAAAADqAAAA/gAAAP4AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtAAAA/gAA
+ AP4AAAD1AAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAD+AAAA/gAA
+ AOoAAADIAAAA/gAAAP4AAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAA
+ AP0AAAD+AAAA/gAAAPgAAAD1AAAA9QAAAPUAAAD1AAAA9QAAAPUAAAD1AAAA9QAAAPkAAAD+AAAA/gAA
+ APwAAAD1AAAA9QAAAPUAAAD7AAAA/gAAAP8AAAD+AAAA/gAAAEwAAAAAAAAAAAAAAAAAAADIAAAA/gAA
+ AP4AAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOAAAA/gAAAP4AAACmAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAD+AAAA/gAAAMgAAACUAAAA/gAA
+ AP4AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMUAAAD+AAAA/gAA
+ AIEAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAIkAAAD+AAAA/gAAAJUAAAAFAAAABQAA
+ AA0AAADaAAAA/gAAAP8AAAD+AAAA/gAAANcAAAAGAAAAAAAAAAAAAACUAAAA/gAAAP4AAACGAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAADpAAAA/gAAAP4AAABFAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIUAAAD+AAAA/gAAAJQAAABNAAAA/gAAAP4AAADcAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAAAD+AAAA/gAAAOQAAAAFAAAAAAAA
+ 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
+ AAAAAACVAAAA/gAAAP4AAADXAAAABgAAAAAAAAAEAAAAqwAAAP4AAAD+AAAA/gAAAN8AAADBAAAA/gAA
+ AP4AAACaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAFgAAADfAAAA/gAAAP4AAAD+AAAAqwAA
+ AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAJYAAAD+AAAA/gAAAP8AAAD+AAAA3QAA
+ AIYAAABEAAAAGAAAAAkAAAAJAAAAGAAAAIoAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAACWAAAABAAA
+ AAAAAAAAAAAAcQAAAP4AAAD+AAAA7QAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAA7QAA
+ AP4AAAD+AAAAcAAAAAAAAAAAAAAABQAAAJYAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAB0AAAAGAAA
+ AAkAAAAJAAAAGQAAAEQAAACGAAAA3QAAAP4AAAD/AAAA/gAAAP4AAACWAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYAAAA6AAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ APoAAAD6AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA6AAAAFgAAAAAAAAAAAAAAAAAAAAUAAAA7QAA
+ AP4AAAD+AAAAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQAAAP4AAAD+AAAA7QAA
+ ABQAAAAAAAAAAAAAAAAAAABYAAAA6AAAAP4AAAD+AAAA/gAAAP4AAAD/AAAA/gAAAPoAAAD6AAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD/AAAA6AAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAIEAAADpAAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ AP8AAAD+AAAA/gAAAP4AAADjAAAAEQAAAAAAAAAAAAAAAAAAAAAAAACUAAAA/gAAAP4AAADXAAAABgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAANcAAAD+AAAA/gAAAJQAAAAAAAAAAAAA
+ AAAAAAAAAAAAEQAAAN4AAAD+AAAA/gAAAP4AAAD/AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ AOkAAACBAAAAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGgAA
+ AAAAAAAAAAAAAAAAAAAAAAAIAAAATQAAAJQAAADIAAAA6AAAAPQAAAD0AAAA6AAAAMgAAACWAAAA9wAA
+ AP4AAAD9AAAANAAAAAAAAAAAAAAAAAAAACsAAAD6AAAA/gAAAP4AAABNAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE0AAAD+AAAA/gAAAPoAAAArAAAAAAAAAAAAAAAAAAAAJAAA
+ APsAAAD+AAAA+gAAAJgAAADIAAAA6AAAAPQAAAD0AAAA6AAAAMgAAACUAAAATQAAAAgAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAADBAAAA/gAAALcAAAAqAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAGAAAAAQAAAAAAAAAAAAAAoQAAAP4AAAD+AAAAoQAA
+ AAAAAAAAAAAAAAAAALgAAAD+AAAA/gAAALkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAC5AAAA/gAAAP4AAAC4AAAAAAAAAAAAAAAAAAAAggAAAP4AAAD+AAAAswAA
+ AAAAAAAAAAAAAQAAAAYAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMAAAD9AAAA/gAAAP4AAAD7AAAApwAAADwAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAP4AAAD+AAAA9gAAABcAAAAAAAAATAAA
+ AP4AAAD+AAAA+gAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAsAAAA+gAAAP4AAAD+AAAATAAAAAAAAAADAAAA3wAAAP4AAAD+AAAAUgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACDAAAA+wAAAP4AAAD+AAAA/gAAAP4AAADfAAAAmQAAAF8AAAA0AAAAGAAA
+ AAoAAAAJAAAAFQAAADAAAABbAAAAlAAAAPkAAAD+AAAA/gAAAIAAAAAFAAAA1wAAAP8AAAD+AAAAlQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlQAA
+ AP4AAAD/AAAA1wAAAAUAAABFAAAA/gAAAP4AAADpAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAALwAAALUAAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAAB3AAAA/wAAAP8AAADuAAAAFAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAO4AAAD/AAAA/wAA
+ AHAAAACmAAAA/wAAAP8AAACPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAwAAAAlgAAAOkAAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD8AAAA/gAAAP8AAABxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEAAAD/AAAA/gAAAO8AAAD1AAAA/gAA
+ AP4AAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAUAAAA7AAAAeQAAAKoAAADPAAAA5wAAAPMAAADzAAAA6wAAANMAAACvAAAAfwAAAEIAAACDAAAA/gAA
+ AP4AAAD+AAAA/gAAANwAAAAOAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAA
+ AAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAA4AAADcAAAA/gAAAP4AAAD+AAAA/gAAAMsAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAA9gAAAP4AAAD+AAAA/gAA
+ APwAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAAAPkAAAD5AAAA+QAA
+ APkAAAD5AAAA+QAAAPkAAAD8AAAA/gAAAP4AAAD+AAAA/gAAAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAA
+ AP4AAAD/AAAA/gAAAP4AAAD+AAAA9QAAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAOIAAAD+AAAA/gAAAP8AAAD4AAAA+AAAAPgAAAD4AAAA+AAA
+ APgAAAD4AAAA+AAAAPkAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPgAAAD5AAAA/QAA
+ AP4AAAD+AAAApwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAkAAAD2AAAA/gAAAP4AAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
+ AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAPAAAA6wAAAP4AAAD+AAAARgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAYAAAD2AAAA/gAAAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRAAAA/gAAAP4AAADfAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAD2AAAA/gAA
+ AP4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACyAAAA/gAAAP4AAACDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAN4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADeAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ABgAAAD6AAAA/wAAAPwAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAdwAAAP4AAAD+AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD+AAAA/gAAAP4AAAD+AAAAdgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHYAAAD/AAAA/gAA
+ AL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAA
+ AN0AAAD1AAAA9QAAAPUAAAD1AAAA9QAAAPYAAAD1AAAA9QAAAPUAAADcAAAAJgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANYAAAD/AAAA/gAAAGUAAAAJAAAACQAA
+ AAkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAABQAA
+ AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAP4AAAD/AAAA/gAAAPoAAAD5AAAA+QAAAPkAAADbAAAAJQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAdQAAAP4AAAD/AAAA/gAAAP4AAAD+AAAA/gAAAP4AAAD+AAAAdgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAA
+ ANsAAAD5AAAA+AAAAPgAAAD4AAAA+AAAAPgAAADcAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAACAAA
+ AAgAAAAIAAAACAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////8AAAD///////////8AAAD///////////8A
+ AAD///////////8AAAD///////////8AAAD///////////8AAAD///////////8AAAD///////////8A
+ AAD///////////8AAAD///////////8AAAD///////////8AAAD/+H/////+H/8AAAD/gAf////gAf8A
+ AAD+AAH///+AAH8AAAD8AAD///8AAD8AAADwAAA///wAAA8AAADgH+Af//gH+AcAAADgf/gf//gf/gcA
+ AADA//wP//A//wMAAACB//4H/+B//4EAAACD//8H/+D//8EAAAAH//+D/8H//+AAAAAH//+D/8H//+AA
+ AAAP///D/8P///AAAAAP///D/8P///AAAAAP///D/8P+H/AAAAAP///B/4P+H/AAAAAP+AAAA4P+H/AA
+ AAAP+AAAA8P8H/AAAAAP+AAAAcP8P/AAAAAP/AAAAMP4P/AAAAAH/B+DAMH4P+AAAAAH/B+CAEH4f+AA
+ AACD/h8GAGDwf8EAAACB/g4EGCBw/4EAAADA/wwMPDAg/wMAAADgfwAYPBgA/gcAAADgH4AQfggB+AcA
+ AADwAAAwfgwAAA8AAAD8AADg/wcAAD8AAAD+AAHg/weAAH8AAADngAHB/4OAAf8AAADB+GHD/8OGH/8A
+ AADAP+CD/8EH//8AAADgAAAH/+AH//8AAADwAAAH/+AP//8AAAD8AAAP//AP//8AAAD/AAAAAAAf//8A
+ AAD//vgAAAAf//8AAAD///wAAAAf//8AAAD///wAAAA///8AAAD///4AAAA///8AAAD///4f//g///8A
+ AAD///4f//h///8AAAD//+AA//B///8AAAD//+AA//D///8AAAD//+AA//AP//8AAAD///AB/+AH//8A
+ AAD//////+AH//8AAAD//////+AH//8AAAD///////AP//8AAAD///////////8AAAD///////////8A
+ AAD///////////8AAAD///////////8AAAD///////////8AAAD///////////8AAAD///////////8A
+ AAD///////////8AAAD///////////8AAAD///////////8AAAD///////////8AAAAoAAAAQAAAAIAA
+ AAABACAAAAAAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAMgAA
+ AEwAAABSAAAARgAAACYAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACYAAABGAAAAUgAAAEwAAAAyAAAACgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAA
+ AGsAAADDAAAA+gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAKgAAABIAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAABIAAAAqAAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ APoAAADDAAAAawAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAADAAAAbwAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AM0AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAADNAAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADtAAAAbwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAYAAAAwgAAAP8AAAD/AAAA/wAAAPgAAAC4AAAAfwAAAF4AAABXAAAAZgAA
+ AI8AAADRAAAA/wAAAP8AAAD/AAAA/QAAAIUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIUAAAD9AAAA/wAA
+ AP8AAAD/AAAA0QAAAI4AAABmAAAAVwAAAF4AAAB/AAAAuAAAAPgAAAD/AAAA/wAAAP8AAADCAAAAFwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA3gAAAP8AAAD/AAAA8wAAAIAAAAAUAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAACtAAAA/gAAAP8AAAD/AAAApgAAAAMAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA
+ AKYAAAD/AAAA/wAAAP4AAACsAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAgAAA
+ APMAAAD/AAAA/wAAAN4AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARAAAA2QAAAP8AAAD/AAAAyQAA
+ ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAADvAAAA/wAA
+ AP8AAACVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAJYAAAD/AAAA/wAAAO8AAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAgAAAAyQAAAP8AAAD/AAAA2QAAABAAAAAAAAAAAAAAAAAAAAAAAAAArAAA
+ AP8AAAD/AAAAugAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAALQAAAOsAAAD/AAAA/wAAAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFcAAAD/AAAA/wAAAOsAAAAtAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAC6AAAA/wAAAP8AAACsAAAAAAAA
+ AAAAAAAAAAAATAAAAP8AAAD/AAAA1gAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAA+wAAAP8AAADoAAAADQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAADoAAAA/wAAAPsAAAA9AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAA
+ ANYAAAD/AAAA/wAAAEsAAAAAAAAAAAAAAM0AAAD/AAAA/QAAADUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIkAAAD/AAAA/wAA
+ AHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAA/wAA
+ AP8AAACJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAA2AAAA/QAAAP8AAADMAAAAAAAAADYAAAD/AAAA/wAAAKoAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAPAAAA8AAAAP8AAADeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABAAAA3gAAAP8AAADwAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKoAAAD/AAAA/wAAADUAAACGAAAA/wAA
+ AP8AAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJcAAAD/AAAA/wAAADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAAAP8AAAD/AAAAlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAAA/wAA
+ AP8AAACGAAAAwQAAAP8AAADyAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNAAAA/wAAAP8AAABsAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAD/AAAA/wAAAEwAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAAAPIAAAD/AAAAwQAAAOgAAAD/AAAAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAA
+ AP8AAAD/AAAAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTAAAA/wAA
+ AP8AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAASQAAABcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAA/wAAAOcAAAD8AAAA/wAAAK4AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAMAAAD/AAAA/wAAAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAApQAAAP8AAAD/AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAA
+ AP8AAADbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArgAAAP8AAAD7AAAA/AAA
+ AP8AAACuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnQAAAP0AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAADfAAAAGwAAAAAAAAAAAAAAAAAAAKUAAAD/AAAA/wAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABgAAAOsAAAD/AAAA4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AK4AAAD/AAAA+wAAAOgAAAD/AAAAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ APMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAKAAAAAAAAAAAAAAAAAAAACTAAAA/wAAAP8AAAAcAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQAAAD/AAAA/wAAAIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADGAAAA/wAAAOcAAADBAAAA/wAAAPIAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACdAAAA/wAAAP8AAADMAAAApwAAAKcAAACnAAAApwAAAKcAAACnAAAApwAA
+ AMgAAAD/AAAA/wAAAMcAAACnAAAApwAAAMkAAAD/AAAA/wAAAP8AAAD9AAAANAAAAAAAAAAAAAAAbAAA
+ AP8AAAD/AAAATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1AAAA/wAAAP4AAAAlAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA8gAAAP8AAADBAAAAhgAAAP8AAAD/AAAAQgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAP4AAAD/AAAAtQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAACXAAAA/wAAAP8AAAAxAAAAAAAAAAEAAADFAAAA/wAAAP8AAAD/AAAA/wAA
+ AMQAAAAAAAAAAAAAADEAAAD/AAAA/wAAAJcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAAA+wAA
+ AP8AAADCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQgAAAP8AAAD/AAAAhgAA
+ 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
+ AAAAAAAAAAAAEwAAAO4AAAD/AAAA8wAAABoAAAAAAAAASAAAAP8AAAD/AAAAkQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAbAAAA0wAAAP8AAAD/AAAA/wAAAP0AAADDAAAAfQAAAEgAAAAiAAAADAAAAAgAAAAPAAAAKQAA
+ AFMAAACeAAAA/wAAAP8AAADbAAAAAQAAAKAAAAD/AAAA/wAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAA/wAAAP8AAACgAAAAAAAAAKkAAAD/AAAA/wAA
+ ADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABuAAAA5gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAH0AAAD9AAAA/wAAANgAAAAFAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAANgAAAD/AAAA/QAA
+ AEcAAAD4AAAA/wAAAM4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABZAAAAswAA
+ APcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADsAAAA/gAAAP8AAAD/AAAA/wAA
+ AP8AAABMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABMAAAA/wAAAP8AAAD0AAAA/wAAAP8AAABtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAHAAAAPAAAAGoAAACKAAAAnAAAAKEAAACaAAAAhAAAAGEAAAAvAAAAAgAA
+ AMIAAAD/AAAA/wAAAP8AAADhAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA
+ AFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAOEAAAD/AAAA/wAAAP8AAAD4AAAAEwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABUAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAqgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAOEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAxQAA
+ AP8AAAD/AAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAAAFcAAABXAAAAVwAA
+ AFcAAABXAAAAVwAAAF4AAAD6AAAA/wAAAOMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAKcAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAA/wAAAP8AAACGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACnAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtQAAAP8AAAD+AAAAJQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSAAAA9AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD9AAAAngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAA
+ APsAAAD/AAAAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAngAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAHkAAAD/AAAA/wAAAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ACMAAACeAAAApwAAAKcAAACnAAAApwAAAKcAAACnAAAApwAAAKYAAABSAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZAAAA/wAAAP0AAABkAAAAVwAAAFcAAABLAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3AAAA/wAAAP8AAAD/AAAA/wAA
+ AP8AAAD/AAAA/wAAAIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMQAA
+ AP0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAyAAAAVwAAAFcAAABXAAAAVwAAAFcAAABLAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////
+ /////////////////////////////////////////////////////////////////////////8B////+
+ A//+AA////AAf/gAB///4AAf8AAB//+AAA/gP4D//wH8B8D/4P//B/8Dwf/wf/4P/4OD//g//B//wYf/
+ /D/8P//hD//8P/g///AP//4f+H//8A///h/4f//wH//+H/h/j/gf//4f+H+P+B/wAAA4fw/4H/AAADh/
+ D/gP8AAAGH8P8A/w/hAYfh/wD/h8MAg+H/CH+HwgBD4f4YP4OCGEHD/BwfwwQYIMP4PA/ADDwwB/A+A+
+ AIPBAHwH8AABh+GAAA/4AAcP8OAAH/4ADg/wcAB/w8AGH/hgA//A/4Qf+CH//8AAAD/8If//4AAAP/wD
+ ///4AAB//gP///8AAAAAA//////gAAAH/////+AAAAf/////8AAAB//////4//8P//////j//w//////
+ gA/+H/////+AD/4f/////4AP/gH////////8Af////////wB/////////gH/////////////////////
+ ////////////////////////////////////////////////////////////////////////////////
+ ////////KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAFwAAACsAAAA4AAA
+ APYAAAD2AAAA4AAAAKwAAABbAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAABbAAAArAAAAOAAAAD2AAAA9gAA
+ AOAAAACsAAAAXAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWAAAA4wAA
+ AP8AAAD/AAAA/gAAAPwAAAD8AAAA/wAAAP4AAAD/AAAA4wAAAFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVgAAAOMAAAD/AAAA/wAA
+ AP4AAAD8AAAA/AAAAP4AAAD/AAAA/wAAAOMAAABWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AJQAAAD+AAAA/gAAAM4AAABoAAAAJQAAAAcAAAAIAAAAJQAAAGgAAADOAAAA/gAAAP4AAACUAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACUAAAA/gAA
+ AP4AAADNAAAAaAAAACUAAAAIAAAABwAAACYAAABoAAAAzgAAAP4AAAD+AAAAlAAAAAIAAAAAAAAAAAAA
+ AAAAAAAAAAAAlAAAAP8AAAD1AAAAZQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAZQAA
+ APYAAAD/AAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AJQAAAD/AAAA9gAAAGUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAGYAAAD1AAAA/wAA
+ AJMAAAAAAAAAAAAAAAAAAABWAAAA/gAAAPUAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAD8AAAD1AAAA/gAAAFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAVgAAAP4AAAD1AAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAA/AAAA9QAAAP4AAABWAAAAAAAAAAgAAADiAAAA/gAAAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAAA/gAAAOIAAAAHAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAIAAAA4gAAAP8AAABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAZgAAAP4AAADiAAAABwAAAFwAAAD+AAAAzgAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAzgAAAP4AAABbAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbAAAA/gAAAM4AAAABAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAM4AAAD+AAAAWwAAAKwAAAD/AAAAZwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZwAA
+ AP8AAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAAA/gAAAGcAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGcAAAD/AAAArAAA
+ AOAAAAD/AAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAJQAAAP8AAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAA/gAA
+ ACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ACUAAAD/AAAA4AAAAPoAAAD7AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAP4AAAD3AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAIAAAD3AAAA/gAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADFAAAAxgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAkAAAD7AAAA+gAAAPoAAAD7AAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AMYAAAD/AAAA/wAAAP4AAAD/AAAA/gAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/gAA
+ AMwAAAAFAAAAAAAAAAIAAAD3AAAA/gAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEIAAAD/AAAA3gAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAD7AAAA+gAAAOAAAAD/AAAAJQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAANsAAAD/AAAA/AAAAPgAAAD5AAAA+AAAAPkAAAD5AAAA+gAAAP8AAAD9AAAA+AAA
+ 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
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAxQAAAP4AAAD+AAAA3wAA
+ AIkAAABIAAAAHgAAAAgAAAAHAAAAGwAAAEUAAADRAAAA/gAAAJcAAAAqAAAA+gAAAPoAAAArAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAAA+gAAAPoAAAAqAAAAcwAAAP4AAACwAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
+ AGIAAADYAAAA/gAAAP8AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA/gAAAPIAAADBAAAA/gAA
+ AJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAAAAP8AAAC4AAAA0wAA
+ AP4AAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAACAAAAPAAAAIcAAAC+AAAA4wAAAPUAAAD2AAAA5gAAAMIAAACMAAAAxwAA
+ AP8AAAD/AAAA7wAAABkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAAGQAA
+ AO8AAAD+AAAA/gAAAOcAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAATQAAAP8AAAD/AAAA/QAAAPsAAAD7AAAA+wAAAPsAAAD7AAAA+wAAAPsAAAD7AAAA+wAA
+ APsAAAD7AAAA+wAAAP0AAAD/AAAA/wAAAIsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAMwAAAD+AAAA/gAAAPoAAAD6AAAA+gAAAPoAAAD6AAAA+gAA
+ APoAAAD6AAAA+gAAAPoAAAD6AAAA+gAAAPsAAAD+AAAA/gAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAD5AAAA/gAAAAUAAAAFAAAABQAA
+ AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAF8AAAD/AAAAyAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAD5AAAA/gAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsAAAD/AAAAZwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADGAAAA/gAA
+ AP4AAAD+AAAA/gAAAP4AAAD+AAAAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAA
+ AP0AAAD1AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAADFAAAA+AAAAPkAAAD5AAAA+AAAAPkAAAD5AAAAxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAfwAAAP8AAACnAAAABgAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABAAAA3AAAAP8AAAD8AAAA+wAAAPsAAADEAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAxAAAAPoAAAD6AAAA+gAAAPoAAADEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAFAAAABQAA
+ AAUAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP///////wAA////////
+ AAD///////8AAP///////wAA/5////n/AAD4Af//gB8AAPAA//8ADwAAwAA//AADAADB+D/8H4MAAIf+
+ H/h/4QAAD/8P8P/wAAAP/w/w//AAAB//j/H/+AAAH/+P8fn4AAAf/4fh8fgAAB+AACHx+AAAH4AAMfH4
+ AAAfgAAR4fgAAA+HCBDj8AAAD8cAAOPwAACHwhGIQ+EAAMHgIYQHgwAAwAADwAADAADwAMPDAA8AAMgB
+ h+GAHwAAg5CP8Qn/AACAAA/wH/8AAMAAH/gf/wAA8AAAAB//AAD//AAAP/8AAP/8AAA//wAA//4AAH//
+ AAD//j/8f/8AAP/4B/h//wAA//gH+B//AAD//A/wH/8AAP////Af/wAA////+B//AAD///////8AAP//
+ /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AACgAAAAgAAAAQAAAAAEA
+ IAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAEsAAACNAAAApwAAAJoAAABmAAAAEgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAABmAAAAmgAAAKcAAACNAAAASwAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcAAADWAAAA/QAAAM0AAACsAAAAvAAAAPMAAADyAAAAbwAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABvAAAA8gAAAPMAAAC8AAAArAAA
+ AM0AAAD9AAAA1gAAADcAAAAAAAAAAAAAAAAAAABDAAAA9gAAALYAAAAlAAAAAAAAAAAAAAAAAAAACwAA
+ AH4AAAD7AAAAjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjwAAAPsAAAB+AAAACwAA
+ AAAAAAAAAAAAAAAAACUAAAC3AAAA9gAAAEIAAAAAAAAAEwAAAOoAAACnAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAFUAAAD+AAAAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFMAAAD+AAAAVQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAACnAAAA6gAAABIAAACAAAAA6QAAAA0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAADVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1QAA
+ AKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAADpAAAAgAAAANEAAACOAAAAAAAA
+ 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
+ AAAAAAAAAAAAAAAAADwAAAD8AAAA/wAAAP8AAAD/AAAA4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQAA
+ AP4AAABJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFEAAABTAAAAUwAAAFMAAAA+AAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAACEAAAA/gAAAK4AAACoAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAFgAAACrAAAAqwAAAKgAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////
+ ///gP/wHwB/4A4cP8OEPx+PwH+fn+D/jx/w/48c8PABHPDwABjwcYAY4DEACcIYBgGHAEYgDgAPEB4AD
+ wP+AB+H/8AAB//+AAf//z/P//wPj//8D4P///+D///////////////////////////8oAAAAGAAAADAA
+ AAABACAAAAAAAGAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAABQAAAAwQAAAPQAAAD0AAAAwQAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AFAAAADBAAAA9AAAAPQAAADBAAAAUAAAAAAAAAAAAAAAAAAAAIoAAADWAAAATgAAAAsAAAALAAAATgAA
+ ANYAAACKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAANYAAABOAAAACwAAAAsAAABOAAAA1gAA
+ AIoAAAAAAAAAUAAAANYAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAA8AAADWAAAAUAAAAAAAAAAAAAAAAAAA
+ AAAAAABQAAAA1gAAAA8AAAAAAAAAAAAAAAAAAAAAAAAADwAAANYAAABQAAAAwQAAAE0AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABOAAAAwQAAAAAAAAAAAAAAAAAAAAAAAADBAAAATgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAE0AAADBAAAA9QAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAA9QAA
+ AAAAAAAAAAAAAAAAAAAAAAD1AAAACgAAAAAAAAAAAAAAMgAAADEAAAAAAAAAAAAAAAsAAAD1AAAA9QAA
+ AAsAAAAAAAAAAAAAAGgAAAD+AAAA/AAAAPsAAAD8AAAA/gAAAPsAAAD+AAAAkAAAAAAAAAD1AAAACgAA
+ AAAAAAAAAAAAuQAAAFcAAAAAAAAAAAAAAAsAAAD1AAAAwQAAAE0AAAAAAAAAAAAAACAAAADrAAAADAAA
+ AAEAAABPAAAAwQAAACwAAADpAAAA6AAAACkAAADBAAAATgAAAAAAAAAdAAAA6wAAAAgAAAAAAAAAAAAA
+ AE0AAADBAAAAUAAAANYAAAAPAAAAAAAAAAAAAACvAAAAZgAAAA8AAADWAAAAUAAAALcAAABuAAAAbgAA
+ ALcAAABQAAAA1gAAAA8AAAB8AAAAlAAAAAAAAAAAAAAADwAAANYAAABQAAAAAAAAAIoAAADWAAAATgAA
+ AAsAAABLAAAA2wAAANYAAACKAAAASgAAANYAAAAEAAAABAAAANYAAABJAAAAigAAANYAAADiAAAAPQAA
+ AAsAAABOAAAA1gAAAIoAAAAAAAAAAAAAAAMAAABQAAAAwQAAAPQAAAD0AAAA8gAAAH0AAAAEAAAA1gAA
+ AEoAAAAAAAAAAAAAAEoAAADWAAAABAAAAHoAAADzAAAA9AAAAPQAAADBAAAAUAAAAAAAAAAAAAAAAgAA
+ AOEAAACOAAAANAAAAAoAAAAJAAAAhgAAAK8AAABuAAAAtwAAAAAAAAAAAAAAAAAAAAAAAAC3AAAAbgAA
+ AKAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAACFAAAA0QAAAPUAAAD2AAAA0wAA
+ AO4AAADrAAAALAAAAAMAAAADAAAAAwAAAAMAAAAsAAAA6QAAAO4AAAAVAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIYAAAD+AAAA+wAAAPsAAAD7AAAA+wAA
+ APsAAAD7AAAA/QAAAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIAAAD8AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAxgAAAEwAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYwAAAPsAAAD7AAAA/AAA
+ AGMAAAAAAAAAAAAAAAAAAAAnAAAA5gAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAABoAAAA/AAA
+ APsAAABiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP//
+ /wD///8A////AMD/AwCAfgEAHjx4AD88/AA/PMwAMATMADAAjAAYABgAgAABAIAYAwAAPD8AgAA/AP4A
+ fwD+AH8A/Bx/AP48PwD//n8A////AP///wD///8AKAAAABAAAAAgAAAAAQAgAAAAAABABAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAUAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAeAAAAUAAAADYAAAAAAAAAAAAAABAAAACvAAAAewAAAFoAAACcAAAAfgAAAAAAAAAAAAAAAAAA
+ AAAAAAB+AAAAnAAAAFoAAAB7AAAArgAAABAAAACZAAAALQAAAAAAAAAAAAAAAAAAAH0AAABKAAAAAAAA
+ AAAAAABKAAAAfQAAAAAAAAAAAAAAAAAAAC0AAACZAAAArQAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAnAAA
+ AAAAAAAAAAAAnAAAABAAAAAAAAAALAAAAAAAAAAAAAAArQAAAK0AAAAAAAAAAAAAAN0AAACpAAAAtAAA
+ ANkAAADiAAAAeAAAAJwAAAAQAAAAAQAAALQAAAAAAAAAAAAAAK0AAACZAAAALQAAAAAAAACGAAAAMgAA
+ AH0AAABjAAAAqgAAAKoAAABjAAAAfQAAAEIAAABzAAAAAAAAAC0AAACZAAAAEAAAAK8AAAB7AAAAdgAA
+ ANsAAAB+AAAAmgAAACkAAAApAAAAmgAAAH4AAADeAAAAcAAAAHsAAACuAAAAEAAAADEAAAB1AAAAUQAA
+ AFUAAAC8AAAASAAAAJAAAAAAAAAAAAAAAJAAAABCAAAAsQAAAFAAAAA2AAAAAAAAAAAAAAAAAAAARgAA
+ AJIAAAClAAAAmAAAAPQAAABoAAAAVQAAAFUAAABoAAAA8AAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAADAAAAAVQAAAFUAAABVAAAAVQAAAM4AAAAEAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAABkAAAAqQAAAJ0AAAAAAAAAAAAAACoAAAC9AAAAMgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAVQAAADIAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD//wAA//8AAMfjAAADwAAAOZwAAHmWAABgBgAAIAQAAAAAAAABgwAAgA8AAPgP
+ AADxjwAA/48AAP//AAD//wAA
+
+
+
\ No newline at end of file
diff --git a/BikeSharingSystem/PermutationCrossover.cs b/BikeSharingSystem/PermutationCrossover.cs
new file mode 100644
index 0000000..d1d7b52
--- /dev/null
+++ b/BikeSharingSystem/PermutationCrossover.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ public enum PermutationCrossover
+ {
+ HeuristicServiceEmergecy,
+ PositionBasedCross,
+ //NpointCut,
+ OrderCross,
+ Heuristic,
+ Hybrid
+
+ }
+}
diff --git a/BikeSharingSystem/PermutationGA.cs b/BikeSharingSystem/PermutationGA.cs
new file mode 100644
index 0000000..6d6d675
--- /dev/null
+++ b/BikeSharingSystem/PermutationGA.cs
@@ -0,0 +1,1747 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ public class PermutationGA : GA
+ {
+
+ int[] p1;
+ int[] p2;
+ private int[] selected;
+ int capacity = 14;
+ double time = 120;
+ double alpha = 0.5;
+ double[,] FromTo; //已經過加權計算的距離矩陣
+ double[,] PureFromTo;
+ double[] StartToVertex;
+ double[,] pheromone;
+ Station[] stations;
+ private PermutationMutation mutationType;
+ private PermutationCrossover crossoverType;
+ private _2ndCrossOver secondcrossverType;
+ int cut;
+ HybridACOGA hag;
+ int count = 0;
+ [Category("GA Setting")Description("突變的演算法")]
+ public PermutationMutation MutationType
+ {
+ get { return mutationType; }
+ set { mutationType = value; }
+ }
+
+ [Category("GA Setting")Description("基因交配的演算法")]
+ public PermutationCrossover CrossOverType
+ {
+ get { return crossoverType; }
+ set { crossoverType = value; }
+ }
+ [Category("GA Setting")Description("取卸單車段基因交配的演算法")]
+ public _2ndCrossOver SecondCrossOverType
+ {
+ get { return secondcrossverType; }
+ set { secondcrossverType = value; }
+ }
+ [Browsable(false)Category("GA Setting")Description("EmergentCrossover方法中決定距離和capacity per rate的權重")]
+ public double Alpha
+ {
+ get { return alpha; }
+ set
+ {
+ if (alpha <= 1)
+ { alpha = value; }
+ else { alpha = 0.5; }
+ }
+ }
+
+ [Browsable(false)Category("Problem Setting")Description("卡車負載量")]
+ public int TruckCapacity
+ {
+ get { return capacity; }
+ set { capacity = value; }
+ }
+ [Browsable(false)Category("Problem Setting")Description("觀察時間區段")]
+ public double TimeHorizon
+ {
+ get { return time; }
+ set { time = value; }
+ }
+ //[Category("GA Setting")Description("N point cut 最多為總站數-1")]
+ //public int Cut
+ //{
+ // get { return cut; }
+ // set
+ // {
+ // cut = value;
+ // if (cut > stations.Length)
+ // {
+ // cut = stations.Length;
+ // }
+ // else
+ // {
+ // while (stations.Length % cut != 0)
+ // {
+ // cut++;
+ // }
+ // }
+ // }
+ //}
+ public PermutationGA(int numberOfVariables, OptimizationType opType, GA.ObjectiveFunctionDelegate objectFunction, Station[] ss, double[,] distance,double []start) : base(numberOfVariables, opType, objectFunction)
+ {
+ stations = ss;
+ p1 = new int[numberOfGenes];
+ p2 = new int[numberOfGenes];
+ selected = new int[numberOfGenes];
+ cut = stations.Length / 2;
+ PureFromTo = new double[stations.Length, stations.Length];
+ //採用改良式 heuristic emergent service ㄉ作法
+ FromTo = new double[stations.Length, stations.Length];
+ StartToVertex = new double[stations.Length];
+ //for (int i = 0; i < stations.Length; i++)
+ Parallel.For(0,stations.Length,i=>
+ {
+ StartToVertex[i] = start[i];
+ for (int j = 0; j < stations.Length; j++)
+ {
+ PureFromTo[i, j] = distance[i, j];
+ if (stations[j].RatePerCapacity != 0)
+ {
+ //可以改進ㄉ地方
+ FromTo[i, j] = distance[i, j] + 0.01*(1/stations[j].RatePerCapacity);
+ //Console.Write(distance[i, j] + " " + 0.001*1/stations[j].RatePerCapacity + " ");
+ }
+ else
+ {
+ FromTo[i, j] = distance[i, j] * 18000;
+ }
+ }
+ });
+ //FromTo = distance;
+
+ hag = new HybridACOGA(stations.Length, OptimizationType.Min, objectFunction, FromTo,stations,TruckCapacity);
+ }
+
+ //remeber to add GA 's reset method into it
+ public void Greedyinitialize(double[,] d, double[] startTOvertex)
+ {
+
+ // Allocate memory for gene related data
+ chromosomes = new int[populationSize * 3][];
+ int[,] temp = new int[populationSize, numberOfGenes];
+ // Initialize the initial population
+ for (int i = 0; i < chromosomes.Length; i++)
+ {
+ chromosomes[i] = new int[numberOfGenes];
+ }
+ // Reset computation realted variables
+ soFarTheBestSolution = new int[numberOfGenes];
+ objectiveValues = new double[chromosomes.Length];
+ fitnessValues = new double[chromosomes.Length];
+ indices = new int[chromosomes.Length];
+
+
+ double[,] distance = new double[stations.Length, stations.Length];
+ double min = double.MaxValue; int last = -1; int next = -1;
+ List fitness = new List(); double judge = -1;
+ List routingsequence = new List();
+ double accumulate = 0;
+ double wheelarea = 0;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (min > startTOvertex[i]) { min = startTOvertex[i]; last = i; }
+ }
+ int start = last;
+ //開始加入chromosomes
+ for (int i = 0; i < this.chromosomes.Length; i++)
+ {
+ // start = last;
+ routingsequence.Clear();
+ routingsequence.Add(start);
+ fitness.Clear();
+ for (int r = 0; r < stations.Length; r++)
+ {
+ for (int c = 0; c < stations.Length; c++)
+ {
+ distance[r, c] = d[r, c];
+ }
+ }
+ this.chromosomes[i][2 * stations.Length] = rnd.Next(0, capacity + 1);
+ this.chromosomes[i][2 * stations.Length + 1] = rnd.Next(0, (int)TimeHorizon);
+ last = start;
+ do
+ {
+
+ accumulate = 0; fitness.Clear(); wheelarea = 0;
+ for (int b = 0; b < stations.Length; b++)
+ {
+ if (distance[last, b] != 0)
+ {
+ wheelarea += 1 / distance[last, b];
+ }
+ }
+ for (int k = 0; k < stations.Length; k++)
+ {
+ if (distance[last, k] != 0)
+ {
+ fitness.Add((1 / distance[last, k]) / wheelarea);
+ }else { fitness.Add(0); }
+ }
+ judge = rnd.NextDouble(); //並沒有用什麼 upperbound -
+ for (int a = 0; a < stations.Length; a++)
+ {
+ if (fitness.ElementAt(a) != 0)
+ {
+ accumulate += fitness.ElementAt(a);
+ if (judge <= accumulate)
+ {
+ next = a; routingsequence.Add(next);
+ break;
+ }
+ }
+ }
+ for (int j = 0; j < stations.Length; j++)
+ {
+ distance[j, last] = 0;
+ }
+ last = next;
+ } while (check(distance, next));
+
+ for (int j = 0; j < stations.Length; j++)
+ {
+ // this.chromosomes[i][j] = routingsequence.ElementAt(j);
+ this.chromosomes[i][routingsequence.ElementAt(j)] = j ;
+ if (stations[j].Rate > 0)//pickup
+ {
+ this.chromosomes[i][j + stations.Length] = -1 * rnd.Next(0, capacity + 1);
+ }
+ else if (stations[j].Rate < 0) //delivery
+ {
+ this.chromosomes[i][j + stations.Length] = rnd.Next(0, capacity + 1);
+ }
+ else
+ {
+ this.chromosomes[i][j + stations.Length] = rnd.Next(0, capacity + 1) * rnd.Next(-1, 2);
+ }
+ }
+ }
+
+ for (int j = 0; j < populationSize; j++)
+ {
+ objectiveValues[j] = GetObjectiveValueFunction(chromosomes[j]);
+ }
+ iterationCount = 0;
+ soFarTheBestObjective = ((optimizationType == OptimizationType.Min) ? double.MaxValue : double.MinValue);
+ }
+ private bool check(double[,] m, int n)
+ {
+ bool flag = false;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (m[n, i] != 0) { flag = true; break; }
+ }
+ return flag;
+ }
+ //give ga a initial solution
+ public override void initializePopulation()
+ {
+ int totalstation = stations.Length;
+ for (int i = 0; i < populationSize; i++)
+ {
+ for (int j = 0; j < stations.Length; j++)
+ {
+ //this.chromosomes[i][j] = stations[totalstation - j - 1].StationID;
+ this.chromosomes[i][j] = j;
+ if (stations[j].Rate > 0)//pickup
+ {
+ this.chromosomes[i][j + totalstation] = -1 * rnd.Next(0, capacity + 1);
+ }
+ else if (stations[j].Rate < 0) //delivery
+ {
+ this.chromosomes[i][j + totalstation] = rnd.Next(0, capacity + 1);
+ }
+ else
+ {
+ this.chromosomes[i][j + totalstation] = rnd.Next(0, capacity + 1) * rnd.Next(-1, 2);
+ }
+ }
+ KnuthShuffle(this.chromosomes[i]);
+ this.chromosomes[i][2 * totalstation] = rnd.Next(0, capacity + 1);
+ //this.chromosomes[i][2 * totalstation + 1] = rnd.Next(0, (int)TimeHorizon);
+ }
+ //initialize pheromone
+ pheromone = new double[stations.Length, TruckCapacity + 1];
+ hag.TruckCapacity = TruckCapacity;
+ for (int i = 0; i < totalstation; i++)
+ {
+ for (int j = 0; j < TruckCapacity; j++)
+ {
+ pheromone[i, j] = 0.01;
+ }
+ }
+ }
+
+ public void KnuthShuffle(int[] array)
+ {
+ int temp;
+ for (int i = 0; i < (array.Length - 2) / 2; i++)
+ {
+ int j = rnd.Next(i, (array.Length - 2) / 2); // Don't select from the entire array on subsequent loops
+ temp = array[i]; array[i] = array[j]; array[j] = temp;
+ }
+ }
+
+ private void swap(int target, int pos, int[] chromo) //not too sure about whehter it will amend the value of p1 or p2
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromo[i] == target)
+ {
+ chromo[i] = chromo[pos];
+ chromo[pos] = target;
+ break;
+ }
+ }
+ }
+ //use N-point cut for crossover operation
+ public override void generateAPairOfCrossoveredOffspring(int fartherIdx, int motherIdx, int child1Idx, int child2Idx)
+ {
+ switch (crossoverType)
+ {
+ //case PermutationCrossover.NpointCut:
+ // {
+ // //對前面的(this.numberOfGenes-2)/2 做 N Point cut
+ // int subinterval = stations.Length / cut;
+ // this.chromosomes[fartherIdx].CopyTo(p1, 0);
+ // this.chromosomes[motherIdx].CopyTo(p2, 0);
+ // int c = 0;
+ // for (int i = 0; i < stations.Length; i += subinterval)
+ // {
+ // c++;
+ // for (int j = i; j < i + subinterval; j++) //會有站點重複的問題
+ // {
+ // if (c % 2 == 0)
+ // {
+ // swap(p1[j], j, p2);
+ // }
+ // else
+ // {
+ // swap(p1[j], j, p1);
+ // }
+ // }
+ // }
+ // p1.CopyTo(this.chromosomes[child1Idx], 0);
+ // p2.CopyTo(this.chromosomes[child2Idx], 0);
+ // //對後面的(this.numberOfGenes-2)/2 做 N Point cut
+ // //先算出總共可以切成幾段
+ // int interval = (numberOfGenes - stations.Length) / cut;
+ // int count = 0;
+ // for (int a = stations.Length; a < this.numberOfGenes - 1; a += interval) //might be some wrong...
+ // {
+ // if (count % 2 == 0)
+ // {
+ // for (int b = a; b < a + interval; b++)
+ // {
+ // this.chromosomes[child1Idx][b] = this.chromosomes[fartherIdx][b];
+ // this.chromosomes[child2Idx][b] = this.chromosomes[motherIdx][b];
+ // }
+ // }
+ // else
+ // {
+ // for (int b = a; b < a + interval; b++)
+ // {
+ // this.chromosomes[child1Idx][b] = this.chromosomes[motherIdx][b];
+ // this.chromosomes[child2Idx][b] = this.chromosomes[fartherIdx][b];
+ // }
+ // }
+ // count++;
+ // }
+
+ // break;
+ // }
+ case PermutationCrossover.OrderCross:
+ {
+ int start = rnd.Next((numberOfGenes - 2) / 2);
+ int end, temp;
+ do
+ {
+ end = rnd.Next((numberOfGenes - 2) / 2);
+ }
+ while (start == end);
+ if (start > end)
+ {
+ temp = end;
+ end = start;
+ start = temp;
+ }
+ for (int a = 0; a < numberOfGenes; a++)
+ {
+ if (a >= start && a <= end)
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = -1;
+ this.chromosomes[child2Idx][a] = -1;
+ }
+ }
+ int c, count;
+ for (int a = 0; a < ((numberOfGenes - 2) / 2); a++)
+ {
+ c = 0; count = 0;
+ if (a < start || a > end)
+ {
+ while (this.chromosomes[child1Idx].Contains(this.chromosomes[motherIdx][c]) && c < ((numberOfGenes - 2) / 2 - 1))
+ {
+ c++;
+ }
+ this.chromosomes[child1Idx][a] = this.chromosomes[motherIdx][c];
+ while (this.chromosomes[child2Idx].Contains(this.chromosomes[fartherIdx][count]) && count < ((numberOfGenes - 2) / 2 - 1))
+ {
+ count++;
+ }
+ this.chromosomes[child2Idx][a] = this.chromosomes[fartherIdx][count];
+ }
+ }
+
+ break;
+ }
+ case PermutationCrossover.PositionBasedCross:
+ {
+ for (int j = 0; j < (numberOfGenes - 1) / 2; j++)
+ {
+ if (rnd.Next(2) == 0)
+ {
+ this.selected[j] = 1;
+ }
+ else
+ {
+ this.selected[j] = 0;
+ }
+ this.p1[this.chromosomes[fartherIdx][j]] = this.selected[j];
+ this.p2[this.chromosomes[motherIdx][j]] = this.selected[j];
+ }
+ int mom = 0;
+ int dad = 0;
+ for (int j = 0; j < (numberOfGenes - 1) / 2; j++)
+ {
+ if (this.selected[j] == 1)
+ {
+ this.chromosomes[child1Idx][j] = this.chromosomes[fartherIdx][j];
+ this.chromosomes[child2Idx][j] = this.chromosomes[motherIdx][j];
+ }
+ else
+ {
+ while (this.p1[this.chromosomes[motherIdx][dad]] == 1)
+ {
+ dad++;
+ }
+ this.chromosomes[child1Idx][j] = this.chromosomes[motherIdx][dad];
+ dad++;
+ while (this.p2[this.chromosomes[fartherIdx][mom]] == 1)
+ {
+ mom++;
+ }
+ this.chromosomes[child2Idx][j] = this.chromosomes[fartherIdx][mom];
+ mom++;
+ }
+ }
+
+
+ break;
+ }
+ case PermutationCrossover.Heuristic://sometimes it is data wrong ... like two stations distance = 0?!!!
+ {//use 草稿紙
+ List PossibleStation = new List();
+ int[] routingSequence = new int[stations.Length];
+ int[] r2 = new int[stations.Length];
+ double[,] d1 = new double[stations.Length, stations.Length];
+ double[,] d2 = new double[stations.Length, stations.Length];
+ int p1startStation = rnd.Next(0, stations.Length);
+ int p2startStation;
+ do
+ {
+ p2startStation = rnd.Next(0, stations.Length);
+ } while (p1startStation == p2startStation);
+ //find the first sation and let its sequence be first
+ for (int i = 0; i < stations.Length; i++)
+ {
+ routingSequence[i] = -1;
+ r2[i] = -1;
+ for (int j = 0; j < stations.Length; j++)
+ {
+ d1[i, j] = PureFromTo[i, j];
+ d2[i, j] = PureFromTo[i, j];
+ if (j == p1startStation) { d1[i, j] = double.MaxValue; }
+ if (j == p2startStation) { d2[i, j] = double.MaxValue; }
+ }
+ }
+ routingSequence[p1startStation] = 0;
+ r2[p2startStation] = 0;
+ int sequence = 1;
+ //start to construct
+ while (routingSequence.Contains(-1))
+ {
+ PossibleStation.Clear();
+ if (chromosomes[fartherIdx][p1startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[fartherIdx][p1startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p1startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p1startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+
+ if (chromosomes[motherIdx][p1startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[motherIdx][p1startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p1startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p1startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+ //將較近的站設為下一個起始點
+ p1startStation = NearStation(PossibleStation, p1startStation, d1);
+ if (routingSequence[p1startStation] == -1)
+ {
+ routingSequence[p1startStation] = sequence;
+ sequence++;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ d1[i, p1startStation] = double.MaxValue;
+ }
+ }
+ else { throw new Exception("bug"); }
+ }
+ routingSequence.CopyTo(this.chromosomes[child1Idx], 0);
+ sequence = 1;
+ while (r2.Contains(-1))
+ {
+ PossibleStation.Clear();
+ if (chromosomes[fartherIdx][p2startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[fartherIdx][p2startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p2startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p2startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+
+ if (chromosomes[motherIdx][p2startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[motherIdx][p2startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p2startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p2startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+ //將較近的站設為下一個起始點
+ p2startStation = NearStation(PossibleStation, p2startStation, d2);
+ if (r2[p2startStation] == -1)
+ {
+ r2[p2startStation] = sequence;
+ sequence++;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ d2[i, p2startStation] = double.MaxValue;
+ }
+ }
+ else { throw new Exception("bug"); }
+ }
+ r2.CopyTo(this.chromosomes[child2Idx], 0);
+
+ break;
+ }
+ case PermutationCrossover.Hybrid:
+ {
+ if (count == 0) { hag.reset(populationSize); count++; }
+ //if (count <= 1000)
+ //{
+ hag.antsConstructSolutions();
+ hag.ComputeObjectiveValues();
+ hag.updatePheromone();
+ //count++;
+ //}
+
+ for (int i = 0; i < stations.Length*2+2; i++)
+ {
+ this.chromosomes[child1Idx][i] = hag.chromosome[0][i];
+ this.chromosomes[child2Idx][i] = hag.chromosome[1][i];
+ }
+ break;
+ }
+ case PermutationCrossover.HeuristicServiceEmergecy://rate per capacity * distance to choose
+ {
+ List PossibleStation = new List();
+ int[] routingSequence = new int[stations.Length];
+ int[] r2 = new int[stations.Length];
+ double[,] d1 = new double[stations.Length, stations.Length];
+ double[,] d2 = new double[stations.Length, stations.Length];
+ int p1startStation = rnd.Next(0, stations.Length);
+ int p2startStation;
+ do
+ {
+ p2startStation = rnd.Next(0, stations.Length);
+ } while (p1startStation == p2startStation);
+ //find the first sation and let its sequence be first
+ //for(int i = 0; i < stations.Length;i++)
+ Parallel.For(0, stations.Length, i =>
+ {
+ routingSequence[i] = -1;
+ r2[i] = -1;
+ for (int j = 0; j < stations.Length; j++)
+ {
+ //可以改進ㄉ地方
+ d1[i, j] = FromTo[i, j];
+ d2[i, j] = FromTo[i, j];
+
+
+ if (j == p1startStation) { d1[i, j] = double.MaxValue; }
+ if (j == p2startStation) { d2[i, j] = double.MaxValue; }
+ }
+ });
+ //for (int i = 0; i < stations.Length; i++)
+ //{
+ // routingSequence[i] = -1;
+ // r2[i] = -1;
+ // for (int j = 0; j < stations.Length; j++)
+ // {
+ // //可以改進ㄉ地方
+ // d1[i, j] = FromTo[i, j];
+ // d2[i, j] = FromTo[i, j];
+
+
+ // if (j == p1startStation) { d1[i, j] = double.MaxValue; }
+ // if (j == p2startStation) { d2[i, j] = double.MaxValue; }
+ // }
+ //}
+ routingSequence[p1startStation] = 0;
+ r2[p2startStation] = 0;
+ int sequence = 1;
+ //start to construct
+ while (routingSequence.Contains(-1))
+ {
+ PossibleStation.Clear();
+ if (chromosomes[fartherIdx][p1startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[fartherIdx][p1startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p1startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p1startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+
+ if (chromosomes[motherIdx][p1startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[motherIdx][p1startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p1startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p1startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+ //將較近的站設為下一個起始點
+ p1startStation = NearStation(PossibleStation, p1startStation, d1);
+ //p1startStation = NearStation(PossibleStation, p1startStation, d1);
+ if (routingSequence[p1startStation] == -1)
+ {
+ routingSequence[p1startStation] = sequence;
+ sequence++;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ d1[i, p1startStation] = double.MaxValue;
+ }
+ }
+ else { throw new Exception("bug"); }
+ }
+ routingSequence.CopyTo(this.chromosomes[child1Idx], 0);
+ sequence = 1;
+ while (r2.Contains(-1))
+ {
+ PossibleStation.Clear();
+ if (chromosomes[fartherIdx][p2startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[fartherIdx][p2startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p2startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[fartherIdx][i] == chromosomes[fartherIdx][p2startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+
+ if (chromosomes[motherIdx][p2startStation] == 0)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == 1) { PossibleStation.Add(i); break; }
+ }
+ }
+ else if (chromosomes[motherIdx][p2startStation] == stations.Length - 1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == stations.Length - 2) { PossibleStation.Add(i); break; }
+ }
+ }
+ else
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p2startStation] - 1) { PossibleStation.Add(i); }
+ if (chromosomes[motherIdx][i] == chromosomes[motherIdx][p2startStation] + 1) { PossibleStation.Add(i); }
+ }
+ }
+ //將較近的站設為下一個起始點
+ p2startStation = NearStation(PossibleStation, p2startStation, d2);
+ //p2startStation = NearStation(PossibleStation, p2startStation, d2);
+ if (r2[p2startStation] == -1)
+ {
+ r2[p2startStation] = sequence;
+ sequence++;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ d2[i, p2startStation] = double.MaxValue;
+ }
+ }
+ else { throw new Exception("bug"); }
+ }
+ r2.CopyTo(this.chromosomes[child2Idx], 0);
+ break;
+ }
+ }
+ switch (secondcrossverType)
+ {
+ case _2ndCrossOver.FBMS:
+ {
+ //採用 FMBS
+ for (int a = stations.Length; a < this.numberOfGenes - 1; a++)
+ {
+ alpha = rnd.NextDouble();
+ if (stations[a - stations.Length].Rate > 0)
+ {
+ if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = -(int)(-(this.chromosomes[fartherIdx][a]) * alpha + (1 - alpha) * (-this.chromosomes[motherIdx][a] + 1));
+ this.chromosomes[child1Idx][a]
+ = -(int)((-this.chromosomes[fartherIdx][a]) * (1 - alpha) + alpha * (-this.chromosomes[motherIdx][a] + 1));
+ }
+ else if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = -(int)((-this.chromosomes[fartherIdx][a] + 1) * (1 - alpha) + alpha * -this.chromosomes[motherIdx][a]);
+ this.chromosomes[child2Idx][a]
+ = -(int)((-this.chromosomes[fartherIdx][a] + 1) * alpha + (1 - alpha) * -this.chromosomes[motherIdx][a]);
+ }
+ else
+ {
+ this.chromosomes[child2Idx][a] = this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ }
+ }
+ else if (stations[a - stations.Length].Rate < 0)
+ {
+ if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a]) * alpha + (1 - alpha) * (this.chromosomes[motherIdx][a] + 1));
+ this.chromosomes[child1Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a]) * (1 - alpha) + alpha * (this.chromosomes[motherIdx][a] + 1));
+ }
+ else if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a] + 1) * (1 - alpha) + alpha * this.chromosomes[motherIdx][a]);
+ this.chromosomes[child2Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a] + 1) * alpha + (1 - alpha) * this.chromosomes[motherIdx][a]);
+ }
+ else
+ {
+ this.chromosomes[child2Idx][a] = this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ }
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ //test 實數解的出線機率是否相同
+ //Console.Write(this.chromosomes[child2Idx][a] + " ");
+ }
+ alpha = rnd.NextDouble();
+ if (this.chromosomes[motherIdx][numberOfGenes - 1] > this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1]) * alpha + (1 - alpha) * (this.chromosomes[motherIdx][numberOfGenes - 1] + 1));
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1]) * (1 - alpha) + alpha * (this.chromosomes[motherIdx][numberOfGenes - 1] + 1));
+ }
+ else if (this.chromosomes[motherIdx][numberOfGenes - 1] < this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * (1 - alpha) + alpha * this.chromosomes[motherIdx][numberOfGenes - 1]);
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * alpha + (1 - alpha) * this.chromosomes[motherIdx][numberOfGenes - 1]);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1] = this.chromosomes[child2Idx][numberOfGenes - 1] = this.chromosomes[motherIdx][numberOfGenes - 1];
+ }
+
+ break;
+ }
+ case _2ndCrossOver.TES:
+ {
+ //採用 TES
+ for (int a = stations.Length; a < this.numberOfGenes - 1; a++)
+ {
+ alpha = rnd.NextDouble();
+ if (stations[a - stations.Length].Rate > 0)
+ {
+
+ if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = -(int)((-this.chromosomes[motherIdx][a]) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][a]
+ = -(int)((-this.chromosomes[fartherIdx][a] + 1) * (1 - alpha) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = -(int)(-(this.chromosomes[fartherIdx][a]) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][a]
+ = -(int)((1-alpha) * (-this.chromosomes[motherIdx][a] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child2Idx][a] = this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ }
+
+ }
+ else if (stations[a - stations.Length].Rate < 0)
+ {
+ if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = (int)((this.chromosomes[motherIdx][a]) * alpha + (1 - alpha) * (TruckCapacity+1));
+ this.chromosomes[child1Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a]+1)* (1 - alpha)+alpha);
+ }
+ else if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a]) * alpha + (1 - alpha) * (TruckCapacity+1));
+ this.chromosomes[child2Idx][a]
+ = (int)((1 - alpha) * (this.chromosomes[motherIdx][a]+1)+alpha);
+ }
+ else
+ {
+ this.chromosomes[child2Idx][a] = this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ }
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ //Console.Write(this.chromosomes[child1Idx][a] + " ");
+ }
+
+ if (this.chromosomes[motherIdx][numberOfGenes-1] > this.chromosomes[fartherIdx][numberOfGenes-1])
+ {
+ this.chromosomes[child2Idx][numberOfGenes-1]
+ = (int)((this.chromosomes[motherIdx][numberOfGenes-1]) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * (1 - alpha) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][numberOfGenes - 1] < this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1]) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((1 - alpha) * (this.chromosomes[motherIdx][numberOfGenes - 1] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child2Idx][numberOfGenes - 1] = this.chromosomes[child1Idx][numberOfGenes - 1] = this.chromosomes[fartherIdx][numberOfGenes - 1];
+ }
+
+ break;
+ }
+ case _2ndCrossOver.LVD:
+ {
+ //採用 LVD
+ for (int a = stations.Length; a < this.numberOfGenes - 1; a++)
+ {
+ rnd.NextDouble();
+ if (stations[a - stations.Length].Rate > 0)
+ {
+ if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = -(int)Math.Ceiling(-(1 + this.chromosomes[motherIdx][a]) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][a] = -(int)((1 - alpha) * (-this.chromosomes[motherIdx][a] + 1) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = -(int)Math.Ceiling((1 + this.chromosomes[fartherIdx][a]) * -alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][a] = -(int)((1 - alpha) * (-this.chromosomes[fartherIdx][a] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+
+ }
+ else if (stations[a - stations.Length].Rate < 0)
+ {
+ if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = (int)Math.Ceiling((this.chromosomes[motherIdx][a] - 1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][a] = (int)((1 - alpha) * (this.chromosomes[motherIdx][a] + 1) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = (int)Math.Ceiling((this.chromosomes[fartherIdx][a] - 1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][a] = (int)((1 - alpha) * (this.chromosomes[fartherIdx][a] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ //Console.Write(this.chromosomes[child1Idx][a] + " ");
+ }
+ //for initial goods
+ if (this.chromosomes[motherIdx][numberOfGenes - 1] > this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][numberOfGenes -1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * (1 - alpha) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][numberOfGenes - 1] < this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[motherIdx][numberOfGenes - 1] + 1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((1 - alpha) * (this.chromosomes[motherIdx][numberOfGenes - 1] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1] = this.chromosomes[child2Idx][numberOfGenes - 1] = this.chromosomes[motherIdx][numberOfGenes - 1];
+ }
+
+ break;
+ }
+ case _2ndCrossOver.SVD:
+ {
+ //採用 SVD
+ for (int a = stations.Length; a < this.numberOfGenes - 1; a++)
+ {
+ alpha = rnd.NextDouble();
+ if (stations[a - stations.Length].Rate > 0)
+ {
+
+ if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = -(int)((this.chromosomes[fartherIdx][a]-1) * -alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][a]
+ = -(int)((-this.chromosomes[fartherIdx][a] + 1) * (1 - alpha) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = -(int)((this.chromosomes[motherIdx][a]-1) * -alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][a]
+ = -(int)((1 - alpha) * (-this.chromosomes[motherIdx][a] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+
+ }
+ else if (stations[a - stations.Length].Rate < 0)
+ {
+ if (this.chromosomes[motherIdx][a] > this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child2Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a]+1) * alpha + (1 - alpha) * (TruckCapacity+1));
+ this.chromosomes[child1Idx][a]
+ = (int)((this.chromosomes[fartherIdx][a]+1) * (1 - alpha)+alpha);
+ }
+ else if (this.chromosomes[motherIdx][a] < this.chromosomes[fartherIdx][a])
+ {
+ this.chromosomes[child1Idx][a]
+ = (int)((this.chromosomes[motherIdx][a]+1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][a]
+ = (int)((1 - alpha) * (this.chromosomes[motherIdx][a]+1)+alpha);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ }
+ else
+ {
+ this.chromosomes[child1Idx][a] = this.chromosomes[fartherIdx][a];
+ this.chromosomes[child2Idx][a] = this.chromosomes[motherIdx][a];
+ }
+ // Console.Write(this.chromosomes[child1Idx][a] + " ");
+ }
+
+ //for initial goods
+ if (this.chromosomes[motherIdx][numberOfGenes - 1] > this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[fartherIdx][numberOfGenes - 1] + 1) * (1 - alpha) + alpha);
+ }
+ else if (this.chromosomes[motherIdx][numberOfGenes - 1] < this.chromosomes[fartherIdx][numberOfGenes - 1])
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1]
+ = (int)((this.chromosomes[motherIdx][numberOfGenes - 1] + 1) * alpha + (1 - alpha) * (TruckCapacity + 1));
+ this.chromosomes[child2Idx][numberOfGenes - 1]
+ = (int)((1 - alpha) * (this.chromosomes[motherIdx][numberOfGenes - 1] + 1) + alpha);
+ }
+ else
+ {
+ this.chromosomes[child1Idx][numberOfGenes - 1] = this.chromosomes[child2Idx][numberOfGenes - 1] = this.chromosomes[motherIdx][numberOfGenes - 1];
+ }
+
+ break;
+ }
+ case _2ndCrossOver.pheromone:
+ { //先用full range
+ //for (int a = stations.Length; a < this.numberOfGenes - 2; a++)
+ //{
+ // if (stations[a - stations.Length].Rate > 0)
+ // {
+ // this.chromosomes[child2Idx][a]
+ // = rnd.Next(-TruckCapacity, 0);
+ // this.chromosomes[child1Idx][a]
+ // = rnd.Next(-TruckCapacity, 0);
+ // }
+ // else if (stations[a - stations.Length].Rate < 0)
+ // {
+
+ // this.chromosomes[child2Idx][a]
+ // = rnd.Next(1, TruckCapacity + 1);
+ // this.chromosomes[child1Idx][a]
+ // = rnd.Next(1, TruckCapacity + 1);
+ // }
+ // else
+ // {
+ // this.chromosomes[child1Idx][a]
+ // = rnd.Next(-TruckCapacity, TruckCapacity + 1);
+ // this.chromosomes[child2Idx][a]
+ // = rnd.Next(-TruckCapacity, TruckCapacity + 1);
+ // }
+ //}
+ //// Console.Write(this.chromosomes[child1Idx][a] + " ");
+ //this.chromosomes[child2Idx][numberOfGenes - 2] = rnd.Next(0, TruckCapacity + 1);
+ //this.chromosomes[child1Idx][numberOfGenes - 2] = rnd.Next(0, TruckCapacity + 1);
+ //this.chromosomes[child1Idx][numberOfGenes - 1] = rnd.Next(0, (int)TimeHorizon);
+ //this.chromosomes[child2Idx][numberOfGenes - 1] = rnd.Next(0, (int)TimeHorizon);
+ //stochastic select p and d amount
+ int[] chosenpd = new int[stations.Length];
+ double wheelarea = 0.0; double hit = 0;double[] fv = new double[TruckCapacity+1];
+ for (int i = 0;i < stations.Length; i++)
+ {
+ wheelarea = 0.0;
+ for (int j = 0; j <= TruckCapacity; j++)
+ {
+ wheelarea+=pheromone[i, j];
+ fv[j] = wheelarea;
+ }
+
+ hit = rnd.NextDouble() * wheelarea;
+ for (int j = 0; j <= TruckCapacity; j++)
+ {
+ if (hit <= fv[j])
+ {
+ if (stations[i].Rate<=0)
+ {
+ chosenpd[i] = j;
+ }
+ else if(stations[i].Rate > 0)
+ {
+ chosenpd[i] = -j;
+ }
+ else
+ {
+ chosenpd[i] = j;
+ }
+ break;
+ }
+ }
+ }
+
+ for (int i = stations.Length ; i < stations.Length*2 ; i++)
+ {
+ chromosomes[child1Idx][i] = chosenpd[i -stations.Length];
+ //Console.Write(chromosomes[child1Idx][i] + " ");
+ }
+ //Console.WriteLine();
+ //get child2 gene
+ for (int i = 0; i < stations.Length; i++)
+ {
+ wheelarea = 0.0;
+ for (int j = 0; j <= TruckCapacity; j++)
+ {
+ wheelarea += pheromone[i, j];
+ fv[j] = wheelarea;
+ }
+ hit = rnd.NextDouble() * wheelarea;
+ for (int j = 0; j <= TruckCapacity; j++)
+ {
+ if (hit <= fv[j])
+ {
+ if (stations[i].Rate <= 0)
+ {
+ chosenpd[i] = j;
+ }
+ else if (stations[i].Rate > 0)
+ {
+ chosenpd[i] = -j;
+ }
+ else
+ {
+ chosenpd[i] = j;
+ }
+ break;
+ }
+ }
+ }
+
+ for (int i = stations.Length; i < stations.Length*2; i++)
+ {
+ chromosomes[child2Idx][i] = chosenpd[i - stations.Length ];
+ //Console.Write(chromosomes[child2Idx][i] + " ");
+ }
+ //Console.WriteLine();
+
+ break;
+ }
+ }
+ //print it and see repeate or not
+ //Console.WriteLine();
+ //Console.Write("child1 solutions: ");
+ //for (int i = 0; i < numberOfGenes; i++)
+ //{
+ // Console.Write(chromosomes[child1Idx][i] + " ");
+ //}
+ //Console.WriteLine();
+ //Console.Write("child2 solutions: ");
+ //for (int i = 0; i < numberOfGenes; i++)
+ //{
+ // Console.Write(chromosomes[child2Idx][i] + " ");
+ //}
+ }
+ //為了使卡車可以pickup delivery相間的作法
+ //private int PDNear(List possible, int start, double[,] d)
+ //{
+ // int change ,next ;double compare;
+ // if (stations[start].Rate > 0)
+ // {
+ // change = 1;
+ // }
+ // else if(stations[start].Rate < 0)
+ // {
+ // change = -1;
+ // }else
+ // {
+ // change = 10;
+ // }
+ // int target = -1; double min = double.MaxValue;
+ // for (int i = 0; i < possible.Count; i++)
+ // {
+ // if(stations[possible[i]].Rate > 0)
+ // {
+ // next = 1;
+ // compare = next*d[start, possible[i]]*change;
+ // }
+ // else if (stations[possible[i]].Rate < 0)
+ // {
+ // next = -1;
+ // compare = next * d[start, possible[i]] * change;
+ // }
+ // else
+ // {
+ // compare = 10 * d[start, possible[i]] * change;
+ // }
+ // if(d[start, possible[i]] == double.MaxValue)
+ // {
+ // compare = double.MaxValue;
+ // }
+ // if (min > compare)
+ // {
+ // min = compare;
+ // target = possible[i];
+ // }
+ // }
+ // if (target == -1)
+ // {
+ // for (int i = 0; i < stations.Length; i++)
+ // {
+ // if (d[start, i] != 0 && min > d[start, i])
+ // {
+ // min = d[start, i];
+ // target = i;
+ // }
+ // }
+ // }
+
+ // return target;
+ //}
+ public void updatePheromonetable()
+ {
+ //update pheromone table only add the best solution pheromone
+ for (int j = 0; j < stations.Length; j++)
+ {
+ pheromone[soFarTheBestSolution[j], Math.Abs(soFarTheBestSolution[j + stations.Length])] += 100 * 1 / soFarTheBestObjective;
+ }
+ // Evaporate the pheromone for all pheromone values
+ for (int r = 0; r < pheromone.GetLength(0); r++)
+ for (int c = 0; c < pheromone.GetLength(1); c++)
+ pheromone[r, c] *= 0.9;
+ }
+ private int NearStation(List possible, int start, double[,] d)
+ {
+ int target = -1; double min = double.MaxValue;
+ for (int i = 0; i < possible.Count; i++)
+ {
+ if (min > d[start, possible[i]])
+ {
+ min = d[start, possible[i]];
+ target = possible[i];
+ }
+ }
+ if (target == -1)
+ {
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (d[start, i] != 0 && min > d[start, i])
+ {
+ min = d[start, i];
+ target = i;
+ }
+ }
+ }
+
+ return target;
+ }
+ private int NearStation(int start, double[,] d)
+ {
+ int target = -1; double min = double.MaxValue;
+ for (int i = 0; i < stations.Length; i++)
+ {
+ if (d[start, i] != 0 && min > d[start, i])
+ {
+ min = d[start, i];
+ target = i;
+ }
+ }
+ return target;
+ }
+ //use Random assignment for mutation
+ public override void performMutateOperation()
+ {
+ numberOfMutatedChildren = Convert.ToInt32(mutationRate * populationSize);
+ int total = populationSize + numberOfCrossoveredChildren;
+ int mutateID; int MutateSource;
+ for (int i = 0; i < numberOfMutatedChildren; i++)
+ {
+ mutateID = total + i;
+ MutateSource = rnd.Next(populationSize + 1);
+ for (int j = 0; j < numberOfGenes; j++)
+ {
+ chromosomes[mutateID][j] = chromosomes[MutateSource][j];
+ }
+ switch (mutationType)
+ { //amend it!
+ case PermutationMutation.Inversion:
+ {
+ int from = rnd.Next((numberOfGenes - 1) / 2 + 1);
+ int to;
+ do
+ {
+ to = rnd.Next((numberOfGenes - 1) / 2 + 1);
+ }
+ while (Math.Abs(from - to) > (numberOfGenes - 1) / 2 || (from == to));
+ int temp;
+ if (from > to)
+ {
+ temp = from;
+ from = to;
+ to = temp;
+ }
+ int chpos = -1;
+ for (int a = from; a < (from + to) / 2; a++)
+ {
+ chpos = rnd.Next(from, to + 1);
+ temp = chromosomes[mutateID][chpos];
+ chromosomes[mutateID][chpos] = chromosomes[mutateID][a];
+ chromosomes[mutateID][a] = temp;
+ }
+ for (int a = stations.Length; a < numberOfGenes - 2; a++)
+ {
+ if (stations[a - stations.Length].Rate < 0)
+ {
+ chromosomes[mutateID][a] = rnd.Next(0, TruckCapacity);
+ }
+ else if (stations[a - stations.Length].Rate > 0)
+ {
+ chromosomes[mutateID][a] = -rnd.Next(0, TruckCapacity);
+ }
+ }
+ chromosomes[mutateID][numberOfGenes - 2] = rnd.Next(0, capacity + 1);//truck start routing time
+ break;
+ }
+
+ case PermutationMutation.ReciprocalExchange:
+ {
+ int small;
+ int big; int temp;
+ //small = rnd.Next((numberOfGenes - 2) / 2);
+ //do
+ //{
+ // big = rnd.Next((numberOfGenes - 2) / 2);
+ //}
+ //while (small == big);
+ //if (small > big)
+ //{
+ // temp = small;
+ // small = big;
+ // big = temp;
+ //}
+ //int half = (big - small + 1) / 2;
+ //for (int a = 0; a < half; a++)
+ //{
+ // temp = chromosomes[mutateID][small + a];
+ // chromosomes[mutateID][small + a] = chromosomes[mutateID][big - a];
+ // chromosomes[mutateID][big - a] = temp;
+ //}
+ int selectednumber = rnd.Next(stations.Length);
+ for(int j = 0; j < selectednumber; j++)
+ {
+ big = rnd.Next(stations.Length);small = rnd.Next(stations.Length);
+ temp = chromosomes[mutateID][small];
+ chromosomes[mutateID][small] = chromosomes[mutateID][big];
+ chromosomes[mutateID][big] = temp;
+ }
+ for (int a = stations.Length; a < numberOfGenes - 2; a++)
+ {
+ if (stations[a - stations.Length].Rate < 0)
+ {
+ chromosomes[mutateID][a] = rnd.Next(0, TruckCapacity);
+ }
+ else if (stations[a - stations.Length].Rate > 0)
+ {
+ chromosomes[mutateID][a] = -rnd.Next(0, TruckCapacity);
+ }
+ }
+ chromosomes[mutateID][numberOfGenes - 1] = rnd.Next(0, capacity + 1);//truck start routing time
+
+ break;
+ }
+
+ case PermutationMutation.RandomAssignment:
+ {
+ //int totalchange = rnd.Next((numberOfGenes - 2) / 2);
+ //int insert, selected, temp;
+ //for (int a = 0; a < totalchange; a++)
+ //{
+ // selected = rnd.Next((numberOfGenes - 2) / 2);
+ // do
+ // {
+ // insert = rnd.Next((numberOfGenes - 2) / 2);
+ // }
+ // while (insert == selected);
+ // temp = chromosomes[mutateID][selected];
+ // chromosomes[mutateID][selected] = chromosomes[mutateID][insert];
+ // chromosomes[mutateID][insert] = temp;
+ //}
+ //int selected = rnd.Next((numberOfGenes - 2) / 2);
+ //int insert;
+ //do
+ //{
+ // insert = rnd.Next((numberOfGenes - 2) / 2);
+ //}
+ //while (insert == selected);
+ //int temp;
+ //temp = chromosomes[mutateID][selected];
+ //chromosomes[mutateID][selected] = chromosomes[mutateID][insert];
+ //chromosomes[mutateID][insert] = temp;
+ for (int a = stations.Length; a < numberOfGenes - 1; a++)
+ {
+ if (stations[a - stations.Length].Rate < 0)
+ {
+ chromosomes[mutateID][a] = rnd.Next(0, TruckCapacity/2);
+ }
+ else if (stations[a - stations.Length].Rate > 0)
+ {
+ chromosomes[mutateID][a] = -rnd.Next(0, TruckCapacity/2);
+ }
+ }
+ chromosomes[mutateID][numberOfGenes - 1] = rnd.Next(0, capacity + 1);//truck start routing time
+
+ break;
+ }
+ case PermutationMutation.TSPHeuristic:
+ {
+ int mutateAmount = -1;
+ if (stations.Length <= 8)
+ {
+ mutateAmount = rnd.Next(0, stations.Length);
+ }
+ else
+ {
+ mutateAmount = 8;
+ }
+ List mutatePosition = new List();
+ int chosen;
+ while (mutatePosition.Count <= mutateAmount)
+ {
+ chosen = rnd.Next(0, stations.Length);
+ if (!mutatePosition.Contains(chosen))
+ { mutatePosition.Add(chosen); }
+ }
+ int[] inputline = new int[mutatePosition.Count];
+ mutatePosition.CopyTo(inputline, 0);
+ List> change = Permutations(mutatePosition);
+ if (change.Count == 0)
+ {
+ throw new Exception("your stations is too large !!!");
+ }
+ int[][] temp = new int[change.Count][];
+ int c = 0; double min = double.MaxValue; double ans = 0; int smallest = -1;
+ for (int b = 0; b < change.Count; b++)
+ {
+ temp[b] = new int[numberOfGenes]; c = 0;
+ for (int a = 0; a < stations.Length; a++)
+ {
+ temp[b][a] = this.chromosomes[mutateID][a];
+ if (inputline.Contains(this.chromosomes[mutateID][a]))
+ {
+ temp[b][a] = change.ElementAt(b).IndexOf(c);
+ c++;
+ }
+ }
+ ans = GetObjectiveValueFunction(temp[b]);
+ if (min > ans)
+ {
+ min = ans;
+ smallest = b;
+ }
+ }
+ temp[smallest].CopyTo(chromosomes[mutateID], 0);
+ for (int a = stations.Length; a < numberOfGenes - 2; a++)
+ {
+ if (stations[a - stations.Length].Rate < 0)
+ {
+ chromosomes[mutateID][a] = TruckCapacity;
+ }
+ else if (stations[a - stations.Length].Rate > 0)
+ {
+ chromosomes[mutateID][a] = -TruckCapacity;
+ }
+ }
+ chromosomes[mutateID][numberOfGenes - 2] = rnd.Next(0, capacity + 1);//truck start routing time
+ //chromosomes[mutateID][numberOfGenes - 1] = rnd.Next(0, (int)time);//truck initial bike amount
+ break;
+ }
+ case PermutationMutation.Heuristic:
+ {
+ int count = 0;int turn = 0;int tmp;
+ //decode first
+ int[] routingSequence = new int[stations.Length];
+ int[] temp = new int[stations.Length];
+ for (int a = 0; a < stations.Length; a++)
+ {
+ temp[a] = chromosomes[mutateID][a]; routingSequence[a] = a; //when you add depot location just amend it
+ }
+ Array.Sort(temp, routingSequence);
+ for (int j = 0; j < stations.Length; j++)
+ {
+ if(stations[routingSequence[j]].Rate >0)
+ {
+ turn++;
+ }else if(stations[routingSequence[j]].Rate < 0)
+ {
+ turn--;
+ }
+ count++;
+ if(count %2 == 0)
+ {
+ if(turn >= 2)
+ {
+ for(int b = j;b < stations.Length; b++)
+ {
+ if(stations[routingSequence[b]].Rate < 0)
+ {
+ tmp = routingSequence[b];
+ routingSequence[b] = routingSequence[j];
+ routingSequence[j] = tmp;
+ turn = 0;
+ break;
+ }
+ }
+ }
+ else if(turn <= -2)
+ {
+ for (int b = j; b < stations.Length; b++)
+ {
+ if (stations[routingSequence[b]].Rate > 0)
+ {
+ tmp = routingSequence[b];
+ routingSequence[b] = routingSequence[j];
+ routingSequence[j] = tmp;
+ turn = 0;
+ break;
+ }
+ }
+ }
+ }
+ }
+ //encode
+ for (int c = 0;c < stations.Length; c++)
+ {
+ chromosomes[mutateID][routingSequence[c]] = c;
+ }
+ for (int a = stations.Length; a < numberOfGenes - 2; a++)
+ {
+ if (stations[a - stations.Length].Rate < 0)
+ {
+ chromosomes[mutateID][a] = rnd.Next(0,TruckCapacity);
+ }
+ else if (stations[a - stations.Length].Rate > 0)
+ {
+ chromosomes[mutateID][a] = -rnd.Next(0, TruckCapacity);
+ }
+ }
+ chromosomes[mutateID][numberOfGenes - 2] = rnd.Next(0, capacity + 1);//truck start routing time
+ //chromosomes[mutateID][numberOfGenes - 1] = rnd.Next(0, (int)time);//truck initial bike amount
+ break;
+ }
+ case PermutationMutation.EmergentService:
+ {
+ //利用距離和急需服務站點的權重比例
+ int[] routingSequence = new int[stations.Length];
+ double[,] d1 = new double[stations.Length, stations.Length];
+ int p1startStation = rnd.Next(0, stations.Length);
+ double min = double.MaxValue;
+ //randomly generate beta
+ double beta = rnd.NextDouble();
+ for (int a = 0; a < stations.Length; a++)
+ {
+ StartToVertex[a] = StartToVertex[a] * (1 - beta) + (beta / stations[a].RatePerCapacity);
+ if (StartToVertex[a] != 0 && min > StartToVertex[a])
+ {
+ min = StartToVertex[a];
+ p1startStation = a;
+ }
+ }
+
+ //find the first sation and let its sequence be first
+ for (int a = 0; a < stations.Length; a++)
+ {
+ routingSequence[a] = -1;
+ for (int j = 0; j < stations.Length; j++)
+ {
+ if (stations[j].RatePerCapacity != 0)
+ {
+ //可以改進ㄉ地方
+ d1[a, j] = PureFromTo[a, j] * (1 - beta) + (beta / stations[j].RatePerCapacity);
+ }
+ else
+ {
+ d1[a, j] = PureFromTo[a, j] * 1800;
+ }
+ if (j == p1startStation) { d1[a, j] = double.MaxValue; }
+ }
+ }
+ routingSequence[p1startStation] = 0;
+ int sequence = 1;
+ //start to construct
+ while (routingSequence.Contains(-1))
+ {
+
+ //將較近的站設為下一個起始點
+ p1startStation = NearStation( p1startStation, d1);
+ //p1startStation = NearStation(PossibleStation, p1startStation, d1);
+ if (routingSequence[p1startStation] == -1)
+ {
+ routingSequence[p1startStation] = sequence;
+ sequence++;
+ for (int a = 0; a < stations.Length; a++)
+ {
+ d1[a, p1startStation] = double.MaxValue;
+ }
+ }
+ else { throw new Exception("bug"); }
+ }
+ routingSequence.CopyTo(this.chromosomes[mutateID], 0);
+ for (int a = stations.Length; a < numberOfGenes-1 ; a++)
+ {
+ if (stations[a - stations.Length].Rate < 0)
+ {
+ chromosomes[mutateID][a] = rnd.Next(0, TruckCapacity);
+ }
+ else if (stations[a - stations.Length].Rate > 0)
+ {
+ chromosomes[mutateID][a] = -rnd.Next(0, TruckCapacity);
+ }
+ }
+ //alpha = rnd.NextDouble();
+ ////chromosomes[mutateID][numberOfGenes - 2] = (int)alpha * chromosomes[mutateID][numberOfGenes - 2];//truck start routing time
+ chromosomes[mutateID][numberOfGenes - 1] = (int)alpha * chromosomes[mutateID][numberOfGenes - 1];//truck initial bike amount
+ break;
+ }
+ }
+ }
+ }
+
+ public static List> Permutations(List list)
+ {
+ List> perms = new List>();
+ if (list.Count == 0)
+ return perms; // Empty list.
+ float factorial = 1;
+ for (int i = 2; i <= list.Count; i++)
+ factorial *= i;
+ if (!float.IsInfinity(factorial))
+ {
+ for (int v = 0; v < factorial; v++)
+ {
+ List s = new List(list);
+ int k = v;
+ for (int j = 2; j <= list.Count; j++)
+ {
+ int other = (k % j);
+ T temp = s[j - 1];
+ s[j - 1] = s[other];
+ s[other] = temp;
+ k = k / j;
+ }
+ perms.Add(s);
+ }
+ }
+ return perms;
+
+ }
+
+ }
+}
diff --git a/BikeSharingSystem/Program.cs b/BikeSharingSystem/Program.cs
new file mode 100644
index 0000000..6eaa10f
--- /dev/null
+++ b/BikeSharingSystem/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace BikeSharingSystem
+{
+ static class Program
+ {
+ ///
+ /// 應用程式的主要進入點。
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainForm());
+ }
+ }
+}
diff --git a/BikeSharingSystem/Properties/AssemblyInfo.cs b/BikeSharingSystem/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..c767bd3
--- /dev/null
+++ b/BikeSharingSystem/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 組件的一般資訊是由下列的屬性集控制。
+// 變更這些屬性的值即可修改組件的相關
+// 資訊。
+[assembly: AssemblyTitle("BikeSharingSystem")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("BikeSharingSystem")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 將 ComVisible 設定為 false 會使得這個組件中的類型
+// 對 COM 元件而言為不可見。如果您需要從 COM 存取這個組件中
+// 的類型,請在該類型上將 ComVisible 屬性設定為 true。
+[assembly: ComVisible(false)]
+
+// 下列 GUID 為專案公開 (Expose) 至 COM 時所要使用的 typelib ID
+[assembly: Guid("30229ed5-2c30-4ff6-af9d-3dbe32d09320")]
+
+// 組件的版本資訊由下列四個值所組成:
+//
+// 主要版本
+// 次要版本
+// 組建編號
+// 修訂編號
+//
+// 您可以指定所有的值,也可以依照以下的方式,使用 '*' 將組建和修訂編號
+// 指定為預設值:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/BikeSharingSystem/Properties/Resources.Designer.cs b/BikeSharingSystem/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..c323562
--- /dev/null
+++ b/BikeSharingSystem/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// 這段程式碼是由工具產生的。
+// 執行階段版本:4.0.30319.42000
+//
+// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼,
+// 變更將會遺失。
+//
+//------------------------------------------------------------------------------
+
+namespace BikeSharingSystem.Properties {
+ using System;
+
+
+ ///
+ /// 用於查詢當地語系化字串等的強類型資源類別。
+ ///
+ // 這個類別是自動產生的,是利用 StronglyTypedResourceBuilder
+ // 類別透過 ResGen 或 Visual Studio 這類工具。
+ // 若要加入或移除成員,請編輯您的 .ResX 檔,然後重新執行 ResGen
+ // (利用 /str 選項),或重建您的 VS 專案。
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// 傳回這個類別使用的快取的 ResourceManager 執行個體。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BikeSharingSystem.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// 覆寫目前執行緒的 CurrentUICulture 屬性,對象是所有
+ /// 使用這個強類型資源類別的資源查閱。
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/BikeSharingSystem/Properties/Resources.resx b/BikeSharingSystem/Properties/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/BikeSharingSystem/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/BikeSharingSystem/Properties/Settings.Designer.cs b/BikeSharingSystem/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..df56407
--- /dev/null
+++ b/BikeSharingSystem/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// 這段程式碼是由工具產生的。
+// 執行階段版本:4.0.30319.42000
+//
+// 對這個檔案所做的變更可能會造成錯誤的行為,而且如果重新產生程式碼,
+// 變更將會遺失。
+//
+//------------------------------------------------------------------------------
+
+namespace BikeSharingSystem.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/BikeSharingSystem/Properties/Settings.settings b/BikeSharingSystem/Properties/Settings.settings
new file mode 100644
index 0000000..abf36c5
--- /dev/null
+++ b/BikeSharingSystem/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/BikeSharingSystem/Station.cs b/BikeSharingSystem/Station.cs
new file mode 100644
index 0000000..a277b38
--- /dev/null
+++ b/BikeSharingSystem/Station.cs
@@ -0,0 +1,154 @@
+using System;
+using System.Collections;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ public class Station:IComparable
+ {
+ private double capacity;
+ private int stationID;
+ private double initial;//該站初始腳踏車數
+ private double Lock ;
+ private double rate; //每分鐘減少的比率
+ private double declinebymin = 0; //每分鐘減少幾個
+ private double surplusbymin = 0; //每分鐘增加幾個
+ private double ratePerCapacity= 0;//單位capacity下common goods的增減比率
+ public int StationID
+ {
+ get { return stationID; }
+ }
+ public double Capacity
+ {
+ get { return capacity; }
+ }
+ public double Surplusbymin
+ {
+ get { return surplusbymin; }
+ }
+ public double Declinebymin
+ {
+ get { return declinebymin; }
+ }
+ public double Locker
+ {
+ set
+ {
+ if (this.Lock <= this.capacity && this.Lock >=0)
+ {
+ Lock = value;
+ }
+ else
+ {
+ throw new ArgumentException("your lock exceed capacity");
+ }
+ }
+ get { return Lock; }
+ }
+ public double currentGoods
+ {
+ set
+ {
+ if (this.initial <= this.capacity && this.initial>=0)
+ {
+ initial = value;
+ }
+ else
+ {
+ throw new ArgumentException("your goods exceed capacity");
+ }
+ }
+ get { return initial; }
+ }
+ public double Rate
+ {
+ get { return rate; }
+ }
+ public double RatePerCapacity
+ {
+ get { return ratePerCapacity; }
+ }
+
+ ///
+ /// station constructor
+ ///
+ /// capacity
+ /// initial commodity
+ /// decline or surplus ratio
+ public Station(int c,int i,int id,double r)
+ {
+ rate = r;
+ capacity = c;
+ initial = i;
+ stationID = id;
+ Lock = capacity - initial;
+ if(r < 0) { declinebymin = rate ; }
+ else if(r >0) { surplusbymin = rate ; }
+ ratePerCapacity = Math.Abs(this.rate) / this.capacity;
+ }
+ ///
+ /// 開始缺少貨物或者多出的時點
+ ///
+ /// 到達該站的時間點
+ /// 到那站後pick up and delivery 的數量
+ ///
+ public double LackSurplusTimePoint(double starttime,int PnD)
+ {
+ if(rate < 0)
+ { //卡車到達該站時該站的腳踏車就沒ㄌ
+ if (Lock/declinebymin*-1 < starttime)
+ {
+ return initial/declinebymin*-1;
+ }
+ else
+ {
+ initial = Convert.ToInt32( initial + starttime *rate);
+ initial += PnD;
+ return initial/declinebymin+starttime;
+ }
+ }
+ else
+ {
+ //卡車到達該站時該站的腳踏車就滿ㄌ
+ if (Lock/surplusbymin < starttime)
+ {
+ return surplusbymin/declinebymin;
+ }
+ else
+ {
+ initial = Convert.ToInt32(initial + starttime * rate);
+ initial += PnD;
+ return initial/surplusbymin + starttime;
+ }
+ }
+ }
+ //每單位容量下的增減比率 值越大越先服務
+ public int CompareTo(Station that)
+ {
+ if (this.ratePerCapacity == that.ratePerCapacity)
+ {
+ return 0;
+ }
+ else if (this.ratePerCapacity > that.ratePerCapacity)
+ {
+ return 1;
+ }
+ else { return -1; }
+ }
+
+ public int CompareTo(object obj)
+ {
+
+ if (obj == null) return 1;
+
+ Station that = obj as Station;
+ if (that != null)
+ return this.RatePerCapacity.CompareTo(that.RatePerCapacity);
+ else
+ throw new ArgumentException("Object is not a station");
+
+ }
+ }
+}
diff --git a/BikeSharingSystem/Truck.cs b/BikeSharingSystem/Truck.cs
new file mode 100644
index 0000000..bb44647
--- /dev/null
+++ b/BikeSharingSystem/Truck.cs
@@ -0,0 +1,140 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace BikeSharingSystem
+{
+ public class Truck
+ {
+ private int capacity;
+ private int currentGoods;
+ private int currentSpace;
+ public int CurrentGoods
+ {
+ set
+ {
+ if (currentGoods <= capacity && currentGoods >= 0)
+ {
+ currentGoods = value;
+ }
+ else
+ {
+ throw new Exception("bug!!!");
+ }
+ }
+ get { return currentGoods; }
+ }
+ public int CurrentSpace
+ {
+ set
+ {
+ if (currentSpace <= capacity && currentGoods >= 0)
+ {
+ currentSpace = value;
+ }
+ else
+ {
+ throw new Exception("bug!!!");
+ }
+ }
+ get { return currentSpace; }
+ }
+
+ //private double startTime;
+ public Truck(int c,int initialamount)
+ {
+ capacity = c;
+ currentGoods = initialamount;
+ currentSpace = capacity - currentGoods;
+ }
+ int temp = -1;
+ public int SupplyTruck(Station s)
+ {
+ int half = this.capacity / 2;
+ if (this.currentGoods == 0)
+ {
+ if(s.currentGoods >= half)
+ {
+ s.currentGoods -= half;
+ this.currentSpace = this.currentGoods = (int)half;
+ s.Locker = Convert.ToInt32(s.Capacity - s.currentGoods);
+ return half;
+ }
+ else
+ {
+ temp = this.currentGoods = (int)s.currentGoods;
+ this.currentSpace = this.capacity - this.currentGoods;
+ s.currentGoods = 0;
+ s.Locker = (int)s.Capacity;
+ return temp;
+ }
+ }
+ else if(this.currentSpace == 0)
+ {
+ if (s.Locker >= half)
+ {
+ s.Locker -= half;
+ this.currentSpace = this.currentGoods = (int)half;
+ s.currentGoods = Convert.ToInt32(s.Capacity - s.Locker);
+ return half;
+ }
+ else
+ {
+ temp = (int)s.Locker;
+ this.currentSpace += (int)s.Locker;
+ this.currentGoods = capacity - this.currentSpace;
+ s.currentGoods = (int)s.Capacity;
+ s.Locker = 0;
+ return temp;
+ }
+ }
+ return 0;
+ }
+ double ans = -1;
+ public int PickupDelivery(int amount)
+ {
+ if (amount < 0) //might need to pickup
+ {
+ if (currentSpace > 0)//貨車還能放的情況下
+ {
+ if (-1 * amount <= currentSpace) //放得下
+ {
+ this.currentGoods -= amount;
+ this.currentSpace = this.capacity - this.currentGoods;
+ return amount;
+ }
+ else //放不下
+ {
+ ans = this.currentSpace * -1;
+ this.currentSpace = 0;
+ this.currentGoods = this.capacity;
+ return (int)ans;
+ }
+ }
+ }
+ else if (amount > 0) //need to delivery
+ {
+ if (currentGoods > 0)//貨車還能送貨的情況下
+ {
+ if (currentGoods >= amount)//可完全補足
+ {
+ this.currentGoods -= amount;
+ this.currentSpace = this.capacity - this.currentGoods;
+ return amount;
+ }
+ else //無法完全補足
+ {
+ ans = this.currentGoods;
+ this.currentGoods = 0;
+ this.currentSpace = this.capacity;
+ return (int)ans;
+ }
+ }
+ }
+ return 0;
+ }
+
+ }
+}
diff --git a/BikeSharingSystem/bin/Debug/BikeSharingSystem.exe b/BikeSharingSystem/bin/Debug/BikeSharingSystem.exe
new file mode 100644
index 0000000..802c50e
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/BikeSharingSystem.exe differ
diff --git a/BikeSharingSystem/bin/Debug/BikeSharingSystem.exe.config b/BikeSharingSystem/bin/Debug/BikeSharingSystem.exe.config
new file mode 100644
index 0000000..deaa9e2
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/BikeSharingSystem.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/BikeSharingSystem.pdb b/BikeSharingSystem/bin/Debug/BikeSharingSystem.pdb
new file mode 100644
index 0000000..d00abe7
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/BikeSharingSystem.pdb differ
diff --git a/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe b/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe
new file mode 100644
index 0000000..681ab77
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe differ
diff --git a/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe.config b/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe.config
new file mode 100644
index 0000000..deaa9e2
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe.manifest b/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe.manifest
new file mode 100644
index 0000000..f96b1d6
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/BikeSharingSystem.vshost.exe.manifest
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/Newtonsoft.Json.dll b/BikeSharingSystem/bin/Debug/Newtonsoft.Json.dll
new file mode 100644
index 0000000..e5c8978
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/Newtonsoft.Json.dll differ
diff --git a/BikeSharingSystem/bin/Debug/Newtonsoft.Json.xml b/BikeSharingSystem/bin/Debug/Newtonsoft.Json.xml
new file mode 100644
index 0000000..f0b2da3
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/Newtonsoft.Json.xml
@@ -0,0 +1,10760 @@
+
+
+
+ Newtonsoft.Json
+
+
+
+
+ Represents a BSON Oid (object id).
+
+
+
+
+ Gets or sets the value of the Oid.
+
+ The value of the Oid.
+
+
+
+ Initializes a new instance of the class.
+
+ The Oid value.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data.
+
+
+
+
+ Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary.
+
+
+ true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether the root object will be read as a JSON array.
+
+
+ true if the root object will be read as a JSON array; otherwise, false.
+
+
+
+
+ Gets or sets the used when reading values from BSON.
+
+ The used when reading values from BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+ if set to true the root object will be read as a JSON array.
+ The used when reading values from BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The containing the BSON data to read.
+ if set to true the root object will be read as a JSON array.
+ The used when reading values from BSON.
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data.
+
+
+
+
+ Gets or sets the used when writing values to BSON.
+ When set to no conversion will occur.
+
+ The used when writing values to BSON.
+
+
+
+ Initializes a new instance of the class.
+
+ The to write to.
+
+
+
+ Initializes a new instance of the class.
+
+ The to write to.
+
+
+
+ Flushes whatever is in the buffer to the underlying and also flushes the underlying stream.
+
+
+
+
+ Writes the end.
+
+ The token.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Closes this writer.
+ If is set to true, the underlying is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value that represents a BSON object id.
+
+ The Object ID value to write.
+
+
+
+ Writes a BSON regex.
+
+ The regex pattern.
+ The regex options.
+
+
+
+ Specifies how constructors are used when initializing objects during deserialization by the .
+
+
+
+
+ First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor.
+
+
+
+
+ Json.NET will use a non-public default constructor before falling back to a parameterized constructor.
+
+
+
+
+ Converts a binary value to and from a base 64 string value.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON and BSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Creates a custom object.
+
+ The object type to convert.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Creates an object which will then be populated by the serializer.
+
+ Type of the object.
+ The created object.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+
+ true if this can write JSON; otherwise, false.
+
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Provides a base class for converting a to and from JSON.
+
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a F# discriminated union type to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an Entity Framework to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+
+ true if this can write JSON; otherwise, false.
+
+
+
+
+ Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z").
+
+
+
+
+ Gets or sets the date time styles used when converting a date to and from JSON.
+
+ The date time styles used when converting a date to and from JSON.
+
+
+
+ Gets or sets the date time format used when converting a date to and from JSON.
+
+ The date time format used when converting a date to and from JSON.
+
+
+
+ Gets or sets the culture used when converting a date to and from JSON.
+
+ The culture used when converting a date to and from JSON.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)).
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Converts a to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from JSON and BSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts an to and from its name string value.
+
+
+
+
+ Gets or sets a value indicating whether the written enum text should be camel case.
+
+ true if the written enum text will be camel case; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether integer values are allowed when deserializing.
+
+ true if integers are allowed when deserializing; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class.
+
+ true if the written enum text will be camel case; otherwise, false.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts a to and from a string (e.g. "1.2.3.4").
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing property value of the JSON that is being converted.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Converts XML to and from JSON.
+
+
+
+
+ Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements.
+
+ The name of the deserialized root element.
+
+
+
+ Gets or sets a flag to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ true if the array attribute is written to the XML; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether to write the root JSON object.
+
+ true if the JSON root object is omitted; otherwise, false.
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The calling serializer.
+ The value.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Checks if the is a namespace attribute.
+
+ Attribute name to test.
+ The attribute name prefix if it has one, otherwise an empty string.
+ true if attribute name is for a namespace attribute, otherwise false.
+
+
+
+ Determines whether this instance can convert the specified value type.
+
+ Type of the value.
+
+ true if this instance can convert the specified value type; otherwise, false.
+
+
+
+
+ Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Floating point numbers are parsed to .
+
+
+
+
+ Floating point numbers are parsed to .
+
+
+
+
+ Specifies how dates are formatted when writing JSON text.
+
+
+
+
+ Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z".
+
+
+
+
+ Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/".
+
+
+
+
+ Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text.
+
+
+
+
+ Date formatted strings are not parsed to a date type and are read as strings.
+
+
+
+
+ Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to .
+
+
+
+
+ Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to .
+
+
+
+
+ Specifies how to treat the time value when converting between string and .
+
+
+
+
+ Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time.
+
+
+
+
+ Treat as a UTC. If the object represents a local time, it is converted to a UTC.
+
+
+
+
+ Treat as a local time if a is being converted to a string.
+ If a string is being converted to , convert to a local time if a time zone is specified.
+
+
+
+
+ Time zone information should be preserved when converting.
+
+
+
+
+ Specifies default value handling options for the .
+
+
+
+
+
+
+
+
+ Include members where the member value is the same as the member's default value when serializing objects.
+ Included members are written to JSON. Has no effect when deserializing.
+
+
+
+
+ Ignore members where the member value is the same as the member's default value when serializing objects
+ so that it is not written to JSON.
+ This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers,
+ decimals and floating point numbers; and false for booleans). The default value ignored can be changed by
+ placing the on the property.
+
+
+
+
+ Members with a default value but no JSON will be set to their default value when deserializing.
+
+
+
+
+ Ignore members where the member value is the same as the member's default value when serializing objects
+ and set members to their default value when deserializing.
+
+
+
+
+ Specifies float format handling options when writing special floating point numbers, e.g. ,
+ and with .
+
+
+
+
+ Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity".
+
+
+
+
+ Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity.
+ Note that this will produce non-valid JSON.
+
+
+
+
+ Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property.
+
+
+
+
+ Specifies formatting options for the .
+
+
+
+
+ No special formatting is applied. This is the default.
+
+
+
+
+ Causes child objects to be indented according to the and settings.
+
+
+
+
+ Provides an interface for using pooled arrays.
+
+ The array type content.
+
+
+
+ Rent an array from the pool. This array must be returned when it is no longer needed.
+
+ The minimum required length of the array. The returned array may be longer.
+ The rented array from the pool. This array must be returned when it is no longer needed.
+
+
+
+ Return an array to the pool.
+
+ The array that is being returned.
+
+
+
+ Provides an interface to enable a class to return line and position information.
+
+
+
+
+ Gets a value indicating whether the class can return line information.
+
+
+ true if and can be provided; otherwise, false.
+
+
+
+
+ Gets the current line number.
+
+ The current line number or 0 if no line information is available (for example, when returns false).
+
+
+
+ Gets the current line position.
+
+ The current line position or 0 if no line information is available (for example, when returns false).
+
+
+
+ Instructs the how to serialize the collection.
+
+
+
+
+ Gets or sets a value indicating whether null items are allowed in the collection.
+
+ true if null items are allowed in the collection; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with a flag indicating whether the array can contain null items.
+
+ A flag indicating whether the array can contain null items.
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Instructs the to use the specified constructor when deserializing that object.
+
+
+
+
+ Instructs the how to serialize the object.
+
+
+
+
+ Gets or sets the id.
+
+ The id.
+
+
+
+ Gets or sets the title.
+
+ The title.
+
+
+
+ Gets or sets the description.
+
+ The description.
+
+
+
+ Gets or sets the collection's items converter.
+
+ The collection's items converter.
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets a value that indicates whether to preserve object references.
+
+
+ true to keep object reference; otherwise, false. The default is false.
+
+
+
+
+ Gets or sets a value that indicates whether to preserve collection's items references.
+
+
+ true to keep collection's items object references; otherwise, false. The default is false.
+
+
+
+
+ Gets or sets the reference loop handling used when serializing the collection's items.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the type name handling used when serializing the collection's items.
+
+ The type name handling.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Provides methods for converting between .NET types and JSON types.
+
+
+
+
+
+
+
+ Gets or sets a function that creates default .
+ Default settings are automatically used by serialization methods on ,
+ and and on .
+ To serialize without using any default settings create a with
+ .
+
+
+
+
+ Represents JavaScript's boolean value true as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's boolean value false as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's null as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's undefined as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's positive infinity as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's negative infinity as a string. This field is read-only.
+
+
+
+
+ Represents JavaScript's NaN as a string. This field is read-only.
+
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation using the specified.
+
+ The value to convert.
+ The format the date will be converted to.
+ The time zone handling when the date is converted to a string.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation using the specified.
+
+ The value to convert.
+ The format the date will be converted to.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ The string delimiter character.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ The string delimiter character.
+ The string escape handling.
+ A JSON string representation of the .
+
+
+
+ Converts the to its JSON string representation.
+
+ The value to convert.
+ A JSON string representation of the .
+
+
+
+ Serializes the specified object to a JSON string.
+
+ The object to serialize.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using formatting.
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a collection of .
+
+ The object to serialize.
+ A collection of converters used while serializing.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using formatting and a collection of .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ A collection of converters used while serializing.
+ A JSON string representation of the object.
+
+
+
+ Serializes the specified object to a JSON string using .
+
+ The object to serialize.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a type, formatting and .
+
+ The object to serialize.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using formatting and .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ A JSON string representation of the object.
+
+
+
+
+ Serializes the specified object to a JSON string using a type, formatting and .
+
+ The object to serialize.
+ Indicates how the output should be formatted.
+ The used to serialize the object.
+ If this is null, default serialization settings will be used.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+ A JSON string representation of the object.
+
+
+
+
+ Deserializes the JSON to a .NET object.
+
+ The JSON to deserialize.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to a .NET object using .
+
+ The JSON to deserialize.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type.
+
+ The JSON to deserialize.
+ The of object being deserialized.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type.
+
+ The type of the object to deserialize to.
+ The JSON to deserialize.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the given anonymous type.
+
+
+ The anonymous type to deserialize to. This can't be specified
+ traditionally and must be inferred from the anonymous type passed
+ as a parameter.
+
+ The JSON to deserialize.
+ The anonymous type object.
+ The deserialized anonymous type from the JSON string.
+
+
+
+ Deserializes the JSON to the given anonymous type using .
+
+
+ The anonymous type to deserialize to. This can't be specified
+ traditionally and must be inferred from the anonymous type passed
+ as a parameter.
+
+ The JSON to deserialize.
+ The anonymous type object.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized anonymous type from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using a collection of .
+
+ The type of the object to deserialize to.
+ The JSON to deserialize.
+ Converters to use while deserializing.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using .
+
+ The type of the object to deserialize to.
+ The object to deserialize.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using a collection of .
+
+ The JSON to deserialize.
+ The type of the object to deserialize.
+ Converters to use while deserializing.
+ The deserialized object from the JSON string.
+
+
+
+ Deserializes the JSON to the specified .NET type using .
+
+ The JSON to deserialize.
+ The type of the object to deserialize to.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+ The deserialized object from the JSON string.
+
+
+
+ Populates the object with values from the JSON string.
+
+ The JSON to populate values from.
+ The target object to populate values onto.
+
+
+
+ Populates the object with values from the JSON string using .
+
+ The JSON to populate values from.
+ The target object to populate values onto.
+
+ The used to deserialize the object.
+ If this is null, default serialization settings will be used.
+
+
+
+
+ Serializes the to a JSON string.
+
+ The node to serialize.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting and omits the root object if is true.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ Omits writing the root object.
+ A JSON string of the .
+
+
+
+ Deserializes the from a JSON string.
+
+ The JSON string.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by .
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by
+ and writes a Json.NET array attribute for collections.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A flag to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ The deserialized .
+
+
+
+ Serializes the to a JSON string.
+
+ The node to convert to JSON.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting.
+
+ The node to convert to JSON.
+ Indicates how the output should be formatted.
+ A JSON string of the .
+
+
+
+ Serializes the to a JSON string using formatting and omits the root object if is true.
+
+ The node to serialize.
+ Indicates how the output should be formatted.
+ Omits writing the root object.
+ A JSON string of the .
+
+
+
+ Deserializes the from a JSON string.
+
+ The JSON string.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by .
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+ The deserialized .
+
+
+
+ Deserializes the from a JSON string nested in a root element specified by
+ and writes a Json.NET array attribute for collections.
+
+ The JSON string.
+ The name of the root element to append when deserializing.
+
+ A flag to indicate whether to write the Json.NET array attribute.
+ This attribute helps preserve arrays when converting the written XML back to JSON.
+
+ The deserialized .
+
+
+
+ Converts an object to and from JSON.
+
+
+
+
+ Writes the JSON representation of the object.
+
+ The to write to.
+ The value.
+ The calling serializer.
+
+
+
+ Reads the JSON representation of the object.
+
+ The to read from.
+ Type of the object.
+ The existing value of object being read.
+ The calling serializer.
+ The object value.
+
+
+
+ Determines whether this instance can convert the specified object type.
+
+ Type of the object.
+
+ true if this instance can convert the specified object type; otherwise, false.
+
+
+
+
+ Gets a value indicating whether this can read JSON.
+
+ true if this can read JSON; otherwise, false.
+
+
+
+ Gets a value indicating whether this can write JSON.
+
+ true if this can write JSON; otherwise, false.
+
+
+
+ Instructs the to use the specified when serializing the member or class.
+
+
+
+
+ Gets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the .
+
+
+
+ Initializes a new instance of the class.
+
+ Type of the .
+ Parameter list to use when constructing the . Can be null.
+
+
+
+ Represents a collection of .
+
+
+
+
+ Instructs the how to serialize the collection.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ The exception thrown when an error occurs during JSON serialization or deserialization.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Instructs the to deserialize properties with no matching class member into the specified collection
+ and write values during serialization.
+
+
+
+
+ Gets or sets a value that indicates whether to write extension data when serializing the object.
+
+
+ true to write extension data when serializing the object; otherwise, false. The default is true.
+
+
+
+
+ Gets or sets a value that indicates whether to read extension data when deserializing the object.
+
+
+ true to read extension data when deserializing the object; otherwise, false. The default is true.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Instructs the not to serialize the public field or public read/write property value.
+
+
+
+
+ Instructs the how to serialize the object.
+
+
+
+
+ Gets or sets the member serialization.
+
+ The member serialization.
+
+
+
+ Gets or sets a value that indicates whether the object's properties are required.
+
+
+ A value indicating whether the object's properties are required.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified member serialization.
+
+ The member serialization.
+
+
+
+ Initializes a new instance of the class with the specified container Id.
+
+ The container Id.
+
+
+
+ Instructs the to always serialize the member with the specified name.
+
+
+
+
+ Gets or sets the used when serializing the property's collection items.
+
+ The collection's items .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the of the .
+
+ The of the .
+
+
+
+ The parameter list to use when constructing the described by .
+ If null, the default constructor is used.
+ When non-null, there must be a constructor defined in the that exactly matches the number,
+ order, and type of these parameters.
+
+
+
+ [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })]
+
+
+
+
+
+ Gets or sets the null value handling used when serializing this property.
+
+ The null value handling.
+
+
+
+ Gets or sets the default value handling used when serializing this property.
+
+ The default value handling.
+
+
+
+ Gets or sets the reference loop handling used when serializing this property.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the object creation handling used when deserializing this property.
+
+ The object creation handling.
+
+
+
+ Gets or sets the type name handling used when serializing this property.
+
+ The type name handling.
+
+
+
+ Gets or sets whether this property's value is serialized as a reference.
+
+ Whether this property's value is serialized as a reference.
+
+
+
+ Gets or sets the order of serialization of a member.
+
+ The numeric order of serialization.
+
+
+
+ Gets or sets a value indicating whether this property is required.
+
+
+ A value indicating whether this property is required.
+
+
+
+
+ Gets or sets the name of the property.
+
+ The name of the property.
+
+
+
+ Gets or sets the reference loop handling used when serializing the property's collection items.
+
+ The collection's items reference loop handling.
+
+
+
+ Gets or sets the type name handling used when serializing the property's collection items.
+
+ The collection's items type name handling.
+
+
+
+ Gets or sets whether this property's collection items are serialized as a reference.
+
+ Whether this property's collection items are serialized as a reference.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class with the specified name.
+
+ Name of the property.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
+
+
+
+
+ Asynchronously reads the next JSON token from the source.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns true if the next token was read successfully; false if there are no more tokens to read.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously skips the children of the current token.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a [].
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the []. This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously reads the next JSON token from the source as a .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the . This result will be null at the end of an array.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Specifies the state of the reader.
+
+
+
+
+ A read method has not been called.
+
+
+
+
+ The end of the file has been reached successfully.
+
+
+
+
+ Reader is at a property.
+
+
+
+
+ Reader is at the start of an object.
+
+
+
+
+ Reader is in an object.
+
+
+
+
+ Reader is at the start of an array.
+
+
+
+
+ Reader is in an array.
+
+
+
+
+ The method has been called.
+
+
+
+
+ Reader has just read a value.
+
+
+
+
+ Reader is at the start of a constructor.
+
+
+
+
+ Reader is in a constructor.
+
+
+
+
+ An error occurred that prevents the read operation from continuing.
+
+
+
+
+ The end of the file has been reached successfully.
+
+
+
+
+ Gets the current reader state.
+
+ The current reader state.
+
+
+
+ Gets or sets a value indicating whether the source should be closed when this reader is closed.
+
+
+ true to close the source when this reader is closed; otherwise false. The default is true.
+
+
+
+
+ Gets or sets a value indicating whether multiple pieces of JSON content can
+ be read from a continuous stream without erroring.
+
+
+ true to support reading multiple pieces of JSON content; otherwise false.
+ The default is false.
+
+
+
+
+ Gets the quotation mark character used to enclose the value of a string.
+
+
+
+
+ Gets or sets how time zones are handled when reading JSON.
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Gets or sets how custom date formatted strings are parsed when reading JSON.
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+
+
+
+
+ Gets the type of the current JSON token.
+
+
+
+
+ Gets the text value of the current JSON token.
+
+
+
+
+ Gets the .NET type for the current JSON token.
+
+
+
+
+ Gets the depth of the current token in the JSON document.
+
+ The depth of the current token in the JSON document.
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Gets or sets the culture used when reading JSON. Defaults to .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Reads the next JSON token from the source.
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a [].
+
+ A [] or null if the next JSON token is null. This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the source as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Skips the children of the current token.
+
+
+
+
+ Sets the current token.
+
+ The new token.
+
+
+
+ Sets the current token and value.
+
+ The new token.
+ The value.
+
+
+
+ Sets the current token and value.
+
+ The new token.
+ The value.
+ A flag indicating whether the position index inside an array should be updated.
+
+
+
+ Sets the state based on current token type.
+
+
+
+
+ Releases unmanaged and - optionally - managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the source is also closed.
+
+
+
+
+ The exception thrown when an error occurs while reading JSON text.
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The line number indicating where the error occurred.
+ The line position indicating where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Instructs the to always serialize the member, and to require that the member has a value.
+
+
+
+
+ The exception thrown when an error occurs during JSON serialization or deserialization.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Serializes and deserializes objects into and from the JSON format.
+ The enables you to control how objects are encoded into JSON.
+
+
+
+
+ Occurs when the errors during serialization and deserialization.
+
+
+
+
+ Gets or sets the used by the serializer when resolving references.
+
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+
+
+
+ Gets or sets the used by the serializer when writing trace messages.
+
+ The trace writer.
+
+
+
+ Gets or sets the equality comparer used by the serializer when comparing references.
+
+ The equality comparer.
+
+
+
+ Gets or sets how type name writing and reading is handled by the serializer.
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+
+ The type name assembly format.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+
+ The type name assembly format.
+
+
+
+ Gets or sets how object references are preserved by the serializer.
+
+
+
+
+ Gets or sets how reference loops (e.g. a class referencing itself) is handled.
+
+
+
+
+ Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
+
+
+
+
+ Gets or sets how null values are handled during serialization and deserialization.
+
+
+
+
+ Gets or sets how default values are handled during serialization and deserialization.
+
+
+
+
+ Gets or sets how objects are created during deserialization.
+
+ The object creation handling.
+
+
+
+ Gets or sets how constructors are used during deserialization.
+
+ The constructor handling.
+
+
+
+ Gets or sets how metadata properties are used during deserialization.
+
+ The metadata properties handling.
+
+
+
+ Gets a collection that will be used during serialization.
+
+ Collection that will be used during serialization.
+
+
+
+ Gets or sets the contract resolver used by the serializer when
+ serializing .NET objects to JSON and vice versa.
+
+
+
+
+ Gets or sets the used by the serializer when invoking serialization callback methods.
+
+ The context.
+
+
+
+ Indicates how JSON text output is formatted.
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+
+
+
+
+ Gets or sets how time zones are handled during serialization and deserialization.
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written as JSON text.
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+
+
+
+
+ Gets or sets how and values are formatted when writing JSON text,
+ and the expected date format when reading JSON text.
+
+
+
+
+ Gets or sets the culture used when reading JSON. Defaults to .
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+
+
+
+
+ Gets a value indicating whether there will be a check for additional JSON content after deserializing an object.
+
+
+ true if there will be a check for additional JSON content after deserializing an object; otherwise, false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Creates a new instance.
+ The will not use default settings
+ from .
+
+
+ A new instance.
+ The will not use default settings
+ from .
+
+
+
+
+ Creates a new instance using the specified .
+ The will not use default settings
+ from .
+
+ The settings to be applied to the .
+
+ A new instance using the specified .
+ The will not use default settings
+ from .
+
+
+
+
+ Creates a new instance.
+ The will use default settings
+ from .
+
+
+ A new instance.
+ The will use default settings
+ from .
+
+
+
+
+ Creates a new instance using the specified .
+ The will use default settings
+ from as well as the specified .
+
+ The settings to be applied to the .
+
+ A new instance using the specified .
+ The will use default settings
+ from as well as the specified .
+
+
+
+
+ Populates the JSON values onto the target object.
+
+ The that contains the JSON structure to reader values from.
+ The target object to populate values onto.
+
+
+
+ Populates the JSON values onto the target object.
+
+ The that contains the JSON structure to reader values from.
+ The target object to populate values onto.
+
+
+
+ Deserializes the JSON structure contained by the specified .
+
+ The that contains the JSON structure to deserialize.
+ The being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The of object being deserialized.
+ The instance of being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The type of the object to deserialize.
+ The instance of being deserialized.
+
+
+
+ Deserializes the JSON structure contained by the specified
+ into an instance of the specified type.
+
+ The containing the object.
+ The of object being deserialized.
+ The instance of being deserialized.
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+ The type of the value being serialized.
+ This parameter is used when is to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+ The type of the value being serialized.
+ This parameter is used when is Auto to write out the type name if the type of the value does not match.
+ Specifying the type is optional.
+
+
+
+
+ Serializes the specified and writes the JSON structure
+ using the specified .
+
+ The used to write the JSON structure.
+ The to serialize.
+
+
+
+ Specifies the settings on a object.
+
+
+
+
+ Gets or sets how reference loops (e.g. a class referencing itself) are handled.
+
+ Reference loop handling.
+
+
+
+ Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization.
+
+ Missing member handling.
+
+
+
+ Gets or sets how objects are created during deserialization.
+
+ The object creation handling.
+
+
+
+ Gets or sets how null values are handled during serialization and deserialization.
+
+ Null value handling.
+
+
+
+ Gets or sets how default values are handled during serialization and deserialization.
+
+ The default value handling.
+
+
+
+ Gets or sets a collection that will be used during serialization.
+
+ The converters.
+
+
+
+ Gets or sets how object references are preserved by the serializer.
+
+ The preserve references handling.
+
+
+
+ Gets or sets how type name writing and reading is handled by the serializer.
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+ The type name handling.
+
+
+
+ Gets or sets how metadata properties are used during deserialization.
+
+ The metadata properties handling.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+
+ The type name assembly format.
+
+
+
+ Gets or sets how a type name assembly is written and resolved by the serializer.
+
+ The type name assembly format.
+
+
+
+ Gets or sets how constructors are used during deserialization.
+
+ The constructor handling.
+
+
+
+ Gets or sets the contract resolver used by the serializer when
+ serializing .NET objects to JSON and vice versa.
+
+ The contract resolver.
+
+
+
+ Gets or sets the equality comparer used by the serializer when comparing references.
+
+ The equality comparer.
+
+
+
+ Gets or sets the used by the serializer when resolving references.
+
+ The reference resolver.
+
+
+
+ Gets or sets a function that creates the used by the serializer when resolving references.
+
+ A function that creates the used by the serializer when resolving references.
+
+
+
+ Gets or sets the used by the serializer when writing trace messages.
+
+ The trace writer.
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+ The binder.
+
+
+
+ Gets or sets the used by the serializer when resolving type names.
+
+ The binder.
+
+
+
+ Gets or sets the error handler called during serialization and deserialization.
+
+ The error handler called during serialization and deserialization.
+
+
+
+ Gets or sets the used by the serializer when invoking serialization callback methods.
+
+ The context.
+
+
+
+ Gets or sets how and values are formatted when writing JSON text,
+ and the expected date format when reading JSON text.
+
+
+
+
+ Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a .
+
+
+
+
+ Indicates how JSON text output is formatted.
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+
+
+
+
+ Gets or sets how time zones are handled during serialization and deserialization.
+
+
+
+
+ Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON.
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written as JSON.
+
+
+
+
+ Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text.
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+
+
+
+
+ Gets or sets the culture used when reading JSON. Defaults to .
+
+
+
+
+ Gets a value indicating whether there will be a check for additional content after deserializing an object.
+
+
+ true if there will be a check for additional content after deserializing an object; otherwise, false.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to JSON text data.
+
+
+
+
+ Asynchronously reads the next JSON token from the source.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns true if the next token was read successfully; false if there are no more tokens to read.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a [].
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the []. This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a of .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the of . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously reads the next JSON token from the source as a .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous read. The
+ property returns the . This result will be null at the end of an array.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Initializes a new instance of the class with the specified .
+
+ The containing the JSON data to read.
+
+
+
+ Gets or sets the reader's character buffer pool.
+
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a [].
+
+ A [] or null if the next JSON token is null. This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Gets a value indicating whether the class can return line information.
+
+
+ true if and can be provided; otherwise, false.
+
+
+
+
+ Gets the current line number.
+
+
+ The current line number or 0 if no line information is available (for example, returns false).
+
+
+
+
+ Gets the current line position.
+
+
+ The current line position or 0 if no line information is available (for example, returns false).
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the JSON value delimiter.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the specified end token.
+
+ The end token to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously closes this writer.
+ If is set to true, the destination is also closed.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of the current JSON object or array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes indent characters.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes an indent space.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a null value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the beginning of a JSON array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the beginning of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the start of a constructor with the given name.
+
+ The name of the constructor.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes an undefined value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the given white space.
+
+ The string of white space characters.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a [] value.
+
+ The [] value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of an array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of a constructor.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes the end of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Asynchronously writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ Derived classes must override this method to get asynchronous behaviour. Otherwise it will
+ execute synchronously, returning an already-completed task.
+
+
+
+ Gets or sets the writer's character array pool.
+
+
+
+
+ Gets or sets how many s to write for each level in the hierarchy when is set to .
+
+
+
+
+ Gets or sets which character to use to quote attribute values.
+
+
+
+
+ Gets or sets which character to use for indenting when is set to .
+
+
+
+
+ Gets or sets a value indicating whether object names will be surrounded with quotes.
+
+
+
+
+ Initializes a new instance of the class using the specified .
+
+ The to write to.
+
+
+
+ Flushes whatever is in the buffer to the underlying and also flushes the underlying .
+
+
+
+
+ Closes this writer.
+ If is set to true, the underlying is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the specified end token.
+
+ The end token to write.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+
+
+
+ Writes indent characters.
+
+
+
+
+ Writes the JSON value delimiter.
+
+
+
+
+ Writes an indent space.
+
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the given white space.
+
+ The string of white space characters.
+
+
+
+ Specifies the type of JSON token.
+
+
+
+
+ This is returned by the if a read method has not been called.
+
+
+
+
+ An object start token.
+
+
+
+
+ An array start token.
+
+
+
+
+ A constructor start token.
+
+
+
+
+ An object property name.
+
+
+
+
+ A comment.
+
+
+
+
+ Raw JSON.
+
+
+
+
+ An integer.
+
+
+
+
+ A float.
+
+
+
+
+ A string.
+
+
+
+
+ A boolean.
+
+
+
+
+ A null token.
+
+
+
+
+ An undefined token.
+
+
+
+
+ An object end token.
+
+
+
+
+ An array end token.
+
+
+
+
+ A constructor end token.
+
+
+
+
+ A Date.
+
+
+
+
+ Byte data.
+
+
+
+
+
+ Represents a reader that provides validation.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Sets an event handler for receiving schema validation errors.
+
+
+
+
+ Gets the text value of the current JSON token.
+
+
+
+
+
+ Gets the depth of the current token in the JSON document.
+
+ The depth of the current token in the JSON document.
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Gets the quotation mark character used to enclose the value of a string.
+
+
+
+
+
+ Gets the type of the current JSON token.
+
+
+
+
+
+ Gets the .NET type for the current JSON token.
+
+
+
+
+
+ Initializes a new instance of the class that
+ validates the content returned from the given .
+
+ The to read from while validating.
+
+
+
+ Gets or sets the schema.
+
+ The schema.
+
+
+
+ Gets the used to construct this .
+
+ The specified in the constructor.
+
+
+
+ Changes the reader's state to .
+ If is set to true, the underlying is also closed.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a [].
+
+
+ A [] or null if the next JSON token is null.
+
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying as a .
+
+ A . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of . This method will return null at the end of an array.
+
+
+
+ Reads the next JSON token from the underlying as a of .
+
+ A of .
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Asynchronously closes this writer.
+ If is set to true, the destination is also closed.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the specified end token.
+
+ The end token to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes indent characters.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the JSON value delimiter.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes an indent space.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the end of the current JSON object or array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the end of an array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the end of a constructor.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the end of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a null value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the beginning of a JSON array.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the start of a constructor with the given name.
+
+ The name of the constructor.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the beginning of a JSON object.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the current token.
+
+ The to read the token from.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the current token.
+
+ The to read the token from.
+ A flag indicating whether the current token's children should be written.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the token and its value.
+
+ The to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the token and its value.
+
+ The to write.
+
+ The value to write.
+ A value is only required for tokens that have an associated value, e.g. the property name for .
+ null can be passed to the method for tokens that don't have a value, e.g. .
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a [] value.
+
+ The [] value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a value.
+
+ The value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes a of value.
+
+ The of value to write.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes an undefined value.
+
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously writes the given white space.
+
+ The string of white space characters.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Asynchronously ets the state of the .
+
+ The being written.
+ The value being written.
+ The token to monitor for cancellation requests. The default value is .
+ A that represents the asynchronous operation.
+ The default behaviour is to execute synchronously, returning an already-completed task. Derived
+ classes can override this behaviour for true asychronousity.
+
+
+
+ Gets or sets a value indicating whether the destination should be closed when this writer is closed.
+
+
+ true to close the destination when this writer is closed; otherwise false. The default is true.
+
+
+
+
+ Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed.
+
+
+ true to auto-complete the JSON when this writer is closed; otherwise false. The default is true.
+
+
+
+
+ Gets the top.
+
+ The top.
+
+
+
+ Gets the state of the writer.
+
+
+
+
+ Gets the path of the writer.
+
+
+
+
+ Gets or sets a value indicating how JSON text output should be formatted.
+
+
+
+
+ Gets or sets how dates are written to JSON text.
+
+
+
+
+ Gets or sets how time zones are handled when writing JSON text.
+
+
+
+
+ Gets or sets how strings are escaped when writing JSON text.
+
+
+
+
+ Gets or sets how special floating point numbers, e.g. ,
+ and ,
+ are written to JSON text.
+
+
+
+
+ Gets or sets how and values are formatted when writing JSON text.
+
+
+
+
+ Gets or sets the culture used when writing JSON. Defaults to .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Flushes whatever is in the buffer to the destination and also flushes the destination.
+
+
+
+
+ Closes this writer.
+ If is set to true, the destination is also closed.
+ If is set to true, the JSON is auto-completed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the end of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the end of an array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the end constructor.
+
+
+
+
+ Writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+
+
+
+ Writes the property name of a name/value pair of a JSON object.
+
+ The name of the property.
+ A flag to indicate whether the text should be escaped when it is written as a JSON property name.
+
+
+
+ Writes the end of the current JSON object or array.
+
+
+
+
+ Writes the current token and its children.
+
+ The to read the token from.
+
+
+
+ Writes the current token.
+
+ The to read the token from.
+ A flag indicating whether the current token's children should be written.
+
+
+
+ Writes the token and its value.
+
+ The to write.
+
+ The value to write.
+ A value is only required for tokens that have an associated value, e.g. the property name for .
+ null can be passed to the method for tokens that don't have a value, e.g. .
+
+
+
+
+ Writes the token.
+
+ The to write.
+
+
+
+ Writes the specified end token.
+
+ The end token to write.
+
+
+
+ Writes indent characters.
+
+
+
+
+ Writes the JSON value delimiter.
+
+
+
+
+ Writes an indent space.
+
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON without changing the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes raw JSON where a value is expected and updates the writer's state.
+
+ The raw JSON to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a of value.
+
+ The of value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+ An error will raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes the given white space.
+
+ The string of white space characters.
+
+
+
+ Releases unmanaged and - optionally - managed resources.
+
+ true to release both managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+ Sets the state of the .
+
+ The being written.
+ The value being written.
+
+
+
+ The exception thrown when an error occurs while writing JSON text.
+
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+ Initializes a new instance of the class
+ with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The path to the JSON where the error occurred.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Specifies how JSON comments are handled when loading JSON.
+
+
+
+
+ Ignore comments.
+
+
+
+
+ Load comments as a with type .
+
+
+
+
+ Specifies how line information is handled when loading JSON.
+
+
+
+
+ Ignore line information.
+
+
+
+
+ Load line information.
+
+
+
+
+ Contains the LINQ to JSON extension methods.
+
+
+
+
+ Returns a collection of tokens that contains the ancestors of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains the ancestors of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains every token in the source collection, the ancestors of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains the descendants of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains the descendants of every token in the source collection.
+
+
+
+ Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection.
+
+ The type of the objects in source, constrained to .
+ An of that contains the source collection.
+ An of that contains every token in the source collection, and the descendants of every token in the source collection.
+
+
+
+ Returns a collection of child properties of every object in the source collection.
+
+ An of that contains the source collection.
+ An of that contains the properties of every object in the source collection.
+
+
+
+ Returns a collection of child values of every object in the source collection with the given key.
+
+ An of that contains the source collection.
+ The token key.
+ An of that contains the values of every token in the source collection with the given key.
+
+
+
+ Returns a collection of child values of every object in the source collection.
+
+ An of that contains the source collection.
+ An of that contains the values of every token in the source collection.
+
+
+
+ Returns a collection of converted child values of every object in the source collection with the given key.
+
+ The type to convert the values to.
+ An of that contains the source collection.
+ The token key.
+ An that contains the converted values of every token in the source collection with the given key.
+
+
+
+ Returns a collection of converted child values of every object in the source collection.
+
+ The type to convert the values to.
+ An of that contains the source collection.
+ An that contains the converted values of every token in the source collection.
+
+
+
+ Converts the value.
+
+ The type to convert the value to.
+ A cast as a of .
+ A converted value.
+
+
+
+ Converts the value.
+
+ The source collection type.
+ The type to convert the value to.
+ A cast as a of .
+ A converted value.
+
+
+
+ Returns a collection of child tokens of every array in the source collection.
+
+ The source collection type.
+ An of that contains the source collection.
+ An of that contains the values of every token in the source collection.
+
+
+
+ Returns a collection of converted child tokens of every array in the source collection.
+
+ An of that contains the source collection.
+ The type to convert the values to.
+ The source collection type.
+ An that contains the converted values of every token in the source collection.
+
+
+
+ Returns the input typed as .
+
+ An of that contains the source collection.
+ The input typed as .
+
+
+
+ Returns the input typed as .
+
+ The source collection type.
+ An of that contains the source collection.
+ The input typed as .
+
+
+
+ Represents a collection of objects.
+
+ The type of token.
+
+
+
+ Gets the of with the specified key.
+
+
+
+
+
+ Represents a JSON array.
+
+
+
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous load. The property contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous load. The property contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the array.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the array.
+
+
+
+ Loads an from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads an from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+
+
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the values of the specified object.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ The that will be used to read the object.
+ A with the values of the specified object.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets or sets the at the specified index.
+
+
+
+
+
+ Determines the index of a specific item in the .
+
+ The object to locate in the .
+
+ The index of if found in the list; otherwise, -1.
+
+
+
+
+ Inserts an item to the at the specified index.
+
+ The zero-based index at which should be inserted.
+ The object to insert into the .
+
+ is not a valid index in the .
+
+
+
+
+ Removes the item at the specified index.
+
+ The zero-based index of the item to remove.
+
+ is not a valid index in the .
+
+
+
+
+ Returns an enumerator that iterates through the collection.
+
+
+ A of that can be used to iterate through the collection.
+
+
+
+
+ Adds an item to the .
+
+ The object to add to the .
+
+
+
+ Removes all items from the .
+
+
+
+
+ Determines whether the contains a specific value.
+
+ The object to locate in the .
+
+ true if is found in the ; otherwise, false.
+
+
+
+
+ Copies the elements of the to an array, starting at a particular array index.
+
+ The array.
+ Index of the array.
+
+
+
+ Gets a value indicating whether the is read-only.
+
+ true if the is read-only; otherwise, false.
+
+
+
+ Removes the first occurrence of a specific object from the .
+
+ The object to remove from the .
+
+ true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original .
+
+
+
+
+ Represents a JSON constructor.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets or sets the name of this constructor.
+
+ The constructor name.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified name and content.
+
+ The constructor name.
+ The contents of the constructor.
+
+
+
+ Initializes a new instance of the class with the specified name and content.
+
+ The constructor name.
+ The contents of the constructor.
+
+
+
+ Initializes a new instance of the class with the specified name.
+
+ The constructor name.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Represents a token that can contain other tokens.
+
+
+
+
+ Occurs when the list changes or an item in the list changes.
+
+
+
+
+ Occurs before an item is added to the collection.
+
+
+
+
+ Occurs when the items list of the collection has changed, or the collection is reset.
+
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Raises the event.
+
+ The instance containing the event data.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Get the first child token of this token.
+
+
+ A containing the first child token of the .
+
+
+
+
+ Get the last child token of this token.
+
+
+ A containing the last child token of the .
+
+
+
+
+ Returns a collection of the child tokens of this token, in document order.
+
+
+ An of containing the child tokens of this , in document order.
+
+
+
+
+ Returns a collection of the child values of this token, in document order.
+
+ The type to convert the values to.
+
+ A containing the child values of this , in document order.
+
+
+
+
+ Returns a collection of the descendant tokens for this token in document order.
+
+ An of containing the descendant tokens of the .
+
+
+
+ Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order.
+
+ An of containing this token, and all the descendant tokens of the .
+
+
+
+ Adds the specified content as children of this .
+
+ The content to be added.
+
+
+
+ Adds the specified content as the first children of this .
+
+ The content to be added.
+
+
+
+ Creates a that can be used to add tokens to the .
+
+ A that is ready to have content written to it.
+
+
+
+ Replaces the child nodes of this token with the specified content.
+
+ The content.
+
+
+
+ Removes the child nodes from this token.
+
+
+
+
+ Merge the specified content into this .
+
+ The content to be merged.
+
+
+
+ Merge the specified content into this using .
+
+ The content to be merged.
+ The used to merge the content.
+
+
+
+ Gets the count of child JSON tokens.
+
+ The count of child JSON tokens.
+
+
+
+ Represents a collection of objects.
+
+ The type of token.
+
+
+
+ An empty collection of objects.
+
+
+
+
+ Initializes a new instance of the struct.
+
+ The enumerable.
+
+
+
+ Returns an enumerator that can be used to iterate through the collection.
+
+
+ A that can be used to iterate through the collection.
+
+
+
+
+ Gets the of with the specified key.
+
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+
+ Returns a hash code for this instance.
+
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+
+ Represents a JSON object.
+
+
+
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous load. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Occurs when a property value changes.
+
+
+
+
+ Occurs when a property value is changing.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the object.
+
+
+
+ Initializes a new instance of the class with the specified content.
+
+ The contents of the object.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets an of of this object's properties.
+
+ An of of this object's properties.
+
+
+
+ Gets a the specified name.
+
+ The property name.
+ A with the specified name or null.
+
+
+
+ Gets a of of this object's property values.
+
+ A of of this object's property values.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets or sets the with the specified property name.
+
+
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+ is not valid JSON.
+
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+ is not valid JSON.
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+ is not valid JSON.
+
+
+
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+ is not valid JSON.
+
+
+
+
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the values of the specified object.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ The that will be used to read the object.
+ A with the values of the specified object.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Gets the with the specified property name.
+
+ Name of the property.
+ The with the specified property name.
+
+
+
+ Gets the with the specified property name.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ Name of the property.
+ One of the enumeration values that specifies how the strings will be compared.
+ The with the specified property name.
+
+
+
+ Tries to get the with the specified property name.
+ The exact property name will be searched for first and if no matching property is found then
+ the will be used to match a property.
+
+ Name of the property.
+ The value.
+ One of the enumeration values that specifies how the strings will be compared.
+ true if a value was successfully retrieved; otherwise, false.
+
+
+
+ Adds the specified property name.
+
+ Name of the property.
+ The value.
+
+
+
+ Removes the property with the specified name.
+
+ Name of the property.
+ true if item was successfully removed; otherwise, false.
+
+
+
+ Tries to get the with the specified property name.
+
+ Name of the property.
+ The value.
+ true if a value was successfully retrieved; otherwise, false.
+
+
+
+ Returns an enumerator that can be used to iterate through the collection.
+
+
+ A that can be used to iterate through the collection.
+
+
+
+
+ Raises the event with the provided arguments.
+
+ Name of the property.
+
+
+
+ Raises the event with the provided arguments.
+
+ Name of the property.
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Represents a JSON property.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Asynchronously loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns a that contains the JSON that was read from the specified .
+
+
+
+ Gets the container's children tokens.
+
+ The container's children tokens.
+
+
+
+ Gets the property name.
+
+ The property name.
+
+
+
+ Gets or sets the property value.
+
+ The property value.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Initializes a new instance of the class.
+
+ The property name.
+ The property content.
+
+
+
+ Initializes a new instance of the class.
+
+ The property name.
+ The property content.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ A that contains the JSON that was read from the specified .
+
+
+
+ Loads a from a .
+
+ A that will be read for the content of the .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A that contains the JSON that was read from the specified .
+
+
+
+ Represents a raw JSON string.
+
+
+
+
+ Asynchronously creates an instance of with the content of the reader's current token.
+
+ The reader.
+ The token to monitor for cancellation requests. The default value is .
+ A representing the asynchronous creation. The
+ property returns an instance of with the content of the reader's current token.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class.
+
+ The raw json.
+
+
+
+ Creates an instance of with the content of the reader's current token.
+
+ The reader.
+ An instance of with the content of the reader's current token.
+
+
+
+ Specifies the settings used when merging JSON.
+
+
+
+
+ Gets or sets the method used when merging JSON arrays.
+
+ The method used when merging JSON arrays.
+
+
+
+ Gets or sets how null value properties are merged.
+
+ How null value properties are merged.
+
+
+
+ Represents a view of a .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The name.
+
+
+
+ When overridden in a derived class, returns whether resetting an object changes its value.
+
+
+ true if resetting the component changes its value; otherwise, false.
+
+ The component to test for reset capability.
+
+
+
+ When overridden in a derived class, gets the current value of the property on a component.
+
+
+ The value of a property for a given component.
+
+ The component with the property for which to retrieve the value.
+
+
+
+ When overridden in a derived class, resets the value for this property of the component to the default value.
+
+ The component with the property value that is to be reset to the default value.
+
+
+
+ When overridden in a derived class, sets the value of the component to a different value.
+
+ The component with the property value that is to be set.
+ The new value.
+
+
+
+ When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted.
+
+
+ true if the property should be persisted; otherwise, false.
+
+ The component with the property to be examined for persistence.
+
+
+
+ When overridden in a derived class, gets the type of the component this property is bound to.
+
+
+ A that represents the type of component this property is bound to.
+ When the or
+
+ methods are invoked, the object specified might be an instance of this type.
+
+
+
+
+ When overridden in a derived class, gets a value indicating whether this property is read-only.
+
+
+ true if the property is read-only; otherwise, false.
+
+
+
+
+ When overridden in a derived class, gets the type of the property.
+
+
+ A that represents the type of the property.
+
+
+
+
+ Gets the hash code for the name of the member.
+
+
+
+ The hash code for the name of the member.
+
+
+
+
+ Represents an abstract JSON token.
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Asynchronously creates a from a .
+
+ An positioned at the token to read into this .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains
+ the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ An positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains
+ the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ A positioned at the token to read into this .
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Asynchronously creates a from a .
+
+ A positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ The token to monitor for cancellation requests. The default value is .
+
+ A that represents the asynchronous creation. The
+ property returns a that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Gets a comparer that can compare two tokens for value equality.
+
+ A that can compare two nodes for value equality.
+
+
+
+ Gets or sets the parent.
+
+ The parent.
+
+
+
+ Gets the root of this .
+
+ The root of this .
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Compares the values of two tokens, including the values of all descendant tokens.
+
+ The first to compare.
+ The second to compare.
+ true if the tokens are equal; otherwise false.
+
+
+
+ Gets the next sibling token of this node.
+
+ The that contains the next sibling token.
+
+
+
+ Gets the previous sibling token of this node.
+
+ The that contains the previous sibling token.
+
+
+
+ Gets the path of the JSON token.
+
+
+
+
+ Adds the specified content immediately after this token.
+
+ A content object that contains simple content or a collection of content objects to be added after this token.
+
+
+
+ Adds the specified content immediately before this token.
+
+ A content object that contains simple content or a collection of content objects to be added before this token.
+
+
+
+ Returns a collection of the ancestor tokens of this token.
+
+ A collection of the ancestor tokens of this token.
+
+
+
+ Returns a collection of tokens that contain this token, and the ancestors of this token.
+
+ A collection of tokens that contain this token, and the ancestors of this token.
+
+
+
+ Returns a collection of the sibling tokens after this token, in document order.
+
+ A collection of the sibling tokens after this tokens, in document order.
+
+
+
+ Returns a collection of the sibling tokens before this token, in document order.
+
+ A collection of the sibling tokens before this token, in document order.
+
+
+
+ Gets the with the specified key.
+
+ The with the specified key.
+
+
+
+ Gets the with the specified key converted to the specified type.
+
+ The type to convert the token to.
+ The token key.
+ The converted token value.
+
+
+
+ Get the first child token of this token.
+
+ A containing the first child token of the .
+
+
+
+ Get the last child token of this token.
+
+ A containing the last child token of the .
+
+
+
+ Returns a collection of the child tokens of this token, in document order.
+
+ An of containing the child tokens of this , in document order.
+
+
+
+ Returns a collection of the child tokens of this token, in document order, filtered by the specified type.
+
+ The type to filter the child tokens on.
+ A containing the child tokens of this , in document order.
+
+
+
+ Returns a collection of the child values of this token, in document order.
+
+ The type to convert the values to.
+ A containing the child values of this , in document order.
+
+
+
+ Removes this token from its parent.
+
+
+
+
+ Replaces this token with the specified token.
+
+ The value.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of which will be used when writing the token.
+
+
+
+ Returns the indented JSON for this token.
+
+
+ The indented JSON for this token.
+
+
+
+
+ Returns the JSON for this token using the given formatting and converters.
+
+ Indicates how the output should be formatted.
+ A collection of s which will be used when writing the token.
+ The JSON for this token using the given formatting and converters.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to [].
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to of .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an explicit conversion from to .
+
+ The value.
+ The result of the conversion.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from [] to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Performs an implicit conversion from of to .
+
+ The value to create a from.
+ The initialized with the specified value.
+
+
+
+ Creates a for this token.
+
+ A that can be used to read this token and its descendants.
+
+
+
+ Creates a from an object.
+
+ The object that will be used to create .
+ A with the value of the specified object.
+
+
+
+ Creates a from an object using the specified .
+
+ The object that will be used to create .
+ The that will be used when reading the object.
+ A with the value of the specified object.
+
+
+
+ Creates an instance of the specified .NET type from the .
+
+ The object type that the token will be deserialized to.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the .
+
+ The object type that the token will be deserialized to.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the using the specified .
+
+ The object type that the token will be deserialized to.
+ The that will be used when creating the object.
+ The new object created from the JSON value.
+
+
+
+ Creates an instance of the specified .NET type from the using the specified .
+
+ The object type that the token will be deserialized to.
+ The that will be used when creating the object.
+ The new object created from the JSON value.
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Creates a from a .
+
+ An positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ A populated from the string that contains JSON.
+
+
+
+ Load a from a string that contains JSON.
+
+ A that contains JSON.
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+ A populated from the string that contains JSON.
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+ The used to load the JSON.
+ If this is null, default load settings will be used.
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Creates a from a .
+
+ A positioned at the token to read into this .
+
+ A that contains the token and its descendant tokens
+ that were read from the reader. The runtime type of the token is determined
+ by the token type of the first token encountered in the reader.
+
+
+
+
+ Selects a using a JPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JPath expression.
+
+ A , or null.
+
+
+
+ Selects a using a JPath expression. Selects the token that matches the object path.
+
+
+ A that contains a JPath expression.
+
+ A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.
+ A .
+
+
+
+ Selects a collection of elements using a JPath expression.
+
+
+ A that contains a JPath expression.
+
+ An of that contains the selected elements.
+
+
+
+ Selects a collection of elements using a JPath expression.
+
+
+ A that contains a JPath expression.
+
+ A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression.
+ An of that contains the selected elements.
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Creates a new instance of the . All child tokens are recursively cloned.
+
+ A new instance of the .
+
+
+
+ Adds an object to the annotation list of this .
+
+ The annotation to add.
+
+
+
+ Get the first annotation object of the specified type from this .
+
+ The type of the annotation to retrieve.
+ The first annotation object that matches the specified type, or null if no annotation is of the specified type.
+
+
+
+ Gets the first annotation object of the specified type from this .
+
+ The of the annotation to retrieve.
+ The first annotation object that matches the specified type, or null if no annotation is of the specified type.
+
+
+
+ Gets a collection of annotations of the specified type for this .
+
+ The type of the annotations to retrieve.
+ An that contains the annotations for this .
+
+
+
+ Gets a collection of annotations of the specified type for this .
+
+ The of the annotations to retrieve.
+ An of that contains the annotations that match the specified type for this .
+
+
+
+ Removes the annotations of the specified type from this .
+
+ The type of annotations to remove.
+
+
+
+ Removes the annotations of the specified type from this .
+
+ The of annotations to remove.
+
+
+
+ Compares tokens to determine whether they are equal.
+
+
+
+
+ Determines whether the specified objects are equal.
+
+ The first object of type to compare.
+ The second object of type to compare.
+
+ true if the specified objects are equal; otherwise, false.
+
+
+
+
+ Returns a hash code for the specified object.
+
+ The for which a hash code is to be returned.
+ A hash code for the specified object.
+ The type of is a reference type and is null.
+
+
+
+ Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data.
+
+
+
+
+ Gets the at the reader's current position.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The token to read from.
+
+
+
+ Reads the next JSON token from the underlying .
+
+
+ true if the next token was read successfully; false if there are no more tokens to read.
+
+
+
+
+ Gets the path of the current JSON token.
+
+
+
+
+ Specifies the type of token.
+
+
+
+
+ No token type has been set.
+
+
+
+
+ A JSON object.
+
+
+
+
+ A JSON array.
+
+
+
+
+ A JSON constructor.
+
+
+
+
+ A JSON object property.
+
+
+
+
+ A comment.
+
+
+
+
+ An integer value.
+
+
+
+
+ A float value.
+
+
+
+
+ A string value.
+
+
+
+
+ A boolean value.
+
+
+
+
+ A null value.
+
+
+
+
+ An undefined value.
+
+
+
+
+ A date value.
+
+
+
+
+ A raw JSON value.
+
+
+
+
+ A collection of bytes value.
+
+
+
+
+ A Guid value.
+
+
+
+
+ A Uri value.
+
+
+
+
+ A TimeSpan value.
+
+
+
+
+ Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data.
+
+
+
+
+ Gets the at the writer's current position.
+
+
+
+
+ Gets the token being written.
+
+ The token being written.
+
+
+
+ Initializes a new instance of the class writing to the given .
+
+ The container being written to.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Flushes whatever is in the buffer to the underlying .
+
+
+
+
+ Closes this writer.
+ If is set to true, the JSON is auto-completed.
+
+
+ Setting to true has no additional effect, since the underlying is a type that cannot be closed.
+
+
+
+
+ Writes the beginning of a JSON object.
+
+
+
+
+ Writes the beginning of a JSON array.
+
+
+
+
+ Writes the start of a constructor with the given name.
+
+ The name of the constructor.
+
+
+
+ Writes the end.
+
+ The token.
+
+
+
+ Writes the property name of a name/value pair on a JSON object.
+
+ The name of the property.
+
+
+
+ Writes a value.
+ An error will be raised if the value cannot be written as a single JSON token.
+
+ The value to write.
+
+
+
+ Writes a null value.
+
+
+
+
+ Writes an undefined value.
+
+
+
+
+ Writes raw JSON.
+
+ The raw JSON to write.
+
+
+
+ Writes a comment /*...*/ containing the specified text.
+
+ Text to place inside the comment.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a [] value.
+
+ The [] value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Writes a value.
+
+ The value to write.
+
+
+
+ Represents a value in JSON (string, integer, date, etc).
+
+
+
+
+ Writes this token to a asynchronously.
+
+ A into which this method will write.
+ The token to monitor for cancellation requests.
+ A collection of which will be used when writing the token.
+ A that represents the asynchronous write operation.
+
+
+
+ Initializes a new instance of the class from another object.
+
+ A object to copy from.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Initializes a new instance of the class with the given value.
+
+ The value.
+
+
+
+ Gets a value indicating whether this token has child tokens.
+
+
+ true if this token has child values; otherwise, false.
+
+
+
+
+ Creates a comment with the given value.
+
+ The value.
+ A comment with the given value.
+
+
+
+ Creates a string with the given value.
+
+ The value.
+ A string with the given value.
+
+
+
+ Creates a null value.
+
+ A null value.
+
+
+
+ Creates a undefined value.
+
+ A undefined value.
+
+
+
+ Gets the node type for this .
+
+ The type.
+
+
+
+ Gets or sets the underlying token value.
+
+ The underlying token value.
+
+
+
+ Writes this token to a .
+
+ A into which this method will write.
+ A collection of s which will be used when writing the token.
+
+
+
+ Indicates whether the current object is equal to another object of the same type.
+
+
+ true if the current object is equal to the parameter; otherwise, false.
+
+ An object to compare with this object.
+
+
+
+ Determines whether the specified is equal to the current .
+
+ The to compare with the current .
+
+ true if the specified is equal to the current ; otherwise, false.
+
+
+
+
+ Serves as a hash function for a particular type.
+
+
+ A hash code for the current .
+
+
+
+
+ Returns a that represents this instance.
+
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format.
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format provider.
+
+ A that represents this instance.
+
+
+
+
+ Returns a that represents this instance.
+
+ The format.
+ The format provider.
+
+ A that represents this instance.
+
+
+
+
+ Returns the responsible for binding operations performed on this object.
+
+ The expression tree representation of the runtime value.
+
+ The to bind this object.
+
+
+
+
+ Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
+
+ An object to compare with this instance.
+
+ A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings:
+ Value
+ Meaning
+ Less than zero
+ This instance is less than .
+ Zero
+ This instance is equal to .
+ Greater than zero
+ This instance is greater than .
+
+
+ is not of the same type as this instance.
+
+
+
+
+ Specifies the settings used when loading JSON.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets or sets how JSON comments are handled when loading JSON.
+
+ The JSON comment handling.
+
+
+
+ Gets or sets how JSON line info is handled when loading JSON.
+
+ The JSON line info handling.
+
+
+
+ Specifies how JSON arrays are merged together.
+
+
+
+ Concatenate arrays.
+
+
+ Union arrays, skipping items that already exist.
+
+
+ Replace all array items.
+
+
+ Merge array items together, matched by index.
+
+
+
+ Specifies how null value properties are merged.
+
+
+
+
+ The content's null value properties will be ignored during merging.
+
+
+
+
+ The content's null value properties will be merged.
+
+
+
+
+ Specifies the member serialization options for the .
+
+
+
+
+ All public members are serialized by default. Members can be excluded using or .
+ This is the default member serialization mode.
+
+
+
+
+ Only members marked with or are serialized.
+ This member serialization mode can also be set by marking the class with .
+
+
+
+
+ All public and private fields are serialized. Members can be excluded using or .
+ This member serialization mode can also be set by marking the class with
+ and setting IgnoreSerializableAttribute on to false.
+
+
+
+
+ Specifies metadata property handling options for the .
+
+
+
+
+ Read metadata properties located at the start of a JSON object.
+
+
+
+
+ Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance.
+
+
+
+
+ Do not try to read metadata properties.
+
+
+
+
+ Specifies missing member handling options for the .
+
+
+
+
+ Ignore a missing member and do not attempt to deserialize it.
+
+
+
+
+ Throw a when a missing member is encountered during deserialization.
+
+
+
+
+ Specifies null value handling options for the .
+
+
+
+
+
+
+
+
+ Include null values when serializing and deserializing objects.
+
+
+
+
+ Ignore null values when serializing and deserializing objects.
+
+
+
+
+ Specifies how object creation is handled by the .
+
+
+
+
+ Reuse existing objects, create new objects when needed.
+
+
+
+
+ Only reuse existing objects.
+
+
+
+
+ Always create new objects.
+
+
+
+
+ Specifies reference handling options for the .
+ Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement .
+
+
+
+
+
+
+
+ Do not preserve references when serializing types.
+
+
+
+
+ Preserve references when serializing into a JSON object structure.
+
+
+
+
+ Preserve references when serializing into a JSON array structure.
+
+
+
+
+ Preserve references when serializing.
+
+
+
+
+ Specifies reference loop handling options for the .
+
+
+
+
+ Throw a when a loop is encountered.
+
+
+
+
+ Ignore loop references and do not serialize.
+
+
+
+
+ Serialize loop references.
+
+
+
+
+ Indicating whether a property is required.
+
+
+
+
+ The property is not required. The default state.
+
+
+
+
+ The property must be defined in JSON but can be a null value.
+
+
+
+
+ The property must be defined in JSON and cannot be a null value.
+
+
+
+
+ The property is not required but it cannot be a null value.
+
+
+
+
+
+ Contains the JSON schema extension methods.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+
+ Determines whether the is valid.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+
+ true if the specified is valid; otherwise, false.
+
+
+
+
+
+ Determines whether the is valid.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+ When this method returns, contains any error messages generated while validating.
+
+ true if the specified is valid; otherwise, false.
+
+
+
+
+
+ Validates the specified .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+
+
+
+
+ Validates the specified .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+ The source to test.
+ The schema to test with.
+ The validation event handler.
+
+
+
+
+ An in-memory representation of a JSON Schema.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets the id.
+
+
+
+
+ Gets or sets the title.
+
+
+
+
+ Gets or sets whether the object is required.
+
+
+
+
+ Gets or sets whether the object is read-only.
+
+
+
+
+ Gets or sets whether the object is visible to users.
+
+
+
+
+ Gets or sets whether the object is transient.
+
+
+
+
+ Gets or sets the description of the object.
+
+
+
+
+ Gets or sets the types of values allowed by the object.
+
+ The type.
+
+
+
+ Gets or sets the pattern.
+
+ The pattern.
+
+
+
+ Gets or sets the minimum length.
+
+ The minimum length.
+
+
+
+ Gets or sets the maximum length.
+
+ The maximum length.
+
+
+
+ Gets or sets a number that the value should be divisible by.
+
+ A number that the value should be divisible by.
+
+
+
+ Gets or sets the minimum.
+
+ The minimum.
+
+
+
+ Gets or sets the maximum.
+
+ The maximum.
+
+
+
+ Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute ().
+
+ A flag indicating whether the value can not equal the number defined by the minimum attribute ().
+
+
+
+ Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute ().
+
+ A flag indicating whether the value can not equal the number defined by the maximum attribute ().
+
+
+
+ Gets or sets the minimum number of items.
+
+ The minimum number of items.
+
+
+
+ Gets or sets the maximum number of items.
+
+ The maximum number of items.
+
+
+
+ Gets or sets the of items.
+
+ The of items.
+
+
+
+ Gets or sets a value indicating whether items in an array are validated using the instance at their array position from .
+
+
+ true if items are validated using their array position; otherwise, false.
+
+
+
+
+ Gets or sets the of additional items.
+
+ The of additional items.
+
+
+
+ Gets or sets a value indicating whether additional items are allowed.
+
+
+ true if additional items are allowed; otherwise, false.
+
+
+
+
+ Gets or sets whether the array items must be unique.
+
+
+
+
+ Gets or sets the of properties.
+
+ The of properties.
+
+
+
+ Gets or sets the of additional properties.
+
+ The of additional properties.
+
+
+
+ Gets or sets the pattern properties.
+
+ The pattern properties.
+
+
+
+ Gets or sets a value indicating whether additional properties are allowed.
+
+
+ true if additional properties are allowed; otherwise, false.
+
+
+
+
+ Gets or sets the required property if this property is present.
+
+ The required property if this property is present.
+
+
+
+ Gets or sets the a collection of valid enum values allowed.
+
+ A collection of valid enum values allowed.
+
+
+
+ Gets or sets disallowed types.
+
+ The disallowed types.
+
+
+
+ Gets or sets the default value.
+
+ The default value.
+
+
+
+ Gets or sets the collection of that this schema extends.
+
+ The collection of that this schema extends.
+
+
+
+ Gets or sets the format.
+
+ The format.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Reads a from the specified .
+
+ The containing the JSON Schema to read.
+ The object representing the JSON Schema.
+
+
+
+ Reads a from the specified .
+
+ The containing the JSON Schema to read.
+ The to use when resolving schema references.
+ The object representing the JSON Schema.
+
+
+
+ Load a from a string that contains JSON Schema.
+
+ A that contains JSON Schema.
+ A populated from the string that contains JSON Schema.
+
+
+
+ Load a from a string that contains JSON Schema using the specified .
+
+ A that contains JSON Schema.
+ The resolver.
+ A populated from the string that contains JSON Schema.
+
+
+
+ Writes this schema to a .
+
+ A into which this method will write.
+
+
+
+ Writes this schema to a using the specified .
+
+ A into which this method will write.
+ The resolver used.
+
+
+
+ Returns a that represents the current .
+
+
+ A that represents the current .
+
+
+
+
+
+ Returns detailed information about the schema exception.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets the line number indicating where the error occurred.
+
+ The line number indicating where the error occurred.
+
+
+
+ Gets the line position indicating where the error occurred.
+
+ The line position indicating where the error occurred.
+
+
+
+ Gets the path to the JSON where the error occurred.
+
+ The path to the JSON where the error occurred.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Initializes a new instance of the class
+ with a specified error message.
+
+ The error message that explains the reason for the exception.
+
+
+
+ Initializes a new instance of the class
+ with a specified error message and a reference to the inner exception that is the cause of this exception.
+
+ The error message that explains the reason for the exception.
+ The exception that is the cause of the current exception, or null if no inner exception is specified.
+
+
+
+ Initializes a new instance of the class.
+
+ The that holds the serialized object data about the exception being thrown.
+ The that contains contextual information about the source or destination.
+ The parameter is null.
+ The class name is null or is zero (0).
+
+
+
+
+ Generates a from a specified .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets how undefined schemas are handled by the serializer.
+
+
+
+
+ Gets or sets the contract resolver.
+
+ The contract resolver.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ The used to resolve schema references.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ Specify whether the generated root will be nullable.
+ A generated from the specified type.
+
+
+
+ Generate a from the specified type.
+
+ The type to generate a from.
+ The used to resolve schema references.
+ Specify whether the generated root will be nullable.
+ A generated from the specified type.
+
+
+
+
+ Resolves from an id.
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets or sets the loaded schemas.
+
+ The loaded schemas.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets a for the specified reference.
+
+ The id.
+ A for the specified reference.
+
+
+
+
+ The value types allowed by the .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ No type specified.
+
+
+
+
+ String type.
+
+
+
+
+ Float type.
+
+
+
+
+ Integer type.
+
+
+
+
+ Boolean type.
+
+
+
+
+ Object type.
+
+
+
+
+ Array type.
+
+
+
+
+ Null type.
+
+
+
+
+ Any type.
+
+
+
+
+
+ Specifies undefined schema Id handling options for the .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Do not infer a schema Id.
+
+
+
+
+ Use the .NET type name as the schema Id.
+
+
+
+
+ Use the assembly qualified .NET type name as the schema Id.
+
+
+
+
+
+ Returns detailed information related to the .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Gets the associated with the validation error.
+
+ The JsonSchemaException associated with the validation error.
+
+
+
+ Gets the path of the JSON location where the validation error occurred.
+
+ The path of the JSON location where the validation error occurred.
+
+
+
+ Gets the text description corresponding to the validation error.
+
+ The text description.
+
+
+
+
+ Represents the callback method that will handle JSON schema validation events and the .
+
+
+ JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details.
+
+
+
+
+
+ Allows users to control class loading and mandate what class to load.
+
+
+
+
+ When implemented, controls the binding of a serialized object to a type.
+
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object
+ The type of the object the formatter creates a new instance of.
+
+
+
+ When implemented, controls the binding of a serialized object to a type.
+
+ The type of the object the formatter creates a new instance of.
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+
+
+ A snake case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ A camel case naming strategy.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+
+
+ Initializes a new instance of the class.
+
+
+ A flag indicating whether dictionary keys should be processed.
+
+
+ A flag indicating whether explicitly specified property names should be processed,
+ e.g. a property name customized with a .
+
+
+ A flag indicating whether extension data names should be processed.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Resolves member mappings for a type, camel casing property names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Used by to resolve a for a given .
+
+
+
+
+ Gets a value indicating whether members are being get and set using dynamic code generation.
+ This value is determined by the runtime permissions available.
+
+
+ true if using dynamic code generation; otherwise, false.
+
+
+
+
+ Gets or sets the default members search flags.
+
+ The default members search flags.
+
+
+
+ Gets or sets a value indicating whether compiler generated members should be serialized.
+
+
+ true if serialized compiler generated members; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types.
+
+
+ true if the interface will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types.
+
+
+ true if the attribute will be ignored when serializing and deserializing types; otherwise, false.
+
+
+
+
+ Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized.
+
+ The naming strategy used to resolve how property names and dictionary keys are serialized.
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ Gets the serializable members for the type.
+
+ The type to get serializable members for.
+ The serializable members for the type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates the constructor parameters.
+
+ The constructor to create properties for.
+ The type's member properties.
+ Properties for the given .
+
+
+
+ Creates a for the given .
+
+ The matching member property.
+ The constructor parameter.
+ A created for the given .
+
+
+
+ Resolves the default for the contract.
+
+ Type of the object.
+ The contract's default .
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates a for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Determines which contract type is created for the given type.
+
+ Type of the object.
+ A for the given type.
+
+
+
+ Creates properties for the given .
+
+ The type to create properties for.
+ /// The member serialization mode for the type.
+ Properties for the given .
+
+
+
+ Creates the used by the serializer to get and set values from a member.
+
+ The member.
+ The used by the serializer to get and set values from a member.
+
+
+
+ Creates a for the given .
+
+ The member's parent .
+ The member to create a for.
+ A created for the given .
+
+
+
+ Resolves the name of the property.
+
+ Name of the property.
+ Resolved name of the property.
+
+
+
+ Resolves the name of the extension data. By default no changes are made to extension data names.
+
+ Name of the extension data.
+ Resolved name of the extension data.
+
+
+
+ Resolves the key of the dictionary. By default is used to resolve dictionary keys.
+
+ Key of the dictionary.
+ Resolved key of the dictionary.
+
+
+
+ Gets the resolved name of the property.
+
+ Name of the property.
+ Name of the property.
+
+
+
+ The default naming strategy. Property names and dictionary keys are unchanged.
+
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ The default serialization binder used when resolving and loading classes from type names.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ When overridden in a derived class, controls the binding of a serialized object to a type.
+
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+ The type of the object the formatter creates a new instance of.
+
+
+
+
+ When overridden in a derived class, controls the binding of a serialized object to a type.
+
+ The type of the object the formatter creates a new instance of.
+ Specifies the name of the serialized object.
+ Specifies the name of the serialized object.
+
+
+
+ Represents a trace writer that writes to the application's instances.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Get and set values for a using dynamic methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Provides information surrounding an error.
+
+
+
+
+ Gets the error.
+
+ The error.
+
+
+
+ Gets the original object that caused the error.
+
+ The original object that caused the error.
+
+
+
+ Gets the member that caused the error.
+
+ The member that caused the error.
+
+
+
+ Gets the path of the JSON location where the error occurred.
+
+ The path of the JSON location where the error occurred.
+
+
+
+ Gets or sets a value indicating whether this is handled.
+
+ true if handled; otherwise, false.
+
+
+
+ Provides data for the Error event.
+
+
+
+
+ Gets the current object the error event is being raised against.
+
+ The current object the error event is being raised against.
+
+
+
+ Gets the error context.
+
+ The error context.
+
+
+
+ Initializes a new instance of the class.
+
+ The current object.
+ The error context.
+
+
+
+ Get and set values for a using dynamic methods.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Provides methods to get attributes.
+
+
+
+
+ Returns a collection of all of the attributes, or an empty collection if there are no attributes.
+
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Returns a collection of attributes, identified by type, or an empty collection if there are no attributes.
+
+ The type of the attributes.
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Used by to resolve a for a given .
+
+
+
+
+
+
+
+
+ Resolves the contract for a given type.
+
+ The type to resolve a contract for.
+ The contract for a given type.
+
+
+
+ A base class for resolving how property names and dictionary keys are serialized.
+
+
+
+
+ A flag indicating whether dictionary keys should be processed.
+ Defaults to false.
+
+
+
+
+ A flag indicating whether extension data names should be processed.
+ Defaults to false.
+
+
+
+
+ A flag indicating whether explicitly specified property names,
+ e.g. a property name customized with a , should be processed.
+ Defaults to false.
+
+
+
+
+ Gets the serialized name for a given property name.
+
+ The initial property name.
+ A flag indicating whether the property has had a name explicitly specified.
+ The serialized property name.
+
+
+
+ Gets the serialized name for a given extension data name.
+
+ The initial extension data name.
+ The serialized extension data name.
+
+
+
+ Gets the serialized key for a given dictionary key.
+
+ The initial dictionary key.
+ The serialized dictionary key.
+
+
+
+ Resolves the specified property name.
+
+ The property name to resolve.
+ The resolved property name.
+
+
+
+ Used to resolve references when serializing and deserializing JSON by the .
+
+
+
+
+ Resolves a reference to its object.
+
+ The serialization context.
+ The reference to resolve.
+ The object that was resolved from the reference.
+
+
+
+ Gets the reference for the specified object.
+
+ The serialization context.
+ The object to get a reference for.
+ The reference to the object.
+
+
+
+ Determines whether the specified object is referenced.
+
+ The serialization context.
+ The object to test for a reference.
+
+ true if the specified object is referenced; otherwise, false.
+
+
+
+
+ Adds a reference to the specified object.
+
+ The serialization context.
+ The reference.
+ The object to reference.
+
+
+
+ Represents a trace writer.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Provides methods to get and set values.
+
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the of the collection items.
+
+ The of the collection items.
+
+
+
+ Gets a value indicating whether the collection type is a multidimensional array.
+
+ true if the collection type is a multidimensional array; otherwise, false.
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+
+ The function used to create the object.
+
+
+
+ Gets a value indicating whether the creator has a parameter with the collection values.
+
+ true if the creator has a parameter with the collection values; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the default collection items .
+
+ The converter.
+
+
+
+ Gets or sets a value indicating whether the collection items preserve object references.
+
+ true if collection items preserve object references; otherwise, false.
+
+
+
+ Gets or sets the collection item reference loop handling.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the collection item type name handling.
+
+ The type name handling.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Handles serialization callback events.
+
+ The object that raised the callback event.
+ The streaming context.
+
+
+
+ Handles serialization error callback events.
+
+ The object that raised the callback event.
+ The streaming context.
+ The error context.
+
+
+
+ Sets extension data for an object during deserialization.
+
+ The object to set extension data on.
+ The extension data key.
+ The extension data value.
+
+
+
+ Gets extension data for an object during serialization.
+
+ The object to set extension data on.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the underlying type for the contract.
+
+ The underlying type for the contract.
+
+
+
+ Gets or sets the type created during deserialization.
+
+ The type created during deserialization.
+
+
+
+ Gets or sets whether this type contract is serialized as a reference.
+
+ Whether this type contract is serialized as a reference.
+
+
+
+ Gets or sets the default for this contract.
+
+ The converter.
+
+
+
+ Gets or sets all methods called immediately after deserialization of the object.
+
+ The methods called immediately after deserialization of the object.
+
+
+
+ Gets or sets all methods called during deserialization of the object.
+
+ The methods called during deserialization of the object.
+
+
+
+ Gets or sets all methods called after serialization of the object graph.
+
+ The methods called after serialization of the object graph.
+
+
+
+ Gets or sets all methods called before serialization of the object.
+
+ The methods called before serialization of the object.
+
+
+
+ Gets or sets all method called when an error is thrown during the serialization of the object.
+
+ The methods called when an error is thrown during the serialization of the object.
+
+
+
+ Gets or sets the default creator method used to create the object.
+
+ The default creator method used to create the object.
+
+
+
+ Gets or sets a value indicating whether the default creator is non-public.
+
+ true if the default object creator is non-public; otherwise, false.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the dictionary key resolver.
+
+ The dictionary key resolver.
+
+
+
+ Gets the of the dictionary keys.
+
+ The of the dictionary keys.
+
+
+
+ Gets the of the dictionary values.
+
+ The of the dictionary values.
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+
+ The function used to create the object.
+
+
+
+ Gets a value indicating whether the creator has a parameter with the dictionary values.
+
+ true if the creator has a parameter with the dictionary values; otherwise, false.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets the object's properties.
+
+ The object's properties.
+
+
+
+ Gets or sets the property name resolver.
+
+ The property name resolver.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the object constructor.
+
+ The object constructor.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Gets or sets the object member serialization.
+
+ The member object serialization.
+
+
+
+ Gets or sets a value that indicates whether the object's properties are required.
+
+
+ A value indicating whether the object's properties are required.
+
+
+
+
+ Gets the object's properties.
+
+ The object's properties.
+
+
+
+ Gets a collection of instances that define the parameters used with .
+
+
+
+
+ Gets or sets the function used to create the object. When set this function will override .
+ This function is called with a collection of arguments which are defined by the collection.
+
+ The function used to create the object.
+
+
+
+ Gets or sets the extension data setter.
+
+
+
+
+ Gets or sets the extension data getter.
+
+
+
+
+ Gets or sets the extension data value type.
+
+
+
+
+ Gets or sets the extension data name resolver.
+
+ The extension data name resolver.
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Maps a JSON property to a .NET member or constructor parameter.
+
+
+
+
+ Gets or sets the name of the property.
+
+ The name of the property.
+
+
+
+ Gets or sets the type that declared this property.
+
+ The type that declared this property.
+
+
+
+ Gets or sets the order of serialization of a member.
+
+ The numeric order of serialization.
+
+
+
+ Gets or sets the name of the underlying member or parameter.
+
+ The name of the underlying member or parameter.
+
+
+
+ Gets the that will get and set the during serialization.
+
+ The that will get and set the during serialization.
+
+
+
+ Gets or sets the for this property.
+
+ The for this property.
+
+
+
+ Gets or sets the type of the property.
+
+ The type of the property.
+
+
+
+ Gets or sets the for the property.
+ If set this converter takes precedence over the contract converter for the property type.
+
+ The converter.
+
+
+
+ Gets or sets the member converter.
+
+ The member converter.
+
+
+
+ Gets or sets a value indicating whether this is ignored.
+
+ true if ignored; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this is readable.
+
+ true if readable; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this is writable.
+
+ true if writable; otherwise, false.
+
+
+
+ Gets or sets a value indicating whether this has a member attribute.
+
+ true if has a member attribute; otherwise, false.
+
+
+
+ Gets the default value.
+
+ The default value.
+
+
+
+ Gets or sets a value indicating whether this is required.
+
+ A value indicating whether this is required.
+
+
+
+ Gets or sets a value indicating whether this property preserves object references.
+
+
+ true if this instance is reference; otherwise, false.
+
+
+
+
+ Gets or sets the property null value handling.
+
+ The null value handling.
+
+
+
+ Gets or sets the property default value handling.
+
+ The default value handling.
+
+
+
+ Gets or sets the property reference loop handling.
+
+ The reference loop handling.
+
+
+
+ Gets or sets the property object creation handling.
+
+ The object creation handling.
+
+
+
+ Gets or sets or sets the type name handling.
+
+ The type name handling.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be serialized.
+
+ A predicate used to determine whether the property should be serialized.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be deserialized.
+
+ A predicate used to determine whether the property should be deserialized.
+
+
+
+ Gets or sets a predicate used to determine whether the property should be serialized.
+
+ A predicate used to determine whether the property should be serialized.
+
+
+
+ Gets or sets an action used to set whether the property has been deserialized.
+
+ An action used to set whether the property has been deserialized.
+
+
+
+ Returns a that represents this instance.
+
+
+ A that represents this instance.
+
+
+
+
+ Gets or sets the converter used when serializing the property's collection items.
+
+ The collection's items converter.
+
+
+
+ Gets or sets whether this property's collection items are serialized as a reference.
+
+ Whether this property's collection items are serialized as a reference.
+
+
+
+ Gets or sets the type name handling used when serializing the property's collection items.
+
+ The collection's items type name handling.
+
+
+
+ Gets or sets the reference loop handling used when serializing the property's collection items.
+
+ The collection's items reference loop handling.
+
+
+
+ A collection of objects.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The type.
+
+
+
+ When implemented in a derived class, extracts the key from the specified element.
+
+ The element from which to extract the key.
+ The key for the specified element.
+
+
+
+ Adds a object.
+
+ The property to add to the collection.
+
+
+
+ Gets the closest matching object.
+ First attempts to get an exact case match of and then
+ a case insensitive match.
+
+ Name of the property.
+ A matching property if found.
+
+
+
+ Gets a property by property name.
+
+ The name of the property to get.
+ Type property name string comparison.
+ A matching property if found.
+
+
+
+ Contract details for a used by the .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The underlying type for the contract.
+
+
+
+ Lookup and create an instance of the type described by the argument.
+
+ The type to create.
+ Optional arguments to pass to an initializing constructor of the JsonConverter.
+ If null, the default constructor is used.
+
+
+
+ Represents a trace writer that writes to memory. When the trace message limit is
+ reached then old trace messages will be removed as new messages are added.
+
+
+
+
+ Gets the that will be used to filter the trace messages passed to the writer.
+ For example a filter level of will exclude messages and include ,
+ and messages.
+
+
+ The that will be used to filter the trace messages passed to the writer.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Writes the specified trace level, message and optional exception.
+
+ The at which to write this trace.
+ The trace message.
+ The trace exception. This parameter is optional.
+
+
+
+ Returns an enumeration of the most recent trace messages.
+
+ An enumeration of the most recent trace messages.
+
+
+
+ Returns a of the most recent trace messages.
+
+
+ A of the most recent trace messages.
+
+
+
+
+ Represents a method that constructs an object.
+
+ The object type to create.
+
+
+
+ When applied to a method, specifies that the method is called when an error occurs serializing an object.
+
+
+
+
+ Provides methods to get attributes from a , , or .
+
+
+
+
+ Initializes a new instance of the class.
+
+ The instance to get attributes for. This parameter should be a , , or .
+
+
+
+ Returns a collection of all of the attributes, or an empty collection if there are no attributes.
+
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Returns a collection of attributes, identified by type, or an empty collection if there are no attributes.
+
+ The type of the attributes.
+ When true, look up the hierarchy chain for the inherited custom attribute.
+ A collection of s, or an empty collection.
+
+
+
+ Get and set values for a using reflection.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The member info.
+
+
+
+ Sets the value.
+
+ The target to set the value on.
+ The value to set on the target.
+
+
+
+ Gets the value.
+
+ The target to get the value from.
+ The value.
+
+
+
+ Indicates the method that will be used during deserialization for locating and loading assemblies.
+
+
+
+
+ In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly.
+
+
+
+
+ In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly.
+
+
+
+
+ Specifies how strings are escaped when writing JSON text.
+
+
+
+
+ Only control characters (e.g. newline) are escaped.
+
+
+
+
+ All non-ASCII and control characters (e.g. newline) are escaped.
+
+
+
+
+ HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped.
+
+
+
+
+ Specifies type name handling options for the .
+
+
+ should be used with caution when your application deserializes JSON from an external source.
+ Incoming types should be validated with a custom
+ when deserializing with a value other than .
+
+
+
+
+ Do not include the .NET type name when serializing types.
+
+
+
+
+ Include the .NET type name when serializing into a JSON object structure.
+
+
+
+
+ Include the .NET type name when serializing into a JSON array structure.
+
+
+
+
+ Always include the .NET type name when serializing.
+
+
+
+
+ Include the .NET type name when the type of the object being serialized is not the same as its declared type.
+ Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON
+ you must specify a root type object with
+ or .
+
+
+
+
+ Determines whether the collection is null or empty.
+
+ The collection.
+
+ true if the collection is null or empty; otherwise, false.
+
+
+
+
+ Adds the elements of the specified collection to the specified generic .
+
+ The list to add to.
+ The collection of elements to add.
+
+
+
+ Converts the value to the specified type. If the value is unable to be converted, the
+ value is checked whether it assignable to the specified type.
+
+ The value to convert.
+ The culture to use when converting.
+ The type to convert or cast the value to.
+
+ The converted type. If conversion was unsuccessful, the initial value
+ is returned if assignable to the target type.
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic that returns a result
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic, but uses one of the arguments for
+ the result.
+
+
+
+
+ Helper method for generating a MetaObject which calls a
+ specific method on Dynamic, but uses one of the arguments for
+ the result.
+
+
+
+
+ Returns a Restrictions object which includes our current restrictions merged
+ with a restriction limiting our type
+
+
+
+
+ Gets a dictionary of the names and values of an type.
+
+
+
+
+
+ Gets a dictionary of the names and values of an Enum type.
+
+ The enum type to get names and values for.
+
+
+
+
+ Gets the type of the typed collection's items.
+
+ The type.
+ The type of the typed collection's items.
+
+
+
+ Gets the member's underlying type.
+
+ The member.
+ The underlying type of the member.
+
+
+
+ Determines whether the member is an indexed property.
+
+ The member.
+
+ true if the member is an indexed property; otherwise, false.
+
+
+
+
+ Determines whether the property is an indexed property.
+
+ The property.
+
+ true if the property is an indexed property; otherwise, false.
+
+
+
+
+ Gets the member's value on the object.
+
+ The member.
+ The target object.
+ The member's value on the object.
+
+
+
+ Sets the member's value on the target object.
+
+ The member.
+ The target.
+ The value.
+
+
+
+ Determines whether the specified MemberInfo can be read.
+
+ The MemberInfo to determine whether can be read.
+ /// if set to true then allow the member to be gotten non-publicly.
+
+ true if the specified MemberInfo can be read; otherwise, false.
+
+
+
+
+ Determines whether the specified MemberInfo can be set.
+
+ The MemberInfo to determine whether can be set.
+ if set to true then allow the member to be set non-publicly.
+ if set to true then allow the member to be set if read-only.
+
+ true if the specified MemberInfo can be set; otherwise, false.
+
+
+
+
+ Builds a string. Unlike this class lets you reuse its internal buffer.
+
+
+
+
+ Determines whether the string is all white space. Empty string will return false.
+
+ The string to test whether it is all white space.
+
+ true if the string is all white space; otherwise, false.
+
+
+
+
+ Specifies the state of the .
+
+
+
+
+ An exception has been thrown, which has left the in an invalid state.
+ You may call the method to put the in the Closed state.
+ Any other method calls result in an being thrown.
+
+
+
+
+ The method has been called.
+
+
+
+
+ An object is being written.
+
+
+
+
+ An array is being written.
+
+
+
+
+ A constructor is being written.
+
+
+
+
+ A property is being written.
+
+
+
+
+ A write method has not been called.
+
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.dll b/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.dll
new file mode 100644
index 0000000..c6d5b72
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.dll differ
diff --git a/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.pdb b/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.pdb
new file mode 100644
index 0000000..1d06de3
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.pdb differ
diff --git a/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.xml b/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.xml
new file mode 100644
index 0000000..e65fae2
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/PommaLabs.Thrower.xml
@@ -0,0 +1,3040 @@
+
+
+
+ PommaLabs.Thrower
+
+
+
+
+ Handler for .
+
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ If given condition is true.
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The name of the argument.
+ The message.
+ If given condition is true.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ If given condition is false.
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The name of the argument.
+ The message.
+ If given condition is false.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if is equal to .
+
+ First argument to be tested for equality.
+ Second argument to be tested for equality.
+ is equal to .
+
+
+
+ Throws if is equal to .
+
+ First argument to be tested for equality.
+ Second argument to be tested for equality.
+ The name of the argument.
+ The message.
+ is equal to .
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if is not equal to .
+
+ First argument to be tested for equality.
+ Second argument to be tested for equality.
+
+ is not equal to .
+
+
+
+
+ Throws if is not equal to .
+
+ First argument to be tested for equality.
+ Second argument to be tested for equality.
+ The name of the argument.
+ The message.
+
+ is not equal to .
+
+
+ and are strictly required arguments.
+
+
+
+
+ Throws an exception of type if and only if specified
+ arguments reference the same object.
+
+ First argument to test for reference equality.
+ Second argument to test for reference equality.
+
+ is the same object as .
+
+
+
+
+ Throws an exception of type with given message
+ if and only if specified arguments reference the same object.
+
+ First argument to test for reference equality.
+ Second argument to test for reference equality.
+ The name of the argument.
+ The message the thrown exception will have.
+
+ is the same object as .
+
+
+ and are strictly required arguments.
+
+
+
+
+ Throws an exception of type if and only if specified
+ arguments do not reference the same object.
+
+ First argument to test for reference equality.
+ Second argument to test for reference equality.
+
+ is not the same object as .
+
+
+
+
+ Throws an exception of type with given message
+ if and only if specified arguments do not reference the same object.
+
+ First argument to test for reference equality.
+ Second argument to test for reference equality.
+ The name of the argument.
+ The message the thrown exception will have.
+
+ is not the same object as .
+
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given argument is not valid.
+
+ The type of the argument.
+ The argument.
+ If given argument is not valid.
+
+
+
+ Throws if given argument is not valid.
+
+ The type of the argument.
+ The argument.
+ The name of the argument.
+ The message.
+ If given argument is not valid.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given enumeration argument is not defined.
+
+ The type of the enumeration argument.
+ The enumeration argument.
+ If given enumeration argument is not defined.
+
+
+
+ Throws if given enumeration argument is not defined.
+
+ The type of the enumeration argument.
+ The enumeration argument.
+ The name of the enumeration argument.
+ The message.
+ If given enumeration argument is not defined.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given enumeration argument is not defined.
+
+ The type of the enumeration argument.
+ The enumeration argument.
+ If given enumeration argument is not defined.
+
+
+
+ Throws if given enumeration argument is not defined.
+
+ The type of the enumeration argument.
+ The enumeration argument.
+ The name of the enumeration argument.
+ The message.
+ If given enumeration argument is not defined.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given enumeration argument is not defined.
+
+ The enumeration type.
+ The enumeration argument.
+ If given enumeration argument is not defined.
+
+ This methid is slower than , please use
+ that one if possible.
+
+
+
+
+ Throws if given enumeration argument is not defined.
+
+ The enumeration type.
+ The enumeration argument.
+ The name of the enumeration argument.
+ The message.
+ If given enumeration argument is not defined.
+
+ and are strictly required arguments.
+
+ This methid is slower than
+ , please use that one if possible.
+
+
+
+
+ Throws if given string is not a valid email address.
+
+ An email address.
+ If given string is not a valid email address.
+
+
+
+ Throws if given string is not a valid email address.
+
+ An email address.
+ Customizations for the validation process.
+ If given string is not a valid email address.
+
+
+
+ Throws if given string is not a valid email address.
+
+ An email address.
+ The name of the argument.
+ The message.
+ If given string is not a valid email address.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given string is not a valid email address.
+
+ An email address.
+ The name of the argument.
+ Customizations for the validation process.
+ The message.
+ If given string is not a valid email address.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given string is not a valid phone number.
+
+ A phone number.
+ If given string is not a valid phone number.
+
+
+
+ Throws if given string is not a valid phone number.
+
+ A phone number.
+ The name of the argument.
+ The message.
+ If given string is not a valid phone number.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given string is null or empty.
+
+ The string value.
+ If given string is null or empty.
+
+
+
+ Throws if given string is null or empty.
+
+ The string value.
+ The name of the argument.
+ The optional message.
+ If given string is null or empty.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given string is null, empty or blank.
+
+ The string value.
+ If given string is null, empty or blank.
+
+
+
+ Throws if given string is null, empty or blank.
+
+ The string value.
+ The name of the argument.
+ The optional message.
+ If given string is null, empty or blank.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given collection is null or empty.
+
+ The type of the items contained in the collection.
+ The collection.
+ If given collection is null or empty.
+
+
+
+ Throws if given collection is null or empty.
+
+ The type of the items contained in the collection.
+ The collection.
+ The name of the argument.
+ The optional message.
+ If given collection is null or empty.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given enumerable is null or empty.
+
+ The type of the items contained in the enumerable.
+ The enumerable.
+ If given enumerable is null or empty.
+
+
+
+ Throws if given enumerable is null or empty.
+
+ The type of the items contained in the enumerable.
+ The enumerable.
+ The name of the argument.
+ The optional message.
+ If given enumerable is null or empty.
+
+ and are strictly required arguments.
+
+
+
+
+ Handler for .
+
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ If given condition is true.
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The name of the argument.
+ The message.
+ If given condition is true.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ If given condition is false.
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The name of the argument.
+ The message.
+ If given condition is false.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given argument if null.
+
+ The type of the argument.
+ The argument.
+ If given argument is null.
+
+
+
+ Throws if given argument if null.
+
+ The type of the argument.
+ The argument.
+ The name of the argument.
+ The message that should be put into the exception.
+ If given argument is null.
+
+
+
+ Throws if given argument if null.
+
+ The type of the nullable argument.
+ The argument.
+ If given argument has no value.
+
+
+
+ Throws if given argument if null.
+
+ The type of the nullable argument.
+ The argument, by reference.
+ If given argument has no value.
+
+
+
+ Throws if given argument if null.
+
+ The type of the nullable argument.
+ The argument.
+ The name of the argument.
+ The message that should be put into the exception.
+ If given argument has no value.
+
+
+
+ Throws if given argument if null.
+
+ The type of the nullable argument.
+ The argument, by reference.
+ The name of the argument.
+ The message that should be put into the exception.
+ If given argument has no value.
+
+
+
+ Handler for .
+
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The optional name of the argument.
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The name of the argument.
+ The message.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The optional name of the argument.
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The name of the argument.
+ The message.
+
+ and are strictly required arguments.
+
+
+
+
+ Throws an exception of type if and only if
+ specified double is .
+
+ The double to be tested for equality.
+ The optional argument name.
+ Specified double is .
+
+
+
+ Throws an exception of type if and only if
+ specified double is .
+
+ The double to be tested for equality.
+ The argument name.
+ The message the thrown exception will have.
+ Specified double is .
+
+ and are strictly required arguments.
+
+
+
+
+ Throws an exception of type if and only if
+ specified double is .
+
+
+ The double to be tested for equality.
+
+ The optional argument name.
+ Specified double is .
+
+
+
+ Throws an exception of type if and only if
+ specified double is .
+
+
+ The double to be tested for equality.
+
+ The argument name.
+ The message the thrown exception will have.
+ Specified double is .
+
+ and are strictly required arguments.
+
+
+
+
+ Throws an exception of type if and only if
+ specified double is .
+
+
+ The double to be tested for equality.
+
+ The optional argument name.
+ Specified double is .
+
+
+
+ Throws an exception of type if and only if
+ specified double is .
+
+
+ The double to be tested for equality.
+
+ The argument name.
+ The message the thrown exception will have.
+ Specified double is .
+
+ and are strictly required arguments.
+
+
+
+
+ Throws if is
+ less than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ less than .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ less than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ less than .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ less than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ less than .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ less than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ less than or equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ less than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ less than or equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ less than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ less than or equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ greater than .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ greater than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is not
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is not
+ equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is not
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is not
+ equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+
+
+
+ Throws if is not
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is not
+ equal to .
+
+ The left side argument.
+ The right side argument.
+ The name of the argument.
+ The message that should be put into the exception.
+
+
+
+ Generic handler used for common exceptions like .
+
+ The type of the handled exception.
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if an
+ instance of given type can be assigned to specified object.
+
+ The type whose instance must be assigned to given object.
+ The object to be tested.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if an
+ instance of given type cannot be assigned to specified object.
+
+
+ The type whose instance must not be assigned to given object.
+
+ The object to be tested.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if an
+ instance of given type can be assigned to specified object.
+
+ The object to be tested.
+ The type whose instance must be assigned to given object.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if an
+ instance of given type cannot be assigned to specified object.
+
+ The object to be tested.
+ The type whose instance must not be assigned to given object.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if specified
+ object has given type.
+
+ The type the object must have.
+ The object to be tested.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if specified
+ object has not given type.
+
+ The type the object must not have.
+ The object to be tested.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if specified
+ object has given type.
+
+ The object to be tested.
+ The type the object must have.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Throws an exception of type if and only if specified
+ object has not given type.
+
+ The object to be tested.
+ The type the object must not have.
+ The optional message.
+
+ If given condition is true, an exception of type is thrown.
+
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ The default message, used when none has been specified.
+
+
+
+
+ Throws if specified directory does not exist.
+
+ The path of the directory that should exist.
+ The optional message.
+ If specified directory does not exist.
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ The default message, used when none has been specified.
+
+
+
+
+ Throws if specified file does not exist or the
+ caller does not have sufficient permissions to read the specified file.
+
+ The path of the file that should exist.
+ The optional message.
+
+ If specified file does not exist or the caller does not have sufficient permissions to
+ read the specified file.
+
+
+
+
+ Handler for .
+
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The HTTP status code corresponding to the error.
+ The optional message.
+ If given condition is true.
+
+
+
+ Throws if given condition is true.
+
+ The condition.
+ The HTTP status code corresponding to the error.
+ The required message.
+ Additional exception info.
+ If given condition is true.
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The HTTP status code corresponding to the error.
+ The optional message.
+ If given condition is false.
+
+
+
+ Throws if given condition is false.
+
+ The condition.
+ The HTTP status code corresponding to the error.
+ The required message.
+ Additional exception info.
+ If given condition is false.
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ Handler for .
+
+
+
+
+ Creates an exception with given message.
+
+ The message used by the exception.
+ An exception with given message.
+
+
+
+ Handler for .
+
+
+
+
+ Throws if the object has been disposed.
+
+ Whether the object has been disposed or not.
+ The required object name.
+ The optional message.
+ If the object has been disposed.
+
+
+
+ Handler for .
+
+
+
+
+ Throws if is less
+ than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is less
+ than .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is less
+ than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is less
+ than .
+
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is less
+ than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is less
+ than or equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is less
+ than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is less
+ than or equal to .
+
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than .
+
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is
+ greater than or equal to .
+
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is equal
+ to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is equal
+ to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is equal
+ to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is equal
+ to .
+
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is not
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is not
+ equal to .
+
+ The left side argument.
+ The right side argument.
+
+
+
+ Throws if is not
+ equal to .
+
+ The type of the arguments.
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Throws if is not
+ equal to .
+
+ The left side argument.
+ The right side argument.
+ The message that should be put into the exception.
+
+
+
+ Additional info which will be included into .
+
+
+
+
+ Builds the additional exception info.
+
+ The application defined error code.
+ The user message.
+
+
+
+ The application defined error code.
+
+
+
+
+ An error message which can be shown to user.
+
+
+
+
+ Represents an exception which contains an error message that should be delivered through
+ the HTTP response, using given status code.
+
+
+
+
+ Builds the exception using given status code.
+
+ The HTTP status code.
+
+
+
+ Builds the exception using given status code.
+
+ The HTTP status code.
+ Additional exception info.
+
+
+
+ Builds the exception using given status code and message.
+
+ The HTTP status code.
+ The exception message.
+
+
+
+ Builds the exception using given status code, message and error code.
+
+ The HTTP status code.
+ The exception message.
+ Additional exception info.
+
+
+
+ Builds the exception using given status code, message and inner exception.
+
+ The HTTP status code.
+ The exception message.
+ The inner exception.
+
+
+
+ Builds the exception using given status code, message, error code and inner exception.
+
+ The HTTP status code.
+ The exception message.
+ The inner exception.
+ Additional exception info.
+
+
+
+ The HTTP status code assigned to this exception.
+
+
+
+
+ The application defined error code.
+
+
+
+
+ The default application defined error code, used when none has been specified.
+
+
+
+
+ An error message which can be shown to the user.
+
+
+
+
+ The default user message.
+
+
+
+
+ New exception handling mechanism, which is more fluent than the old ones.
+
+
+
+
+ Default implementation options for Raise methods.
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Handler for
+
+
+
+
+ Represents an abstracted view of the members defined for a type.
+
+
+
+
+ Return a sequence of all defined members.
+
+
+
+
+ Get a member by index.
+
+
+
+
+ The number of members defined for this type.
+
+
+
+
+ Represents an abstracted view of an individual member defined for a type.
+
+
+
+
+ The name of this member.
+
+
+
+
+ The type of value stored in this member.
+
+
+
+
+ Is the attribute specified defined on this type?
+
+ The attribute type.
+
+
+
+ Gets attribute type.
+
+ The attribute type.
+
+ If true, specifies to also search the ancestors of element for custom attributes.
+
+
+
+
+ Property can write?
+
+
+
+
+ Property can read?
+
+
+
+
+ Represents an individual object, allowing access to members by-name.
+
+
+
+
+ Get or Set the value of a named member for the underlying object.
+
+
+
+
+ The object represented by this instance.
+
+
+
+
+ Use the target types definition of equality.
+
+ The object.
+
+
+
+ Obtain the hash of the target object.
+
+
+
+
+ Use the target's definition of a string representation.
+
+
+
+
+ Wraps an individual object, allowing by-name access to that instance.
+
+ The target object.
+
+
+
+ Wraps an individual object, allowing by-name access to that instance.
+
+ The target object.
+ Allow usage of non public accessors.
+
+
+
+ Gets an containing the keys of the .
+
+
+ An containing the keys of the object that implements .
+
+
+
+
+ Gets an containing the values in the .
+
+
+ An containing the values in the object that implements .
+
+
+
+
+ Gets the number of elements contained in the .
+
+ The number of elements contained in the .
+
+
+
+ Gets a value indicating whether the is read-only.
+
+ true if the is read-only; otherwise, false.
+
+
+
+ Determines whether the contains an element with
+ the specified key.
+
+
+ true if the contains an element with the key;
+ otherwise, false.
+
+ The key to locate in the .
+ is null.
+
+
+
+ Adds an element with the provided key and value to the .
+
+ The object to use as the key of the element to add.
+ The object to use as the value of the element to add.
+ is null.
+
+ An element with the same key already exists in the .
+
+
+ The is read-only.
+
+
+
+
+ Removes the element with the specified key from the .
+
+
+ true if the element is successfully removed; otherwise, false. This method also returns
+ false if was not found in the original .
+
+ The key of the element to remove.
+ is null.
+
+ The is read-only.
+
+
+
+
+ Gets the value associated with the specified key.
+
+
+ true if the object that implements contains an
+ element with the specified key; otherwise, false.
+
+ The key whose value to get.
+
+ When this method returns, the value associated with the specified key, if the key is
+ found; otherwise, the default value for the type of the
+ parameter. This parameter is passed uninitialized.
+
+ is null.
+
+
+
+ Adds an item to the .
+
+ The object to add to the .
+
+ The is read-only.
+
+
+
+
+ Removes all items from the .
+
+
+ The is read-only.
+
+
+
+
+ Determines whether the contains a specific value.
+
+
+ true if is found in the ;
+ otherwise, false.
+
+ The object to locate in the .
+
+
+
+ Copies the elements of the to an ,
+ starting at a particular index.
+
+
+ The one-dimensional that is the destination of the elements copied
+ from . The must have zero-based indexing.
+
+
+ The zero-based index in at which copying begins.
+
+ is null.
+
+ is less than 0.
+
+
+ The number of elements in the source is greater than the
+ available space from to the end of the destination .
+
+
+
+
+ Removes the first occurrence of a specific object from the .
+
+
+ true if was successfully removed from the
+ ; otherwise, false. This method also returns false if
+ is not found in the original .
+
+ The object to remove from the .
+
+ The is read-only.
+
+
+
+
+ Returns an enumerator that iterates through the collection.
+
+ An enumerator that can be used to iterate through the collection.
+
+
+
+ Returns an enumerator that iterates through a collection.
+
+
+ An object that can be used to iterate through the collection.
+
+
+
+
+ Provides a means of reading a sequence of objects as a data-reader, for example for use
+ with SqlBulkCopy or other data-base oriented code.
+
+
+
+
+ Creates a new ObjectReader instance for reading the supplied data.
+
+ The sequence of objects to represent.
+ The members that should be exposed to the reader.
+
+
+
+ Creates a new ObjectReader instance for reading the supplied data.
+
+ The expected Type of the information to be read.
+ The sequence of objects to represent.
+ The members that should be exposed to the reader.
+
+
+
+ Gets a value indicating the depth of nesting for the current row.
+
+ The depth of nesting for the current row.
+
+
+
+ Returns a that describes the column metadata of the .
+
+ A that describes the column metadata.
+
+ The is closed.
+
+
+
+
+ Closes the object.
+
+
+
+
+ Gets a value that indicates whether this contains one or
+ more rows.
+
+
+ true if the contains one or more rows; otherwise false.
+
+
+
+
+ Advances the reader to the next result when reading the results of a batch of statements.
+
+ true if there are more result sets; otherwise false.
+
+
+
+ Advances the reader to the next record in a result set.
+
+ true if there are more rows; otherwise false.
+
+
+
+ Gets the number of rows changed, inserted, or deleted by execution of the SQL statement.
+
+
+ The number of rows changed, inserted, or deleted. -1 for SELECT statements; 0 if no
+ rows were affected or the statement failed.
+
+
+
+
+ Releases the managed resources used by the and optionally
+ releases the unmanaged resources.
+
+
+ true to release managed and unmanaged resources; false to release only unmanaged resources.
+
+
+
+
+ Gets the number of columns in the current row.
+
+ The number of columns in the current row.
+
+ There is no current connection to an instance of SQL Server.
+
+
+
+
+ Gets a value indicating whether the is closed.
+
+ true if the is closed; otherwise false.
+
+ The is closed.
+
+
+
+
+ Gets the value of the specified column as a Boolean.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a byte.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Reads a stream of bytes from the specified column, starting at location indicated by
+ , into the buffer, starting at the location indicated by .
+
+ The actual number of bytes read.
+ The zero-based column ordinal.
+ The index within the row from which to begin the read operation.
+ The buffer into which to copy the data.
+ The index with the buffer to which the data will be copied.
+ The maximum number of characters to read.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a single character.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Reads a stream of characters from the specified column, starting at location indicated
+ by , into the buffer, starting at the location indicated
+ by .
+
+ The actual number of characters read.
+ The zero-based column ordinal.
+ The index within the row from which to begin the read operation.
+ The buffer into which to copy the data.
+ The index with the buffer to which the data will be copied.
+ The maximum number of characters to read.
+
+
+
+ Returns a object for the requested column ordinal that can
+ be overridden with a provider-specific implementation.
+
+ A object.
+ The zero-based column ordinal.
+
+
+
+ Gets name of the data type of the specified column.
+
+ A string representing the name of the data type.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a object.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a object.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a double-precision floating point number.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the data type of the specified column.
+
+ The data type of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a single-precision floating point number.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a globally-unique identifier (GUID).
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a 16-bit signed integer.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a 32-bit signed integer.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as a 64-bit signed integer.
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the name of the column, given the zero-based column ordinal.
+
+ The name of the specified column.
+ The zero-based column ordinal.
+
+
+
+ Gets the column ordinal given the name of the column.
+
+ The zero-based column ordinal.
+ The name of the column.
+
+ The name specified is not a valid column name.
+
+
+
+
+ Gets the value of the specified column as an instance of .
+
+ The value of the specified column.
+ The zero-based column ordinal.
+ The specified cast is not valid.
+
+
+
+ Gets the value of the specified column as an instance of .
+
+ The value of the specified column.
+ The zero-based column ordinal.
+
+
+
+ Returns an that can be used to iterate through the rows in
+ the data reader.
+
+
+ An that can be used to iterate through the rows in the data reader.
+
+
+
+
+ Populates an array of objects with the column values of the current row.
+
+ The number of instances of in the array.
+
+ An array of into which to copy the attribute columns.
+
+
+
+
+ Gets a value that indicates whether the column contains nonexistent or missing values.
+
+
+ true if the specified column is equivalent to ; otherwise false.
+
+ The zero-based column ordinal.
+
+
+
+ Gets the value of the current object in the member specified.
+
+ Member name.
+
+
+
+ Gets the value of the current object in the member specified.
+
+ Member ordinal.
+
+
+
+ This avoids a reference to a library for .NET standard.
+
+ X.
+ Y.
+ Minimum.
+
+
+
+ Provides by-name member-access to objects of a given type.
+
+
+
+
+ Does this type support new instances via a parameterless constructor?
+
+
+
+
+ Create a new instance of this type.
+
+
+
+
+ Can this type be queried for member availability?
+
+
+
+
+ Query the members available for this type.
+
+
+
+
+ Provides a type-specific accessor, allowing by-name access for all objects of that type.
+
+ The type.
+ The accessor is cached internally; a pre-existing accessor may be returned.
+
+
+
+ Provides a type-specific accessor, allowing by-name access for all objects of that type.
+
+ The accessor is cached internally; a pre-existing accessor may be returned.
+
+
+
+ Provides a type-specific accessor, allowing by-name access for all objects of that type.
+
+ The type.
+ Allow usage of non public accessors.
+ The accessor is cached internally; a pre-existing accessor may be returned
+
+
+
+ Provides a type-specific accessor, allowing by-name access for all objects of that type.
+
+ Allow usage of non public accessors.
+ The accessor is cached internally; a pre-existing accessor may be returned.
+
+
+
+ A TypeAccessor based on a Type implementation, with available member metadata
+
+
+
+
+ Returns the Type represented by this accessor
+
+
+
+
+ Can this type be queried for member availability?
+
+
+
+
+ Query the members available for this type
+
+
+
+
+ Create a new instance of this type.
+
+
+
+
+ Get or set the value of a named member on the target instance
+
+
+
+
+ Portable version of some useful reflection methods.
+
+
+
+
+ Represents an empty array of type . This property is read-only.
+
+
+
+
+ Gets the custom attributes for given type.
+
+ The type.
+
+ True to search this type's inheritance chain to find the attributes; otherwise, false.
+
+ The custom attributes for given type.
+
+
+
+ Gets the custom attributes for given member.
+
+ The member.
+
+ True to search this member's inheritance chain to find the attributes; otherwise, false.
+
+ The custom attributes for given member.
+
+
+
+ Gets the constructors for given type.
+
+ The type.
+ The constructors for given type.
+
+
+
+ Gets the constructors for given type.
+
+ The type.
+ The constructors for given type.
+
+
+
+ Gets the base type of given type.
+
+ The type.
+ The base type of given type.
+
+
+
+ Gets the generic type definition of given type.
+
+ The type.
+ The generic type definition of given type.
+
+
+
+ Gets the generic type arguments of given type.
+
+ The type.
+ The generic type arguments of given type.
+
+
+
+ Gets the interfaces for given type.
+
+ The type.
+ The interfaces for given type.
+
+
+
+ Gets all the public instance properties for given type.
+
+ The type.
+ The public instance properties for given type.
+
+
+
+ Gets all the instance properties for given type.
+
+ The type.
+ The instance properties for given type.
+
+
+
+ Gets the value of given property on given instance.
+
+ The instance.
+ The property name.
+ The value of given property on given instance.
+
+
+
+ Gets the value of given property on given instance.
+
+ The type of the property value.
+ The instance.
+ The property name.
+ The value of given property on given instance.
+
+
+
+ Gets the value of given property on given instance.
+
+ The instance.
+ The property info.
+ The value of given property on given instance.
+
+
+
+ Gets the value of given property on given instance.
+
+ The type accessor.
+ The instance.
+ The property info.
+ The value of given property on given instance.
+
+
+
+ Determines whether the specified type is abstract.
+
+ The type.
+ Whether the specified type is abstract.
+
+
+
+ Determines whether the specified type is abstract.
+
+ The type.
+ Whether the specified type is abstract.
+
+
+
+ Determines whether the specified type is a class.
+
+ The type.
+ Whether the specified type is a class.
+
+
+
+ Determines whether the specified type is a class.
+
+ The type.
+ Whether the specified type is a class.
+
+
+
+ Determines whether an instance of the current can be assigned from
+ an instance of the specified Type.
+
+ The object.
+ The type.
+
+ Whether an instance of the current can be assigned from an instance
+ of the specified Type.
+
+
+
+
+ Determines whether the specified type is an enumeration.
+
+ The type.
+ Whether the specified type is an enumeration.
+
+
+
+ Determines whether the specified type is an enumeration.
+
+ The type.
+ Whether the specified type is an enumeration.
+
+
+
+ Determines whether the specified type is a generic type.
+
+ The type.
+ Whether the specified type is a generic type.
+
+
+
+ Determines whether the specified type is a generic type.
+
+ The type.
+ Whether the specified type is a generic type.
+
+
+
+ Determines whether the specified type is a generic type definition.
+
+ The type.
+ Whether the specified type is a generic type definition.
+
+
+
+ Determines whether the specified type is a generic type definition.
+
+ The type.
+ Whether the specified type is a generic type definition.
+
+
+
+ Determines whether the specified object is an instance of the current .
+
+ The object.
+ The type.
+ Whether the specified object is an instance of the current .
+
+
+
+ Determines whether the specified type is an interface.
+
+ The type.
+ Whether the specified type is an interface.
+
+
+
+ Determines whether the specified type is an interface.
+
+ The type.
+ Whether the specified type is an interface.
+
+
+
+ Determines whether the specified type is primitive.
+
+ The type.
+ Whether the specified type is primitive.
+
+
+
+ Determines whether the specified type is primitive.
+
+ The type.
+ Whether the specified type is primitive.
+
+
+
+ Determines whether the specified type is a value type.
+
+ The type.
+ Whether the specified type is a value type.
+
+
+
+ Determines whether the specified type is a value type.
+
+ The type.
+ Whether the specified type is a value type.
+
+
+
+ Determines whether the specified type is public.
+
+ The type.
+ Whether the specified type is public.
+
+
+
+ Determines whether the specified type is public.
+
+ The type.
+ Whether the specified type is public.
+
+
+
+ Determines whether the specified type is nested public.
+
+ The type.
+ Whether the specified type is nested public.
+
+
+
+ Determines whether the specified type is nested public.
+
+ The type.
+ Whether the specified type is nested public.
+
+
+
+ Class to cast to type .
+
+ Target type.
+ Found on StackOverflow: "http://stackoverflow.com/a/23391746/1880086".
+
+
+
+ Casts to . This does not cause
+ boxing for value types. Useful in generic methods.
+
+ The value that should be cast.
+ Source type to cast from. Usually a generic type.
+
+
+
+ Stores items shared by various instances.
+
+
+
+
+ Stores an empty array of used to activate constructors without parameters.
+
+
+
+
+ Stores an empty array of used to seek constructors without parameters.
+
+
+
+
+ Stores the types needed to seek the constructor which takes a string and an exception
+ as parameters to instance the exception.
+
+
+
+
+ Stores the type needed to seek the constructor which takes a string as parameter to
+ instance the exception.
+
+
+
+
+ Contains methods that throw specified exception if given
+ conditions will be verified.
+
+ The type of the exceptions thrown if conditions will be satisfied.
+
+ In order to achieve a good speed, the class caches an instance of the constructors found
+ via reflection; therefore, constructors are looked for only once.
+
+
+
+
+ Stores wheter the exception type is abstract or not. We do this both to provide better
+ error messages for the end user and to avoid calling wrong constructors.
+
+
+
+
+ Caches an instance of the constructor which takes no arguments. If it does not exist,
+ then this field will be null. There must be an instance for each type associated with .
+
+
+
+
+ Caches an instance of the constructor which creates an exception with a message. If it
+ does not exist, then this field will be null. There must be an instance for each type
+ associated with .
+
+
+ At first, we look for constructors which take a string and an inner exception, because
+ some standard exceptions (like ArgumentException or ArgumentNullException) have a
+ constructor which takes a string as a "parameter name", not as a message. If a
+ constructor with that signature is not found, then we look for a constructor with a
+ string as the only argument.
+
+
+
+
+ Keeps the number of arguments required by the constructor who creates the exception
+ with a message.
+
+
+
+
+ must not be instanced.
+
+
+
+
+ Throws an exception of type if and only if specified
+ condition is true.
+
+ The condition that determines whether an exception will be thrown.
+
+ has not a public or internal constructor with no parameters,
+ or is abstract.
+
+
+ If is true, then an exception of type
+ will be thrown.
In order to do that,
+ must have a constructor which doesn't take any arguments.
+
+
+
+
+ Throws an exception of type with given message
+ if and only if specified condition is true.
+
+ The condition that determines whether an exception will be thrown.
+ The message the thrown exception will have.
+
+ has not a public or internal constructor which takes, as
+ parameters, either a or a and an
+ . The same exception is thrown when
+ is abstract.
+
+
+ If is true, then an exception of type
+ , with the message specified by ,
+ will be thrown.
In order to do that, must have either
+ a constructor which takes a and an
+ as arguments, or a constructor which takes a as only parameter.
+
If both constructors are available, then the one which takes a
+ and an will be used to throw the exception.
+
+
+
+
+ Throws an exception of type if and only if specified
+ condition is true.
+
+ The condition that determines whether an exception will be thrown.
+
+ The first parameter that will be used for the exception constructor, if needed.
+
+
+ Other parameters that will be used for the exception constructor, if needed.
+
+
+ has not a public or internal constructor with specified
+ parameters, or is abstract.
+
+
+ If is true, then an exception of type
+ will be thrown.
In order to do that,
+ must have a constructor which takes specified arguments.
+ Moreover, each specified argument must not be null, otherwise type inference will fail.
+
+
+
+
+ Throws an exception of type if and only if specified
+ condition is false.
+
+ The condition that determines whether an exception will be thrown.
+
+ has not a public or internal constructor with no parameters,
+ or is abstract.
+
+
+ If is false, then an exception of type
+ will be thrown.
In order to do that,
+ must have a constructor which doesn't take any arguments.
+
+
+
+
+ Throws an exception of type with given message
+ if and only if specified condition is false.
+
+ The condition that determines whether an exception will be thrown.
+ The message the thrown exception will have.
+
+ has not a public or internal constructor which takes, as
+ parameters, either a or a and an
+ . The same exception is thrown when
+ is abstract.
+
+
+ If is false, then an exception of type
+ , with the message specified by ,
+ will be thrown.
In order to do that, must have either
+ a constructor which takes a and an
+ as arguments, or a constructor which takes a as only parameter.
+
If both constructors are available, then the one which takes a
+ and an will be used to throw the exception.
+
+
+
+
+ Throws an exception of type if and only if specified
+ condition is false.
+
+ The condition that determines whether an exception will be thrown.
+
+ The first parameter that will be used for the exception constructor, if needed.
+
+
+ Other parameters that will be used for the exception constructor, if needed.
+
+
+ has not a public or internal constructor with specified
+ parameters, or is abstract.
+
+
+ If is false, then an exception of type
+ will be thrown.
In order to do that,
+ must have a constructor which takes specified arguments.
+ Moreover, each specified argument must not be null, otherwise type inference will fail.
+
+
+
+
+ Exception thrown by when the type parameter passed to that class
+ has something invalid (missing constructors, etc).
+
+
+
+
+ Validates email addresses stored as .
+
+
+
+
+ Default constructor.
+
+
+
+
+ Options used by the validation process.
+
+
+
+
+ Validates the email address stored in .
+
+ The email address that should be validated.
+ The validation context.
+ True if given email address is valid or null, false otherwise.
+
+
+
+ An email address validator.
+
+ An email address validator.
+
+
+
+ Validates the specified email address.
+
+
+ Validates the syntax of an email address.
+
+ If contains , then
+ the validator will use the newer International Email standards for validating the
+ email address.
+
+
+ true if the email address is valid; otherwise false.
+ An email address.
+ Customizations for the validation process.
+
+ is null.
+
+
+
+
+ Options used by validation process.
+
+
+
+
+ No option specified.
+
+
+
+
+ Whether the validator should allow international characters or not.
+
+
+
+
+ Whether the validator should allow addresses at top-level domains or not.
+
+
+
+
+ An enumeration validator which ensures given enumeration value is defined in specified
+ enumeration type. This also works when enumeration has been decorated with .
+
+
+
+
+ Ensures given enumeration value is defined in specified enumeration type.
+
+ The enumeration type.
+ The enumeration value.
+
+ True if given enumeration value is defined in specified enumeration type, false otherwise.
+
+ This also works when enumeration has been decorated with .
+
+
+
+ Ensures given enumeration value is defined in specified enumeration type.
+
+ The enumeration type.
+ The enumeration value.
+
+ True if given enumeration value is defined in specified enumeration type, false otherwise.
+
+ This also works when enumeration has been decorated with .
+
+
+
+ Ensures given enumeration value is defined in specified enumeration type.
+
+ The enumeration type.
+ The enumeration value.
+
+ True if given enumeration value is defined in specified enumeration type, false otherwise.
+
+ This also works when enumeration has been decorated with .
+
+
+
+ Validates an object public properties that have been decorated with the
+ custom attribute.
+
+
+
+
+ The placeholder used to indicate the starting object.
+
+
+
+
+ Prepares a readable messages containing all validation errors.
+
+ The validation errors.
+ An optional prefix.
+ A readable messages containing all validation errors.
+
+
+
+ Validates given object using information contained in the
+ custom attribute.
+
+ The object to be validated.
+ All validation errors found.
+ True if object is valid, false otherwise.
+
+
+
+ Validates enumeration-typed members.
+
+
+
+
+ Default constructor.
+
+
+
+
+ Validates the enumeration stored in .
+
+ The enumeration that should be validated.
+ The validation context.
+ True if given enumeration is valid, false otherwise.
+
+
+
+ Validates phone numbers stored as members.
+
+
+
+
+ Default constructor.
+
+
+
+
+ Validates the phone number stored in .
+
+ The phone number that should be validated.
+ The validation context.
+ True if given phone number is valid or null, false otherwise.
+
+
+
+ A phone number validator.
+
+ A phone number validator.
+
+
+
+ Validates the specified phone number.
+
+ A phone number.
+ true if the phone number is valid; otherwise false.
+
+
+
+ Indicates that the property should be validated.
+
+
+
+
+ Indicates that the property is required, that is, it will be checked against null.
+
+ Default value is false.
+
+
+
+
+ If the property is an , then this flag controls whether it
+ should enumerated or not.
+
+ Default value is true.
+
+
+
+
+ If the property is an , then this flag controls whether its
+ items are required or not.
+
+ Default value is false.
+
+
+
+
+ If the property is an , then this flag controls the minimum
+ value for .
+
+ Default value is
+
+ 0L
+
+ .
+
+
+
+
+ If the property is an , then this flag controls the maximum
+ value for .
+
+ Default value is .
+
+
+
+
+ Represents an error found while validating an object.
+
+
+
+
+ The path to the wrong property.
+
+
+
+
+ What caused the error.
+
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/Priority Queue.dll b/BikeSharingSystem/bin/Debug/Priority Queue.dll
new file mode 100644
index 0000000..667e6f9
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/Priority Queue.dll differ
diff --git a/BikeSharingSystem/bin/Debug/Priority Queue.pdb b/BikeSharingSystem/bin/Debug/Priority Queue.pdb
new file mode 100644
index 0000000..d7c41c9
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/Priority Queue.pdb differ
diff --git a/BikeSharingSystem/bin/Debug/Priority Queue.xml b/BikeSharingSystem/bin/Debug/Priority Queue.xml
new file mode 100644
index 0000000..0247587
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/Priority Queue.xml
@@ -0,0 +1,461 @@
+
+
+
+ Priority Queue
+
+
+
+
+ A copy of StablePriorityQueue which also has generic priority-type
+
+ The values in the queue. Must extend the GenericPriorityQueue class
+ The priority-type. Must extend IComparable<TPriority>
+
+
+
+ Instantiate a new Priority Queue
+
+ The max nodes ever allowed to be enqueued (going over this will cause undefined behavior)
+
+
+
+ Returns the number of nodes in the queue.
+ O(1)
+
+
+
+
+ Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize),
+ attempting to enqueue another item will cause undefined behavior. O(1)
+
+
+
+
+ Removes every node from the queue.
+ O(n) (So, don't do this often!)
+
+
+
+
+ Returns (in O(1)!) whether the given node is in the queue. O(1)
+
+
+
+
+ Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out.
+ If the queue is full, the result is undefined.
+ If the node is already enqueued, the result is undefined.
+ O(log n)
+
+
+
+
+ Returns true if 'higher' has higher priority than 'lower', false otherwise.
+ Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false
+
+
+
+
+ Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it.
+ If queue is empty, result is undefined
+ O(log n)
+
+
+
+
+ Resize the queue so it can accept more nodes. All currently enqueued nodes are remain.
+ Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior
+ O(n)
+
+
+
+
+ Returns the head of the queue, without removing it (use Dequeue() for that).
+ If the queue is empty, behavior is undefined.
+ O(1)
+
+
+
+
+ This method must be called on a node every time its priority changes while it is in the queue.
+ Forgetting to call this method will result in a corrupted queue!
+ Calling this method on a node not in the queue results in undefined behavior
+ O(log n)
+
+
+
+
+ Removes a node from the queue. The node does not need to be the head of the queue.
+ If the node is not in the queue, the result is undefined. If unsure, check Contains() first
+ O(log n)
+
+
+
+
+ Should not be called in production code.
+ Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue.
+
+
+
+
+ The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor).
+ Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead
+
+
+
+
+ Represents the current position in the queue
+
+
+
+
+ Represents the order the node was inserted in
+
+
+
+
+ A helper-interface only needed to make writing unit tests a bit easier (hence the 'internal' access modifier)
+
+
+
+
+ Resize the queue so it can accept more nodes. All currently enqueued nodes are remain.
+ Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior
+
+
+
+
+ Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize),
+ attempting to enqueue another item will cause undefined behavior.
+
+
+
+
+ A copy of FastPriorityQueue which is also stable - that is, when two nodes are enqueued with the same priority, they
+ are always dequeued in the same order.
+ See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information
+
+ The values in the queue. Must extend the StablePriorityQueueNode class
+
+
+
+ Instantiate a new Priority Queue
+
+ The max nodes ever allowed to be enqueued (going over this will cause undefined behavior)
+
+
+
+ Returns the number of nodes in the queue.
+ O(1)
+
+
+
+
+ Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize),
+ attempting to enqueue another item will cause undefined behavior. O(1)
+
+
+
+
+ Removes every node from the queue.
+ O(n) (So, don't do this often!)
+
+
+
+
+ Returns (in O(1)!) whether the given node is in the queue. O(1)
+
+
+
+
+ Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out.
+ If the queue is full, the result is undefined.
+ If the node is already enqueued, the result is undefined.
+ O(log n)
+
+
+
+
+ Returns true if 'higher' has higher priority than 'lower', false otherwise.
+ Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false
+
+
+
+
+ Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it.
+ If queue is empty, result is undefined
+ O(log n)
+
+
+
+
+ Resize the queue so it can accept more nodes. All currently enqueued nodes are remain.
+ Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior
+ O(n)
+
+
+
+
+ Returns the head of the queue, without removing it (use Dequeue() for that).
+ If the queue is empty, behavior is undefined.
+ O(1)
+
+
+
+
+ This method must be called on a node every time its priority changes while it is in the queue.
+ Forgetting to call this method will result in a corrupted queue!
+ Calling this method on a node not in the queue results in undefined behavior
+ O(log n)
+
+
+
+
+ Removes a node from the queue. The node does not need to be the head of the queue.
+ If the node is not in the queue, the result is undefined. If unsure, check Contains() first
+ O(log n)
+
+
+
+
+ Should not be called in production code.
+ Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue.
+
+
+
+
+ An implementation of a min-Priority Queue using a heap. Has O(1) .Contains()!
+ See https://github.com/BlueRaja/High-Speed-Priority-Queue-for-C-Sharp/wiki/Getting-Started for more information
+
+ The values in the queue. Must extend the FastPriorityQueueNode class
+
+
+
+ Instantiate a new Priority Queue
+
+ The max nodes ever allowed to be enqueued (going over this will cause undefined behavior)
+
+
+
+ Returns the number of nodes in the queue.
+ O(1)
+
+
+
+
+ Returns the maximum number of items that can be enqueued at once in this queue. Once you hit this number (ie. once Count == MaxSize),
+ attempting to enqueue another item will cause undefined behavior. O(1)
+
+
+
+
+ Removes every node from the queue.
+ O(n) (So, don't do this often!)
+
+
+
+
+ Returns (in O(1)!) whether the given node is in the queue. O(1)
+
+
+
+
+ Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out.
+ If the queue is full, the result is undefined.
+ If the node is already enqueued, the result is undefined.
+ O(log n)
+
+
+
+
+ Returns true if 'higher' has higher priority than 'lower', false otherwise.
+ Note that calling HasHigherPriority(node, node) (ie. both arguments the same node) will return false
+
+
+
+
+ Removes the head of the queue and returns it.
+ If queue is empty, result is undefined
+ O(log n)
+
+
+
+
+ Resize the queue so it can accept more nodes. All currently enqueued nodes are remain.
+ Attempting to decrease the queue size to a size too small to hold the existing nodes results in undefined behavior
+ O(n)
+
+
+
+
+ Returns the head of the queue, without removing it (use Dequeue() for that).
+ If the queue is empty, behavior is undefined.
+ O(1)
+
+
+
+
+ This method must be called on a node every time its priority changes while it is in the queue.
+ Forgetting to call this method will result in a corrupted queue!
+ Calling this method on a node not in the queue results in undefined behavior
+ O(log n)
+
+
+
+
+ Removes a node from the queue. The node does not need to be the head of the queue.
+ If the node is not in the queue, the result is undefined. If unsure, check Contains() first
+ O(log n)
+
+
+
+
+ Should not be called in production code.
+ Checks to make sure the queue is still in a valid state. Used for testing/debugging the queue.
+
+
+
+
+ Represents the order the node was inserted in
+
+
+
+
+ The IPriorityQueue interface. This is mainly here for purists, and in case I decide to add more implementations later.
+ For speed purposes, it is actually recommended that you *don't* access the priority queue through this interface, since the JIT can
+ (theoretically?) optimize method calls from concrete-types slightly better.
+
+
+
+
+ Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out.
+ See implementation for how duplicates are handled.
+
+
+
+
+ Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it.
+
+
+
+
+ Removes every node from the queue.
+
+
+
+
+ Returns whether the given node is in the queue.
+
+
+
+
+ Removes a node from the queue. The node does not need to be the head of the queue.
+
+
+
+
+ Call this method to change the priority of a node.
+
+
+
+
+ Returns the head of the queue, without removing it (use Dequeue() for that).
+
+
+
+
+ Returns the number of nodes in the queue.
+
+
+
+
+ The Priority to insert this node at. Must be set BEFORE adding a node to the queue (ideally just once, in the node's constructor).
+ Should not be manually edited once the node has been enqueued - use queue.UpdatePriority() instead
+
+
+
+
+ Represents the current position in the queue
+
+
+
+
+ A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than
+ FastPriorityQueue
+
+ The type to enqueue
+ The priority-type to use for nodes. Must extend IComparable<TPriority>
+
+
+
+ Given an item of type T, returns the exist SimpleNode in the queue
+
+
+
+
+ Returns the number of nodes in the queue.
+ O(1)
+
+
+
+
+ Returns the head of the queue, without removing it (use Dequeue() for that).
+ Throws an exception when the queue is empty.
+ O(1)
+
+
+
+
+ Removes every node from the queue.
+ O(n)
+
+
+
+
+ Returns whether the given item is in the queue.
+ O(n)
+
+
+
+
+ Removes the head of the queue (node with minimum priority; ties are broken by order of insertion), and returns it.
+ If queue is empty, throws an exception
+ O(log n)
+
+
+
+
+ Enqueue a node to the priority queue. Lower values are placed in front. Ties are broken by first-in-first-out.
+ This queue automatically resizes itself, so there's no concern of the queue becoming 'full'.
+ Duplicates are allowed.
+ O(log n)
+
+
+
+
+ Removes an item from the queue. The item does not need to be the head of the queue.
+ If the item is not in the queue, an exception is thrown. If unsure, check Contains() first.
+ If multiple copies of the item are enqueued, only the first one is removed.
+ O(n)
+
+
+
+
+ Call this method to change the priority of an item.
+ Calling this method on a item not in the queue will throw an exception.
+ If the item is enqueued multiple times, only the first one will be updated.
+ (If your requirements are complex enough that you need to enqueue the same item multiple times and be able
+ to update all of them, please wrap your items in a wrapper class so they can be distinguished).
+ O(n)
+
+
+
+
+ A simplified priority queue implementation. Is stable, auto-resizes, and thread-safe, at the cost of being slightly slower than
+ FastPriorityQueue
+ This class is kept here for backwards compatibility. It's recommended you use Simple
+
+ The type to enqueue
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/System.Collections.NonGeneric.dll b/BikeSharingSystem/bin/Debug/System.Collections.NonGeneric.dll
new file mode 100644
index 0000000..4038564
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.Collections.NonGeneric.dll differ
diff --git a/BikeSharingSystem/bin/Debug/System.Data.Common.dll b/BikeSharingSystem/bin/Debug/System.Data.Common.dll
new file mode 100644
index 0000000..2ab150e
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.Data.Common.dll differ
diff --git a/BikeSharingSystem/bin/Debug/System.IO.FileSystem.Primitives.dll b/BikeSharingSystem/bin/Debug/System.IO.FileSystem.Primitives.dll
new file mode 100644
index 0000000..ad9c238
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.IO.FileSystem.Primitives.dll differ
diff --git a/BikeSharingSystem/bin/Debug/System.IO.FileSystem.dll b/BikeSharingSystem/bin/Debug/System.IO.FileSystem.dll
new file mode 100644
index 0000000..7c43977
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.IO.FileSystem.dll differ
diff --git a/BikeSharingSystem/bin/Debug/System.Reflection.TypeExtensions.dll b/BikeSharingSystem/bin/Debug/System.Reflection.TypeExtensions.dll
new file mode 100644
index 0000000..77f1205
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.Reflection.TypeExtensions.dll differ
diff --git a/BikeSharingSystem/bin/Debug/System.Runtime.Serialization.Formatters.dll b/BikeSharingSystem/bin/Debug/System.Runtime.Serialization.Formatters.dll
new file mode 100644
index 0000000..fce63ab
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.Runtime.Serialization.Formatters.dll differ
diff --git a/BikeSharingSystem/bin/Debug/System.Runtime.Serialization.Primitives.dll b/BikeSharingSystem/bin/Debug/System.Runtime.Serialization.Primitives.dll
new file mode 100644
index 0000000..0daf235
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/System.Runtime.Serialization.Primitives.dll differ
diff --git a/BikeSharingSystem/bin/Debug/TeeChart.dll b/BikeSharingSystem/bin/Debug/TeeChart.dll
new file mode 100644
index 0000000..0382eb1
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/TeeChart.dll differ
diff --git a/BikeSharingSystem/bin/Debug/TeeChart.xml b/BikeSharingSystem/bin/Debug/TeeChart.xml
new file mode 100644
index 0000000..6e8128d
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/TeeChart.xml
@@ -0,0 +1,21584 @@
+
+
+
+ TeeChart
+
+
+
+
+ Base Animation class.
+
+
+
+
+ Required for Windows.Forms Class Composition Designer support
+
+
+
+
+ Enables/Disables the indexed Animation.
+
+
+
+
+ Gets and sets the speed of the animation effect, in milliseconds.
+
+
+
+
+ Gets and sets the target to which the animation is applied.
+
+
+
+
+ Gets and sets the type of trigger which starts the animation.
+
+
+
+
+ Returns the associated bitmap icon for a given Animation class.
+ This icon is used at Animations gallery ListBox and Animations Editor dialog.
+
+
+
+
+ Creates a new Animation object and sets the Name and Chart properties.
+
+
+
+
+ Creates a new animation from the System.Type of an existing animations object.
+
+
+
+
+ Collection of Animation components.
+
+
+
+
+ Adds a new animation to your TChart.
+
+
+
+
+ Returns the corresponding point index which has the specified Value.
+
+
+
+
+ Removes a animation from the TChart.
+
+
+
+
+ Removes (and optionally disposes) all Animations.
+
+
+
+
+ Removes and disposes all Animations.
+
+
+
+
+ Internal. Exchange animation order.
+
+
+
+
+ Internal. Exchange animation order.
+
+
+
+
+ Internal use. Animation support EventArgs
+
+
+
+
+ Internal use. Animation support EventArgs
+
+
+
+
+ Internal use. Animation support EventArgs
+
+
+
+
+ Internal use. Animation support EventArgs
+
+
+
+
+ Internal use. Animation support EventArgs
+
+
+
+
+ Expand animation.
+
+
+
+
+ The size of the expansion effect, in pixels.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Event arguments class used by AllowScroll chart event.
+
+
+
+
+ Internal Axis LabelValue EventArgs. See
+
+
+
+
+ Draws the label when set to true.
+
+
+
+
+ Sets position of Labels on an Axis.
+
+
+
+
+ Default position.
+
+
+
+
+ Labels aligned opposite the default position.
+
+
+
+
+ Defines the possible values of the Axis.Labels.Style property
+
+
+
+ Choose the Style automatically
+
+
+ No label. This will trigger the event with empty strings
+
+
+ Axis labeling is based on axis Minimum and Maximum properties
+
+
+ Each Series point will have a Label using SeriesMarks style
+
+
+ Each Series point will have a Label using Series.XLabels strings
+
+
+ Each Series point will have a Label using Series.XValues (notMandatory) strings
+
+
+
+ Axis Label characteristics
+
+
+
+
+ Accesses the Label characteristics of Axis Labels.
+
+
+
+
+ When true, displays DateTime Labels in Local Time rather than UTC.
+
+
+
+
+ Sets the Axis.Increment property to calculate Axis Labels in exact DateTime steps.
+
+
+
+
+ Defines the rotation degree applied to each Axis Label.
+
+
+
+
+ Controls whether the Labels at Axis Minimum and Maximum positions will be shown or not.
+
+
+
+
+ Specifies the percent amount of minimum distance between Axis Labels.
+
+
+
+
+ Changes spacing occupied by the axis labels between the ticks and the title.
+
+
+
+
+ Sets the style of the labels.
+
+
+
+
+ Controls if Axis labels will be automatically "rounded" to the nearest magnitude.
+
+
+
+
+ Sets the axis labels to be drawn in two rows or columns.
+
+
+
+
+ Is a standard DateTime formatting string specifier used to draw the axis labels.
+
+
+
+
+ Specifies the desired formatting string to be applied to Axis Labels.
+
+
+
+
+ Automatically breaks DateTime Labels on occurence of a space " ".
+
+
+
+
+ Sets Separator string to invoke 'new line' in string St
+
+ Input string
+ String to be used for new line
+
+
+
+ Enables/disables the display of Axis Labels in exponent format with super-script fonts.
+
+
+
+
+ Sets position of Labels on an Axis
+
+
+
+
+ Contains the custom labels
+
+
+
+
+ When True, the Axis grid will not try to resize to accomodate the
+ Label Font size.
+
+
+
+
+ Internal use. When True, the Series responsible can intervene to hide
+ specific Labels.
+
+
+
+
+ Returns the Index of the "clicked" label.
+
+
+
+
+ Returns the Axis Label width of the Value parameter.
+
+ Axis value
+ Axis Label width in pixels
+
+
+
+ Returns the Axis Label height of the Value parameter.
+
+ Axis value
+ Axis Label height in pixels
+
+
+
+ Returns the corresponding text representation of the Value parameter.
+
+
+
+
+ Custom labels list
+
+
+
+
+ Access indexed Label characteristics
+
+
+
+
+ Add New Label
+
+ The Axis Data value
+ The new AxisLabelItem
+
+
+
+ Add New Label with Text
+
+ Label text
+ The Axis Data value
+ The new AxisLabelItem
+
+
+
+ Clear Custom Labels list
+
+
+
+
+ Refresh Label
+
+
+
+
+ The Axis Value of the Label
+
+
+
+
+ Axis Title characteristics
+
+
+
+
+ Rotation in degrees applied to each Axis Label.
+
+
+
+
+ Defines the string of text used for each Chart Axis.
+
+
+
+
+ Change spacing between the axis/labels and the outer panel edge.
+
+
+
+
+ PositionUnits specifies Axis.Labels.PositionUnits property as percentage or pixels.
+
+
+
+
+ Units as a percentage of horizontal or vertical chart size.
+
+
+
+
+ Units as pixels.
+
+
+
+
+ Access to all Axis characteristics
+
+
+
+
+ Returns "Value" parameter coordinate position in pixels.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the specified Value.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the specified Value.
+
+
+
+
+ Returns the corresponding value of a Screen position.
+
+
+
+
+ Determines the pen used to draw the axis lines
+
+
+
+
+ Sets the width of the AxisLinePen
+
+
+
+
+ Determines the kind of pen used to draw the Grid lines at every Axis Label position.
+
+
+
+
+ Sets the style of the grid lines.
+
+
+
+
+ Aligns the Grid to the centre.
+
+
+
+
+ Determines the kind of Pen used to draw Axis marks along the Axis line.
+
+
+
+
+ Length of Axis Ticks in pixels.
+
+
+
+
+ Accesses the Label characteristics of Axis Labels.
+
+
+
+
+ Rounds Axis to nearest Integer value.
+
+
+
+
+ Rounds Axis to nearest Integer value.
+
+
+
+
+ Calculates Max and Min of axis scale based on associated Series.
+
+
+
+
+ Sets a custom axis to be drawn horizontally.
+
+
+
+
+ Sets the Axis to Otherside (Left or Right, Top or Bottom)
+
+
+
+
+ Internal use.
+
+
+
+
+ Called internally to recalculate the max and min values using the Rect parameter positions.
+
+
+
+
+ Called internally to recalculate the max and min values using the Rect parameter positions.
+
+
+
+
+ Returns true if Axis is a Custom Axis
+
+
+
+
+ Calculates Maximum and Minimum values based on Max and Min values of the dependent Series.
+
+
+
+
+ Controls maximum value automatically based on the maximum value of its associated Series.
+
+
+
+
+ Controls minimum value automatically based on the minimum value of its associated Series.
+
+
+
+
+ Determines the kind of pen used to draw the Axes.
+
+
+
+
+ Determines the pen used to draw the Chart Grid.
+
+
+
+
+ An axis is "DateTime" if at least one Active Series with
+ datetime values is associated to it
+
+
+
+
+ Is the minimum step between axis labels. Can use DateTimeSteps for date-time axis.
+
+
+
+
+ When true, zooms associated to this axis will not exceed the standard axis scale. This
+ can be useful for multi axis charts to avoid a zoom on a neighbouring axis sending the
+ associated contents of this Axis out of bounds.
+
+
+
+
+ The offset applied to the property.
+ If is 10 and IncrementOffset is 5, axis labels drawn (5, 15, 25 etc.).
+
+
+
+
+ Swaps the Axis Minimum and Maximum scales.
+
+
+
+
+ Scales the Axis Logarithmically when True.
+
+
+
+
+ The amount of pixels that will be left as a margin at axis maximum position.
+
+
+
+
+ Sets Axis Maximum value.
+
+
+
+
+ Advanced use. Smallest Axis calculation increment. Default: 1e-12
+
+
+
+
+ Sets Axis Minimum value.
+
+
+
+
+ Pixels separation at axis minimum.
+
+
+
+
+ Determines the number of Axis minor ticks between major ticks.
+
+
+
+
+ Determines the Pen used to draw the Axis Minor ticks.
+
+
+
+
+ Use this property when is set to
+ True to define an Axis pair whose bounding rectangle will limit
+ the plotted Gridilines for either Axis.
+
+ It is possible to have a one sided partnership where only one
+ of the two Axes limits its Gridline plot.
+
+
+
+
+ When True and is set to the value of
+ a valid Axis, Axis GridlInes will zone to the bounding rectangle
+ of the two Partner Axes.
+
+ It is possible to have a one sided partnership where only one
+ of the two Axes limits its Gridline plot.
+
+
+
+
+ Please use Position property.
+
+
+
+
+ Sets the screen co-ordinate where axis is drawn.
+
+
+
+
+ Sets the Axis Ticks and Axis Grid to be drawn at Labels only.
+
+
+
+
+ Determines the Pen used to draw Axis marks along the Axis line.
+
+
+
+
+ Determines the Pen used to draw Axis marks inside the Axis line.
+
+
+
+
+ Title attributes
+
+
+
+
+ Shows or hides all the five Chart Axes at once.
+
+
+
+
+ Determines the Z axis position along chart Depth
+
+
+
+
+ Axis position relative to Chart.
+
+
+
+
+ Defines Position units (pixels or percentage) for the property.
+
+
+
+
+ Defines Position units (pixels or percentage) for the and
+ properties.
+
+
+
+
+ Axis Start position as percentage of Chart.
+
+
+
+
+ Axis End position as percentage of Chart.
+
+
+
+
+ Sets the base for the Logarithmic scale when Axis Logarithmic = True.
+
+
+
+
+ Sets characteristics of the Grid coincidental to Minor Ticks.
+
+
+
+
+ Returns the minimum and maximum values of the associated Series.
+
+
+
+
+ Returns the width in pixels for the longest "Label"
+ of all series having GetAxisLabel assigned, active or not.
+
+
+
+
+ Returns the maximum width in pixels of all Axis Labels.
+
+ Maximum width in pixels
+
+
+
+ Advanced use. Requests the Axis to re-check assigned calculation methods
+
+
+
+
+ Returns the amount in pixels of a portion of the axis of size "Value" in axis scales.
+
+
+
+
+ Returns the corresponding value of a Screen position.
+
+ Screen value
+ Position on screen in pixels
+
+
+
+ Returns if X and Y coordinates are close to the Axis position.
+
+ X and Y coordinates
+ X and Y coordinates as integer
+
+
+
+ Returns if X and Y coordinates are close to the Axis position.
+
+ x Pixel location
+ y Pixel location
+ True if x,y location on or near to Axis
+
+
+
+ Maximum X value for the specified Axis.
+
+
+
+
+ Maximum Y value for the specified Axis.
+
+
+
+
+ Minimum X value for the specified Axis.
+
+
+
+
+ Minimum Y value for the specified Axis.
+
+
+
+
+ Returns a Time or Date format depending if the astep parameter is lower than one day (time) or greater (date).
+
+
+
+
+ Returns the calculated Axis Label increment.
+
+ The maximum allowable LabelSize in pixels.
+ Size of increment in Axis units.
+
+
+
+ Returns the calculated Axis Label increment.
+
+
+
+
+ Internal use by Chart when creating Axes
+
+ Chart Rectangle
+ Wall allowance (standard Axes only)
+
+
+
+ Internal use. Returns Axis Datetime step.
+
+ Desired Increment
+
+
+
+
+ Draws Axis Label (string) at specified X,Y co-ordinate at Angle.
+
+
+
+
+ Draws Axis Label (string) in font f at specified X,Y co-ordinate at Angle.
+
+
+
+
+ TeeChart internal use. Outputs the title during the chart painting procedure.
+
+
+
+
+ Is a set of constants used to specify a date time increment.
+
+
+
+
+ Returns the most logical Axis Label style.
+
+
+
+
+ Displays an Axis at the specified screen positions with the current axis scales.
+
+ True if space allowance for Axis Labelling required.
+
+
+
+ Displays an Axis at the specified screen positions with the current axis scales.
+
+
+
+
+ Displays an Axis at the specified screen positions with the current axis scales.
+
+
+
+
+ Dispaces Axis Minimum and Maximum values.
+
+
+
+
+ Changes the Axis Minimum and Maximum scales.
+
+ Axis Minimum scale
+ Axis Maximum scale
+
+
+
+ Changes the Axis Minimum and Maximum scales.
+
+ Axis Minimum scale
+ Axis Maximum scale
+
+
+
+ Displays an Axis at the specified screen positions with the current axis scales.
+
+
+
+
+ Displays an Axis at the specified screen positions with the current axis scales.
+
+
+
+
+ Used to access the Custom series List.
+
+
+
+
+ Creates and adds a custom axis to the chart.
+
+
+
+
+ Adds a Custom Axis.
+
+
+
+
+ Removes the Custom Axis of Index 'CustomAxisIndex'.
+
+
+
+
+ Removes (and optionally disposes) all Series.
+
+
+
+
+ Removes and disposes all Series.
+
+
+
+
+ Removes all Custom Axes.
+
+
+
+
+ Z plane Axis characteristics
+
+
+
+
+ Gets or sets whether label Text set as Series title or as point labels.
+
+
+
+
+ Shows or hides the Depth Axis.
+
+
+
+
+ Access to list of all TChart Axes. Includes Custom and Depth Axes
+
+
+
+
+ Access to indexed Axis
+
+
+
+
+ Returns the number of custom axes.
+
+
+
+
+ Draw axes behind or in front of Series.
+
+
+
+
+ Custom defined axes collection.
+
+
+
+
+ Left Axis.
+
+
+
+
+ Top Axis.
+
+
+
+
+ Right Axis.
+
+
+
+
+ Bottom Axis.
+
+
+
+
+ DepthTop Axis.
+
+
+
+
+ Depth Axis.
+
+
+
+
+ Shows / Hides all Chart axes.
+
+
+
+ Chart Paint Event Handler
+
+
+ Chart Print Event Handler
+
+
+
+ Type of Mouse action
+
+
+
+ MouseButton down action
+
+
+ MouseMove
+
+
+ MouseButton Up action
+
+
+ MouseWheel action
+
+
+
+ Common Chart characteristics interface
+
+
+
+
+ Chart contents. See and for use.
+
+
+
+
+ Tooltips
+
+
+
+
+ Gets or sets the foreground color for the ToolTip.
+
+
+
+
+ Gets or sets the background color for the ToolTip.
+
+
+
+
+ Sets the time lag before the Tool Tip appears.
+
+
+
+
+ Gets or sets the period of time the ToolTip remains visible if the pointer is stationary on a control with specified ToolTip text.
+
+
+
+
+ Hides a ToolTip.
+
+
+
+
+ Makes Visible a ToolTip.
+
+
+
+
+ Read only. Used to get the four sides of the Chart (Left, Top, Right and Bottom)
+
+
+
+
+ Sets the Chart Width in pixels.
+
+
+
+
+ Run-time and read only. The MaxZOrder property indicates the Chart depth in number
+ of Series. When Chart.View3D is True, each Series has a Z order. The Series
+ Z order defines the order along the Z axis when Series are displayed.
+ The MaxZOrder property is the maximum Z order of all active Series.
+ Some Series share a same Z order (stacked Bars, stacked Areas, etc).
+
+
+
+
+ Sets the Chart Height in pixels.
+
+
+
+
+ Returns a color from global ColorPalette array variable.
+
+
+
+
+ Returns array list of objects that implement the ITeeEventListener interface.
+
+
+
+
+ Holds a custom tag object.
+
+
+
+
+ Displays a text box at the cursor.
+
+
+
+
+ Returns the Active series (visible) that corresponds to the
+ ItemIndex position in the Legend
+
+
+
+
+ Returns the Series.Title string.
+
+
+
+
+ Main drawing procedure. Paints all Chart contents.
+
+
+
+
+ Saves the current chart image to the specified File Name.
+
+
+
+
+ Saves the current chart image to the specified File Name.
+
+
+
+
+ Saves the current chart image to the specified File Name.
+
+
+
+
+ Accesses the Zoom characteristics of the Chart.
+
+
+
+
+ Sets the scrolling direction or denies scrolling.
+
+
+
+
+ Returns the number of active (visible) series.
+
+ Number of Active (visible) Series.
+
+
+
+ Returns if no series are active (visible) and associated to the Axis "a" parameter.
+
+
+
+
+ Returns the first Series that depends on the specified Axis.
+
+
+
+
+ Returns the width in pixels for the longest "Label"
+ of all series, active or not.
+
+
+
+
+ Returns the height in pixels for the tallest "Label"
+ of Axis, active or not.
+
+
+
+
+ Returns the longest width in pixels for all the active (visible) series marks.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the highest of all the current Series Y point values.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Returns whether the AColor parameter is used by any Series or not.
+
+ Color
+ When true, uses current Chart background
+
+
+
+ Returns a color from the default color palette not used by any Series.
+
+
+
+
+ Paints the Chart on the Drawing Canvas g.
+
+
+
+
+ Default indexer ( Example: tChart1[0].Color=Color.Blue; is equivalent to tChart1.Series[0].Color=Color.Blue; )
+
+
+
+
+ Returns first active (visible) series.
+
+
+
+
+ Returns the string to display at Legend for a given series and point index.
+
+
+
+
+ Returns the number of active (visible) series.
+
+ Number of Active (visible) Series.
+
+
+
+ When the Legend style is "Series", returns the series that
+ corresponds to the Legend "ItemIndex" position. The
+ "OnlyActive" parameter, when false takes into account all
+ series, visibly active or not.
+
+
+
+
+ Returns the text string corresponding to a Legend position.
+
+
+
+
+ The IChart parent of the Chart.
+
+
+
+
+ Background visible attributes.
+
+
+
+
+ Printing related properties.
+
+
+
+
+ Accesses multiple page characteristics of the Chart.
+
+
+
+
+ Legend characteristics.
+
+
+
+
+ Defines Text shown at top of the Chart.
+
+
+
+
+ Defines Text shown directly below Header.
+
+
+
+
+ Defines Text shown at the bottom of the Chart.
+
+
+
+
+ Defines Text shown directly above Footer.
+
+
+
+
+ 3D view parameters.
+
+
+
+
+ Accesses TeeChart Draw properties and methods.
+
+
+
+
+ Collection of Series contained in this Chart.
+
+
+
+
+ Collection of Tool components contained in this Chart.
+
+
+
+
+ Collection of Animation components contained in this Chart.
+
+
+
+
+ Accesses left, bottom and back wall characteristics of the Chart.
+
+
+
+
+ Collection of predefined and custom axis objects.
+
+
+
+
+ Accesses Chart export properties and methods.
+
+
+
+
+ Accesses Chart import properties and methods.
+
+
+
+
+ Underlying TeeChart exception class
+
+
+
+
+ Internal use. Underlying Chart event class
+
+
+
+
+ Interface supports inter-Component communication
+
+
+
+
+ Internal use. Mouse events
+
+
+
+
+
+ EventArgs to support Commander LabelText
+
+
+
+ ChartController SetLabel Event Handler
+
+
+
+ Sets Commander buttonsize.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Internal use. Provides an Event to subscribers to ITeeEventListener interface.
+
+
+
+
+ Enables/disables the display of the ChartController's advisory status messages.
+
+
+
+
+ Accesses the LabelText for the ChartController ToolStrip.
+
+
+
+ ChartListBox Edit event Handler
+
+
+
+ Determines the aspect of the interactive boxes of Legend items.
+
+
+
+
+
+ Displays boxes as check-boxes.
+
+
+
+
+ Displays boxes as radio-buttons.
+
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Selects Chart to which the TChartListbox is linked.
+
+
+
+
+ Fills TChartListbox with Series from Chart.
+
+
+
+
+ Accesses the indexed Series.
+
+
+
+
+ Changes the Series type for the Series of the given index.
+
+
+
+
+ Gets and Sets the SeriesList index value of the selected Series.
+
+
+
+
+ Duplicates the Series (Seriesindex) to a new Series.
+
+
+
+
+ Selects all the Series present in TChartListBox.
+
+
+
+
+ Delete the current selected Series, if any. Returns True if deleted.
+
+
+
+
+ Required for Windows.Forms Class Composition Designer support
+
+
+
+
+ Required for Windows.Forms Class Composition Designer support
+
+
+
+
+ Displays/Hides the 'Series type icon' in the Series List.
+
+
+
+
+ Displays/Hides the 'Series Colour' box in the Series List.
+
+
+
+
+ Displays/Hides the 'Series Title' in the Series List.
+
+
+
+
+ Displays/Hides the 'Active Series' CheckBox in the Series List.
+
+
+
+
+ Controls the height of an item in a list box when the Style property is OwnerDrawFixed.
+
+
+
+
+ Use Items List to add, insert, delete and move items.
+
+
+
+
+ Setting AllowAddSeries enables/disables the addition of Series.
+
+
+
+
+ Enable/disable deletion of Series.
+
+
+
+
+ Enable prompt 'yes/no' on deleting Series.
+
+
+
+
+ The ListBox uses this property to display checkboxes or radiobuttons at each list item.
+
+
+
+
+ Enables/disables the Series color to be changed within the ChartListBox.
+
+
+
+
+ Enables/disables the Series type to be changed within the ChartListBox.
+
+
+
+
+ Enables/disables Series to be dragged within the ChartListBox.
+
+
+
+
+ Gets and Sets the Active Series group.
+
+
+
+
+ Use this property to update external controls that list or act upon the contents of the ChartListbox.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Commander control.
+
+
+
+
+ EventArgs to support Commander LabelText
+
+
+
+ Commander SetLabel Event Handler
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Internal use. Provides an Event to subscribers to ITeeEventListener interface.
+
+
+
+
+ Enables/disables the display of TeeCommander's advisory status messages.
+
+
+
+
+ Accesses the LabelText for the TeeCommander navigator bar.
+
+
+
+ Delete Chart EventArgs
+
+
+ New Chart EventArgs
+
+
+
+
+ Triggered after Chart is deleted from the ChartBook.
+
+
+
+
+ Triggered after Chart is added to the ChartBook.
+
+
+
+
+ Add Chart to ChartBook.
+
+
+
+
+ Returns the current active Chart.
+
+
+
+
+ Returns the current active Commander Toolbar.
+
+
+
+
+ When True shows ToolBar[s] associated with ChartBook Chart[s].
+
+
+
+
+ Chart Editor
+
+
+ public void LocalShowEditor()
+ {
+ Steema.TeeChart.Editor editor = new Steema.TeeChart.Editor(tChart1);
+
+ editor.HelpFileName="myHelpFile.chm";
+ editor.Title="My Charting App - Chart Editor";
+
+ Steema.TeeChart.Editors.ChartEditorOptions[] options=new Steema.TeeChart.Editors.ChartEditorOptions[2];
+
+ options[0]=Steema.TeeChart.Editors.ChartEditorOptions.Help;
+ options[1]=Steema.TeeChart.Editors.ChartEditorOptions.Add;
+ options[1]=Steema.TeeChart.Editors.ChartEditorOptions.Delete;
+
+ editor.Options=options;
+
+ editor.ShowModal();
+ }
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ When True, editor tabs are "highlighted"
+
+
+
+
+ Use this property to hide TeeChart Editor tabs.
+
+
+
+
+ Gets or sets the initial tab to display when showing the Chart editor.
+
+
+
+
+ Gets or sets the Chart control to be edited.
+
+
+
+
+ Path and file name of custom user help file to show when
+ clicking the Help button at Chart editor.
+
+
+
+
+ The text to show as caption of Chart editor dialog.
+ Empty title shows default caption.
+
+
+
+
+ Enables or disables Chart auto-repainting while modifying
+ properties at Chart editor.
+
+
+
+
+ Shows the Chart editor dialog.
+
+ The TChart control to be edited.
+ If user pressed Escape key or clicked OK button.
+
+
+
+ Shows the Chart editor dialog.
+
+ The owner of the dialog, tipically your Form
+
+
+
+ Shows the Chart editor dialog.
+
+
+
+
+ English Constants.
+
+
+
+
+ ArabicConst.
+
+
+
+
+ BrazilianConst.
+
+
+
+
+ Catalan Constants.
+
+
+
+
+ DanishConst.
+
+
+
+
+ DutchConst.
+
+
+
+
+ FinnishConst.
+
+
+
+
+ FrenchConst.
+
+
+
+
+ German Constants.
+
+
+
+
+ ItalianConst.
+
+
+
+
+ PortugueseConst.
+
+
+
+
+ SloveneConst.
+
+
+
+
+ Spanish Constants
+
+
+
+
+ SwedishConst.
+
+
+
+
+ Text message and dialogue constants
+
+
+
+
+ Summary description for TeeSHP.
+
+
+
+
+ Loads an ESRI(c) SHP file into a Map series.
+
+
+
+
+
+
+
+
+
+
+ Abstract class to define Series.DataSource components.
+
+
+
+
+ The Series that has this component as DataSource.
+
+
+
+
+ Fills Series with data from source.
+
+
+
+
+ Timespan grouping elements
+
+
+
+
+ Aggregate grouping elements
+
+
+
+
+ Abstract class to define Database Series.DataSource components.
+
+
+
+
+ Returns True when object is a valid source.
+
+
+
+
+ Fills a Series with specified summary fields from dataset.
+ This component must be assigned to Series.DataSource property.
+
+
+
+
+ Use this constructor if you intend to setup the SummarySource contents later.
+
+
+
+
+ Use this constructor if you already have the datasource available.
+
+
+
+
+ Stores the Datasource associated with this SingleRecordSource
+
+
+
+
+ Refreshes the Series from the SingleRecordSource Datasource.
+ You do not need to call this method directly, please use
+
+
+
+
+
+ Fills a Series with fields from a single dataset row.
+ This component must be assigned to Series.DataSource property.
+
+
+
+
+ Use this constructor if you intend to setup the SingleRecordSource contents later.
+
+
+
+
+ Use this constructor if you don't yet have the information for CurrencyManager available.
+
+
+
+
+ Use this constructor to load with all the SingleRecordSource elements.
+
+
+
+
+ Stores fieldnames for the SingleRecordSource
+
+
+
+
+ Set RecordCurrency to the Currency Manager to track the Datasource
+ position when navigating records
+
+ myCurrencyManager = (CurrencyManager)this.BindingContext[sourceTable];
+ singleRecordSource1.RecordCurrency=myCurrencyManager;
+
+
+
+ Stores the Datasource associated with this SingleRecordSource
+
+
+
+
+ Indicates which dataset row to use to fill series.
+
+
+
+
+ Refreshes the Series from the SingleRecordSource Datasource.
+ You do not need to call this method directly, please use
+
+
+
+
+
+ Source Textfield charactistics
+
+
+
+
+ TypeConverter for TextField.
+
+
+
+
+ Stores the index of the added textsource field.
+
+
+
+
+ Stores the name of the added textsource field.
+
+
+
+
+ TextField Collection
+
+
+
+
+ Adds a textsource field into the TextFieldCollection.
+
+
+
+
+ Adds a textsource field into the TextFieldCollection.
+
+
+
+
+ Inserts a textsource field into the TextFieldCollection at the specific index.
+
+
+
+
+ Removes a textsource field from the TextFieldCollection.
+
+
+
+
+
+ Specifies the decimal separator used to read numbers within a TextSource.
+
+
+
+
+ Returns true when FileName property starts with "http://"
+
+
+
+
+ Determines if crosstab will acumulate dataset field values
+ or will simply count records.
+
+
+
+
+
+ Use this constructor if you intend to setup the DataSource contents later.
+
+
+
+
+ Use this constructor if you already have the datasource available.
+
+
+
+
+ When records in the database contain labels or group texts
+ that are only different in case, setting this property to True
+ will consider texts as different, thus creating new series or groups in the final chart.
+
+
+
+
+ The field in the dataset to be used to add labels (text) to series points.
+
+
+
+
+ The field in the dataset to be used as grouping field.
+ Different values in this field will be used to create additional series.
+
+
+
+
+ The field in the dataset where values will be obtained
+ to perform accumulation in the final crosstab chart.
+
+
+
+
+ Determines how will the crosstab use database values to add points to series.
+
+
+
+
+ Stores the Datasource associated with this CrossTabSource.
+
+
+
+
+ The Series that has this component as DataSource.
+
+
+
+
+ Refreshes the Series from the CrossTabSource Datasource.
+ You do not need to call this method directly, please use
+
+
+
+
+
+ SeriesDataAdapter.
+
+
+
+
+
+ ValueList to use as a target for the XMLImport's data.
+
+
+
+
+ Non-visible class for Chart element common characteristics
+
+
+
+
+ Chart associated with this object
+
+
+
+
+ Gets or sets an object that provides additional data about the TChart object.
+
+
+
+
+
+
+ Boolean variable to change.
+ New value.
+
+
+
+ Use Invalidate when the entire canvas needs to be repainted.
+
+
+
+
+ Chart view characteristics
+
+
+
+
+ Gets or sets the angle in degrees of 3D rotation.
+
+
+
+
+ Gets or sets the angle, as Float, in degrees of 3D rotation.
+
+
+
+
+ Gets or sets the angle in degrees of 3D elevation.
+
+
+
+
+ Gets or sets the angle, as float, in degrees of 3D elevation.
+
+
+
+
+ Gets or sets the angle in degrees of 3D tilt.
+
+
+
+
+ When True, multiple Series are displayed at a different 3D "Z" (depth) position.
+
+
+
+
+ When True, restricts Series points to display outside the Chart axes rectangle.
+
+
+
+
+ When True, displays in semi-3D mode.
+
+
+
+
+ Chooses between speed or display quality.
+
+
+
+
+ Chooses between speed or display quality for Text rendering.
+
+
+
+
+ Percent of zoom in 3D mode.
+
+
+
+
+
+ Percent of zoom in 3D mode.
+
+
+
+
+
+ Stores the Index of the ColorPalette used in the Chart.
+
+
+
+
+ Percent of 3D perspective
+
+
+
+
+ Angle in degrees, from 0 to 90, when displaying in Orthogonal mode.
+
+
+
+
+
+ Percent from 0 to 100 of Z Depth.
+
+
+
+
+ Amount (postive or negative) in pixels of horizontal displacement.
+
+
+
+
+ Amount (postive or negative) in pixels of horizontal displacement.
+
+
+
+
+ Amount (postive or negative) in pixels of vertical displacement.
+
+
+
+
+ Amount (postive or negative) in pixels of vertical displacement.
+
+
+
+
+ Gets or sets 3D display mode.
+
+
+
+
+
+ When True, all texts are resized according to Zoom property.
+
+
+
+
+ Copies all properties from a Series component to another.
+
+
+
+
+ Properties to draw a shadow.
+
+
+
+
+ Chart Shadow Constructor
+
+
+
+
+ Chart Shadow Constructor, defines Shadow size
+
+
+
+
+ Assign characteristics of Shadow 'value'
+
+
+
+
+ Gets or sets Color used to fill.
+
+
+
+
+ Sets Transparency level from 0 to 100% of shadow.
+
+
+
+
+ Gets and sets if the shadow will be displayed as a rectangle with smooth edges.
+
+
+
+
+ Gets and sets if the shadow will be displayed as a rectangle with smooth edges.
+
+
+
+
+ Sets the vertical displacement of the shadow in pixels.
+
+
+
+
+ Sets the horizontal shadow size in pixels.
+
+
+
+
+ Defines the Brush characteristics to fill the shadow.
+
+
+
+
+ Size in pixels of shadow.
+
+
+
+
+ Determines whether the shadow will appear on screen.
+
+
+
+
+ Draws a shadow around the Rect rectangle parameter.
+
+
+
+
+ Draws a shadow around the ellipse described by the top left and botton right parameters.
+
+
+
+
+ Draws a shadow around the ellipse described by the top left and botton right parameters.
+
+
+
+
+ Draws a shadow around the polygon described by the array of points parameter.
+
+
+
+
+ Draws a shadow around the polygon described by the array of points parameter.
+
+
+
+
+ Draws a shadow around the Rect rectangle parameter.
+
+
+
+
+ Draws a shadow around the Rect rectangle parameter.
+
+
+
+
+ XY Point holder
+
+
+
+
+ XYZ Point holder
+
+
+
+
+ This property gets or sets the X location in pixels.
+
+
+
+
+ This property gets or sets the Y location in pixels.
+
+
+
+
+ This property gets or sets the Z location in pixels.
+
+
+
+
+ XYZ Point Holder
+
+
+
+
+ XYZ Point Holder
+
+
+
+
+ Triangular 3D element holder
+
+
+
+
+ Triangular 2D element holder
+
+
+
+
+ orientation
+
+
+
+
+ The type of double buffered applied during Chart drawing.
+
+
+
+
+ No double-buffering.
+
+
+
+
+ Double buffering built into the System.Windows.Forms.ControlStyles enum.
+
+
+
+
+ Manually implemented, fully optimal double-buffering.
+
+
+
+
+ Indicates the kind of pen used to draw Canvas lines.
+
+
+
+
+ Gets the type of canvas used to draw the chart.
+
+
+
+
+ Determines Brush used to fill the Canvas draw rectangle background.
+
+
+
+
+ Gets and sets the Brush.Gradient properties of the Canvas.
+
+
+
+
+ Determines Font for outputted text when using the Drawing.
+
+
+
+
+ Converts the Color parameter to a darker color.
+
+
+
+
+ Converts the Color parameter to a brighter color.
+
+
+
+
+ Returns the height, in pixels, of the Chart Panel .
+
+
+
+
+ Returns the width, in pixels, of the Chart Panel.
+
+
+
+
+ Gets and sets whether each TeeChart element drawn is assigned a unique ID.
+
+
+
+
+ Sets the alignment used when displaying text using TextOut or TextOut3D.
+
+
+
+
+ Determines if point T is "near" line segment between Point1 and Point2.
+
+
+
+
+ Returns a valid Windows Brush Style from an internal palette of many possible Brush styles.
+
+
+
+
+ Returns the bounding rectangle for a given array of XY points.
+
+
+
+
+ Returns the bounding rectangle for a given array of XY points.
+
+
+
+
+ Returns true if point P is inside the vert triangle of p0, p1, p2.
+
+
+
+
+ Returns true if point P is inside the vert triangle of x0y0, midxY1, x1y0.
+
+
+
+
+ Returns true if point P is inside the horizontal triangle.
+
+
+
+
+ Returns true if point P is inside the ellipse bounded by Left, Top, Right, Bottom.
+
+
+
+
+ Returns true if point P is inside the ellipse bounded by Rect.
+
+
+
+
+ Returns true if point P is inside Poly polygon.
+
+
+
+
+ Returns true if point P is inside Poly polygon.
+
+
+
+
+ Returns point "To" minus "distance" pixels from "From" point.
+
+
+
+
+ Obtain the X coordinate of the pixel location of the center of the 3D Canvas.
+
+
+
+
+ Obtain the Y coordinate of the pixel location of the center of the 3D Canvas.
+
+
+
+
+ Smoothing (anti-aliasing) mode
+
+
+
+
+ Chooses between speed or display quality for Text rendering.
+
+
+
+
+ Returns if Canvas supports 3D Text or not.
+
+
+
+
+ Gets and sets the "manual" back buffer of the chart.
+
+
+
+
+ Gets and sets the back buffer context.
+
+
+
+
+ Calculates and returns the XY position in pixels of the XYZ 3D coordinate.
+
+
+
+
+ Calculates and returns the XY position in pixels of the XYZ 3D coordinate.
+
+
+
+
+ Calculates and returns the XY position in pixels of the XYZ 3D coordinate.
+
+
+
+
+ Calculates and returns the XY position in pixels of the coordinate.
+
+
+
+
+ Calculates and returns the XY position in pixels of the point p, XYZ 3D coordinate.
+
+
+
+
+ Calculates and returns the XY position in pixels of the point p Z 3D coordinate.
+
+
+
+
+ Returns the PointDouble which is on the circle bounded by rectBounds at the angle degrees.
+
+
+
+
+ Returns the PointDouble which is on the circle bounded by rectBounds at the angle degrees.
+
+
+
+
+ Returns the PointDouble which is on the circle bounded by rectBounds at the angle degrees.
+ Optionally translates the point in TeeChart's 3D space when the Z Position is greater than zero.
+
+
+
+
+ Returns the PointDouble which is on the ellipse bounded by rectBounds at the angle degrees.
+
+
+
+
+ Returns the PointDouble which is on the ellipse bounded by rectBounds at the angle degrees.
+ Optionally translates the point in TeeChart's 3D space when the Z Position is greater than zero.
+
+
+
+
+ Calculates and returns the XY position in pixels of the XYZ 3D coordinate.
+
+
+
+
+ Returns Color parameter after changing its "A" value.
+
+ From 0 to 100
+ A Color
+ Color with transparency percentage applied.
+
+
+
+ Returns percentage based on Color "A" value.
+
+ Percentage from 0 to 100%
+
+
+
+ Calculates and returns the position in pixels of the Rectangle 3D coordinates.
+
+
+
+
+ Calculates and returns the position in pixels of the Rectangle 3D coordinates.
+
+
+
+
+ Returns a TFourPoints structure (array of four TPoint records)
+
+
+
+
+ Returns the smallest bounding rectangle containing the four corners of the "R" rectangle after calculating their 3D position.
+
+
+
+
+ Supports OpenGL Transparency
+
+ %
+
+
+
+ Supports OpenGL Transparency
+
+
+
+
+ Sets the value of PenPos to x and y co-ordinates before calling LineTo.
+
+
+
+
+ Sets the value of PenPos to Point p before calling LineTo.
+
+
+
+
+ Sets the value of PenPos to x, y and z co-ordinates before calling LineTo.
+
+
+
+
+ Sets the value of PenPos to Point p with z depth offset before calling LineTo.
+
+
+
+
+ Sets the value of PenPos to 3D Point p before calling LineTo.
+
+
+
+
+ Draws a line to Point with z depth offset.
+
+
+
+
+ Draws line from present position to end co-ordinates with z depth offset.
+
+
+
+
+ Draws a Line to 3D Point.
+
+
+
+
+ Draws a Line between point p0 and point p1 with Z offset.
+
+ Origin xy
+ Destination xy
+ Depth offset
+
+
+
+ Draws a Line between PointDouble p0 and PointDouble p1.
+
+ Origin xy
+ Destination xy
+
+
+
+ Draws a Line between point p0 and point p1.
+
+ Origin xy
+ Destination xy
+
+
+
+ Draws a Line between co-ordinates with different start/end z depth offset.
+
+
+
+
+ Draws a Line between co-ordinates with z depth offset.
+
+
+
+
+ Draws a Vertical Line from (X,Top) to (X,Bottom) at z depth position.
+
+
+
+
+ Draws a 3D Pie slice using start Angle and end Angle and donut percent.
+
+
+
+
+ Draws an arc in the rectangle defined by the 4 co-ordinates.
+
+
+
+
+ Ellipse bounding Rectangle r.
+
+
+
+
+ Ellipse bounding Rectangle at z depth.
+
+
+
+
+ Ellipse bounding Rect (X1,Y1,X2,Y2) at Z position.
+
+
+
+
+ Ellipse bounding rectangle r with Z offset at angle.
+
+
+
+
+ Returns a z-shifted Region from a Rectangle.
+
+
+
+
+ Enhanced Ellipse bounding Rect (X1,Y1,X2,Y2) at Z position.
+
+
+
+
+ Internal use. Enhanced spheres
+
+
+
+
+ Internal use. 3D spheres
+
+
+
+
+ Draws a polygon (Point p1, Point p2, Point p3, Point p4) at Z depth offset.
+
+
+
+
+ Draws a polygon (Point p1, Point p2) at Z depth offset.
+
+
+
+
+ Draws a polygon using points array p with different start/end z depth offset.
+
+
+
+
+ Displays 2D non-rotated label at the specified x and y screen coordinates.
+
+
+
+
+ Displays 2D non-rotated label (in ChartFont f) at the specified x and y screen coordinates.
+
+
+
+
+ Displays 2D non-rotated label at the specified x,y and z screen coordinates.
+
+
+
+
+ Returns a PointDouble array which contains a Rounded Rectangle.
+
+
+
+
+ Returns a PointDouble array which contains a Rounded Rectangle.
+
+
+
+
+ Returns a PointDouble array which contains a Rounded Rectangle.
+
+
+
+
+ Draws a rectangle with rounded corners.
+
+
+
+
+ Makes sure the R rectangle Left is smaller than Right and Top is smaller than Bottom.
+ Returns corrected rectangle.
+
+
+
+
+ Use arc x1,y1..x4,y4 points to extract arc start and sweep angles.
+
+
+
+
+ Use x1,y1; x2,y2; start and sweep angles to extract arc x3,y3 and x4,y4 points.
+
+
+
+
+ Internal use. Calculates the projection co-ordinates for rectangle Bounds
+
+ Max shape depth
+ Projected shape rectangle
+
+
+
+ Draws a vertical or horizontal Pyramid with optional dark shaded sides.
+
+
+
+
+ Draws a vertical or horizontal Pyramid with optional dark shaded sides.
+
+
+
+
+ Draws a polygon of four points.
+
+
+
+
+ Sets / returns the color used to fill spaces when displaying text
+ or filling with brushes of different style than bsSolid.
+
+
+
+
+ Returns if Canvas can do rotation and elevation of more than 90 degree.
+
+
+
+
+ Draws items to an internal canvas to prevent flickering on screen.
+
+
+
+
+ Draws items to an internal canvas to prevent flickering on screen.
+
+
+
+
+ Sets the Pixel location (using X,Y,Z) of the centre of rotation for use with the Aspect.Rotation property.
+
+
+
+
+ Sets the Pixel location (using X,Y,Z) of the centre of rotation for use with the Aspect.Rotation property.
+
+
+
+
+ Returns the centre Horizontal co-ordinate of the Chart.
+
+
+
+
+ Returns the middle Vertical coordinate of the Chart.
+
+
+
+
+ Determines the Font Height to be used for outputted text when using the Drawing.
+
+
+
+
+ Defines the Height of the Font in pixels.
+
+
+
+
+ Horizontal Rectangle from Left to Right, from Z0 to Z1 position,
+ at Top Y.
+
+
+
+
+ Horizontal Rectangle from Left to Right, from Z0 to Z1 position, at Top Y.
+
+
+
+
+ Draws a rectangle between the defined co-ordinates with z depth.
+
+
+
+
+ Draws a Rectangle (Rectangle r) at z depth.
+
+
+
+
+ Draws a polygon with z position offset.
+
+
+
+
+ Paints a cone. Use ONLY with OPENGL.
+
+
+
+
+ Paints a cone. Use ONLY with OPENGL.
+
+
+
+
+ Paints a cone. Use ONLY with OPENGL.
+
+
+
+
+ Paints a cone with Cone Percent . Use ONLY with OPENGL.
+
+
+
+
+ Sort an array of points by angles.
+
+
+
+
+
+
+
+
+ Calculates the boundary points of the convex hull of a set of 2D xy points. Original
+
+
+
+
+ Draws cylinder toggle Boolean for vertical or horizontal cylinder.
+
+
+
+
+ Returns true if two lines cross.
+
+
+
+
+ Draws a Cube.
+
+
+
+
+ Draws a Cube with Dark Sides.
+
+
+
+
+ Draws a Cube with Dark Sides.
+
+
+
+
+ Draws a line with an arrow head of ArrowWidth and ArrowHeight dimensions in pixels.
+
+
+
+
+ Returns the vertical text size in pixels of ChartFont f.
+
+ Height in pixels of ChartFont f.
+
+
+
+ Returns the horizontal text size in pixels of ChartFont f.
+
+
+
+
+ Returns the vertical size in pixels of the text string.
+
+ Height in pixels of the text string.
+
+
+
+ Returns the horizontal size in pixels of the text string.
+
+
+
+
+ Draws a triangle (point p0, pointp1, pointp2) at Z position.
+
+
+
+
+ Draws a triangle (Triangle3D p).
+
+
+
+
+ Returns the SizeF of a string of a specified font.
+
+
+
+
+ Draws a Line from (X,Y,Z0) to (X,Y,Z1).
+
+
+
+
+ Draws Bézier splines for the Point array p at displacement z
+
+
+
+
+ Draws a rotated text string at the specified x,y and z coordinates with the RotDegree rotation angle.
+
+
+
+
+ Draws a Pie slice.
+
+
+
+
+ Draws a Pie slice using StartAngle and End Angle.
+
+
+
+
+ Draws a Horizontal at z depth position.
+
+
+
+
+ Returns a parallelogram of upper-left, upper-right, and lower-left corners.
+
+
+
+
+ Returns the minimum left / top and the
+ maximum right / bottom for all the points in "p" polygon
+
+
+
+
+ Returns bounding rectangle for point array p
+
+
+
+
+ Returns bounding rectangle for point array p
+
+
+
+
+ Draws a sphere.
+
+
+
+
+ Draws a rectangle between the defined co-ordinates.
+
+
+
+
+ Ellipse bounding rectangle (Left, Top, Right, Bottom) with Z offset at angle.
+
+
+
+
+ Creates a Windows GDI clipping region and selects it into TChart.Canvas device context handle.
+
+
+
+
+ Removes any clipping region applied to Chart Drawing.
+
+
+
+
+ Draws a pyramid with a truncated apex of variable thickness.
+
+
+
+
+ Creates a cubic Windows GDI clipping region.
+
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ Paints the image in rectangle r.
+
+
+
+
+ Draws Bézier splines for the Point array p
+
+
+
+
+ Prepares the Chart Canvas for drawing.
+
+
+
+
+ Returns true if the Chart Canvas can be drawn to.
+
+
+
+
+ Draws a custom border around a specified Rectangle.
+
+
+
+
+ Common Chart Brush
+
+
+
+
+ Sets Transparency level from 0 to 100%.
+
+
+
+
+ Fills using Color only. Does not use Foreground color.
+
+
+
+
+ Sets the Brush image to Transparent.
+
+
+
+
+ Fill Gradient.
+
+
+
+
+ Accesses the internal Drawing.Brush
+
+
+
+
+ Drawing Brush Image Style.
+
+
+
+
+ Drawing Brush Image Style.
+
+
+
+
+ Color to fill inner portions of Brush, when Solid is false.
+
+
+
+
+ Determines the color used to fill a zone.
+
+
+
+
+ Empty of Brush when False.
+
+
+
+
+ Determines the style in which the zone is filled or patterned.
+
+
+
+
+ Image to use for fill.
+
+
+
+
+ Loads a bitmap into a ChartBrush element from the specified path.
+
+
+
+
+ Clears the IBrush element from all associated bitmap images.
+
+
+
+
+ The Y pixel offset from the center of the non-linear gradient.
+
+
+
+
+ The X pixel offset from the center of the non-linear gradient.
+
+
+
+
+ When true, applies the specified non-linear gradient style.
+
+
+
+
+ Specifies the direction the non-linear gradient fill will be applied.
+
+
+
+
+ Properties to configure a gradient filling.
+
+
+
+
+ Copies the Gradient parameter properties into the Canvas.Gradient object.
+
+
+
+
+ Used to repeat fillings.
+
+
+
+
+ Amount of transparency in percentage.
+
+
+
+
+ Enables fine-tuning of displayed Colors.
+
+
+
+
+ Ratio between Start and End Colors.
+
+
+
+
+ Ratio between Colors, from 0 to 1.
+
+
+
+
+ Enables use of SigmaFocus and SigmaScale.
+
+
+
+
+ Enables fine-tuning of displayed Colors.
+
+
+
+
+ Specifies the direction the gradient fill will be applied.
+
+
+
+
+ Assign a color array to this property to use more than three colors (end, start and middle) in a Gradient.
+
+
+
+
+ Assign a rectangle to this property to define a custom rectangle to a Gradient.
+
+
+
+
+ Assign a rectangle to this property to define a custom rectangle to a Gradient.
+
+
+
+
+ Specifies the direction the gradient fill will be applied.
+
+
+
+
+ One of the three Colors used to create the gradient fill.
+
+
+
+
+ Determines whether MiddleColor is used when creating the gradient fill, or not.
+
+
+
+
+ One of the three Colors used to create the gradient fill.
+
+
+
+
+ One of the three Colors used to create the gradient fill.
+
+
+
+
+ Determines whether the gradient fill appears on screen.
+
+
+
+
+ Brush to fill area bounded by Points p
+
+
+
+
+ Brush to fill area bounded by Points p
+
+
+
+
+ Uses the x,y point co-ordinate define the Brush for a 'size' square
+
+
+
+
+ Brush to fill rectangular area rect
+
+
+
+
+ Fills the Canvas area using the Gradient color and direction properties.
+
+
+
+
+ Fills the Canvas area using the Gradient color and direction properties.
+
+
+
+
+ Fills the Canvas area using the Gradient color and direction properties.
+
+
+
+
+ Common Chart Font
+
+
+
+
+ Defines a Font type for text.
+
+
+
+
+ Sets Font sizing (in points) for text.
+
+
+
+
+ Sets Font sizing as em-size float for text to enable use of Font.Unit
+
+
+
+
+ Gets the unit of measure for this Font
+
+
+
+
+ Sets Font bold for text.
+
+
+
+
+ Sets Font italic (true or false) for text.
+
+
+
+
+ Sets or returns whether to include TeeChart's private fonts in the ChartFont class.
+
+
+
+
+ Sets Font underline on/off.
+
+
+
+
+ Sets Font Strikeout on/off.
+
+
+
+
+ Defines a Font colour for text.
+
+
+
+
+ Applies a gradient fill to the font.
+
+
+
+
+ Accesses the shadow properties of the font.
+
+
+
+
+ Sets the Brush characteristics of the font.
+
+
+
+
+ Common Chart Pen
+
+
+
+
+ Creates a new ChartPen object and sets the Chart property.
+
+
+
+
+ Creates a new ChartPen from the System.Type of an existing ChartPen object.
+
+
+
+
+ Determines the color used by the pen to draw lines on the Drawing.
+
+
+
+
+ Determines if the pen will draw lines or not.
+
+
+
+
+ Sets Transparency level from 0 to 100%.
+
+
+
+
+ Accesses the internal Drawing.Pen object.
+
+
+
+
+ Style of line endings.
+
+
+
+
+ Defines segment ending style of dashed lines.
+
+
+
+
+ Determines the width of lines the pen draws.
+
+
+
+
+ Set to false to make ChartPen ignore Style, DashCap, DashPattern and EndCap properties. Useful as a performance micro-optimization.
+
+
+
+
+ Determines the style in which the pen draw lines on the Drawing.
+
+
+
+
+ Defines the styles of the edges between two adjacent surfaces.
+
+
+
+
+ Flat Edges
+
+
+
+
+ Curved Edges
+
+
+
+
+ No special edge treament.
+
+
+
+
+ Defines the styles of the bevels (frames) around rectangles.
+
+
+
+
+ No bevel.
+
+
+
+
+ Lowered bevel.
+
+
+
+
+ Raised bevel.
+
+
+
+
+ Properties to display bevels (frames) around rectangles.
+
+
+
+
+ Style for inner bevel.
+
+
+
+
+ Size in pixels for bevels.
+
+
+
+
+ Color of left and top sides of bevels.
+
+
+
+
+ Color of right and bottom sides of bevels.
+
+
+
+
+ Style for outer bevel.
+
+
+
+
+ Assign all properties from a bevel to another.
+
+
+
+
+ Draws bevels around rectangle parameter.
+
+
+
+
+ Properties to display bevels (frames) around rectangles.
+
+
+
+
+ Draws an Image Bevel of the specified width.
+
+
+
+
+ Sets the visibility of the Image Bevel.
+
+
+
+
+ Sets ImageBevel Pen characteristics.
+
+
+
+
+ Sets ImageBevel Brush characteristics.
+
+
+
+
+ Assign all properties from a bevel to another.
+
+
+
+
+ Draws bevels around rectangle parameter.
+
+
+
+
+ Display characteristics for an Image
+
+
+
+ Display unmodfied
+
+
+ Stretch to bounding area dimensions
+
+
+ Repeat Tile small image over larger bounding area
+
+
+ Place unmodified image at Center of bounding area
+
+
+
+ Base class for Chart Shape elements
+
+
+
+
+ Defines the boundaries of the Shape.
+
+
+
+
+ Sets the bevel characteristics of the Shape.
+
+
+
+
+ Sets the bevel characteristics of the Shape.
+
+
+
+
+ Defines the shape's Shadow characteristics.
+
+
+
+
+ Defines the kind of brush used to fill shape background.
+
+
+
+
+ Rounds the Borders of the Chart Shapes.
+
+ This sample shows how to use the BorderRound property:
+
+ private void numericUpDown1_ValueChanged(object sender, System.EventArgs e) {
+ tChart1.Panel.BorderRound = (int)numericUpDown1.Value;
+ }
+
+
+
+
+
+ The Height of the shape.
+
+
+
+
+ The Width of the shape.
+
+
+
+
+ Rendered Image for Shape background
+
+
+
+
+ ImageMode for rendered Shape background Image
+
+
+
+
+ Sets the shape image to transparent.
+
+
+
+
+ Defines the shape Color.
+
+
+
+
+ Calls the Gradient characteristics for the shape.
+
+
+
+
+ Shows or hides the Shape.
+
+
+
+
+ Enables/disables transparency of shape.
+
+
+
+
+ Specifies the pen used to draw the shape.
+
+
+
+
+ Shape rectangle left co-ordinate
+
+
+
+
+ Shape rectangle top co-ordinate
+
+
+
+
+ Shape rectangle right co-ordinate
+
+
+
+
+ Shape rectangle bottom co-ordinate
+
+
+
+
+ Assign all properties from a shape to another.
+
+
+
+
+ Sets Transparency level from 0 to 100% of shape.
+
+
+
+
+ Creates a new Shape object and sets the Chart property.
+
+
+
+
+ Creates a new series from the System.Type of an existing series object.
+
+
+
+
+ Size holder
+
+
+
+
+ Defines the style of text-containing shapes.
+
+
+
+
+ Defines a Rectangular shape.
+
+
+
+
+ Defines a Rounded Rectangular shape.
+
+
+
+
+ Base class for Chart shape elements with text
+
+
+
+
+ Shape may be rectagular or rounded rectangular.
+
+
+
+
+ Determines if Text is drawn as Normal or HTML styles.
+
+
+
+
+ The Text property is used to display customized strings inside Shapes.
+
+
+
+
+ Access to array of Text lines
+
+
+
+
+ Determines the font attributes used to output ShapeSeries.Text strings.
+
+
+
+
+ Assign all properties from a TextShape to another.
+
+
+
+
+ Paints the TextShape object on the Chart Canvas.
+
+
+
+
+ Paints the TextShape object on the Chart Canvas.
+
+
+
+
+ Paints the TextShape object on the Chart Canvas.
+
+
+
+
+ Draws the Shape rectangle rotated by Angle degrees.
+
+
+
+
+ Shape Custom Position
+
+
+
+
+ Set to true to permit custom positioning of TextShape.
+
+
+
+
+ Notify class for Aspect related activity
+
+
+
+
+ Abstract class for all vector image formats. Key elements are internal bitmap and UseBuffered = false
+
+
+
+
+ Adds canvas instruction to stream.
+
+ Instructions to be added to stream.
+
+
+
+ Draws a Vertical Line from (X,Top) to (X,Bottom).
+
+
+
+
+ Draws a Horizontal Line.
+
+
+
+
+ Draws a Rectangle (Rectangle r).
+
+
+
+
+ Abstract class for storing all used fonts.
+
+
+
+
+ Abstract class for individual font.
+
+
+
+
+ Stores all used images.
+
+
+
+
+ Individual image properties.
+
+
+
+
+ Access to central Chart drawing elements
+
+
+
+
+ Accesses Drawing Graphics
+
+
+
+
+ Draws a line from the present PenPos to the new co-ordinates.
+
+
+
+
+ Draws a Line between co-ordinates.
+
+
+
+
+ Draws a Line between co-ordinates.
+
+
+
+
+ Draws a Vertical Line from (X,Top) to (X,Bottom).
+
+
+
+
+ Draws a Horizontal Line.
+
+
+
+
+ Draws Bézier splines for the Point array p
+
+
+
+
+ Rules to create cyclinder
+ Applying from empirical results can fail under various rotation/elevation conditions.
+ This method applies rules. To be reviewed.
+
+
+
+
+ Internal use. Supports InternalCylinder
+
+
+
+
+ Internal use. Supports InternalCylinder
+
+
+
+
+ Internal use. Supports InternalCylinder
+
+
+
+
+ Fills the interior of a Region.
+
+ Brush that determines the characteristics of the fill.
+ Region that represents the area to fill.
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ Draws a Rectangle (Rectangle r).
+
+
+
+
+ Use Arc to draw an elliptically curved line with the current Pen.
+
+
+
+
+ Draws an arc in the rectangle defined by the 4 co-ordinates.
+
+
+
+
+ Draws an Ellipse between the 2 co-ordinates.
+
+
+
+
+ Creates a rectangular Windows GDI clipping region.
+
+
+
+
+ Creates a Polygonal Windows GDI clipping region.
+
+
+
+
+ Removes any clipping region applied to Chart Drawing.
+
+
+
+
+ Removes all clipping regions applied to Chart Drawing including Client Clip Regions.
+
+
+
+
+ Creates a Elliptical Windows GDI clipping region.
+
+
+
+
+ Draws a rotated text string at the specified xy coordinates with the RotDegree rotation angle.
+
+
+
+
+ Sets the value of PenPos to x and y co-ordinates before calling LineTo.
+
+
+
+
+ Draws a Pie slice using StartAngle and End Angle.
+
+
+
+
+ Clears background defined for Rectangle Left, Top, Right, Bottom.
+
+
+
+
+ Sets the 3D pixel to OLE_Color, using Pen.Width.
+
+
+
+
+ Draws a series of line segments to join point array p at z displacement
+
+
+
+
+ Draws a polygon.
+
+
+
+
+ Paints the image in rectangle r.
+
+
+
+
+ Paints the image at x,y coordinates.
+
+
+
+
+ Summary description for TestC.
+
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ The Adobe Portable Format (PDF) canvas.
+
+
+
+
+ Use Arc to draw an elliptically curved line with the current Pen.
+
+
+
+
+ Draws an Ellipse between the 2 co-ordinates.
+
+
+
+
+ Creates a rectangular clipping region.
+
+
+
+
+ Creates a Polygonal Windows GDI clipping region.
+
+
+
+
+ Removes any clipping region applied to Chart Drawing.
+
+
+
+
+ Creates a Elliptical Windows GDI clipping region.
+
+
+
+
+ Draws a rotated text string at the specified xy coordinates with the RotDegree rotation angle.
+
+
+
+
+ Draws a Pie slice using StartAngle and End Angle.
+
+
+
+
+ Clears background defined for Rectangle Left, Top, Right, Bottom.
+
+
+
+
+ Sets the 3D pixel to OLE_Color, using Pen.Width.
+
+
+
+
+ Draws a series of line segments to join point array p at z displacement
+
+
+
+
+ Draws a polygon.
+
+
+
+
+ Paints the image at x,y coordinates.
+
+
+
+
+ Paints the image in rectangle r.
+
+
+
+
+ Draws Bézier splines for the Point array p
+
+
+
+
+ Draws a line from the present PenPos to the new co-ordinates.
+
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ Fills the interior of a Region.
+
+ Brush that determines the characteristics of the fill.
+ Region that represents the area to fill.
+
+
+
+ The Postscript canvas.
+
+
+
+
+ Use Arc to draw an elliptically curved line with the current Pen.
+
+
+
+
+ Draws an Ellipse between the 2 co-ordinates.
+
+
+
+
+ Creates a rectangular Windows GDI clipping region.
+
+
+
+
+ Creates a Polygonal Windows GDI clipping region.
+
+
+
+
+ Removes any clipping region applied to Chart Drawing.
+
+
+
+
+ Creates a Elliptical Windows GDI clipping region.
+
+
+
+
+ Draws a rotated text string at the specified xy coordinates with the RotDegree rotation angle.
+
+
+
+
+ Clears background defined for Rectangle Left, Top, Right, Bottom.
+
+
+
+
+ Fills the interior of a Region.
+
+ Brush that determines the characteristics of the fill.
+ Region that represents the area to fill.
+
+
+
+ Sets the 3D pixel to OLE_Color, using Pen.Width.
+
+
+
+
+ Draws a series of line segments to join point array p at z displacement
+
+
+
+
+ Draws a polygon.
+
+
+
+
+ Paints the image at x,y coordinates.
+
+
+
+
+ Paints the image in rectangle r.
+
+
+
+
+ Draws Bézier splines for the Point array p
+
+
+
+
+ Draws a line from the present PenPos to the new co-ordinates.
+
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ Summary description for Graphics3DSVG.
+
+
+
+
+ Fills the interior of a Region.
+
+ Brush that determines the characteristics of the fill.
+ Region that represents the area to fill.
+
+
+
+ Use Arc to draw an elliptically curved line with the current Pen.
+
+
+
+
+ Draws an Ellipse between the 2 co-ordinates.
+
+
+
+
+ Creates a rectangular Windows GDI clipping region.
+
+
+
+
+ Creates a Polygonal Windows GDI clipping region.
+
+
+
+
+ Removes any clipping region applied to Chart Drawing.
+
+
+
+
+ Creates a Elliptical Windows GDI clipping region.
+
+
+
+
+ Draws a rotated text string at the specified xy coordinates with the RotDegree rotation angle.
+
+
+
+
+ Clears background defined for Rectangle Left, Top, Right, Bottom.
+
+
+
+
+ Sets the 3D pixel to OLE_Color, using Pen.Width.
+
+
+
+
+ Draws a series of line segments to join point array p at z displacement
+
+
+
+
+ Draws a polygon.
+
+
+
+
+ Paints the image in rectangle r.
+
+
+
+
+ Paints the image at x,y coordinates.
+
+
+
+
+ Draws Bézier splines for the Point array p
+
+
+
+
+ Draws a line from the present PenPos to the new co-ordinates.
+
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ Fills the interior of a Region.
+
+ Brush that determines the characteristics of the fill.
+ Region that represents the area to fill.
+
+
+
+ Use Arc to draw an elliptically curved line with the current Pen.
+
+
+
+
+ Draws an Ellipse between the 2 co-ordinates.
+
+
+
+
+ Creates a rectangular Windows GDI clipping region.
+
+
+
+
+ Creates a Polygonal Windows GDI clipping region.
+
+
+
+
+ Removes any clipping region applied to Chart Drawing.
+
+
+
+
+ Creates a Elliptical Windows GDI clipping region.
+
+
+
+
+ Draws a rotated text string at the specified xy coordinates with the RotDegree rotation angle.
+
+
+
+
+ Clears background defined for Rectangle Left, Top, Right, Bottom.
+
+
+
+
+ Sets the 3D pixel to OLE_Color, using Pen.Width.
+
+
+
+
+ Draws a series of line segments to join point array p at z displacement
+
+
+
+
+ Draws a polygon.
+
+
+
+
+ Paints the image in rectangle r.
+
+
+
+
+ Paints the image at x,y coordinates.
+
+
+
+
+ Draws Bézier splines for the Point array p
+
+
+
+
+ Draws a line from the present PenPos to the new co-ordinates.
+
+
+
+
+ Draws a GraphicsPath.
+
+ Pen that determines the color, width, and style of the path.
+ GraphicsPath to draw.
+
+
+
+ Summary description for ToolsEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Animations Gallery editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for GaugesEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for EquivolumeEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Summary description for ErrorPointEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ErrorPointEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ AreaSeries editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ ArrowSeries editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TeeBarEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for BaseSeriesForm.
+
+
+
+
+ Summary description for BezierEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ BoxPlot Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Calendar series editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for CandlEdi.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TeeCircledEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for GaugesEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ColorGridEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ContourEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TeeCustEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for DonutEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ErrBarEd.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for FunnelEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for GanttEdi.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for GaugesEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Grid3DSeries Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ HighLow Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for HistoEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Image Bar series editor
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Pyramid Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Map Series Editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Pie Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Point3DSeries Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PointEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PointFigureEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Polar Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Pyramid Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ BoxPlot Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ShapeEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Smith series editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for StackBarEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for SurfEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TowerEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TriSurfEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for Vector3DEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for WaterfallEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for HotspotEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Annotation Tool Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for AxisToolEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for GridTransposeEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for HotspotEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for LightToolEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PieToolEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for RotateEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ScrollBarEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for SelectorEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ToolsEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ ToolSeries Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Tools Gallery editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ZoomEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Translation elements.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for AboutBox.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for AspectEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for AxisEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for AxisEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Axis Increment dialog.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Axis Labels Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TeeAxMaxMin.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for BevelEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for BevelImageEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Defines the Tabs of the Brush Editor
+
+
+
+
+ Provides a user interface to select and configure a Steema.TeeChart.Drawing.ChartBrush object.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Use this property to hide Brush Editor tabs.
+
+
+
+
+ Gets or sets the initial tab to display when showing the Brush editor.
+
+
+
+
+ Enables/disables use at runtime of the first page Chart Editor buttons.
+
+
+
+
+ Defines the Tabs of the TeeChart Editor
+
+
+
+
+ Displays the Default TeeChart Editor Tab.
+
+
+
+
+ Displays the Chart -> General Tab.
+
+
+
+
+ Displays the Chart -> Axis Tab.
+
+
+
+
+ Displays the Chart -> Legend Tab.
+
+
+
+
+ Displays the Chart -> Walls Tab.
+
+
+
+
+ Displays the Chart -> 3D Tab.
+
+
+
+
+ Displays the Chart -> Panel Tab.
+
+
+
+
+ Displays the Chart -> Paging Tab.
+
+
+
+
+ Displays the Series Tab.
+
+
+
+
+ Displays the Tools Tab.
+
+
+
+
+ Displays the Animations Tab.
+
+
+
+
+ Displays the Titles Tab.
+
+
+
+
+ Displays the Export Tab.
+
+
+
+
+ Displays the Print Tab.
+
+
+
+
+ Displays the Themes Tab.
+
+
+
+
+ Displays the Data Tab.
+
+
+
+
+ Displays the Series -> Datasource Tab.
+
+
+
+
+ Displays the Chart -> Series Tab.
+
+
+
+
+ Chart Editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Sets the Chart Gallery size.
+
+
+
+
+ Shows the Chart editor dialog.
+
+ The Chart being edited.
+ DialogResult.Ok
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ColorEditor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ CustomShape Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for DesignTimeOptions.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for DesignTimeOptions.
+
+
+
+
+ Summary description for DialogEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Editor Utils.
+
+
+
+
+ Summary description for ADXFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for BollingerFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for CCIFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for CLVFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for CompressOHLCFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for CustomFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Function Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for MACDFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for MovingAverageFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for OBVFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PVOFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for SmoothingFunctionEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Chart Gallery.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Creates a new instance of ChartGallery dialog.
+
+
+
+
+ Modally shows a Gallery dialog.
+ Returns selected Chart Series style in passed parameters.
+
+ The Chart
+ The presently selected series
+ The Series class style.
+ The TeeFunction class or null if any.
+ Gallery subChart index
+
+
+
+ Modally shows a Gallery dialog.
+ Returns selected Chart Series style in passed parameters.
+
+ The Chart
+ The Series class style.
+ The TeeFunction class or null if any.
+ Gallery subChart index
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Returns the currently selected Series style at Gallery.
+
+
+
+
+ Returns the currently selected Series Sub-Gallery style index, if any.
+
+
+
+
+ Additional init. Args.
+
+
+
+
+ Returns the currently selected Function style at Gallery, or null if any.
+
+
+
+
+ Shows the Gallery dialog to let the user choose a Series or Function style.
+ Creates and returns a new Series and / or Function, or null if the user cancels the dialog.
+
+ The Chart
+ An existing Series or null.
+ Null if dialog is canceled or a new Series instance.
+
+
+
+ Shows the Gallery dialog to change an existing Series type.
+
+ The Chart
+ The existing Series in Chart.
+ The new selected Series type
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Returns the currently selected Series style at Gallery.
+
+
+
+
+ Summary description for chart General editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for GLEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Gradient Editor.
+
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ImportEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for EdiLege.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for Form1.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PanelEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Provides a user interface to select and configure a Steema.TeeChart.Drawing.ChartPen object.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Period and Function Options Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PreviewPanelEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PrintPreview.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Generic Selection form.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for PoEdi.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Generic Series Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Displays the Chart Editor at runtime.
+
+
+
+
+ Displays the ChartEditorTabs tab at runtime.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for SeriesMarks.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Shadow Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for SourceEdit.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Provides a user interface to select and configure a Steema.TeeChart.Drawing.ChartFont object.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ TextInput. Basic one-line of text input dialog.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Shows input dialog and queries user for one line of text.
+
+ Dialog text
+ Input text
+ String to edit
+ True if user press Ok
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for ThemeEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Summary description for TitleEditor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Chart Walls editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ BMPOptions
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Metafile Export Options.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Defines the Tabs of the Export Editor
+
+
+
+
+ Export Editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Gif Export Format.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ JPEG Export Format.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ PCX Export Format.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ PNG Export Format.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ TIFF Export Format.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+ true if managed resources should be disposed; otherwise, false.
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Javascript export format. The class works to generate
+ and render active Javascript TeeCharts on HTML5 Canvas
+ objects imline on a browser page.
+
+ Steema Software offers runtime server use of TeeChart
+ for Javascript with TeeChart for .NET WebServer Runtime
+ Licenses. For other commercial and non-commercial
+ usage options see the TeeChart for Javascript license
+ information here http://www.steema.com/licensing/html5,
+ or contact Steema for more information at sales@steema.com.
+
+
+
+
+ Sets the HTML5 Canvas name. Uses "canvas1" as default. If you
+ have multiple canvases on the browser page you will need
+ to control this variabe to give each canvas a unique name.
+
+
+
+
+ Sets the Chart name. Uses "chart1" as default. If you
+ have multiple charts on the browser page you will need
+ to control this variabe to give each charta a unique name.
+
+
+
+
+ When True adds default header and footer to Chart code, creating
+ an entire page with the HTML5 Canvas. Set to false if you wish to
+ design your own page to incorporate the TeeChart code.
+
+
+
+
+ Set the source script to the location of the teechart.js source files.
+ Default location: "http://www.steema.com/files/public/teechart/html5/jscript/src".
+ You can download the TeeChart javascript files to your own location
+ as required. Steema Software offers Commercial and Non-Commercial
+ License options for use of TeeChart for Javascript. See the
+ TeeChart for Javascript license information here
+ http://www.steema.com/licensing/html5, or contact us for more information.
+
+
+
+
+ Advanced use only. Use this property to set Javascript
+ codelines to be run after other automatically generated
+ TeeChart code and before the Chart's '.draw' call.
+
+
+
+
+ Adds instruction to stream.
+
+ Instructions to be added to stream.
+
+
+
+ Summary description for EPSData.
+
+
+
+
+ Internal use. Import Binder
+
+
+
+
+ Common Export characteristics
+
+
+
+
+ String holds default file extension for export file types
+
+
+
+
+ Export formats to save charts as pictures, and chart data.
+
+
+
+
+ Chart export to Image format
+
+
+
+
+ Chart export to data format
+
+
+
+
+ Chart export to Theme template.
+
+
+
+
+ Chart export to native 'ten' template format
+
+
+
+
+ Internal use. Saves Chart.
+
+
+
+
+ Show the Export dialogue
+
+
+
+
+ Show the Export for Export format
+
+
+
+
+ Show the Export for with hidden tabs.
+
+
+
+
+ Access to TeeChart data export formats
+
+
+
+
+ Constructor for access class to Chart data export formats
+
+
+
+
+ Export Chart to XML data format
+
+
+
+
+ Export Chart as text
+
+
+
+
+ Export Chart as HTML table
+
+
+
+
+ Export Chart as Excel spreadsheet
+
+
+
+
+ Export Chart as OpenDocument spreadsheet
+
+
+
+
+ Common methods for all data export classes
+
+
+
+
+ Data export constructor all Chart Series
+
+
+
+
+ Data export constructor, named Series
+
+
+
+
+ Save Chart to file with Data export format
+
+ string eg. "c:\tempFiles\MyChart.xml"
+
+
+
+ Save Chart to stream with Data export format
+
+
+
+
+ return descriptive name of Dataformat
+
+
+
+
+ Copy Chart data to clipboard
+
+
+
+
+ Gets and sets a string for the name of the Series index field within the exported data.
+
+
+
+
+ Include the Series index with exported data
+
+
+
+
+ Include the Series valuelist name with exported data
+
+
+
+
+ Include the Series title with exported data
+
+
+
+
+ Include data Labels with exported data
+
+
+
+
+ Line separator for ascii export formats
+
+
+
+
+ Series whose data is to be exported
+
+
+
+
+ Chart data export to XML
+
+
+
+
+ Gets and sets if the point Colors of the data Series source in the exported data.
+
+
+
+
+ Chart data export to Text
+
+
+
+
+ Chart data export to HTML table
+
+
+
+
+ OpenDocument spreadsheet export format
+
+
+
+
+ Chart data export to Excel HTML table spreadsheet format
+
+
+
+
+ Chart data export to XML Theme format.
+
+
+
+
+ Saves Chart characteristics to an xml 'theme' file.
+
+
+
+
+ Saves Chart characteristics to an xml 'theme' stream.
+
+
+
+
+ Chart export to native 'ten' template format
+
+
+
+
+ When true template will include Chart data
+
+
+
+
+ Saves Chart to file as native 'ten' template
+
+ string eg. [C#] "c:\\myCharts\\myChart.ten"
+
+
+
+ Saves Chart to stream as native 'ten' template
+
+
+
+
+ Serializes Chart into stream, using a Binary formatter.
+
+
+
+
+
+ Class with underlying methods for Chart Image Export
+
+
+
+
+ Export Chart to pdf
+
+
+
+
+ Export Chart to EPS
+
+
+
+
+ Export Chart as PNG format
+
+
+
+
+ Export Chart as Javascript for the HTML5 Canvas
+
+
+
+
+ Export Chart as Bitmap
+
+
+
+
+ Export Chart as Metafile
+
+
+
+
+ Export Chart as JPEG format
+
+
+
+
+ Export Chart as GIF format
+
+
+
+
+ Export Chart as TIFF format
+
+
+
+
+ Export Chart as VML
+
+
+
+
+ Export Chart as SVG
+
+
+
+
+ Export Chart as Flex
+
+
+
+
+ Export Chart as XAML
+
+
+
+
+ Export Chart as HTML5
+
+
+
+ Chart Image Export formats
+
+
+ Bitmap image format
+
+
+ Metafile image format
+
+
+ JPEG image format
+
+
+ PNG image format
+
+
+ GIF image format
+
+
+ TIFF image format
+
+
+ PDF image format
+
+
+ VML image format
+
+
+ SVG image format
+
+
+ EPS image format
+
+
+ XAML image format
+
+
+ Javascript image format
+
+
+
+ Internal use. Available Image formats.
+
+
+
+
+ Base class, common Export characteristics
+
+
+
+
+ Accesses the ImageFormat of the Chart Image to be exported
+
+
+
+
+ Save image to File
+
+ Filename eg. "c:\tempImages\myImage.bmp"
+
+
+
+ Save image stream to File
+
+ Filename eg. "c:\tempImages\myImage.bmp"
+
+
+
+ Save image to stream.
+
+
+
+
+ Save image to stream.
+
+
+
+
+ Image width
+
+
+
+
+ Image height
+
+
+
+
+ Copy image to clipboard
+
+
+
+
+ PNG Image export format
+
+
+
+
+ When true the image exports as Grayscale
+
+
+
+
+ Save a Chart as a PNG image file
+
+ Chart to save
+ filename as string
+
+
+
+ Class of characteristics for Bitmap export
+
+
+
+
+ Defines the Color Reduction type for BMP images.
+
+
+
+
+ Describes the Default (polichrome) Color Reduction.
+
+
+
+
+ Describes the GrayScale (monochrome) Color Reduction.
+
+
+
+
+ Describes colour format characteristics of the Bitmap image
+
+
+
+
+ Constructor Chart Bitmap image format
+
+
+
+
+ Metafile export format
+
+
+
+
+ Enhanced type for Metafile export
+
+
+
+
+ When true Metafile is set to Enhanced
+
+
+
+
+ Save Chart as Metafile to Clipboard
+
+
+
+
+ Save Chart as Metafile to stream
+
+
+
+
+ Save Chart as Metafile to file
+
+
+
+
+ Save a Chart as a Metafile file
+
+ Chart to save
+ filename as string
+
+
+
+ Class of Chart JPEG image characteristics
+
+
+
+
+ Default 95. JPEG Image quality as percentage
+
+
+
+
+ default false. When true image is grayscale
+
+
+
+
+ Save a Chart as a JPEG file
+
+ Chart to save
+ filename as string
+
+
+
+ GIF Image export format
+
+
+
+
+ Defines the Color Reduction type for GIF images.
+
+
+
+
+ No Color reduction, that is, a polichrome GIF image.
+
+
+
+
+ Defines a GrayScale GIF image.
+
+
+
+
+ Sets ColorReduction for GIF image
+
+
+
+
+ Constructor for GIF export format
+
+
+
+
+ Save a Chart as a GIF image
+
+ Chart to save
+ filename as string
+
+
+
+ TIFF Image export format
+
+
+
+
+ Describes the Compression type for TIFF images.
+
+
+
+
+ Defines LZW TIFF Compression.
+
+
+
+
+ Defines RLE TIFF Compression.
+
+
+
+
+ TIFFFormat constructor
+
+
+
+
+ Save a Chart as a TIFF image
+
+ Chart to save
+ filename as string
+
+
+
+ Set TIFF compression
+
+
+
+
+ Class supports the Chart list used with PDF export.
+
+
+
+
+ Adobe PDF export format
+
+
+
+
+ To create a MultiChart PDF file, simply add Charts to the list.
+ The contents of the list at export (save) time is the contents
+ that will be exported.
+
+
+
+ tChart1.Export.Image.PDF.MultiChart.Charts.Add(tChart2.Chart);
+
+ tChart1.Export.Image.PDF.MultiChart.Charts[0] = tChart2.Chart;
+
+ tChart1.Export.Image.PDF.MultiChart.Charts.RemoveAt(0);
+ tChart1.Export.Image.PDF.Save(@"c:\temp\MyTeeCharts.pdf");
+
+
+
+
+
+ Save a Chart as a PDF image
+
+ Chart to save
+ filename as string
+
+
+
+ VML export format
+
+
+
+
+ Save a Chart as a VML image
+
+ Chart to save
+ filename as string
+
+
+
+ Flex export format
+ Compile using mxmlc.exe available in the free Adobe® Flex™ 2 SDK.
+
+
+
+
+ Save a Chart as a Flex image
+
+ Chart to save
+ filename as string
+
+
+
+ HTML5 export format
+
+
+
+
+ Save a Chart as an HTML5 image
+
+ Chart to save
+ filename as string
+
+
+
+ XAML export format
+
+
+
+
+ Save a Chart as a XAML image
+
+ Chart to save
+ filename as string
+
+
+
+ SVG export format
+
+
+
+
+ Save a Chart as a SVG image
+
+ Chart to save
+ filename as string
+
+
+
+ Encapsulated Postscript export format
+
+
+
+
+ Save a Chart as a EPS page
+
+ Chart to save
+ filename as string
+
+
+
+ Summary description for PDFData.
+
+
+
+
+ Parabolic Stop And Reversal financial indicator.
+
+ The Parabolic SAR, developed by Welles Wilder, is used to set
+ trailing price stops. SAR refers to "Stop-And-Reversal". It is designed to create exit points for both long and short
+ positions in such a way that it allows for reactions or fluctuations at the beginning of the position, but accelerates
+ upward (for long positions) or downward (for short positions) as the movement tops out.
+ Parabolic SAR is plotted around the price chart similar to a moving average. The basics behind the formula for
+ computing the SAR values can be found above.
+ The Parabolic SAR provides excellent exit points. You should close long positions when the price falls below the
+ SAR and close short positions when the price rises above the SAR.
+ If you are long (i.e., the price is above the SAR), the SAR will move up every day, regardless of the direction
+ the price is moving. The amount the SAR moves up depends on the amount that prices move. Wilder suggests using this
+ indicator in a trending (or directional) market. If the security is trending up, then one might only take long positions.
+ If the security is trending down, one might only take short positions.
+
+
+
+
+ Defines Wilder acceleration factor.
+
+
+
+
+ Defines maximum step in SAR calculation.
+
+
+
+
+ The ADXFunction is normally used in financial trending applications to determine whether a market is trending, or moving
+ sideways.
+
+ A high ADX reading indicates a trending market.
+
+ A rising ADX indicates a trending market (either up or down).
+
+ If the ADX reaches 40 or greater, look for a signal that indicates the trend is over.
+
+ An ADX of 20 or less indicates a sideways market.
+
+
+
+
+ Access characteristics of the DMDown line (a FastLineSeries).
+
+ DMDown is a sub-series (of type FastLine) of ADX function.
+
+
+
+
+ Access characteristics of the DMUp line (a FastLineSeries).
+
+ DMUp is a sub-series (of type FastLine) of ADX function.
+
+
+
+
+ The pen used to draw the upper ADX line.
+ Corresponds to DMUp.Pen property.
+
+ aDXFunction1.UpLinePen.Color = Color.Blue ;
+
+
+
+
+
+ The pen used to draw the lower ADX line.
+ Corresponds to DMDown.Pen property.
+
+
+
+
+ Gets all points from Source series, performs a function operation and stores results in ParentSeries.
+
+
+
+
+ Descibes function period as a number of points or as a range of points.
+
+
+
+
+ Defines function period as a number of points.
+
+
+
+
+ Defines function period as a range of points.
+
+
+
+
+ Descibes how a function is aligned with respect to the source series.
+
+
+
+
+ Aligns the function with the first point of the function period.
+
+
+
+
+ Aligns the function with the centre point of the function period.
+
+
+
+
+ Aligns the function with the last point of the function period.
+
+
+
+
+ Basic functions (Add, Subtract, High, Low, Average and Count).
+
+
+
+
+ Controls how many points or X range will trigger a new point calculation.
+
+
+
+
+ Returns the TChartSeries parent of TTeeFunction.
+
+
+
+
+ Controls how the Period property is interpreted.
+
+
+
+
+ Controls where to place function calculations inside the full period space.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Gets all points from Source series, performs a function operation and stores results in ParentSeries.
+
+
+
+
+ Performs a CheckDataSource method on ParentSeries.
+
+
+
+
+ Moving Average Function
+
+
+
+
+ Set Weighted to true to calculate Mov. Avg. using the corresponding X point values.
+
+
+
+
+ Set WeightedIndex to true to calculate Mov. Avg. using the source points index as the "weight".
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Internal use. Base class for moving calculation functions
+
+
+
+
+ Add Function.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Internal use. Base class for multiple Series function calculations
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Subtract Function.
+
+
+
+
+ Multiply Function.
+
+
+
+
+ Divide Function.
+
+
+
+
+ High Function. Returns highest value.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Low Function. Returns lowest value.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Average (mean) Function.
+
+
+
+
+ Calculates the average using only the non-null points of a series, or not.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Count Function.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Cumulative Function.
+ The TCumulative function sums the Series values starting from the first point.
+ Example:
+ Given these values: 1 2 3
+ The TCumulative function returns: 1 3 6 ( 1=1, 1+2=3 and 1+2+3=6 )
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Momentum Function.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Momentum Division Function.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Exponential Average Function.
+
+
+
+
+ Performs an Exponential average based on its DataSource values.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Exponential Moving Average Function
+
+
+
+
+ Summary description for Bollinger.
+
+
+
+
+ LowBand Series stores the low band (Mean - Deviation*StdDev) values. High band values (Mean + Deviation*StdDev) values are stored in the ParentSeries.
+
+
+
+
+ The pen use to display the lower band line.
+ Corresponds to LowBand.Pen property.
+
+
+
+
+ The pen used to display the upper band line.
+
+
+
+
+ When Exponential is true, then exponential moving average function will be used to calculate mean value.
+ Otherwise standard moving average function will be used to calculate mean value.
+
+
+
+
+ Deviation defines the standard deviation (StdDev) multiplier, used to calculate low and high Bollinger band value.
+
+
+
+
+ CCI Function.
+
+
+
+
+ Value by which to multiply mean deviation.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ CLV Function.
+
+
+
+
+ Accumulates the CLV Function results.
+
+
+
+
+ Gets/sets the Volume series by which CLV results are multiplied.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Day.
+
+
+
+
+ Week.
+
+
+
+
+ Month.
+
+
+
+
+ BiMonthly.
+
+
+
+
+ Quarter.
+
+
+
+
+ Year.
+
+
+
+
+ CompressOHLC Function.
+
+
+
+
+ Gets or sets the Compression Period as defined by the enumeration.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ EventArgs for
+
+
+
+
+ The CompressOHLC Function Source series.
+
+
+
+
+ The CompressOHLC Function ValueIndex.
+
+
+
+
+ The CompressOHLC Function ValueIndex Date.
+
+
+
+
+ CrossPoints Function.
+
+
+
+
+ Defines different trend styles.
+
+
+
+
+ Normal linear fit.
+
+
+
+
+ Logarithmic fit.
+
+
+
+
+ Exponential fit
+
+
+
+
+ Internal use. Base class for different trend functions.
+
+
+
+
+ Defines different methods for calculating trendline
+
+
+
+
+ Gets and sets whether System.Decimal is used instead of System.Double for the
+ internal algorithms. When true, algorithms are more accurate but accept a
+ smaller range of numbers.
+
+
+
+
+ Calculate all quantities, needed for trend algorithm
+
+
+
+
+ Calculate all quantities, needed for trend algorithm
+
+
+
+
+ Calculates trendline first order parameter
+
+ Trendline parameter
+
+
+
+ Calculates trendline first order parameter
+
+ Trendline parameter
+
+
+
+ Calculates trendline paramaters m and b, where y=m*x+b
+
+
+
+
+ Calculated line parameter
+ Calculated line parameter
+
+
+
+
+ Calculates trendline paramaters m and b, where y=m*x+b
+
+
+
+
+ Calculated line parameter
+ Calculated line parameter
+
+
+
+
+ The Exponential Trend function is similar to Trend, except that the calculation fits values using their exponential (e) weights.
+
+
+
+
+ Trendline function
+
+
+
+
+ Correlation function
+
+
+
+
+ Base class for fitting function(s)
+
+
+
+
+ Returns calculated fitted coefficient
+
+
+
+
+ Evaluate function using calculated coefficients
+
+ Series which contains value
+ Value to be evaluated at
+ y(x) using calculated polynomial coefficients
+
+
+ Internal use. Function calculation event handler
+
+
+
+ Custom y=f(x) function
+
+
+
+
+ Gets or sets the number of points.
+
+
+
+
+ The initial value for the "X" parameter.
+
+
+
+
+ Gets all points from Source series, performs a function operation and stores results in ParentSeries.
+
+
+
+
+ EventArgs for
+
+
+
+
+ Returns the current X parameter.
+
+
+
+
+ Intermediate abstract class used by MedianFunction and ModeFunction to calculate values using the source series values sorted in ascending order.
+
+
+
+
+ When True, null values in the source series will be included in the calculation.
+ Default is True.
+
+
+
+
+ Defines type of downsampling method.
+
+
+
+
+ Replace group of points with group maximum value.
+
+
+
+
+ Replace group of points with group minimum value.
+
+
+
+
+ Replace group of points with two points : group minimum and maximum value.
+
+
+
+
+ Replace group of points with two points : group minimum and maximum value. Draw
+ From Last value of one group to the First value of the next.
+
+
+
+
+ Replace group of points with two points : group minimum and maximum value. Draw
+ From Last value of one group to the First value of the next. Only include the first
+ null of the group in the calculation but without plotting it.
+
+
+
+
+ Replace group of points with group average value.
+
+
+
+
+ Reduces the number of points in series by using several different methods.
+
+
+
+
+ Reduce the number of points in double arrays
+
+ Reduction algorithm
+ Desicred tolerance
+ Lower bound for x,y arrays
+ Upper bound for x,y arrays
+ x array
+ y array
+ x array with reduced values
+ y array with reduced values
+ reduced array size
+
+
+
+ Returns reduced size
+
+
+
+
+ Gets or sets the tolerance for downsampling method. All points within Tolerance will be replaced with one or two points.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ Constructs a histogram or cumulative histogram from data.
+
+
+
+
+ Calculates the histogram using only the non-null points of a series, or not.
+
+
+
+
+ Constructs histogram from data double array.
+
+ Defines data for histogram.
+ Data lower bound.
+ Data upper bound.
+ Returns bins centerpoints.
+ Returns each bin count.
+ Number of bins used in histogram. Value must match the bins and counts size.
+ Minimum value used for histogram. Usually it's data minimum value.
+ Maximum value used for histogram. Usually it's data maximum value.
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ The MACD function (Moving Average Convergence Divergence), used in financial charts.
+
+
+
+
+ The Pen used to draw the histogram line of a MACD function.
+
+
+
+
+ The pen properties used to draw the MACD line.
+
+
+
+
+ The pen properties used to draw the Exponential MACD line.
+
+
+
+
+ The Period property controls how many points or X range(sse note below) will trigger a new point calculation.
+
+
+
+
+ Determines the number of samples used to calculate a MACD function.
+
+
+
+
+ Returns a sub-series (of type Volume) internally calculated by MACD function.
+
+
+
+
+ Returns a second sub-series (of type FastLine) internally calculated by MACD function.
+
+
+
+
+ Calculates the median value of the source series values.
+ The median value is different than the average in that median returns the value that is "at the middle" of the source series values ordered in ascending order.
+ If more than one value shares the middle position, this function returns the average of those values.
+
+
+
+
+ The mode function returns the source series value that is most more times.
+
+
+
+
+ OBV Function.
+
+
+
+
+ Gets/sets the Volume series by which OBV results are multiplied.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ Performance Function.
+
+
+
+
+ Perimeter function.
+
+
+
+
+ Ordinary least-square linear regression with or without weights
+
+ The number of points in x array.
+ Array of x values. The size of x and y must be the same.
+ Array of y values. The size of x and x must be the same.
+ Point weights. If null, no weights are used in linear regression.
+ Returns linear regression coefficients.
+
+
+
+ Gaussian fitting algorithm
+
+
+
+
+ Calculate the polynomial fit
+
+ Number of points to fit
+ x values
+ y values
+
+
+
+ Evaluate function by using polyDegree polynomial with polyCoeff at value x.
+
+
+
+
+ PVO Function.
+
+
+
+
+ Controls if the difference of two moving averages will be percentual or not.
+
+
+
+
+ Defines the period of the second exponential moving average.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ Root Mean Square Function.
+
+
+
+
+ Defines the RMS formula.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Used in see cref="RSIFunction.Style"/> property.
+
+
+
+
+ Uses Close values comparative to their respective Open Values.
+
+
+
+
+ Uses Close values comparative to prior Close values.
+
+
+
+
+ RSIFunction is a Series derived component that calculates a percent value based on Financial data.
+ RSIFunction must be connected to a Series or any derived Series component (e.g. ). Like a
+ Function, RSI will calculate a new point Y value by using previous Period points.
+
+ The used formula is:
+
+ Add all Close prices greater than Open prices and divide by ocurrences (Ups).
+
+ Add all Close prices lower than Open prices and divide by ocurrences (Downs).
+
+ RSI = 100.0 - ( 100.0 / ( 1.0 + Math.Abs( Ups / Downs ) ) )
+
+ To see a visual representation of TeeChart Extended Functions, go to the TeeChart User Guide.
+
+
+
+
+ Sets the RSI function to use either Open or Close values.
+
+
+
+
+ Smoothing Function.
+
+
+
+
+ When true, resulting smooth curves will pass exactly over source points.
+
+
+
+
+ Gets or sets number of times the resulting smooth points are in quantity compared to source points.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ Spline smoothing.
+
+
+
+
+ Indicates the spline has already calculated smooth points.
+
+
+
+
+ Gets or sets the number of resulting smooth points.
+
+
+
+
+ When true, the spline calculates interpolated points that will pass exactly over source points.
+
+
+
+
+ Returns the number of total source points.
+
+
+
+
+ Calculates new smoothed points from internal list of points.
+
+
+
+
+ Adds a new source point with specified X and Y values.
+
+
+
+
+ Removes all source points.
+
+
+
+
+ Returns an interpolated point.
+
+
+
+
+ Standard Deviation Function.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Performs function operation on list of series (SourceSeriesList).
+
+
+
+
+ Stochastic Function.
+
+
+
+
+ Gets all points from Source series, performs a function operation on points and stores results in ParentSeries.
+
+
+
+
+ Performs function operation on SourceSeries series.
+
+
+
+
+ Variance function.
+
+
+
+
+ Performs function operation on s series.
+
+
+
+
+ Performs function operation on all sourceSeries series.
+
+
+
+
+ The TFrame object draws a frame of three bands at the outer edge of an ellipse or circle defined by a rectangle.
+
+
+
+
+ Draw's the TFrame object within the bounds defined by Rect.
+
+
+
+
+ Calculates the actual width of the TFrame object in pixels as using the property and the rectangle Rect.
+
+
+
+
+ Gets and sets the CircularGauge's color palette.
+
+
+
+
+ Gets and sets the visibility of the TFrame object.
+
+
+
+
+ Gets and sets the width of the TFrame object as a percentage of its bounding rectangle.
+
+
+
+
+ Toggles the drawing of a circular or rectangular frame.
+
+
+
+
+ Gets and sets the OuterBand's ChartBrush characteristics.
+
+
+
+
+ Gets and sets the MiddleBand's ChartBrush characteristics.
+
+
+
+
+ Gets and sets the InnerBand's ChartBrush characteristics.
+
+
+
+
+ Derived from SeriesPointer, GaugeSeriesPointer implements pointer styles specific to the CircularGauge series.
+
+
+
+
+ Called when the Gauge property is changed.
+
+
+
+
+ Returns the Color with index Index within the color array GaugeColorPalette.
+
+
+
+
+ The minor tick offset.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker ends.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker starts.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker ends.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker starts.
+
+
+
+
+ Gets and sets whether the LinearGauge should be displayed horizontally or vertically.
+
+
+
+
+ The 'redline' object is the curved shape with a gradient which is used to signal a high or maximum value.
+
+
+
+
+ The 'greenline' object is the curved shape with a gradient which is used to signal a low or minimum value.
+
+
+
+
+ Gets and sets the Hand (or needle) object characteristics.
+
+
+
+
+ Gets or sets a collection of ColorLines which initially contains the and the .
+
+
+
+
+ Gets or sets a collection of StartValues which initially contains the and the .
+
+
+
+
+ Gets or sets a collection of EndValues which initially contains the and the .
+
+
+
+
+ Gets and sets the characteristics of the Axis' minor tick marks.
+
+
+
+
+ Gets or sets the position of gauge arrow line.
+
+
+
+
+ Gets or sets a custom bounding rectangle for the gauge.
+
+
+
+
+ Gets or sets the minimum value for the gauge.
+
+
+
+
+ Gets or sets the maximum value for the gauge.
+
+
+
+
+ Gets and sets the characteristics of the Axis' major tick marks.
+
+
+
+
+ ChartBrush characteristics of the CustomGauge's face.
+
+
+
+
+ Gets and sets the CircularGauge's color palette.
+
+
+
+
+ The Frame is the object which surrounds the LinearGauge and which consists of three configurable Bands: Inner, Middle and Outer.
+
+
+
+
+ Gets the LinearGauges's Axis characteristics.
+
+
+
+
+ Collection of GaugeSeriesPointers.
+
+
+
+
+ Collection of integer values defining the StartValues of the ColorLines in the ColorLineCollection.
+
+
+
+
+ Collection of integer values defining the EndValues of the ColorLines in the ColorLineCollection.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Values are ordered in the order in which they were added to the ValueList.
+
+
+
+
+ Values are ordered in ascending numerical order.
+
+
+
+
+ Values are ordered in descending numerical order.
+
+
+
+
+ Class provides access to Point characteristics
+
+
+
+
+ Indexed Point Color
+
+
+
+
+ Indexed Point Label
+
+
+
+
+ Class provides access to XY Point characteristics
+
+
+
+
+
+ Indexed Point Y value
+
+
+
+
+ Array to hold Series data point values.
+
+
+
+
+ Field to use as source for this value list.
+
+
+
+
+ Allows values to be expressed either as numbers or as Date+Time values.
+
+
+
+
+ Determines if points are automatically sorted or left at original position.
+
+
+
+
+ Returns the corresponding point index which has the specified Value.
+
+
+
+
+ Re-orders Series points, interchanging their position in the Series Values lists.
+
+
+
+
+ Returns the First point value.
+
+
+
+
+ Returns the Last point value.
+
+
+
+
+
+
+
+
+
+ Returns the highest of all values in the list.
+
+
+
+
+ Returns the lowest of all values in the list.
+
+
+
+
+ Returns the sum of all IValueList values.
+
+
+
+
+ Returns the sum of all absolute values in the list.
+
+
+
+
+ Renumbers all values in a IValueList class starting at zero.
+
+
+
+
+ The StringList class is manipulated via the Series property.
+
+
+
+
+ The ColorList class is manipulated via the Series property.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Associates the series with the top axis.
+
+
+
+
+ Associates the series with the bottom axis.
+
+
+
+
+ Associates the series with both the top and bottom axes.
+
+
+
+
+ Associates the series with a custom axis.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Associates the series with the left axis.
+
+
+
+
+ Associates the series with the right axis.
+
+
+
+
+ Associates the series with both the left and right axis.
+
+
+
+
+ Associates the series with a custom axis.
+
+
+
+
+ Defines how to treat null points.
+
+
+
+
+ Null points are not painted, but they are still used in other calculations.
+
+
+
+
+ Null points are skipped in drawing and calculations. The Null points themselves are not
+ painted, but the regular points are connected with a line (in case of Line Series). That results in no gaps.
+
+
+
+
+ Null points are completely ignored.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The Index of the value in the series .
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The Index of the value in the series .
+
+
+
+
+ Gets or sets the text of the series Mark.
+
+
+
+
+ For internal use.
+
+
+
+
+ Listens to all the Series class events.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ All series in the group are active.
+
+
+
+
+ No series in the group are active.
+
+
+
+
+ Some of the series in the group are active.
+
+
+
+
+ Access to series group characteristics
+
+
+
+
+ The name of the group.
+
+
+
+
+ The list of series that belong to this group.
+
+
+
+
+ Returns Yes, No or Some if all, none or some series in the group are active and
+ sets the active property of all series in the group.
+
+
+
+
+ For all series in the group, sets their Active property to False.
+
+
+
+
+ For all series in the group, sets their Active property to True.
+
+
+
+
+ Access to series groups characteristics
+
+
+
+
+ Gets or Sets the SeriesGroup at the index position inside the list.
+
+
+
+
+ Adds a new series group to the list.
+
+ New series group name.
+
+
+
+ Returns first group index than contains Series, or -1 if any.
+
+
+
+
+ The base class for all TeeChart Series styles.
+
+
+
+
+ Constant field for internal use.
+
+
+
+
+ Constant field for internal use.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Called just after drawing all series points, and before drawing other series that are in front.
+
+
+
+
+ Called just before drawing all series points, and after drawing other series that are behind.
+
+
+
+
+ Triggered on placing Mark for each Series Point. Use this method to modify the Mark Text content.
+
+
+
+
+ Triggered Before a Series Point is plotted. Use to modify paint characteristics of indexed point.
+
+
+
+
+ Occurs when the mouse pointer enters the control.
+
+
+
+
+ Occurs when the mouse pointer leaves the control.
+
+
+
+
+ Returns the horizontal axis associated with the series.
+
+
+
+
+ Returns the vertical axis associated with the series.
+
+
+
+
+ Returns True when the Series needs axes to display points.
+ For example, Pie Series returns False (it does not need axes).
+
+
+
+
+ Returns true if the series has ZValues.
+
+
+
+
+ Required for Windows.Forms Class Composition Designer support
+
+
+
+
+ Creates a new series from the System.Type of an existing series object.
+
+
+
+
+ Creates a new series from the System.Type of an existing series object.
+
+
+
+
+ Creates a new Series object and sets the Name, Chart, Sub-Style and Function properties.
+
+
+
+
+ Creates a new Series object and sets the Name, Chart, Sub-Style and Function properties.
+
+
+
+
+ Creates a new Series object and sets the Name, Chart and Function properties.
+
+
+
+
+ Access to the stored Color Array, if created, for the Series.
+
+
+
+
+ Point characteristics
+
+
+
+
+ Values defining horizontal point positions.
+
+
+
+
+ Values defining vertical point positions.
+
+
+
+
+ Copies all properties from one Series component to another.
+
+
+
+
+ Copies all properties from one Series component to another.
+
+
+
+
+ Replaces ASeries object with a new Series object of another class.
+
+
+
+
+ Returns the object of the series.
+
+
+
+
+ Returns the associated bitmap icon for a given Series class.
+ This icon is used at ChartListBox and Series Editor dialog.
+
+
+
+
+ Returns the value list that has the AListName parameter.
+
+
+
+
+ Specified the custom horizontal axis for the series.
+
+
+
+
+ Specified the custom vertical axis for the series.
+
+
+
+
+ Accesses a list of series point labels.
+
+
+
+
+ Gets or sets the Datasource Label Field
+
+
+
+
+ Gets or sets the Datasource Color Field
+
+
+
+
+ Returns a new Series, copy of this original.
+
+
+
+
+ Adds all Values from Source series.
+
+
+
+
+ Adds all Values from Source series.
+
+
+
+
+ Recalculates all dependent Series points again.
+
+
+
+
+ Recalculates the function just one time, when finished adding points.
+
+
+
+
+ Used with .BeginUpdate to recalculate the function just once
+ when finished adding points.
+
+
+
+
+ Occurs when the control is clicked.
+
+
+
+
+ Occurs when the control is double-clicked.
+
+
+
+
+ Draws points with different preset Colors.
+
+
+
+
+ For internal use.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Shows or hides this series.
+
+
+
+
+ Returns the corresponding Screen Point values of a Value position between Axis limits.
+
+
+
+
+ Returns the corresponding Value PointDouble values of a Screen position between Axis limits.
+
+
+
+
+ Returns the corresponding X value of a Screen position between Axis limits.
+
+
+
+
+ Returns the corresponding Y value of a Screen position between Axis limits.
+
+
+
+
+ Returns the length in pixels of the longest Mark text.
+
+
+
+
+ Returns corresponding Point value suitable for displaying at Series Marks.
+
+
+
+
+ Returns the string representation of a Index point used to draw the Mark.
+
+
+
+
+ Forces the Chart to Repaint.
+
+
+
+
+ Returns True when the tmpSeries parameter is of the same class.
+
+
+
+
+ Sorts all points in the series using the Labels (texts) list.
+ Note: non-mandatory values (X) are modified (they are not preserved).
+
+
+
+
+ For internal use.
+
+
+
+
+ For internal use.
+
+
+
+
+ For internal use.
+
+
+
+
+ Determines the DateTimeFormat to display point values.
+
+
+
+
+ Determines the Format to display point values.
+
+
+
+
+ Sets the Format to display point values as percentage.
+
+
+
+
+ Horizontal axis to associate to this Series.
+
+
+
+
+ Determines Vertical axis associated to this Series.
+
+
+
+
+ This method will change the Color of a specified range of points.
+
+ Valuelist from which the range is defined
+ Beginning of the specified AValueList range
+ End of the specified AValueList range
+ New Color for range of points
+
+
+
+ Returns "Value" parameter coordinate position in pixels.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the specified Value.
+
+
+
+
+ Returns the pixel Screen Vertical coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the pixel Screen Vertical coordinate of the specified Value.
+
+
+
+
+ Returns the colour of the index point.
+
+
+
+
+ Returns true if there are more series that share the same Z order. For example Stacked Bars.
+
+
+
+
+ Draws the series to the Chart Canvas.
+
+
+
+
+ System.Obsolete: Use the Series property.
+
+
+
+
+ Object to load data from.
+
+
+
+
+ Adds the collection of objects that implement the IList interface.
+
+
+
+
+ Adds the data set that implements the IDataReader interface.
+
+
+
+
+ Adds the DataTable.
+
+
+
+
+ Adds the DataView.
+
+
+
+
+ Refreshes all Series point values, either from database Tables, Queries or Series points.
+
+
+
+
+ Default color for all points.
+
+
+
+
+ Shows or hides this series.
+
+
+
+
+ Exchanges one point with another. Also the point color and point label.
+
+ Index of first point to exchange.
+ Index of second point to exchange.
+
+
+
+ Series description to show in Legend and editors.
+
+
+
+
+ Adds new point with specified DateTime x and Double y values.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x and Double y values.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x and DateTime y values.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x, Double y values and Color.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x, Double y values and Color.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x, Double y values and Text.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x, Double y values and Text.
+
+ index of added point
+
+
+
+ System.Obsolete: Please use Add(x,y,Color.Transparent) method.
+
+
+
+
+ System.Obsolete: Please use Add() method without parameters.
+
+
+
+
+ Adds a new null (transparent) point.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds the array of unsigned long values.
+
+
+
+
+ Adds the array of long values.
+
+
+
+
+ Adds the array of long values.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds a new point with specified value and text.
+
+
+
+
+ Adds a new point with specified value and text.
+
+
+
+
+ Adds a new point with specified x and y values.
+
+
+
+
+ Adds a new point with specified x and y values.
+
+
+
+
+ Adds the pair of floating point x- and y-pixel coordinates
+
+ index of added point
+
+
+
+ Adds a new point with specified x,y values and text.
+
+
+
+
+ Adds a new point with specified x,y values and text.
+
+
+
+
+ Adds a new point with specified x,y values, text and color.
+
+
+
+
+ Adds a new point with specified x,y values, text and color.
+
+
+
+
+ Adds a new Datetime point to a Series, label and color.
+
+ Datetime value
+ Y value
+ Point text
+ Point color
+ index of added point
+
+
+
+ Adds a new Datetime point to a Series, label and color.
+
+ Datetime value
+ Y value
+ Point text
+ Point color
+ index of added point
+
+
+
+ Adds a new point with specified x and y values and color.
+
+
+
+
+ Adds a new point with specified x and y values and color.
+
+
+
+
+ Adds a new point with specified value, text and color.
+
+
+
+
+ Adds a new point with specified value, text and color.
+
+
+
+
+ Adds a new point with specified value and color.
+
+
+
+
+ Adds a new point with specified value and color.
+
+
+
+
+ Adds a new null point with specified text.
+
+
+
+
+ Adds all points in source Series.
+
+
+
+
+ Adds generic type T.
+
+
+
+
+ Adds the X and Y arrays, optionally appending the values to any existing ones.
+
+
+
+
+ Adds the X and Y arrays.
+
+
+
+
+ Adds the array of double values.
+
+
+
+
+ Adds the array of double values.
+
+
+
+
+ Adds the array of float values.
+
+
+
+
+ Adds the array of float values.
+
+
+
+
+ Adds the array of integer values.
+
+
+
+
+ Adds the array of integer values.
+
+
+
+
+ Adds a new point with specified value.
+
+
+
+
+ Adds the array of unsigned long values.
+
+
+
+
+ Reorders points according to Order property of X,Y,etc value lists.
+
+
+
+
+ Removes all points, texts and Colors from the Series.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Returns the number of points in the Series.
+
+
+
+
+ Removes the index th point.
+ X values remain unchanged.
+
+
+
+
+ Removes count number of points starting at index.
+ When RemoveGap parameter is true, it calls ValueList FillSequence.
+
+
+
+
+ Used internally to add random values to a series.
+
+
+
+
+ Adds random values to help visualize the Series.
+ Each series class determines how many random points to add.
+
+
+
+
+ Adds the specified NumValues random points.
+
+ The number of sample values to add.
+
+
+
+ Returns true if the index th point in the Series is "null" or "empty".
+ A point is considered "null" when the color of that point is "Transparent".
+
+ The point index.
+ True if the point color is Color.Transparent.
+
+
+
+ Validates Series datasource.
+
+ The series to validate.
+ True if value can be a Series data source.
+
+
+
+ Function object to calculate values.
+
+
+
+
+ System.Obsolete: Please use ColorEach property.
+
+
+
+
+ Returns the index of the series point that is displayed first when the series is drawn.
+
+
+
+
+ Returns the index of the series point that is displayed first when the series is drawn.
+
+
+
+
+ Sets the Depth of the series points or interconnecting lines.
+
+
+
+
+ Determines where on the depth axis the Series is drawn.
+
+
+
+
+ Displays this Series Title in Legend.
+
+
+
+
+ Sets or returns the value to be used as a null value within the series.
+
+
+
+
+ Returns the index of the Series' first visible point.
+
+
+
+
+ Returns the index of the Series' last visible point.
+
+
+
+
+ Cursor displayed when mouse is over a series point.
+
+
+
+
+ Defines all necessary properties to draw a mark near to each Series point.
+
+
+
+
+ Returns whether Series draws its points in ascending/descending order.
+
+ True if values in this series are displayed forward, from 0 to Count-1.
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Sets the specified series point to a null (transparent) point.
+
+
+
+
+ Toogles between null (transparent) and regular point.
+
+ Point index
+ If true, transform to null point, otherwise transform to normal point.
+
+
+
+ Creates and prepares the index'th Series style to show at sub-gallery dialog.
+
+
+
+
+ Returns the size in pixels corresponding to value parameter in horizontal axis scales.
+
+
+
+
+ Returns the size in pixels corresponding to value parameter in vertical axis scales.
+
+
+
+
+ Overridden ToString() method.
+
+ Returns the Series property.
+
+
+
+ System.Obsolete: Please use ToString() method.
+
+
+
+
+ Returns the formatted string corresponding to the LegendIndex point.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Returns Maximum Z Value.
+
+
+
+
+ Returns Minimum Z Value.
+
+
+
+
+ The SeriesCollection class, a collection of Series objects, is manipulated via the Chart property.
+
+
+
+
+ Returns the corresponding point index which has the specified Value.
+
+
+
+
+ Adds a new Series instance to Chart.
+
+ The Series instance to add.
+ The same Series.
+
+
+
+ Adds a new series group to the groups list.
+
+ New series group name.
+
+
+
+ List of series groups.
+
+
+
+
+ Deletes the specified Series from the Chart list of series.
+
+
+
+
+ Removes all Series from the Chart but not disposes (destroys) them
+
+
+
+
+ This method changes the Series order, swapping one Series Z position with another.
+
+
+
+
+ Removes (and optionally disposes) all Series.
+
+
+
+
+ Removes and disposes all Series.
+
+
+
+
+ Defines the Chart component.
+
+
+
+
+ Returns true if all series are active and
+ sets the active property of all series
+
+
+
+
+ Sets multiple Series on same Chart in different Z spaces when true.
+
+
+
+
+ Adds all Series to the AItems list or array parameter.
+
+
+
+
+ Adds all Series from seriesCollection parameter to the items list or array parameter.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Shows the point value.
+
+
+
+
+ Shows the percent the point value represents.
+
+
+
+
+ Shows the associated Point Label.
+
+
+
+
+ Shows the point Label and the percent value the point represents.
+
+
+
+
+ Shows the point Label and the point value.
+
+
+
+
+ Shows whatever is shown at Chart Legend.
+
+
+
+
+ Shows the percent the point represents together with the "of" word and the sum of all points absolute values.
+
+
+
+
+ Shows the point Label toghether with the resulting "PercentTotal" style.
+
+
+
+
+ Shows the point XValue.
+
+
+
+
+ Shows the point XValue and YValue.
+
+
+
+
+ Show the point Series Title.
+
+
+
+
+ Show the point Index.
+
+
+
+
+ Show the point percent relative to first point value.
+
+
+
+
+
+
+
+
+
+ Mark Callout pointer characteristics
+
+
+
+
+ Length between datapoint and Mark
+
+
+
+
+ Series Marks characteristics
+
+
+
+
+ Series Mark Symbols
+
+
+
+
+ Series Mark Position
+
+
+
+
+ Returns the bounding rectangle of the indexed Mark.
+
+
+
+
+ Series Marks' Positions
+
+
+
+
+ Checks for Custom Marks
+
+ true if Custom exists
+
+
+
+ When True, Marks arrow pen color is changed if the
+ point has the same color.
+
+
+
+
+ Marks Callout characteristics
+
+
+
+
+ Expands axes to fit Series Marks.
+
+
+
+
+ Gets or sets a value which determines if Series Marks are always drawn on top of all other Series in the Chart.
+
+
+
+
+
+
+
+
+
+ Defines how Series Marks are constructed.
+
+
+
+
+ Turns all Marks positions Custom to false.
+ Tells chart to repaint using automatically positioned marks.
+
+
+
+
+ Removes all mark positions and mark items.
+
+
+
+
+ Determines which Mark contains the p point parameters.
+
+
+
+
+ Determines which Mark contains the XY pixel point parameters.
+
+ The Mark index containing the XY point.
+
+
+
+ The Pen used to draw a line connecting Marks to Series points.
+
+
+
+
+ The length in pixels for the line connecting the Mark to Series point.
+
+
+
+
+ Gets and sets whether Marks are selectively restricted to the axes space.
+
+
+
+
+ Restricts Marks to Chart axes space, when true.
+
+
+
+
+ Characters in Mark texts are split into multiple lines, when true.
+
+
+
+
+ The number of Marks to skip. ( Default is 1, all Marks are displayed ).
+
+
+
+
+ Sets angle from 0 to 360º to rotate Marks.
+
+
+
+
+ Font Color in Mark texts are given from its point Color.
+
+
+
+
+ Sets Position in pixels on the Z axis.
+
+
+
+
+ Returns the string showing a "percent" value for a given point.
+ For example: "25%"
+ The optional "AddTotal" parameter, when true, returns: "25% of 1234".
+
+
+
+
+ Returns the length in pixels for the ValueIndex th mark text string.
+ It checks if the Mark has multiple lines of text.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Areas will be drawn one behind the other.
+
+
+
+
+ Draws each Area on top of previous one.
+
+
+
+
+ Adjusts each individual point to a common 0..100 axis scale.
+
+
+
+
+ Area Series
+
+
+
+
+ Determines how Multi-AreaSeries are displayed.
+
+
+
+
+ Determines Brush to fill the background Area region.
+
+
+
+
+ Determines to fill the top 3D Area region.
+
+
+
+
+ Gets and sets a value which when true calculates the Gradient relative to each point.
+ When false, the Gradient is calculated with respect to the entire Gradient area.
+
+
+
+
+ Determines Gradient to fill the background Area region.
+
+
+
+
+ Determines Pen to draw AreaLines.
+
+
+
+
+ Aligns bottom of AreaSeries to the Origin property value.
+
+
+
+
+ Sets axis value as a common bottom for all AreaSeries points.
+
+
+
+
+ Returns the highest of all the current Series Y point values.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Arrow Series.
+
+
+
+
+ Determines the vertical arrow head size in pixels.
+
+
+
+
+ Determines the horizontal arrow head size in pixels.
+
+
+
+
+ Sets X0 values for Arrows.
+
+
+
+
+ Sets Y0 values for Arrows.
+
+
+
+
+ Sets X1 values for Arrows.
+
+
+
+
+ Sets Y1 values for Arrows.
+
+
+
+
+ Adds an Arrow with start and end coordinates.
+
+
+
+
+ Adds an Arrow with start and end coordinates and label.
+
+
+
+
+ Adds an Arrow with start and end coordinates and color.
+
+
+
+
+ Adds an Arrow with start and end coordinates, label and color.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ The Bar Series component outputs all points as vertical bars.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Determines the percent of total Bar width used.
+
+
+
+
+ Internal use.
+
+
+
+
+ Returns the Screen X pixel coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the Screen Y pixel coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the corresponding screen pixels coordinate of the leftmost horizontal bar edge.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Bar3D Series.
+
+
+
+
+ Adds a bar with an X and Y value, Y start point and color.
+
+
+
+
+ Adds a bar with an X and Y value and Y start point.
+
+
+
+
+ Adds a bar with an X and Y value with offset and label.
+
+
+
+
+ Adds a bar with an X and Y value, Y start point, label and color.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Returns the corresponding screen pixels coordinate of the leftmost horizontal bar edge.
+
+
+
+
+ BarJoin series.
+
+
+
+
+ Determines the pen to draw the lines between each bar point.
+
+
+
+
+ Internal use.
+
+
+
+
+ Bezier series.
+
+
+
+
+ Internal use.
+
+
+
+
+ Bubble Series.
+
+
+
+
+ Gets and sets whether the Radius values are calculated relative to the Vertical Axis or the Horizontal Axis. This
+ property only has a visible effect when is set to true.
+
+
+
+
+ Determines how the Bubble size is calculated.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Adds a new Bubble point to the Series Points List and color.
+
+
+
+
+ Adds a new Bubble point to the Series Points List.
+
+
+
+
+ Adds a new Bubble point to the Series Points List and label.
+
+
+
+
+ Adds a new Bubble point to the Series Points List, label and color.
+
+
+
+
+ Is used to validate the DataSource property both at design and run-time.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Returns the maximum Z value.
+
+
+
+
+ Returns the minimum Z value.
+
+
+
+
+ A TList object that stores each Bubble point Radius value.
+
+
+
+
+ Controls which color will be drawn on the bubbles.
+
+
+
+
+ Calendar series.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The selected date.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Contains the characteristics of each Calendar Cell.
+
+
+
+
+ Format information for the upper row cells of the Calendar Series.
+
+
+
+
+ Enables/disables the display of months and weekdays in upper case.
+
+
+
+
+ Defines the DateValue format for the months and weekdays.
+
+
+
+
+ Element Pen Characteristics.
+
+
+
+
+ Defines a day and causes Calender Series to display the associated month.
+
+
+
+
+ Defines Calender Cell appearance characteristics for calender days.
+
+
+
+
+ Defines Calender Cell appearance for weekday titles.
+
+
+
+
+ Defines Calender Cell appearance for the month name.
+
+
+
+
+ Defines Calender Cell appearance for the highlighted day.
+
+
+
+
+ Defines Calender Cell appearance for all Sundays.
+
+
+
+
+ Defines Calender Cell appearance for the trailing days.
+
+
+
+
+ Gets the month after the present one.
+
+
+
+
+ Gets the month before the present one.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Returns the bounderies of a 2D-Rectangle defining the outline of the specified Calender series cell.
+
+
+
+
+ Handles the click events of the NextMonth and PreviosMonth buttons.
+
+
+
+
+ Returns the number of Rows present in the Calender Series.
+
+
+
+
+ Gets description text.
+
+
+
+
+ Returns the number of Columns present in the Calender Series.
+
+
+
+
+
+
+
+
+
+ Can use Mouseclick to set the selected DateCell.
+
+ pixel X location
+ pixel Y location
+
+
+
+ Can use Mouseclick to set the Next or Previous buttons.
+
+ pixel X location
+ pixel Y location
+
+
+
+ Moves the Calender series onto the month after the present one.
+
+
+
+
+ Moves the Calender series onto the month before the present one.
+
+
+
+
+
+
+
+
+
+ Class provides access to XYZ Point characteristics
+
+
+
+
+ Indexed Point Open value
+
+
+
+
+ Indexed Point High value
+
+
+
+
+ Indexed Point Low value
+
+
+
+
+ Indexed Point Close value
+
+
+
+
+ Indexed Point Date value
+
+
+
+
+ OHLC is an base Series class that maintains lists for Open, Close, High and Low values.
+
+
+
+
+ Gets and sets all Stock market Date values.
+
+
+
+
+ Gets and sets all Stock market Close values.
+
+
+
+
+ Gets and sets all Stock market Open values.
+
+
+
+
+ Gets and sets all Stock market High values.
+
+
+
+
+ Gets and sets all Stock market Low values.
+
+
+
+
+ Adds new point with specified integer index and double open, high, low and close.
+
+ index of added point
+
+
+
+ Adds new point with specified double index and double open, high, low and close.
+
+ index of added point
+
+
+
+ Adds new point with specified double open, high, low and close.
+
+ index of added point
+
+
+
+ Adds new point with specified DateTime x and double open, high, low and close.
+
+ index of added point
+
+
+
+ Adds the DataView to the OHLC series.
+
+
+
+
+ Validates Series datasource.
+
+ The series to validate.
+ True if value can be a Series data source.
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Point characteristics
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Candle points represented by vertical rectangles with Open and Close vertical tick marks.
+
+
+
+
+ Candle points represented by vertical lines with Open and Close horizontal tick marks.
+
+
+
+
+ Candle points represented by vertical rectangles without Open and Close vertical tick marks.
+
+
+
+
+ Candle points represented by a line.
+
+
+
+
+ Candle Series.
+
+
+
+
+ Determines how the Candle points will be drawn.
+
+
+
+
+ Pen used to draw "high" and "low" lines
+
+
+
+
+ Sets the horizontal Candle Size in pixels.
+
+
+
+
+ Candle color fill when Open value is greater than Close value.
+
+
+
+
+ Candle color fill when Close value is greater than Open value.
+
+
+
+
+ Determines whether Open prices will be displayed.
+
+
+
+
+ Determines whether Close prices will be displayed.
+
+
+
+
+ Returns true if point p is inside the bounds of the ValueIndex candle
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Circled Series.
+
+
+
+
+ Represents the constant pi / 180.
+
+
+
+
+ Sets angle of Chart rotation.
+
+
+
+
+ Returns the exact Screen position for a given pair of Angle and Radius values.
+
+
+
+
+ Returns the angle from the XY point parameter to the circle center.
+
+
+
+
+ Returns the radius from XY point to the circle center.
+
+
+
+
+ Returns the angle by which the Chart is rotated.
+
+
+
+
+ Returns the exact horizontal size of the ellipse's radius in pixels.
+
+
+
+
+ Returns the exact vertical size of the ellipse's radius in pixels.
+
+
+
+
+ Returns the exact horizontal position of ellipse's center in pixels.
+
+
+
+
+ Returns the exact vertical position of the ellipse's center in pixels.
+
+
+
+
+ Returns the width of the bounding Circle.
+
+
+
+
+ Returns the height of the bounding Circle.
+
+
+
+
+ Returns the rectangle that bounds the circle.
+
+
+
+
+ Determines the color to fill the ellipse.
+
+
+
+
+ Determines the Gradient which fills the ellipse.
+
+
+
+
+ Sets CirleSeries as elliptical or circular.
+
+
+
+
+ Sets ellipse's horizontal radius in pixels.
+
+
+
+
+ Sets ellipse's vertical radius in pixels.
+
+
+
+
+ Sets all the CirleSeries in a chart to use the same radius or independent.
+
+
+
+
+ CircularGauge Series.
+
+
+
+
+ Called when the Gauge property is changed.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets and sets the distance between the center of the hand and its tail as a percentage of the total distance.
+
+
+
+
+ Gets or sets a collection of ColorLines which initially contains the and the .
+
+
+
+
+ Gets or sets a collection of StartValues which initially contains the and the .
+
+
+
+
+ Gets or sets a collection of EndValues which initially contains the and the .
+
+
+
+
+ Gets and sets the CircularGauge's color palette.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker ends.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker starts.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker ends.
+
+
+
+
+ Gets and sets the value at which the 'redline' marker starts.
+
+
+
+
+ Gets and sets the automatic positioning of the embedded NumericGauge.
+
+
+
+
+ Gets and sets the whether or not the embedded NumericGauge displays the same value as the CircularGauge.
+
+
+
+
+ Gets and sets the automatic positioning of the embedded LinearGauge.
+
+
+
+
+ Gets and sets the whether or not the embedded LinearGauge displays the same value as the CircularGauge.
+
+
+
+
+ Gets and sets properties of an embedded LinearGauge. Set Visible to true to visualize.
+
+
+
+
+ Gets and sets properties of an embedded NumericGauge. Set Visible to true to visualize.
+
+
+
+
+ The 'redline' object is the curved shape with a gradient which is used to signal a high or maximum value.
+
+
+
+
+ The 'greenline' object is the curved shape with a gradient which is used to signal a low or minimum value.
+
+
+
+
+ Gets and sets the characteristics of the Axis' minor tick marks.
+
+
+
+
+ Gets and sets the characteristics of the Axis' major tick marks.
+
+
+
+
+ The Frame is the object which surrounds the CircularGauge and which consists of three configurable Bands: Inner, Middle and Outer.
+
+
+
+
+ When true, labels are rotated so to appear parallel to the curved CircularGauge axis.
+
+
+
+
+ Gets and sets the Hand (or needle) object characteristics.
+
+
+
+
+ Gets or sets a custom bounding rectangle for the gauge.
+
+
+
+
+ Gets or sets whether or not a semi-circular GaugeSeries is filled.
+
+
+
+
+ ChartBrush characteristics of the CircularGauge's face.
+
+
+
+
+ The distance between the minor ticks and the CircularGauge curved axis.
+
+
+
+
+ Gets or sets the minimum value for the gauge.
+
+
+
+
+ Gets or sets the maximum value for the gauge.
+
+
+
+
+ Controls the size in degrees for the gauge axis.
+
+
+
+
+ Gets and sets the total display angle of the Frame.
+
+
+
+
+ Gets and sets the angle of Frame rotation.
+
+
+
+
+ Gets or sets the position of gauge arrow line.
+
+
+
+
+ Defines where to display gauge axis labels.
+
+
+
+
+ Gets the CircularGauges's Axis characteristics.
+
+
+
+
+ Returns a sub-object with properties that control the appearance of a shape at the middle of gauge.
+
+
+
+
+ Returns a sub-object with properties that control the appearance of a shape at the end of the gauge arrow.
+
+
+
+
+ Gets and sets the distance between the center of the hand and its head as a percentage of the total distance.
+
+
+
+
+ An array defining the width of each frame member, inner, middle,
+ outer, with that order in the array.
+ The total should sum 100 (%).
+
+
+
+
+ Gets and sets the total display angle of the Frame.
+
+
+
+
+ Gets and sets the angle of Frame rotation.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Defines clock figures as Decimal numerals.
+
+
+
+
+ Defines clock figures as Roman numerals.
+
+
+
+
+ Clock Series.
+
+
+
+
+ Sets the Pen for the Clock's hour hand.
+
+
+
+
+ Sets the Pen for the Clock's minute hand.
+
+
+
+
+ Sets the Pen for the Clock's second hand.
+
+
+
+
+ Sets the style of the clock figures, Roman or Decimal.
+
+
+
+
+ The ColorGrid series displays a grid of color cells.
+
+
+
+ Use this property to display a bitmap within a ColorGrid.
+ This sample shows how to use the ColorGrid.Bitmap property:
+
+ private void SetFlower() {
+ MemoryStream ms = new MemoryStream();
+ Image flower = pictureBox1.Image;
+ flower.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
+ Bitmap bm = new Bitmap(ms);
+ colorGrid1.Bitmap = bm;
+ }
+
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Contains characteristic information for a Contour series' "level".
+
+
+
+
+ Sets range value for ContourLevel.
+
+
+
+
+ Colour of ContourSeries Level.
+
+
+
+
+ Pen characteristics of the ContourLevel
+
+
+
+
+ Reserved for future use.
+
+
+
+
+ Contour level construction algorithm.
+
+
+
+
+ Level is not segmented (fast)
+
+
+
+
+ Each level is segmented (slow).
+
+
+
+
+ The Contour series calculates and displays "isolines" from a custom array of XYZ points.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ Accesses the ContourLevel characteristics selecting Level by index.
+
+
+
+
+ Gets or Sets the values in the Value array.
+
+
+
+
+ Sets the Colour of the ContourSeries Level.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ Accesses the ContourLevel characteristics selecting Level by index.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Sets ContourSeries Automatic Levels.
+
+
+
+
+ Accesses ContourLevel characteristics by selecting Level index.
+
+
+
+
+ Sets the number of 'isobar-like' levels for the ContourSeries.
+
+
+
+
+ Sets the Y-Axis height of the Contour Series.
+
+
+
+
+ Contour series level construction and drawing algorithm.
+
+
+
+
+ If true, fill contour levels.
+
+
+
+
+ Contour series Pointer characteristics.
+
+
+
+
+ Enables/disables YPosition to be set.
+
+
+
+
+ Defines Series bounding frame characteristic.
+
+
+
+
+ Special characteristic for contour marks.
+
+
+
+
+ Returns the associated z axis. If in 3D, then the result is Depth axis, otherwise the result is
+ series default vertical axis.
+
+
+
+
+ Clicked point index.
+
+ Screen x position.
+ Screen y position.
+ Clicked point index.
+
+
+
+ Default contour levels line pen color.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Composite of the Contour series class.
+
+
+
+
+ Main drawing routine
+
+
+
+
+ Describes the pointer style of a series pointer.
+
+
+
+
+ Defines the pointer as a rectangle.
+
+
+
+
+ Defines the pointer as a circle.
+
+
+
+
+ Defines the pointer as a triangle.
+
+
+
+
+ Defines the pointer as a down pointing triangle.
+
+
+
+
+ Defines the pointer as a cross.
+
+
+
+
+ Defines the pointer as a diagonal cross.
+
+
+
+
+ Defines the pointer as a star.
+
+
+
+
+ Defines the pointer as a diamond.
+
+
+
+
+ Defines the pointer as a small dot.
+
+
+
+
+ Defines the pointer as no shape.
+
+
+
+
+ Defines the pointer as a left triangle.
+
+
+
+
+ Defines the pointer as a right triangle.
+
+
+
+
+ Defines the pointer as a graded sphere.
+
+
+
+
+ Defines the pointer as a polished sphere.
+
+
+
+
+ Defines the pointer as hexagon.
+
+
+
+
+ Some Series have a Pointer property which returns a SeriesPointer class. Pointers are shape figures drawn on each Y point coordinates.
+
+
+
+
+ Fills pointer sides in 3D mode with darker color.
+
+
+
+
+ Draws pointer in 3D mode.
+
+
+
+
+ Shows or hides the pointer.
+
+
+
+
+ Horizontal size of pointer in pixels.
+
+
+
+
+ Expands axes to fit pointers.
+
+
+
+
+ Sets the Pointer style.
+
+
+
+
+ Sets Horizontal size of pointer in pixels.
+
+
+
+
+ Sets Percent of semiglass effect.
+
+
+
+
+ Configures Gradient filling attributes.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sets the pointer color.
+
+
+
+
+ Internal use. Draw Pointer
+
+
+
+
+ Pen used to draw a frame around Series Pointers.
+
+
+
+
+ Brush used to fill Series Pointers.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Series will be drawn one behind the other.
+
+
+
+
+ Series will be drawn one over the other.
+
+
+
+
+ Draws each series on top of the previous one.
+
+
+
+
+ Adjusts each individual series to a common 0..100 axis scale.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The Index of the value in the series .
+
+
+
+
+ The series pointer .
+
+
+
+
+ The series pointerColor.
+
+
+
+
+ Base Series class inherited by a number of TeeChart series styles.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs when a series pointer is clicked.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs on the drawing of the series pointers.
+
+
+
+
+ Defines how multiple series will be displayed.
+
+
+
+
+ Defines all necessary properties of the Series Pointer.
+
+
+
+
+ For stacked series, PointOrigin returns the sum of ValueIndex values
+ of all series, until this series in the Chart.Series collection order.
+
+ The point index
+ When true, all series are taken into calculation
+ Point origin value
+
+
+
+ For internal use.
+
+
+
+
+ For internal use.
+
+
+
+
+ For internal use.
+
+
+
+
+ Draws series pointer to the Canvas.
+
+
+
+
+ Returns vertical screen position for a given point.
+
+
+
+
+ Returns horizontal screen position for a given point.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Base Series class inherited by a number of TeeChart series styles.
+
+
+
+
+ Allows mouse clicks over the line drawn between points.
+
+
+
+
+ Sets Opacity level from 0 to 100%
+
+
+
+
+ Gets or sets whether the Line Series' line is smoothed.
+
+
+
+
+ Sets Transparency level from 0 to 100%
+
+
+
+
+ Sets Brush characteristics.
+
+
+
+
+ Darkens parts of 3D Line Series to add depth.
+
+
+
+
+ Steps line joining adjacent points.
+
+
+
+
+ Enables/Disables the coloring of each connecting line of a series.
+
+
+
+
+ Changes the direction of the step, when true.
+
+
+
+
+ Pen for Series Line's outer pen.
+
+
+
+
+ Defines the vertical thickness of the line in pixels.
+
+
+
+
+ Calculates if any point is at XY position.
+
+ Point index
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Class provides access to XYZ Point characteristics
+
+
+
+
+ Indexed Point Z value
+
+
+
+
+ Custom3D Series.
+
+
+
+
+ Values defining Z grid point positions.
+
+
+
+
+ Adds the X, Y and Z arrays.
+
+
+
+
+ Adds the X, Y and Z arrays.
+
+
+
+
+ Adds a new point to a 3D Series.
+
+
+
+
+ Adds a new point to a 3D Series and label.
+
+
+
+
+ Adds a new point to a 3D Series and color.
+
+
+
+
+ Adds a new Datetime point to a 3D Series, label and color.
+
+ Datetime value
+ Y value
+ Z value
+ Point text
+ Point Color
+ index of added point
+
+
+
+ Adds a new point to a 3D Series, label and color.
+
+
+
+
+ Adds a new point to a 3D Series.
+
+
+
+
+ Adds a new point to a 3D Series and color.
+
+
+
+
+ Adds a new point to a 3D Series and label.
+
+
+
+
+ Adds a new point to a 3D Series, label and color.
+
+
+
+
+ Adds a new Datetime point to a 3D Series, label and color.
+
+ Datetime value
+ Y value
+ Z value
+ Point text
+ Point Color
+ index of added point
+
+
+
+ Adds the DataView to the 3D Series.
+
+
+
+
+ Checks if given series object instance is a Custom3D instance.
+
+
+
+
+ Returns Maximum Z Value.
+
+
+
+
+ Returns Minimum Z Value.
+
+
+
+
+ For internal use.
+
+
+
+
+ XYZ Point characteristics
+
+
+
+
+ Custom3DGridSeries
+
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The series point XValue.
+
+
+
+
+ The series point ZValue.
+
+
+
+
+ The series point YValue.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs when the Surface Series needs to recreate the grid of values.
+
+
+
+
+ Deletes all Series values.
+
+
+
+
+ Determine if X and Z values are equi-distant or not.
+
+
+
+
+ Makes a Surface grid of NumX by NumZ dimensions.
+
+
+
+
+ A two dimension array property for the easy access to series cell values.
+
+
+
+
+ Determines the Surface's horizontal size in number of points.
+
+
+
+
+ Determines the Surface's depth size in number of points.
+
+
+
+
+ Custom3DPalette Series Style.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The Index of the value in the series .
+
+
+
+
+ The color of the series point.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs each time a Surface's polygon is displayed. Using this event, specific Colors can be assigned to individual Surface polygons.
+
+
+
+
+ Defines the Pen to draw the Surface polygons.
+
+
+
+
+ Defines the range of colour in the default color Palette.
+
+
+
+
+ Sets the number of entries in the default color Palette.
+
+
+
+
+ Defines the alpha value for the Red of the ARGB component.
+
+
+
+
+ Defines the alpha value for the Green of the ARGB component.
+
+
+
+
+ Defines the alpha value for the Blue of the ARGB component.
+
+
+
+
+ Determines the last Range palette color.
+
+
+
+
+ Determines the middle Range palette color.
+
+
+
+
+ Sets 1 of 3 Colors used to create the palette to fill the Surface polygons.
+
+
+
+
+ Defines the Brush to fill the Surface polygons.
+
+
+
+
+ Selects Pale or Strong colour palette.
+
+
+
+
+ The interval amount between palette Colors.
+
+
+
+
+ Access the Color Palette list
+
+
+
+
+ The starting value used to calculate the color palette when is true.
+
+
+
+
+ Deletes all Palette information.
+
+
+
+
+ Add Color to Palette list
+
+ Data Value
+ Color
+ New Palette Color Index
+
+
+
+ Sets gradient color palette to fill Surface polygons.
+
+
+
+
+ Sets multi-color palette to fill Surface polygons.
+
+
+
+
+ Set to True to force the color palette to start at property value.
+
+
+
+
+ Returns the colour of the index point.
+
+
+
+
+ Returns LegendString for LegendIndexth item.
+
+
+
+
+ Used in Custom3DPalette series to store the palette values.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Defines a pale palette.
+
+
+
+
+ Defines a strong palette.
+
+
+
+
+ Defines a grayscale palette.
+
+
+
+
+ Defines an inverted grayscale palette.
+
+
+
+
+ Defines a rainbow palette.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Bar series are placed one behind the other.
+
+
+
+
+ Bar series points are placed one beside the other.
+
+
+
+
+ Bar series are placed one on top of the other.
+
+
+
+
+ Bar series are placed one on top of the other against a common axis scale 0..100.
+
+
+
+
+ Bar series, that is, all series points, are drawn one beside the other.
+
+
+
+
+ The points of each bar series are drawn one on top of the other.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Defines a rectangle shape for each bar series point.
+
+
+
+
+ Defines a pyramid shape for each bar series point.
+
+
+
+
+ Defines an inverted pyramid shape for each bar series point.
+
+
+
+
+ Defines a cylinder shape for each bar series point.
+
+
+
+
+ Defines an ellipse shape for each bar series point.
+
+
+
+
+ Defines an arrow shape for each bar series point.
+
+
+
+
+ Defines a rectangle shape with a gradient for each bar series point.
+
+
+
+
+ Defines a cone shape for each bar series point.
+
+
+
+
+ Defines an inverted arrow shape for each bar series point.
+
+
+
+
+ Defines an inverted cone shape for each bar series point.
+
+
+
+
+ Defines an bevelled shape for each bar series point.
+
+
+
+
+ Defines an bevelled cubic shape for each bar series point.
+
+
+
+
+ Defines a diamond shape for each bar series point.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Set the alignment at start position of the Marks into the Bar.
+
+
+
+
+ Set the alignment at center position of the Marks into the Bar.
+
+
+
+
+ Set the alignment at end position of the Marks into the Bar.
+
+
+
+
+ Custom Bar Series.
+
+
+
+
+ The Event Data for the event.
+
+
+
+
+ The Index of the value in the series .
+
+
+
+
+ The Bar series .
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs when series bars are painted.
+
+
+
+
+ Defines the percentage, from 0 to 100, that the bars will need in the "Z" depth space direction.
+
+
+
+
+ Defines the color Gradient used to fill the Bars.
+
+
+
+
+ When Gradient is Visible, calculates Colors based on highest bar.
+
+
+
+
+ Allows stacking independent Series within the same Chart.
+
+
+
+
+ Darkens sides of bars to enhance 3D effect.
+
+
+
+
+ Sets a margin between Chart rectangle and Bars.
+
+
+
+
+ System.Obsolete: Please use property.
+
+
+
+
+ Allows Bars to be bottom aligned to the Origin property value.
+
+
+
+
+ Sets the common bottom value used for all Bar points.
+
+
+
+
+ Repositions Marks on BarSeries to prevent overlapping.
+
+
+
+
+ Sets the Bar displacement as percent of Bar size.
+
+
+
+
+ Defines the Bar shape used to draw Bars.
+
+
+
+
+ Amount in pixels of the bar bevel.
+ Used only when BarStyle property is Bevel (only in 2D and 3D orthogonal display modes)
+
+
+
+
+ Sets a postition of the Marks into the Bars.
+
+
+
+
+ Sets the alignment of the Mark into the Bars.
+
+
+
+
+ Defines the Brush used to fill Bars.
+
+
+
+
+ Defines the Shadow used to draw behind the Bars.
+
+
+
+
+ Determines how multiple BarSeries will be displayed in the same Chart.
+
+
+
+
+ Pen used to draw the Bar rectangles.
+
+
+
+
+ Pen used to draw "tick" lines across each bar.
+
+
+
+
+ Coordinates of current Bar point being displayed.
+
+
+
+
+ For internal use.
+
+
+
+
+ For internal use.
+
+
+
+
+ Returns side margin amount in pixels.
+
+ Side margin amount in pixels.
+
+
+
+ For internal use.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ CustomBox Series.
+
+
+
+
+ Add x-displacement position and values for Box valueset.
+
+
+
+
+ Defines the whisker length as a function of the inter-quartike range (IQR).
+
+
+
+
+ Controls the appearance of CustomBoxSeries box.
+
+
+
+
+ Use SampleValues property to get access to the values of Series.
+
+
+
+
+ Specifies the position of box series.
+
+
+
+
+ Defines the Pen to draw the whisker lines.
+
+
+
+
+ Defines the Pen to draw the median line.
+
+
+
+
+ Reconstructs the box plot from series data
+
+
+
+
+ Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Read from AdjacentPoint1 to get SampleValues lower adjacent point limit. Write to AdjacentPoint1 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from AdjacentPoint3 to get SampleValues upper adjacent point limit. Write to AdjacentPoint3 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from OuterFence3 to get SampleValues upper outer fence. Write to OuterFence3 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from OuterFence1 to get SampleValues lower outer fence. Write to OuterFence1 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from InnerFence1 to get SampleValues lower inner fence. Write to InnerFence1 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from InnerFence3 to get SampleValues upper inner fence. Write to InnerFence3 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from Quartile1 to get SampleValues first quartile. Write to Quartile1 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from Quartile3 to get SampleValues third quartile. Write to Quartile3 to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Read from Median to get SampleValues median value. Write to Median to override Series default calculating algorithm and use supplied value to construct box plot.
+
+
+
+
+ Set the UseCustomValues property to true if you want to override internal algorithm to construct a box plot.
+
+
+
+
+ Controls the appearance of the mid range of outer points.
+
+
+
+
+ Controls the appearance of the extreme range of outer points.
+
+
+
+
+ The Box Series plots a vertical box series.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ The Box Series plots an horizontal box series.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ CustomPolar Series.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs on the drawing of the series pointers.
+
+
+
+
+ The Bottom Axis is used as Angle axis.
+
+
+
+
+ Gets list of angle values for each polar point.
+
+
+
+
+ The Left Axis is used as Radius axis.
+
+
+
+
+ Gets list of radius values for each polar point.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the pixel Screen Vertical coordinate of the ValueIndex Series value.
+
+
+
+
+ Sets angle in degrees used to draw the dividing grid lines in anti-clockwise direction.
+
+
+
+
+ Sets Polar Back Brush.
+
+
+
+
+ Sets CicleLabel properties.
+
+
+
+
+ Sets the label font.
+
+
+
+
+ Enables/disables the display of the axis labels inside the circle area.
+
+
+
+
+ When true rotates the labels of a circular TeeChart series at an angle in line with the Radar/Polar circle at each Label point.
+
+
+
+
+ Determines the pen used to draw the outmost circle.
+
+
+
+
+ Displays of the circle labels in a clockwise direction.
+
+
+
+
+ Draws a Line between the last and first PolarSeries point coordinates.
+
+
+
+
+ Defines the distance between the CustomPolar circle and the labels.
+
+
+
+
+ Determines Pen used to draw the Line connecting PolarSeries points.
+
+
+
+
+ Pointer contains several properties to control the formatting attributes of Points like Pen, Brush, Draw3D, Visible, etc.
+
+
+
+
+ Determines the increment used to draw the ring grid lines.
+
+
+
+
+ Sets Transparency level from 0 to 100%.
+
+
+
+
+ Custom2DPolar is the ancestor of the WindRose Series and the Clock Series.
+
+
+
+
+ Box type for calculation
+
+
+
+ Use same Box value across all data range
+
+
+
+ Use period's Average True range to set Box value for entire chart
+
+
+
+
+ Price method used for calculation
+
+
+
+ Uses high in a rising market, low price when downward
+
+
+ Uses Close price for both up and downward movements
+
+
+
+ Use BoxType to change box sensitivity according to the data range.
+
+
+
+
+ When true, Chart will try to size grid to box size.
+
+
+
+
+ Darvas Series.
+
+ The Darvas Boxes were taken from the pages of Nicolas Darvas’ book, How I Made $2,000,000 in the Stock Market.
+ The boxes are used to normalize a trend. A "buy" signal would be indicated when the price of the stock exceeds the top of the box.
+ A "sell" signal would be indicated when the price of the stock falls below the bottom of the box. For more info on Darvas Boxes
+ check the following link: http://www.gerryco.com/tech/darvas.html .
+
+
+
+
+ Brush used to draw Darvas boxes.
+
+
+
+
+ Pen used to draw outline of Darvas boxes.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Donut series.
+
+
+
+
+ EquiVolume Series.
+
+
+
+
+ Box fill style for each data point
+
+
+
+ Fills Box with Up or Down Colour to Close value
+
+
+ Use Up and Down Colour to plot Box outline only
+
+
+
+ When Visible this pointer marks points where volume exceeds the previous point.
+ Default behaviour is an up triangle where the Close value is higher than the previous
+ point and a down triangle when Close is lower.
+
+
+
+
+ Style used to plot EquiVolume Bars
+
+
+
+
+ Gap in pixels between each EquiVolume Bar
+
+
+
+
+ Returns the pixel Screen Vertical coordinate of the ValueIndex Series value.
+
+
+
+
+ Gets and sets all event Volume values.
+
+
+
+
+ Adds new point with specified dateTime date and double volume, open, high, low and close values.
+
+ index of added point
+
+
+
+ Adds new point with specified double volume, open, high, low and close values.
+
+ index of added point
+
+
+
+ Adds new point with specified integer index and double volume, open, high, low and close values.
+
+ index of added point
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Crossbar of 'T' error displacement indicator displayed on the left.
+
+
+
+
+ Crossbar of 'T' error displacement indicator displayed on the right.
+
+
+
+
+ Crossbar of 'T' error displacement indicator displayed on the left and right.
+
+
+
+
+ Crossbar of 'T' error displacement indicator displayed on the top.
+
+
+
+
+ Crossbar of 'T' error displacement indicator displayed on the bottom.
+
+
+
+
+ Crossbar of 'T' error displacement indicator displayed on the top and bottom.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Defines the error width units as a percentage of the chart size.
+
+
+
+
+ Defines the error width units in pixels.
+
+
+
+
+ CustomErrorSeries Series.
+
+
+
+
+ Gets and sets the corresponding Error value for each Bar.
+
+
+
+
+ Defines Pen to draw Error "T" on top of Error Bars.
+
+
+
+
+ Defines the Error Series Style according to EErrorSeriesStyle.
+
+
+
+
+ Sets ErrorWidth in pixels or percentage of Bar width.
+
+
+
+
+ Determines the horizontal size of the Error "T".
+
+
+
+
+ Adds a new Error Bar point in selected color and with label.
+
+
+
+
+ Adds a new Error Bar point to the Series with label.
+
+
+
+
+ Adds a new Error Bar point to the Series.
+
+
+
+
+ Adds a new Error Bar point to the Series in selected color.
+
+
+
+
+ Adds a new Error Bar point to the Series.
+
+ index of added point
+
+
+
+ Displays an ErrorBar point ( BarIndex point ) using the Start and End pixel coordinates.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ ErrorSeries Series.
+
+
+
+
+ ErrorBar Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Defines Pen to draw Error "T" on left of Error Points.
+
+
+
+
+ Defines Pen to draw Error "T" on right of Error Points.
+
+
+
+
+ Defines Pen to draw Error "T" on top of Error Points.
+
+
+
+
+ Defines Pen to draw Error "T" on bottom of Error Points.
+
+
+
+
+ Defines Pen to draw Error "T" on front of Error 3D Points.
+
+
+
+
+ Defines Pen to draw Error "T" on back of Error 3D Points.
+
+
+
+
+ Gets and sets the corresponding Left Error value for each Point.
+
+
+
+
+ Gets and sets the corresponding Right Error value for each Point.
+
+
+
+
+ Gets and sets the corresponding Top Error value for each Point.
+
+
+
+
+ Gets and sets the corresponding Bottom Error value for each Point.
+
+
+
+
+ Sets ErrorSize in pixels or percentage of Pointer size.
+
+
+
+
+ Determines the size of the Error "T".
+
+
+
+
+ Gets and sets a value which when true uses the error Color relative to each point.
+ When false, the error Color is taken from the corresponding ChartPen.
+
+
+
+
+ Gets and sets the corresponding Format.
+
+
+
+
+ Gets and sets the corresponding Format.
+
+
+
+
+ Gets and sets the corresponding Front Error value for each Point.
+
+
+
+
+ Gets and sets the corresponding Back Error value for each Point.
+
+
+
+
+ Gets and sets the corresponding ChartErrors Errors
+
+
+
+
+ Adds a new Point with the four errors in selected color and with label.
+
+
+
+
+ Adds a new Point to the Series with the four errors and label.
+
+
+
+
+ Adds a new Point to the Series with the four errors.
+
+
+
+
+ Adds a new Point to the Series with the four errors in selected color.
+
+
+
+
+ Adds a new Point to the Series with the four errors.
+
+ index of added point
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ ErrorPoint Series.
+
+
+
+
+ Gets and sets the corresponding ChartErrors Errors
+
+
+
+
+ Adds a new Point3D with the six errors in selected color and with label.
+
+
+
+
+ Adds a new Point3D to the Series with the six errors and label.
+
+
+
+
+ Adds a new Point3D to the Series with the six errors.
+
+
+
+
+ Adds a new Point3D to the Series with the six errors in selected color.
+
+
+
+
+ Adds a new Point3D to the Series with the six errors.
+
+ index of added point
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ ErrorPoint3D Series.
+
+
+
+
+ When the series has several points that share the same X pixel position, but with different Y position, it will only display the first point.
+
+
+
+
+ Plots both the minimum and maximum Y that map to each X pixel.
+
+
+
+
+ The FastLine Series is an extremely simple Series component that draws its points as fast as possible.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Abstract Series class inherited by a number of TeeChart series styles.
+
+
+
+
+ Determines pen to draw the line connecting all points.
+
+
+
+
+ Funnel Series.
+
+
+
+
+ Funnel segment color if Opportunity value is greater than Quote value.
+
+
+
+
+ Funnel segment color if Opportunity value is within DifferenceLimit % below the Quote value.
+
+
+
+
+ Funnel segment color if Opportunity value is more than the DifferenceLimit % below the Quote value.
+
+
+
+
+ Define Pen to draw the Funnel Chart.
+
+
+
+
+ Defines Pen to draw FunnelSeries bounding polygon.
+
+
+
+
+ Defines Brush to fill Funnel Series.
+
+
+
+
+ Returns LegendString for LegendIndexth item.
+
+
+
+
+ Accesses the quote values of the FunnelSeries.
+
+
+
+
+ Sets the difference (expressed in Quote %) used to define the Funnel segment color.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Sorts added segments by QuoteValues in descending order.
+
+
+
+
+ Reconstructs FunnelSeries with every added point.
+
+
+
+
+ Uses all Quote and Opportunity values to reconstruct the Funnel chart.
+
+
+
+
+ Adds new Funnel segment to the Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gantt Series.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ For internal use.
+
+
+
+
+ Adds a new Gantt bar with start and end coordinates and color.
+
+
+
+
+ Adds a new Gantt bar with start and end coordinates to the Series.
+
+
+
+
+ Adds a new Gantt bar with start and end coordinates and label.
+
+
+
+
+ Adds a new Gantt bar with start and end coordinates, label and color.
+
+
+
+
+ MultiDimensional array to store Multiple NextTasks, with the indices being start and end task index and the value -1.
+
+
+
+
+ Add any number of end task indexes to a particular start task index.
+
+
+
+
+ true is Series source is Gantt
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Gauges Series OnChange Event Handler
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Gauge hand drawn as a Line.
+
+
+
+
+ Gauge hand drawn as a triangular pointer.
+
+
+
+
+ Gauges Series.
+
+
+
+
+ Called when the Gauge property is changed.
+
+
+
+
+ Line pen for Gauge.
+
+
+
+
+ Style of Gauge hand.
+
+
+
+
+ Controls the size in degrees for the gauge axis.
+
+
+
+
+ The amount in pixels that define a gap between the gauge axis and the end of the gauge arrow line.
+
+
+
+
+ Gets or sets the position of gauge arrow line.
+
+
+
+
+ Gets or sets the minimum value for the gauge.
+
+
+
+
+ Gets or sets the maximum value for the gauge.
+
+
+
+
+ Returns a sub-object with properties that control the appearance of a shape at the middle of gauge.
+
+
+
+
+ Returns a sub-object with properties that control the appearance of a shape at the end of the gauge arrow.
+
+
+
+
+ Set to a value bigger than zero to display the axis minor ticks (ticks inside normal ticks) displaced from the axis line the specified number of pixels.
+
+
+
+
+ Defines where to display gauge axis labels.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ HighLow series.
+
+
+
+
+ Adds a new High and Low value to a HighLow series.
+
+
+
+
+ Adds a new High and Low value to a HighLow series and color.
+
+
+
+
+ Adds a new High and Low value to a HighLow series and label.
+
+
+
+
+ Adds a new High and Low value to a HighLow series with label and color.
+
+
+
+
+ Calculates if any point is at XY position.
+
+ Point index
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ true if Series source is HighLow
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Histogram Series.
+
+
+
+
+ HorizArea series.
+
+
+
+
+ Horizontal Bar Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Defines the percent of bar Height, from 0 to 100.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the ValueIndex Series value.
+
+
+
+
+ The vertical Bar position is the "real" Y pos plus the Barwidth by our BarSeries order.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ HorizHistogram series.
+
+
+
+
+ Horizontal Line Series.
+
+
+
+
+ ImageBar Series.
+
+
+
+
+ Internal use. Draws Bar
+
+
+
+
+ Iso-Surface 3D Series.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Variables describe point characteristics when plotted.
+
+
+
+
+ Used with event triggered when Kagi points are plotted.
+
+
+
+
+
+ The Kagi financial chart.
+ Kagi charts, at first glance, look like swing charts. Like swing charts, they have no time axis
+ and are made up of a series of vertical lines, however in the case of kagi charts, the vertical
+ lines are based solely on the action of closing prices, not a bar's high and low prices. Another
+ difference is that the thickness of a kagi chart line changes when closing prices penetrate the
+ previous column top or bottom.
+ Construction of Kagi Chart:
+ Choose a reversal amount - absolute or relative value.
+ Note the first closing price in your data. This is called the BasePrice.
+ If the closing price of Day 2 is greater than the closing price of Day 1 (the base price), use UpSwing stype to draw vertical line upwards from the closing price of Day 1 to the closing price of Day 2.
+ If the closing price of Day 2 is less than the closing price of Day 1, use DownPen style to draw vertical line downwards from the closing price of Day 1 to the closing price of Day 2.
+ If the closing price of Day 2 is equal to the closing price of Day 1, do nothing. Instead, wait until the end of Day 3, and compare this price with the base price.
+ If the closing price continues to rise (or fall), we keep moving the kagi chart up (or down) to the close of each day, regardless of how much or how little it moves.
+ If the closing price moves in the opposite direction by less than a predetermined number of cents, the reversal amount, we ignore the small move and do nothing to our chart.
+ If the kagi line has been moving upwards, and the closing price has fallen by more than the reversal amount, we draw a short horizontal line, called the 'inflection line', then a new line downwards, to the lower close of that day.
+ If the kagi line has been moving downwards, and the closing price has risen by more than the reversal amount, we draw an inflection line, then a new line upwards, to the higher close of that day.
+ Vertical drawing pen style is defined by the following rules:
+ If a DownSwing line is extended beyond the previous swing high, pen style is change to UpSwing penbeyond that point.
+ An UpSwing pen changes to DownSwing pen when the UpSwing line moves below the previous swing low.
+
+
+
+
+ Event triggers on Kagi point plot. Can be used to monitor reversals.
+
+
+
+
+ Reversal point
+
+ Current point
+ Stores last two previous points in Kagi chart.
+ True, if current point is 'reversal point'.
+
+
+
+ Reversal ammount (percentage or absolute value)
+
+
+
+
+ If false, reversal amount is treated as percentage, otherwise as absolute value.
+
+
+
+
+ Controls the appearance of upswing lines.
+
+
+
+
+ Controls the appearance of downswing lines.
+
+
+
+
+ The base price i.e. first closing value.
+
+
+
+
+ Defines sell symbol.
+
+
+
+
+ Defines buy symbol.
+
+
+
+
+ KnobGauge Series.
+
+
+
+
+ Gets and sets whether not the entire Gauge Axis is displayed outside of the bounding circular area.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets and sets the brush which draws the highlight on the knob.
+
+
+
+
+ Returns the Knobgauge centrepoint. Read-only.
+
+
+
+
+ When true, Knobgauge centre responds to mousedragging to modify value.
+
+
+
+
+ Line Series.
+
+
+
+
+ Determines the Line Gradient.
+
+
+
+
+ VerticalLinear Gauge Series.
+
+
+
+
+ Linear Gauge Series.
+
+
+
+
+ An array of Colors defining a custom gradient color scheme.
+
+
+
+
+ Set true to use the ValueColorPalette and so define a custom gradient scheme for the LinearGauge hand.
+
+
+
+
+ A visible marker for the maximum value reached by the LinearGauge.
+
+
+
+
+ Brush characteristics of the area behind the value, or hand, pointer.
+
+
+
+
+ LinePoint series.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ ValueLists is a collection of objects.
+
+
+
+
+ The Owner property returns the Map Series that owns the PolygonList.
+
+
+
+
+ Returns True if the polygon fits inside the available Chart ChartRect rectangle.
+
+
+
+
+ Returns the rectangle in pixels that corresponds to the maximum space used by the polygon.
+
+
+
+
+ Use the Points property to have access to the co-ordinates PointList which determine the boundary of the polygon.
+
+
+
+
+ The GetPoints function returns the coordinates of all Points of the Polygon.
+
+
+
+
+ The Brush property determines the kind of brush used to fill the polygon interior.
+
+
+
+
+ When Closed is True, the polygon is displayed and filled using the polygon Pen and Brush properties.
+ When Closed is False, a poly-line is displayed using the Pen property.
+
+
+
+
+ To have a polygon to use the same Pen as its Parentseries, set ParentPen to True. If ParentPen is False, the polygon uses its own Pen property.
+
+
+
+
+ Set Color property to specify the color to be used to fill the polygon.
+ Or to be used to draw the Brush pattern.
+
+
+
+
+ The Gradient property determines the kind of polygon's interior gradient effect.
+
+
+
+
+ To have a polygon to use the same Brush as its parentseries (Map Series), set ParentBrush to True. If ParentBrush is False, the polygon uses its own Brush property.
+
+
+
+
+ Use Z property to specify the position on the Z-axis of the 3D Map Series.
+ In Chart terms this will set a Z plane position, a lower value of Z will be drawn in front of a
+ higher Z value. Map Series is intended to be viewed in 2D and the Z value is provided to be used as
+ a value for a Polygon (ie. for demographic maps). If colour Palette is used then the Z value will
+ set the Polygon colour.
+
+
+
+
+ Use Add method to add a boundary coordinate to the polygon. The polygon will be drawn in sequential order of the coordinates. (ie. from point 1 (X0,Y0) to point 2 (X1,Y1) to point 3 (X2,Y2), ....)
+
+
+
+
+ Use Add method to add a boundary coordinate to the polygon. The polygon will be drawn in sequential order of the coordinates. (ie. from point 1 (X0,Y0) to point 2 (X1,Y1) to point 3 (X2,Y2), ....)
+
+
+
+
+ Use Text to specify the text string that labels the polygon
+
+
+
+
+ Set Pen property to specify the Pen to be used to draw the border of the polygon.
+
+
+
+
+ Amount of opacity used to fill the polygon interior.
+ 100 means fully transparent, 0 means fully opaque.
+
+
+
+
+ Polygon Series is a descendant of .
+ Use Polygon Series to define the shape of the Polygons to be drawn by the Map Series.
+ A Polygon Series contains the co-ordinates of the Points which define the boundary of a Polygon.
+
+ PolygonSeries stores the point Valuelists and individual characteristics of each Map Series 'sub' Series (each Polygon is a Chart Series).
+ Map Series hides the need treat each Polygon as a Series by treating the Polygons as an internal collection of Series.
+
+
+
+
+ Map series.
+
+
+
+
+ Sets global Map series transparency.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Map Series.
+
+
+
+
+ Default array property in Map series to make easier to obtain a Map polygon object:
+
+
+
+
+ Returns a list of Polygon objects.
+ Each polygon object in the list refers to a "shape" in the Map series.
+
+
+
+
+ Adds a new shape to the Map Series and returns the index of the in the collection.
+
+
+
+
+ Adds a new shape to the Map Series and returns the index of the in the collection.
+
+
+
+
+ Adds a new shape to the Map Series.
+
+
+
+
+ Numeric Gauge Series.
+
+
+
+
+ Gets and sets the Marker object which defines the "Value" of the NumericGauge. This
+ allows access to Font, Brush and Pen characteristics of the shape.
+
+
+
+
+ Gets and sets the Marker object which defines the "Units", e.g. MHz, of the NumericGauge. This
+ allows access to Font, Brush and Pen characteristics of the shape.
+
+
+
+
+ Gets and sets the Marker object which defines the "Text", e.g. FREQ, of the NumericGauge. This
+ allows access to Font, Brush and Pen characteristics of the shape.
+
+
+
+
+ The style of digital font.
+
+
+
+
+ The collection of Numeric gauge markers for displaying text or numbers.
+
+
+
+
+ Defines the type of connecting lines between organizational chart items.
+
+
+
+
+ Draw connection as vertical and horizontal line.
+
+
+
+
+ Draw connection as diagonal line.
+
+
+
+
+ Base shape class for oragnizational chart item.
+
+
+
+
+ OrgItem list
+
+
+
+
+ Organizational Chart.
+
+
+
+
+ Organizational chart item.
+
+ Index of item in Items collection.
+ Organizational chart item.
+
+
+
+ Organizational chart items.
+
+
+
+
+ Default format for organizational chart items.
+
+
+
+
+ How the connecting lines are drawn.
+
+
+
+
+ Vertical and horizontal spacing between organizational chart items.
+
+
+
+
+ Bounding rectangle.
+
+ Minimum rectangle enclosing all items.
+
+
+
+ All item drawing is done in this class
+
+
+
+
+ Describes the possible values of the Style property of the class.
+
+
+
+
+ No "Other" slice is generated. (default)
+
+
+
+
+ Slices with values below a percentage are grouped.
+
+
+
+
+ Slices with values below a value are grouped.
+
+
+
+
+ Describes the possible values of the property of the class.
+
+
+
+
+ Multiple Pie series are displayed using an automatically calculated chart space portion. (default)
+
+
+
+
+ Multiple Pie series are displayed using custom manual ChartRect positions, or overlapped.
+
+
+
+
+ Pie Series.
+
+
+
+
+ Internal structure used by Pie series to store each pie slice angle.
+
+
+
+
+ Returns true if angle is within the pie slice.
+
+
+
+
+ Customized pie series marks with additional properties.
+
+
+
+
+ Pie series uses this class in its property.
+
+
+
+
+ Sets the Color of the OtherSlice.
+
+
+
+
+ Sets the properties of the PieOtherSlice Legend.
+
+ This sample shows how to use the PieOtherSlice Legend property:
+
+
+ pie1.OtherSlice.Style=Steema.TeeChart.Styles.PieOtherStyles.BelowValue;
+ pie1.OtherSlice.Value=10;
+ pie1.OtherSlice.Text = "Other";
+ pie1.OtherSlice.Legend.Visible = true;
+ pie1.OtherSlice.Legend.CustomPosition = true;
+ pie1.OtherSlice.Legend.Left = 350;
+ pie1.OtherSlice.Legend.Top = 150;
+
+
+
+
+
+ Title for otherSlice.
+
+
+
+
+ Value (value or percentage) for Otherslice grouping.
+
+
+
+
+ Sets either value or percentage to group the 'other' Pie slice.
+
+
+
+
+ Pie series uses this class in its property.
+
+
+
+
+ List to hold percents of exploding effect, one per each Pie slice.
+
+
+
+
+ Stores the Pie slice values.
+
+
+
+
+ Draws points with different preset Colors.
+
+
+
+
+ Total angle in degrees (0 to 360) for all slices.
+
+
+
+
+ Darkens side of 3D pie section to add depth.
+
+
+
+
+ Sets Transparency level from 0 to 100%.
+
+
+
+
+ Gets and sets the EdgeStyle of the bevel.
+
+
+
+
+ Gets and sets the bevel as a percentage of the pie's depth.
+
+
+
+
+ Displaces the biggest slice from centre by value set.
+
+
+
+
+ Accesses the OtherSlice properties.
+
+
+
+
+ Line pen for Pie.
+
+
+
+
+ Brush fill for PieSeries.
+
+
+
+
+ Defines the offset shadow of the PieSeries.
+
+
+
+
+ Fills Pie Sectors with different Brush pattern styles.
+
+
+
+
+ If true, marks will be displayed trying to not overlap one to each other.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Sets automatic Pie positioning when multiple Pie series exist.
+
+
+
+
+ Returns true if indexed Slice belongs to the Otherslice
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the ValueIndex Series value.
+
+
+
+
+ Accesses the properties for exploding any Pie slice.
+
+
+
+
+ Use SliceHeight array property to specify a different height for each pie slice.
+
+
+
+
+ Point Series.
+
+
+
+
+ Sets the Pen for the Point connecting Lines.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Point3D Series.
+ Each point has XYZ coordinates.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Each point in a PointSeries is drawn using the Pointer properties.
+
+
+
+
+ Sets the Pen for the Point3D connecting Lines.
+
+
+
+
+ Sets the Pen for the Point3D connecting Lines.
+
+
+
+
+ Sets the Depth of each 3DPoint to the value of DepthSize.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns MaxZValue.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Draws the label when set to true.
+
+
+
+
+ PointFigure Series.
+
+
+
+
+
+ When true, shows Month changes in data columns.
+
+
+
+
+ When true, TeeChart will store box stats (location, column, value and UP/Down).
+ When activating this property please note that some effect on performance will
+ take place.
+
+
+
+
+ Pricing method used when calculating box movement.
+
+
+
+
+ Font used to write the Month-Change labels is visible.
+
+
+
+
+
+ Default action type for the Hotspot Map.
+
+
+
+
+ Show a Mark on Mouseover according to .
+
+
+
+
+ Connect to URL. Point URLs may be individually set in the Hotspot event.
+
+
+ private void hotspot1_GetHTMLMap(Steema.TeeChart.Tools.Hotspot sender, Steema.TeeChart.Tools.SeriesHotspotEventArgs e)
+ {
+
+ e.PointPolygon.Title="My Point Index: "+e.PointPolygon.ValueIndex.ToString();
+
+ e.PointPolygon.HREF="http://www.steema.com/cgi-bin/examplescript?var1="+e.PointPolygon.ValueIndex.ToString();
+
+
+ }
+
+
+
+
+ Run page based Javascript functions
+
+
+
+
+ List of the Polygons that describe the Point co-ordinates of the Series.
+
+
+
+
+ The Series property returns the Map Series that owns the PolygonList.
+
+
+
+
+ Constructor
+
+
+
+
+ Constructor
+
+ Series for which to create MapRegion.
+
+
+
+ Constructor
+
+ Hotspot tool to which to apply MapRegion.
+
+
+
+ Internal use. Get the Series' PolygonList
+
+
+
+
+ Returns list of Polygons of Points of the MapRegions' current Series.
+
+
+
+
+ Set the principal action for the Map Areas. The action may be overridden using the Hotspot event
+ (see and
+ arguments)
+
+
+
+
+ Returns the defined Map for the Chart.
+
+ Default mouseover hint style.
+
+
+
+
+ Sets the co-ordinate type of the Map Area.
+
+
+
+ Polygon. Takes three or more pairs of coordinates denoting a polygonal region.
+
+
+
+
+ ///Rect. Takes four coordinates: x1, y1, x2, and y2.
+
+
+
+
+ Circle. Takes three coordinates: centerx, centery, and radius.
+
+
+
+
+ Class stores definition and Map Area attributes of a Series point.
+
+
+
+
+ Constructor
+
+ Index of Series Point.
+ Point Co-ordinate list.
+
+
+
+
+ Defines whether to include Polygon in HTML Area map.
+ Polygons outside of the Chart Rectangle are automatically hidden.
+
+
+
+
+
+ Series Point Value Index associated with Polygon.
+
+
+
+
+ Co-ordinate list of the point polygon.
+
+
+
+
+ Sets the co-ordinate type of the Map Area
+
+
+ Rect Rectangle. Takes four coordinates: x1, y1, x2, and y2.
+ Circle Circle. Takes three coordinates: centerx, centery, and radius.
+ Poly Polygon. Takes three or more pairs of coordinates denoting a polygonal region.
+
+
+
+
+ String used to denote a URL to which to associate an area mouse action.
+ The string may be overriden in the Hotspot event (see arguments)
+ to create a parameter sensitive URL suitable for Point drilldown.
+
+
+
+
+ Default Title content is set by the Hotspot tool
+ property. When is set to 'Mark' the Title is
+ displayed according to Style when the mouse is passed over a Series point. For new Chart content
+ sensitive data. The content may be overridden in the Hotspot event
+ (see arguments) and may be set alongside
+ other MapAction actions.
+
+
+ private void hotspot1_GetHTMLMap(Steema.TeeChart.Tools.Hotspot sender, Steema.TeeChart.Tools.SeriesHotspotEventArgs e)
+ {
+
+ e.PointPolygon.Title="My Point Index: "+e.PointPolygon.ValueIndex.ToString();
+
+ e.PointPolygon.HREF="http://www.steema.com/cgi-bin/examplescript?var1="+e.PointPolygon.ValueIndex.ToString();
+
+
+ }
+
+
+
+
+ This string may be globally set for the Chart Map or may be modified in the Hotspot event
+ (see and
+ arguments) to actuate differentially
+ for each Series point.
+
+
+ private void hotspot1_GetHTMLMap(Steema.TeeChart.Tools.Hotspot sender, Steema.TeeChart.Tools.SeriesHotspotEventArgs e)
+ {
+
+
+
+
+ e.PointPolygon.Attributes="onClick=\"Javascript:DrillDownFunc("+e.Series.ToString()+", "
+ +e.PointPolygon.ValueIndex.ToString()+")\"";
+ }
+
+
+
+
+ Polar Series.
+
+
+
+
+ Polar Bar Series.
+
+
+
+
+ Defines palette properties.
+
+
+
+
+ Access the Color Palette list
+
+
+
+
+ Polar Grid Series.
+
+ Displays an array of values as a circular grid of cells.
+
+
+
+ Add new cell to polar grid series.
+
+ Cell sector.
+ Cell track.
+ Value for Cell[sector,track].
+ Added cell index.
+
+
+
+ Polar Grid cell values.
+
+
+
+
+ If true, cells are centered around angles.
+
+
+
+
+ Defines the number of sectors in polar grid.
+
+
+
+
+ Defines number of tracks in polar grid.
+
+
+
+
+ Access polar grid color palette properties.
+
+
+
+
+ Pyramid Series.
+
+
+
+
+ Sets size of Pyramid base relative to Chart Axis bounding width.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Sets Brush characteristics for the Pyramid Series.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns whether the Series needs to draw points in ascending/descending order.
+
+
+
+
+ Returns the Maximum Value of the Series X Values List.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series X Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Radar Series.
+
+
+
+
+ Variables describe brick characteristics when plotted.
+
+
+
+
+ Used with event triggered when Renko bricks are plotted.
+
+
+
+
+
+
+ The Renko chart financial indicator.
+
+ The Renko chart is a trend following technique. It got its name from a Japanese word "renga" meaning bricks.
+ In Renko chart line brick is drawn in the direction of the prior move only if prices move by a minimum amount
+ which is equivalent to the box size that are always equal in size.
+ Renko charts are always based on the closing prices. Renko bricks are drawn after comparing, that day’s close
+ with the previous brick (high or low). A "box size" which determines the minimum price change to show is specified.
+
+
+
+
+ Event triggers on Renko Brick plot. Can be used to monitor reversals.
+
+
+
+
+ Calculates if any point is at XY position.
+
+ Point index
+
+
+
+ Returns corresponding Point value suitable for displaying at Series Marks.
+
+
+
+
+ Number of bricks
+
+ Current value
+ Previous value
+ Number of bricks
+
+
+
+ Seems to work fine ... but better check it so it doesn't break something else.
+
+
+
+
+ Color for upward trend bricks.
+
+
+
+
+ Color for downward trend bricks.
+
+
+
+
+ Access characteristics of the Volume data.
+
+ VData is a sub-series (of type Volume) of the Renko Series.
+
+
+
+
+ Gets and sets all event Volume values.
+
+
+
+
+ Adds new point with specified dateTime date and double volume, open, high, low and close values.
+
+ index of added point
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Position relative to Chart Panel. 0,0 is Panel Left, Top.
+
+
+
+
+ Position in Axis units.
+
+
+
+
+ Use Left,Top (X0,Y0) to set the Axis origin in Axis units. Right, Bottom sets width and height in Pixels.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ The shape is a rectangle.
+
+
+
+
+ The shape is a circle.
+
+
+
+
+ The shape is a vertical line.
+
+
+
+
+ The shape is a horizontal line.
+
+
+
+
+ The shape is a triangle.
+
+
+
+
+ The shape is an inverted triangle.
+
+
+
+
+ The shape is a line.
+
+
+
+
+ The shape is a diamond.
+
+
+
+
+ The shape is a cube.
+
+
+
+
+ The shape is a cross.
+
+
+
+
+ The shape is a diagonal cross.
+
+
+
+
+ The shape is a star.
+
+
+
+
+ The shape is a pyramid.
+
+
+
+
+ The shape is an inverted pyramid.
+
+
+
+
+ The shape is an arc.
+
+
+
+
+ The shape is an arc.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Text is vertically aligned to the top of the shape.
+
+
+
+
+ Text is vertically aligned to the centre of the shape.
+
+
+
+
+ Text is vertically aligned to the bottom of the shape.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Text is horizontally aligned to the left of the shape.
+
+
+
+
+ Text is horizontally aligned to the centre of the shape.
+
+
+
+
+ Text is horizontally aligned to the right of the shape.
+
+
+
+
+ Shape Series.
+
+
+
+
+ Coordinate used to define the englobing ShapeSeries rectangle.
+
+
+
+
+ Coordinate used to define the englobing ShapeSeries rectangle.
+
+
+
+
+ Coordinate used to define the englobing ShapeSeries rectangle.
+
+
+
+
+ Coordinate used to define the englobing ShapeSeries rectangle.
+
+
+
+
+ Defines how a TChartShape component appears on a Chart.
+
+
+
+
+ Gets or sets the StartAngle of the Arc.
+
+
+
+
+ Gets or sets the EndAngle of the Arc.
+
+
+
+
+ Gets or sets the Offset applied to the Parallelogram shape.
+
+
+
+
+ Sets the vertical alignment of Text within a TChartShape Series shape.
+
+
+
+
+ Horizontally aligns the text.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ Determines the font attributes used to output ShapeSeries.
+
+
+
+
+ Defines the brush used to fill shape background.
+
+
+
+
+ Defines pen to draw Series Shape.
+
+
+
+
+ Gets Gradient fill characteristics for the ShapeSeries Shape.
+
+
+
+
+ Displays customized strings inside Shapes.
+
+
+
+
+ Allows Shape Brush attributes to fill the interior of the Shape.
+
+
+
+
+
+
+
+
+
+ Returns false if the Value parameter is the same as Self.
+
+
+
+
+
+
+
+
+
+ Smith Series.
+
+
+
+
+ Defines pen to draw SmithSeries Chart.
+
+
+
+
+ Defines pen to draw SmithSeries Chart.
+
+
+
+
+ Defines Brush to fill Chart.
+
+
+
+
+ Defines Pen to draw CCircles of the Smith Series.
+
+
+
+
+ Defines Pen to draw RCircles of the Smith Series.
+
+
+
+
+ Defines Pen to draw external Circle of the Smith Series.
+
+
+
+
+ Shows/hides the constant reactance labels.
+
+
+
+
+ Shows/hides the constant resistance labels.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ Returns the pixel Screen Horizontal coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the pixel Screen Vertical coordinate of the ValueIndex Series value.
+
+
+
+
+ Returns the ValueIndex of the "clicked" point in the Series.
+
+
+
+
+ xCircle labels font.
+
+
+
+
+ rCircle labels font.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Surface 3D Series.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Determine the cell Colors of a Surface Series.
+
+
+
+
+ Determines the Brush to fill the sides of a Surface Series.
+
+
+
+
+ Sets Pen to draw valuelines.
+
+
+
+
+
+
+
+
+
+ Enables/disables the display as a waterfall.
+
+
+
+
+ Shows Surface polygons as grid or wire frame when true.
+
+
+
+
+ Sets SurfaceSeries as a grid of dots (pixels).
+
+
+
+
+
+
+
+
+
+ The DrawTag event.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Adds a tag with given text and value (frequency).
+
+
+
+
+ Returns the font size of the tag of the specified valueindex.
+
+
+
+
+ Gets and sets the string which filters the tags drawn.
+
+
+
+
+ Gets and sets the font characteristics of the tags.
+
+
+
+
+ Gets and sets the gradient.
+
+
+
+
+ Gets and sets the percentage separation between tags.
+
+
+
+
+ Ternary Series.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs when a series pointer is clicked.
+
+
+
+
+ The Delegate for the event.
+
+
+
+
+ Occurs on the drawing of the series pointers.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Defines Tower series points as cubes.
+
+
+
+
+ Defines Tower series points as rectangles.
+
+
+
+
+ Defines Tower series points as covers.
+
+
+
+
+ Defines Tower series points as cylinders.
+
+
+
+
+ Defines Tower series points as arrows.
+
+
+
+
+ Defines Tower series points as cones.
+
+
+
+
+ Defines Tower series points as pyramids.
+
+
+
+
+ Tower Series. The Tower Series is designed to use a 0 or 1 based integer grid index. X and Z values should be sequential values of 1.
+
+
+
+
+ Gets and sets whether the Tower series should be stacked.
+
+
+
+
+ Returns the Maximum Value of the Series Y Values List.
+
+
+
+
+ Returns the Minimum Value of the Series Y Values List.
+
+
+
+
+ TreeMap Series
+
+
+
+
+ TriSurface Series.
+
+
+
+
+ Accesses the TChartHiddenPen object representing the color and style of TriSurface border.
+
+
+
+
+ Deletes all TriSurfaceSeries values.
+
+
+
+
+ Hides constructed tiangles
+
+
+
+
+ Vector3D Series.
+
+
+
+
+ The arrow height in pixels.
+
+
+
+
+ The arrow width in pixels.
+
+
+
+
+ List of values representing the end X coordinates of vector lines.
+
+
+
+
+ List of values representing the end Y coordinates of vector lines.
+
+
+
+
+ List of values representing the end Z coordinates of vector lines.
+
+
+
+
+ When Visible, this pen is used to display arrows at the end coordinate of vector lines.
+
+
+
+
+ When Visible, this pen is used to display arrows at the start coordinate of vector lines.
+
+
+
+
+ Adds a new 3D vector line to series from (x0, y0, z0) to (x1, y1, z1) as axis values.
+
+
+
+
+ Adds a new 3D vector line to series from (x0, y0, z0) to (x1, y1, z1) as axis values with a specified text and color.
+
+
+
+
+ Returns the biggest value in the Series XValues array.
+
+
+
+
+ Returns the smallest value in the Series XValues array.
+
+
+
+
+ Returns the biggest value in the Series YValues array.
+
+
+
+
+ Returns the smallest value in the Series YValues array.
+
+
+
+
+ Returns the biggest value in the Series ZValues array.
+
+
+
+
+ Returns the smallest value in the Series ZValues array.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Volume Series.
+
+
+
+
+ Enables/Disables the Y value that defines the bottom position for Volume points.
+
+
+
+
+ Defines the YValue used as the origin for the specified Volume Series.
+
+
+
+
+ Expands axes to fit volume lines.
+
+
+
+
+ Called internally. Draws the "ValueIndex" point of the Series.
+
+
+
+
+ VolumePipe Series.
+
+
+
+
+ Sets LinePen characteristics for the VolumePipe Series.
+
+
+
+
+ Sets LinePen color to each Point Color.
+
+
+
+
+ Sets Brush characteristics for the VolumePipe Series.
+
+
+
+
+ Sets the Cone percentage.
+
+
+
+
+ Sets the separation between Cone segments.
+
+
+
+
+ The Waterfall series draws vertical "slices", one for each Z row of the equivalent surface.
+
+
+
+
+ WindRose Series.
+
+
+
+
+ World Map series.
+
+
+
+
+
+
+ A derived WinForms Panel class to hold a Series gallery.
+
+
+
+
+ The number of Rows in Gallery panel.
+
+
+
+
+ The number of Columns in Gallery panel.
+
+
+
+
+ The mouse cursor for Series styles not allowed (disabled).
+
+
+
+
+ Determines if Gallery panel will show Chart axis or not when maximized.
+
+
+
+
+ Controls wether Functions tab is visible or not.
+
+
+
+
+ Internal Chart class used to display at Gallery panel.
+
+
+
+
+ The color used to change selected Chart's Gradient.
+
+
+
+
+ Creates a new Gallery dialog.
+
+ True to show anti-aliased charts at gallery
+
+
+
+ Gets or sets if GalleryPanel will display a sub-gallery when clicking left-bottom corner small arrow.
+
+
+
+
+ Event called when a Chart is selected and double-clicked at Gallery.
+
+
+
+
+ Event called when a Series sub-style is selected at sub-Gallery.
+
+
+
+
+ Event called when a Chart is selected (clicked) at Gallery.
+
+
+
+
+ Internal use. Lists Gallery Charts
+
+
+
+
+ Sets the chart selected from the SubGallery.
+
+
+
+
+ List of Charts showing at Gallery panel.
+
+
+
+
+ Returns currently selected Function style, or null if any.
+
+
+
+
+ The Index of the subchart selected.
+
+
+
+
+ Additional Chart init arguments
+
+
+
+
+ The Imports class holds the underlying functionality for Chartimports
+
+
+
+
+ Default constructor
+
+
+
+
+ Constructor for Imports with Chart
+
+
+
+
+ Access Template import
+
+
+
+
+ Access Template import
+
+
+
+
+ TeeChart internal use. Virtual Deserialize method
+
+
+
+
+ Internal use. Loads saved Chart.
+
+
+
+
+ Shows Import dialogue
+
+
+
+
+ Theme xml file import
+
+
+
+
+ Default extension for imported template file
+
+
+
+
+ Load Template from Stream
+
+
+
+
+ Load TeeChart theme from a URL
+
+ string eg. "http://www.steema.com/theme.xml"
+
+
+
+ Loads a Chart theme from file
+
+ string eg. [C#] "c:\\myCharts\\myTheme.xml" or @"c:\myCharts\myTheme.xml"
+
+
+
+ Show Import file selection dialogue.
+
+
+
+
+ Chart template, native format, import
+
+
+
+
+ Default extension for imported template file
+
+
+
+
+ Use this Type name set to the name of your class derived from Chart
+ when serialising it and supporting custom elements.
+
+
+
+ MyChart myChart = new MyChart();
+ myChart.Import.Template.CustomType = myChart.ToString();
+ myChart = (MyChart)(myChart.Import.Template.Load(@"c:\output\customChart.ten"));
+
+
+
+
+
+
+
+ Load Template from Stream
+
+
+
+
+ Load TeeChart Template from a URL
+
+ string eg. "http://www.steema.com/demo.ten"
+
+
+
+ Loads a Chart template from file
+
+ string eg. [C#] "c:\\myCharts\\myChart.ten" or @"c:\myCharts\myChart.ten"
+
+
+
+ Show Import file selection dialogue.
+
+
+
+
+ Describes the position of the Legend's color rectangles.
+
+
+
+
+ Defines the left positioning of the Legend's color rectangles.
+
+
+
+
+ Defines the right positioning of the Legend's color rectangles.
+
+
+
+
+ Describes the units in which to define the size of the Legend's color rectangles.
+
+
+
+
+ Defines the units as a Percentage of the Legend width.
+
+
+
+
+ Defines the units as Pixels.
+
+
+
+
+ Specialized List class to hold Legend items of type .
+
+
+
+
+ When True, legend does not automatically calculate the legend items to be displayed, and it uses the Items property instead.
+
+
+
+
+ Gets or sets whether legend items positioning is automatically calculated when is set to true.
+
+
+
+
+ Access indexed Label characteristics
+
+
+
+
+ The LegendItem class describes characteristics of each item that are placed on the Legend.
+
+
+
+
+ Gets or sets a Rectangle for the legend item symbol.
+
+
+
+
+ Gets and sets the Text alignment options
+
+
+
+
+ Gets and sets the Left position of the referenced legend item.
+
+
+
+
+ Gets and sets the Top position of the referenced legend item.
+
+
+
+
+ Gets or sets a Text for the referenced legend item.
+
+
+
+
+ Returns the text displayed at Legend item in second column.
+
+
+
+
+ Legend item symbol characteristics
+
+
+
+
+ Defines the width of the color rectangles (symbols).
+
+
+
+
+ Sets the position of the Legend color rectangles.
+
+
+
+
+ Defines the Width units for the width of Symbol.
+
+
+
+
+ Adjoins the different legend rectangles when true.
+
+
+
+
+ Uses series pen properties to draw a border around the coloured box legend symbol, when true.
+
+
+
+
+ Pen used to draw a border around the color box legend symbols.
+
+
+
+
+ When true, the legend symbol will be resized to square shaped.
+
+
+
+
+ Shows or hides Legend symbols.
+
+
+
+
+ Sets a shadow around the Legend symbols.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Legend draws Series Titles if there's more than one Series in the TChart.
+
+
+
+
+ Legend draws the Series Titles even if there's only one Series in the chart.
+
+
+
+
+ Legend draws the first Active Series' values.
+
+
+
+
+ Legend draws the Last Value of each Active Series (similar to Series).
+
+
+
+
+ Legend draws a number of the Palette entries defined by .
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Legend Text is defined as the series point labels.
+
+
+
+
+ Legend Text is defined as the series values on the left of the series point labels.
+
+
+
+
+ Legend Text is defined as the series values on the right of the series point labels.
+
+
+
+
+ Legend Text is defined as the series values as a percentage of the total of series values on the left of the series point labels.
+
+
+
+
+ Legend Text is defined as the series values as a percentage of the total of series values on the right of the series point labels.
+
+
+
+
+ Legend Text is defined as the xvalues of the series.
+
+
+
+
+ Legend Text is defined as the series value.
+
+
+
+
+ Legend Text is defined as the series values as a percentage of the total of series values
+
+
+
+
+ Legend Text is defined as xvalues of the series and the series values.
+
+
+
+
+ Legend Text is defined as xvalues of the series and the series values as a percentage of the total of series values.
+
+
+
+
+ Describes the possible values of the property
+
+
+
+
+ Aligns the legend to the left of the TChart.
+
+
+
+
+ Aligns the legend to the right of the TChart.
+
+
+
+
+ Aligns the legend to the top of the TChart.
+
+
+
+
+ Aligns the legend to the bottom of the TChart.
+
+
+
+
+ Access to all Chart Legend characteristics
+
+
+
+
+ Determines how Legend text items will be formatted.
+
+
+
+
+ Determine which series is used as data for the Legend entries.
+
+
+
+
+ Enables/disables the display of Legend check boxes.
+
+
+
+
+ Legend shows only the current page items when the Chart is divided into pages.
+
+
+
+
+ Sets the font color of the legend text to that of the Series color, or not.
+
+
+
+
+ Pen attributes used to draw lines separating Legend items.
+
+
+
+
+ Gets or sets whether the Legend is draw in front of or behind the rest of the Chart's elements.
+
+
+
+
+ Sets the width and position of the color rectangle associated with each Legend item.
+
+
+
+
+ When True, draws the Legend items in opposite direction.
+
+
+
+
+ The Alignment property defines the Legend position.
+
+
+
+
+ Defines which is the first Legend item displayed
+
+
+
+
+ Specifies the Legend's top position in percent of total chart height.
+
+
+
+
+ Sets the space in pixels to the left of the Legend
+ Text item. It may be used to increase the space
+ between the text and the symbol.
+
+
+
+
+ Sets the Maximum number of Legend Rows to display for a horizontal (Chart Top or Bottom) Legend.
+
+
+
+
+ Access to the Legend's Array of Text lines.
+
+
+
+
+ Use the Text property to add text to the Legend.
+
+
+
+
+ Sets vertical spacing between Legend items (pixels).
+
+
+
+
+ Speficies the number of screen pixels between Legend and Chart rectangles.
+
+
+
+
+ Determines the vertical margin in pixels between Legend and Chart rectangle.
+
+
+
+
+ List of objects.
+
+
+
+
+ Changes the background color of the Legend box.
+
+
+
+
+ Resizes Chart rectangle to prevent overlap with Legend.
+
+
+
+
+ Defines which items will be displayed in Chart Legend.
+
+
+
+
+ Sets the Title text and its characteristics at the top of the legend
+
+
+
+
+ Returns the index of the clicked Legend Point.
+
+
+
+
+ Is read only and returns True only if the legend is left or right aligned.
+
+
+
+
+ Returns the text string corresponding to a Legend position.
+
+
+
+
+ Returns the corresponding Legend text for the Series ValueIndex point.
+
+
+
+
+ Chart paging characteristics
+
+
+
+
+ Gets the number of pages, according to MaxPointsPerPage property.
+
+
+
+
+ Gets or sets the current page number.
+
+
+
+
+ Gets or Sets the number of points displayed per page.
+
+
+
+
+ Set to true to scale the Y Axis for each page.
+
+
+
+
+ Determines how the last Chart page will be displayed.
+
+
+
+
+ Moves to next page ( Current + 1 )
+
+
+
+
+ Moves to previous page ( Current - 1 )
+
+
+
+
+ Returns the first ValueIndex of the current page.
+
+
+
+
+ Describes the possible values of the property
+
+
+
+
+ Defines units as a percentage of the panel size.
+
+
+
+
+ Defines units in pixels.
+
+
+
+
+ Chart background panel characteristics
+
+
+
+
+ This property shows or hides the Panel.
+
+
+
+
+ Paints the Chart in your preferred Canvas and region.
+
+
+
+
+ Sets the units in which the Margins are expressed.
+
+
+
+
+ Sets Left margin as percentage of Chart Drawing.
+
+
+
+
+ Sets Top margin as percentage of Chart Drawing.
+
+
+
+
+ Sets Right margin as percentage of Chart Drawing.
+
+
+
+
+ Sets Bottom margin as percentage of Chart Drawing.
+
+
+
+
+ System.Obsolete: Please use Walls.Back.Image property.
+
+
+
+
+ Print
+
+
+
+
+ Units as percentage of page width and height
+
+
+
+
+ Units as standard 1/100 inch printer units
+
+
+
+
+ Class provides access to the Chart at print time.
+
+
+
+
+ Access to each Page Print Margin
+
+
+
+
+ Sets Margins expressed as a percentage or hundredths of an inch of paper dimensions.
+
+
+
+
+
+ Sets Left margin as percentage of paper dimensions.
+
+
+
+
+ Sets Top margin as percentage of paper dimensions.
+
+
+
+
+ Sets Right margin as percentage of paper dimensions.
+
+
+
+
+ Sets Bottom margin as percentage of paper dimensions.
+
+
+
+
+ Chart printing characteristics
+
+
+
+
+ Shows the Preview screen of the Chart print.
+
+
+
+
+ Sets print dimensions of Chart proportional to those onscreen.
+
+
+
+
+ Prints transparent Chart Panel when false.
+
+
+
+
+ Sets Chart printing detail resolution (from 1 to 100).
+
+
+
+
+ Sets Printer Margin Units.
+
+
+
+
+ When true applies anti-alias to plotting Pen
+
+
+
+
+ When true prints a Grayscale Chart
+
+
+
+
+ Sets the current Printer orientation to Landscape.
+
+
+
+
+ Sets the four margins as a percentage of paper dimensions.
+
+
+
+
+ Selects the Chart print job to be sent to the currently selected Printer.
+
+
+
+
+ Sends the Chart to the currently selected Printer.
+
+
+
+
+ Sends the Chart to the currently selected Printer.
+
+ When true prints page as Landscape
+
+
+
+ Prints Chart c at Rectangle (Left, Top, Width,Height).
+
+
+
+
+ Prints at Rectangle (Left, Top, Width,Height).
+
+
+
+
+ Start multiple Chart print job
+
+
+
+
+ End multiple Chart print job
+
+
+
+
+ Collection of Marker Tool components.
+
+
+
+
+ Marker tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Base Tool class.
+
+
+
+
+ Required for Windows.Forms Class Composition Designer support
+
+
+
+
+ Enables/Disables the indexed Tool.
+
+
+
+
+ Returns the associated bitmap icon for a given Tool class.
+ This icon is used at Tools gallery ListBox and Tools Editor dialog.
+
+
+
+
+ Creates a new Tool object and sets the Name and Chart properties.
+
+
+
+
+ Creates a new tool from the System.Type of an existing tools object.
+
+
+
+
+ Collection of Tool components.
+
+
+
+
+ Returns the corresponding point index which has the specified Value.
+
+
+
+
+ Adds a new tool to your TChart.
+
+
+
+
+ Removes a tool from the TChart.
+
+
+
+
+ Removes (and optionally disposes) all Series.
+
+
+
+
+ Removes and disposes all Series.
+
+
+
+
+ Internal. Exchange tool order.
+
+
+
+
+ Internal. Exchange tool order.
+
+
+
+
+ Base abstract class for Tool components with a Series property.
+
+
+
+
+ Returns the associated Top or Bottom Chart Horizontal Axis.
+
+
+
+
+ Returns the associated Left or Right Chart Vertical Axis.
+
+
+
+
+ Sets Series with which Tools are associated.
+
+
+
+
+ Base abstract class for Tool components with an Axis property.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Sets the axis to which a Tool will belong.
+
+
+
+
+ Internal use. Tool support EventArgs
+
+
+
+
+ Internal use. Tool support EventArgs
+
+
+
+
+ Internal use. Tool support EventArgs
+
+
+
+
+ Internal use. Tool support EventArgs
+
+
+
+
+ Internal use. Tool support EventArgs
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Draws the Annotation Tool in the top left of the Chart Panel.
+
+
+
+
+ Draws the Annotation Tool in the bottom left of the Chart Panel.
+
+
+
+
+ Draws the Annotation Tool in the top right of the Chart Panel.
+
+
+
+
+ Draws the Annotation Tool in the bottom right of the Chart Panel.
+
+
+
+
+ Annotation tool.
+
+
+
+
+ Sets horizontal displacement in pixels of text box from Chart's left edge.
+
+
+
+
+ Sets a custom width.
+
+
+
+
+ Allows the Text of the Tool to be edited.
+
+
+
+
+ Sets a custom width.
+
+
+
+
+ The rectangular bounds of the annotation tool.
+
+
+
+
+ Set to true to permit custom sizing of TextShape.
+
+
+
+
+ Sets vertical displacement in pixels of text box from Chart's top edge.
+
+
+
+
+ Defines a default position for the Annotation Tool text box and text.
+
+
+
+
+ Defines Annotation Position units (pixels or percentage).
+
+
+
+
+ Sets characteristics of the Annotation Tool text and text box Shape.
+
+
+
+
+ Defines the text for the Annotation Tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Puts the Annotation into edit mode.
+
+
+
+
+ Stops the Annotation from further editing.
+
+
+
+
+ The method passed to the KeyDown event by default.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Draws an arrow at the beginning of the Axis.
+
+
+
+
+ Draws an arrow at the end of the Axis.
+
+
+
+
+ Draws arrows at both ends of the Axis.
+
+
+
+
+ Axis Arrow tool.
+
+
+
+
+ Sets the length of the Arrows.
+
+
+
+
+ Sets where the arrows are drawn on the Axis.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Sets TChart scroll rate as percentage of the associated axis.
+
+
+
+
+ Reverses direction of applied Axis Arrow scroll.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Draws the break as small Zig Zag.
+
+
+
+
+ Draws the break as Zig Zag.
+
+
+
+
+ Draws the break as Line.
+
+
+
+
+ Draws the break as Transparent.
+
+
+
+
+ Axis Breaks tool.
+
+
+
+
+ Sets the End value of the Axis break.
+
+
+
+
+ Sets the Start value of the Axis break.
+
+
+
+
+ Enables or disables the axis break.
+
+
+
+
+ Sets the style of the break.
+
+
+
+
+ Collection of
+
+
+
+
+ Axis Breaks tool.
+
+
+
+
+ Default 0.0000001. This variable avoids jump/flicker when scrolling across Break boundaries
+ by moving scroll to 'just' outside of Break zone when traversing Axis Min or Max.
+ Adjust if your Axis scale requires different sensitivity.
+
+
+
+
+ List of breaks.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Specifies the pen used to draw the gap outline.
+
+
+
+
+ Axis Arrow tool.
+
+
+
+
+ When true, dragging an horizontal axis from left to right will scroll the associated series from right to left.
+
+
+
+
+ Gets or sets the Cursor to which the AxisScroll defaults when the mouse is not over it.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Banner text scrolling direction.
+
+
+
+
+ Scroll from right to left.
+
+
+
+
+ Scroll from left to right.
+
+
+
+
+ If true, show/hide text. The text is shown for milliseconds
+ and then hidden for milliseconds.
+
+
+
+
+ Defines the number of milliseconds text will be hidden.
+
+
+
+
+
+ Defines the number of milliseconds text will be shown.
+
+
+
+
+
+ If true, text is scrolled according to .
+
+
+
+
+ Defines text scrolling direction.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Chart Image tool, use it to display a picture using the specified
+ Series axes as boundaries. When the axis are zoomed or scrolled,
+ the picture will follow the new boundaries.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+
+
+
+
+
+ Series clip tool.
+ Clips area bounded by series vertical and horizontal axis.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Color band tool, use it to display a coloured rectangle (band)
+ at the specified axis and position.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Draws the Colorband behind the series values when true.
+
+
+
+
+ Sets Start Axis value of colorband.
+
+
+
+
+ Sets End Axis value of colorband.
+
+
+
+
+ Sets the Transparency of ColorBand as percentage.
+
+
+
+
+ Sets Band colour gradient.
+
+
+
+
+ Sets Band Color.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Contains formatting properties for the automatic line used to drag the start value of the ColorBand tool at runtime.
+
+
+
+
+ Contains formatting properties for the automatic line used to drag the end value of the ColorBand tool at runtime.
+
+
+
+
+ Gets or sets if the ColorBand tool allows mouse dragging of the edge corresponding to the end value.
+
+
+
+
+ Gets or sets if the ColorBand tool allows mouse dragging of the edge corresponding to the start value.
+
+
+
+
+ Pen used to draw the starting line of the color band tool.
+
+
+
+
+ Pen used to draw the ending line of the color band tool.
+
+
+
+ ColorLine tool drag event handler
+
+
+
+ Color Line tool. To draw custom lines at a axis value.
+
+
+
+
+ Gets or sets the Cursor to which the ColorLine defaults when the mouse is not over it.
+
+
+
+
+ Gets and sets pixel proximity tolerance for Clicks.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Allows mousedrag of Line when true .
+
+
+
+
+ Repaints the Chart while moving the ColorLine when True.
+
+
+
+
+ Draws ColorLine in 3D when True.
+
+
+
+
+ Draws the ColorLine behind the series values.
+
+
+
+
+ Allows drag of ColorLine outside of the Chart rectangle.
+
+
+
+
+ Determines Axis position where the ColorLine has to be drawn.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Shows a horizontal line on top of the chart's series.
+
+
+
+
+ Shows a vertical line on top of the chart's series.
+
+
+
+
+ Shows both a horizontal line and a vertical line on top of the chart's series.
+
+
+
+
+ When the property is true, the property determines if the cursor will "jump" to existing series points as the user moves the mouse near them.
+
+
+
+
+ Defines the shape to draw around the Cursor XY position, only when the property is Scope.
+
+
+
+
+ Describes the possible return values of the method.
+
+
+
+
+ The Cursor is not on a cursortool.
+
+
+
+
+ The Cursor is on the horizontal line of the cursortool.
+
+
+
+
+ The Cursor is on the vertical line of the cursortool.
+
+
+
+
+ The Cursor on the horizontal and vertical line of the cursortool.
+
+
+
+ Cursor tool Change event handler
+
+
+ Cursor tool Axis event handler
+
+
+
+ Cursor tool.
+
+
+
+
+ Moves Cursor when moving the mouse.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Defines which lines of the CursorTool are shown.
+
+
+
+
+ Sets X Value for vertical component of Cursor Tool.
+
+
+
+
+ Sets Y Value for horizontal component of Cursor Tool.
+
+
+
+
+ Returns nearest point to Cursor and smallest distance value.
+
+
+
+
+ Draws a cursor which does not repaint the chart but which only accepts the Pen.Color as a parameter.
+
+
+
+
+ Gets and sets whether the cursor will be displayed at the chart front position (the default), or will use the Series 'Z' position.
+
+
+
+
+ When is Scope use ScopeSize to modify the size of the Scope element.
+
+
+
+
+ Gets and sets pixel proximity tolerance for Clicks.
+
+
+
+
+ Horiz size of Cursortool (full width if 0).
+
+
+
+
+ Vertical size of Cursortool (full height if 0).
+
+
+
+
+ Gets or sets the Cursor to which the CursorTool defaults when the mouse is not over it.
+
+
+
+
+ Select a option when the property is set to Scope.
+
+
+
+
+ When Snap true snaps on mousemove according to selected.
+
+
+
+
+ Aligns the TCursorTool with the nearest series point.
+
+
+
+
+ Moves cursor to nearest Series point and returns point index.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Sets to full Chart rectangle instead of the boundaries defined by Series axis.
+
+
+
+ Cursor tool Change EventArgs
+
+
+ Cursor tool GetAxisRect EventArgs
+
+
+
+ Event args to enable filtering of series in the DataTable.
+
+
+
+
+ Event args to enable modification of text in the DataTable.
+
+
+
+ DataTable tool's FilterSeries event handler. Suitable for filtering series.
+
+
+ DataTable tool event handler. Suitable for modifying item texts.
+
+
+
+ Legend shape.
+
+
+
+
+ Automatically position DataTable.
+
+
+
+
+
+ Clip legend text.
+
+
+
+
+ Use this event to modify DataTable text items.
+
+
+
+
+ Invert legend items.
+
+
+
+
+ Legend top coordinate. If zero, top coordinate is calculated automatically.
+
+
+
+
+ Legend left coordinate. If zero, left coordinate is calculated automatically.
+
+
+
+
+ Legend text font.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ The value index of the mark.
+
+
+
+
+ Gets which mouse button was pressed.
+
+
+
+
+ Gets the number of times the mouse button was pressed and released.
+
+
+
+
+ Gets a signed count of the number of detents the mouse wheel has rotated. A detent is one notch of the mouse wheel.
+
+
+
+
+ Gets the location of the mouse during the generating mouse event.
+
+
+
+
+ Gets the x-coordinate of the mouse during the generating mouse event.
+
+
+
+
+ Gets the x-coordinate of the mouse during the generating mouse event.
+
+
+
+
+ DragMarks Tool.
+
+
+
+
+ Gets descriptive name.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Allows user to drag points horizontally only.
+
+
+
+
+ Allows user to drag points vertically only.
+
+
+
+
+ Allows user to drag points both horizontally and vertically.
+
+
+
+ DragPoint tool event handler
+
+
+
+ DragPoint Tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Set Style for user to drag series points vertically, horizontally or both.
+
+
+
+
+ Sets which mousebutton activates DragPoint.
+
+
+
+
+
+ Determines the type of DragPoint Cursor displayed.
+
+
+
+
+ LineStyle for
+
+
+
+ Plots a single line between start and end points
+
+
+ Plots 2 horizontal lines along top and bottom of the bounding rectangle expressed by start and end points
+
+
+ Plots 2 vertical lines along left and right of the bounding rectangle expressed by start and end points
+
+
+ Plots a rectangle between start and end points
+
+
+ Plots an ellipse between start and end points
+
+
+
+ Placement of Line handles for
+
+
+
+ DrawLine tool event handler
+
+
+ DrawLine tool Selecting event handler
+
+
+
+ Draw Line tool.
+
+
+
+
+ Returns the list of lines drawn on the Chart.
+
+
+
+
+ Defines which mousebutton activates the DrawLineTool.
+
+
+
+
+ Gets and sets a Keys value which defines a key, which when pressed, interrupts and cancels a line that is being drawn.
+
+
+
+
+ Enables/Disables the drawing of lines on the chart by the user.
+
+
+
+
+ Enables selection of lines for repositioning on the Chart.
+
+
+
+
+ Gets or sets the Cursor to which the DrawLine defaults when the mouse is not over it.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Determines how lines will be displayed and dragged.
+
+
+
+
+ Returns the line or lines that are currently selected.
+
+
+
+
+ Setting this property to False won't maintain the new lines added as selected.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Returns True if mouse is over selected line ending points or
+ over any non-selected line.
+ If True, the Chart cursor is changed.
+
+
+
+
+ Collection of
+
+
+
+
+ Line of DrawLine Tool.
+
+
+
+
+ Returns Rect of the DrawLine end handle.
+
+
+
+
+ Returns Rect of the DrawLine start handle.
+
+
+
+
+ Gets/Sets the pen of the DrawLine.
+
+
+
+
+ ExtraLegend tool.
+
+
+
+
+ Gets or sets the Legend characteristics.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ The Fader Tool class.
+
+
+
+
+ Fired when the Fader Tool is stopped.
+
+
+
+
+ Starts the Fader tool activity.
+
+
+
+
+ Stops the Fader tool activity.
+
+
+
+
+ Resets the chart to its original state.
+
+
+
+
+ Sets or returns the color shown on the chart when completely faded out.
+
+
+
+
+ Sets or returns the time delay between the start and end of the fading process.
+
+
+
+
+ Sets or returns the number of steps taken during the fading process.
+
+
+
+
+ Sets or returns the the direction of the fading process.
+
+
+
+
+ Defines style for
+
+
+
+
+ Fibonacci arcs.
+
+
+
+
+ Fibonacci fan lines.
+
+
+
+
+ Fibonacci fan lines.
+
+
+
+
+ Fibonacci fans and arcs financial tool. Tool supports Fibonacci arcs and fans.
+
+ Fibonacci arcs are charting technique consisting of three curved lines that are drawn for the purpose of anticipating key support and resistance levels, and areas of ranging.
+ Fibonacci arcs are created by first drawing an invisible trendline between two points (usually the high and low in a given period), and then by drawing three curves that
+ intersect this trendline at the key Fibonacci levels of 38.2%, 50% and 61.8%.
+
+ Fibonacci fans are charting technique consisting of three diagonal lines that use Fibonacci ratios to help identify key levels of support and resistance.
+ Fibonacci fans are created by first drawing a trendline through two points (usually the high and low in a given period), and then by dividing the vertical distance between
+ the two points by the key Fibonacci ratios of 38.2%, 50% and 61.8%. The result of these divisions each represent a point within the vertical distance. The three 'fan' lines
+ are then created by drawing a line from the leftmost point to each of the three representing a Fibonacci ratio.
+
+
+
+
+ If true, show individual Fibonacci level labels.
+
+
+
+
+ Labels angle.
+
+
+
+
+ Controls level font properties.
+
+
+
+
+ Defines Fibonacci tool drawing style. Tool supports Fibonacci arcs and
+ Fibonacci fans (lines).
+
+
+
+
+ Defines trendline start point x coordinate.
+
+
+
+
+ Defines trendline start point y coordinate.
+
+
+
+
+ Defines trendline end point x coordinate.
+
+
+
+
+ Defines trendline end point y coordinate.
+
+
+
+
+ Convert from axis double XY to screen pixels XY.
+
+ Axis point coordinate.
+ Screen point coordinate.
+
+
+
+ Create default Fibonacci levels at 38.2%, 50% and 61.8%
+
+
+
+
+ Defines trend pen characteristics.
+
+
+
+
+ Returns the list of Fibonacci levels.
+
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Total trendline length.
+
+ Total length of the trendline, expressed in screen pixels.
+
+
+
+ Draw Fibonacci arc.
+
+ Circle center (screen coordinate).
+ Circle radius (pixels).
+ If true, draw upper half of circle, otherwise lower part of circle.
+
+
+
+ Draw Fibonacci fan line.
+
+
+
+
+ Draw Fibonacci level using specific Value.
+
+
+
+
+ Individual Fibonacci level properties.
+
+
+
+
+ Defines Fibonaccio arc value in range (0,100).
+
+
+
+
+ Defines individual Fibonacci level pen characteristics.
+
+
+
+
+ Collection of all arcs.
+
+
+
+
+ Internal use. Supports Gantt Tool positioning
+
+
+
+ Gantt tool event handler called when Gantt Bar is dragged
+
+
+ Gantt tool event handler called when Gantt Bar is resized
+
+
+
+ Gantt Tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ EventArgs for
+
+
+
+
+ EventArgs for
+
+
+
+
+ Grid Band tool, use it to display a coloured rectangles (bands)
+ at the grid lines of the specified axis and position.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ The Brush characteristics of the first GridBand tool Band.
+
+
+
+
+ The Brush characteristics of the second GridBand tool Band.
+
+
+
+
+ Transpose Grid 3D.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Internal use. Identification interface for hotspot tools
+
+
+
+
+ Arguments for the Custom Hotspot event.
+
+
+
+
+ Constructor
+
+ Entire Polygon List for Map
+
+
+
+ Map Area's Polygon list
+
+
+
+
+ Arguments for the Series Hotspot event.
+
+
+
+
+ Constructor
+
+ Point's Series
+ Point's Map Area Polygon characteristics
+
+
+
+ Point's Map Area Polygon characteristics
+
+
+
+
+ Point's Series
+
+
+
+
+ TeeChart helper scripts to provide clientside functionality
+ for ASP.NET Charts.
+
+
+
+
+ Do not apply a TeeChart client helper function.
+
+
+
+
+ Apply an annotation helper script to display dynamically
+ positioned text or image content on mouse over.
+
+
+
+ Hotspot Get HTML Map tool event handler
+
+
+
+ Summary description for Hotspot.
+
+
+
+
+ Constructor
+
+
+
+
+ Constructor
+
+ Chart to which to associate Hotspot.
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Defines how Map areas will act. May show a Point Label or be custom configured for a new URL drilldown
+ or VB/Jscripted function.
+
+
+
+
+ Internal use.
+ Checks for presence of clientside event and passes parameters if
+ it exists.
+
+ Point's Series
+ Point's Map Area Polygon
+
+
+
+ Returns the defined Map for the Chart.
+
+ Default mouseover hint style.
+
+
+
+
+ Contains the definition for the Chart Map area.
+
+
+
+
+ HotspotHelperScripts are provide prepared clientside scripts
+ for Chart automation when using Hotspot tools.
+
+
+
+ Hotspot Get HTML Map tool event handler
+
+
+
+ Summary description for Hotspot.
+
+
+
+
+ Use the Hotspot event to modify most aspects of the Hotspot Map's Point Regions.
+ The event should be manually added to the WebForm.
+
+
+
+ override protected void OnInit(EventArgs e)
+ {
+
+ ((Steema.TeeChart.Tools.Hotspot)(WebChart1.Chart.Tools[0])).GetHTMLMap +=
+ new Steema.TeeChart.Tools.SeriesHotspotEventHandler(this.hotspot2_GetHTMLMap);
+
+ base.OnInit(e);
+ }
+
+
+
+
+ Constructor
+
+
+
+
+ Constructor
+
+ Chart to which to associate Hotspot.
+
+
+
+ Defines the text format of the Hotspot ToolTip.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Internal use.
+ Checks for presence of clientside event and passes parameters if
+ it exists.
+
+ Point's Series
+ Point's Map Area Polygon
+
+
+
+ Gets the Chart Map
+
+ string representation of Image Hotspot Map
+
+
+
+ Gets the Chart Map
+
+ string representation of Image Hotspot Map for Chart.ChartRect
+
+
+
+ Gets the string representation of the Chart's Hotspot for Image Map.
+
+ Mark Label Style for Mouseover hints
+
+
+
+
+ Contains the definition for the Chart Map area.
+
+
+
+
+ Use this string property to add optional elements such as ID to the Map definition
+
+
+
+
+ Defines how Map areas will act. May show a Point Label or be custom configured for a new URL drilldown
+ or VB/Jscripted function.
+
+
+
+
+ The relative z plane of the Hotspot Annotation object. On a WebForm with many items it may
+ be necessary to situate the Annotation at a custom higher plane level for Rectangle
+ draw to be visible on top of the Charts.
+
+
+
+
+ HotspotHelperScripts are provide prepared clientside scripts
+ for Chart automation when using Hotspot tools.
+
+
+
+
+ Use default axis.
+
+
+
+
+ Use other axis.
+
+
+
+
+ Use both axes.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Gets the Axes collection of Axis of the LegendPalette Tool.
+
+
+
+
+ The light style.
+
+
+
+
+ Light is uniform around the Left Top position.
+
+
+
+
+ Light is circular
+
+
+
+
+ Use this tool to display a light-spot in 2D dimensions on top of a chart control.
+
+
+
+
+ The size of the "light spot" in percentage of maximum chart dimensions.
+
+
+
+
+ When true, the light spot will follow the mouse movement.
+ When false, you may set the Left and Top pixel coordinates.
+
+
+
+
+ The horizontal coordinate in pixels for the light spot center.
+
+
+
+
+ The light style.
+
+
+
+
+ The vertical coordinate in pixels for the light spot center.
+
+
+
+
+ Applies the light effect over the ParentChart Canvas.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Magnify Tool.
+
+
+
+
+ Sets or returns whether the magnified image is smoothed.
+
+
+
+
+ Sets or returns the percentage by which the mouse wheel magnifies the image.
+
+
+
+
+ Sets or returns the percentage by which the underlying image is magnified.
+
+
+
+
+ Sets or returns whether the tool follows mouse movement.
+
+
+
+
+ Sets or returns whether the tool is drawn as a circle.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Tips will be displayed when moving the mouse over a series point.
+
+
+
+
+ Tips will be displayed when clicking a series point.
+
+
+
+ MarksTipGetText tool event handler
+
+
+
+ Marks Tip.
+ Marks tip tool, use it to display "tips" or "hints" when the end-user
+ moves or clicks the mouse over a series point.
+
+
+
+
+ Defines the text format of the Mark ToolTip.
+
+
+
+
+ Activates Mark Tip on mouse move or click.
+
+
+
+
+ Sets the time lag before the Tool Tip appears.
+
+
+
+
+ Gets or sets the foreground color for the ToolTip.
+
+
+
+
+ Gets or sets the background color for the ToolTip.
+
+
+
+
+ Gets or sets the period of time the ToolTip remains visible if the pointer is stationary on a control with specified ToolTip text.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ No shape is drawn.
+
+
+
+
+ Shape is a circle.
+
+
+
+
+ Shape is a rectangle.
+
+
+
+
+ Shape is a diamond.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Nearest horizontal point.
+
+
+
+
+ Nearest vertical point.
+
+
+
+
+ Nearest point both horizontally and vertically.
+
+
+
+
+ Nearest tool, use it to display a graphical signal when the mouse is
+ moving near a series point.
+
+
+
+
+ Defines the Size of the NearestTool shape.
+
+
+
+
+ Sets the shape of the NearestTool.
+
+
+
+
+ Gets and sets whether NearestTool calculates nearest point vertically, horizontally or in both directions.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Draws a temporary line from the mouse coordinates to the nearest point.
+
+
+
+
+ Allows the whole Parent Chart to repainted when true.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ PageNumber annotation tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Defines the format of the PageNumTool text string.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Draws a border around the focused pie slice.
+
+
+
+
+ Explodes and un-explodes the focused slice.
+
+
+
+
+ Pie Slices tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Rectangle tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Elevates and Rotates the Chart series.
+
+
+
+
+ Rotates the Chart series.
+
+
+
+
+ Elevates the Chart series.
+
+
+
+
+ Rotate tool.
+
+
+
+
+ Inverts the direction of Rotation and Elevation.
+
+
+
+
+ Determines whether mouse action applies to Rotation, Elevation or Both.
+
+
+
+
+ Sets the speed of the rotate tool.
+
+
+
+
+ Defines which mousebutton activates the TTeeCustomTool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ EventArgs to support ScrollBar OnScrolled Event
+
+
+
+
+ ScrollBar OnScrolled Event Handler
+
+
+
+
+ ScrollBar OnChangedSize Event Handler
+
+
+
+
+ ScrollBar OnSetPosition Event Handler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Legend ScrollBar tool.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ ScrollBar tool.
+
+
+
+
+ Returns the rectangle that defines the boundaries of the scrollbar thumb.
+
+
+
+
+ Returns the rectangle that defines the boundaries of the scrollbar.
+
+
+
+
+ True when the scrollbar is horizontal, False if it is vertical.
+
+
+
+
+ The value where the scrollbar thumb is positioned in respect the scrollbar virtual Size property.
+
+ See also the property.
+
+
+
+
+ The total scrollbar virtual Size magnitude.
+
+ See also the property.
+
+
+
+
+ The brush used to fill the scrollbar thumb.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ The brush used to fill the up/left and down/right "arrows".
+
+
+
+
+ Gradient properties used to fill the main scrollbar rectangle.
+
+
+
+
+ Style for the scrollbar border.
+
+
+
+
+ Number of pixels that define the minimum size (width or height) of the scrollbar thumb indicator.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ When True (the default), the scrollbar will repeat mouse clicks when leaving the mouse button pressed.
+
+
+
+
+ Defines when the scrollbar is displayed.
+
+ Values are "Always" and "WhenNeeded".
+
+
+
+
+ The amount in milliseconds that the scrollbar will delay before starting the auto-repeat feature.
+
+ See also the property.
+
+
+
+
+ The ScrollPage tool creates a SubChart showing a scrollable overview of a large dataset.
+
+
+
+
+ Gets or sets the properties of the SeriesPointer positioned at the start of the scroll window.
+
+
+
+
+ Gets or sets the properties of the SeriesPointer positioned at the end of the scroll window.
+
+
+
+
+ Gets or sets the properties of the SubChartTool used to draw the navigation chart.
+
+
+
+
+ Gets or sets the properties of the TChart which draws the navigation chart.
+
+
+
+
+ Gets or sets the properties of the ColorBand tool which draws the scroll window.
+
+
+
+
+ Gets or sets the Color which highlights the and
+ when the mouse hovers over them.
+
+
+
+
+ Gets or sets the height ratio between the chart that displays data (top) and that which navigates it (bottom).
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Sets the location as a Percentage of Chart width.
+
+
+
+
+ Sets the location as an Axis value.
+
+
+
+
+ No buttondown mouseover action.
+
+
+
+
+ Mouse will drag Chart when mousebutton down.
+
+
+
+
+ Tool to make active scrollable WebCharts
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Percentage of Chart to be in view
+
+
+
+
+ Sets the action for the Mouse when dragged over the Scrollable Chart.
+
+
+
+
+ Start position when opening Chart. May be expressed as percentage location
+ or as Axis value. See .
+
+
+
+
+ Units used to set View Segment Size and Start Position when opening Chart for view.
+
+
+
+
+ Supporting attributes for ZoomTool rendering
+
+
+
+
+ This tool enables the end-user to click and drag chart elements like series, axes, legend, titles, etc.
+ Events are called whenever the user selects an element by clicking it, drags the element to a new location or resizes the chart.
+
+
+
+
+ Called when the end-user releases the left mouse button after a dragging operation.
+
+
+
+
+ Called when the end-user is moving the mouse while pressing the left mouse button when the mouse is over a chart element.
+
+
+
+
+ Called when the end-user releases the left mouse button after a chart resizing operation.
+
+
+
+
+ Called when the end-user moves the mouse while resizing the chart.
+
+
+
+
+ Called when the end-user clicks a chart element that is different than the previously selected one.
+
+
+
+
+ Returns the currently selected Annotation tool, if any.
+
+
+
+
+ Returns the object that is being currently dragged.
+
+
+
+
+ Controls if the selector tool should draw the small black rectangles at selected item corners.
+
+
+
+
+ The currently selected chart Series, if any.
+
+
+
+
+ The currently selected chart Wall, if any.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Permits the end user to move selected chart elements like series marks, legend, titles, etc.
+
+
+
+
+ When True, the selector tool enables clicking the chart to select it and drag the chart corner handles to resize it.
+
+
+
+
+ The size in pixels of the small black rectangles displayed at selected item corners.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Gets and sets which parts of the chart can be selected. When null, as default, all parts can be selected.
+ Objects can be one of the enumeration or a or
+ .
+
+ private Points series1;
+ private Selector tool1;
+ private void InitializeChart()
+ {
+ tChart1.Series.Add(series1 = new Points());
+ tChart1.Tools.Add(tool1 = new Selector());
+
+ series1.FillSampleValues();
+
+
+ tool1.SelectableParts = new object[] { tChart1.Axes.Left, ChartClickedPartStyle.Legend };
+ tool1.Selected += new SelectorSelectedEventHandler(tool1_Selected);
+ }
+
+ void tool1_Selected(object sender, EventArgs e)
+ {
+ Steema.TeeChart.Editors.EditorUtils.EditChartPart(tChart1.Chart, tool1.Part, false);
+ }
+
+
+
+
+
+ Series Animation tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ EventArgs for
+
+
+
+ SeriesAnimation tool event handler
+
+
+
+ Series-Band tool.
+ Use it to display a band between two (line) series.
+ created 2003-12-14 by mkaul@leuze.de
+
+
+
+
+ Gets and sets a constant value to be used as one of the limits of band filled areas.
+ Note: BoundValue property is only used when the property is not set (ie: is null).
+
+
+
+
+ Gets and sets a flag which causes filling to occur before or after the series are displayed.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Gets and sets the second series associated to this tool.
+ SeriesBand tool needs two series to fill the area in between them.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ The amount of semi-glass effect (opacity) to apply when filling the area between the two series.
+
+
+
+
+ The gradient colors used to fill the area between the two series.
+
+
+
+
+ Series region Tool.
+ It colors bounded area under the (series) curve.
+
+
+
+
+ If true, region left and right bounds are equal to series minimum and maximum x value.
+
+
+
+
+ Defines region left (series not mandatory values) lower bound.
+
+
+
+
+ Defines region right (series not mandatory values) upper bound.
+
+
+
+
+ Region bottom or upper limit. Used only if is true.
+
+
+
+
+ If true, region bottom or upper limit is defined by .
+
+
+
+
+ If true, draw region behind series. If false, draw region over series.
+
+
+
+
+ Element Pen characteristics.
+
+
+
+
+ Sets the Transparency of region as percentage.
+
+
+
+
+ Sets region colour gradient.
+
+
+
+
+ Sets region Color.
+
+
+
+
+ Element Brush characteristics.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Using point x coordinate it calculates point y coordinate
+
+ intersection point x coordinate
+ returns intersection point y coordinate.
+ Point index
+
+
+
+ Calculates basic series statistics.
+
+
+
+
+ Statistics report in text form.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Transpose multiple series (swap rows and columns).
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Annotation tool.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ The collection of charts within the subchart tool.
+
+
+
+
+ Sets the Chart Width in pixels.
+
+
+
+
+ Sets the Chart Top position in pixels.
+
+
+
+
+ Sets the Chart Left position in pixels.
+
+
+
+
+ Sets the Chart Height in pixels.
+
+
+
+
+ Collection of Chart components.
+
+
+
+
+ Use this tool to display a visual indication of selecting a Surface cell when the user moves the mouse over a surface series.
+
+
+
+
+ Gets or sets the color used to fill the surface cell under the mouse cursor.
+
+
+
+
+ Gets or sets the color used to fill all the surface cells that belong to the grid column under the mouse cursor.
+
+
+
+
+ Gets or sets the color used to fill all the surface cells that belong to the grid row under the mouse cursor.
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ This method fills in Row and Col parameters the row and column number that is under the mouse cursor.
+
+
+
+
+ Do not postback clicks
+
+
+
+
+ The Zoom Tool is provided to facilitate zoom on Chart images rendered to a WebForm.
+ It supports the WebChart Component only.
+
+ To use the Zoom tool you need to include the following elements:
+
+ - Add the ZoomTool to your Chart using the Chart Editor. It will generate clientside Javascript at runtime
+ to support Chart zooming.
+ - Add the code-behind code to interpret the information sent by
+ the clientside Javascript routines. That is normally added to the Page_Load method.
+ - The ZoomTool assumes that Chart data is the same between zoom calls.
+
+
+
+ private void Page_Load(object sender, System.EventArgs e)
+ {
+
+
+ WebChart1.Chart.Import.Template.Load(tmpChart);
+
+
+ CheckZoom(WebChart2);
+ }
+
+ private void CheckZoom(WebChart wChart)
+ {
+
+
+
+
+ ArrayList zoomedState=(ArrayList)Session[wChart.ClientID+"Zoomed"];
+ zoomedState=((Steema.TeeChart.Tools.ZoomTool)wChart.Chart.Tools[0]).SetCurrentZoom(Request,
+ zoomedState);
+ if (zoomedState==null)
+ Session.Remove(wChart.ClientID+"Zoomed");
+ else
+ Session.Add(wChart.ClientID+"Zoomed",zoomedState);
+ }
+
+
+
+
+
+ Gets descriptive text.
+
+
+
+
+ Gets detailed descriptive text.
+
+
+
+
+ Call this method to zoom the Chart.
+
+ Pixel based bounds rectangle (left, top, width, height).
+
+ Alternatively you may use standard Zoom methods to zoom directly but you need to generate
+ an internal Chart first for all point pixel locations to be calculated.
+
+ WebChart1.Chart.Bitmap();
+ WebChart1.Chart.Zoom.ZoomRect(new Rect(x0,y0,x1-x0 ,y1-y0 ));
+
+
+
+
+
+ If current Zoom state saved to session variable, preset current Chart zoomstate
+
+ Arraylist, Saved Session state of Chart axes
+
+
+
+ The relative z plane of the Zoom Rect Draw. On a WebForm with many items it may
+ be necessary to situate the Zoom Canvas at a custom higher plane level for Rect
+ draw to be visible on top of the Charts.
+
+
+
+
+ 0 to 100%. Set to 0 (default) to for zoom rectangle to be transparent
+
+
+
+
+ Sets the Pen Color for the Zoom Rctangle.
+
+
+
+
+ Use this property to add any custom variables to the Chart's new page calls.
+
+
+
+
+ Supporting attributes for ZoomTool rendering
+
+
+
+
+ Use method to set Zoom where there are post elements (eg. Button or DropDownList)
+ on the page that might send a non-zoom page request.
+
+ From the WebForm call CheckZoom after loading Charts in Page_Load.
+
+ private void Page_Load(object sender, System.EventArgs e)
+ {
+ MemoryStream tmpChart;
+
+ if (Session["ch1"]==null)
+ {
+ WebChart1.Chart[0].FillSampleValues();
+ tmpChart=new MemoryStream();
+ WebChart1.Chart.Export.Template.Save(tmpChart);
+
+ Session.Add("ch1",tmpChart);
+ }
+ else
+ {
+
+ tmpChart=(MemoryStream)Session["ch1"];
+
+
+ tmpChart.Position=0;
+
+ WebChart1.Chart.Import.Template.Load(tmpChart);
+ CheckZoom(WebChart1);
+ }
+ }
+
+ private void CheckZoom(WebChart wChart)
+ {
+ ArrayList zoomedState=(ArrayList)Session[wChart.ClientID+"Zoomed"];
+ zoomedState=((Steema.TeeChart.Tools.ZoomTool)wChart.Chart.Tools[0]).SetCurrentZoom(Request,
+ zoomedState,DeterminePostBackMode());
+ if (zoomedState==null)
+ Session.Remove(wChart.ClientID+"Zoomed");
+ else
+ Session.Add(wChart.ClientID+"Zoomed",zoomedState);
+ }
+
+
+
+
+ Use method to set Zoom where there are no post elements on the
+ page that might send a page request.
+
+ From the WebForm call CheckZoom after loading Charts in Page_Load.
+
+ private void CheckZoom(WebChart wChart)
+ {
+ ArrayList zoomedState=(ArrayList)Session[wChart.ClientID+"Zoomed"];
+ zoomedState=((Steema.TeeChart.Tools.ZoomTool)wChart.Chart.Tools[0]).SetCurrentZoom(Request,
+ zoomedState);
+ if (zoomedState==null)
+ Session.Remove(wChart.ClientID+"Zoomed");
+ else
+ Session.Add(wChart.ClientID+"Zoomed",zoomedState);
+ }
+
+
+
+ AxisLabel event handler
+
+
+ GetNextAxisLabel event handler
+
+
+ GetLegendRect event handler
+
+
+ GetLegendPos event handler
+
+
+ GetLegendText event handler
+
+
+ Scroll event handler
+
+
+ Serialize Type event handler
+
+
+
+
+ Required designer variable.
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Required method for Designer support - do not modify
+ the contents of this method with the code editor.
+
+
+
+
+ Determines when Chart is being printed.
+
+
+
+
+ True when the Chart is internally drawing into a Metafile image.
+
+
+
+
+ Adds a new Series into Chart.
+
+
+
+
+ Enables/Disables Repainting of Chart when points are added.
+
+
+
+
+ Obsolete. Enables or disables the internal timer used to auto-repaint Chart.
+ Use a standard Timer component to call tChart1.Invalidate() instead.
+
+
+
+
+ Returns a Bitmap image filled with Chart.
+
+
+
+
+ Returns a Metafile image filled with Chart.
+
+
+
+
+ Obsolete. Gets or sets the interval in milliseconds used to auto-repaint Chart.
+ Use a standard Timer component to call tChart1.Invalidate() instead.
+
+
+
+
+ Reset the Chart to its default values.
+
+
+
+
+ Obsolete. Determines properties of frame around chart back wall.
+ Use tChart1.Walls.Back.Pen property instead.
+
+
+
+
+ Obsolete. Returns number of Series in Chart.
+ Use tChart1.Series.Count property instead.
+
+
+
+
+ Event arguments class used by AllowScroll chart event.
+
+
+
+ Common Series event handler
+
+
+ Scroll event handler
+
+
+
+ Paints the Chart internally to calculate Chart values that would otherwise be calculated only when
+ the Chart is actually Painted to the screen.
+
+
+
+
+ Paints the Chart in your preferred Canvas and region.
+
+
+
+
+ Triggers GetLegendPos event.
+
+
+
+
+ Gets or sets the site of the TChart control.
+
+
+
+
+ Shows the TeeChart editor dialog.
+
+
+
+
+ Shows the TeeChart editor dialog.
+
+
+
+
+ Defines the Chart to display.
+
+
+
+
+ Sets the text for the Footer, Header, SubFooter and SubHeader.
+
+
+
+
+ Background visible attributes.
+
+
+
+
+ Printing related properties.
+
+
+
+
+ Accesses multiple page characteristics of the Chart.
+
+
+
+ Legend characteristics
+
+
+
+ Defines Text shown at top of the Chart.
+
+
+
+
+ Defines Text shown directly below Header.
+
+
+
+
+ Determines Font characteristics.
+
+
+
+
+ Gets the foreground color of the TChart object.
+
+
+
+
+ Defines Text shown at the bottom of the Chart.
+
+
+
+
+ Accesses the Zoom characteristics of the Chart.
+
+
+
+
+ Accesses Panning characteristics.
+
+
+
+
+ Defines Text shown directly above Footer.
+
+
+
+
+ Accesses view characteristics of the Chart.
+
+
+
+
+
+
+
+
+
+ Use the Graphics3D property to access TeeChart Draw properties and methods.
+
+
+
+
+ Collection of Series contained in this Chart.
+
+
+
+
+ Collection of Tool components contained in this Chart.
+
+
+
+
+ Collection of Animation components contained in this Chart.
+
+
+
+
+ Accesses left, bottom and back wall characteristics of the Chart.
+
+
+
+
+ Collection of predefined and custom axis objects.
+
+
+
+
+ Accesses Chart export properties and methods.
+
+
+
+
+ Accesses Chart import properties and methods.
+
+
+
+
+ Default indexer ( Example: tChart1[0].Color=Color.Blue; is equivalent to tChart1.Series[0].Color=Color.Blue; )
+
+
+
+ This is a different way to handle the _redrawNeeded flag
+
+
+
+ Axis Label EventArgs. See
+
+
+
+
+ Sets Type to add to Serialization.
+
+
+
+
+ Name of Type to Serialize
+
+
+
+
+ Axis Label EventArgs. See
+
+
+
+
+ Read only. Label Series
+
+
+
+
+ Read only. Index of Label
+
+
+
+
+ Modifies the Axis Label text.
+
+
+
+
+ 'Get Next' Axis Label EventArgs. See
+
+
+
+
+ Legend Rectangle EventArgs. See
+
+
+
+
+ Legend Text EventArgs. See
+
+
+
+
+ Sets the Text for the Legend values.
+
+
+
+
+ Legend Position EventArgs. See
+
+
+
+
+ Summary description for Theme.
+
+
+
+
+ BlackIsBackTheme.
+
+
+
+
+ BlueSkyTheme.
+
+
+
+
+ Summary description for BusinessTheme.
+
+
+
+
+ Summary description for ExcelTheme.
+
+
+
+
+ Summary description for DefaultTheme.
+
+
+
+
+ Summary description for ExcelTheme.
+
+
+
+
+ Summary description for GrayscaleTheme.
+
+
+
+
+ Summary description for CustomTheme.
+
+
+
+
+ Summary description for WebTheme.
+
+
+
+
+ Summary description for XPTheme.
+
+
+
+
+ Underlying Title characteristics
+
+
+
+
+ Resizes Header and Footer frames to full Chart dimensions when True.
+
+
+
+
+ Sets how TChart Header and Footer text will be aligned within Chart rectangle.
+
+
+
+
+ Gets/Sets Left position of Header or Footer Text.
+
+
+
+
+ Gets/Sets Top position of Header or Footer Text.
+
+
+
+
+ Returns if mouse cursor is inside TChartTitle bound rectangle.
+
+
+
+
+ Returns if mouse cursor is inside TChartTitle bound rectangle.
+
+
+
+
+ Text displayed above Chart
+
+
+
+
+ Text displayed below Chart
+
+
+
+
+ Describes a number of different DateTime steps.
+
+
+
+
+ Defines a OneMicrosecond TimeSpan.
+
+
+
+
+ Defines a OneMillisecond TimeSpan.
+
+
+
+
+ Defines a OneSecond TimeSpan.
+
+
+
+
+ Defines a FiveSeconds TimeSpan.
+
+
+
+
+ Defines a TenSeconds TimeSpan.
+
+
+
+
+ Defines a FifteenSeconds TimeSpan.
+
+
+
+
+ Defines a ThirtySeconds TimeSpan.
+
+
+
+
+ Defines a OneMinute TimeSpan.
+
+
+
+
+ Defines a FiveMinutes TimeSpan.
+
+
+
+
+ Defines a TenMinutes TimeSpan.
+
+
+
+
+ Defines a FifteenMinutes TimeSpan.
+
+
+
+
+ Defines a ThirtyMinutes TimeSpan.
+
+
+
+
+ Defines a OneHour TimeSpan.
+
+
+
+
+ Defines a TwoHours TimeSpan.
+
+
+
+
+ Defines a SixHours TimeSpan.
+
+
+
+
+ Defines a TwelveHours TimeSpan.
+
+
+
+
+ Defines a OneDay TimeSpan.
+
+
+
+
+ Defines a TwoDays TimeSpan.
+
+
+
+
+ Defines a ThreeDays TimeSpan.
+
+
+
+
+ Defines a OneWeek TimeSpan.
+
+
+
+
+ Defines a HalfMonth TimeSpan.
+
+
+
+
+ Defines a OneMonth TimeSpan.
+
+
+
+
+ Defines a TwoMonths TimeSpan.
+
+
+
+
+ Defines a ThreeMonths TimeSpan.
+
+
+
+
+ Defines a FourMonths TimeSpan.
+
+
+
+
+ Defines a SixMonths TimeSpan.
+
+
+
+
+ Defines a OneYear TimeSpan.
+
+
+
+
+ Defines an automatic TimeSpan.
+
+
+
+
+ Chart utility procedures
+
+
+
+
+ Array of double values to define DateTimeSteps.
+
+
+
+
+ Returns a degree value from a radian value.
+
+
+
+
+ Returns a radian value from a degree value.
+
+
+
+
+ Evaluates and returns a value as an Axis double scale that may be
+ used to set the .
+
+ Steema.TeeChart.DateTimeSteps
+ Axis value
+
+
+
+ Converts values to their respective percentages
+
+
+
+ Internal use. Sort event handler
+
+
+ Internal use. Sort event handler
+
+
+
+ List of chart Tool classes.
+
+
+
+
+ Returns the index in AnimationTypesOf list of a given tool instance.
+
+ Animation to search its type in list
+
+
+
+ Returns the index in AnimationTypesOf list of a given tool instance.
+
+ Animation to search its type in list
+
+
+
+ Returns the index in ToolTypesOf list of a given tool instance.
+
+ Tool to search its type in list
+
+
+
+ Returns the index in ToolTypesOf list of a given tool instance.
+
+ Tool to search its type in list
+
+
+
+ List of chart Function types.
+
+
+
+
+ Shows a message box dialog showing a TeeChart Exception.
+
+ Additional custom text to display at dialog.
+ True if user selects "Ok"
+
+
+
+ Shows a message box dialog asking confirmation.
+
+ Additional custom text to display at dialog.
+ True if user selects "Yes"
+
+
+
+ Shows a dialog asking confirmation with Yes and No options.
+
+ Additional custom text to show at dialog
+ Returns True if user selects "Yes".
+
+
+
+ Int returns the integer part of X; that is, X rounded toward zero.
+
+
+
+
+ Gets or sets whether the is calculated or not (>= .NET 2.0).
+
+
+
+
+ Gets the number of Frames per second drawn by the chart (>= .NET 2.0).
+
+
+
+
+ Characteristics of Wall Panel that complements an Axis
+
+
+
+
+ Applies a darker shade to 3D Chart Walls when true.
+
+
+
+
+ Sets the Chart Wall thickness.
+
+
+
+
+ Access to Wall and overall Wall display characteristics
+
+
+
+
+ Wall Panel at left of Chart
+
+
+
+
+ Use this method to paint a left wall at rectangle r.
+
+
+
+
+ Specifies the color used to fill the LeftWall background.
+
+
+
+
+ Wall Panel at right of Chart
+
+
+
+
+ Use this method to paint a right wall at rectangle r.
+
+
+
+
+ Shows/Hides Right Wall.
+
+
+
+
+ Wall Panel at rear of Chart
+
+
+
+
+ Use this method to paint a back wall at rectangle r.
+
+
+
+
+ Wall Panel at bottom of Chart
+
+
+
+
+ Use this method to paint a bottom wall at rectangle r.
+
+
+
+
+ Defines the pen and brush used to fill the left chart side.
+
+
+
+
+ Defines the pen and brush used to fill the right chart side.
+
+
+
+
+ Defines the pen and brush used to fill the back chart side.
+
+
+
+
+ Defines the pen and brush used to fill the bottom chart side.
+
+
+
+
+ Shows / Hides all Chart walls.
+
+
+
+
+ Shows all Chart walls in 3D.
+
+
+
+
+ Use this method to paint walls at rectangle r.
+
+
+
+
+ Calculates the Wall thickness of the specified Axis.
+
+
+
+
+ TempChartStyle is used with to define how temporary WebCharts are stored.
+
+
+
+ Charts save as temporary image file. Files are not automatically deleted.
+ TeeChart uses the location described in the Virtual folder registry entry
+ to save the temporary file. See Helpfile for details.
+
+
+ Charts save as Session variables in Image format. No files are created on disk and the Session variables are automatically removed.
+ Requires GetChart.aspx file configured for session to retrieve Chart. See Helpfile.
+
+ string chartName=Request.QueryString["Chart"];
+ if (Session[chartName]!=null)
+ {
+ MemoryStream chartStream = new MemoryStream();
+ chartStream=((MemoryStream)Session[chartName]);
+ Response.OutputStream.Write(chartStream.ToArray(),0,(int)chartStream.Length);
+ chartStream.Close();
+ }
+
+
+
+ Charts save as Page cache variables in Image format. No files are created on disk. Cache auto-expires.
+ Requires GetChart.aspx file configured for cache to retrieve Chart. See Helpfile.
+
+ string chartName=Request.QueryString["Chart"];
+ if (Page.Cache[chartName]!=null)
+ {
+ MemoryStream chartStream = new MemoryStream();
+ chartStream=((MemoryStream)Page.Cache[chartName]);
+ Response.OutputStream.Write(chartStream.ToArray(),0,(int)chartStream.Length);
+ chartStream.Close();
+ }
+
+
+
+
+
+ WebChart control.
+
+
+
+ Series Web event handler
+
+
+ Web Click event handler
+
+
+
+ Checks for presence of BeforeDrawAxes event
+
+
+
+
+ Checks for presence of BeforeDrawSeries event
+
+
+
+
+ Checks for presence of AfterDraw event
+
+
+
+
+ Checks for presence of BeforeDraw event
+
+
+
+
+ Checks for presence of GetAxisLabel event
+
+
+
+
+ Checks for presence of GetNextAxisLabel event
+
+
+
+
+ Checks for presence of GetAxesChartRect event
+
+
+
+
+ Checks for presence of ClickSeries event
+
+
+
+
+ Checks for presence of ClickBackground event
+
+
+
+
+ Checks for presence of ClickAxis event
+
+
+
+
+ Checks for presence of ClickTitle event
+
+
+
+
+ Checks for presence of ClickLegend event
+
+
+
+
+ Checks for presence of GetLegendRectangle event
+
+
+
+
+ Checks for presence of GetLegendPos event
+
+
+
+
+ Checks for presence of GetLegendText event
+
+
+
+
+ Postback event support. Internal use.
+
+
+
+
+ Postback event support. Internal use.
+
+
+
+
+ Postback event support. Internal use.
+
+
+
+
+ When True TeeChart's WebChart will respond to user mouseclick events
+
+
+
+
+ Alternative location for GetChart.aspx if not housed at same location as project folder.
+ Use the GetChart script when 'Session' is selected for Chart streaming.
+
+
+
+
+ When set to 'Session' TeeChart streams the Chart to a Session variable for direct us in the WebForm (no temporary file).
+ When the 'Session' option is selected add a script file to return the TeeChart.
+
+
+ Add a new WebForm to the Web project, name it 'GetChart.aspx'.
+ In the Page_Load event place the following code:
+
+ private void Page_Load(object sender, System.EventArgs e)
+ {
+
+ string chartName=Request.QueryString["Chart"];
+
+ if (Session[chartName]!=null)
+ {
+ System.IO.MemoryStream chartStream = new System.IO.MemoryStream();
+ chartStream=((System.IO.MemoryStream)Session[chartName]);
+ Response.OutputStream.Write(chartStream.ToArray(),0,(int)chartStream.Length);
+ chartStream.Close();
+ Session.Remove(chartName);
+ }
+ }
+
+
+
+
+ Advanced use only. Put any special path prefix condition for the httpHandler (Eg. '~/') to override default path relative to application root.
+
+
+
+
+ Internal use. Creates the Designtime Chart view.
+
+ html string used to call Chart at designtime
+
+
+
+ Internal use. Updates the inplace WebForm HTML as result of Editor changes
+
+
+
+
+ Internal use. Calls Editor.
+
+
+
+
+ Chart configuration.
+
+
+
+
+ Use the SetChart method to set the WebChart's Chart at runtime
+
+
+
+
+
+ Chart Height in Pixels
+
+
+
+
+ Chart Width in Pixels
+
+
+
+
+ Reads XML stored Base64 Chart. Not used
+
+
+
+
+ Chart Image Format
+
+
+
+
+ Clean up any resources being used.
+
+
+
+
+ Reset the WebChart to its default values.
+
+
+
+
+ For future use.
+
+
+
+
+ Writes Designtime Chart
+
+
+
+
+ Write Runtime Chart
+
+
+
+
+ The method uses the TeeChart registry keys to confirm location of the
+ temporary filestore
+
+
+
+
+ Support image retrieval as Stream to browser.
+ You should add the following lines to the project's Web.config file
+ somewhere between the <system.web> tags
+
+
+
+
+
+
+
+ Internal use. Zoom and scroll support
+
+
+
+
+ Returns the active state of Chart Zoom and Scroll.
+
+
+
+
+ Sets a keyboard button as an extra condition to initiate the zoom.
+
+
+
+
+ Swaps the X0 and X1 coordinates when X1 is lower than X0.
+
+
+
+
+ Internal use. Starts a Zoom or Scroll from the co-ordinates X,Y.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Deny scrolling.
+
+
+
+
+ Allow only Horizontal Scrolling.
+
+
+
+
+ Allow only Vertical Scrolling.
+
+
+
+
+ Allow complete Horizontal and Vertical Scrolling.
+
+
+
+
+ Chart mouse scroll characteristics
+
+
+
+
+ Enables/Disables selected ScrollModes.
+
+
+
+
+ Sets the Mousebutton to use for the scroll action.
+
+
+
+
+ Describes the possible values of the property.
+
+
+
+
+ Allow only Horizontal Zooming.
+
+
+
+
+ Allow only Vertical Zooming.
+
+
+
+
+ Allow both Horizontal and Vertical Zooming.
+
+
+
+
+ Used at tChart1.Zoom property, determines mouse zoom attributes.
+
+
+
+
+ Controls the animated zoom "speed" (inertia)
+
+
+
+
+ Creates a new Zoom instance.
+
+
+
+
+ Collection that stores Axes zoom history to be used when Zoom is true.
+
+
+
+
+ Allows runtime Zoom by dragging the mouse when True.
+
+
+
+
+ Animates Zoom in sequenced steps when True.
+
+
+
+
+ Brush used to fill mousedragged zoom area.
+
+
+
+
+ Sets the direction of the zoom on a selected area.
+
+
+
+
+ Determines number of steps of the animated zooming sequence.
+
+
+
+
+ Sets min. number of pixels to actuate zoom action.
+
+
+
+
+ Sets the mousebutton to use for the zoom action.
+
+
+
+
+ Pen used to draw surrounding rectangle of zoom area.
+
+
+
+
+ Zooms the Chart rectangle. Units pixels
+
+
+
+
+ Displays rectangle while dragging Chart for zoom operation.
+
+
+
+
+ Overrides base SetChart method to adjust pen and brush chart properties.
+
+
+
+
+ TeeChart uses Windows' native pen for speed when drawing the zoom rectangle.
+ If you start to set Zoom Pen properties but wish to override their use and
+ return to the native (non-coloured) Windows pen please be sure to set this
+ property to true.
+
+
+
+
+ Rescales the Chart Axis to their Maximum and Minimum values.
+
+
+
+
+ Determines if Chart axis scales fit all Chart points or not.
+
+
+
+
+ Applies the specified PercentZoom Zoom In/Out to the current Axis scales.
+
+
+
+
diff --git a/BikeSharingSystem/bin/Debug/Troschuetz.Random.dll b/BikeSharingSystem/bin/Debug/Troschuetz.Random.dll
new file mode 100644
index 0000000..58ebf23
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/Troschuetz.Random.dll differ
diff --git a/BikeSharingSystem/bin/Debug/Troschuetz.Random.pdb b/BikeSharingSystem/bin/Debug/Troschuetz.Random.pdb
new file mode 100644
index 0000000..76b9312
Binary files /dev/null and b/BikeSharingSystem/bin/Debug/Troschuetz.Random.pdb differ
diff --git a/BikeSharingSystem/bin/Debug/Troschuetz.Random.xml b/BikeSharingSystem/bin/Debug/Troschuetz.Random.xml
new file mode 100644
index 0000000..0a0165e
--- /dev/null
+++ b/BikeSharingSystem/bin/Debug/Troschuetz.Random.xml
@@ -0,0 +1,8975 @@
+
+
+
+ Troschuetz.Random
+
+
+
+
+ Abstract class which implements some features shared across all distributions.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+ Builds a distribution using given generator.
+
+ The generator that will be used by the distribution.
+ Given generator is null.
+
+
+
+ Gets a value indicating whether the random number distribution can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Gets the object that is used as underlying random number generator.
+
+
+
+
+ Resets the random number distribution, so that it produces the same random number
+ sequence again.
+
+
+ , if the random number distribution was reset; otherwise, .
+
+
+
+
+ Provides generation of beta distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Beta
+ distribution and Xycoon - Beta Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of beta distributed random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of beta distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of beta distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of beta distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of beta distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of beta distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of beta distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether beta distribution is defined under given parameters. The default
+ definition returns true if alpha and beta are greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a beta distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of beta-prime distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Xycoon - Inverted Beta Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of beta-prime distributed
+ random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of beta-prime distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of beta-prime distributed
+ random numbers.
+
+
+ is less than or equal to one.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of beta-prime distributed
+ random numbers.
+
+
+ is less than or equal to one.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of beta prime distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta prime distributed random numbers.
+
+
+ or are less than or equal to one.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of beta prime distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta prime distributed random numbers.
+
+
+ or are less than or equal to one.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of beta prime distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta prime distributed random numbers.
+
+ is .
+
+ or are less than or equal to one.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 1.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 1.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether beta prime distribution is defined under given parameters. The
+ default definition returns true if alpha and beta are greater than one; otherwise, it
+ returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a beta prime distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of cauchy distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Cauchy
+ distribution and Xycoon - Cauchy Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of cauchy distributed random numbers.
+
+
+
+
+ Stores the parameter gamma which is used for generation of cauchy distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha of cauchy distributed random numbers which is used for
+ their generation.
+
+
+ is equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter gamma which is used for generation of cauchy distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of cauchy distributed random numbers.
+
+
+ The parameter gamma which is used for generation of cauchy distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of cauchy distributed random numbers.
+
+
+ The parameter gamma which is used for generation of cauchy distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of cauchy distributed random numbers.
+
+
+ The parameter gamma which is used for generation of cauchy distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether cauchy distribution is defined under given parameters. The default
+ definition returns true if gamma is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a cauchy distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of chi distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Chi distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Represents coefficients for the Lanczos approximation of the Gamma function.
+
+
+
+
+ Stores the parameter alpha which is used for generation of chi distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of chi distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of chi distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of chi distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of chi distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Represents a Lanczos approximation of the Gamma function.
+
+ A double-precision floating point number.
+
+ A double-precision floating point number representing an approximation of Gamma( ).
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether chi distribution is defined under given parameter. The default
+ definition returns true if alpha is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a chi distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of chi-square distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Chi-square distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of chi square distributed
+ random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of chi-square distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of chi square distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of chi square distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of chi square distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether chi square distribution is defined under given parameter. The
+ default definition returns true if alpha is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a chi square distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of continuous uniformly distributed random numbers.
+
+
+ The implementation of the type bases upon
+ information presented on
+ Wikipedia -
+ Uniform distribution (continuous).
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of uniformly distributed random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of uniformly distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of uniformly distributed
+ random numbers.
+
+
+ is greater than .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of uniformly distributed
+ random numbers.
+
+
+ is greater than .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class,
+ using a as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class,
+ using a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class,
+ using the specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class,
+ using a as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ The parameter beta which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ is greater than .
+
+
+
+
+ Initializes a new instance of the class,
+ using a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ The parameter beta which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ is greater than .
+
+
+
+
+ Initializes a new instance of the class,
+ using the specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ The parameter beta which is used for generation of continuous uniform distributed
+ random numbers.
+
+ is .
+
+ is greater than .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is less than or equal to ; otherwise, .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to ;
+ otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether continuous uniform distribution is defined under given parameters.
+ The default definition returns true if alpha is less than or equal to beta; otherwise,
+ it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a continuous uniform distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of erlang distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Erlang
+ distribution and Xycoon - Erlang Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter lambda which is used for generation of rayleigh distributed random numbers.
+
+
+
+
+ Stores the parameter alpha which is used for generation of rayleigh distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of erlang distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter lambda which is used for generation of erlang distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of erlang distributed random numbers.
+
+
+ The parameter lambda which is used for generation of erlang distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of erlang distributed random numbers.
+
+
+ The parameter lambda which is used for generation of erlang distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of erlang distributed random numbers.
+
+
+ The parameter lambda which is used for generation of erlang distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether erlang distribution is defined under given parameters. The default
+ definition returns true if alpha and lambda are greater than zero; otherwise, it
+ returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning an erlang distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of exponential distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Exponential distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter lambda which is used for generation of exponential distributed
+ random numbers.
+
+
+
+
+ Gets or sets the parameter lambda which is used for generation of exponential
+ distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter lambda which is used for generation of exponential distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter lambda which is used for generation of exponential distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+
+ The parameter lambda which is used for generation of exponential distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether exponential distribution is defined under given parameter. The
+ default definition returns true if lambda is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning an exponential distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of Fisher-Snedecor distributed random numbers.
+
+
+ The implementation of the type bases upon
+ information presented on Wikipedia - F-distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of Fisher-Snedecor distributed
+ random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of Fisher-Snedecor distributed
+ random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of Fisher-Snedecor
+ distributed random numbers.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of Fisher-Snedecor
+ distributed random numbers.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using
+ a as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using
+ a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using
+ a as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of fisher snedecor distributed random numbers.
+
+
+ The parameter beta which is used for generation of fisher snedecor distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of fisher snedecor distributed random numbers.
+
+
+ The parameter beta which is used for generation of fisher snedecor distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of fisher snedecor distributed random numbers.
+
+
+ The parameter beta which is used for generation of fisher snedecor distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether fisher snedecor distribution is defined under given parameters. The
+ default definition returns true if alpha and beta are greater than zero; otherwise, it
+ returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a fisher snedecor distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of Fisher-Tippett distributed random numbers.
+
+
+ The implementation of the type bases upon
+ information presented on
+ Wikipedia - Fisher-Tippett distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of fisher tippett distributed
+ random numbers.
+
+
+
+
+ Stores the parameter mu which is used for generation of fisher tippett distributed
+ random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of Fisher-Tippett
+ distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter mu which is used for generation of Fisher-Tippett
+ distributed random numbers.
+
+
+ is equal to .
+
+
+ Call to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using
+ a as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using
+ a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using
+ a as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of fisher tippett distributed random numbers.
+
+
+ The parameter mu which is used for generation of fisher tippett distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of fisher tippett distributed random numbers.
+
+
+ The parameter mu which is used for generation of fisher tippett distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of fisher tippett distributed random numbers.
+
+
+ The parameter mu which is used for generation of fisher tippett distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether fisher tippett distribution is defined under given parameters. The
+ default definition returns true if alpha is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a fisher tippett distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of gamma distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Gamma distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of gamma distributed random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of gamma distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of gamma distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of gamma distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of gamma distributed random numbers.
+
+
+ The parameter beta which is used for generation of gamma distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of gamma distributed random numbers.
+
+
+ The parameter beta which is used for generation of gamma distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of gamma distributed random numbers.
+
+
+ The parameter beta which is used for generation of gamma distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether gamma distribution is defined under given parameters. The default
+ definition returns true if alpha and beta are greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a gamma distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of laplace distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Laplace distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of laplace distributed random numbers.
+
+
+
+
+ Stores the parameter mu which is used for generation of laplace distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of laplace distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter mu which is used for generation of laplace distributed
+ random numbers.
+
+
+ is equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of laplace distributed random numbers.
+
+
+ The parameter mu which is used for generation of laplace distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of laplace distributed random numbers.
+
+
+ The parameter mu which is used for generation of laplace distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of laplace distributed random numbers.
+
+
+ The parameter mu which is used for generation of laplace distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether laplace distribution is defined under given parameters. The default
+ definition returns true if alpha is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a laplace distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of logistic distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Logistic Distribution and the implementation in the
+ Boost Random Number Library.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter mu which is used for generation of logistic distributed random numbers.
+
+
+
+
+ Stores the parameter sigma which is used for generation of logistic distributed random numbers.
+
+
+
+
+ Gets or sets the parameter mu which is used for generation of logistic distributed
+ random numbers.
+
+
+ is equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter sigma which is used for generation of logistic distributed
+ random numbers.
+
+
+ is less than zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter mu which is used for generation of logistic distributed random numbers.
+
+
+ The parameter sigma which is used for generation of logistic distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter mu which is used for generation of logistic distributed random numbers.
+
+
+ The parameter sigma which is used for generation of logistic distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter mu which is used for generation of logistic distributed random numbers.
+
+
+ The parameter sigma which is used for generation of logistic distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether logistic distribution is defined under given parameters. The default
+ definition returns true if sigma is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a logistic distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of lognormal distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Lognormal Distribution and the implementation in the
+ Boost Random Number Library.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter mu which is used for generation of lognormal distributed random numbers.
+
+
+
+
+ Stores the parameter sigma which is used for generation of lognormal distributed random numbers.
+
+
+
+
+ Gets or sets the parameter mu which is used for generation of lognormal distributed
+ random numbers.
+
+
+ is equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter sigma which is used for generation of lognormal distributed
+ random numbers.
+
+
+ is less than zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter mu which is used for generation of lognormal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of lognormal distributed random numbers.
+
+
+ is less than zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter mu which is used for generation of lognormal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of lognormal distributed random numbers.
+
+
+ is less than zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter mu which is used for generation of lognormal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of lognormal distributed random numbers.
+
+ is .
+
+ is less than zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to 0.0; otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether lognormal distribution is defined under given parameters. The
+ default definition returns true if sigma is greater than or equal to zero; otherwise,
+ it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a lognormal distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of normal distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Normal
+ distribution and the implementation in the
+ Communication
+ Networks Class Library.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter mu which is used for generation of normal distributed random numbers.
+
+
+
+
+ Stores the parameter sigma which is used for generation of normal distributed random numbers.
+
+
+
+
+ Gets or sets the parameter mu which is used for generation of normal distributed random numbers.
+
+
+ is equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter sigma which is used for generation of normal distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter mu which is used for generation of normal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of normal distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter mu which is used for generation of normal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of normal distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter mu which is used for generation of normal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of normal distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether normal distribution is defined under given parameters. The default
+ definition returns true if sigma is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a normal distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of pareto distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia - Pareto
+ distribution and Xycoon - Pareto Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter beta which is used for generation of pareto distributed random numbers.
+
+
+
+
+ Stores the parameter alpha which is used for generation of pareto distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of pareto distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of pareto distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of pareto distributed random numbers.
+
+
+ The parameter beta which is used for generation of pareto distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of pareto distributed random numbers.
+
+
+ The parameter beta which is used for generation of pareto distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of pareto distributed random numbers.
+
+
+ The parameter beta which is used for generation of pareto distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether pareto distribution is defined under given parameters. The default
+ definition returns true if alpha and beta are greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a pareto distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of power distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Xycoon - Power Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of power distributed random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of power distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of power distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of power distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of power distributed random numbers.
+
+
+ The parameter beta which is used for generation of power distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of power distributed random numbers.
+
+
+ The parameter beta which is used for generation of power distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of power distributed random numbers.
+
+
+ The parameter beta which is used for generation of power distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether power distribution is defined under given parameters. The default
+ definition returns true if alpha and beta are greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a power distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of rayleigh distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Rayleigh Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter sigma which is used for generation of rayleigh distributed random numbers.
+
+
+
+
+ Gets or sets the parameter sigma which is used for generation of rayleigh distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter sigma which is used for generation of rayleigh distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter sigma which is used for generation of rayleigh distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter sigma which is used for generation of rayleigh distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether rayleigh distribution is defined under given parameter. The default
+ definition returns true if sigma is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a rayleigh distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of t-distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Student's t-distribution and Xycoon -
+ Student t Distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter nu which is used for generation of t-distributed random numbers.
+
+
+
+
+ Gets or sets the parameter nu which is used for generation of t-distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter nu which is used for generation of student's t distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter nu which is used for generation of student's t distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter nu which is used for generation of student's t distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether student's t distribution is defined under given parameter. The
+ default definition returns true if nu is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a student's t distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of triangular distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Triangular distribution and the implementation in the
+ Boost Random Number Library.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of triangular distributed
+ random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of triangular distributed random numbers.
+
+
+
+
+ Stores the parameter gamma which is used for generation of triangular distributed
+ random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of triangular distributed
+ random numbers.
+
+
+ is greater than or equal to , or
+ is greater than .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of triangular distributed
+ random numbers.
+
+
+ is greater than or equal to , or
+ is less than .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter gamma which is used for generation of triangular distributed
+ random numbers.
+
+
+ is greater than , or is
+ less than .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of triangular distributed random numbers.
+
+
+ The parameter beta which is used for generation of triangular distributed random numbers.
+
+
+ The parameter gamma which is used for generation of triangular distributed random numbers.
+
+
+ is greater than or equal to , or
+ is greater than , or
+ is less than .
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of triangular distributed random numbers.
+
+
+ The parameter beta which is used for generation of triangular distributed random numbers.
+
+
+ The parameter gamma which is used for generation of triangular distributed random numbers.
+
+
+ is greater than or equal to , or
+ is greater than , or
+ is less than .
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of triangular distributed random numbers.
+
+
+ The parameter beta which is used for generation of triangular distributed random numbers.
+
+
+ The parameter gamma which is used for generation of triangular distributed random numbers.
+
+ is .
+
+ is greater than or equal to , or
+ is greater than , or
+ is less than .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is less than , and less than or equal
+ to ; otherwise, .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than , and greater than
+ or equal to ; otherwise, .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to , and
+ greater than or equal to ; otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether triangular distribution is defined under given parameters. The
+ default definition returns true if alpha is less than beta, and if alpha is less than
+ or equal to gamma, and if beta is greater than or equal to gamma; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a triangular distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of weibull distributed random numbers.
+
+
+ The implementation of the type bases upon information
+ presented on Wikipedia -
+ Weibull distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Represents coefficients for the Lanczos approximation of the Gamma function.
+
+
+
+
+ Stores the parameter alpha which is used for generation of weibull distributed random numbers.
+
+
+
+
+ Stores the parameter lambda which is used for generation of weibull distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of weibull distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter lambda which is used for generation of erlang distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of weibull distributed random numbers.
+
+
+ The parameter lambda which is used for generation of weibull distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of weibull distributed random numbers.
+
+
+ The parameter lambda which is used for generation of weibull distributed random numbers.
+
+
+ or are less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of weibull distributed random numbers.
+
+
+ The parameter lambda which is used for generation of weibull distributed random numbers.
+
+ is .
+
+ or are less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Represents a Lanczos approximation of the Gamma function.
+
+ A double-precision floating point number.
+
+ A double-precision floating point number representing an approximation of Gamma( ).
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether weibull distribution is defined under given parameters. The default
+ definition returns true if alpha and lambda are greater than zero; otherwise, it
+ returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a weibull distributed floating point random number.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of bernoulli distributed random numbers.
+
+
+ The bernoulli distribution generates only discrete numbers.
The implementation of the
+ type bases upon information presented on
+ Wikipedia - Bernoulli distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of bernoulli distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of bernoulli distributed
+ random numbers.
+
+
+ is less than zero or greater than one.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of bernoulli distributed random numbers.
+
+
+ is less than zero or greater than one.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of bernoulli distributed random numbers.
+
+
+ is less than zero or greater than one.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of bernoulli distributed random numbers.
+
+ is .
+
+ is less than zero or greater than one.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to 0.0, and less than or equal
+ to 1.0; otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether bernoulli distribution is defined under given parameter. The default
+ definition returns true if alpha is greater than or equal to zero and less than or
+ equal to one; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a bernoulli distributed 32-bit signed integer.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of binomial distributed random numbers.
+
+
+ The binomial distribution generates only discrete numbers.
The implementation of the
+ type bases upon information presented on
+ Wikipedia - Binomial distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter alpha which is used for generation of binomial distributed random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of binomial distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of binomial distributed
+ random numbers.
+
+
+ is less than zero or greater than one.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of binomial distributed
+ random numbers.
+
+
+ is less than zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of binomial distributed random numbers.
+
+
+ The parameter beta which is used for generation of binomial distributed random numbers.
+
+
+ is less than zero or greater than one, or
+ is less than zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of binomial distributed random numbers.
+
+
+ The parameter beta which is used for generation of binomial distributed random numbers.
+
+
+ is less than zero or greater than one, or
+ is less than zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of binomial distributed random numbers.
+
+
+ The parameter beta which is used for generation of binomial distributed random numbers.
+
+ is .
+
+ is less than zero or greater than one, or
+ is less than zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to 0.0, and less than or equal
+ to 1.0; otherwise, .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to 0; otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether binomial distribution is defined under given parameters. The default
+ definition returns true if alpha is greater than or equal to zero and less than or
+ equal to one, and if beta is greater than or equal to zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a binomial distributed 32-bit signed integer.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Implements the categorical distribution. For details about this distribution, see
+ Wikipedia - Categorical
+ distribution. This distribution is sometimes called the Discrete distribution.
+
+
+ The distribution is parameterized by a vector of ratios: in other words, the parameter does
+ not have to be normalized and sum to 1. The reason is that some vectors can't be exactly
+ normalized to sum to 1 in floating point representation.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default number of values used for categorical distribution, if not specified otherwise.
+
+
+
+
+ Stores the cumulative distribution of current normalized weights.
+
+
+
+
+ Stores the unnormalized categorical weights.
+
+
+
+
+ Gets or sets the normalized probability vector of the categorical distribution.
+
+ is null.
+ is empty.
+
+ Any of the weights in are negative or they sum to zero.
+
+
+ Sometimes the normalized probability vector cannot be represented exactly in a floating
+ point representation.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter valueCount which is used for generation of binomial distributed random
+ numbers by setting the number of equi-distributed "weights" the distribution will have.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter valueCount which is used for generation of binomial distributed random
+ numbers by setting the number of equi-distributed "weights" the distribution will have.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ An enumerable of nonnegative weights: this enumerable does not need to be normalized as
+ this is often impossible using floating point arithmetic.
+
+ is null.
+ is empty.
+
+ Any of the weights in are negative or they sum to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ An enumerable of nonnegative weights: this enumerable does not need to be normalized as
+ this is often impossible using floating point arithmetic.
+
+ is null.
+ is empty.
+
+ Any of the weights in are negative or they sum to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+
+ The parameter valueCount which is used for generation of binomial distributed random
+ numbers by setting the number of equi-distributed "weights" the distribution will have.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using
+ the specified as underlying random number generator.
+
+ An object.
+
+ An enumerable of nonnegative weights: this enumerable does not need to be normalized as
+ this is often impossible using floating point arithmetic.
+
+
+ or are null.
+
+ is empty.
+
+ Any of the weights in are negative or they sum to zero.
+
+
+
+
+ Generates a list containing only ones.
+
+ The number of ones list will have.
+ A list containing only ones.
+
+
+
+ Determines whether categorical distribution is defined under given weights.
+
+
+ The weights which are used for generation of categorical distributed random numbers.
+ Weights do not need to be normalized as this is often impossible using floating point arithmetic.
+
+
+ False if any of the weights is negative or if the sum of parameters is 0.0; otherwise,
+ it returns true.
+
+
+
+
+ Computes the unnormalized cumulative distribution function and other attributes for the
+ distribution (like mean, variance, and so on).
+
+
+ Also remember to change
+ when changing this method.
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Returns a string that represents the current object.
+
+ A string that represents the current object.
+
+
+
+ Determines whether categorical distribution is defined under given weights. The default
+ definition returns false if any of the weights is negative or if the sum of parameters
+ is 0.0; otherwise, it returns true.
+
+ Weights do not need to be normalized as this is often impossible using floating point arithmetic.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a categorical distributed 32-bit signed integer.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Prepares parameters for .
+
+ The number of weights.
+ Weights, or null.
+ The output cdf.
+
+ Also remember to change when changing this method.
+
+
+
+
+ Provides generation of discrete uniformly distributed random numbers.
+
+
+ The discrete uniform distribution generates only discrete numbers.
The implementation
+ of the type bases upon information presented on
+ Wikipedia -
+ Uniform distribution (discrete).
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter beta which is used for generation of uniformly distributed random numbers.
+
+
+
+
+ Stores the parameter beta which is used for generation of uniformly distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of uniformly distributed
+ random numbers.
+
+
+ is greater than .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the parameter beta which is used for generation of uniformly distributed
+ random numbers.
+
+
+ is greater than , or
+ is equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class,
+ using a as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class,
+ using a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class,
+ using the specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class,
+ using a as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of discrete uniform distributed random numbers.
+
+
+ The parameter beta which is used for generation of discrete uniform distributed random numbers.
+
+
+ is greater than , or
+ is equal to .
+
+
+
+
+ Initializes a new instance of the class,
+ using a with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of discrete uniform distributed random numbers.
+
+
+ The parameter beta which is used for generation of discrete uniform distributed random numbers.
+
+
+ is greater than , or
+ is equal to .
+
+
+
+
+ Initializes a new instance of the class,
+ using the specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of discrete uniform distributed random numbers.
+
+
+ The parameter beta which is used for generation of discrete uniform distributed random numbers.
+
+ is .
+
+ is greater than , or
+ is equal to .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is less than or equal to ; otherwise, .
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than or equal to , and
+ less than ; otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether discrete uniform distribution is defined under given parameters. The
+ default definition returns true if alpha is less than or equal to beta, and if beta is
+ less than ; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a discrete uniform distributed 32-bit signed integer.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of geometric distributed random numbers.
+
+
+ The geometric distribution generates only discrete numbers.
The implementation of the
+ type bases upon information presented on
+ Wikipedia - Geometric
+ distribution and the implementation in the
+ Communication
+ Networks Class Library.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the parameter beta which is used for generation of uniformly distributed random numbers.
+
+
+
+
+ Gets or sets the parameter alpha which is used for generation of geometric distributed
+ random numbers.
+
+
+ is less than or equal to zero or it is greater than one.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter alpha which is used for generation of geometric distributed random numbers.
+
+
+ is less than or equal to zero or it is greater than one.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter alpha which is used for generation of geometric distributed random numbers.
+
+
+ is less than or equal to zero or it is greater than one.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter alpha which is used for generation of geometric distributed random numbers.
+
+ is .
+
+ is less than or equal to zero or it is greater than one.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than 0.0, and less than or equal to 1.0;
+ otherwise, .
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether geometric distribution is defined under given parameter. The default
+ definition returns true if alpha is greater than zero and if it is less than or equal
+ to one; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a geometric distributed 32-bit signed integer.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Provides generation of poisson distributed random numbers.
+
+
+ The poisson distribution generates only discrete numbers.
The implementation of the
+ type bases upon information presented on
+ Wikipedia - Poisson
+ distribution and the implementation in the
+ Communication
+ Networks Class Library.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+
+ The default value assigned to if none is specified.
+
+
+
+
+ Stores the the parameter lambda which is used for generation of poisson distributed
+ random numbers.
+
+
+
+
+ Gets or sets the parameter lambda which is used for generation of poisson distributed
+ random numbers.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+ is .
+
+
+
+ Initializes a new instance of the class, using a
+ as underlying random number generator.
+
+
+ The parameter lambda which is used for generation of poisson distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using a
+ with the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+ The parameter lambda which is used for generation of poisson distributed random numbers.
+
+
+ is less than or equal to zero.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified as underlying random number generator.
+
+ An object.
+
+ The parameter lambda which is used for generation of poisson distributed random numbers.
+
+ is .
+
+ is less than or equal to zero.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0.0; otherwise, .
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Determines whether poisson distribution is defined under given parameter. The default
+ definition returns true if lambda is greater than zero; otherwise, it returns false.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Declares a function returning a poisson distributed 32-bit signed integer.
+
+
+ This is an extensibility point for the class.
+
+
+
+
+ Module containing extension methods for many interfaces exposed by this library.
+
+
+
+
+ Returns an infinites series of random double numbers, by repeating calls to NextDouble.
+ Therefore, the series obtained will follow given distribution.
+
+ The distribution.
+ An infinites series of random double numbers, following given distribution.
+
+
+
+ Returns an infinites series of random numbers, by repeating calls to Next. Therefore,
+ the series obtained will follow given distribution.
+
+ The distribution.
+ An infinites series of random numbers, following given distribution.
+
+
+
+ Returns an infinite sequence random Boolean values.
+
+
+ Buffers 31 random bits for future calls, so the random number generator is only invoked
+ once in every 31 calls.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ An infinite sequence random Boolean values.
+
+
+
+ Repeatedly fills the elements of a specified array of bytes with random numbers.
+
+
+ Each element of the array of bytes is set to a random number greater than or equal to
+ 0, and less than or equal to .
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ An array of bytes to contain random numbers.
+ An infinite sequence of true values.
+ is null.
+
+
+
+ Returns a random item from given list, according to a uniform distribution.
+
+ The type of the random numbers generator.
+ The type of the elements of the list.
+ The generator from which random numbers are drawn.
+ The list from which an item should be randomly picked.
+ A random item belonging to given list.
+ is null.
+ is empty.
+
+
+
+ Returns an infinite sequence of random items from given list, according to a uniform distribution.
+
+ The type of the random numbers generator.
+ The type of the elements of the list.
+ The generator from which random numbers are drawn.
+ The list from which items should be randomly picked.
+ An infinite sequence of random items belonging to given list.
+ is null.
+ is empty.
+
+
+
+ Returns an infinite sequence of nonnegative floating point random numbers less than 1.0.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+
+ An infinite sequence of double-precision floating point numbers greater than or equal
+ to 0.0, and less than 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an infinite sequence of nonnegative floating point random numbers less than the
+ specified maximum.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ The exclusive upper bound of the random number to be generated.
+
+ An infinite sequence of double-precision floating point numbers greater than or equal
+ to 0.0, and less than ; that is, the range of return values
+ includes 0 but not .
+
+
+ must be greater than 0.0.
+
+ cannot be .
+
+
+
+ Returns an infinite sequence of floating point random numbers within the specified range.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ Returns an infinite sequence of double-precision floating point numbers greater than or
+ equal to , and less than ; that
+ is, the range of return values includes but not .
+
+
+ must be greater than .
+
+
+ The difference between and
+ cannot be .
+
+
+
+
+ Returns an infinite sequence of nonnegative random numbers less than .
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+
+ An infinite sequence of 32-bit signed integers greater than or equal to 0, and less
+ than ; that is, the range of return values includes 0 but not .
+
+
+
+
+ Returns an infinite sequence of nonnegative random numbers less than the specified maximum.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ The exclusive upper bound of the random numbers to be generated.
+
+ An infinite sequence of 32-bit signed integers greater than or equal to 0, and less
+ than ; that is, the range of return values includes 0 but
+ not .
+
+
+ must be greater than or equal to 1.
+
+
+
+
+ Returns an infinite sequence of random numbers within the specified range.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ An infinite sequence of 32-bit signed integers greater than or equal to
+ , and less than ; that is, the
+ range of return values includes but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns an infinite sequence of unsigned random numbers.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ An infinite sequence of 32-bit unsigned integers.
+
+
+
+ Returns an infinite sequence of unsigned random numbers less than the specified maximum.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ The exclusive upper bound of the random number to be generated.
+
+ An infinite sequence of 32-bit unsigned integers greater than or equal to 0, and less
+ than ; that is, the range of return values includes 0 but
+ not .
+
+
+ must be greater than or equal to 1.
+
+
+
+
+ Returns an infinite sequence of unsigned random numbers within the specified range.
+
+ The type of the random numbers generator.
+ The generator from which random numbers are drawn.
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ An infinite sequence of 32-bit unsigned integers greater than or equal to
+ , and less than ; that is, the
+ range of return values includes but not .
+
+
+ must be greater than .
+
+
+
+
+ An abstract generator which efficiently implements everything required by the
+ interface using only few methods: ,
+ , .
+
+ Therefore, in order to build a new generator, one must "simply" override the
+ , which is used to automatically initialize the generator, and the
+ generator methods, which, as stated above, are used to generate every kind of random object
+ exposed by the interface.
+
+ All generators implemented in this library extend this abstract class.
+
+
+ Methods and are NOT thread
+ safe. The thread safety of other methods depends on the one of the extending class, that
+ is, if all abstract methods are implemented in a thread safe manner, then other methods,
+ excluding and , are thread safe too.
+
+ Please note that all generators implemented in this library are NOT thread safe.
+
+
+
+
+ The number of left shifts required to transform a 64-bit unsigned integer into a
+ nonnegative 32-bit signed integer.
+
+
+
+
+ The number of left shifts required to transform a 64-bit unsigned integer into a 32-bit
+ unsigned integer.
+
+
+
+
+ Represents the multiplier that computes a double-precision floating point number
+ greater than or equal to 0.0 and less than 1.0 when it gets applied to a nonnegative
+ 32-bit signed integer.
+
+
+
+
+ Represents the multiplier that computes a double-precision floating point number
+ greater than or equal to 0.0 and less than 1.0 when it gets applied to a 32-bit
+ unsigned integer.
+
+
+
+
+ Represents the multiplier that computes a double-precision floating point number
+ greater than or equal to 0.0 and less than 1.0 when it gets applied to a 64-bit
+ unsigned integer.
+
+
+
+
+ Stores an used to generate up to 32 random values.
+
+
+
+
+ Stores how many random values still can be generated from .
+
+
+
+
+ Initializes a new instance of the generator, using the specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ The seed value used by the generator.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the initial seed, so that it produces the same
+ random number sequence again. To understand whether this generator can be reset, you
+ can query the property.
+
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+ If this method is overridden, always remember to call it inside the override.
+
+
+
+
+ Returns a nonnegative random number less than .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit signed integer greater than or equal to 0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+ must be greater than or equal to 0.
+
+
+
+
+ Returns a random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+
+ The exclusive upper bound of the random number to be generated.
+ must be greater than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to , and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns a nonnegative floating point random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+ must be greater than or equal to 0.0.
+
+ cannot be .
+
+
+
+ Returns a floating point random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ A double-precision floating point number greater than or equal to
+ , and less than ; that is, the
+ range of return values includes but not .
+
+
+ must be greater than .
+
+
+ The difference between and
+ cannot be .
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned random number less than .
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than .
+
+
+
+
+ Returns an unsigned random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+
+
+ Returns an unsigned random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns a random Boolean value.
+
+
+ Buffers 31 random bits for future calls, so the random number generator is only invoked
+ once in every 31 calls.
+
+ A value.
+
+
+
+ Fills the elements of a specified array of bytes with random numbers.
+
+
+ Each element of the array of bytes is set to a random number greater than or equal to
+ 0, and less than or equal to .
+
+ An array of bytes to contain random numbers.
+ is null.
+
+
+
+ Two instances are equal if they have the same state.
+
+ The object.
+
+
+
+ Hash code is computed from the state of the generator.
+
+
+
+
+ A string with the name of the generator and the seed.
+
+
+
+
+ Represents a Additive Lagged Fibonacci pseudo-random number generator.
+
+
+ The type bases upon the implementation in the
+ Boost Random Number Library. It
+ uses the modulus 2 32 and by default the "lags" 418 and 1279, which can be
+ adjusted through the associated and properties.
+
+ Some popular pairs are presented on
+ Wikipedia - Lagged
+ Fibonacci generator.
+
+ This generator is NOT thread safe.
+
+
+
+
+ Stores an index for the random number array element that will be accessed next.
+
+
+
+
+ Stores the long lag of the Lagged Fibonacci pseudo-random number generator.
+
+
+
+
+ Stores the short lag of the Lagged Fibonacci pseudo-random number generator.
+
+
+
+
+ Stores an array of random numbers
+
+
+
+
+ Gets or sets the short lag of the Lagged Fibonacci pseudo-random number generator.
+
+
+ is less than or equal to zero.
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Gets or sets the long lag of the Lagged Fibonacci pseudo-random number generator.
+
+
+ is less than or equal to .
+
+
+ Calls to determine whether a value is valid and therefore assignable.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the specified
+ seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+ if value is greater than 0; otherwise, .
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is greater than ; otherwise, .
+
+
+
+
+ Fills the array with new unsigned random numbers.
+
+
+ Generated random numbers are 32-bit unsigned integers greater than or equal to
+ and less than or equal to .
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Represents a Mersenne Twister pseudo-random number generator with period 2^19937-1.
+
+
+ The type bases upon information and the implementation
+ presented on the
+ Mersenne Twister Home Page.
+
+ This generator is NOT thread safe.
+
+
+
+
+ Represents the number of unsigned random numbers generated at one time. This field is constant.
+
+ The value of this constant is 624.
+
+
+
+ Represents a constant used for generation of unsigned random numbers. This field is constant.
+
+ The value of this constant is 397.
+
+
+
+ Represents the constant vector a. This field is constant.
+
+ The value of this constant is 0x9908b0dfU.
+
+
+
+ Represents the most significant w-r bits. This field is constant.
+
+ The value of this constant is 0x80000000.
+
+
+
+ Represents the least significant r bits. This field is constant.
+
+ The value of this constant is 0x7fffffff.
+
+
+
+ Stores the state vector array.
+
+
+
+
+ Stores the used seed array.
+
+
+
+
+ Stores an index for the state vector array element that will be accessed next.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed array.
+
+
+ An array of numbers used to calculate a starting values for the pseudo-random number
+ sequence. If negative numbers are specified, the absolute values of them are used.
+
+
+ is NULL ( in Visual Basic).
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed array.
+
+
+ An array of unsigned numbers used to calculate a starting values for the pseudo-random
+ number sequence.
+
+
+ is NULL ( in Visual Basic).
+
+
+
+
+ Extends resetting of the using the .
+
+
+
+
+ Generates unsigned random numbers.
+
+
+ Generated random numbers are 32-bit unsigned integers greater than or equal to
+ and less than or equal to .
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ A generator whose original code has been found in a famous book about numerical analysis.
+ Inside the book, it is the highest quality recommended generator.
+
+
+ This generator has a period of ~ 3.138 * 10^57.
+
+ This generator is NOT thread safe.
+
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+ The value of this constant is 4101842887655102017.
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+ The value of this constant is 1.
+
+
+
+ Represents the seed for the numbers generation. This field is constant.
+
+ The value of this constant is 2862933555777941757.
+
+
+
+ Represents the seed for the numbers generation. This field is constant.
+
+ The value of this constant is 7046029254386353087.
+
+
+
+ Represents the seed for the numbers generation. This field is constant.
+
+ The value of this constant is 2685821657736338717.
+
+
+
+ Generators like and use
+ only 32 bits to produce a random result, even if the core algorithm of this generator
+ produces 64 random bits at each iteration. Therefore, instead of throwing 32 bits away
+ every time those methods are called, we use this flag to signal that there 32 bits
+ still available and ready to be used.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the specified
+ seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Initializes a new instance of the class, using the specified
+ seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned long random number.
+
+
+ A 64-bit unsigned integer greater than or equal to and
+ less than or equal to .
+
+
+
+
+ A generator whose original code has been found in a famous book about numerical analysis.
+ Inside the book, it is the recommended generator for everyday use.
+
+
+ This generator has a period of ~ 1.8 * 10^19.
+
+ This generator is NOT thread safe.
+
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+ The value of this constant is 4101842887655102017.
+
+
+
+ Represents the seed for the numbers generation. This field is constant.
+
+ The value of this constant is 2685821657736338717.
+
+
+
+ Generators like and use
+ only 32 bits to produce a random result, even if the core algorithm of this generator
+ produces 64 random bits at each iteration. Therefore, instead of throwing 32 bits away
+ every time those methods are called, we use this flag to signal that there 32 bits
+ still available and ready to be used.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned long random number.
+
+
+ A 64-bit unsigned integer greater than or equal to and
+ less than or equal to .
+
+
+
+
+ A generator whose original code has been found in a famous book about numerical analysis.
+ Inside the book, it is a "backup" generator which should be used
+ has too short a period and is too slow.
+
+
+ This generator has a period of ~ 8.5 * 10^37.
+
+ This generator is NOT thread safe.
+
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+ The value of this constant is 4101842887655102017.
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+ The value of this constant is 1.
+
+
+
+ Represents the seed for the numbers generation. This field is constant.
+
+ The value of this constant is 4294957665.
+
+
+
+ Generators like and use
+ only 32 bits to produce a random result, even if the core algorithm of this generator
+ produces 64 random bits at each iteration. Therefore, instead of throwing 32 bits away
+ every time those methods are called, we use this flag to signal that there 32 bits
+ still available and ready to be used.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned long random number.
+
+
+ A 64-bit unsigned integer greater than or equal to and
+ less than or equal to .
+
+
+
+
+ Represents a simple pseudo-random number generator.
+
+
+ The type internally uses an instance of the
+ type to generate pseudo-random numbers.
+
+ This generator is NOT thread safe.
+
+
+
+
+ Stores a byte array used to compute the result of , starting
+ from the output of .
+
+
+
+
+ Stores an instance of type that is used to generate random numbers.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Represents a xorshift pseudo-random number generator with period 2^128-1.
+
+
+ The type bases upon the implementation presented in the
+ CP article " A fast equivalent
+ for System.Random" and the theoretical background on xorshift random number generators
+ published by George Marsaglia in this paper "
+ Xorshift RNGs".
+
+ This generator is NOT thread safe.
+
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+
+ The value of this constant is 521288629, left shifted by 32 bits. The right side will
+ be filled with the specified seed.
+
+
+
+
+ Represents the seed for the variable. This field is constant.
+
+ The value of this constant is 362436069.
+
+
+
+ The first part of the generator state. It is important that and
+ are not zero at the same time.
+
+
+
+
+ The second part of the generator state. It is important that and
+ are not zero at the same time.
+
+
+
+
+ Generators like and use
+ only 32 bits to produce a random result, even if the core algorithm of this generator
+ produces 64 random bits at each iteration. Therefore, instead of throwing 32 bits away
+ every time those methods are called, we use this flag to signal that there 32 bits
+ still available and ready to be used.
+
+
+
+
+ Initializes a new instance of the class, using a
+ time-dependent default seed value.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ A number used to calculate a starting value for the pseudo-random number sequence. If a
+ negative number is specified, the absolute value of the number is used.
+
+
+
+
+ Initializes a new instance of the class, using the
+ specified seed value.
+
+
+ An unsigned number used to calculate a starting value for the pseudo-random number sequence.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned long random number.
+
+
+ A 64-bit unsigned integer greater than or equal to and
+ less than or equal to .
+
+
+
+
+ Declares common functionality for all random number distributions.
+
+
+
+
+ Gets the object that is used as underlying random number generator.
+
+
+
+
+ Gets a value indicating whether the random number distribution can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Gets the minimum possible value of distributed random numbers.
+
+
+
+
+ Gets the maximum possible value of distributed random numbers.
+
+
+
+
+ Gets the mean of distributed random numbers.
+
+
+ Thrown if mean is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the median of distributed random numbers.
+
+
+ Thrown if median is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the variance of distributed random numbers.
+
+
+ Thrown if variance is not defined for given distribution with some parameters.
+
+
+
+
+ Gets the mode of distributed random numbers.
+
+
+ Thrown if mode is not defined for given distribution with some parameters.
+
+
+
+
+ Resets the random number distribution, so that it produces the same random number
+ sequence again.
+
+
+ , if the random number distribution was reset; otherwise, .
+
+
+
+
+ Returns a distributed floating point random number.
+
+ A distributed double-precision floating point number.
+
+
+
+ Declares common functionality for all continuous random number distributions.
+
+
+
+
+ Declares common functionality for all discrete random number distributions.
+
+
+
+
+ Returns a distributed random number.
+
+ A distributed 32-bit signed integer.
+
+
+
+ Models a distribution with an alpha parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter alpha which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a beta parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter beta which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a gamma parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter gamma which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a lambda parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter lambda which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a mu parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter mu which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a nu parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter nu which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a sigma parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter sigma which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a theta parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter theta which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether the specified value is valid for parameter .
+
+ The value to check.
+
+ if value is valid for parameter ; otherwise, .
+
+
+
+
+ Models a distribution with a weights parameter.
+
+ The numeric type of the parameter.
+
+
+
+ Gets or sets the parameter weights which is used for generation of distributed random numbers.
+
+
+
+
+ Determines whether specified values are valid for parameter .
+
+ The values to check.
+
+ if value is valid for parameter ;
+ otherwise, .
+
+
+
+
+ Declares common functionalities for all random number generators.
+
+
+
+
+ The seed value used by the generator.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the initial seed, so that it produces the same
+ random number sequence again. To understand whether this generator can be reset, you
+ can query the property.
+
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit signed integer greater than or equal to 0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+ must be greater than or equal to 0.
+
+
+
+
+ Returns a random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+
+ The exclusive upper bound of the random number to be generated.
+ must be greater than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to , and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns a nonnegative floating point random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+ must be greater than or equal to 0.0.
+
+ cannot be .
+
+
+
+ Returns a floating point random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ A double-precision floating point number greater than or equal to
+ , and less than ; that is, the
+ range of return values includes but not .
+
+
+ must be greater than .
+
+
+ The difference between and
+ cannot be .
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned random number less than .
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than .
+
+
+
+
+ Returns an unsigned random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+
+
+ Returns an unsigned random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns a random Boolean value.
+
+
+ Buffers 31 random bits for future calls, so the random number generator is only invoked
+ once in every 31 calls.
+
+ A value.
+
+
+
+ Fills the elements of a specified array of bytes with random numbers.
+
+
+ Each element of the array of bytes is set to a random number greater than or equal to
+ 0, and less than or equal to .
+
+ An array of bytes to contain random numbers.
+ is null.
+
+
+
+ Simple math utilities used inside the library. They are also public, should you need them
+ for custom generators and distributions.
+
+
+
+
+ The delta used when comparing doubles.
+
+
+
+
+ Safely checks if given double is zero.
+
+ A double.
+ True if given double is near zero, false otherwise.
+
+
+
+ Safely checks if given doubles are equal.
+
+ A double.
+ A double.
+ True if given doubles are safely equal, false otherwise.
+
+
+
+ Fast square power.
+
+ A double.
+ The square of given double.
+
+
+
+ Generates a new seed, using all information available, including time.
+
+
+
+
+ A random generator class similar to the one Python offers, providing functions similar to
+ the ones found in and functions returning random numbers
+ according to a particular kind of distribution.
+
+ The thread safety of this class depends on the one of the underlying generator.
+
+
+
+ The generator used by .
+
+
+
+
+ Constructs a new instance with as underlying
+ generator and the default seed (which corresponds to ).
+
+
+
+
+ Constructs a new instance with as underlying
+ generator and the specified seed.
+
+ The seed used to initialize the generator.
+
+
+
+ Constructs a new instance with as underlying
+ generator and the specified seed.
+
+ The seed used to initialize the generator.
+
+
+
+ Constructs a new instance with the specified generator.
+
+ The generator used to produce random numbers.
+ is null.
+
+
+
+ Constructs a new instance with as underlying
+ generator and the default seed (which corresponds to ).
+
+
+
+
+ Constructs a new instance with as underlying
+ generator and the specified seed.
+
+ The seed used to initialize the generator.
+
+
+
+ Constructs a new instance with as underlying
+ generator and the specified seed.
+
+ The seed used to initialize the generator.
+
+
+
+ Constructs a new instance with the specified generator.
+
+ The generator used to produce random numbers.
+ is null.
+
+
+
+ Returns a bernoulli distributed 32-bit signed integer.
+
+
+ The parameter alpha which is used for generation of bernoulli distributed random numbers.
+
+ A bernoulli distributed 32-bit signed integer.
+
+ is less than zero or greater than one.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of bernoulli distributed 32-bit signed integers.
+
+
+ The parameter alpha which is used for generation of bernoulli distributed random numbers.
+
+ An infinite sequence of bernoulli distributed 32-bit signed integers.
+
+ is less than zero or greater than one.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a binomial distributed 32-bit signed integer.
+
+
+ The parameter alpha which is used for generation of binomial distributed random numbers.
+
+
+ The parameter beta which is used for generation of binomial distributed random numbers.
+
+ A binomial distributed 32-bit signed integer.
+
+ is less than zero or greater than one, or
+ is less than zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of binomial distributed 32-bit signed integers.
+
+
+ The parameter alpha which is used for generation of binomial distributed random numbers.
+
+
+ The parameter beta which is used for generation of binomial distributed random numbers.
+
+ An infinite sequence of binomial distributed 32-bit signed integers.
+
+ is less than zero or greater than one, or
+ is less than zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a categorical distributed 32-bit signed integer.
+
+
+ The parameter valueCount which is used for generation of binomial distributed random
+ numbers by setting the number of equi-distributed "weights" the distribution will have.
+
+ A categorical distributed 32-bit signed integer.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of categorical distributed 32-bit signed integers.
+
+
+ The parameter valueCount which is used for generation of binomial distributed random
+ numbers by setting the number of equi-distributed "weights" the distribution will have.
+
+ An infinite sequence of categorical distributed 32-bit signed integers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a categorical distributed 32-bit signed integer.
+
+
+ An enumerable of nonnegative weights: this enumerable does not need to be normalized as
+ this is often impossible using floating point arithmetic.
+
+ A categorical distributed 32-bit signed integer.
+ is null.
+ is empty.
+
+ Any of the weights in are negative or they sum to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of categorical distributed 32-bit signed integers.
+
+
+ An enumerable of nonnegative weights: this enumerable does not need to be normalized as
+ this is often impossible using floating point arithmetic.
+
+ An infinite sequence of categorical distributed 32-bit signed integers.
+ is null.
+ is empty.
+
+ Any of the weights in are negative or they sum to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a discrete uniform distributed 32-bit signed integer.
+
+
+ The parameter alpha which is used for generation of discrete uniform distributed random numbers.
+
+
+ The parameter beta which is used for generation of discrete uniform distributed random numbers.
+
+ A discrete uniform distributed 32-bit signed integer.
+
+ is greater than , or
+ is equal to .
+
+
+ This method simply wraps a call to , with
+ a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of discrete uniform distributed 32-bit signed integers.
+
+
+ The parameter alpha which is used for generation of discrete uniform distributed random numbers.
+
+
+ The parameter beta which is used for generation of discrete uniform distributed random numbers.
+
+ An infinite sequence of discrete uniform distributed 32-bit signed integers.
+
+ is greater than , or
+ is equal to .
+
+
+ This method simply wraps a call to , with
+ a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a geometric distributed 32-bit signed integer.
+
+
+ The parameter alpha which is used for generation of geometric distributed random numbers.
+
+ A geometric distributed 32-bit signed integer.
+
+ is less than or equal to zero or it is greater than one.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of geometric distributed 32-bit signed integers.
+
+
+ The parameter alpha which is used for generation of geometric distributed random numbers.
+
+ An infinite sequence of geometric distributed 32-bit signed integers.
+
+ is less than or equal to zero or it is greater than one.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a poisson distributed 32-bit signed integer.
+
+
+ The parameter lambda which is used for generation of poisson distributed random numbers.
+
+ A poisson distributed 32-bit signed integer.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of poisson distributed 32-bit signed integers.
+
+
+ The parameter lambda which is used for generation of poisson distributed random numbers.
+
+ An infinite sequence of poisson distributed 32-bit signed integers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a beta distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of beta distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta distributed random numbers.
+
+ A beta distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of beta distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of beta distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta distributed random numbers.
+
+ An infinite sequence of beta distributed floating point random numbers.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a beta prime distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of beta prime distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta prime distributed random numbers.
+
+ A beta prime distributed floating point random number.
+
+ or are less than or equal to one.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of beta prime distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of beta prime distributed random numbers.
+
+
+ The parameter beta which is used for generation of beta prime distributed random numbers.
+
+
+ An infinite sequence of beta prime distributed floating point random numbers.
+
+
+ or are less than or equal to one.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a cauchy distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of cauchy distributed random numbers.
+
+
+ The parameter gamma which is used for generation of cauchy distributed random numbers.
+
+ A cauchy distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of cauchy distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of cauchy distributed random numbers.
+
+
+ The parameter gamma which is used for generation of cauchy distributed random numbers.
+
+ An infinite sequence of cauchy distributed floating point random numbers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a chi distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of chi distributed random numbers.
+
+ A chi distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of chi distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of chi distributed random numbers.
+
+ An infinite sequence of chi distributed floating point random numbers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a chi square distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of chi square distributed random numbers.
+
+ A chi square distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of chi square distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of chi square distributed random numbers.
+
+
+ An infinite sequence of chi square distributed floating point random numbers.
+
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a continuous uniform distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ The parameter beta which is used for generation of continuous uniform distributed
+ random numbers.
+
+ A continuous uniform distributed floating point random number.
+
+ is greater than .
+
+
+ This method simply wraps a call to ,
+ with a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of continuous uniform distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ The parameter beta which is used for generation of continuous uniform distributed
+ random numbers.
+
+
+ An infinite sequence of continuous uniform distributed floating point random numbers.
+
+
+ is greater than .
+
+
+ This method simply wraps a call to ,
+ with a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an erlang distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of erlang distributed random numbers.
+
+
+ The parameter lambda which is used for generation of erlang distributed random numbers.
+
+ An erlang distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of erlang distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of erlang distributed random numbers.
+
+
+ The parameter lambda which is used for generation of erlang distributed random numbers.
+
+ An infinite sequence of erlang distributed floating point random numbers.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an exponential distributed floating point random number.
+
+
+ The parameter lambda which is used for generation of exponential distributed random numbers.
+
+ An exponential distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of exponential distributed floating point random numbers.
+
+
+ The parameter lambda which is used for generation of exponential distributed random numbers.
+
+
+ An infinite sequence of exponential distributed floating point random numbers.
+
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a fisher snedecor distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of fisher snedecor distributed random numbers.
+
+
+ The parameter beta which is used for generation of fisher snedecor distributed random numbers.
+
+ A fisher snedecor distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to ,
+ with a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of fisher snedecor distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of fisher snedecor distributed random numbers.
+
+
+ The parameter beta which is used for generation of fisher snedecor distributed random numbers.
+
+
+ An infinite sequence of fisher snedecor distributed floating point random numbers.
+
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to ,
+ with a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a fisher tippett distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of fisher tippett distributed random numbers.
+
+
+ The parameter mu which is used for generation of fisher tippett distributed random numbers.
+
+ A fisher tippett distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with
+ a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of fisher tippett distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of fisher tippett distributed random numbers.
+
+
+ The parameter mu which is used for generation of fisher tippett distributed random numbers.
+
+
+ An infinite sequence of fisher tippett distributed floating point random numbers.
+
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with
+ a prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a gamma distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of gamma distributed random numbers.
+
+
+ The parameter beta which is used for generation of gamma distributed random numbers.
+
+ A gamma distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of gamma distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of gamma distributed random numbers.
+
+
+ The parameter beta which is used for generation of gamma distributed random numbers.
+
+ An infinite sequence of gamma distributed floating point random numbers.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a laplace distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of laplace distributed random numbers.
+
+
+ The parameter mu which is used for generation of laplace distributed random numbers.
+
+ A laplace distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of laplace distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of laplace distributed random numbers.
+
+
+ The parameter mu which is used for generation of laplace distributed random numbers.
+
+ An infinite sequence of laplace distributed floating point random numbers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a logistic distributed floating point random number.
+
+
+ The parameter mu which is used for generation of logistic distributed random numbers.
+
+
+ The parameter sigma which is used for generation of logistic distributed random numbers.
+
+ A logistic distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of logistic distributed floating point random numbers.
+
+
+ The parameter mu which is used for generation of logistic distributed random numbers.
+
+
+ The parameter sigma which is used for generation of logistic distributed random numbers.
+
+ An infinite sequence of logistic distributed floating point random numbers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a lognormal distributed floating point random number.
+
+
+ The parameter mu which is used for generation of lognormal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of lognormal distributed random numbers.
+
+ A lognormal distributed floating point random number.
+
+ is less than zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of lognormal distributed floating point random numbers.
+
+
+ The parameter mu which is used for generation of lognormal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of lognormal distributed random numbers.
+
+
+ An infinite sequence of lognormal distributed floating point random numbers.
+
+
+ is less than zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a normal distributed floating point random number.
+
+
+ The parameter mu which is used for generation of normal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of normal distributed random numbers.
+
+ A normal distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of normal distributed floating point random numbers.
+
+
+ The parameter mu which is used for generation of normal distributed random numbers.
+
+
+ The parameter sigma which is used for generation of normal distributed random numbers.
+
+ An infinite sequence of normal distributed floating point random numbers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a pareto distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of pareto distributed random numbers.
+
+
+ The parameter beta which is used for generation of pareto distributed random numbers.
+
+ A pareto distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of pareto distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of pareto distributed random numbers.
+
+
+ The parameter beta which is used for generation of pareto distributed random numbers.
+
+ An infinite sequence of pareto distributed floating point random numbers.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a power distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of power distributed random numbers.
+
+
+ The parameter beta which is used for generation of power distributed random numbers.
+
+ A power distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of power distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of power distributed random numbers.
+
+
+ The parameter beta which is used for generation of power distributed random numbers.
+
+ An infinite sequence of power distributed floating point random numbers.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a prior
+ check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a rayleigh distributed floating point random number.
+
+
+ The parameter sigma which is used for generation of rayleigh distributed random numbers.
+
+ A rayleigh distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of rayleigh distributed floating point random numbers.
+
+
+ The parameter sigma which is used for generation of rayleigh distributed random numbers.
+
+ An infinite sequence of rayleigh distributed floating point random numbers.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a student's t distributed floating point random number.
+
+
+ The parameter nu which is used for generation of student's t distributed random numbers.
+
+ A student's t distributed floating point random number.
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of student's t distributed floating point random numbers.
+
+
+ The parameter nu which is used for generation of student's t distributed random numbers.
+
+
+ An infinite sequence of student's t distributed floating point random numbers.
+
+
+ is less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a triangular distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of triangular distributed random numbers.
+
+
+ The parameter beta which is used for generation of triangular distributed random numbers.
+
+
+ The parameter gamma which is used for generation of triangular distributed random numbers.
+
+ A triangular distributed floating point random number.
+
+ is greater than or equal to , or
+ is greater than , or
+ is less than .
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of triangular distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of triangular distributed random numbers.
+
+
+ The parameter beta which is used for generation of triangular distributed random numbers.
+
+
+ The parameter gamma which is used for generation of triangular distributed random numbers.
+
+
+ An infinite sequence of triangular distributed floating point random numbers.
+
+
+ is greater than or equal to , or
+ is greater than , or
+ is less than .
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns a weibull distributed floating point random number.
+
+
+ The parameter alpha which is used for generation of weibull distributed random numbers.
+
+
+ The parameter lambda which is used for generation of weibull distributed random numbers.
+
+ A weibull distributed floating point random number.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ Returns an infinite sequence of weibull distributed floating point random numbers.
+
+
+ The parameter alpha which is used for generation of weibull distributed random numbers.
+
+
+ The parameter lambda which is used for generation of weibull distributed random numbers.
+
+ An infinite sequence of weibull distributed floating point random numbers.
+
+ or are less than or equal to zero.
+
+
+ This method simply wraps a call to , with a
+ prior check of the distribution parameters.
+
+
+ If you absolutely need the best performance, you may consider using an instance of
+ for each group of parameters.
+
+
+
+
+ The seed value used by the generator.
+
+
+
+
+ Gets a value indicating whether the random number generator can be reset, so that it
+ produces the same random number sequence again.
+
+
+
+
+ Resets the random number generator using the initial seed, so that it produces the same
+ random number sequence again. To understand whether this generator can be reset, you
+ can query the property.
+
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Resets the random number generator using the specified seed, so that it produces the
+ same random number sequence again. To understand whether this generator can be reset,
+ you can query the property.
+
+ The seed value used by the generator.
+ True if the random number generator was reset; otherwise, false.
+
+
+
+ Returns a nonnegative random number less than .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+
+
+ Returns a nonnegative random number less than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to 0, and less than or equal to
+ ; that is, the range of return values includes 0 and .
+
+
+
+
+ Returns a nonnegative random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit signed integer greater than or equal to 0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+ must be greater than or equal to 0.
+
+
+
+
+ Returns a random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+
+ The exclusive upper bound of the random number to be generated.
+ must be greater than or equal to .
+
+
+ A 32-bit signed integer greater than or equal to , and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns a nonnegative floating point random number less than 1.0.
+
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ 1.0; that is, the range of return values includes 0.0 but not 1.0.
+
+
+
+
+ Returns a nonnegative floating point random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A double-precision floating point number greater than or equal to 0.0, and less than
+ ; that is, the range of return values includes 0 but not .
+
+
+ must be greater than or equal to 0.0.
+
+ cannot be .
+
+
+
+ Returns a floating point random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ A double-precision floating point number greater than or equal to
+ , and less than ; that is, the
+ range of return values includes but not .
+
+
+ must be greater than .
+
+
+ The difference between and
+ cannot be .
+
+
+
+
+ Returns an unsigned random number.
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than or equal to .
+
+
+
+
+ Returns an unsigned random number less than the specified maximum.
+
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+
+
+ Returns an unsigned random number less than .
+
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than .
+
+
+
+
+ Returns an unsigned random number within the specified range.
+
+ The inclusive lower bound of the random number to be generated.
+ The exclusive upper bound of the random number to be generated.
+
+ A 32-bit unsigned integer greater than or equal to and less
+ than ; that is, the range of return values includes
+ but not .
+
+
+ must be greater than .
+
+
+
+
+ Returns a random Boolean value.
+
+
+ Buffers 31 random bits for future calls, so the random number generator is only invoked
+ once in every 31 calls.
+
+ A value.
+
+
+
+ Fills the elements of a specified array of bytes with random numbers.
+
+
+ Each element of the array of bytes is set to a random number greater than or equal to
+ 0, and less than or equal to .
+
+ An array of bytes to contain random numbers.
+ is null.
+
+
+
+ Returns a string that represents the current object.
+
+ A string that represents the current object.
+
+
+
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.MainForm.resources b/BikeSharingSystem/obj/Debug/BikeSharingSystem.MainForm.resources
new file mode 100644
index 0000000..b7ae76e
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.MainForm.resources differ
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.Properties.Resources.resources b/BikeSharingSystem/obj/Debug/BikeSharingSystem.Properties.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.Properties.Resources.resources differ
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.FileListAbsolute.txt b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..4d8e49d
--- /dev/null
+++ b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.FileListAbsolute.txt
@@ -0,0 +1,30 @@
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\BikeSharingSystem.exe.config
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.csproj.ResolveComReference.cache
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.exe
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.pdb
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\BikeSharingSystem.exe
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\BikeSharingSystem.pdb
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Priority Queue.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\TeeChart.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Priority Queue.pdb
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Priority Queue.xml
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\TeeChart.xml
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.csprojResolveAssemblyReference.cache
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.MainForm.resources
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.Properties.Resources.resources
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\obj\Debug\BikeSharingSystem.csproj.GenerateResource.Cache
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\PommaLabs.Thrower.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.Collections.NonGeneric.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.Data.Common.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.IO.FileSystem.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.IO.FileSystem.Primitives.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.Reflection.TypeExtensions.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.Runtime.Serialization.Formatters.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\System.Runtime.Serialization.Primitives.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Troschuetz.Random.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\PommaLabs.Thrower.pdb
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\PommaLabs.Thrower.xml
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Troschuetz.Random.pdb
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Troschuetz.Random.xml
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Newtonsoft.Json.dll
+C:\Users\user\Desktop\論文\精進測試版\BikeSaring20170208\BikeSharingSystem\bin\Debug\Newtonsoft.Json.xml
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.GenerateResource.Cache b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.GenerateResource.Cache
new file mode 100644
index 0000000..dc34e49
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.GenerateResource.Cache differ
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.ResolveComReference.cache b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.ResolveComReference.cache
new file mode 100644
index 0000000..e848c60
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csproj.ResolveComReference.cache differ
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.csprojResolveAssemblyReference.cache b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csprojResolveAssemblyReference.cache
new file mode 100644
index 0000000..1d679e2
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.csprojResolveAssemblyReference.cache differ
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.exe b/BikeSharingSystem/obj/Debug/BikeSharingSystem.exe
new file mode 100644
index 0000000..802c50e
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.exe differ
diff --git a/BikeSharingSystem/obj/Debug/BikeSharingSystem.pdb b/BikeSharingSystem/obj/Debug/BikeSharingSystem.pdb
new file mode 100644
index 0000000..d00abe7
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/BikeSharingSystem.pdb differ
diff --git a/BikeSharingSystem/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/BikeSharingSystem/obj/Debug/DesignTimeResolveAssemblyReferences.cache
new file mode 100644
index 0000000..43698ce
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ
diff --git a/BikeSharingSystem/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/BikeSharingSystem/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..094977f
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/BikeSharingSystem/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll b/BikeSharingSystem/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll
new file mode 100644
index 0000000..1e4b6a3
Binary files /dev/null and b/BikeSharingSystem/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll differ
diff --git a/BikeSharingSystem/optimizationtype.cs b/BikeSharingSystem/optimizationtype.cs
new file mode 100644
index 0000000..5322b0e
--- /dev/null
+++ b/BikeSharingSystem/optimizationtype.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BikeSharingSystem
+{
+ public enum optimizationtype
+ {
+ Min,
+ Max,
+ Goal
+ }
+}
diff --git a/BikeSharingSystem/packages.config b/BikeSharingSystem/packages.config
new file mode 100644
index 0000000..4eccff6
--- /dev/null
+++ b/BikeSharingSystem/packages.config
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BikeSharingSystem/selectionmode.cs b/BikeSharingSystem/selectionmode.cs
new file mode 100644
index 0000000..8ea5800
--- /dev/null
+++ b/BikeSharingSystem/selectionmode.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace BikeSharingSystem
+{
+ public enum selectionmode
+ {
+ Deterministic,
+ Stochastic
+ }
+}
diff --git a/Graph1.dgml b/Graph1.dgml
new file mode 100644
index 0000000..53747a9
--- /dev/null
+++ b/Graph1.dgml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file