From ae66daf1661cd00ea8ac5e915a3af1e7d30a4e26 Mon Sep 17 00:00:00 2001 From: bparks13 Date: Tue, 20 Aug 2024 14:55:30 -0400 Subject: [PATCH 1/7] Import NeuropixelsV1e GUI files --- Directory.Build.props | 2 +- .../Bno055Dialog.Designer.cs | 39 + OpenEphys.Onix1.Design/Bno055Dialog.cs | 42 + OpenEphys.Onix1.Design/Bno055Editor.cs | 35 + .../ChannelConfigurationDialog.cs | 4 +- OpenEphys.Onix1.Design/ContactTag.cs | 2 +- OpenEphys.Onix1.Design/DesignHelper.cs | 2 +- .../NeuropixelsV1eBno055Dialog.Designer.cs | 39 + .../NeuropixelsV1eBno055Dialog.cs | 42 + .../NeuropixelsV1eBno055Editor.cs | 31 + ...sV1eChannelConfigurationDialog.Designer.cs | 39 + ...europixelsV1eChannelConfigurationDialog.cs | 242 ++++++ .../NeuropixelsV1eDialog.Designer.cs | 739 ++++++++++++++++++ .../NeuropixelsV1eDialog.cs | 459 +++++++++++ .../NeuropixelsV1eDialog.resx | 168 ++++ .../NeuropixelsV1eEditor.cs | 38 + .../NeuropixelsV1eHeadstageDialog.Designer.cs | 208 +++++ .../NeuropixelsV1eHeadstageDialog.cs | 58 ++ .../NeuropixelsV1eHeadstageDialog.resx | 123 +++ .../NeuropixelsV1eHeadstageEditor.cs | 41 + .../Properties/Resources.Designer.cs | 60 ++ .../Properties/Resources.resx | 19 + .../Resources/StatusBlockedImage.png | Bin 0 -> 268 bytes .../Resources/StatusCriticalImage.png | Bin 0 -> 306 bytes .../Resources/StatusReadyImage.png | Bin 0 -> 309 bytes .../Resources/StatusRefreshImage.png | Bin 0 -> 13423 bytes .../Resources/StatusWarningImage.png | Bin 0 -> 1010 bytes .../Resources/UploadImage.png | Bin 0 -> 7224 bytes OpenEphys.Onix1/ConfigureBno055.cs | 13 + OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs | 73 +- .../ConfigureNeuropixelsV1eBno055.cs | 12 + .../ConfigureNeuropixelsV1eHeadstage.cs | 1 + OpenEphys.Onix1/I2CRegisterContext.cs | 14 +- OpenEphys.Onix1/NeuropixelsV1Helper.cs | 81 ++ OpenEphys.Onix1/NeuropixelsV1eElectrode.cs | 41 + .../NeuropixelsV1eGainCorrection.cs | 29 + .../NeuropixelsV1eProbeConfiguration.cs | 209 +++++ OpenEphys.Onix1/NeuropixelsV1eProbeGroup.cs | 232 ++++++ .../NeuropixelsV1eRegisterContext.cs | 142 ++-- OpenEphys.Onix1/OpenEphys.Onix1.csproj | 1 - 40 files changed, 3142 insertions(+), 138 deletions(-) create mode 100644 OpenEphys.Onix1.Design/Bno055Dialog.Designer.cs create mode 100644 OpenEphys.Onix1.Design/Bno055Dialog.cs create mode 100644 OpenEphys.Onix1.Design/Bno055Editor.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.Designer.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eBno055Editor.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.Designer.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eEditor.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.cs create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx create mode 100644 OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageEditor.cs create mode 100644 OpenEphys.Onix1.Design/Resources/StatusBlockedImage.png create mode 100644 OpenEphys.Onix1.Design/Resources/StatusCriticalImage.png create mode 100644 OpenEphys.Onix1.Design/Resources/StatusReadyImage.png create mode 100644 OpenEphys.Onix1.Design/Resources/StatusRefreshImage.png create mode 100644 OpenEphys.Onix1.Design/Resources/StatusWarningImage.png create mode 100644 OpenEphys.Onix1.Design/Resources/UploadImage.png create mode 100644 OpenEphys.Onix1/NeuropixelsV1Helper.cs create mode 100644 OpenEphys.Onix1/NeuropixelsV1eElectrode.cs create mode 100644 OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs create mode 100644 OpenEphys.Onix1/NeuropixelsV1eProbeConfiguration.cs create mode 100644 OpenEphys.Onix1/NeuropixelsV1eProbeGroup.cs diff --git a/Directory.Build.props b/Directory.Build.props index 64baf9c1..c00b43be 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -15,7 +15,7 @@ icon.png 0.1.0 - 9.0 + 10.0 strict diff --git a/OpenEphys.Onix1.Design/Bno055Dialog.Designer.cs b/OpenEphys.Onix1.Design/Bno055Dialog.Designer.cs new file mode 100644 index 00000000..1fa308e6 --- /dev/null +++ b/OpenEphys.Onix1.Design/Bno055Dialog.Designer.cs @@ -0,0 +1,39 @@ +namespace OpenEphys.Onix1.Design +{ + partial class Bno055Dialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "Bno055Dialog"; + } + + #endregion + } +} diff --git a/OpenEphys.Onix1.Design/Bno055Dialog.cs b/OpenEphys.Onix1.Design/Bno055Dialog.cs new file mode 100644 index 00000000..2fbb1a06 --- /dev/null +++ b/OpenEphys.Onix1.Design/Bno055Dialog.cs @@ -0,0 +1,42 @@ +using System; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Simple dialog that attaches the to a property grid. + /// + public partial class Bno055Dialog : GenericDeviceDialog + { + /// + /// Gets or sets the , allowing for changes made in the dialog to be reflected in the main editor. + /// + public ConfigureBno055 ConfigureNode + { + get => (ConfigureBno055)propertyGrid.SelectedObject; + set => propertyGrid.SelectedObject = value; + } + + /// + /// Initializes a new dialog for the operator. + /// + /// + public Bno055Dialog(ConfigureBno055 configureNode) + { + InitializeComponent(); + Shown += FormShown; + + ConfigureNode = new(configureNode); + } + + private void FormShown(object sender, EventArgs e) + { + if (!TopLevel) + { + splitContainer1.Panel2Collapsed = true; + splitContainer1.Panel2.Hide(); + + MaximumSize = new System.Drawing.Size(0, 0); + } + } + } +} diff --git a/OpenEphys.Onix1.Design/Bno055Editor.cs b/OpenEphys.Onix1.Design/Bno055Editor.cs new file mode 100644 index 00000000..f8e099fd --- /dev/null +++ b/OpenEphys.Onix1.Design/Bno055Editor.cs @@ -0,0 +1,35 @@ +using Bonsai.Design; +using System.ComponentModel; +using System.Windows.Forms; +using System; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Class that opens a new dialog for a . + /// + public class Bno055Editor : WorkflowComponentEditor + { + /// + public override bool EditComponent(ITypeDescriptorContext context, object component, IServiceProvider provider, IWin32Window owner) + { + if (provider != null) + { + var editorState = (IWorkflowEditorState)provider.GetService(typeof(IWorkflowEditorState)); + if (editorState != null && !editorState.WorkflowRunning && component is ConfigureBno055 configureBno055) + { + using var editorDialog = new Bno055Dialog(configureBno055); + + if (editorDialog.ShowDialog() == DialogResult.OK) + { + configureBno055.Enable = editorDialog.ConfigureNode.Enable; + + return true; + } + } + } + + return false; + } + } +} diff --git a/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs b/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs index a0d82ea3..adec7452 100644 --- a/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs +++ b/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs @@ -44,6 +44,8 @@ public ChannelConfigurationDialog(ProbeGroup probeGroup) SelectedContacts = new bool[ChannelConfiguration.NumberOfContacts]; + ReferenceContacts = new List(); + zedGraphChannels.MouseDownEvent += MouseDownEvent; zedGraphChannels.MouseMoveEvent += MouseMoveEvent; zedGraphChannels.MouseUpEvent += MouseUpEvent; @@ -1079,7 +1081,6 @@ private bool MouseMoveEvent(ZedGraphControl sender, MouseEventArgs e) private bool MouseUpEvent(ZedGraphControl sender, MouseEventArgs e) { sender.Cursor = Cursors.Arrow; - if (e.Button == MouseButtons.Left) { if (sender.GraphPane.GraphObjList[SelectionAreaTag] is BoxObj selectionArea && selectionArea != null && ChannelConfiguration != null) @@ -1095,7 +1096,6 @@ private bool MouseUpEvent(ZedGraphControl sender, MouseEventArgs e) { var x = c.Location.X + c.Location.Width / 2; var y = c.Location.Y - c.Location.Height / 2; - return c is not PolyObj && x >= rect.X && x <= rect.X + rect.Width && diff --git a/OpenEphys.Onix1.Design/ContactTag.cs b/OpenEphys.Onix1.Design/ContactTag.cs index e8da0f42..078d8a12 100644 --- a/OpenEphys.Onix1.Design/ContactTag.cs +++ b/OpenEphys.Onix1.Design/ContactTag.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace OpenEphys.Onix1.Design { diff --git a/OpenEphys.Onix1.Design/DesignHelper.cs b/OpenEphys.Onix1.Design/DesignHelper.cs index e8832316..8a567837 100644 --- a/OpenEphys.Onix1.Design/DesignHelper.cs +++ b/OpenEphys.Onix1.Design/DesignHelper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.Designer.cs new file mode 100644 index 00000000..b21d567b --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.Designer.cs @@ -0,0 +1,39 @@ +namespace OpenEphys.Onix1.Design +{ + partial class NeuropixelsV1eBno055Dialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "NeuropixelsV1eBno055Dialog"; + } + + #endregion + } +} \ No newline at end of file diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.cs new file mode 100644 index 00000000..e08ab053 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Dialog.cs @@ -0,0 +1,42 @@ +using System; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Partial class to create a GUI for . + /// + public partial class NeuropixelsV1eBno055Dialog : GenericDeviceDialog + { + /// + /// Gets or sets the object attached to + /// the property grid. + /// + public ConfigureNeuropixelsV1eBno055 ConfigureNode + { + get => (ConfigureNeuropixelsV1eBno055)propertyGrid.SelectedObject; + set => propertyGrid.SelectedObject = value; + } + + /// + /// Initializes a new instance with the given + /// object. + /// + /// A object that contains configuration settings. + public NeuropixelsV1eBno055Dialog(ConfigureNeuropixelsV1eBno055 configureNode) + { + InitializeComponent(); + Shown += FormShown; + + ConfigureNode = new(configureNode); + } + + private void FormShown(object sender, EventArgs e) + { + if (!TopLevel) + { + splitContainer1.Panel2Collapsed = true; + splitContainer1.Panel2.Hide(); + } + } + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Editor.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Editor.cs new file mode 100644 index 00000000..a6d9f805 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eBno055Editor.cs @@ -0,0 +1,31 @@ +using System; +using System.ComponentModel; +using Bonsai.Design; +using System.Windows.Forms; + +namespace OpenEphys.Onix1.Design +{ + internal class NeuropixelsV1eBno055Editor : WorkflowComponentEditor + { + public override bool EditComponent(ITypeDescriptorContext context, object component, IServiceProvider provider, IWin32Window owner) + { + if (provider != null) + { + var editorState = (IWorkflowEditorState)provider.GetService(typeof(IWorkflowEditorState)); + if (editorState != null && !editorState.WorkflowRunning && component is ConfigureNeuropixelsV1eBno055 configureBno055) + { + using var editorDialog = new NeuropixelsV1eBno055Dialog(configureBno055); + + if (editorDialog.ShowDialog() == DialogResult.OK) + { + configureBno055.Enable = editorDialog.ConfigureNode.Enable; + + return true; + } + } + } + + return false; + } + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.Designer.cs new file mode 100644 index 00000000..bd4f88f6 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.Designer.cs @@ -0,0 +1,39 @@ +namespace OpenEphys.Onix1.Design +{ + partial class NeuropixelsV1eChannelConfigurationDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(800, 450); + this.Text = "NeuropixelsV1eChannelConfigurationDialog"; + } + + #endregion + } +} \ No newline at end of file diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs new file mode 100644 index 00000000..127ee75f --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Windows.Forms; +using OpenEphys.ProbeInterface.NET; +using ZedGraph; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Partial class to create a channel configuration GUI for the class. + /// + public partial class NeuropixelsV1eChannelConfigurationDialog : ChannelConfigurationDialog + { + internal event EventHandler OnZoom; + internal event EventHandler OnFileLoad; + + readonly IReadOnlyList ReferenceContactsList = new List { 191, 575, 959 }; + + /// + /// Public object that is modified by + /// . + /// + public NeuropixelsV1eProbeConfiguration ProbeConfiguration { get; set; } + + /// + /// Initializes a new instance of . + /// + /// A object holding the current configuration settings. + public NeuropixelsV1eChannelConfigurationDialog(NeuropixelsV1eProbeConfiguration probeConfiguration) + : base(probeConfiguration.ChannelConfiguration) + { + zedGraphChannels.IsEnableHPan = false; + zedGraphChannels.ZoomButtons = MouseButtons.None; + zedGraphChannels.ZoomButtons2 = MouseButtons.None; + + zedGraphChannels.ZoomStepFraction = 0.5; + + ReferenceContacts.AddRange(ReferenceContactsList); + + ProbeConfiguration = probeConfiguration; + + HighlightEnabledContacts(); + UpdateContactLabels(); + DrawScale(); + RefreshZedGraph(); + } + + internal override ProbeGroup DefaultChannelLayout() + { + return new NeuropixelsV1eProbeGroup(); + } + + internal override void LoadDefaultChannelLayout() + { + ProbeConfiguration = new(ProbeConfiguration.SpikeAmplifierGain, ProbeConfiguration.LfpAmplifierGain, ProbeConfiguration.Reference, ProbeConfiguration.SpikeFilter); + ChannelConfiguration = ProbeConfiguration.ChannelConfiguration; + + OnFileOpenHandler(); + } + + internal override void OpenFile() + { + base.OpenFile(); + + ProbeConfiguration = new((NeuropixelsV1eProbeGroup)ChannelConfiguration, ProbeConfiguration.SpikeAmplifierGain, ProbeConfiguration.LfpAmplifierGain, ProbeConfiguration.Reference, ProbeConfiguration.SpikeFilter); + ChannelConfiguration = ProbeConfiguration.ChannelConfiguration; + + OnFileOpenHandler(); + } + + private void OnFileOpenHandler() + { + OnFileLoad?.Invoke(this, EventArgs.Empty); + } + + internal override void ZoomEvent(ZedGraphControl sender, ZoomState oldState, ZoomState newState) + { + base.ZoomEvent(sender, oldState, newState); + + UpdateFontSize(); + DrawScale(); + RefreshZedGraph(); + + OnZoomHandler(); + } + + private void OnZoomHandler() + { + OnZoom?.Invoke(this, EventArgs.Empty); + } + + internal override void DrawScale() + { + if (ProbeConfiguration == null) + return; + + const string ScalePointsTag = "scale_points"; + const string ScaleTextTag = "scale_text"; + + zedGraphChannels.GraphPane.GraphObjList.RemoveAll(obj => obj is TextObj && obj.Tag is string tag && tag == ScaleTextTag); + zedGraphChannels.GraphPane.CurveList.RemoveAll(curve => curve.Tag is string tag && tag == ScalePointsTag); + + const int MajorTickIncrement = 100; + const int MajorTickLength = 10; + const int MinorTickIncrement = 10; + const int MinorTickLength = 5; + + if (ProbeConfiguration.ChannelConfiguration.Probes.ElementAt(0).SiUnits != ProbeSiUnits.um) + { + MessageBox.Show("Warning: Expected ProbeGroup units to be in microns, but it is in millimeters. Scale might not be accurate."); + } + + var fontSize = CalculateFontSize(); + + var zoomedOut = fontSize <= 2; + + fontSize = zoomedOut ? 6 : fontSize * 3; + var majorTickOffset = MajorTickLength + CalculateScaleRange(zedGraphChannels.GraphPane.XAxis.Scale) * 0.015; + majorTickOffset = majorTickOffset > 50 ? 50 : majorTickOffset; + + var x = GetProbeContourMaxX(zedGraphChannels.GraphPane.GraphObjList) + 40; + var minY = GetProbeContourMinY(zedGraphChannels.GraphPane.GraphObjList); + var maxY = GetProbeContourMaxY(zedGraphChannels.GraphPane.GraphObjList); + + PointPairList pointList = new(); + + var countMajorTicks = 0; + + for (int i = (int)minY; i < maxY; i += MajorTickIncrement) + { + PointPair majorTickLocation = new(x + MajorTickLength, minY + MajorTickIncrement * countMajorTicks); + + pointList.Add(new PointPair(x, minY + MajorTickIncrement * countMajorTicks)); + pointList.Add(majorTickLocation); + pointList.Add(new PointPair(x, minY + MajorTickIncrement * countMajorTicks)); + + if (!zoomedOut || i % (5 * MajorTickIncrement) == 0) + { + TextObj textObj = new($"{i} µm", majorTickLocation.X + 10, majorTickLocation.Y, CoordType.AxisXYScale, AlignH.Left, AlignV.Center) + { + Tag = ScaleTextTag + }; + textObj.FontSpec.Border.IsVisible = false; + textObj.FontSpec.Size = fontSize; + zedGraphChannels.GraphPane.GraphObjList.Add(textObj); + } + + if (!zoomedOut) + { + var countMinorTicks = 1; + + for (int j = i + MinorTickIncrement; j < i + MajorTickIncrement && i + MinorTickIncrement * countMinorTicks < maxY; j += MinorTickIncrement) + { + pointList.Add(new PointPair(x, minY + MajorTickIncrement * countMajorTicks + MinorTickIncrement * countMinorTicks)); + pointList.Add(new PointPair(x + MinorTickLength, minY + MajorTickIncrement * countMajorTicks + MinorTickIncrement * countMinorTicks)); + pointList.Add(new PointPair(x, minY + MajorTickIncrement * countMajorTicks + MinorTickIncrement * countMinorTicks)); + + countMinorTicks++; + } + } + + countMajorTicks++; + } + + var curve = zedGraphChannels.GraphPane.AddCurve(ScalePointsTag, pointList, Color.Black, SymbolType.None); + + curve.Line.Width = zoomedOut ? 2 : 4; + curve.Label.IsVisible = false; + curve.Symbol.IsVisible = false; + } + + internal override void HighlightEnabledContacts() + { + if (ProbeConfiguration == null || ProbeConfiguration.ChannelMap == null) + return; + + var contactObjects = zedGraphChannels.GraphPane.GraphObjList.OfType() + .Where(c => c is not PolyObj); + + var enabledContacts = contactObjects.Where(c => c.Fill.Color == EnabledContactFill); + + foreach (var contact in enabledContacts) + { + contact.Fill.Color = DisabledContactFill; + } + + var contactsToEnable = contactObjects.Where(c => + { + var tag = c.Tag as ContactTag; + var channel = NeuropixelsV1eElectrode.GetChannelNumber(tag.ContactIndex); + return ProbeConfiguration.ChannelMap[channel].Index == tag.ContactIndex; + }); + + foreach (var contact in contactsToEnable) + { + var tag = (ContactTag)contact.Tag; + + contact.Fill.Color = ReferenceContacts.Any(x => x == tag.ContactIndex) ? ReferenceContactFill : EnabledContactFill; + } + } + + internal override void UpdateContactLabels() + { + if (ProbeConfiguration.ChannelConfiguration == null) + return; + + var textObjs = zedGraphChannels.GraphPane.GraphObjList.OfType() + .Where(t => t.Tag is ContactTag); + + var textObjsToUpdate = textObjs.Where(t => t.FontSpec.FontColor != DisabledContactTextColor); + + foreach (var textObj in textObjsToUpdate) + { + textObj.FontSpec.FontColor = DisabledContactTextColor; + } + + textObjsToUpdate = textObjs.Where(c => + { + var tag = c.Tag as ContactTag; + var channel = NeuropixelsV1eElectrode.GetChannelNumber(tag.ContactIndex); + return ProbeConfiguration.ChannelMap[channel].Index == tag.ContactIndex; + }); + + foreach (var textObj in textObjsToUpdate) + { + textObj.FontSpec.FontColor = EnabledContactTextColor; + } + } + + internal override string ContactString(int deviceChannelIndex, int index) + { + return index.ToString(); + } + + internal void EnableElectrodes(List electrodes) + { + ProbeConfiguration.SelectElectrodes(electrodes); + } + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs new file mode 100644 index 00000000..9ce320d3 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs @@ -0,0 +1,739 @@ +namespace OpenEphys.Onix1.Design +{ + partial class NeuropixelsV1eDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelGainCalSN; + System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelAdcCalSN; + System.Windows.Forms.Label labelPresets; + System.Windows.Forms.Label label4; + System.Windows.Forms.Label labelGainCorrection; + System.Windows.Forms.Label adcCalibrationFile; + System.Windows.Forms.Label gainCalibrationFile; + System.Windows.Forms.Label spikeFilter; + System.Windows.Forms.Label Reference; + System.Windows.Forms.Label lfpGain; + System.Windows.Forms.Label apGain; + System.Windows.Forms.Label label3; + System.Windows.Forms.Label label1; + this.menuStrip = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip = new System.Windows.Forms.StatusStrip(); + this.gainCalibrationSN = new System.Windows.Forms.ToolStripStatusLabel(); + this.adcCalibrationSN = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tabControlProbe = new System.Windows.Forms.TabControl(); + this.tabPageProbe = new System.Windows.Forms.TabPage(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.panelProbe = new System.Windows.Forms.Panel(); + this.panelTrackBar = new System.Windows.Forms.Panel(); + this.trackBarProbePosition = new System.Windows.Forms.TrackBar(); + this.panelOptions = new System.Windows.Forms.Panel(); + this.buttonEnableContacts = new System.Windows.Forms.Button(); + this.buttonClearSelections = new System.Windows.Forms.Button(); + this.comboBoxChannelPresets = new System.Windows.Forms.ComboBox(); + this.buttonResetZoom = new System.Windows.Forms.Button(); + this.buttonClearAdcCalibrationFile = new System.Windows.Forms.Button(); + this.buttonClearGainCalibrationFile = new System.Windows.Forms.Button(); + this.textBoxLfpGainCorrection = new System.Windows.Forms.TextBox(); + this.textBoxApGainCorrection = new System.Windows.Forms.TextBox(); + this.checkBoxSpikeFilter = new System.Windows.Forms.CheckBox(); + this.buttonChooseAdcCalibrationFile = new System.Windows.Forms.Button(); + this.textBoxAdcCalibrationFile = new System.Windows.Forms.TextBox(); + this.buttonChooseGainCalibrationFile = new System.Windows.Forms.Button(); + this.textBoxGainCalibrationFile = new System.Windows.Forms.TextBox(); + this.comboBoxReference = new System.Windows.Forms.ComboBox(); + this.comboBoxLfpGain = new System.Windows.Forms.ComboBox(); + this.comboBoxApGain = new System.Windows.Forms.ComboBox(); + this.tabPageADCs = new System.Windows.Forms.TabPage(); + this.dataGridViewAdcs = new System.Windows.Forms.DataGridView(); + this.panel1 = new System.Windows.Forms.Panel(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOkay = new System.Windows.Forms.Button(); + toolStripStatusLabelGainCalSN = new System.Windows.Forms.ToolStripStatusLabel(); + toolStripStatusLabelAdcCalSN = new System.Windows.Forms.ToolStripStatusLabel(); + labelPresets = new System.Windows.Forms.Label(); + label4 = new System.Windows.Forms.Label(); + labelGainCorrection = new System.Windows.Forms.Label(); + adcCalibrationFile = new System.Windows.Forms.Label(); + gainCalibrationFile = new System.Windows.Forms.Label(); + spikeFilter = new System.Windows.Forms.Label(); + Reference = new System.Windows.Forms.Label(); + lfpGain = new System.Windows.Forms.Label(); + apGain = new System.Windows.Forms.Label(); + label3 = new System.Windows.Forms.Label(); + label1 = new System.Windows.Forms.Label(); + this.menuStrip.SuspendLayout(); + this.statusStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tabControlProbe.SuspendLayout(); + this.tabPageProbe.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.panelProbe.SuspendLayout(); + this.panelTrackBar.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBarProbePosition)).BeginInit(); + this.panelOptions.SuspendLayout(); + this.tabPageADCs.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewAdcs)).BeginInit(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStripStatusLabelGainCalSN + // + toolStripStatusLabelGainCalSN.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + toolStripStatusLabelGainCalSN.Name = "toolStripStatusLabelGainCalSN"; + toolStripStatusLabelGainCalSN.Size = new System.Drawing.Size(119, 15); + toolStripStatusLabelGainCalSN.Text = "Gain Calibration SN: "; + // + // toolStripStatusLabelAdcCalSN + // + toolStripStatusLabelAdcCalSN.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + toolStripStatusLabelAdcCalSN.Name = "toolStripStatusLabelAdcCalSN"; + toolStripStatusLabelAdcCalSN.Size = new System.Drawing.Size(118, 15); + toolStripStatusLabelAdcCalSN.Text = "ADC Calibration SN: "; + // + // labelPresets + // + labelPresets.AutoSize = true; + labelPresets.Location = new System.Drawing.Point(16, 313); + labelPresets.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + labelPresets.Name = "labelPresets"; + labelPresets.Size = new System.Drawing.Size(84, 13); + labelPresets.TabIndex = 25; + labelPresets.Text = "Channel Presets"; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new System.Drawing.Point(67, 82); + label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(29, 13); + label4.TabIndex = 20; + label4.Text = "Gain"; + // + // labelGainCorrection + // + labelGainCorrection.AutoSize = true; + labelGainCorrection.Location = new System.Drawing.Point(146, 82); + labelGainCorrection.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + labelGainCorrection.Name = "labelGainCorrection"; + labelGainCorrection.Size = new System.Drawing.Size(55, 13); + labelGainCorrection.TabIndex = 15; + labelGainCorrection.Text = "Correction"; + // + // adcCalibrationFile + // + adcCalibrationFile.AutoSize = true; + adcCalibrationFile.Location = new System.Drawing.Point(16, 163); + adcCalibrationFile.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + adcCalibrationFile.MaximumSize = new System.Drawing.Size(133, 29); + adcCalibrationFile.Name = "adcCalibrationFile"; + adcCalibrationFile.Size = new System.Drawing.Size(100, 13); + adcCalibrationFile.TabIndex = 11; + adcCalibrationFile.Text = "ADC Calibration File"; + // + // gainCalibrationFile + // + gainCalibrationFile.AutoSize = true; + gainCalibrationFile.Location = new System.Drawing.Point(16, 12); + gainCalibrationFile.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + gainCalibrationFile.MaximumSize = new System.Drawing.Size(133, 29); + gainCalibrationFile.Name = "gainCalibrationFile"; + gainCalibrationFile.Size = new System.Drawing.Size(100, 13); + gainCalibrationFile.TabIndex = 8; + gainCalibrationFile.Text = "Gain Calibration File"; + // + // spikeFilter + // + spikeFilter.AutoSize = true; + spikeFilter.Location = new System.Drawing.Point(16, 272); + spikeFilter.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + spikeFilter.Name = "spikeFilter"; + spikeFilter.Size = new System.Drawing.Size(59, 13); + spikeFilter.TabIndex = 6; + spikeFilter.Text = "Spike Filter"; + // + // Reference + // + Reference.AutoSize = true; + Reference.Location = new System.Drawing.Point(16, 242); + Reference.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + Reference.Name = "Reference"; + Reference.Size = new System.Drawing.Size(57, 13); + Reference.TabIndex = 4; + Reference.Text = "Reference"; + // + // lfpGain + // + lfpGain.AutoSize = true; + lfpGain.Location = new System.Drawing.Point(16, 133); + lfpGain.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + lfpGain.Name = "lfpGain"; + lfpGain.Size = new System.Drawing.Size(26, 13); + lfpGain.TabIndex = 2; + lfpGain.Text = "LFP"; + // + // apGain + // + apGain.AutoSize = true; + apGain.Location = new System.Drawing.Point(16, 104); + apGain.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + apGain.Name = "apGain"; + apGain.Size = new System.Drawing.Size(21, 13); + apGain.TabIndex = 0; + apGain.Text = "AP"; + // + // label3 + // + label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + label3.AutoSize = true; + label3.Location = new System.Drawing.Point(5, 0); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(38, 13); + label3.TabIndex = 32; + label3.Text = "10 mm"; + // + // label1 + // + label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(8, 509); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(32, 13); + label1.TabIndex = 31; + label1.Text = "0 mm"; + // + // menuStrip + // + this.menuStrip.ImageScalingSize = new System.Drawing.Size(24, 24); + this.menuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem}); + this.menuStrip.Location = new System.Drawing.Point(0, 0); + this.menuStrip.Name = "menuStrip"; + this.menuStrip.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1); + this.menuStrip.Size = new System.Drawing.Size(998, 24); + this.menuStrip.TabIndex = 0; + this.menuStrip.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 22); + this.fileToolStripMenuItem.Text = "File"; + // + // statusStrip + // + this.statusStrip.AutoSize = false; + this.statusStrip.ImageScalingSize = new System.Drawing.Size(24, 24); + this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + toolStripStatusLabelGainCalSN, + this.gainCalibrationSN, + toolStripStatusLabelAdcCalSN, + this.adcCalibrationSN, + this.toolStripStatus}); + this.statusStrip.Location = new System.Drawing.Point(0, 607); + this.statusStrip.Name = "statusStrip"; + this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 9, 0); + this.statusStrip.Size = new System.Drawing.Size(998, 20); + this.statusStrip.TabIndex = 1; + this.statusStrip.Text = "statusStrip1"; + // + // gainCalibrationSN + // + this.gainCalibrationSN.AutoSize = false; + this.gainCalibrationSN.Name = "gainCalibrationSN"; + this.gainCalibrationSN.Size = new System.Drawing.Size(150, 15); + this.gainCalibrationSN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // adcCalibrationSN + // + this.adcCalibrationSN.AutoSize = false; + this.adcCalibrationSN.Name = "adcCalibrationSN"; + this.adcCalibrationSN.Size = new System.Drawing.Size(150, 15); + this.adcCalibrationSN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // toolStripStatus + // + this.toolStripStatus.Image = global::OpenEphys.Onix1.Design.Properties.Resources.StatusReadyImage; + this.toolStripStatus.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripStatus.Name = "toolStripStatus"; + this.toolStripStatus.Size = new System.Drawing.Size(16, 15); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(2); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tabControlProbe); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.panel1); + this.splitContainer1.Size = new System.Drawing.Size(998, 583); + this.splitContainer1.SplitterDistance = 554; + this.splitContainer1.SplitterWidth = 3; + this.splitContainer1.TabIndex = 2; + // + // tabControlProbe + // + this.tabControlProbe.Controls.Add(this.tabPageProbe); + this.tabControlProbe.Controls.Add(this.tabPageADCs); + this.tabControlProbe.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControlProbe.Location = new System.Drawing.Point(0, 0); + this.tabControlProbe.Margin = new System.Windows.Forms.Padding(2); + this.tabControlProbe.Name = "tabControlProbe"; + this.tabControlProbe.SelectedIndex = 0; + this.tabControlProbe.Size = new System.Drawing.Size(998, 554); + this.tabControlProbe.TabIndex = 0; + // + // tabPageProbe + // + this.tabPageProbe.Controls.Add(this.splitContainer2); + this.tabPageProbe.Location = new System.Drawing.Point(4, 22); + this.tabPageProbe.Margin = new System.Windows.Forms.Padding(2); + this.tabPageProbe.Name = "tabPageProbe"; + this.tabPageProbe.Padding = new System.Windows.Forms.Padding(2); + this.tabPageProbe.Size = new System.Drawing.Size(990, 528); + this.tabPageProbe.TabIndex = 0; + this.tabPageProbe.Text = "Probe"; + this.tabPageProbe.UseVisualStyleBackColor = true; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer2.Location = new System.Drawing.Point(2, 2); + this.splitContainer2.Margin = new System.Windows.Forms.Padding(2); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.BackColor = System.Drawing.SystemColors.ControlLight; + this.splitContainer2.Panel1.Controls.Add(this.panelProbe); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.panelOptions); + this.splitContainer2.Size = new System.Drawing.Size(986, 524); + this.splitContainer2.SplitterDistance = 757; + this.splitContainer2.SplitterWidth = 3; + this.splitContainer2.TabIndex = 0; + // + // panelProbe + // + this.panelProbe.BackColor = System.Drawing.SystemColors.Control; + this.panelProbe.Controls.Add(this.panelTrackBar); + this.panelProbe.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelProbe.Location = new System.Drawing.Point(0, 0); + this.panelProbe.Name = "panelProbe"; + this.panelProbe.Size = new System.Drawing.Size(757, 524); + this.panelProbe.TabIndex = 0; + // + // panelTrackBar + // + this.panelTrackBar.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.panelTrackBar.Controls.Add(label1); + this.panelTrackBar.Controls.Add(label3); + this.panelTrackBar.Controls.Add(this.trackBarProbePosition); + this.panelTrackBar.Location = new System.Drawing.Point(706, 0); + this.panelTrackBar.Name = "panelTrackBar"; + this.panelTrackBar.Size = new System.Drawing.Size(48, 524); + this.panelTrackBar.TabIndex = 33; + // + // trackBarProbePosition + // + this.trackBarProbePosition.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Right))); + this.trackBarProbePosition.BackColor = System.Drawing.SystemColors.Control; + this.trackBarProbePosition.Location = new System.Drawing.Point(2, 2); + this.trackBarProbePosition.Margin = new System.Windows.Forms.Padding(2); + this.trackBarProbePosition.Maximum = 100; + this.trackBarProbePosition.Name = "trackBarProbePosition"; + this.trackBarProbePosition.Orientation = System.Windows.Forms.Orientation.Vertical; + this.trackBarProbePosition.Size = new System.Drawing.Size(45, 520); + this.trackBarProbePosition.TabIndex = 30; + this.trackBarProbePosition.TickFrequency = 2; + this.trackBarProbePosition.TickStyle = System.Windows.Forms.TickStyle.Both; + this.trackBarProbePosition.Value = 50; + this.trackBarProbePosition.Scroll += new System.EventHandler(this.TrackBarScroll); + // + // panelOptions + // + this.panelOptions.Controls.Add(this.buttonEnableContacts); + this.panelOptions.Controls.Add(this.buttonClearSelections); + this.panelOptions.Controls.Add(this.comboBoxChannelPresets); + this.panelOptions.Controls.Add(labelPresets); + this.panelOptions.Controls.Add(this.buttonResetZoom); + this.panelOptions.Controls.Add(this.buttonClearAdcCalibrationFile); + this.panelOptions.Controls.Add(label4); + this.panelOptions.Controls.Add(this.buttonClearGainCalibrationFile); + this.panelOptions.Controls.Add(this.textBoxLfpGainCorrection); + this.panelOptions.Controls.Add(this.textBoxApGainCorrection); + this.panelOptions.Controls.Add(labelGainCorrection); + this.panelOptions.Controls.Add(this.checkBoxSpikeFilter); + this.panelOptions.Controls.Add(this.buttonChooseAdcCalibrationFile); + this.panelOptions.Controls.Add(this.textBoxAdcCalibrationFile); + this.panelOptions.Controls.Add(adcCalibrationFile); + this.panelOptions.Controls.Add(this.buttonChooseGainCalibrationFile); + this.panelOptions.Controls.Add(this.textBoxGainCalibrationFile); + this.panelOptions.Controls.Add(gainCalibrationFile); + this.panelOptions.Controls.Add(spikeFilter); + this.panelOptions.Controls.Add(this.comboBoxReference); + this.panelOptions.Controls.Add(Reference); + this.panelOptions.Controls.Add(this.comboBoxLfpGain); + this.panelOptions.Controls.Add(lfpGain); + this.panelOptions.Controls.Add(this.comboBoxApGain); + this.panelOptions.Controls.Add(apGain); + this.panelOptions.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelOptions.Location = new System.Drawing.Point(0, 0); + this.panelOptions.Margin = new System.Windows.Forms.Padding(2); + this.panelOptions.Name = "panelOptions"; + this.panelOptions.Size = new System.Drawing.Size(226, 524); + this.panelOptions.TabIndex = 2; + // + // buttonEnableContacts + // + this.buttonEnableContacts.Location = new System.Drawing.Point(16, 349); + this.buttonEnableContacts.Margin = new System.Windows.Forms.Padding(2); + this.buttonEnableContacts.Name = "buttonEnableContacts"; + this.buttonEnableContacts.Size = new System.Drawing.Size(94, 36); + this.buttonEnableContacts.TabIndex = 28; + this.buttonEnableContacts.Text = "Enable Selected Contacts"; + this.buttonEnableContacts.UseVisualStyleBackColor = true; + this.buttonEnableContacts.Click += new System.EventHandler(this.ButtonClick); + // + // buttonClearSelections + // + this.buttonClearSelections.Location = new System.Drawing.Point(121, 348); + this.buttonClearSelections.Margin = new System.Windows.Forms.Padding(2); + this.buttonClearSelections.Name = "buttonClearSelections"; + this.buttonClearSelections.Size = new System.Drawing.Size(94, 36); + this.buttonClearSelections.TabIndex = 27; + this.buttonClearSelections.Text = "Deselect Contacts"; + this.buttonClearSelections.UseVisualStyleBackColor = true; + this.buttonClearSelections.Click += new System.EventHandler(this.ButtonClick); + // + // comboBoxChannelPresets + // + this.comboBoxChannelPresets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxChannelPresets.FormattingEnabled = true; + this.comboBoxChannelPresets.Location = new System.Drawing.Point(103, 309); + this.comboBoxChannelPresets.Margin = new System.Windows.Forms.Padding(2); + this.comboBoxChannelPresets.Name = "comboBoxChannelPresets"; + this.comboBoxChannelPresets.Size = new System.Drawing.Size(112, 21); + this.comboBoxChannelPresets.TabIndex = 26; + // + // buttonResetZoom + // + this.buttonResetZoom.Location = new System.Drawing.Point(66, 389); + this.buttonResetZoom.Margin = new System.Windows.Forms.Padding(2); + this.buttonResetZoom.Name = "buttonResetZoom"; + this.buttonResetZoom.Size = new System.Drawing.Size(94, 36); + this.buttonResetZoom.TabIndex = 22; + this.buttonResetZoom.Text = "Reset Zoom"; + this.buttonResetZoom.UseVisualStyleBackColor = true; + this.buttonResetZoom.Click += new System.EventHandler(this.ButtonClick); + // + // buttonClearAdcCalibrationFile + // + this.buttonClearAdcCalibrationFile.Location = new System.Drawing.Point(121, 202); + this.buttonClearAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonClearAdcCalibrationFile.Name = "buttonClearAdcCalibrationFile"; + this.buttonClearAdcCalibrationFile.Size = new System.Drawing.Size(94, 21); + this.buttonClearAdcCalibrationFile.TabIndex = 21; + this.buttonClearAdcCalibrationFile.Text = "Clear"; + this.buttonClearAdcCalibrationFile.UseVisualStyleBackColor = true; + this.buttonClearAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // + // buttonClearGainCalibrationFile + // + this.buttonClearGainCalibrationFile.Location = new System.Drawing.Point(121, 51); + this.buttonClearGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonClearGainCalibrationFile.Name = "buttonClearGainCalibrationFile"; + this.buttonClearGainCalibrationFile.Size = new System.Drawing.Size(94, 21); + this.buttonClearGainCalibrationFile.TabIndex = 19; + this.buttonClearGainCalibrationFile.Text = "Clear"; + this.buttonClearGainCalibrationFile.UseVisualStyleBackColor = true; + this.buttonClearGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // + // textBoxLfpGainCorrection + // + this.textBoxLfpGainCorrection.Location = new System.Drawing.Point(132, 129); + this.textBoxLfpGainCorrection.Margin = new System.Windows.Forms.Padding(2); + this.textBoxLfpGainCorrection.Name = "textBoxLfpGainCorrection"; + this.textBoxLfpGainCorrection.ReadOnly = true; + this.textBoxLfpGainCorrection.Size = new System.Drawing.Size(83, 20); + this.textBoxLfpGainCorrection.TabIndex = 18; + // + // textBoxApGainCorrection + // + this.textBoxApGainCorrection.Location = new System.Drawing.Point(132, 100); + this.textBoxApGainCorrection.Margin = new System.Windows.Forms.Padding(2); + this.textBoxApGainCorrection.Name = "textBoxApGainCorrection"; + this.textBoxApGainCorrection.ReadOnly = true; + this.textBoxApGainCorrection.Size = new System.Drawing.Size(83, 20); + this.textBoxApGainCorrection.TabIndex = 16; + // + // checkBoxSpikeFilter + // + this.checkBoxSpikeFilter.AutoSize = true; + this.checkBoxSpikeFilter.Location = new System.Drawing.Point(103, 270); + this.checkBoxSpikeFilter.Margin = new System.Windows.Forms.Padding(2); + this.checkBoxSpikeFilter.Name = "checkBoxSpikeFilter"; + this.checkBoxSpikeFilter.Size = new System.Drawing.Size(65, 17); + this.checkBoxSpikeFilter.TabIndex = 14; + this.checkBoxSpikeFilter.Text = "Enabled"; + this.checkBoxSpikeFilter.UseVisualStyleBackColor = true; + // + // buttonChooseAdcCalibrationFile + // + this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(16, 202); + this.buttonChooseAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonChooseAdcCalibrationFile.Name = "buttonChooseAdcCalibrationFile"; + this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(94, 21); + this.buttonChooseAdcCalibrationFile.TabIndex = 13; + this.buttonChooseAdcCalibrationFile.Text = "Choose"; + this.buttonChooseAdcCalibrationFile.UseVisualStyleBackColor = true; + this.buttonChooseAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // + // textBoxAdcCalibrationFile + // + this.textBoxAdcCalibrationFile.Location = new System.Drawing.Point(16, 178); + this.textBoxAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.textBoxAdcCalibrationFile.Name = "textBoxAdcCalibrationFile"; + this.textBoxAdcCalibrationFile.ReadOnly = true; + this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(199, 20); + this.textBoxAdcCalibrationFile.TabIndex = 12; + this.textBoxAdcCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.textBoxAdcCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); + // + // buttonChooseGainCalibrationFile + // + this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(16, 51); + this.buttonChooseGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonChooseGainCalibrationFile.Name = "buttonChooseGainCalibrationFile"; + this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(94, 21); + this.buttonChooseGainCalibrationFile.TabIndex = 10; + this.buttonChooseGainCalibrationFile.Text = "Choose"; + this.buttonChooseGainCalibrationFile.UseVisualStyleBackColor = true; + this.buttonChooseGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // + // textBoxGainCalibrationFile + // + this.textBoxGainCalibrationFile.Location = new System.Drawing.Point(16, 27); + this.textBoxGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.textBoxGainCalibrationFile.Name = "textBoxGainCalibrationFile"; + this.textBoxGainCalibrationFile.ReadOnly = true; + this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(199, 20); + this.textBoxGainCalibrationFile.TabIndex = 9; + this.textBoxGainCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.textBoxGainCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); + // + // comboBoxReference + // + this.comboBoxReference.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxReference.FormattingEnabled = true; + this.comboBoxReference.Location = new System.Drawing.Point(103, 238); + this.comboBoxReference.Margin = new System.Windows.Forms.Padding(2); + this.comboBoxReference.Name = "comboBoxReference"; + this.comboBoxReference.Size = new System.Drawing.Size(112, 21); + this.comboBoxReference.TabIndex = 5; + // + // comboBoxLfpGain + // + this.comboBoxLfpGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxLfpGain.FormattingEnabled = true; + this.comboBoxLfpGain.Location = new System.Drawing.Point(40, 129); + this.comboBoxLfpGain.Margin = new System.Windows.Forms.Padding(2); + this.comboBoxLfpGain.Name = "comboBoxLfpGain"; + this.comboBoxLfpGain.Size = new System.Drawing.Size(82, 21); + this.comboBoxLfpGain.TabIndex = 3; + // + // comboBoxApGain + // + this.comboBoxApGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxApGain.FormattingEnabled = true; + this.comboBoxApGain.Location = new System.Drawing.Point(40, 100); + this.comboBoxApGain.Margin = new System.Windows.Forms.Padding(2); + this.comboBoxApGain.Name = "comboBoxApGain"; + this.comboBoxApGain.Size = new System.Drawing.Size(82, 21); + this.comboBoxApGain.TabIndex = 1; + // + // tabPageADCs + // + this.tabPageADCs.Controls.Add(this.dataGridViewAdcs); + this.tabPageADCs.Location = new System.Drawing.Point(4, 22); + this.tabPageADCs.Margin = new System.Windows.Forms.Padding(2); + this.tabPageADCs.Name = "tabPageADCs"; + this.tabPageADCs.Size = new System.Drawing.Size(990, 527); + this.tabPageADCs.TabIndex = 2; + this.tabPageADCs.Text = "ADCs"; + this.tabPageADCs.UseVisualStyleBackColor = true; + // + // dataGridViewAdcs + // + this.dataGridViewAdcs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridViewAdcs.Dock = System.Windows.Forms.DockStyle.Fill; + this.dataGridViewAdcs.Location = new System.Drawing.Point(0, 0); + this.dataGridViewAdcs.Margin = new System.Windows.Forms.Padding(2); + this.dataGridViewAdcs.Name = "dataGridViewAdcs"; + this.dataGridViewAdcs.RowHeadersWidth = 62; + this.dataGridViewAdcs.RowTemplate.Height = 28; + this.dataGridViewAdcs.Size = new System.Drawing.Size(990, 527); + this.dataGridViewAdcs.TabIndex = 0; + // + // panel1 + // + this.panel1.Controls.Add(this.buttonCancel); + this.panel1.Controls.Add(this.buttonOkay); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Margin = new System.Windows.Forms.Padding(2); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(998, 26); + this.panel1.TabIndex = 0; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Location = new System.Drawing.Point(908, 0); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(83, 22); + this.buttonCancel.TabIndex = 1; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOkay + // + this.buttonOkay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOkay.Location = new System.Drawing.Point(819, 0); + this.buttonOkay.Margin = new System.Windows.Forms.Padding(2); + this.buttonOkay.Name = "buttonOkay"; + this.buttonOkay.Size = new System.Drawing.Size(83, 22); + this.buttonOkay.TabIndex = 0; + this.buttonOkay.Text = "OK"; + this.buttonOkay.UseVisualStyleBackColor = true; + this.buttonOkay.Click += new System.EventHandler(this.ButtonClick); + // + // NeuropixelsV1eDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(998, 627); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.statusStrip); + this.Controls.Add(this.menuStrip); + this.DoubleBuffered = true; + this.MainMenuStrip = this.menuStrip; + this.Margin = new System.Windows.Forms.Padding(2); + this.Name = "NeuropixelsV1eDialog"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "NeuropixelsV1eDialog"; + this.menuStrip.ResumeLayout(false); + this.menuStrip.PerformLayout(); + this.statusStrip.ResumeLayout(false); + this.statusStrip.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.tabControlProbe.ResumeLayout(false); + this.tabPageProbe.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); + this.splitContainer2.ResumeLayout(false); + this.panelProbe.ResumeLayout(false); + this.panelTrackBar.ResumeLayout(false); + this.panelTrackBar.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBarProbePosition)).EndInit(); + this.panelOptions.ResumeLayout(false); + this.panelOptions.PerformLayout(); + this.tabPageADCs.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridViewAdcs)).EndInit(); + this.panel1.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip; + private System.Windows.Forms.StatusStrip statusStrip; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.TabControl tabControlProbe; + private System.Windows.Forms.TabPage tabPageProbe; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOkay; + private System.Windows.Forms.ToolStripStatusLabel gainCalibrationSN; + private System.Windows.Forms.ToolStripStatusLabel adcCalibrationSN; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatus; + private System.Windows.Forms.TabPage tabPageADCs; + private System.Windows.Forms.DataGridView dataGridViewAdcs; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.Panel panelOptions; + private System.Windows.Forms.Button buttonEnableContacts; + private System.Windows.Forms.Button buttonClearSelections; + private System.Windows.Forms.ComboBox comboBoxChannelPresets; + private System.Windows.Forms.Button buttonResetZoom; + private System.Windows.Forms.Button buttonClearAdcCalibrationFile; + private System.Windows.Forms.Button buttonClearGainCalibrationFile; + private System.Windows.Forms.TextBox textBoxLfpGainCorrection; + private System.Windows.Forms.TextBox textBoxApGainCorrection; + private System.Windows.Forms.CheckBox checkBoxSpikeFilter; + private System.Windows.Forms.Button buttonChooseAdcCalibrationFile; + private System.Windows.Forms.TextBox textBoxAdcCalibrationFile; + private System.Windows.Forms.Button buttonChooseGainCalibrationFile; + private System.Windows.Forms.TextBox textBoxGainCalibrationFile; + private System.Windows.Forms.ComboBox comboBoxReference; + private System.Windows.Forms.ComboBox comboBoxLfpGain; + private System.Windows.Forms.ComboBox comboBoxApGain; + private System.Windows.Forms.Panel panelProbe; + private System.Windows.Forms.TrackBar trackBarProbePosition; + private System.Windows.Forms.Panel panelTrackBar; + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs new file mode 100644 index 00000000..d48d1016 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs @@ -0,0 +1,459 @@ +using System; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Partial class to create a GUI for . + /// + public partial class NeuropixelsV1eDialog : Form + { + readonly NeuropixelsV1eChannelConfigurationDialog ChannelConfiguration; + + private enum ChannelPreset + { + BankA, + BankB, + BankC, + SingleColumn, + Tetrodes, + None + } + + NeuropixelsV1eAdc[] Adcs = null; + + double ApGainCorrection = default; + double LfpGainCorrection = default; + + /// + /// Public instance that is manipulated by + /// . + /// + /// + /// When a is passed to + /// , it is copied and stored in this + /// variable so that any modifications made to configuration settings can be easily reversed + /// by not copying the new settings back to the original instance. + /// + public ConfigureNeuropixelsV1e ConfigureNode { get; set; } + + /// + /// Initializes a new instance of . + /// + /// A object holding the current configuration settings. + public NeuropixelsV1eDialog(ConfigureNeuropixelsV1e configureNode) + { + InitializeComponent(); + Shown += FormShown; + + ConfigureNode = new(configureNode); + + ChannelConfiguration = new(ConfigureNode.ProbeConfiguration) + { + TopLevel = false, + FormBorderStyle = FormBorderStyle.None, + Dock = DockStyle.Fill, + Parent = this, + }; + + panelProbe.Controls.Add(ChannelConfiguration); + this.AddMenuItemsFromDialogToFileOption(ChannelConfiguration); + + ChannelConfiguration.OnZoom += UpdateTrackBarLocation; + ChannelConfiguration.OnFileLoad += UpdateChannelPresetIndex; + + comboBoxApGain.DataSource = Enum.GetValues(typeof(NeuropixelsV1Gain)); + comboBoxApGain.SelectedItem = ConfigureNode.ProbeConfiguration.SpikeAmplifierGain; + comboBoxApGain.SelectedIndexChanged += SelectedIndexChanged; + + comboBoxLfpGain.DataSource = Enum.GetValues(typeof(NeuropixelsV1Gain)); + comboBoxLfpGain.SelectedItem = ConfigureNode.ProbeConfiguration.LfpAmplifierGain; + comboBoxLfpGain.SelectedIndexChanged += SelectedIndexChanged; + + comboBoxReference.DataSource = Enum.GetValues(typeof(NeuropixelsV1ReferenceSource)); + comboBoxReference.SelectedItem = ConfigureNode.ProbeConfiguration.Reference; + comboBoxReference.SelectedIndexChanged += SelectedIndexChanged; + + checkBoxSpikeFilter.Checked = ConfigureNode.ProbeConfiguration.SpikeFilter; + checkBoxSpikeFilter.CheckedChanged += SelectedIndexChanged; + + textBoxAdcCalibrationFile.Text = ConfigureNode.AdcCalibrationFile; + + textBoxGainCalibrationFile.Text = ConfigureNode.GainCalibrationFile; + + comboBoxChannelPresets.DataSource = Enum.GetValues(typeof(ChannelPreset)); + CheckForExistingChannelPreset(); + comboBoxChannelPresets.SelectedIndexChanged += SelectedIndexChanged; + + CheckStatus(); + } + + private void FormShown(object sender, EventArgs e) + { + if (!TopLevel) + { + splitContainer1.Panel2Collapsed = true; + splitContainer1.Panel2.Hide(); + + menuStrip.Visible = false; + } + + ChannelConfiguration.Show(); + ChannelConfiguration.ConnectResizeEventHandler(); + ChannelConfiguration.OnResizeZedGraph += ResizeTrackBar; + } + + private void ResizeTrackBar(object sender, EventArgs e) + { + if (sender is ChannelConfigurationDialog dialog) + { + panelTrackBar.Height = dialog.zedGraphChannels.Size.Height; + panelTrackBar.Location = new Point(panelProbe.Size.Width - panelTrackBar.Width, ChannelConfiguration.zedGraphChannels.Location.Y); + } + } + + private void FileTextChanged(object sender, EventArgs e) + { + if (sender is TextBox textBox && textBox != null) + { + if (textBox.Name == nameof(textBoxGainCalibrationFile)) + { + ConfigureNode.GainCalibrationFile = textBox.Text; + ParseGainCalibrationFile(); + } + else if (textBox.Name == nameof(textBoxAdcCalibrationFile)) + { + ConfigureNode.AdcCalibrationFile = textBox.Text; + ParseAdcCalibrationFile(); + } + } + + CheckStatus(); + } + + private void ParseAdcCalibrationFile() + { + if (ConfigureNode.AdcCalibrationFile != null && ConfigureNode.AdcCalibrationFile != "") + { + if (File.Exists(ConfigureNode.AdcCalibrationFile)) + { + StreamReader adcFile = new(ConfigureNode.AdcCalibrationFile); + + adcCalibrationSN.Text = ulong.Parse(adcFile.ReadLine()).ToString(); + + Adcs = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); + + dataGridViewAdcs.DataSource = Adcs; + + adcFile.Close(); + } + } + } + + private void ParseGainCalibrationFile() + { + if (ConfigureNode.GainCalibrationFile != null && ConfigureNode.GainCalibrationFile != "") + { + if (File.Exists(ConfigureNode.GainCalibrationFile)) + { + StreamReader gainCalibrationFile = new(ConfigureNode.GainCalibrationFile); + + gainCalibrationSN.Text = ulong.Parse(gainCalibrationFile.ReadLine()).ToString(); + + var gainCorrection = NeuropixelsV1Helper.ParseGainCalibrationFile(gainCalibrationFile, ConfigureNode.ProbeConfiguration.SpikeAmplifierGain, ConfigureNode.ProbeConfiguration.LfpAmplifierGain); + + ApGainCorrection = gainCorrection.AP; + LfpGainCorrection = gainCorrection.LFP; + + gainCalibrationFile.Close(); + } + } + } + + private void SelectedIndexChanged(object sender, EventArgs e) + { + if (sender is ComboBox comboBox && comboBox != null) + { + if (comboBox.Name == nameof(comboBoxApGain)) + { + ConfigureNode.ProbeConfiguration.SpikeAmplifierGain = (NeuropixelsV1Gain)comboBox.SelectedItem; + ParseGainCalibrationFile(); + + if (ApGainCorrection != default && LfpGainCorrection != default) + { + ShowCorrectionValues(); + } + } + else if (comboBox.Name == nameof(comboBoxLfpGain)) + { + ConfigureNode.ProbeConfiguration.LfpAmplifierGain = (NeuropixelsV1Gain)comboBox.SelectedItem; + ParseGainCalibrationFile(); + + if (ApGainCorrection != default && LfpGainCorrection != default) + { + ShowCorrectionValues(); + } + } + else if (comboBox.Name == nameof(comboBoxReference)) + { + ConfigureNode.ProbeConfiguration.Reference = (NeuropixelsV1ReferenceSource)comboBox.SelectedItem; + } + else if (comboBox.Name == nameof(comboBoxChannelPresets)) + { + if ((ChannelPreset)comboBox.SelectedItem != ChannelPreset.None) + { + SetChannelPreset((ChannelPreset)comboBox.SelectedItem); + } + } + } + else if (sender is CheckBox checkBox && checkBox != null) + { + if (checkBox.Name == nameof(checkBoxSpikeFilter)) + { + ConfigureNode.ProbeConfiguration.SpikeFilter = checkBox.Checked; + } + } + } + + private void SetChannelPreset(ChannelPreset preset) + { + var probeConfiguration = ChannelConfiguration.ProbeConfiguration; + var electrodes = NeuropixelsV1eProbeGroup.ToElectrodes(ChannelConfiguration.ProbeConfiguration.ChannelConfiguration); + + switch (preset) + { + case ChannelPreset.BankA: + probeConfiguration.SelectElectrodes(electrodes.Where(e => e.Bank == NeuropixelsV1Bank.A).ToList()); + break; + + case ChannelPreset.BankB: + probeConfiguration.SelectElectrodes(electrodes.Where(e => e.Bank == NeuropixelsV1Bank.B).ToList()); + break; + + case ChannelPreset.BankC: + probeConfiguration.SelectElectrodes(electrodes.Where(e => e.Bank == NeuropixelsV1Bank.C || + (e.Bank == NeuropixelsV1Bank.B && e.Index >= 576)).ToList()); + break; + + case ChannelPreset.SingleColumn: + probeConfiguration.SelectElectrodes(electrodes.Where(e => (e.Index % 2 == 0 && e.Bank == NeuropixelsV1Bank.A) || + (e.Index % 2 == 1 && e.Bank == NeuropixelsV1Bank.B)).ToList()); + break; + + case ChannelPreset.Tetrodes: + probeConfiguration.SelectElectrodes(electrodes.Where(e => (e.Index % 8 < 4 && e.Bank == NeuropixelsV1Bank.A) || + (e.Index % 8 > 3 && e.Bank == NeuropixelsV1Bank.B)).ToList()); + break; + } + + ChannelConfiguration.HighlightEnabledContacts(); + ChannelConfiguration.HighlightSelectedContacts(); + ChannelConfiguration.UpdateContactLabels(); + ChannelConfiguration.RefreshZedGraph(); + } + + private void CheckForExistingChannelPreset() + { + var channelMap = ChannelConfiguration.ProbeConfiguration.ChannelMap; + + if (channelMap.All(e => e.Bank == NeuropixelsV1Bank.A)) + { + comboBoxChannelPresets.SelectedItem = ChannelPreset.BankA; + } + else if (channelMap.All(e => e.Bank == NeuropixelsV1Bank.B)) + { + comboBoxChannelPresets.SelectedItem = ChannelPreset.BankB; + } + else if (channelMap.All(e => e.Bank == NeuropixelsV1Bank.C || + (e.Bank == NeuropixelsV1Bank.B && e.Index >= 576))) + { + comboBoxChannelPresets.SelectedItem = ChannelPreset.BankC; + } + else if (channelMap.All(e => (e.Index % 2 == 0 && e.Bank == NeuropixelsV1Bank.A) || + (e.Index % 2 == 1 && e.Bank == NeuropixelsV1Bank.B))) + { + comboBoxChannelPresets.SelectedItem = ChannelPreset.SingleColumn; + } + else if (channelMap.All(e => (e.Index % 8 < 4 && e.Bank == NeuropixelsV1Bank.A) || + (e.Index % 8 > 3 && e.Bank == NeuropixelsV1Bank.B))) + { + comboBoxChannelPresets.SelectedItem = ChannelPreset.Tetrodes; + } + else + { + comboBoxChannelPresets.SelectedItem = ChannelPreset.None; + } + } + + private void UpdateChannelPresetIndex(object sender, EventArgs e) + { + CheckForExistingChannelPreset(); + } + + private void CheckStatus() + { + if (gainCalibrationSN.Text == "" || adcCalibrationSN.Text == "" || gainCalibrationSN.Text != adcCalibrationSN.Text) + { + toolStripStatus.Image = Properties.Resources.StatusWarningImage; + toolStripStatus.Text = "Serial number mismatch"; + } + else if (!ChannelConfiguration.ChannelConfiguration.ValidateDeviceChannelIndices()) + { + toolStripStatus.Image = Properties.Resources.StatusBlockedImage; + toolStripStatus.Text = "Invalid channels selected"; + } + else + { + toolStripStatus.Image = Properties.Resources.StatusReadyImage; + toolStripStatus.Text = ""; + } + + if (ApGainCorrection != default && LfpGainCorrection != default) + { + ShowCorrectionValues(); + } + else + { + textBoxApGainCorrection.Text = ""; + textBoxLfpGainCorrection.Text = ""; + } + + if (ApGainCorrection != default && LfpGainCorrection != default && Adcs != null) + { + panelProbe.Visible = true; + } + else + { + panelProbe.Visible = false; + } + } + + private void ShowCorrectionValues() + { + textBoxApGainCorrection.Text = ApGainCorrection.ToString(); + textBoxLfpGainCorrection.Text = LfpGainCorrection.ToString(); + } + + private void ButtonClick(object sender, EventArgs e) + { + if (sender is Button button && button != null) + { + if (button.Name == nameof(buttonOkay)) + { + DialogResult = DialogResult.OK; + } + else if (button.Name == nameof(buttonChooseGainCalibrationFile)) + { + var ofd = new OpenFileDialog() + { + CheckFileExists = true, + Filter = "Gain calibration files (*_gainCalValues.csv)|*_gainCalValues.csv|All Files|*.*", + FilterIndex = 0 + }; + + if (ofd.ShowDialog() == DialogResult.OK) + { + textBoxGainCalibrationFile.Text = ofd.FileName; + } + } + else if (button.Name == nameof(buttonClearGainCalibrationFile)) + { + textBoxGainCalibrationFile.Text = ""; + ApGainCorrection = default; + LfpGainCorrection = default; + + panelProbe.Visible = false; + + CheckStatus(); + } + else if (button.Name == nameof(buttonChooseAdcCalibrationFile)) + { + var ofd = new OpenFileDialog() + { + CheckFileExists = true, + Filter = "ADC calibration files (*_ADCCalibration.csv)|*_ADCCalibration.csv|All Files|*.*", + FilterIndex = 0 + }; + + if (ofd.ShowDialog() == DialogResult.OK) + { + textBoxAdcCalibrationFile.Text = ofd.FileName; + } + } + else if (button.Name == nameof(buttonClearAdcCalibrationFile)) + { + textBoxAdcCalibrationFile.Text = ""; + Adcs = null; + dataGridViewAdcs.DataSource = null; + + CheckStatus(); + } + else if (button.Name == nameof(buttonResetZoom)) + { + ResetZoom(); + } + else if (button.Name == nameof(buttonClearSelections)) + { + ChannelConfiguration.SetAllSelections(false); + ChannelConfiguration.HighlightEnabledContacts(); + ChannelConfiguration.HighlightSelectedContacts(); + ChannelConfiguration.UpdateContactLabels(); + ChannelConfiguration.RefreshZedGraph(); + } + else if (button.Name == nameof(buttonEnableContacts)) + { + EnableSelectedContacts(); + ChannelConfiguration.SetAllSelections(false); + ChannelConfiguration.HighlightEnabledContacts(); + ChannelConfiguration.HighlightSelectedContacts(); + ChannelConfiguration.UpdateContactLabels(); + ChannelConfiguration.RefreshZedGraph(); + } + } + } + + private void EnableSelectedContacts() + { + var electrodes = NeuropixelsV1eProbeGroup.ToElectrodes(ChannelConfiguration.ProbeConfiguration.ChannelConfiguration); + + var selectedElectrodes = electrodes.Where((e, ind) => ChannelConfiguration.SelectedContacts[ind]) + .ToList(); + + ChannelConfiguration.EnableElectrodes(selectedElectrodes); + + CheckForExistingChannelPreset(); + } + + private void ResetZoom() + { + ChannelConfiguration.ResetZoom(); + ChannelConfiguration.RefreshZedGraph(); + ChannelConfiguration.DrawScale(); + } + + private void MoveToVerticalPosition(float relativePosition) + { + ChannelConfiguration.MoveToVerticalPosition(relativePosition); + ChannelConfiguration.RefreshZedGraph(); + } + + private void TrackBarScroll(object sender, EventArgs e) + { + if (sender is TrackBar trackBar && trackBar != null) + { + if (trackBar.Name == nameof(trackBarProbePosition)) + { + MoveToVerticalPosition(trackBar.Value / 100.0f); + } + } + } + + private void UpdateTrackBarLocation(object sender, EventArgs e) + { + trackBarProbePosition.Value = (int)(ChannelConfiguration.GetRelativeVerticalPosition() * 100); + } + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx new file mode 100644 index 00000000..4c8ca1db --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + 17, 17 + + + 175, 17 + + + 41 + + \ No newline at end of file diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eEditor.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eEditor.cs new file mode 100644 index 00000000..452a693e --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eEditor.cs @@ -0,0 +1,38 @@ +using System; +using System.ComponentModel; +using System.Windows.Forms; +using Bonsai.Design; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Class that opens a new dialog for a . + /// + public class NeuropixelsV1eEditor : WorkflowComponentEditor + { + /// + public override bool EditComponent(ITypeDescriptorContext context, object component, IServiceProvider provider, IWin32Window owner) + { + if (provider != null) + { + var editorState = (IWorkflowEditorState)provider.GetService(typeof(IWorkflowEditorState)); + if (editorState != null && !editorState.WorkflowRunning && component is ConfigureNeuropixelsV1e configureNeuropixelsV1e) + { + using var editorDialog = new NeuropixelsV1eDialog(configureNeuropixelsV1e); + + if (editorDialog.ShowDialog() == DialogResult.OK) + { + configureNeuropixelsV1e.Enable = editorDialog.ConfigureNode.Enable; + configureNeuropixelsV1e.GainCalibrationFile = editorDialog.ConfigureNode.GainCalibrationFile; + configureNeuropixelsV1e.AdcCalibrationFile = editorDialog.ConfigureNode.AdcCalibrationFile; + configureNeuropixelsV1e.ProbeConfiguration = editorDialog.ConfigureNode.ProbeConfiguration; + + return true; + } + } + } + + return false; + } + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs new file mode 100644 index 00000000..ea45d68e --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs @@ -0,0 +1,208 @@ +namespace OpenEphys.Onix1.Design +{ + partial class NeuropixelsV1eHeadstageDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPageNeuropixelsV1e = new System.Windows.Forms.TabPage(); + this.panelNeuropixelsV1e = new System.Windows.Forms.Panel(); + this.tabPageBno055 = new System.Windows.Forms.TabPage(); + this.panelBno055 = new System.Windows.Forms.Panel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tabControl1.SuspendLayout(); + this.tabPageNeuropixelsV1e.SuspendLayout(); + this.tabPageBno055.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.menuStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPageNeuropixelsV1e); + this.tabControl1.Controls.Add(this.tabPageBno055); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(863, 466); + this.tabControl1.TabIndex = 0; + // + // tabPageNeuropixelsV1e + // + this.tabPageNeuropixelsV1e.Controls.Add(this.panelNeuropixelsV1e); + this.tabPageNeuropixelsV1e.Location = new System.Drawing.Point(4, 22); + this.tabPageNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageNeuropixelsV1e.Name = "tabPageNeuropixelsV1e"; + this.tabPageNeuropixelsV1e.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageNeuropixelsV1e.Size = new System.Drawing.Size(855, 440); + this.tabPageNeuropixelsV1e.TabIndex = 0; + this.tabPageNeuropixelsV1e.Text = "NeuropixelsV1e"; + this.tabPageNeuropixelsV1e.UseVisualStyleBackColor = true; + // + // panelNeuropixelsV1e + // + this.panelNeuropixelsV1e.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelNeuropixelsV1e.Location = new System.Drawing.Point(2, 2); + this.panelNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panelNeuropixelsV1e.Name = "panelNeuropixelsV1e"; + this.panelNeuropixelsV1e.Size = new System.Drawing.Size(851, 436); + this.panelNeuropixelsV1e.TabIndex = 0; + // + // tabPageBno055 + // + this.tabPageBno055.Controls.Add(this.panelBno055); + this.tabPageBno055.Location = new System.Drawing.Point(4, 22); + this.tabPageBno055.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageBno055.Name = "tabPageBno055"; + this.tabPageBno055.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageBno055.Size = new System.Drawing.Size(855, 443); + this.tabPageBno055.TabIndex = 1; + this.tabPageBno055.Text = "Bno055"; + this.tabPageBno055.UseVisualStyleBackColor = true; + // + // panelBno055 + // + this.panelBno055.Dock = System.Windows.Forms.DockStyle.Fill; + this.panelBno055.Location = new System.Drawing.Point(2, 2); + this.panelBno055.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panelBno055.Name = "panelBno055"; + this.panelBno055.Size = new System.Drawing.Size(851, 439); + this.panelBno055.TabIndex = 0; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tabControl1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.buttonCancel); + this.splitContainer1.Panel2.Controls.Add(this.buttonOK); + this.splitContainer1.Size = new System.Drawing.Size(863, 503); + this.splitContainer1.SplitterDistance = 466; + this.splitContainer1.SplitterWidth = 3; + this.splitContainer1.TabIndex = 1; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.Location = new System.Drawing.Point(747, 5); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(108, 26); + this.buttonCancel.TabIndex = 6; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOK + // + this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.Location = new System.Drawing.Point(625, 5); + this.buttonOK.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(108, 26); + this.buttonOK.TabIndex = 5; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // menuStrip1 + // + this.menuStrip1.ImageScalingSize = new System.Drawing.Size(24, 24); + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1); + this.menuStrip1.Size = new System.Drawing.Size(863, 24); + this.menuStrip1.TabIndex = 2; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 22); + this.fileToolStripMenuItem.Text = "File"; + // + // NeuropixelsV1eHeadstageDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(863, 527); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.menuStrip1); + this.DoubleBuffered = true; + this.MainMenuStrip = this.menuStrip1; + this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Name = "NeuropixelsV1eHeadstageDialog"; + this.Text = "NeuropixelsV1eHeadstageDialog"; + this.tabControl1.ResumeLayout(false); + this.tabPageNeuropixelsV1e.ResumeLayout(false); + this.tabPageBno055.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPageNeuropixelsV1e; + private System.Windows.Forms.TabPage tabPageBno055; + private System.Windows.Forms.Panel panelNeuropixelsV1e; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Panel panelBno055; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.cs new file mode 100644 index 00000000..538cc657 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.cs @@ -0,0 +1,58 @@ +using System.Windows.Forms; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Partial class to create a GUI for . + /// + /// + /// Within the GUI, there is a tab for both devices encapsulated by a , + /// specifically a and a . + /// + public partial class NeuropixelsV1eHeadstageDialog : Form + { + /// + /// Public method that provides access to the . + /// + public readonly NeuropixelsV1eDialog DialogNeuropixelsV1e; + + /// + /// Public method that provides access to the . + /// + public readonly NeuropixelsV1eBno055Dialog DialogBno055; + + /// + /// Initializes a new instance of a . + /// + /// Configuration settings for a . + /// Configuration settings for a . + public NeuropixelsV1eHeadstageDialog(ConfigureNeuropixelsV1e configureNeuropixelsV1e, ConfigureNeuropixelsV1eBno055 configureBno055) + { + InitializeComponent(); + + DialogNeuropixelsV1e = new(configureNeuropixelsV1e) + { + TopLevel = false, + FormBorderStyle = FormBorderStyle.None, + Dock = DockStyle.Fill, + Parent = this + }; + + panelNeuropixelsV1e.Controls.Add(DialogNeuropixelsV1e); + this.AddMenuItemsFromDialogToFileOption(DialogNeuropixelsV1e, "NeuropixelsV1e"); + DialogNeuropixelsV1e.Show(); + + DialogBno055 = new(configureBno055) + { + TopLevel = false, + FormBorderStyle = FormBorderStyle.None, + Dock = DockStyle.Fill, + Parent = this + }; + + panelBno055.Controls.Add(DialogBno055); + DialogBno055.Show(); + DialogBno055.Invalidate(); + } + } +} diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx new file mode 100644 index 00000000..d5494e30 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageEditor.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageEditor.cs new file mode 100644 index 00000000..1de22892 --- /dev/null +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageEditor.cs @@ -0,0 +1,41 @@ +using Bonsai.Design; +using System.ComponentModel; +using System.Windows.Forms; +using System; + +namespace OpenEphys.Onix1.Design +{ + /// + /// Class that opens a new dialog for a . + /// + public class NeuropixelsV1eHeadstageEditor : WorkflowComponentEditor + { + /// + public override bool EditComponent(ITypeDescriptorContext context, object component, IServiceProvider provider, IWin32Window owner) + { + if (provider != null) + { + var editorState = (IWorkflowEditorState)provider.GetService(typeof(IWorkflowEditorState)); + if (editorState != null && !editorState.WorkflowRunning && component is ConfigureNeuropixelsV1eHeadstage configureHeadstage) + { + using var editorDialog = new NeuropixelsV1eHeadstageDialog(configureHeadstage.NeuropixelsV1e, configureHeadstage.Bno055); + + if (editorDialog.ShowDialog() == DialogResult.OK) + { + configureHeadstage.Bno055.Enable = editorDialog.DialogBno055.ConfigureNode.Enable; + + configureHeadstage.NeuropixelsV1e.AdcCalibrationFile = editorDialog.DialogNeuropixelsV1e.ConfigureNode.AdcCalibrationFile; + configureHeadstage.NeuropixelsV1e.GainCalibrationFile = editorDialog.DialogNeuropixelsV1e.ConfigureNode.GainCalibrationFile; + configureHeadstage.NeuropixelsV1e.Enable = editorDialog.DialogNeuropixelsV1e.ConfigureNode.Enable; + configureHeadstage.NeuropixelsV1e.EnableLed = editorDialog.DialogNeuropixelsV1e.ConfigureNode.EnableLed; + configureHeadstage.NeuropixelsV1e.ProbeConfiguration = editorDialog.DialogNeuropixelsV1e.ConfigureNode.ProbeConfiguration; + + return true; + } + } + } + + return false; + } + } +} diff --git a/OpenEphys.Onix1.Design/Properties/Resources.Designer.cs b/OpenEphys.Onix1.Design/Properties/Resources.Designer.cs index 26223761..e45b694d 100644 --- a/OpenEphys.Onix1.Design/Properties/Resources.Designer.cs +++ b/OpenEphys.Onix1.Design/Properties/Resources.Designer.cs @@ -59,5 +59,65 @@ internal Resources() { resourceCulture = value; } } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatusBlockedImage { + get { + object obj = ResourceManager.GetObject("StatusBlockedImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatusCriticalImage { + get { + object obj = ResourceManager.GetObject("StatusCriticalImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatusReadyImage { + get { + object obj = ResourceManager.GetObject("StatusReadyImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatusRefreshImage { + get { + object obj = ResourceManager.GetObject("StatusRefreshImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap StatusWarningImage { + get { + object obj = ResourceManager.GetObject("StatusWarningImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap UploadImage { + get { + object obj = ResourceManager.GetObject("UploadImage", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/OpenEphys.Onix1.Design/Properties/Resources.resx b/OpenEphys.Onix1.Design/Properties/Resources.resx index 1af7de15..59d3809d 100644 --- a/OpenEphys.Onix1.Design/Properties/Resources.resx +++ b/OpenEphys.Onix1.Design/Properties/Resources.resx @@ -117,4 +117,23 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\StatusBlockedImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StatusCriticalImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StatusReadyImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StatusRefreshImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\StatusWarningImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\UploadImage.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/OpenEphys.Onix1.Design/Resources/StatusBlockedImage.png b/OpenEphys.Onix1.Design/Resources/StatusBlockedImage.png new file mode 100644 index 0000000000000000000000000000000000000000..3e35e47ec39de3a1a290571722b841580dc83564 GIT binary patch literal 268 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxK$!8B)5Zfp!F8T4jv*HQ$qwxI_tkncJo@YKN1nI&h|q#l28;ngj2-9eZ*Bkl ze|5(F|NgEL0R|pCD(pebLEKl_7z56}k550Akl}JX|5UL<+a7mAmJ^ozlMXCnlx~wM zl3QlU_{1cK>to`Iav=w{H^-l)J4q~IUm~8u5XO2WVM3e;a|i1d} L`njxgN@xNA*vMMQ literal 0 HcmV?d00001 diff --git a/OpenEphys.Onix1.Design/Resources/StatusCriticalImage.png b/OpenEphys.Onix1.Design/Resources/StatusCriticalImage.png new file mode 100644 index 0000000000000000000000000000000000000000..4762e0feb7e5d09d680c8afff79f6a21df83ea8e GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxL735kHCP2Gc*WDjF~q`uYw$tdLk2u&1b7Z`^c-OFVd$@!_`_IQ-pXm&gWw5G z6;Ilm^lwa^9N`gAcxh#CZFz3g@vR=3m5&_G@CJU?dF^;s)zIeLa+^H!pPLFq1D*M$ zGH!ljoBgvFzY=Za$3-0hDA4NlB+ z<>sP*Y_@-+)TPV)Q%^dEz#tDnm{r-UW|63%p| literal 0 HcmV?d00001 diff --git a/OpenEphys.Onix1.Design/Resources/StatusReadyImage.png b/OpenEphys.Onix1.Design/Resources/StatusReadyImage.png new file mode 100644 index 0000000000000000000000000000000000000000..cbe7c2eb5064543f9eb9f2ee746779d4923a85ee GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=DkxK$!8B)5Zfp!Rwwbjv*HQbAxyC9yZ{)qH*&ecP0z}gF{QhKPata;^24?rM#m! z`#@_{>+}h2a<>YL4u~pMy4z0C6m;6);@-n5xH%@Qd6M~}`Oh@BeK#{po-AniB%nEJ zTJ3>HTdPZ^Zg}!RCSg;W+LjL<8BD!7k6d#$nywAFvD=R6^tLyKc73glm(R@+a$;~3 zYG#X)NI9yy^_^43eyNPRt*achEMD`iVq5uQjkN~bRn;y5i&yjFlD_tA;(oB=_rD$+ z?tiC5xHda7Wqg!-s(pDypV0xe|Fz3Rru=zmE&Z9vd20l(X~DE!pcffDUHx3vIVCg! E0LrO&?EnA( literal 0 HcmV?d00001 diff --git a/OpenEphys.Onix1.Design/Resources/StatusRefreshImage.png b/OpenEphys.Onix1.Design/Resources/StatusRefreshImage.png new file mode 100644 index 0000000000000000000000000000000000000000..6729e542dba81fe3a757ac54eea5006cd3f24364 GIT binary patch literal 13423 zcmeHtbzGF)*7ndycT1OpbPSAir*tbYz|cKIcbAArcPQQ6At4|LNGOPelF}j4@D4uD zd5-6M&v)MM{C?m2-abt_AU=cX4yJvUPyc!@XUg^iVHbD*(Xjb7!XUOC~XA*(G~Y6Y0ap zT#=tJ_j^W8l{6Nn_;a|g9_<{!;VMkY2Fyszd`Me!w}<;1=b)Pz&?Q@u7Hs5v&D5dx zd@S)|F>v9g4fJ{GGWX1T{QBnN_&Q>vu*ah1w(=Zy{b_s8H|TQ0J0$=|XJaGo@RE8L zhGKe4u?c&XN9mnYF)q2wuW@i1S55h|y#my16u<@9xjZ|+T0jq=yQVa)E*c*QypkaE zaAw&f?pS&gp4u&b_9!^d^fYXY*gCNDQ~f&_dENE35s><*+21E{bnAQyxHSGnqT?n~ zQ@X2KqT}GwYJGpOyK8T933OY_dE>gl)4hLnx!t!bk$QaMJ61L>a#>Y1IGVCPUeJ|d zKHlO|v-UFTj(jxd)RMdD9X(L@$m550B$f zvYApn_bQis2Rb^kUf2$~U5w~b^k;KRC^x+^l?c2^e2PM*+Vnmd?WgA#26;ESrI&PQ z{P5-8{*^dE{g2jwrYK)F))izjFMhoJI^WpS0g<1z=DA~%Gm)DZtS%4E2Oj$4Fj!=5 zxjTz%XFc6c?B)(Nq+leJN1JMxsMSTCJ;){E5TDjoVjXD=h3R1Mg&AePjRjIF8+xsj>E*w)s5_{YPK>6CaDOO;0_(ZOZVi zGQ1rb?{*SAg$g>SOop$`+xaylRWoEQGY?xCj4DJ9#6Ap?@txbLi)to_ z)~oW3xz$mSJ)1v=e`($gFx&&Ri}Bu6@2qz}JRO4HlBf7uwguLF32dAa)HZ#P6~= zch>xt2F^ch*FP=WM-Sjf$!_ME+%qy~!rf`kGJGmLSg+aBzJ#lh;op;n|tj3^-c_LSo~Ke|=5!OHVhGQ|_Gr~czn^^ro`(X*e{z1r4?if55L z(`G+#Z5DBU5#ehWJ}y$0oxrP-ua9`a*1@})0+8#H2T&2{!L zm-DxZY%IoRQ0$^C`mW=#+bg3I^+P47HzuV_ZARA5GDy=mpB|JfXW>PY2OXI|6snAT znUBNCP1)&8dDM9#`$-Sfy3!Rgea#>02oG>I^kd=B9`$At_%QA|p*@ z1gU{v^1UJE;OtdXC* z)5-GhX356sAlXsWS$Z9!N5kPITOvh0dO{V;OoskDM>n{hVK^8so`Wps8tXqzSc$bC zIw1@AGOQ0+8M#Ps&0@9T{xG+uGp@Ga%HKWWEQTrK_%EZM4|}(Wb6Qu>s<=YNiDAEqDG5i-(I?=kbdp83EK@ZpW4Pj9jEFbmX2-!;r7c9fc+6{V~NRQqQxN z6<6)El96t?9`XoWnPkeH3f6Ftd+>8%gPpIQXmgu#G@rf=%M=|5fwPEk?V*9^NH92J zC^cxe0krlkAwKKhtmX;r+tVQK6wwAX5IP*EJv90Zi~%(02NS*C3K=)OgA}xlA*qp| zoeJ-Xa5LRG&i809pC9wcIc@<(YNQ^h7i8y?zB?nMrZNhBMX$o3Bdh2{z-&cV9QsDm z)oXY~179<^DV;jl{em$JC4o7242rT~PZW4I9I_RREgzyGXqDwJOBjU8FwQ^qo+PKX zIGVw@pguN2z|)QQ`lo@O>PDsVbg~P69Ko!58?O^ZO%FgA-H#CGz$K0Whi85hOO8NO zk)3UqALoFDA)atGB>pIk5uoa_ACbz*Qy|^uXHl&s`gvN)E0{*?AiWoSP;@`()x&%N z{ZqctMT_AFLE&98RV4|TAiU`xZFZE)++KnYw}~2(k%l?2vK#|Wca9IC_-`8B>+q{*Y7qXlbtB`1#5sZy>F-ucaq5dS2sSy@btUY13qAE zX5!4$TofXS+)%@L(CU$#TS#4wKO0PL{tBh;mWNmL%x_39{4=#;9WA5`6&j-eFDiX-YsJ-w~C6IaeI_z z6}jSpjFKso!nvJbgjwMY*1KNzs(ZdviUT`GSFQu0uoBv$sH;Q8E$jIXH286uvLSn7 z#h9CA7BT%G^CPd$xMwnY7EFetZ`iT8Xb2On+= zfjDv{|6uM}xv3`^Wl@xbj6a6z>A}Y;NOb+D+N0y)5-kDKoxb+4@l@JV$@?y(mfpP# zalImkSZ1LV36uh%Nbg^S*-&qlh$N{bP%YCR)dnxI6c3I%peLb4QZ)iOS{gg!wd7YH z_tI(hnN3hxGK0`F#6vlwRL3`PQ^(ivb4TdJ*~%=Q72@K|c>u>!^bThG%nMrMLov}p z9(0URE&-K=$?r|Xs(_u|NU=R2q>~%6A*SP7N!DeXU14o!|I{M^Ijl^|!sJSr>iX=* z?}H~%dtVYO_T3;a#kXKg6Gmk-j~(PI_otHy=y`=C1N-{)&0bEUmxD}Kn=;jfWZZAa zDsKvAwHDbmF)_X=qf(}7d0Y*@DQ>X$A(^Xrg>K)s@Uk=zzt_ZnA0;0RP9lJpJBn)4 z%bUgr!8W$C=;Xk~y$vI0_-4lYm@9>O=&|jp zs{LRGBqsrUwDR?Jj)P8Lzh&&`_A}mrDa?p4!(8H0H${L3q6&(fQ<}@sN+{h%8{f6zUay-_X4p~H&VP5Q#Zwohi(6lYQY&rp<9S;IxgfKW=wS_a3 zaaVvZ3-M5VPce@&4y6jIt}51k7GR^>*}vk%%KWq>o(Gl{(+Gl|MX}=C+im18kUfS` zvRuLF(I1`9eof1OOkliuyY+B4exgKW z?GU*JLiCE`rH|ovNkM+o8fO)ddBINIlkiRaUZ#|%;(8I3Li4S8NQcA&64Mk<9yDfC z=+i&vtqh7`(P0EK+3BQdo?VB|cs)0t?HtX->oDH!I}#uy`#2!@Ry*iv7FQoj3tC-^ zcLj}p_MC4G?lmSp|63e1!i=}^B>cIzb%N{a^A<{E&Z@mV_hVQZg3*eu$39>}C%Mw6 zLP4)Me@vs^d&qU|mV&*kpsiG(G{OD>*VFqaUrwjf-ea*#2fxcqAFbYhGolf5nuetEUu7B%C|qTugKOQdCtfo75geWZc*YdGK&1640u%9m?_f zkXs|VO%yZ&=}ZwlNdF`(JzmE_HppAR`hxa*lZrKjV+c3{EDz9~3suaQ&@p?soy-_5 zyv3$eqjIoO1&=aZd3Et@>3yfBRO~UE6}ia=d@nZ5N6a@>XXcsRkPw|XOdD^)BV}xL zct9CXP{mJSympQ7d<`YE#>qI}MqL?0U?OjoWu<&`zeJuj?b}1<=H3);013SzAsk~y zH{~ZPVS`g#(=Zc@9(^TUo_H@Vx<=E*b z|De^&h}x{b5LdCS^a8}4doWCiDYGa6;!)6vQxt&euThk@BGHtWD%Zw3f_x}@pL@#k zsSmL6kn#e$E^?A2WRlkF=F%UkO5)zLkmEzP@k|=%ykbBl_1E=|G9<-HqBL>kQpq6o ztG(~VJs2=h+Hp^!1e-T(Hb~-?x2QJu<_+$M9@XPChqMgkN$Vp=HZP1Y;GmC%`>mbV#cvU6r|jU6P1QJ`;x z+mUu}$#}50Abmy|W!m^@Re|w4Rsvy73yhdVnYeQ%=X}?#bi8To0EGxeETerEOS}f< zMbEY-oD?05x|@=!XsHg}AA>&qY;zebWa)#E!xtKMqf?2qMq{CuG@!_C+hEll;>pG6 z>il%swuuIw+;7}ksZPLKc1cHw*L|wu2S0+)+#1uYTg2abMKxArcpb4{4XO#IOH%h9 zKg}<{>ZNP3FBdj{EH1z;Ej=npNq~|qpwgpo!m@ZU*Lr&7aCBJmPFQAcDIv;*m4vg4 z;A^2#pVY&lBdEF~ByuA=%=Cd0FfX@~F=#L_sS1-eSd zwy*B@$futj_jHxM@)A6e$u93A2gprG^F z+uEsPs(>9lr9P0UkV)D)YTpM+;uNqk;QgW3Mj}G`qXlXDXEB3ShVq*N+7TbDONkw# z8OX;iAW;S8423ccYOgG?m+oBmqD=;p-gClUKK#S9zC2`;qLumK8}{ zRQ&nq{b)u84x{woAMHwVmou3{36UDji~tof$R3kxT7Q!l2M;R}vNhSiET=`p4&9+rL+D5azHrLIvx zua>U&J6}_NCs#m12pd6?;aaPed5C5uZ(voO@O+FHr87i zp572zlb958Hh$_qH;C2Df=AGnMslILK1e*1S9||E|E7+@J&L8LTHuFMdXRk%t+p%j z2fE)q1Bc?aSQVZkDLS5llfhfrY>BJN) z*{6lqQ+>=q1KE|)cq~zi;cfF@%I3^JEX)UR4-Rl0f8=(0FA$7&Fu&99oQwN3I4)tx z#{}4iY9PIBQY?~|TR*AKf`XN=6WtkZhB11P>H88&D(Z{eh8cqbk?g}4{J^iprPt3V zjdX%#uq1PziAnXIe#2xg?~TEW6>bNDm!bB$N(uH$y1ZwlR+ zWs${R=^IUqAt7#UpEjhsfBQpWLt^G4{$7lrj>mmxjq#3!`OynaNBbWeLbx1SDl9AX zmL#`4NWJvSu^bG|CdF<+^RFc$zu?G4QkaF@Yx`V~Eb!Vdm{8D2)@u4yU75wr2RR{m znKAS^r%v-oy7y+wcxFtpU|^6bxznYP$=5uq2vt$1(%vJbnsxddp<+R)X2na-1i9Xl zXiN1a^4Ec6C0@DMQ|4#+eJ{cyJnlKrx^_0#!0ZoAJ4cF*#$7>A6n9L8r#0*_ihFjp zY*z}Z{0^k~IFedj2BlS6s(-OXa-5mklgK~1*Bz(7J|F9Bn z*fD4nrTbz#V#X-C-9tsYDr1IzuR=zFN_OK#xYV}w6M>kqy!)iZiX~e@TUU0Yhch2m zSi1O@X{(c_Ls3%VQ36ss)y9bM!1O=v;}Hc2->1X4Pmg4um*)asA_9gI*y6rFGt!eq zR?;*p*Z*+dH2*Q7yy6qk`^|keO~=N<>Ne7Zg-O`FQdkp5?!--{9qG(FaNxc+170yc z*grJaACxb?R>F?dE+}AM&1$OBC0I`P$pA&~{<48i$ms`f3Ti3+bn2W#tY^*%j8-SE z)np{N{G79{BXp6EvF?>_v8S{J;(rLwYm8y12!_0(k|{$eF;*^9U71p8wtsh&TTf_N ze&J5QQYs{URKL}_IZ$`G{Kb$vG9vDHmS)`tvS#mvqf-eY@xUFKiL zP}v8T6Vq-?2x++#!{fWImnHu>^wCSC8DBT`B>&1WxG#qLa)^x4EF}ZKypcE2fa-Dl zaj8ME+s7ALnDUkIE22Fhug-emz3gQQjyDmMMmrb|7zbIFX06H@i4x`nhnTgF zE4VBz=v|b}ld(5k!Gbxeuhg$w6qs8!;e^0vu6~#;L&oLLt+yyxxRAq5!J58%b42YY zZonz^DThhTU55Bfm-$^U{sys=#Mj)czJUL~aXi|&_Fp<-B1IE36jR3*OtX|Syw z@#!XKo=#_S(yCmftl!7wDN6T(X1%>pLK zZ*JJES1O9G@7}`hsmjNTN2t0i9rHkStVAY!z~_TkVVZDJR@ktti%~hPbJTPHPK>jz zvh~cgFRumR>_FyXB7gGhEq8i3Qv?5V0rsTT79Gy!CrF`$tQBOd(k7_IR1?E?qcX0~ z-QVG_K2H`t!1N{ZODzo`+u-w_O^T`~4wIE}B42c({F0zDX!W%E6RK~{xqrc!-g1P) z7CUTkT`_)&=g)p@pgNU}^$1@(m0jigWJO~8 z!gsZl35v>A3cpRT4?lgYXA6NlRa9wNWzcCmzh~wqm>GR>^V(Zhy#?w+H zSeQBN%ZPa4LTV;MkDr5XM0bO%agtlD)xjROL~b*7$=_iCd~&+h9cBExN*+|@2D!%H zEf=5j_8%0~3f9SONlgTO3^I{!)!im_XSpr)3w`OQ7>8M3ONt&S=3q41=Xk*I#x9f^ zTZ7U#I=Wom7w;?~^JCa#RDP1Ng0QK37lnqfoU{0sV}i3&pkrLN)=ahm@Hpk1PGd20GXuX`P0j<9ij}u*d@KT)-4Lu7t(T6`x(YKirMCD zRYjI3Wi7LuvSnX3%41Ajs;l-e_D^*T$9f7S*eYZ3T!Qdr8yzLQ9rTSYXTkjylBuM7 zO75g5^x7@-r7r|>3+jnhF00GdRf@* zu^E*ZNF85+HWYMaHIMbqHs$=mY0LHHg{>Ex&z=EPc)ngN#YUOi&OL7ErhN1wb_RPd z##~T!$oE<3T~UZ8L`cO#iq z%lgUMpvxM67CqXcIaoD0>eOWQBm#;X4`FU+rMDc2mRM@$Z;?*nJg5R+pZL8~20sY> zUQL$4%b?V3TG*x{n`t-VbDMa$KZn9wyOtSuApC8c+u9;4%t}reb0A=vrG% zH4`*=-qd?;w7WKI{)m^qzq-ndK`)~&jp7(2;p9&(kZP#JrT(5fl+7q?NMq#~ONl z{3PbCy)fXF;<=Pds)fah;>UPMGld)L73yU*H7T-B9BF8%6*V3`h|@-Y$n*)Cx+I)R zL*`{QJ5;n0-Pdnk8oS121(jjRVSElOlRuXpgN7fISvMM4@A@8*qho(oj@WL9Na!JY zsVEip3=Aykm44HVq%*?1;TJ~&?XkA)SWOLxdFKC9< zRoKabPx&v3M0vche^j@^>~mLsAPr4cq&NqK%9u6C&TZ4~?``MIcZ=CK_mwoYP<`|aI~ z^tP5_jQWCVJZdg7P#arCA2+DB&tn}6AA1WCOGXKCEKx5og1`|9htPXDIyk|=USf>D zc)^I{yKZhq`d<*Zy%?i`ng+d$vm2CNfJ=ajhf~hW)`O2x9E)Dm&C&|2B`g0Y1)?R! zXak44fVsInJw3TR`MI3kthsqbL`1lG__+D_I1va=n70!g;>GC%W4fdGgF_Yyvv9L@ zf!jJe(cf`G%$?ogVvLN4ar!^W5u+AzUWm>=9o)5l(Zk@D+)9Xs0AfA}05=~Gk1!_> zA19v(_wV+IQ8l%{tes$gs)*2&+Y92t&CA8Z?dbRq7BIM+$KU<^Qwx|5;@%T(Ehx;{ z-OU0j=K*zsGyU$=#lao+yH9r*^sehy+zysj+=!rldH&r-K}k*HFPl3Vt!*7$ep%e1 ze@9wc{DpIIcXRlKv9#cZIzSx}fxr;Vy#IiQ+gkm7f&O7WcO(BT5QMwG`2PX@H@$wv z@=I5+th0stol_-QF~+-i!IsVzwwB;uhfrZ2bABF60ZxdO2!vCBM?i>E1PX$1Lai*U z%s~PWh>)P=Z&XT7FgV1?0(wVN6I;^Y(JK~V8SK!~^mggFIy1rR}6 zBAoF45zXB?fTc8)#2ERwcz%)p>d|n3z^$C!91-PZ>tyNd3H$qyj;$k98xFaXjaP_A zL`Z;#7X%UpAsq7m9i#_!gCWxVj+K{(i;wTuh@}Ns9>EDgq?@fH#2U)&;$;16;BH~S zi0L4th1^vKg85fJVm4qIHz)+|?55-F>>$Q?7aRQ@<*%Zm7yYwbz^cv`zYKqYp_X?Q z_h-#XL#(-fHAT7q75Kj~Y1=q^I{m-#{2lriiKZY!9AWqg$#D4o{vHh*z_MarO091faP}q_OQ32+BoB|L*#1X`tpHslxiqBlc zQUGym@oRzqVuv|f!95{vP$_Ff4j|SUQCz>)nV$X6{Cn_^cuyPXU2^g8@pAGYUVJ*d z!eCw@FfWMlkJY9Z<-Xft|2A9EyFExv4g9+vqIY`~Sm`biwcTA@9BiR(|ESa7^5*}7 z`_2B(9Q~ine~0~HE#vIsji_Q9xVop)zjXgkfPXNk+FC%JV9x(4^xq+W$nx8X2odui zeTWkr;(W>d*9r5_EV(PB|Ha3j+4sNb0YUvAC;yhd|B>rIa{XHh{9EAvWY>S>`nMGL zx4{3&uK#axVg3D*8|sAk-RFt8pmwqxu|ZsnqnoQJ$O3Nfo_U?ciHM$iE{cXQ006K5 z?v0epfk%z##DFWQ$ziM^p&%0wMg&MA0{|$dO0rTq!XxjK##Q*dX$F@}iz(|HH0?F9 z)i#xEa`5CoJ#&kr!U3ZzDHwV^$?232?3sje_U*KOFgZCnm(t5BJUl#Aetv#+oIVXU zHnz~_=4KnAOaP#KCMG{W|L5Dc5mY$n&JIHJzM*ekWM*aQTn3%{EuNg6c{R4TKYGGW zBB@DYX&BM>wdde~2aq>oCq*L1gA?i^T;c5KC>9qVUv2y_<;f>_9(EFxa@T{p?%~S% zIyzn?${RBRn!y>Hj4otJn~a~y$}9>(nR24EY#BxA1s^ss} z_rnNgcRgAb_V|mZ&R4d!w%ki~V(x|1IPp-d^QVt`4qLudRafu+>Yan(f(nS>IygU1 z-)s}_aiw8Qz$7ChbMf?y^ywVaCON?ah|-P^HZ}?dK%r~nlJr3y?Qv66Q&Mu8cw>&t<+eb%7VFm0|BX!QyaS>*G>9pt=7`I*`O3zos?}hMexV6$0uz%axsR#@d zP~(p&IMc45d$!dkesplqv)v|s(da)vKR?37#kHlat$i^z_I%MgZP+qEQ}+ZT0#ap| z!UBWAy07<%h$l}^3nO1L58&bBV?2+K_Yar;x?x^RaYyPMUc&EQT5`4#plbHcNquj{j|fq# zblQ(EUA0S~QU_QI2WP7mY8}rxkm2;vlVA-Cs5y6gJb3kz8T#||bm{Gi>$ejhLQK@< zLoX*?-S;SfKAtYO)}0}%`j)P)x9jUgv~lvce3|c6#B=vy_%$Zg_zgytl8r{!a5&sj znVIPI)c2k>w>Rds@XKe2a3UZ*#~rlMvN^1*tUiyctyKriT_vX)Bwu|vdogUeh(PDK zm>H5iE+)>`P&6?z0?s-#orb;0`n0`^ADLQodU{$>R@PC#E_OKJN^=z;VUw{~#16D= ip3l6Et9I_bLF?`gCqBdmbRen^pd|NLwo2M8EX>4Tx04R}tkv&MmKpe$iQ%glEf@TnL$WWauh>AE$6^me@v=v%)FuC*#ni!H4 z7e~Rh;NZt%)xpJCR|i)?5c~jfb8}L3krMxx6k5c1aNLh~_a1le0HIN3n$4LokXvz#@`JL4txBDyYInj8>f#3u)Sq`}l`ke~MfRxhi1f zn8yY*$gUs!4}N!R6(=XWq(~eHy*SRt2oT-{nsvwdK6aeu2@re+uJpElqXEo(l3s6X z(IcR58@RY`YswyQxdRM78L}z6Qjn%lECTOm^i6qS;1=jv^?GaVD00(qQO+^Rg1p*W&A!Rqt{Qv*~@JU2LR5;7slsjuwK@@<$nLBgu zK5p3Tl1(rOlE%h=U?;J#&}s#LKmQMpN>xSsUG=Yvt*RG9(s*%74 zh$$XJ0DrKBZ4AFN)G&K-N^CrXnhMcV5vE)td$}kR0kh3}V)J#@x5}tuk1QrfP{x1$MqEDAmcH9hbiXW^32QC=Y1nDjpF*i>F=@z+jUW`Np!0 z4OAa*;YG zmXSc+S_NGI6y8Irs<0+uVO9VK(wnxRi2i(g_#CFsPl$1cpe!g55rP1ix8Mc;CI7`i zz-74d0^ylAYQQl4v@9ms24#+((F(8uCoe{vUMiyFfSzL4MTh8ilYHmN%>l#gVNrr` znr`t_4=5xZP4QBdFz}?0_wfgv{=}q%_a1w`rH%~qw@VUe+XsVg0}7F6`_6ZE@9smA zgZ%dMltH^6WFKw_fB}&9JLv3zPX~(ZQ8R1_>AHc+rI zf)p!?(o~Q^5EQJ4LsLP;0py;5qxjwV=6>@$-~A^%3FoZ+u6M2d?zQ&W=ONwQ&0ZO@ z3<3gylpP&xJb}Mzk`GuO_}-bWtqcM|@Uh;0LQjea%HwkxEH)h~jN#FtbTNwo0*SjH z`vvk}5LBjK8GZoEI;g&goXFV!)6iQ}t5b&~F7`Z6@9HWmcQ$ggO~^}^H87o-?&QzZ ztx>yYvc2Ei^PRYUv7+w~EiO1JE@#)|*yi+3Vk~)NL|-#iy7KAfJFja#M;{!KIp|t{ z*i3oPWK_}R!v>wogsaNJ#|C~j8HXa3z0V{_7c9959?Z*KuQxcR)@{}^_)$TAYVG8J zVAt^Lnx4sz#g<&KihREoPqSe8gskdNK~Qm5_H<)a*1BuvCUs%pSX*gJ^SVY0+n2rm z)uV0txBDCxyk0IMyn!%kxE5w^?@$vQ>nY)@)=|+`;+1ZhzOby}xU%fW0b?y^Zpk{d z<4StGKj@gS;nkb5P=PJCsA?kZG;+@NpGwoVO>b1pY&W%sD(hurUH4PCEM@;mM{#&EcT26CmZ?tinmnYYRx`(Idf_Dt zZ6X<88!Hr_7bBvUWcl+1Y0> z9PU4{JS8jvyui?)*zic=X)rZuE0)15cFHn(t$tZwtc--gFh0qt)NcA5%8GRi_10xsM3dy zew{74zVYbhf{jhndr-O{B3}FUgMIhb+-Ofo+uNE!t!R9fGF0GTx-4mp*S%sHj3~m= zA|D z>7BEg`gE*^n4%wepe{+4qmS^4e3(5*lDw>A} zzUPG*pNbr^y1PK!KI2_KnvbealiYVyY7|$njWTw}-&(x5|4J4(jV&8>|0mg< zJ4!cOLYIV}ZSlh0%4^eBU$HSst#TFT)Z0zZEo?5C+wl)k^Sujm~%h101wj63mST%la4J5ZH z^fdX?(Xz~lKlYuJt{*N@O7&BTZK$|D^0ZS666C{nXsLd7pnF=;~Ct5 zvz+-WXYTuBr>xJj@Y6jnBC=x;c-GNveCmhC4?08QD9uY?zxbE-bwl#~qooGvSln~N zG;p`E(&R0v0nPWiciZqw46?J{KH{eucdqL4+O@XZspi-04l^wcnhV@EqfaJncRG4+ z?(qP1EG?m}2bG+_KpoxLgemGd%^Z$YHVL_78CPe~BRsGzS!|SZ^Td(!*B7s`OFE+n zAq6iWW*on6(_H0r$Eo=BR#?AY>)M3UXIVpQ{rcB5w0#g6--cRW$mnfm%&-ppVL837 zjj8(}b9p$tCM8;BM`c(U zB^zt6?zvv}(Q~QYZ^TxG=$o8g6uN5#D`_%BzGUpC@)T2x=$^N43q^-%#75+$>2eCA z{FaTgVW&ZFPE=MNiJv)v$$EKT!)OtSx>e47fiL?z1MRaptQ&7XM7 z2(AkDRSuWPMT7c656Sd_s;?zs#COdg9%hrnF~u5BGRg z@<#~V{f|A|Dp$jTn?9M}Z@cz6`|t{Wv_<=v_1%%M*sTo@r(NzXB-R$Z{&YTSLm_)w z%}MF!mX$7qEfpPdg-R|YNc1iX%z*vG_PvV&+BHSwp-VLbb^KcAVq3u}K{wwVKNalk zz$)a~k0-69c2o^_<*f*p;#nB)8SybZIn}%SPEJqBjIXkNoM0@h>emAg3Nv;`)~21k zx2FCNv#Q^t*(Z~G$g5AK_`SW+r2cZFXiP@#5~SO^LT_>AuHbX3cVpxala0KNJ~i8Z zAQ&2`Xvth_4_S2Cbb(Q}lA)sW$^18yD6iw0bn%JI3f-mKsu0}98jFz!SGqoHDBRC{ zAAF;HsI*1uLRm|r_TX~nqFT4{oX)Z2p7!KH|3qTlG^;N4BCjtmx$BwW;su}94J*_L zn>^ou`^^fwo?1FAz3cYM&X+s&sqB%6C*CIIJUKliuP9%t9mKh#(_6Z&0@LHD{(E*C zD=+}x0Qtq!hN@=f6CUGwnOu8bNV*qjocHMNiRm|XXN_xo8ZHLCYu3Rv>~;D?-h1Jo zH{aJJ3YqNEO-vq%?eJ0+naEA>E+4wV4{<3aYT3EX6|Z-l zdvs$AF*JInlhsaoe%>4ttE7nT}0r7vH= z3ehnJm;2pnG`-X`y<}wKDmE*IozU=EM*m39`>Y913J4^X#Im+_ceJ+t^8^W;8xL;D zCOh1)TwcGy%h}c_k)ayd;C{$BZ9Bn9eMiWV3+e$;$m(&$e9as+4g2dAPoCTk?YLg= z@2lWzr8)(Q6bL+p*^6iPsRi5=^B(OIebf<+f{u95^E+@V%$kT3OCk;TZOE=W3$}_+ z+bT#quah+X;&mlEMR`;&SiPWID?Lm-gqmUQ-Z_8sF&a9YP zxK$LcuCIUTn8R}LWy0OtVAWo^{HWWX%%czXFHqeqe`dTg?xad$CgKPlaNq}l%q+w_3N@TA zgoe_?SR68JwDu|t%A%2BzBpH;E60YsJ-qhG|Dv<`WFo&3lNdQ3vT}Xk7 zBiI}PNlb>#@{)jSi5UTd&O(IYWSF0;JJg!Xr$ezOSQ8}NR?Lb7VN9WrM?xTgS(u10CR~0P0!1Ve5lA!wjfMjVxFCijq=?}hfv$vNj>Cp7pz>Kf zA&bj_N;oN@+$bR#1_Q>SU&w(`s;w9>ehDDCpQRTFX$VK)1`Esw03gsvBms^@!_h>< ze1Bln)%B}4NAN{OKu?62!b6};kcfzg?>q!T+vsoc{?bF>4ZK$&Jm~^%6rW1Bjiz&i zy7Pnb*inM{F{1=@iD@=(HjRM*lA4V?-^bq3)%~lFM8+^y1aHqz%WJQ={On^JCDkdBM?$JRJw!; zAU9zFJTwZ8fu-V*a3UImgk!OIJe)|yQ{Yqr8i&N0h7wFslz9~E`7EFlDD3%JNvLQ5 z6^4N{#nVG^aFi)fCs-m11*gz}D-4DJq(UGd(YU#6Bz>Jn<8Xz z`4K>Su{boYNbqgQn-xL#5>h0xq3}S}6YxYl28BVQh?s96A39$El(~czg)~8eYbUX%wrDCZxJmY(I0hb{ZQTTMLFrWs2bq1PicAcRHU+T~Bd%TEAmlPKg4aC3! z`=B=pLqelTSPX1#wV`GR$qxJHY|SKlkgF?cz8+?hJ&NQgDMYU*9*@nU^S{^W&${_v zaP$1X)aZY5pAVb!w&wC;fG%bV*NZrR8~!hVa||vlDxD+X{$1+xA#<|Kdk_IR&)I+n z9PqqEe0^YksS-&e{TF|}RNsFw0zmyE$UoBehg?78`bP@DUY=Ib+o_JNFg3S}9LE znjKD12=6gZJsP?mJV;q7rB1#1Qgii2{nSOkKQL>t=IiT}a};0H instance to stream orientation data from the IMU. /// [Description("Configures a Bosch BNO055 9-axis IMU device.")] + [Editor("OpenEphys.Onix1.Design.Bno055Editor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureBno055 : SingleDeviceFactory { /// @@ -20,6 +21,18 @@ public ConfigureBno055() { } + /// + /// Copy constructor for the class. + /// + /// Existing object to be copied. + public ConfigureBno055(ConfigureBno055 configureBno055) + : base(typeof(Bno055)) + { + Enable = configureBno055.Enable; + DeviceName = configureBno055.DeviceName; + DeviceAddress = configureBno055.DeviceAddress; + } + /// /// Gets or sets the device enable state. /// diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs index 81e0c550..abf91201 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs @@ -10,6 +10,7 @@ namespace OpenEphys.Onix1 /// A class that configures a NeuropixelsV1e device. /// [Description("Configures a NeuropixelsV1e device.")] + [Editor("OpenEphys.Onix1.Design.NeuropixelsV1eEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV1e : SingleDeviceFactory { /// @@ -20,6 +21,22 @@ public ConfigureNeuropixelsV1e() { } + /// + /// Copy constructor for the class. + /// + /// Existing instance. + public ConfigureNeuropixelsV1e(ConfigureNeuropixelsV1e configureNeuropixelsV1e) + : base(typeof(NeuropixelsV1e)) + { + Enable = configureNeuropixelsV1e.Enable; + EnableLed = configureNeuropixelsV1e.EnableLed; + GainCalibrationFile = configureNeuropixelsV1e.GainCalibrationFile; + AdcCalibrationFile = configureNeuropixelsV1e.AdcCalibrationFile; + ProbeConfiguration = new(configureNeuropixelsV1e.ProbeConfiguration); + DeviceName = configureNeuropixelsV1e.DeviceName; + DeviceAddress = configureNeuropixelsV1e.DeviceAddress; + } + /// /// Gets or sets the device enable state. /// @@ -41,51 +58,6 @@ public ConfigureNeuropixelsV1e() [Description("If true, the headstage LED will turn on during data acquisition. If false, the LED will not turn on.")] public bool EnableLed { get; set; } = true; - /// - /// Gets or sets the amplifier gain for the spike-band. - /// - /// - /// The spike-band is from DC to 10 kHz if is set to false, while the - /// spike-band is from 300 Hz to 10 kHz if is set to true. - /// - [Category(ConfigurationCategory)] - [Description("Amplifier gain for spike-band.")] - public NeuropixelsV1Gain SpikeAmplifierGain { get; set; } = NeuropixelsV1Gain.Gain1000; - - /// - /// Gets or sets the amplifier gain for the LFP-band. - /// - /// - /// The LFP band is from 0.5 to 500 Hz. - /// - [Category(ConfigurationCategory)] - [Description("Amplifier gain for LFP-band.")] - public NeuropixelsV1Gain LfpAmplifierGain { get; set; } = NeuropixelsV1Gain.Gain50; - - /// - /// Gets or sets the reference for all electrodes. - /// - /// - /// All electrodes are set to the same reference, which can be either - /// or . - /// Setting to will use the external reference, while - /// sets the reference to the electrode at the tip of the probe. - /// - [Category(ConfigurationCategory)] - [Description("Reference selection.")] - public NeuropixelsV1ReferenceSource Reference { get; set; } = NeuropixelsV1ReferenceSource.External; - - /// - /// Gets or sets the state of the spike-band filter. - /// - /// - /// If set to true, the spike-band has a 300 Hz high-pass filter which will be activated. If set to - /// false, the high-pass filter will not to be activated. - /// - [Category(ConfigurationCategory)] - [Description("If true, activates a 300 Hz high-pass filter in the spike-band data stream.")] - public bool SpikeFilter { get; set; } = true; - /// /// Gets or sets the path to the gain calibration file. /// @@ -127,6 +99,13 @@ public ConfigureNeuropixelsV1e() [Editor("Bonsai.Design.OpenFileNameEditor, Bonsai.Design", DesignTypes.UITypeEditor)] public string AdcCalibrationFile { get; set; } + /// + /// Gets or sets the NeuropixelsV1e probe configuration. + /// + [Category(ConfigurationCategory)] + [Description("Neuropixels 1.0e probe configuration")] + public NeuropixelsV1eProbeConfiguration ProbeConfiguration { get; set; } = new(); + /// /// Configures a NeuropixelsV1e device. /// @@ -167,7 +146,8 @@ public override IObservable Process(IObservable source ResetProbe(serializer, gpo10Config); // program shift registers - var probeControl = new NeuropixelsV1eRegisterContext(device, NeuropixelsV1e.ProbeAddress, probeMetadata.ProbeSerialNumber, SpikeAmplifierGain, LfpAmplifierGain, Reference, SpikeFilter, GainCalibrationFile, AdcCalibrationFile); + var probeControl = new NeuropixelsV1eRegisterContext(device, NeuropixelsV1e.ProbeAddress, + probeMetadata.ProbeSerialNumber, ProbeConfiguration, GainCalibrationFile, AdcCalibrationFile); probeControl.InitializeProbe(); probeControl.WriteConfiguration(); probeControl.StartAcquisition(); @@ -254,6 +234,7 @@ static class NeuropixelsV1e public const int FramesPerRoundRobin = 12; public const int AdcCount = 32; public const int ChannelCount = 384; + public const int ElectrodeCount = 960; public const int FrameWords = 40; // unmanaged registers diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs index 47b53239..af185937 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs @@ -7,6 +7,7 @@ namespace OpenEphys.Onix1 /// A class that configures a NeuropixelsV1eBno055 device. /// [Description("Configures a NeuropixelsV1eBno055 device.")] + [Editor("OpenEphys.Onix1.Design.NeuropixelsV1eBno055Editor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV1eBno055 : SingleDeviceFactory { /// @@ -17,6 +18,17 @@ public ConfigureNeuropixelsV1eBno055() { } + /// + /// Copy constructor for the class. + /// + public ConfigureNeuropixelsV1eBno055(ConfigureNeuropixelsV1eBno055 configureBno055) + : base(typeof(NeuropixelsV1eBno055)) + { + Enable = configureBno055.Enable; + DeviceName = configureBno055.DeviceName; + DeviceAddress = configureBno055.DeviceAddress; + } + /// /// Gets or sets the device enable state. /// diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs index df88662e..add65f06 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs @@ -8,6 +8,7 @@ namespace OpenEphys.Onix1 /// A class that configures a NeuropixelsV1e headstage. /// [Description("Configures a NeuropixelsV1e headstage.")] + [Editor("OpenEphys.Onix1.Design.NeuropixelsV1eHeadstageEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV1eHeadstage : MultiDeviceFactory { PortName port; diff --git a/OpenEphys.Onix1/I2CRegisterContext.cs b/OpenEphys.Onix1/I2CRegisterContext.cs index 03075e87..9219987f 100644 --- a/OpenEphys.Onix1/I2CRegisterContext.cs +++ b/OpenEphys.Onix1/I2CRegisterContext.cs @@ -19,31 +19,33 @@ public I2CRegisterContext(DeviceContext deviceContext, uint i2cAddress) address = i2cAddress; } - public void WriteByte(uint address, uint value) + public void WriteByte(uint address, uint value, bool sixteenBitAddress = false) { uint registerAddress = (address << 7) | (this.address & 0x7F); + registerAddress |= sixteenBitAddress ? 0x80000000 : 0; device.WriteRegister(registerAddress, (byte)value); } - public byte ReadByte(uint address) + public byte ReadByte(uint address, bool sixteenBitAddress = false) { uint registerAddress = (address << 7) | (this.address & 0x7F); + registerAddress |= sixteenBitAddress ? 0x80000000 : 0; return (byte)device.ReadRegister(registerAddress); } - public byte[] ReadBytes(uint address, int count) + public byte[] ReadBytes(uint address, int count, bool sixteenBitAddress = false) { var data = new byte[count]; for (uint i = 0; i < count; i++) { - data[i] = ReadByte(address + i); + data[i] = ReadByte(address + i, sixteenBitAddress); } return data; } - public string ReadString(uint address, int count) + public string ReadString(uint address, int count, bool sixteenBitAddress = false) { - var data = ReadBytes(address, count); + var data = ReadBytes(address, count, sixteenBitAddress); count = Array.IndexOf(data, (byte)0); return Encoding.ASCII.GetString(data, 0, count < 0 ? data.Length : count); } diff --git a/OpenEphys.Onix1/NeuropixelsV1Helper.cs b/OpenEphys.Onix1/NeuropixelsV1Helper.cs new file mode 100644 index 00000000..94fac8a3 --- /dev/null +++ b/OpenEphys.Onix1/NeuropixelsV1Helper.cs @@ -0,0 +1,81 @@ +using System; +using System.IO; +using System.Linq; + +namespace OpenEphys.Onix1 +{ + /// + /// Static helper class for NeuropixelsV1e methods. + /// + public static class NeuropixelsV1Helper + { + internal const int NumberOfGains = 8; + + /// + /// Returns the ADC values from an ADC calibration file for a specific probe. + /// + /// Incoming that is reading from the ADC calibration file. + /// Array of values. + /// + /// + public static NeuropixelsV1eAdc[] ParseAdcCalibrationFile(StreamReader file) + { + if (file == null || file.EndOfStream) + { + throw new ArgumentException("Incoming stream reader is not pointing to a valid ADC calibration file."); + } + + NeuropixelsV1eAdc[] adcs = new NeuropixelsV1eAdc[NeuropixelsV1e.AdcCount]; + + for (var i = 0; i < NeuropixelsV1e.AdcCount; i++) + { + var adcCal = file.ReadLine().Split(',').Skip(1); + if (adcCal.Count() != NumberOfGains) + { + throw new InvalidOperationException("Incorrectly formatted ADC calibration file."); + } + + adcs[i] = new NeuropixelsV1eAdc + { + CompP = int.Parse(adcCal.ElementAt(0)), + CompN = int.Parse(adcCal.ElementAt(1)), + Slope = int.Parse(adcCal.ElementAt(2)), + Coarse = int.Parse(adcCal.ElementAt(3)), + Fine = int.Parse(adcCal.ElementAt(4)), + Cfix = int.Parse(adcCal.ElementAt(5)), + Offset = int.Parse(adcCal.ElementAt(6)), + Threshold = int.Parse(adcCal.ElementAt(7)) + }; + } + + return adcs; + } + + /// + /// Returns the values from a gain calibration file for a specific probe at the given gain for each stream. + /// + /// Incoming that is reading from the gain calibration file. + /// Current AP gain. + /// Current LFP gain. + /// . + /// + /// + public static NeuropixelsV1eGainCorrection ParseGainCalibrationFile(StreamReader file, NeuropixelsV1Gain apGain, NeuropixelsV1Gain lfpGain) + { + if (file == null || file.EndOfStream) + { + throw new ArgumentException("Incoming stream reader is not pointing to a valid gain calibration file."); + } + + var gainCorrections = file.ReadLine().Split(',').Skip(1); + + if (gainCorrections.Count() != 2 * NumberOfGains) + throw new InvalidOperationException("Incorrectly formatted gain correction calibration file."); + + var ap = double.Parse(gainCorrections.ElementAt(Array.IndexOf(Enum.GetValues(typeof(NeuropixelsV1Gain)), apGain))); + var lfp = double.Parse(gainCorrections.ElementAt(Array.IndexOf(Enum.GetValues(typeof(NeuropixelsV1Gain)), lfpGain) + 8)); + + return new NeuropixelsV1eGainCorrection(ap, lfp); + } + } +} diff --git a/OpenEphys.Onix1/NeuropixelsV1eElectrode.cs b/OpenEphys.Onix1/NeuropixelsV1eElectrode.cs new file mode 100644 index 00000000..67fe5630 --- /dev/null +++ b/OpenEphys.Onix1/NeuropixelsV1eElectrode.cs @@ -0,0 +1,41 @@ +using System.Drawing; +using OpenEphys.ProbeInterface.NET; + +namespace OpenEphys.Onix1 +{ + /// + /// Class defining a . + /// + public class NeuropixelsV1eElectrode : Electrode + { + /// + /// The bank, or logical block of channels, this electrode belongs to + /// + public NeuropixelsV1Bank Bank { get; private set; } + + /// + /// Initializes a new instance of using the given index. + /// + /// Integer defining the zero-indexed position of the electrode in the probe. + public NeuropixelsV1eElectrode(int index) + { + Index = index; + Shank = 0; + IntraShankElectrodeIndex = index; + Bank = (NeuropixelsV1Bank)(index / NeuropixelsV1e.ChannelCount); + Channel = GetChannelNumber(index); + var position = NeuropixelsV1eProbeGroup.DefaultContactPosition(index); + Position = new PointF(position[0], position[1]); + } + + /// + /// Static method returning the channel number of a given electrode. + /// + /// Integer defining the index of the electrode in the probe. + /// An integer between 0 and 383 defining the channel number. + public static int GetChannelNumber(int electrodeIndex) + { + return electrodeIndex % NeuropixelsV1e.ChannelCount; + } + } +} diff --git a/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs b/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs new file mode 100644 index 00000000..db28cc3f --- /dev/null +++ b/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs @@ -0,0 +1,29 @@ +namespace OpenEphys.Onix1 +{ + /// + /// A struct to hold the two gain correction values (AP and LFP) needed for each . + /// + public struct NeuropixelsV1eGainCorrection + { + /// + /// Gets or sets the AP gain correction. + /// + public double AP { get; set; } + + /// + /// Gets or sets the LFP gain correction. + /// + public double LFP { get; set; } + + /// + /// Initializes a new instance of the struct. + /// + /// Double holding the AP gain correction as pulled from the gain calibration file. + /// Double holding the LFP gain correction as pulled from the gain calibration file. + public NeuropixelsV1eGainCorrection(double ap, double lfp) + { + AP = ap; + LFP = lfp; + } + } +} diff --git a/OpenEphys.Onix1/NeuropixelsV1eProbeConfiguration.cs b/OpenEphys.Onix1/NeuropixelsV1eProbeConfiguration.cs new file mode 100644 index 00000000..35374f7c --- /dev/null +++ b/OpenEphys.Onix1/NeuropixelsV1eProbeConfiguration.cs @@ -0,0 +1,209 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Text; +using System.Xml.Serialization; +using Bonsai; +using Newtonsoft.Json; + +namespace OpenEphys.Onix1 +{ + /// + /// Specifies the bank of electrodes within each shank. + /// + public enum NeuropixelsV1Bank + { + /// + /// Specifies that Bank A is the current bank. + /// + /// Bank A is defined as shank index 0 to 383 along each shank. + A = 0, + /// + /// Specifies that Bank B is the current bank. + /// + /// Bank B is defined as shank index 384 to 767 along each shank. + B, + /// + /// Specifies that Bank C is the current bank. + /// + /// + /// Bank C is defined as shank index 768 to 960 along each shank. Note that Bank C is not a full contingent + /// of 384 channels; to compensate for this, electrodes from Bank B (starting at shank index 576) are used to + /// generate a full 384 channel map. + /// + C + } + + /// + /// Defines a configuration for NeuropixelsV1e. + /// + public class NeuropixelsV1eProbeConfiguration + { + /// + /// Initializes a new instance of using default values. + /// + public NeuropixelsV1eProbeConfiguration() + { + ChannelMap = NeuropixelsV1eProbeGroup.ToChannelMap(ChannelConfiguration); + } + + /// + /// Initializes a new instance of using default + /// values and the given gain / reference / filter settings. + /// + /// Desired or current for the spike-band. + /// Desired or current for the LFP-band. + /// Desired or current . + /// Desired or current option to filer the spike-band. + public NeuropixelsV1eProbeConfiguration(NeuropixelsV1Gain spikeAmplifierGain, NeuropixelsV1Gain lfpAmplifierGain, NeuropixelsV1ReferenceSource reference, bool spikeFilter) + { + SpikeAmplifierGain = spikeAmplifierGain; + LfpAmplifierGain = lfpAmplifierGain; + Reference = reference; + SpikeFilter = spikeFilter; + ChannelConfiguration = new(); + ChannelMap = NeuropixelsV1eProbeGroup.ToChannelMap(ChannelConfiguration); + } + + /// + /// Copy constructor initializes a new instance of using the given + /// values and the given gain / reference / filter settings. + /// + /// Desired or current variable. + /// Desired or current for the spike-band. + /// Desired or current for the LFP-band. + /// Desired or current . + /// Desired or current option to filer the spike-band. + public NeuropixelsV1eProbeConfiguration(NeuropixelsV1eProbeGroup channelConfiguration, NeuropixelsV1Gain spikeAmplifierGain, NeuropixelsV1Gain lfpAmplifierGain, NeuropixelsV1ReferenceSource reference, bool spikeFilter) + { + SpikeAmplifierGain = spikeAmplifierGain; + LfpAmplifierGain = lfpAmplifierGain; + Reference = reference; + SpikeFilter = spikeFilter; + ChannelMap = NeuropixelsV1eProbeGroup.ToChannelMap(channelConfiguration); + ChannelConfiguration = new(); + ChannelConfiguration.UpdateDeviceChannelIndices(ChannelMap); + } + + /// + /// Copy constructor initializes a new instance of using the given + /// values. + /// + /// Existing instance. + public NeuropixelsV1eProbeConfiguration(NeuropixelsV1eProbeConfiguration probeConfiguration) + { + SpikeAmplifierGain = probeConfiguration.SpikeAmplifierGain; + LfpAmplifierGain = probeConfiguration.LfpAmplifierGain; + Reference = probeConfiguration.Reference; + SpikeFilter = probeConfiguration.SpikeFilter; + ChannelConfiguration = new(); + ChannelConfiguration.UpdateDeviceChannelIndices(probeConfiguration.ChannelMap); + ChannelMap = NeuropixelsV1eProbeGroup.ToChannelMap(ChannelConfiguration); + } + + /// + /// Gets or sets the amplifier gain for the spike-band. + /// + /// + /// The spike-band is from DC to 10 kHz if is set to false, while the + /// spike-band is from 300 Hz to 10 kHz if is set to true. + /// + [Category("Configuration")] + [Description("Amplifier gain for spike-band.")] + public NeuropixelsV1Gain SpikeAmplifierGain { get; set; } = NeuropixelsV1Gain.Gain1000; + + /// + /// Gets or sets the amplifier gain for the LFP-band. + /// + /// + /// The LFP band is from 0.5 to 500 Hz. + /// + [Category("Configuration")] + [Description("Amplifier gain for LFP-band.")] + public NeuropixelsV1Gain LfpAmplifierGain { get; set; } = NeuropixelsV1Gain.Gain50; + + /// + /// Gets or sets the reference for all electrodes. + /// + /// + /// All electrodes are set to the same reference, which can be either + /// or . + /// Setting to will use the external reference, while + /// sets the reference to the electrode at the tip of the probe. + /// + [Category("Configuration")] + [Description("Reference selection.")] + public NeuropixelsV1ReferenceSource Reference { get; set; } = NeuropixelsV1ReferenceSource.External; + + /// + /// Gets or sets the state of the spike-band filter. + /// + /// + /// If set to true, the spike-band has a 300 Hz high-pass filter which will be activated. If set to + /// false, the high-pass filter will not to be activated. + /// + [Category("Configuration")] + [Description("If true, activates a 300 Hz high-pass filter in the spike-band data stream.")] + public bool SpikeFilter { get; set; } = true; + + /// + /// Gets the existing channel map listing all currently enabled electrodes. + /// + /// + /// The channel map will always be 384 channels, and will return the 384 enabled electrodes. + /// + [XmlIgnore] + public List ChannelMap { get; } + + /// + /// Update the with the selected electrodes. + /// + /// List of selected electrodes that are being added to the + public void SelectElectrodes(List electrodes) + { + foreach (var e in electrodes) + { + ChannelMap[e.Channel] = e; + } + + if (ChannelMap.Count != NeuropixelsV1e.ChannelCount) + { + throw new InvalidOperationException($"Channel map does not match the expected number of active channels " + + $"for a NeuropixelsV2 probe. Expected {NeuropixelsV1e.ChannelCount}, but there are {ChannelMap.Count} values."); + } + + ChannelConfiguration.UpdateDeviceChannelIndices(ChannelMap); + } + + /// + /// Gets the channel configuration for this probe. + /// + [XmlIgnore] + [Category("Configuration")] + [Description("Defines the shape of the probe, and which contacts are currently selected for streaming")] + public NeuropixelsV1eProbeGroup ChannelConfiguration { get; set; } = new(); + + /// + /// Gets or sets a string defining the in Base64. + /// This variable is needed to properly save a workflow in Bonsai, but it is not + /// directly accessible in the Bonsai editor. + /// + [Browsable(false)] + [Externalizable(false)] + [XmlElement(nameof(ChannelConfiguration))] + public string ChannelConfigurationString + { + get + { + var jsonString = JsonConvert.SerializeObject(ChannelConfiguration); + return Convert.ToBase64String(Encoding.UTF8.GetBytes(jsonString)); + } + set + { + var jsonString = Encoding.UTF8.GetString(Convert.FromBase64String(value)); + ChannelConfiguration = JsonConvert.DeserializeObject(jsonString); + SelectElectrodes(NeuropixelsV1eProbeGroup.ToChannelMap(ChannelConfiguration)); + } + } + } +} diff --git a/OpenEphys.Onix1/NeuropixelsV1eProbeGroup.cs b/OpenEphys.Onix1/NeuropixelsV1eProbeGroup.cs new file mode 100644 index 00000000..b5769c10 --- /dev/null +++ b/OpenEphys.Onix1/NeuropixelsV1eProbeGroup.cs @@ -0,0 +1,232 @@ +using System; +using System.Collections.Generic; +using OpenEphys.ProbeInterface.NET; +using Newtonsoft.Json; +using System.Linq; + +namespace OpenEphys.Onix1 +{ + /// + /// A class for NeuropixelsV1e. + /// + public class NeuropixelsV1eProbeGroup : ProbeGroup + { + /// + /// Initializes a new instance of the class. + /// + public NeuropixelsV1eProbeGroup() + : base("probeinterface", "0.2.21", + new List() + { + new(ProbeNdim.Two, + ProbeSiUnits.um, + new ProbeAnnotations("Neuropixels 1.0e", "IMEC"), + new ContactAnnotations(new string[0]), + DefaultContactPositions(NeuropixelsV1e.ElectrodeCount), + Probe.DefaultContactPlaneAxes(NeuropixelsV1e.ElectrodeCount), + Probe.DefaultContactShapes(NeuropixelsV1e.ElectrodeCount, ContactShape.Square), + Probe.DefaultSquareParams(NeuropixelsV1e.ElectrodeCount, 12.0f), + DefaultProbePlanarContour(), + DefaultDeviceChannelIndices(NeuropixelsV1e.ChannelCount, NeuropixelsV1e.ElectrodeCount), + Probe.DefaultContactIds(NeuropixelsV1e.ElectrodeCount), + DefaultShankIds(NeuropixelsV1e.ElectrodeCount)) + }.ToArray()) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + /// This constructor is marked with the , and is the + /// entry point for deserializing the JSON data into a C# class. + /// + /// String defining the . + /// String defining the . + /// Array of s. + [JsonConstructor] + public NeuropixelsV1eProbeGroup(string specification, string version, Probe[] probes) + : base(specification, version, probes) + { + } + + /// + /// Copy constructor that initializes a copied instance of the class. + /// + /// An existing instance. + public NeuropixelsV1eProbeGroup(NeuropixelsV1eProbeGroup probeGroup) + : base(probeGroup) + { + } + + /// + /// Generates a 2D array of default contact positions based on the given number of channels. + /// + /// Value defining the number of contacts to create positions for. + /// + /// 2D array of floats [N x 2], where the first dimension is the contact index [N] and the second dimension [2] + /// contains the X and Y values, respectively. + /// + public static float[][] DefaultContactPositions(int numberOfContacts) + { + if (numberOfContacts % 2 != 0) + { + throw new ArgumentException("Invalid number of channels given; must be a multiple of two"); + } + + float[][] contactPositions = new float[numberOfContacts][]; + + for (int i = 0; i < numberOfContacts; i++) + { + contactPositions[i] = DefaultContactPosition(i); + } + + return contactPositions; + } + + + /// + /// Generates a float array containing the X and Y position of a single contact. + /// + /// Index of the contact. + /// A float array of size [2 x 1] with the X and Y coordinates, respectively. + public static float[] DefaultContactPosition(int index) + { + return new float[2] { ContactPositionX(index), index / 2 * 20 + 170 }; + } + + private static float ContactPositionX(int index) => (index % 4) switch + { + 0 => 27.0f, + 1 => 59.0f, + 2 => 11.0f, + 3 => 43.0f, + _ => throw new ArgumentException("Invalid index given.") + }; + + /// + /// Generates a default planar contour for the probe, based on the given probe index + /// + /// + public static float[][] DefaultProbePlanarContour() + { + float[][] probePlanarContour = new float[6][]; + + probePlanarContour[0] = new float[2] { 0f, 155f }; + probePlanarContour[1] = new float[2] { 35f, 0f }; + probePlanarContour[2] = new float[2] { 70f, 155f }; + probePlanarContour[3] = new float[2] { 70f, 9770f }; + probePlanarContour[4] = new float[2] { 0f, 9770f }; + probePlanarContour[5] = new float[2] { 0f, 155f }; + + return probePlanarContour; + } + + /// + /// Override of the DefaultDeviceChannelIndices function, which initializes a portion of the + /// device channel indices, and leaves the rest at -1 to indicate they are not actively recorded + /// + /// Number of contacts that are connected for recording + /// Total number of physical contacts on the probe + /// + public static int[] DefaultDeviceChannelIndices(int channelCount, int electrodeCount) + { + int[] deviceChannelIndices = new int[electrodeCount]; + + for (int i = 0; i < channelCount; i++) + { + deviceChannelIndices[i] = i; + } + + for (int i = channelCount; i < electrodeCount; i++) + { + deviceChannelIndices[i] = -1; + } + + return deviceChannelIndices; + } + + /// + /// Generates an array of strings with the value "0" as the default shank ID, since Neuropixel 1.0 only has one shank + /// + /// Number of contacts in a single probe + /// + public static string[] DefaultShankIds(int numberOfContacts) + { + string[] contactIds = new string[numberOfContacts]; + + for (int i = 0; i < numberOfContacts; i++) + { + contactIds[i] = "0"; + } + + return contactIds; + } + + /// + /// Updates the based on the given channel map. + /// + /// Existing . + internal void UpdateDeviceChannelIndices(List channelMap) + { + var numberOfContacts = NumberOfContacts; + + int[] newDeviceChannelIndices = new int[numberOfContacts]; + + for (int i = 0; i < numberOfContacts; i++) + { + newDeviceChannelIndices[i] = -1; + } + + foreach (var e in channelMap) + { + newDeviceChannelIndices[e.Index] = e.Channel; + } + + UpdateDeviceChannelIndices(0, newDeviceChannelIndices); + } + + /// + /// Convert a object to a list of electrodes, which only includes currently enabled electrodes + /// + /// A object + /// List of 's that are enabled + public static List ToChannelMap(NeuropixelsV1eProbeGroup channelConfiguration) + { + List channelMap = new(); + + var enabledContacts = channelConfiguration.GetContacts().Where(c => c.DeviceId != -1); + + if (enabledContacts.Count() != NeuropixelsV1e.ChannelCount) + { + throw new InvalidOperationException($"Channel configuration must have {NeuropixelsV1e.ChannelCount} contacts enabled." + + $"Instead there are {enabledContacts.Count()} contacts enabled. Enabled contacts are designated by a device channel" + + $"index >= 0."); + } + + foreach (var c in enabledContacts) + { + channelMap.Add(new NeuropixelsV1eElectrode(c.Index)); + } + + return channelMap.OrderBy(e => e.Channel).ToList(); + } + + /// + /// Convert a ProbeInterface object to a list of electrodes, which includes all possible electrodes. + /// + /// A object. + /// List of electrodes. + public static List ToElectrodes(NeuropixelsV1eProbeGroup channelConfiguration) + { + List electrodes = new(); + + foreach (var c in channelConfiguration.GetContacts()) + { + electrodes.Add(new NeuropixelsV1eElectrode(c.Index)); + } + + return electrodes; + } + } +} diff --git a/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs b/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs index 1ccd9559..9185ab25 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs @@ -1,5 +1,6 @@ using System; using System.Collections; +using System.IO; using System.Linq; namespace OpenEphys.Onix1 @@ -14,23 +15,15 @@ class NeuropixelsV1eRegisterContext : I2CRegisterContext const int ShankConfigurationBitCount = 968; const int BaseConfigurationBitCount = 2448; const int BaseConfigurationConfigOffset = 576; - const int NumberOfGains = 8; const uint ShiftRegisterSuccess = 1 << 7; - const int ShankBitExt1 = 965; - const int ShankBitExt2 = 2; - const int ShankBitTip1 = 484; - const int ShankBitTip2 = 483; - const int InternalReferenceChannel = 191; readonly NeuropixelsV1eAdc[] Adcs = new NeuropixelsV1eAdc[NeuropixelsV1e.AdcCount]; readonly BitArray ShankConfig = new(ShankConfigurationBitCount, false); readonly BitArray[] BaseConfigs = { new(BaseConfigurationBitCount, false), // Ch 0, 2, 4, ... new(BaseConfigurationBitCount, false) }; // Ch 1, 3, 5, ... - // TODO: accept and apply channel config type public NeuropixelsV1eRegisterContext(DeviceContext deviceContext, uint i2cAddress, ulong probeSerialNumber, - NeuropixelsV1Gain apGain, NeuropixelsV1Gain lfpGain, NeuropixelsV1ReferenceSource refSource, - bool apFilter, string gainCalibrationFile, string adcCalibrationFile) + NeuropixelsV1eProbeConfiguration probeConfiguration, string gainCalibrationFile, string adcCalibrationFile) : base(deviceContext, i2cAddress) { if (gainCalibrationFile == null || adcCalibrationFile == null) @@ -38,84 +31,31 @@ public NeuropixelsV1eRegisterContext(DeviceContext deviceContext, uint i2cAddres throw new ArgumentException("Calibration files must be specified."); } - System.IO.StreamReader gainFile = new(gainCalibrationFile); + StreamReader gainFile = new(gainCalibrationFile); var calSerialNumber = ulong.Parse(gainFile.ReadLine()); if (calSerialNumber != probeSerialNumber) throw new ArgumentException("Gain calibration file serial number does not match probe serial number."); - System.IO.StreamReader adcFile = new(adcCalibrationFile); + StreamReader adcFile = new(adcCalibrationFile); var adcSerialNumber = ulong.Parse(adcFile.ReadLine()); if (adcSerialNumber != probeSerialNumber) throw new ArgumentException("ADC calibration file serial number does not match probe serial number."); // parse gain correction file - var gainCorrections = gainFile.ReadLine().Split(',').Skip(1); - - if (gainCorrections.Count() != 2 * NumberOfGains) - throw new ArgumentException("Incorrectly formatted gain correction calibration file."); - - ApGainCorrection = double.Parse(gainCorrections.ElementAt(Array.IndexOf(Enum.GetValues(typeof(NeuropixelsV1Gain)), apGain))); - LfpGainCorrection = double.Parse(gainCorrections.ElementAt(Array.IndexOf(Enum.GetValues(typeof(NeuropixelsV1Gain)), lfpGain) + 8)); + var gainCorrection = NeuropixelsV1Helper.ParseGainCalibrationFile(gainFile, probeConfiguration.SpikeAmplifierGain, probeConfiguration.LfpAmplifierGain); + ApGainCorrection = gainCorrection.AP; + LfpGainCorrection = gainCorrection.LFP; // parse ADC calibration file - for (var i = 0; i < NeuropixelsV1e.AdcCount; i++) - { - var adcCal = adcFile.ReadLine().Split(',').Skip(1); - if (adcCal.Count() != NumberOfGains) - { - throw new ArgumentException("Incorrectly formatted ADC calibration file."); - } - - Adcs[i] = new NeuropixelsV1eAdc - { - CompP = int.Parse(adcCal.ElementAt(0)), - CompN = int.Parse(adcCal.ElementAt(1)), - Slope = int.Parse(adcCal.ElementAt(2)), - Coarse = int.Parse(adcCal.ElementAt(3)), - Fine = int.Parse(adcCal.ElementAt(4)), - Cfix = int.Parse(adcCal.ElementAt(5)), - Offset = int.Parse(adcCal.ElementAt(6)), - Threshold = int.Parse(adcCal.ElementAt(7)) - }; - } - + Adcs = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); + AdcThresholds = Adcs.ToList().Select(a => (ushort)a.Threshold).ToArray(); AdcOffsets = Adcs.ToList().Select(a => (ushort)a.Offset).ToArray(); - switch (refSource) - { - case NeuropixelsV1ReferenceSource.External: - { - ShankConfig[ShankBitExt1] = true; - ShankConfig[ShankBitExt2] = true; - break; - } - case NeuropixelsV1ReferenceSource.Tip: - { - ShankConfig[ShankBitTip1] = true; - ShankConfig[ShankBitTip2] = true; - break; - } - } - // Update active channels - for (int i = 0; i < NeuropixelsV1e.ChannelCount; i++) - { - // Reference bits always remain zero - if (i == InternalReferenceChannel) - { - continue; - } - - var e = i; // TODO: Electrode map - - int bitIndex = e % 2 == 0 ? - 485 + ((int)e / 2) : // even electrode - 482 - ((int)e / 2); // odd electrode - ShankConfig[bitIndex] = true; - } + ShankConfig = MakeShankBits(probeConfiguration); // create base shift-register bit arrays for (int i = 0; i < NeuropixelsV1e.ChannelCount; i++) @@ -127,24 +67,24 @@ public NeuropixelsV1eRegisterContext(DeviceContext deviceContext, uint i2cAddres (382 - i) / 2 * 3 : (383 - i) / 2 * 3; - BaseConfigs[configIdx][refIdx + 0] = ((byte)refSource >> 0 & 0x1) == 1; - BaseConfigs[configIdx][refIdx + 1] = ((byte)refSource >> 1 & 0x1) == 1; - BaseConfigs[configIdx][refIdx + 2] = ((byte)refSource >> 2 & 0x1) == 1; + BaseConfigs[configIdx][refIdx + 0] = ((byte)probeConfiguration.Reference >> 0 & 0x1) == 1; + BaseConfigs[configIdx][refIdx + 1] = ((byte)probeConfiguration.Reference >> 1 & 0x1) == 1; + BaseConfigs[configIdx][refIdx + 2] = ((byte)probeConfiguration.Reference >> 2 & 0x1) == 1; var chanOptsIdx = BaseConfigurationConfigOffset + ((i - configIdx) * 4); // MSB [Full, standby, LFPGain(3 downto 0), APGain(3 downto 0)] LSB - BaseConfigs[configIdx][chanOptsIdx + 0] = ((byte)apGain >> 0 & 0x1) == 1; - BaseConfigs[configIdx][chanOptsIdx + 1] = ((byte)apGain >> 1 & 0x1) == 1; - BaseConfigs[configIdx][chanOptsIdx + 2] = ((byte)apGain >> 2 & 0x1) == 1; + BaseConfigs[configIdx][chanOptsIdx + 0] = ((byte)probeConfiguration.SpikeAmplifierGain >> 0 & 0x1) == 1; + BaseConfigs[configIdx][chanOptsIdx + 1] = ((byte)probeConfiguration.SpikeAmplifierGain >> 1 & 0x1) == 1; + BaseConfigs[configIdx][chanOptsIdx + 2] = ((byte)probeConfiguration.SpikeAmplifierGain >> 2 & 0x1) == 1; - BaseConfigs[configIdx][chanOptsIdx + 3] = ((byte)lfpGain >> 0 & 0x1) == 1; - BaseConfigs[configIdx][chanOptsIdx + 4] = ((byte)lfpGain >> 1 & 0x1) == 1; - BaseConfigs[configIdx][chanOptsIdx + 5] = ((byte)lfpGain >> 2 & 0x1) == 1; + BaseConfigs[configIdx][chanOptsIdx + 3] = ((byte)probeConfiguration.LfpAmplifierGain >> 0 & 0x1) == 1; + BaseConfigs[configIdx][chanOptsIdx + 4] = ((byte)probeConfiguration.LfpAmplifierGain >> 1 & 0x1) == 1; + BaseConfigs[configIdx][chanOptsIdx + 5] = ((byte)probeConfiguration.LfpAmplifierGain >> 2 & 0x1) == 1; BaseConfigs[configIdx][chanOptsIdx + 6] = false; - BaseConfigs[configIdx][chanOptsIdx + 7] = !apFilter; // Full bandwidth = 1, filter on = 0 + BaseConfigs[configIdx][chanOptsIdx + 7] = !!probeConfiguration.SpikeFilter;; // Full bandwidth = 1, filter on = 0 } @@ -293,5 +233,47 @@ public void StartAcquisition() WriteByte(NeuropixelsV1e.OP_MODE, (uint)NeuropixelsV1OperationRegisterValues.RECORD); WriteByte(NeuropixelsV1e.REC_MOD, (uint)NeuropixelsV1RecordRegisterValues.ACTIVE); } + + public static BitArray MakeShankBits(NeuropixelsV1eProbeConfiguration probeConfiguration) + { + const int ShankConfigurationBitCount = 968; + const int ShankBitExt1 = 965; + const int ShankBitExt2 = 2; + const int ShankBitTip1 = 484; + const int ShankBitTip2 = 483; + const int InternalReferenceChannel = 191; + + BitArray shankBits = new(ShankConfigurationBitCount); + + foreach (var e in probeConfiguration.ChannelMap) + { + if (e.Index == InternalReferenceChannel) continue; + + int bitIndex = e.Index % 2 == 0 ? + 485 + (e.Index / 2) : // even electrode + 482 - (e.Index / 2); // odd electrode + + shankBits[bitIndex] = true; + } + + switch (probeConfiguration.Reference) + { + case NeuropixelsV1ReferenceSource.External: + { + shankBits[ShankBitExt1] = true; + shankBits[ShankBitExt2] = true; + break; + } + case NeuropixelsV1ReferenceSource.Tip: + { + shankBits[ShankBitTip1] = true; + shankBits[ShankBitTip2] = true; + break; + } + } + + return shankBits; + } + } } diff --git a/OpenEphys.Onix1/OpenEphys.Onix1.csproj b/OpenEphys.Onix1/OpenEphys.Onix1.csproj index 06743351..e15c6cff 100644 --- a/OpenEphys.Onix1/OpenEphys.Onix1.csproj +++ b/OpenEphys.Onix1/OpenEphys.Onix1.csproj @@ -15,5 +15,4 @@ - From 43aab8b75627323f95bd77400e9db5339cb55dfe Mon Sep 17 00:00:00 2001 From: bparks13 Date: Tue, 20 Aug 2024 15:13:23 -0400 Subject: [PATCH 2/7] Update look and feel based on work in main - Ensure reference contacts are correctly highlighted - Update adc/gain calibration file parsing - Fix anchors for controls to allow resizing more fluidly - Add icons to dialogs - Add zoom in boundary - Reduce scale bar thickness - Fix splitter panel distance --- .../ChannelConfigurationDialog.cs | 28 +- ...europixelsV1eChannelConfigurationDialog.cs | 14 +- .../NeuropixelsV1eDialog.Designer.cs | 231 ++- .../NeuropixelsV1eDialog.cs | 26 +- .../NeuropixelsV1eDialog.resx | 1655 +++++++++++++++++ .../NeuropixelsV1eHeadstageDialog.Designer.cs | 47 +- .../NeuropixelsV1eHeadstageDialog.resx | 1655 +++++++++++++++++ OpenEphys.Onix1/NeuropixelsV1Helper.cs | 12 +- .../NeuropixelsV1eAdcCalibration.cs | 29 + .../NeuropixelsV1eGainCorrection.cs | 21 +- .../NeuropixelsV1eRegisterContext.cs | 22 +- 11 files changed, 3550 insertions(+), 190 deletions(-) create mode 100644 OpenEphys.Onix1/NeuropixelsV1eAdcCalibration.cs diff --git a/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs b/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs index adec7452..c2133497 100644 --- a/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs +++ b/OpenEphys.Onix1.Design/ChannelConfigurationDialog.cs @@ -632,10 +632,34 @@ internal virtual void HighlightEnabledContacts() foreach (var contact in contactsToEnable) { - var tag = (ContactTag)contact.Tag; + contact.Fill.Color = EnabledContactFill; + } + } + + HighlightReferenceContacts(); + } + + internal void HighlightReferenceContacts() + { + if (ChannelConfiguration == null) + return; - contact.Fill.Color = ReferenceContacts.Any(x => x == tag.ContactIndex) ? ReferenceContactFill : EnabledContactFill; + var contactObjects = zedGraphChannels.GraphPane.GraphObjList.OfType() + .Where(c => c is not PolyObj); + + var referenceContacts = contactObjects.Where(c => + { + if (c.Tag is ContactTag tag) + { + return ReferenceContacts.Any(r => tag.ContactIndex == r); } + + return false; + }); + + foreach (var contact in referenceContacts) + { + contact.Fill.Color = ReferenceContactFill; } } diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs index 127ee75f..d65b4e3c 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eChannelConfigurationDialog.cs @@ -31,7 +31,6 @@ public partial class NeuropixelsV1eChannelConfigurationDialog : ChannelConfigura public NeuropixelsV1eChannelConfigurationDialog(NeuropixelsV1eProbeConfiguration probeConfiguration) : base(probeConfiguration.ChannelConfiguration) { - zedGraphChannels.IsEnableHPan = false; zedGraphChannels.ZoomButtons = MouseButtons.None; zedGraphChannels.ZoomButtons2 = MouseButtons.None; @@ -41,6 +40,9 @@ public NeuropixelsV1eChannelConfigurationDialog(NeuropixelsV1eProbeConfiguration ProbeConfiguration = probeConfiguration; + ZoomInBoundaryX = 400; + ZoomInBoundaryY = 400; + HighlightEnabledContacts(); UpdateContactLabels(); DrawScale(); @@ -166,7 +168,9 @@ internal override void DrawScale() var curve = zedGraphChannels.GraphPane.AddCurve(ScalePointsTag, pointList, Color.Black, SymbolType.None); - curve.Line.Width = zoomedOut ? 2 : 4; + const float scaleBarWidth = 1; + + curve.Line.Width = scaleBarWidth; curve.Label.IsVisible = false; curve.Symbol.IsVisible = false; } @@ -195,10 +199,10 @@ internal override void HighlightEnabledContacts() foreach (var contact in contactsToEnable) { - var tag = (ContactTag)contact.Tag; - - contact.Fill.Color = ReferenceContacts.Any(x => x == tag.ContactIndex) ? ReferenceContactFill : EnabledContactFill; + contact.Fill.Color = EnabledContactFill; } + + HighlightReferenceContacts(); } internal override void UpdateContactLabels() diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs index 9ce320d3..2cee1c46 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs @@ -41,6 +41,7 @@ private void InitializeComponent() System.Windows.Forms.Label apGain; System.Windows.Forms.Label label3; System.Windows.Forms.Label label1; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NeuropixelsV1eDialog)); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.statusStrip = new System.Windows.Forms.StatusStrip(); @@ -59,14 +60,10 @@ private void InitializeComponent() this.buttonClearSelections = new System.Windows.Forms.Button(); this.comboBoxChannelPresets = new System.Windows.Forms.ComboBox(); this.buttonResetZoom = new System.Windows.Forms.Button(); - this.buttonClearAdcCalibrationFile = new System.Windows.Forms.Button(); - this.buttonClearGainCalibrationFile = new System.Windows.Forms.Button(); this.textBoxLfpGainCorrection = new System.Windows.Forms.TextBox(); this.textBoxApGainCorrection = new System.Windows.Forms.TextBox(); this.checkBoxSpikeFilter = new System.Windows.Forms.CheckBox(); - this.buttonChooseAdcCalibrationFile = new System.Windows.Forms.Button(); this.textBoxAdcCalibrationFile = new System.Windows.Forms.TextBox(); - this.buttonChooseGainCalibrationFile = new System.Windows.Forms.Button(); this.textBoxGainCalibrationFile = new System.Windows.Forms.TextBox(); this.comboBoxReference = new System.Windows.Forms.ComboBox(); this.comboBoxLfpGain = new System.Windows.Forms.ComboBox(); @@ -76,6 +73,8 @@ private void InitializeComponent() this.panel1 = new System.Windows.Forms.Panel(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOkay = new System.Windows.Forms.Button(); + this.buttonChooseGainCalibrationFile = new System.Windows.Forms.Button(); + this.buttonChooseAdcCalibrationFile = new System.Windows.Forms.Button(); toolStripStatusLabelGainCalSN = new System.Windows.Forms.ToolStripStatusLabel(); toolStripStatusLabelAdcCalSN = new System.Windows.Forms.ToolStripStatusLabel(); labelPresets = new System.Windows.Forms.Label(); @@ -127,17 +126,19 @@ private void InitializeComponent() // labelPresets // labelPresets.AutoSize = true; - labelPresets.Location = new System.Drawing.Point(16, 313); + labelPresets.Location = new System.Drawing.Point(10, 231); labelPresets.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); labelPresets.Name = "labelPresets"; - labelPresets.Size = new System.Drawing.Size(84, 13); + labelPresets.Size = new System.Drawing.Size(46, 26); labelPresets.TabIndex = 25; - labelPresets.Text = "Channel Presets"; + labelPresets.Text = "Channel\r\nPresets:"; // // label4 // + label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); label4.AutoSize = true; - label4.Location = new System.Drawing.Point(67, 82); + label4.Location = new System.Drawing.Point(66, 103); label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); label4.Name = "label4"; label4.Size = new System.Drawing.Size(29, 13); @@ -146,8 +147,10 @@ private void InitializeComponent() // // labelGainCorrection // + labelGainCorrection.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); labelGainCorrection.AutoSize = true; - labelGainCorrection.Location = new System.Drawing.Point(146, 82); + labelGainCorrection.Location = new System.Drawing.Point(140, 103); labelGainCorrection.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); labelGainCorrection.Name = "labelGainCorrection"; labelGainCorrection.Size = new System.Drawing.Size(55, 13); @@ -157,64 +160,64 @@ private void InitializeComponent() // adcCalibrationFile // adcCalibrationFile.AutoSize = true; - adcCalibrationFile.Location = new System.Drawing.Point(16, 163); + adcCalibrationFile.Location = new System.Drawing.Point(10, 9); adcCalibrationFile.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); adcCalibrationFile.MaximumSize = new System.Drawing.Size(133, 29); adcCalibrationFile.Name = "adcCalibrationFile"; - adcCalibrationFile.Size = new System.Drawing.Size(100, 13); + adcCalibrationFile.Size = new System.Drawing.Size(103, 13); adcCalibrationFile.TabIndex = 11; - adcCalibrationFile.Text = "ADC Calibration File"; + adcCalibrationFile.Text = "ADC Calibration File:"; // // gainCalibrationFile // gainCalibrationFile.AutoSize = true; - gainCalibrationFile.Location = new System.Drawing.Point(16, 12); + gainCalibrationFile.Location = new System.Drawing.Point(10, 57); gainCalibrationFile.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); gainCalibrationFile.MaximumSize = new System.Drawing.Size(133, 29); gainCalibrationFile.Name = "gainCalibrationFile"; - gainCalibrationFile.Size = new System.Drawing.Size(100, 13); + gainCalibrationFile.Size = new System.Drawing.Size(103, 13); gainCalibrationFile.TabIndex = 8; - gainCalibrationFile.Text = "Gain Calibration File"; + gainCalibrationFile.Text = "Gain Calibration File:"; // // spikeFilter // spikeFilter.AutoSize = true; - spikeFilter.Location = new System.Drawing.Point(16, 272); + spikeFilter.Location = new System.Drawing.Point(10, 180); spikeFilter.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); spikeFilter.Name = "spikeFilter"; - spikeFilter.Size = new System.Drawing.Size(59, 13); + spikeFilter.Size = new System.Drawing.Size(62, 13); spikeFilter.TabIndex = 6; - spikeFilter.Text = "Spike Filter"; + spikeFilter.Text = "Spike Filter:"; // // Reference // Reference.AutoSize = true; - Reference.Location = new System.Drawing.Point(16, 242); + Reference.Location = new System.Drawing.Point(10, 207); Reference.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); Reference.Name = "Reference"; - Reference.Size = new System.Drawing.Size(57, 13); + Reference.Size = new System.Drawing.Size(60, 13); Reference.TabIndex = 4; - Reference.Text = "Reference"; + Reference.Text = "Reference:"; // // lfpGain // lfpGain.AutoSize = true; - lfpGain.Location = new System.Drawing.Point(16, 133); + lfpGain.Location = new System.Drawing.Point(10, 151); lfpGain.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); lfpGain.Name = "lfpGain"; - lfpGain.Size = new System.Drawing.Size(26, 13); + lfpGain.Size = new System.Drawing.Size(29, 13); lfpGain.TabIndex = 2; - lfpGain.Text = "LFP"; + lfpGain.Text = "LFP:"; // // apGain // apGain.AutoSize = true; - apGain.Location = new System.Drawing.Point(16, 104); + apGain.Location = new System.Drawing.Point(10, 122); apGain.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); apGain.Name = "apGain"; - apGain.Size = new System.Drawing.Size(21, 13); + apGain.Size = new System.Drawing.Size(24, 13); apGain.TabIndex = 0; - apGain.Text = "AP"; + apGain.Text = "AP:"; // // label3 // @@ -273,16 +276,16 @@ private void InitializeComponent() // // gainCalibrationSN // - this.gainCalibrationSN.AutoSize = false; this.gainCalibrationSN.Name = "gainCalibrationSN"; - this.gainCalibrationSN.Size = new System.Drawing.Size(150, 15); + this.gainCalibrationSN.Size = new System.Drawing.Size(13, 15); + this.gainCalibrationSN.Text = " "; this.gainCalibrationSN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // adcCalibrationSN // - this.adcCalibrationSN.AutoSize = false; this.adcCalibrationSN.Name = "adcCalibrationSN"; - this.adcCalibrationSN.Size = new System.Drawing.Size(150, 15); + this.adcCalibrationSN.Size = new System.Drawing.Size(13, 15); + this.adcCalibrationSN.Text = " "; this.adcCalibrationSN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // // toolStripStatus @@ -296,6 +299,7 @@ private void InitializeComponent() // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.IsSplitterFixed = true; this.splitContainer1.Location = new System.Drawing.Point(0, 24); this.splitContainer1.Margin = new System.Windows.Forms.Padding(2); this.splitContainer1.Name = "splitContainer1"; @@ -309,7 +313,7 @@ private void InitializeComponent() // this.splitContainer1.Panel2.Controls.Add(this.panel1); this.splitContainer1.Size = new System.Drawing.Size(998, 583); - this.splitContainer1.SplitterDistance = 554; + this.splitContainer1.SplitterDistance = 550; this.splitContainer1.SplitterWidth = 3; this.splitContainer1.TabIndex = 2; // @@ -322,7 +326,7 @@ private void InitializeComponent() this.tabControlProbe.Margin = new System.Windows.Forms.Padding(2); this.tabControlProbe.Name = "tabControlProbe"; this.tabControlProbe.SelectedIndex = 0; - this.tabControlProbe.Size = new System.Drawing.Size(998, 554); + this.tabControlProbe.Size = new System.Drawing.Size(998, 550); this.tabControlProbe.TabIndex = 0; // // tabPageProbe @@ -332,7 +336,7 @@ private void InitializeComponent() this.tabPageProbe.Margin = new System.Windows.Forms.Padding(2); this.tabPageProbe.Name = "tabPageProbe"; this.tabPageProbe.Padding = new System.Windows.Forms.Padding(2); - this.tabPageProbe.Size = new System.Drawing.Size(990, 528); + this.tabPageProbe.Size = new System.Drawing.Size(990, 524); this.tabPageProbe.TabIndex = 0; this.tabPageProbe.Text = "Probe"; this.tabPageProbe.UseVisualStyleBackColor = true; @@ -353,8 +357,8 @@ private void InitializeComponent() // splitContainer2.Panel2 // this.splitContainer2.Panel2.Controls.Add(this.panelOptions); - this.splitContainer2.Size = new System.Drawing.Size(986, 524); - this.splitContainer2.SplitterDistance = 757; + this.splitContainer2.Size = new System.Drawing.Size(986, 520); + this.splitContainer2.SplitterDistance = 765; this.splitContainer2.SplitterWidth = 3; this.splitContainer2.TabIndex = 0; // @@ -365,7 +369,7 @@ private void InitializeComponent() this.panelProbe.Dock = System.Windows.Forms.DockStyle.Fill; this.panelProbe.Location = new System.Drawing.Point(0, 0); this.panelProbe.Name = "panelProbe"; - this.panelProbe.Size = new System.Drawing.Size(757, 524); + this.panelProbe.Size = new System.Drawing.Size(765, 520); this.panelProbe.TabIndex = 0; // // panelTrackBar @@ -374,7 +378,7 @@ private void InitializeComponent() this.panelTrackBar.Controls.Add(label1); this.panelTrackBar.Controls.Add(label3); this.panelTrackBar.Controls.Add(this.trackBarProbePosition); - this.panelTrackBar.Location = new System.Drawing.Point(706, 0); + this.panelTrackBar.Location = new System.Drawing.Point(714, -2); this.panelTrackBar.Name = "panelTrackBar"; this.panelTrackBar.Size = new System.Drawing.Size(48, 524); this.panelTrackBar.TabIndex = 33; @@ -398,22 +402,20 @@ private void InitializeComponent() // // panelOptions // + this.panelOptions.Controls.Add(this.buttonChooseAdcCalibrationFile); + this.panelOptions.Controls.Add(this.buttonChooseGainCalibrationFile); this.panelOptions.Controls.Add(this.buttonEnableContacts); this.panelOptions.Controls.Add(this.buttonClearSelections); this.panelOptions.Controls.Add(this.comboBoxChannelPresets); this.panelOptions.Controls.Add(labelPresets); this.panelOptions.Controls.Add(this.buttonResetZoom); - this.panelOptions.Controls.Add(this.buttonClearAdcCalibrationFile); this.panelOptions.Controls.Add(label4); - this.panelOptions.Controls.Add(this.buttonClearGainCalibrationFile); this.panelOptions.Controls.Add(this.textBoxLfpGainCorrection); this.panelOptions.Controls.Add(this.textBoxApGainCorrection); this.panelOptions.Controls.Add(labelGainCorrection); this.panelOptions.Controls.Add(this.checkBoxSpikeFilter); - this.panelOptions.Controls.Add(this.buttonChooseAdcCalibrationFile); this.panelOptions.Controls.Add(this.textBoxAdcCalibrationFile); this.panelOptions.Controls.Add(adcCalibrationFile); - this.panelOptions.Controls.Add(this.buttonChooseGainCalibrationFile); this.panelOptions.Controls.Add(this.textBoxGainCalibrationFile); this.panelOptions.Controls.Add(gainCalibrationFile); this.panelOptions.Controls.Add(spikeFilter); @@ -427,15 +429,17 @@ private void InitializeComponent() this.panelOptions.Location = new System.Drawing.Point(0, 0); this.panelOptions.Margin = new System.Windows.Forms.Padding(2); this.panelOptions.Name = "panelOptions"; - this.panelOptions.Size = new System.Drawing.Size(226, 524); + this.panelOptions.Size = new System.Drawing.Size(218, 520); this.panelOptions.TabIndex = 2; // // buttonEnableContacts // - this.buttonEnableContacts.Location = new System.Drawing.Point(16, 349); + this.buttonEnableContacts.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEnableContacts.Location = new System.Drawing.Point(10, 277); this.buttonEnableContacts.Margin = new System.Windows.Forms.Padding(2); this.buttonEnableContacts.Name = "buttonEnableContacts"; - this.buttonEnableContacts.Size = new System.Drawing.Size(94, 36); + this.buttonEnableContacts.Size = new System.Drawing.Size(199, 36); this.buttonEnableContacts.TabIndex = 28; this.buttonEnableContacts.Text = "Enable Selected Contacts"; this.buttonEnableContacts.UseVisualStyleBackColor = true; @@ -443,10 +447,12 @@ private void InitializeComponent() // // buttonClearSelections // - this.buttonClearSelections.Location = new System.Drawing.Point(121, 348); + this.buttonClearSelections.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.buttonClearSelections.Location = new System.Drawing.Point(10, 317); this.buttonClearSelections.Margin = new System.Windows.Forms.Padding(2); this.buttonClearSelections.Name = "buttonClearSelections"; - this.buttonClearSelections.Size = new System.Drawing.Size(94, 36); + this.buttonClearSelections.Size = new System.Drawing.Size(199, 36); this.buttonClearSelections.TabIndex = 27; this.buttonClearSelections.Text = "Deselect Contacts"; this.buttonClearSelections.UseVisualStyleBackColor = true; @@ -454,50 +460,34 @@ private void InitializeComponent() // // comboBoxChannelPresets // + this.comboBoxChannelPresets.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxChannelPresets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxChannelPresets.FormattingEnabled = true; - this.comboBoxChannelPresets.Location = new System.Drawing.Point(103, 309); + this.comboBoxChannelPresets.Location = new System.Drawing.Point(76, 234); this.comboBoxChannelPresets.Margin = new System.Windows.Forms.Padding(2); this.comboBoxChannelPresets.Name = "comboBoxChannelPresets"; - this.comboBoxChannelPresets.Size = new System.Drawing.Size(112, 21); + this.comboBoxChannelPresets.Size = new System.Drawing.Size(133, 21); this.comboBoxChannelPresets.TabIndex = 26; // // buttonResetZoom // - this.buttonResetZoom.Location = new System.Drawing.Point(66, 389); + this.buttonResetZoom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.buttonResetZoom.Location = new System.Drawing.Point(10, 357); this.buttonResetZoom.Margin = new System.Windows.Forms.Padding(2); this.buttonResetZoom.Name = "buttonResetZoom"; - this.buttonResetZoom.Size = new System.Drawing.Size(94, 36); + this.buttonResetZoom.Size = new System.Drawing.Size(199, 36); this.buttonResetZoom.TabIndex = 22; this.buttonResetZoom.Text = "Reset Zoom"; this.buttonResetZoom.UseVisualStyleBackColor = true; this.buttonResetZoom.Click += new System.EventHandler(this.ButtonClick); // - // buttonClearAdcCalibrationFile - // - this.buttonClearAdcCalibrationFile.Location = new System.Drawing.Point(121, 202); - this.buttonClearAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); - this.buttonClearAdcCalibrationFile.Name = "buttonClearAdcCalibrationFile"; - this.buttonClearAdcCalibrationFile.Size = new System.Drawing.Size(94, 21); - this.buttonClearAdcCalibrationFile.TabIndex = 21; - this.buttonClearAdcCalibrationFile.Text = "Clear"; - this.buttonClearAdcCalibrationFile.UseVisualStyleBackColor = true; - this.buttonClearAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); - // - // buttonClearGainCalibrationFile - // - this.buttonClearGainCalibrationFile.Location = new System.Drawing.Point(121, 51); - this.buttonClearGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); - this.buttonClearGainCalibrationFile.Name = "buttonClearGainCalibrationFile"; - this.buttonClearGainCalibrationFile.Size = new System.Drawing.Size(94, 21); - this.buttonClearGainCalibrationFile.TabIndex = 19; - this.buttonClearGainCalibrationFile.Text = "Clear"; - this.buttonClearGainCalibrationFile.UseVisualStyleBackColor = true; - this.buttonClearGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); - // // textBoxLfpGainCorrection // - this.textBoxLfpGainCorrection.Location = new System.Drawing.Point(132, 129); + this.textBoxLfpGainCorrection.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxLfpGainCorrection.Location = new System.Drawing.Point(126, 147); this.textBoxLfpGainCorrection.Margin = new System.Windows.Forms.Padding(2); this.textBoxLfpGainCorrection.Name = "textBoxLfpGainCorrection"; this.textBoxLfpGainCorrection.ReadOnly = true; @@ -506,7 +496,9 @@ private void InitializeComponent() // // textBoxApGainCorrection // - this.textBoxApGainCorrection.Location = new System.Drawing.Point(132, 100); + this.textBoxApGainCorrection.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxApGainCorrection.Location = new System.Drawing.Point(126, 118); this.textBoxApGainCorrection.Margin = new System.Windows.Forms.Padding(2); this.textBoxApGainCorrection.Name = "textBoxApGainCorrection"; this.textBoxApGainCorrection.ReadOnly = true; @@ -516,7 +508,7 @@ private void InitializeComponent() // checkBoxSpikeFilter // this.checkBoxSpikeFilter.AutoSize = true; - this.checkBoxSpikeFilter.Location = new System.Drawing.Point(103, 270); + this.checkBoxSpikeFilter.Location = new System.Drawing.Point(76, 179); this.checkBoxSpikeFilter.Margin = new System.Windows.Forms.Padding(2); this.checkBoxSpikeFilter.Name = "checkBoxSpikeFilter"; this.checkBoxSpikeFilter.Size = new System.Drawing.Size(65, 17); @@ -524,65 +516,47 @@ private void InitializeComponent() this.checkBoxSpikeFilter.Text = "Enabled"; this.checkBoxSpikeFilter.UseVisualStyleBackColor = true; // - // buttonChooseAdcCalibrationFile - // - this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(16, 202); - this.buttonChooseAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); - this.buttonChooseAdcCalibrationFile.Name = "buttonChooseAdcCalibrationFile"; - this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(94, 21); - this.buttonChooseAdcCalibrationFile.TabIndex = 13; - this.buttonChooseAdcCalibrationFile.Text = "Choose"; - this.buttonChooseAdcCalibrationFile.UseVisualStyleBackColor = true; - this.buttonChooseAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); - // // textBoxAdcCalibrationFile // - this.textBoxAdcCalibrationFile.Location = new System.Drawing.Point(16, 178); + this.textBoxAdcCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxAdcCalibrationFile.Location = new System.Drawing.Point(10, 24); this.textBoxAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxAdcCalibrationFile.Name = "textBoxAdcCalibrationFile"; - this.textBoxAdcCalibrationFile.ReadOnly = true; - this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(199, 20); + this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(167, 20); this.textBoxAdcCalibrationFile.TabIndex = 12; this.textBoxAdcCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBoxAdcCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); // - // buttonChooseGainCalibrationFile - // - this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(16, 51); - this.buttonChooseGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); - this.buttonChooseGainCalibrationFile.Name = "buttonChooseGainCalibrationFile"; - this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(94, 21); - this.buttonChooseGainCalibrationFile.TabIndex = 10; - this.buttonChooseGainCalibrationFile.Text = "Choose"; - this.buttonChooseGainCalibrationFile.UseVisualStyleBackColor = true; - this.buttonChooseGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); - // // textBoxGainCalibrationFile // - this.textBoxGainCalibrationFile.Location = new System.Drawing.Point(16, 27); + this.textBoxGainCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxGainCalibrationFile.Location = new System.Drawing.Point(10, 72); this.textBoxGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxGainCalibrationFile.Name = "textBoxGainCalibrationFile"; - this.textBoxGainCalibrationFile.ReadOnly = true; - this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(199, 20); + this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(167, 20); this.textBoxGainCalibrationFile.TabIndex = 9; this.textBoxGainCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBoxGainCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); // // comboBoxReference // + this.comboBoxReference.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxReference.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxReference.FormattingEnabled = true; - this.comboBoxReference.Location = new System.Drawing.Point(103, 238); + this.comboBoxReference.Location = new System.Drawing.Point(76, 203); this.comboBoxReference.Margin = new System.Windows.Forms.Padding(2); this.comboBoxReference.Name = "comboBoxReference"; - this.comboBoxReference.Size = new System.Drawing.Size(112, 21); + this.comboBoxReference.Size = new System.Drawing.Size(133, 21); this.comboBoxReference.TabIndex = 5; // // comboBoxLfpGain // this.comboBoxLfpGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxLfpGain.FormattingEnabled = true; - this.comboBoxLfpGain.Location = new System.Drawing.Point(40, 129); + this.comboBoxLfpGain.Location = new System.Drawing.Point(39, 147); this.comboBoxLfpGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxLfpGain.Name = "comboBoxLfpGain"; this.comboBoxLfpGain.Size = new System.Drawing.Size(82, 21); @@ -592,7 +566,7 @@ private void InitializeComponent() // this.comboBoxApGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxApGain.FormattingEnabled = true; - this.comboBoxApGain.Location = new System.Drawing.Point(40, 100); + this.comboBoxApGain.Location = new System.Drawing.Point(39, 118); this.comboBoxApGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxApGain.Name = "comboBoxApGain"; this.comboBoxApGain.Size = new System.Drawing.Size(82, 21); @@ -604,7 +578,7 @@ private void InitializeComponent() this.tabPageADCs.Location = new System.Drawing.Point(4, 22); this.tabPageADCs.Margin = new System.Windows.Forms.Padding(2); this.tabPageADCs.Name = "tabPageADCs"; - this.tabPageADCs.Size = new System.Drawing.Size(990, 527); + this.tabPageADCs.Size = new System.Drawing.Size(990, 528); this.tabPageADCs.TabIndex = 2; this.tabPageADCs.Text = "ADCs"; this.tabPageADCs.UseVisualStyleBackColor = true; @@ -618,7 +592,7 @@ private void InitializeComponent() this.dataGridViewAdcs.Name = "dataGridViewAdcs"; this.dataGridViewAdcs.RowHeadersWidth = 62; this.dataGridViewAdcs.RowTemplate.Height = 28; - this.dataGridViewAdcs.Size = new System.Drawing.Size(990, 527); + this.dataGridViewAdcs.Size = new System.Drawing.Size(990, 528); this.dataGridViewAdcs.TabIndex = 0; // // panel1 @@ -629,14 +603,14 @@ private void InitializeComponent() this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Margin = new System.Windows.Forms.Padding(2); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(998, 26); + this.panel1.Size = new System.Drawing.Size(998, 30); this.panel1.TabIndex = 0; // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(908, 0); + this.buttonCancel.Location = new System.Drawing.Point(908, 1); this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(83, 22); @@ -647,7 +621,7 @@ private void InitializeComponent() // buttonOkay // this.buttonOkay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOkay.Location = new System.Drawing.Point(819, 0); + this.buttonOkay.Location = new System.Drawing.Point(819, 1); this.buttonOkay.Margin = new System.Windows.Forms.Padding(2); this.buttonOkay.Name = "buttonOkay"; this.buttonOkay.Size = new System.Drawing.Size(83, 22); @@ -656,6 +630,30 @@ private void InitializeComponent() this.buttonOkay.UseVisualStyleBackColor = true; this.buttonOkay.Click += new System.EventHandler(this.ButtonClick); // + // buttonChooseGainCalibrationFile + // + this.buttonChooseGainCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(181, 72); + this.buttonChooseGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonChooseGainCalibrationFile.Name = "buttonChooseGainCalibrationFile"; + this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(28, 20); + this.buttonChooseGainCalibrationFile.TabIndex = 35; + this.buttonChooseGainCalibrationFile.Text = "..."; + this.buttonChooseGainCalibrationFile.UseVisualStyleBackColor = true; + this.buttonChooseGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // + // buttonChooseAdcCalibrationFile + // + this.buttonChooseAdcCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(181, 24); + this.buttonChooseAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonChooseAdcCalibrationFile.Name = "buttonChooseAdcCalibrationFile"; + this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(28, 20); + this.buttonChooseAdcCalibrationFile.TabIndex = 36; + this.buttonChooseAdcCalibrationFile.Text = "..."; + this.buttonChooseAdcCalibrationFile.UseVisualStyleBackColor = true; + this.buttonChooseAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // // NeuropixelsV1eDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -665,6 +663,7 @@ private void InitializeComponent() this.Controls.Add(this.statusStrip); this.Controls.Add(this.menuStrip); this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MainMenuStrip = this.menuStrip; this.Margin = new System.Windows.Forms.Padding(2); this.Name = "NeuropixelsV1eDialog"; @@ -720,14 +719,10 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonClearSelections; private System.Windows.Forms.ComboBox comboBoxChannelPresets; private System.Windows.Forms.Button buttonResetZoom; - private System.Windows.Forms.Button buttonClearAdcCalibrationFile; - private System.Windows.Forms.Button buttonClearGainCalibrationFile; private System.Windows.Forms.TextBox textBoxLfpGainCorrection; private System.Windows.Forms.TextBox textBoxApGainCorrection; private System.Windows.Forms.CheckBox checkBoxSpikeFilter; - private System.Windows.Forms.Button buttonChooseAdcCalibrationFile; private System.Windows.Forms.TextBox textBoxAdcCalibrationFile; - private System.Windows.Forms.Button buttonChooseGainCalibrationFile; private System.Windows.Forms.TextBox textBoxGainCalibrationFile; private System.Windows.Forms.ComboBox comboBoxReference; private System.Windows.Forms.ComboBox comboBoxLfpGain; @@ -735,5 +730,7 @@ private void InitializeComponent() private System.Windows.Forms.Panel panelProbe; private System.Windows.Forms.TrackBar trackBarProbePosition; private System.Windows.Forms.Panel panelTrackBar; + private System.Windows.Forms.Button buttonChooseGainCalibrationFile; + private System.Windows.Forms.Button buttonChooseAdcCalibrationFile; } } diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs index d48d1016..db5a02de 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs @@ -142,9 +142,10 @@ private void ParseAdcCalibrationFile() { StreamReader adcFile = new(ConfigureNode.AdcCalibrationFile); - adcCalibrationSN.Text = ulong.Parse(adcFile.ReadLine()).ToString(); + var adcCalibration = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); - Adcs = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); + adcCalibrationSN.Text = adcCalibration.SN.ToString(); + Adcs = adcCalibration.Adcs; dataGridViewAdcs.DataSource = Adcs; @@ -161,10 +162,9 @@ private void ParseGainCalibrationFile() { StreamReader gainCalibrationFile = new(ConfigureNode.GainCalibrationFile); - gainCalibrationSN.Text = ulong.Parse(gainCalibrationFile.ReadLine()).ToString(); - var gainCorrection = NeuropixelsV1Helper.ParseGainCalibrationFile(gainCalibrationFile, ConfigureNode.ProbeConfiguration.SpikeAmplifierGain, ConfigureNode.ProbeConfiguration.LfpAmplifierGain); + gainCalibrationSN.Text = gainCorrection.SN.ToString(); ApGainCorrection = gainCorrection.AP; LfpGainCorrection = gainCorrection.LFP; @@ -359,16 +359,6 @@ private void ButtonClick(object sender, EventArgs e) textBoxGainCalibrationFile.Text = ofd.FileName; } } - else if (button.Name == nameof(buttonClearGainCalibrationFile)) - { - textBoxGainCalibrationFile.Text = ""; - ApGainCorrection = default; - LfpGainCorrection = default; - - panelProbe.Visible = false; - - CheckStatus(); - } else if (button.Name == nameof(buttonChooseAdcCalibrationFile)) { var ofd = new OpenFileDialog() @@ -383,14 +373,6 @@ private void ButtonClick(object sender, EventArgs e) textBoxAdcCalibrationFile.Text = ofd.FileName; } } - else if (button.Name == nameof(buttonClearAdcCalibrationFile)) - { - textBoxAdcCalibrationFile.Text = ""; - Adcs = null; - dataGridViewAdcs.DataSource = null; - - CheckStatus(); - } else if (button.Name == nameof(buttonResetZoom)) { ResetZoom(); diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx index 4c8ca1db..bb5a3335 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx @@ -165,4 +165,1659 @@ 41 + + + + AAABAA4AEBAQAAEABAAoAQAA5gAAABAQAAABAAgAaAUAAA4CAAAQEAAAAQAgAGgEAAB2BwAAICAQAAEA + BADoAgAA3gsAACAgAAABAAgAqAgAAMYOAAAgIAAAAQAgAKgQAABuFwAAMDAQAAEABABoBgAAFigAADAw + AAABAAgAqA4AAH4uAAAwMAAAAQAYAKgcAAAmPQAAMDAAAAEAIACoJQAAzlkAAEBAAAABABgAKDIAAHZ/ + AABAQAAAAQAgAChCAACesQAAAAAAAAEAGABpMQAAxvMAAAAAAAABACAAZ10AAC8lAQAoAAAAEAAAACAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAgAAAgICAAACAgADAwMAA//8AAAD/ + /wAAAP8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUiAAAAAAAFU5YAAA + AAVVADYgAAAFVQAGYlAAVTUAVTUjMAM1VVVTIDOABVAAAAYDRHAAVQAAYzhlAAAFUAY4AFcAAABVA0AA + NwAAAAUDAAZAAAAAAAAAA0AAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAA//8AAP/xAAD/wQAA/jEAAPjh + AADDAAAAgBEAAJ+hAADPAwAA5jMAAPJzAAD45wAA/+cAAP/vAAD/7wAA//8AACgAAAAQAAAAIAAAAAEA + CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5YzAEWaLgCFpi8AJLioAL2exQA9QTAAO12VANK0 + LwAws5AAzarWAGZsPgA+Z9UAdLRpACbQ+wDdtS8Ak41jAEBr6QDAtkIA37YvAKmdbgA/auoAR27gANKu + MgA8zeMAu5vDAMiq0ABLXUwATaKmAHpvfACWlJUAqqmpALe2tgDGr2QAxKAqAHt6RQA+XowAHJXwALW0 + tACysbEAtLOzALe1swCrjzcAsp5eAK2ecQCQgU8ALk93AA09OADctDEAzqw0AN61LgDbrikA3bMsAMWs + XgC/gxAA1qYjALazrQCMYSEAnGUNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg5 + OgAAAAAAAAAAAAAAICA1NjcAAAAAAAAAACAgIAAAMjM0AAAAAAAAICAgAAAAExMwMQAAACYnKCAAACAp + KissLS4vAB0eHyAgICAgISIAIyQlAAAZGgAAAAAAABMAFRscDgAAAAoKAAAAABMUFRYXGAAAAAAACgoA + AA8QEQAAEg4AAAAAAAAKCgALDAAAAA0OAAAAAAAAAAUGBwAAAAgJAAAAAAAAAAAAAAAAAAADBAAAAAAA + AAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD/8QAA/8EAAP4x + AAD44QAAwwAAAIARAACfoQAAzwMAAOYzAADycwAA+OcAAP/nAAD/7wAA/+8AAP//AAAoAAAAEAAAACAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBiHh6PWw0RAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC3trYBt7a2RLazra2MYSH7nGUNjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALe2thG3trZvt7a217e2tufFrF7xv4MQ/9amI9YAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAt7a2Mre2tpu3trbzt7a2wre2tljctjlZ3rUu99uuKf7dsyz437YvIgAAAAAAAAAAAAAAALe2 + tgi3trZdt7a2xre2tvG3traWt7a2LQAAAADfti8d37Yv7N+2L5PctDHizqw0w7aeLGwAAAAAt7a2IrW0 + tIiysbHqtLOz9re2trK3trZut7a2eLe2tpC3tbOoq4833LKeXv2tnnHykIFP/y5Pd/8NPTiacV91dnpv + fPyWlJX/qqmp+7e2tuq3trbSt7a2ure2tqK3traKxq9k0MSgKtayrZ9De3pFwz5ejP4clfD/JMn6PYly + jiK7m8PbyKrQtb+ywgwAAAAAAAAAAAAAAAAAAAAA37YvOd+2L/K2o15BP2rqqktdTP9Noqa5JtD71SbQ + +wEAAAAAzarWGM2q1tDNqtavzarWCQAAAAAAAAAA37YvD9+2L92pnW6pP2rq3kdu4LzSrjL+PM3j2ybQ + +24AAAAAAAAAAAAAAADNqtYQzarWw82q1r7NqtYOAAAAAN21L6OTjWP+QGvp9D9q6nDbtDM4wLZC/ibQ + +/Qm0PsRAAAAAAAAAAAAAAAAAAAAAM2q1grNqta0zarWy7idS3BmbD7/PmfV2j9q6jMAAAAA37YvaHS0 + af8m0PufAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWBr2exaU9QTD/O12VpD9q6g4AAAAAAAAAANK0 + L5kws5D/JtD7OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3bXYDPkM8PQAAAAAAAAAAAAAAAAAA + AACFpi/LJLiozwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADYtS8GRZou9iS8t2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAASaA9KCOWM/MlyOEOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAFKrYQEynEAdAAAAAAAAAAAAAAAAAAAAAP/5AAD/wQAA/wEAAPwAAADgQAAAgAAAAAAA + AAAPAAAAhgEAAMIBAADgIwAA8GMAAPnnAAD/xwAA/8cAAP/PAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgIAAgICAAICAAAAA//8AAP8AAP//AACAAIAAwMDAAAAA + gAAAAP8A/wD/AP8AAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAACT5AAAAAAAAAAAAAAAAACZNEQAAAAAAAAAAAAAAACZOTTXMAAAAAAAAAAAAAmZmZl9RzAAAA + AAAAAAAAk5mQAHRzfQAAAAAAAAAJmZmQAAfZc3MAAAAAAAAJOZmQAABHN9d0cAAAAACTmZkAAAAAcwdz + CUAAAACZmZkAAAAABzeTQzAQAACZk5mZOZk5mURJlEM6oAMzMzmTmZmZmZNDkJQ7tVADgzmZmZmQAAAH + QAAxglMAAzmQAAAAAAAAc3ALMDJVAAAJmQAAAAAABzcAszSZUAAAAJnAAAAAAANws1MzM1AAAAAJmQAA + AAB3M1OwR1VQAAAAAJnAAAAHOTs7AHOVAAAAAAAJmQAAc0O1AANzVQAAAAAAAJnAAEQ7MAAHclAAAAAA + AAAJmQQysAAABJKQAAAAAAAAAJkxowAAAAdFUAAAAAAAAAADgDAAAAAJFQAAAAAAAAAAABAAAAAABCUA + AAAAAAAAAAAAAAAAAHIwAAAAAAAAAAAAAAAAAAA2IAAAAAAAAAAAAAAAAAAAQVAAAAAAAAAAAAAAAAAA + ABMAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + //////+H///+B///+AP//8AD//8HA//4HgP/4HwB/wP8ifwP+AHwAAABgAABAYAH5wOH/8YD4/+MB/H/ + kAf4/wEH/H4DD/48Dg//HB4f/4h+H//A/h//4f4///f+P////H////x////8f////P////z///////// + //8oAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGULgAmmTwAIpQuACGX + NwBNnC4AIZQvACW/wACPqC8AJLmsANS0LwAxly4AI6+JAD5CNwB1oy4AIqNhACbQ+wCchaAALDMkAC02 + KQA8X6cAwbEvACOZPgAmz/cAzarWAMmn0QBmWUwAM0MoADhQRQA+aN0A37YvAFKdLgAlyN8Ano0tAEFS + KwA6V3AAP2rpAJ+qLwAkvLcAxqYuAFliLAA8X6QAP2rqANm1LwA1tJAA2bIvAIF8OAA/Z9AAfLVpAKyb + VgBDbOUAxbZAACbQ+gDCqFEAPszgAEFr5gCrlzoAf8OZADpUWgCAei0AzLE5AIhxjgCkiKsAt5e/AMKn + yQA6WX8AN0wrAEFXUAAsuPcAaVZtAHZpeQCbmZoAsK+vALe2tgBWaGgAPE8rADpt6QAcpPMAdGJ3AIB2 + ggCKiYkAhoWFAIWEhACTkpIAqKenALa1tQCynl4AsI8lALSSJgCxp4oAwLKGAKqRKwBIVSwAPWXVABlb + 5AAUg+0AJMf5ALOysgCrqqoArq2tALazrwCkizoAoIIiAKSMPgC2tLEAoYQpAJl9IgBZZocAIkmpAAY3 + aAALRk0Au5goALaVJwC4pGMAp44+AKKEIgCsnnMAgIqoABAyJAAGLB4A3LMuANayOgC0mSoAmIsqAN60 + LQDftS8A3rQuANOgHwDarSgA2aomANK0VADetS8AyY0RAMyTFgCwlUEAtYMTALJqBQDNlRcAs62dAJdy + HAB9RAEAo2kMAKSQawB6QgEAgUoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAASY6PkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUmKi4yNAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAASUlJaIaHiIkeAAAAAAAAAAAAAAAAAAAAAAAAAABJSUlJSUmCg4SFfx4AAAAA + AAAAAAAAAAAAAAAAAABJSUlJSQAAAB58f4CBHgAAAAAAAAAAAAAAAAAAAElJSUlJSQAAAAAeHnx9Hn4e + AAAAAAAAAAAAAAAAAElJSUlJSQAAAAAAHh4eHh4eHh4eAAAAAAAAAAAASUlJSUlJAAAAAAAAAAAeHgAe + eHkAensAAAAAAAAASUlJSUlJAAAAAAAAAAAAb3BxSXJzdHV2dwAAAAAAVWFIYmNVSUlJSUlJSUlJZGVm + Z2hoaWprbG1uAABOT1BRUlNUVUlJSUlJSUlJSUlWV1hZAFpbXF1eX2AAAEVFRkdISUlJSUlJSQAAAAAA + AB4eAAAASkscTE0QAAAAPT4/QAAAAAAAAAAAAAAAAAAeHh4AACpBQkNEEBAAAAAAABgYGAAAAAAAAAAA + AAAAHh4eAAAqKjo7PBAQAAAAAAAAABgYGAAAAAAAAAAAAAAeHgAqKio3OB45EBAAAAAAAAAAABgYGAAA + AAAAAAAAHh41KioqKgAeHjYQEAAAAAAAAAAAABgYGAAAAAAAAB4eMTIqKioAAB4zNBAAAAAAAAAAAAAA + ABgYGAAAAAAeLS4vKioAAAAeHjAQEAAAAAAAAAAAAAAAABgYGAAAACcoKSoqAAAAAB4rLBAAAAAAAAAA + AAAAAAAAABgYGAAhIiMkAAAAAAAAHiUmEAAAAAAAAAAAAAAAAAAAABgZGhscHQAAAAAAAAAeHyAQAAAA + AAAAAAAAAAAAAAAAABESExQAAAAAAAAAABUWFwAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAADg8Q + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CAEJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + /4f///4H///4A///wAP//wcD//geA//gfAH/A/yJ/A/4AfAAAAGAAAEBgAfnA4f/xgPj/4wH8f+QB/j/ + AQf8fgMP/jwOD/8cHh//iH4f/8D+H//h/j//9/4////8f////H////x////8/////P///////////ygA + AAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsqqXDIxaEWuPWw1DAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AADwf//DAI8AAPg//4YADwAA/B//DBAfAAD+D/8AMB8AAP8H/gBwPwAA/8P8AeA/AAD/4fgD4D8AAP/w + eAfgfwAA//gwH+B/AAD//AA/4P8AAP/+AP/A/wAA//8B/8D/AAD//4P/wf8AAP//z//B/wAA/////8P/ + AAD/////g/8AAP////+D/wAA/////4f/AAD/////h/8AAP////+P/wAA/////w//AAD/////j/8AAP// + /////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAIZQuAC2cQQA4nT8AI5xHACSVLgAhlzgAUp0uACGULwAlwMQAlqkvACS4qADXtS8AMZcuACOs + gQAm0PsA37YvAHmkLgAioVoAJtD6AMCwLwAmlS4AJs71AD1BNwA7QDQAVJ0uACXF1wCJd4sALDMkAC44 + LwA8YbUAoqsvACS6rwDNqtYAq5CwAC81KAAvOyYAOFJRAD9p4gDYtS8AN5guACOviQCbfXkAQEMmADZL + KwA3TCsAOll/AD9q6QB9pC4AIqNgAMypzQDHpS8AaGssADhMKwA3TC0APGGyAD9q6gDGsi8AJptCACbN + 8gDbtC8AkoYtADtPKwA4T0AAPmfWAFieMAAlx9wAu58uAFBbLAA5VWIAP2roAKWsLwAlvLcA0q4vAHFx + LQA8XZUA2bUvAD61jwDetS8Am4w1AEVpxACCtmkAwKZJAEpv3QDItj0AJ9D5ANKwPgBAaukA3rYvAELM + 3ACFw5IAP2rmAHV3SADUry8A2bc2ADpWaABTXiwAvaAuADtbjQA9UCsAioEvAIBqhQCKcpAAoISnAK+R + tgC7ocEAPWGxADhNLQA+ZtMAKcP5AHdlewBpVm0AeWp8AKGeoAC0s7MAt7a2ADlOLQA9YrkANHLrAB+y + 9gB2ZHoAcmV0AIKBgQCDgoIAh4aGAJqZmQCura0AyrFhANCpLADUrS0A2bEuANy0LgCymS4ATVorADtc + kgA+auoAElznABiU8QAlzfsAeWh8AIh+iQCRkJAAjYyMAImIiACGhYUAhYSEAISDgwCmpaUAtbS0ALe1 + tACnkU0AoYMiAKKEIgCkhSMArqB3AMCjRQC4mCkAXmEoADdSaQA9ZuIAJl/kAAlV5AARdusAIsH4ALGw + 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 + AAAAAAAAAAAAAAAAAAAAAAAAISEhISEAAAAAEENERUY4ODgAAAAAAAAQEEdIDw8AAAAAAAAAAAAAAAAA + AAAAAAAAACEhISEhAAA8PT4/QDg4AAAAAAAAAAAQEEFCDw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAhISEh + MjM0NTY3ODgAAAAAAAAAAAAQOTo7DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhKissLS4vAAAAAAAA + AAAAABAQMDEPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEiIxwkJSYAAAAAAAAAAAAAABAnKCkPDwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHBwdHgAAAAAAAAAAAAAAABAfASAPAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFxgAAAAAAAAAAAAAAAAAABAZARoPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABQVBhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEBEBEhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA0BDg8AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgEBCwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwEICQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABQEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAQEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//////nwAA//////4f + AAD/////8A8AAP/////ADwAA/////gAPAAD////4AAcAAP///+AQBwAA////AHAHAAD///wD4AcAAP// + 4A/AAwAA//+AP8AjAAD//AH/hCMAAP/wB/8MIQAA/8A//gABAAD+AP4AAAEAAPgAAAAAAQAAwAAAAAAD + AACAAAAQeAMAAIAA//D4BwAAwf//4eAHAADg///DwIcAAPB//8MAjwAA+D//hgAPAAD8H/8MEB8AAP4P + /wAwHwAA/wf+AHA/AAD/w/wB4D8AAP/h+APgPwAA//B4B+B/AAD/+DAf4H8AAP/8AD/g/wAA//4A/8D/ + AAD//wH/wP8AAP//g//B/wAA///P/8H/AAD/////w/8AAP////+D/wAA/////4P/AAD/////h/8AAP// + //+H/wAA/////4//AAD/////D/8AAP////+P/wAA////////AAD///////8AAP///////wAAKAAAADAA + AABgAAAAAQAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpWC49bDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKdLiGULiGULyXAxAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACSVLiGULiGXOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADidPyGULiGULiOcRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGULiGULi2cQQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA//////// + AAD//////58AAP/////+HwAA//////APAAD/////wA8AAP////4ADwAA////+AAHAAD////gEAcAAP// + /wBwBwAA///8A+AHAAD//+APwAMAAP//gD/AIwAA//wB/4QjAAD/8Af/DCEAAP/AP/4AAQAA/gD+AAAB + AAD4AAAAAAEAAMAAAAAAAwAAgAAAEHgDAACAAP/w+AcAAMH//+HgBwAA4P//w8CHAADwf//DAI8AAPg/ + /4YADwAA/B//DBAfAAD+D/8AMB8AAP8H/gBwPwAA/8P8AeA/AAD/4fgD4D8AAP/weAfgfwAA//gwH+B/ + AAD//AA/4P8AAP/+AP/A/wAA//8B/8D/AAD//4P/wf8AAP//z//B/wAA/////8P/AAD/////g/8AAP// + //+D/wAA/////4f/AAD/////h/8AAP////+P/wAA/////w//AAD/////j/8AAP///////wAA//////// + AAD///////8AACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + ogYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYyt7a2mre2tu+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tvm3traqt7a2Q7e2tgO3trYIt7a2ILe2tji3trZPt7a2aLe2toC3traXt7a2sLe2tsm3trbat7a27Le2 + tvqwp4v/oIIj/6CCIv+ggiL/pY5D/7a0sf+3trb/r6WG/6CCIv+ggiL/oYUq/5udpv9EXqr/FD1//wYs + Hv8GLB7/DDQp7WSTmw0AAAAAAAAAAAAAAAC3trYNt7a2XLe2tsa3trb+tLOz/7GwsP+ura3/qaio/6Sj + o/+mpaX/srGx9Le2tsC3tra/t7a21be2tu+3trb+t7a2/re2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7Swpf+ihzH/oIIi/6CCIv+hhSv/tK+h/7e2tv+3trb/q5to/6CCIv+fgSL/bWU3/zJQ + p/8qTKr/CECp/wY5bf8JQ1b/GXyMigAAAAAAAAAAkoKVGXlofJOIfonkkZCQ/42MjP+JiIj/hoWF/4WE + hP+Eg4P/kZCQ/6alpf+1tLT/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7W0/6eRTf+hgyL/ooQi/6SFI/6uoHfgt7a2xLe2tq63traWwKNF4riY + Kf9eYSj/N1Jp/z1m4v8mX+T/CVXk/xF26/8iwfj5JtD7JgAAAAAAAAAAdmR6sWlWbf9pVm3/cmV0/4KB + gf+DgoL/h4aG/5qZmf+ura3/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb5t7a25be2ts23tra3t7a2n7e2toe3trZvyrFhudCpLP/UrS3/2bEu/9y0LqTfti8CAAAAAAAA + AAAAAAAAspku501aK/83TCv/O1yS/z5q6v8SXOf/GJTx/yXN+/8m0Pu4JtD7AgAAAAAAAAAAd2V7xmlW + bf9pVm3/aVZt/3lqfP+hnqD/tLOz/7e2tv+3trb+t7a287e2tua3trbYt7a2wLe2tqm3traQt7a2eLe2 + tmG3trZIt7a2Mbe2thi3trYGt7a2A7e2tgEAAAAAAAAAAAAAAADfti8z37Yv99+2L//fti//37Yv2d+2 + LxEAAAAAAAAAAD9q6gdBZbx+OU4t/jdMK/83TCv/PWK5/zRy6/ofsvb/JtD7/ybQ+/8m0PtPAAAAAAAA + AAAAAAAAhHGHNYBqheGKcpD/oISn/6+Rtv+7ocH1u7S8Zre2tjq3trYjt7a2Fbe2tgu3trYCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lw/fti/T37Yv/9+2 + L//fti/537YvOgAAAAAAAAAAP2rqHj9q6rg9YbH/N0wr/zdMK/84TS3/PmbTrinD+b4m0Pv/JtD7/ybQ + ++Mm0PsGAAAAAAAAAAAAAAAAAAAAAM2q1iHNqtbWzarW/82q1v/Nqtb/zarW0M2q1hsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2 + L5rfti//37Yv/9+2L//fti98AAAAAAAAAAA/aupKP2rq5j9q6v87W43/N0wr/z1QK/+KgS/dOMXhIibQ + +/Mm0Pv/JtD7/ybQ+4IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYZzarWyM2q1v/Nqtb/zarW/82q + 1tzNqtYmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37YvV9+2L/zfti//37Yv/9+2L7vfti8GP2rqCT9q6os/aur7P2rq/z9q6v86Vmj/U14s/72g + Lv/fti+vJtD7dybQ+/8m0Pv/JtD79ibQ+yMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWEc2q + 1r7Nqtb/zarW/82q1v/NqtbjzarWMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADfti8g37Yv69+2L//fti//37Yv6d+2LyE/auojP2rqxj9q6v8/aur/P2rq/z9q + 5v51d0j+1K8v/9+2L//ZtzaCJtD72ybQ+/8m0Pv/JtD7swAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAM2q1gnNqtauzarW/82q1v/Nqtb/zarW7M2q1j0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lwbfti+937Yv/9+2L//fti/+3rUxVD9q6lk/aurtP2rq/z9q + 6v8/aur/P2rq71t3yHbeti/737Yv/9+2L/+Fw5KWJtD7/ibQ+/8m0Pv/JtD7TAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYHzarWnM2q1v/Nqtb/zarW/82q1vHNqtZOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2L37fti//37Yv/9+2L//SsD6lQGrpmz9q + 6vw/aur/P2rq/z9q6v8/aurLP2rqKd+2L0Pfti//37Yv/962L/pCzNzLJtD7/ybQ+/8m0PvaJtD7BwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWBM2q1o7Nqtb+zarW/82q + 1v/Nqtb0zarWWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvO9+2L/ffti//37Yv/8Cm + SfVKb93eP2rq/z9q6v8/aur/P2rq/T9q6pI/auoMAAAAAN+2L3Pfti//37Yv/8i2Pfgn0Pn5JtD7/ybQ + +/8m0Pt9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q + 1gHNqtZ9zarW/M2q1v/Nqtb/zarW+82q1mvNqtYBAAAAAAAAAAAAAAAAAAAAAAAAAADfti8S37Yv29+2 + L//etS//m4w1/0VpxP8/aur/P2rq/z9q6v8/aurrP2rqUQAAAAAAAAAAAAAAAN+2L6Xfti//37Yv/4K2 + af8m0Pv/JtD7/ybQ+/cm0PsdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADNqtYBzarWas2q1vvNqtb/zarW/82q1vzNqtZ8zarWAwAAAAAAAAAAAAAAAN+2 + LwLfti+j37Yv/9KuL/9xcS3/PF2V/z9q6v8/aur/P2rq/z9q6r8/auoiAAAAAAAAAAAAAAAA37YvAd+2 + L9Xfti//2bUv/z61j/8m0Pv/JtD7/ybQ+6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1lzNqtb4zarW/82q1v/Nqtb+zarWjs2q + 1gIAAAAAAAAAAN+2L1/fti/9u58u/1BbLP85VWL/P2ro/z9q6v8/aur8P2rqgz9q6ggAAAAAAAAAAAAA + AAAAAAAA37YvFd+2L/Hfti//pawv/yW8t/8m0Pv/JtD7/ibQ+0cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtZKzarW8M2q + 1v/Nqtb/zarW/82q1p/NqtYI37YvJtu0L/GShi3/O08r/zhPQP8+Z9b/P2rq/z9q6uI/aupEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA37YvOd+2L//fti//WJ4w/yXH3P8m0Pv/JtD71ibQ+wcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzarWPs2q1urNqtb/zarW/82q1v/Mqc2wx6UvxmhrLP84TCv/N0wt/zxhsv8/aur+P2rqtD9q + 6hoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yva9+2L//Gsi//JptC/ybN8v8m0Pv/JtD7dQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1jPNqtbkzarW/82q1v+bfXn/QEMm/zZLK/83TCv/Oll//z9q + 6fg/aup1P2rqBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yvm9+2L/99pC7/IqNg/ybQ + +/8m0Pv1JtD7GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYmzarW2KuQsP8vNSj/LDMk/y87 + Jv84UlH/P2ni2j9q6jgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yvzti1 + L/83mC7/I6+J/ybQ+/8m0PumAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWHIl3 + i9EsMyT/LDMk/y44L/08YbWnP2rqEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADfti8H37Yv9qKrL/8hlC7/JLqv/ybQ+/0m0PtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHdtdhs9QTfBO0A07kJKUnI/auoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADfti8x37Yv/lSdLv8hlC7/JcXX/ybQ+9Um0PsDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEfIQCe3V6BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti9iwLAv/yaVLv8hlzj/Js71/ybQ+3AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti+TeaQu/yGULv8ioVr/JtD68CbQ + +xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2LwHXtS/DMZcu/yGU + Lv8jrIH/JtD7oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2 + LwyWqS/qIZQu/yGULv8kuKj/JtD7OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANW0LydSnS7/IZQu/yGUL/8lwMTOJtD7AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIClL1kklS7/IZQu/yGXOP8lx9xqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADidP5QhlC7/IZQu/yOcR/Am0PsUAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADefRX8hlC7/IZQu/y2c + QaEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKr + YQgxnD9zLZo6fFeuZhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA//////4PAAD/////+A8AAP// + ///ADwAA/////wAHAAD////4AAcAAP///+AABwAA////gAAHAAD///wAAAMAAP//8ADAAwAA//+AA4AD + AAD//gAPgAEAAP/4AH8AAQAA/8AD/gABAAD/AA/gAAAAAPwAAAAAAAAA4AAAAAABAACAAAAAAAEAAIAA + AAA4AQAAgAAA4GADAACAB//AwAMAAMB//8GABwAA4D//gAAHAADwH/8AAA8AAPgP/gAADwAA/Af+AAAP + AAD+A/wAIB8AAP8A+ADgHwAA/4BwAcA/AAD/4DADwD8AAP/wAA/APwAA//gAH8B/AAD//AA/wH8AAP/+ + AP/A/wAA//8B/4D/AAD//4P/gP8AAP//z/+B/wAA/////4H/AAD/////A/8AAP////8D/wAA/////wP/ + AAD/////B/8AAP////8H/wAA/////w//AAD/////D/8AAP///////wAA////////AAAoAAAAQAAAAIAA + AAABABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjV0YiVQKi1YLAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2n4Ve + ekIBekIBekIBh1IIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2 + t7a2t7a2squWjWEUekIBekIBekIBiVQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAt7a2t7a2t7a2t7a2trOupIs9i14LekIBekIBekIBpG8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7W1qZddn4EhjF0HfEUBhUgBnloDz5kb37YvAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2r6SCoIMkoX8eomwIqGMErF8Cv3wI1qUj + 37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2tK+grpAzw58pzp0gw4IJ + unQGuXMGw4IJ268q37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2uLaz0LBH + 3bQv37Yv0Joaw4IJyY0SxIMKxocN3rQu37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2AAAAAAAA37Yv37Yv37UvypATx4kO3LAryY4Ry5AT37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2AAAAAAAAAAAAAAAA37Yv37Yv37Yv3rQtxogO2Kgl37Yv0Zwc0Joa37Yv37Yv37YvAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv27Aq0Jsb37Yv37Yv2asn1aMh37Yv + 37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37Yv264p3rQu37Yv + 37Yv3rUu268q37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv + 37Yv37Yv37Yv37Yv37Yv37Yv37Yv37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv + 37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37Yv37Yv37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37Yv37Yv + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37Yv37YvAAAAAAAA37Yv37Yv37Yv37YvAAAAAAAA37Yv + 37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37YvAAAAAAAAAAAA3rUv2rIu1q8t + 0qwuAAAAAAAAv6hesJMnYWclOlIjdXcnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA168t1a4t0KosyqUqxKAqw61ot7a2t7a2 + r51kp4gjpYYjo4Ujo4gvtbGpt7a2l5iXLEAjBiweBiweBy0eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7WzqZNLpIUjoIIioIIioIIi + ppBKtrSwt7a2t7a2qJNToIIioIIioIIipIw+tbS1gIywMlCkCjAzBiweBiweBiweHkc/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAA + AAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2rqF6oIIi + oIIioIIioIIioocvtK+it7a2t7a2t7W0o4k2oIIioIIioIIino5aXXGsLUynHkamBjRgBiweBiweBi0g + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2tLOzsrGxrq2tq6qqp6amoqGhnJubnp2dq6qq + tLOzt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2sqyYoYUroIIioIIioIIioIIjr6WFt7a2t7a2t7a2tLCkoYUqoIIioIIigm8hPE5uLUynLk6rD0Os + BkGrBzt4CEBgF4SdAAAAAAAAAAAAAAAAAAAAg3SGkImRmZeYlZSUkI+Pi4qKiYiIh4aGhYSEg4KChIOD + j46OpKOjs7Kyt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2trOtpY1CoIIioIIioIIioIIiqZZct7a1t7a2t7a2t7a2t6uHuZcouZgoeXEoN0gn + OV2zPGbgMWPiClXiCVXkDmzqILf3Js/7AAAAAAAAAAAAAAAAcmB2aVZtaVZtcmV0goCBg4KCg4KCg4KC + g4KChoWFmJeXrKurtrW1t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2uKNitpUnvJkowp4pyKMqyqUsAAAAAAAAAAAAAAAAAAAAAAAA + zasvamwsOEwrN042PmfYP2rqH17oCVjmFIXuJMf6JtD7AAAAAAAAAAAAAAAAAAAAaVZtaVZtaVZtaVZt + cGJzgX+Bg4KCjIuLoJ+fs7Kyt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37YvAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3rYvV54uIZQuIZQuJcPP + JtD7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrEv + KZUuIZQuIZUxJs70JtD7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37Yve6QuIZQuIZQuIp9SJtD6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA17UvM5cuIZQuIZQuI6p6JtD7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnaovIZQuIZQuIZQuJLWgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV54uIZQuIZQuIZUwJcDDAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5UuIZQu + IZQuIZc5JcXXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAARZ46IZQuIZQuIZQuIpxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAM5xAIZQuIZQuIZQuJ6BTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOaBHIZQuIZQuIpQvAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJ9GI5UwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////////H/////////wP/// + /////4A////////+AD////////gAH///////wAAf//////8AAB//////+AAAD//////gAYAP/////4AP + AA/////8AD4AD/////AB/AAH////gAf8AAf///4AP/ggh///+AD/8CCD///AA//gYYP//wAf/+Dhg//4 + AH//wAAD/+AD//gAAAH/AA/AAAAAA/wAAAAAAAAD4AAAAAAAAAPAAAAAAA/AB8AAAAP8H4AHwAAP//g/ + AA/AP///8D4AD+A////wfAYP+B///+DwBB/8D///wOAEH/4H//+BwAQ//wP//4MAAD//gf//BgMAP//A + f/4EBwB//+A//gAOAH//8B/8AD4A///4D/gAfgD///wH8AD+Af///gPwA/4B////AeAH/AH////AwA/8 + A////+AAP/wD////8AB//Af////4Af/8B/////wD//gH/////gf/+A//////H//4D/////////gf//// + ////+B/////////4H/////////A/////////8D/////////wf/////////B/////////8H/////////g + /////////+D/////////4f/////////z//////////////////////////////////8oAAAAQAAAAIAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKpUACs4ckEMObMAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqpcwjV0YpYlU + CvSLVgvSmWcTMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Dre2 + tli3trbBn4Ve/HpCAf96QgH/ekIB/4dSCM3FnzkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2 + tgK3trYlt7a2g7e2tt63trb9squW/41hFP96QgH/ekIB/3pCAf+JVAn4yZ0oIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAt7a2Bre2tkW3trast7a28re2tv+3trb/trOu/6SLPf+LXgv/ekIB/3pCAf96QgH/pG8P/9+2 + L1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC3trYVt7a2b7e2ttW3trb+t7a2/7e2tv+3trb/t7W1/6mXXf+fgSH/jF0H/3xF + Af+FSAH/nloD/8+ZG//fti+iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt7a2BLe2tjm3trabt7a277e2tv+3trb/t7a2/7e2tv+3trb/t7a2/6+k + gv+ggyT/oX8e/6JsCP+oYwT/rF8C/798CP/WpSP/37Yv4N+2LwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYSt7a2Xre2tsO3trb4t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7SvoP+ukDP/w58p/86dIP/Dggn/unQG/7lzBv/Dggn/268q/9+2L/vfti88AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Are2tiS3traJt7a24re2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2+Li2s7TQsEfr3bQv/9+2L//Qmhr/w4IJ/8mNEv/Egwr/xocN/960 + Lv/fti//37YvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYHt7a2T7e2trO3trb6t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trbgt7a2g7m2sSLfti9937Yv/9+2L//ftS//ypAT/8eJ + Dv/csCv/yY4R/8uQE//fti//37Yv/9+2L8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2tiG3trZ2t7a22be2 + tv23trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a297e2try3trZat7a2DAAAAADfti8/37Yv9t+2 + L//fti//3rQt/8aIDv/YqCX/37Yv/9GcHP/Qmhr/37Yv/9+2L//fti/637YvHAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYHt7a2Obe2 + tqS3trbtt7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv63trbqt7a2lre2tjO3trYEAAAAAAAA + AADfti8W37Yv1d+2L//fti//37Yv/9uwKv/Qmxv/37Yv/9+2L//Zqyf/1aMh/9+2L//fti//37Yv/9+2 + L2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2 + tgy3trZlt7a2xre2tv23trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2ttK3trZqt7a2FgAA + AAAAAAAAAAAAAAAAAADfti8C37Yvo9+2L//fti//37Yv/9+2L//brin23rQu/9+2L//fti//3rUu/duv + KvDfti//37Yv/9+2L//fti+p37YvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC3trYBt7a2L7e2to+3trbut7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trbyt7a2pre2 + tkC3trYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvYt+2L/zfti//37Yv/9+2L//fti/p37YvrN+2 + L//fti//37Yv/9+2L/Dfti+m37Yv/9+2L//fti//37Yv6d+2Lw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALe2tg63trZSt7a2u7e2tva3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/re2 + ttq3trZ8t7a2ILe2tgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvKN+2L+/fti//37Yv/9+2 + L//fti/837YvYN+2L7Xfti//37Yv/9+2L//fti/G37YvV9+2L/7fti//37Yv/9+2L//fti9DAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC3trYCt7a2H7e2tn63trbZt7a2/re2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb3t7a2ure2tlO3trYNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvDN+2 + L8Lfti//37Yv/9+2L//fti//37Yvod+2LxHfti/b37Yv/9+2L//fti//37YvlN+2Lxbfti/037Yv/9+2 + L//fti//37YvjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2tgK3trZBt7a2pre2tvS3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tuy3traPt7a2Lre2tgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN+2L4Xfti//37Yv/9+2L//fti//37Yv3d+2LxDfti8i37Yv9d+2L//fti//37Yv/9+2 + L2QAAAAA37Yvv9+2L//fti//37Yv/9+2L9Dfti8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Fre2tmy3trbUt7a2/re2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb9t7a2xbe2tmO3trYNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2L0rfti/337Yv/9+2L//fti//37Yv9N+2Lz4AAAAA37YvS961 + L//asi7/1q8t/9KsLv3Esndyt7a2X7+oXrqwkyf/YWcl/zpSI/91dyf4sp0sKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2tgS3trY0t7a2lre2tum3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tu23traht7a2O7e2tgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2CMasViTXry3f1a4t/9CqLP/KpSr/xKAq/8Ot + aNu3traft7a2tq+dZN+niCP/pYYj/6OFI/+jiC//tbGp/7e2tv+XmJf/LEAj/wYsHv8GLB7/By0e/yhO + On8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Dbe2tli3tra/t7a2+Le2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb8t7a22re2tnW3trYeAAAAAAAAAAAAAAAAAAAAALe2 + tgK3trYFt7a2Cbe2tg23trYbt7a2Nbe2tky3trZlt7a2fLe2tpS3tratt7a2xLe1s9Spk0vspIUj/6CC + Iv+ggiL/oIIi/6aQSv+2tLD/t7a2/7e2tv+ok1P/oIIi/6CCIv+ggiL/pIw+/7W0tf+AjLD/MlCk/wow + M/8GLB7/Biwe/wYsHv8eRz+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYjt7a2hLe2 + tuG3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tvu3trawt7a2Ure2tiC3trYvt7a2Rbe2 + tlq3trZ0t7a2i7e2tqK3tra6t7a2zbe2tuO3trb2t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+uoXr/oIIi/6CCIv+ggiL/oIIi/6KHL/+0r6L/t7a2/7e2tv+3tbT/o4k2/6CCIv+ggiL/oIIi/56O + Wv9dcaz/LUyn/x5Gpv8GNGD/Biwe/wYsHv8GLSD/G0xIcgAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Cbe2 + tkm3travt7a297e2tv+0s7P/srGx/66trf+rqqr/p6am/6Khof+cm5v/np2d/6uqqv60s7Pht7a25Le2 + tvW3trb4t7a2+7e2tv23trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+yrJj/oYUr/6CCIv+ggiL/oIIi/6CCI/+vpYX/t7a2/7e2tv+3trb/tLCk/6GF + Kv+ggiL/oIIi/4JvIf88Tm7/LUyn/y5Oq/8PQ6z/BkGr/wc7eP8IQGD/F4Sd4ym42xYAAAAAAAAAAAAA + AACTg5Ygg3SGgJCJkdOZl5j7lZSU/5CPj/+Lior/iYiI/4eGhv+FhIT/g4KC/4SDg/+Pjo7/pKOj/7Oy + sv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+2s63/pY1C/6CCIv+ggiL/oIIi/6CCIv+pllz6t7a18be2 + tui3trbgt7a2zberh825lyj/uZgo/3lxKP83SCf/OV2z/zxm4P8xY+L/ClXi/wlV5P8ObOr/ILf3/ybP + +5EAAAAAAAAAAAAAAACLeo4acmB23mlWbf9pVm3/cmV0/4KAgf+DgoL/g4KC/4OCgv+DgoL/hoWF/5iX + l/+sq6v/trW1/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/re2tvy3trb6t7a2+Le2tuy3trbWuKNi9baVJ/+8mSj/wp4p/8ij + Kv/KpSzUtaqGN7e2tiO3trYTt7a2BAAAAADfti90zasv/2psLP84TCv/N042/z5n2P8/aur/H17o/wlY + 5v8Uhe7/JMf6/ybQ+/wm0PsvAAAAAAAAAAAAAAAAjHqPcWlWbf9pVm3/aVZt/2lWbf9wYnP/gX+B/4OC + gv+Mi4v/oJ+f/7Oysv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb9t7a27Le2tta3trbDt7a2rre2tpa3trZ+t7a2Zre2tk+3trY4t7a2I7e2tg4AAAAA37YvTt+2 + L/zfti//37Yv/9+2L//fti/y37YvNwAAAAAAAAAAAAAAAAAAAAAAAAAAlIczp0pYK/83TCv/N0wr/zhR + Tv8/aeT/O2nq/w9g6P8cpPT/Js/7/ybQ+/8m0Pu9JtD7BAAAAAAAAAAAAAAAAI59kVVrWG/+aVZt/2lW + bf9pVm3/a1hv/31sgP+moqX/tbS0/7e2tv+3trb/t7a2/7e2tve3trbot7a227e2ts63tra3t7a2obe2 + toe3trZvt7a2Wbe2tkG3trYmt7a2Ebe2tgy3trYHt7a2AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37YvH9+2L+Pfti//37Yv/9+2L//fti/+37YvcN+2LwEAAAAAAAAAAAAAAAA/auoMP2rqgzlR + SPs3TCv/N0wr/zdMK/86V27/P2rq/y567PchvPj/JtD7/ybQ+/8m0Pv+JtD7WQAAAAAAAAAAAAAAAAAA + AACjk6UJfmqBoHFddvx0X3n/hm+M/5p/of+mia3/s5q5/ruyvZu3trZht7a2Sre2tjG3trYit7a2F7e2 + tg23trYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA37YvCN+2L7Lfti//37Yv/9+2L//fti//37Yvst+2LwcAAAAAAAAAAAAA + AAA/auonP2rqvD9p4f43TC7/N0wr/zdMK/83TCv/O1yQ+D5v65YnyfrTJtD7/ybQ+/8m0Pv/JtD76CbQ + +wsAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1gPCocuAyafS/c2q1v/Nqtb/zarW/82q1v/NqtbXzarWKwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2L3Lfti/937Yv/9+2L//fti//37Yv5t+2 + LxwAAAAAAAAAAD9q6gE/aupSP2rq5z9q6v89ZMH/N0wr/zdMK/83TCv/RFQr/2Nxbmonzfs8JtD7+ybQ + +/8m0Pv/JtD7/ybQ+40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1m7Nqtb4zarW/82q + 1v/Nqtb/zarW/82q1ubNqtY2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lznfti/z37Yv/9+2 + L//fti//37Yv+N+2L00AAAAAAAAAAD9q6g4/auqSP2rq/z9q6v8/aur/PF2Z/zdMK/83TCv/ZGgs/8uq + L/7fti8SJtD7oCbQ+/8m0Pv/JtD7/ybQ+/Qm0PstAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADNqtYCzarWXc2q1vTNqtb/zarW/82q1v/Nqtb/zarW682q1kMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2 + Lw3fti/W37Yv/9+2L//fti//37Yv/9+2L43fti8CAAAAAD9q6i8/aurKP2rq/j9q6v8/aur/P2rq/zpY + d/89UCv/jIIt/9myL//fti/cQMzeHibQ++sm0Pv/JtD7/ybQ+/8m0Pu6JtD7AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1gHNqtZNzarW8s2q1v/Nqtb/zarW/82q1v/NqtbwzarWUM2q + 1gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN+2LwTfti+Y37Yv/9+2L//fti//37Yv/9+2L8nfti8PP2rqBD9q6mI/aursP2rq/z9q + 6v8/aur/P2rq/z9p5v9NX1b/spou/961L//fti//37YvrifQ+m8m0Pv/JtD7/ybQ+/8m0Pv+JtD7VgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1kDNqtbtzarW/82q + 1v/Nqtb/zarW/82q1vfNqtZeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti9V37Yv+9+2L//fti//37Yv/9+2L/Lfti8sP2rqET9q + 6p4/aur+P2rq/z9q6v8/aur/P2rq/z9q6v9Lb9m+zaw299+2L//fti//37Yv/9y2MoEm0PvUJtD7/ybQ + +/8m0Pv/JtD73ybQ+xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzarWNM2q1t7Nqtb/zarW/82q1v/Nqtb/zarW/M2q1nHNqtYCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti8m37Yv6N+2L//fti//37Yv/9+2 + L/3fti9oQGrpOj9q6tU/aur/P2rq/z9q6v8/aur/P2rq/z9q6vI/aupv0rA+Mt+2L//fti//37Yv/9+2 + L/6LwouOJtD7/SbQ+/8m0Pv/JtD7/ybQ+4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYtzarW1c2q1v/Nqtb/zarW/82q1v/Nqtb6zarWg82q + 1gUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti8J37Yvvd+2 + L//fti//37Yv/9+2L//ZszawRGzkdD9q6vM/aur/P2rq/z9q6v8/aur/P2rq/z9q6tQ/auo5P2rqAd+2 + L2Lfti//37Yv/9+2L//etjD3RsvWxCbQ+/8m0Pv/JtD7/ybQ+/km0PsjAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1iDNqtbQzarW/82q + 1v/Nqtb/zarW/82q1vzNqtaRzarWBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37Yve9+2L/3fti//37Yv/9+2L//NrT/wVHTRxT9q6v4/aur/P2rq/z9q6v8/aur/P2rq/D9q + 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 + Lv8hlC7/JcPP/ybQ++wm0PsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADfti94wrEv/ymVLv8hlC7/IZUx/ybO9P8m0PukJtD7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA37Yvp3ukLv8hlC7/IZQu/yKfUv8m0Pr+JtD7PwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvCNe1L9Ezly7/IZQu/yGULv8jqnr/JtD7zibQ + +wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lxmdqi/0IZQu/yGU + Lv8hlC7/JLWg/ybQ+20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADUtC87V54u/yGULv8hlC7/IZUw/yXAw/Qm0PsRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAk6kvbyeVLv8hlC7/IZQu/yGXOf8lxdegAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWeOqshlC7/IZQu/yGULv8inEj6Js/4PQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAznEDQIZQu/yGU + Lv8hlC7/J6BT0CbQ+wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAOaBHnCGULv8hlC7/IpQv/zmhTHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKrYQ44n0aRI5UwtT2hS35suH0JAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////////////////8f/// + //////g/////////wB////////4AH///////+AAf///////gAB///////wAAD//////8AAAP/////+AA + AA//////gAAAD/////4AAgAH////8AAMAAf////AAHgAA////gAB+AAD///4AAfwAAP//8AAP+AAA/// + AAD/4ACB//wAB//AQAH/4AAf/wAAAf+AAPAAAAAB/gAAAAAAAAHwAAAAAAAAAcAAAAAAAAADgAAAAAAA + gAOAAAAACA+AA4AAAA/wDgAHgAB//+AcAAfAH///4DAAD/AP///AYAAP8Af//4BAAA/4Af//AAAAH/4B + //8AAAAf/wB//gAAAD//gD/8AAAAP//AH/wABgA//+AP+AAOAH//8AfwADwAf//4A+AAfAD///wB4AD8 + AP///gDAA/wB////AAAH/AH///+AAA/4Af///+AAP/gD////8AB/+AP////4AP/4A/////wD//AH//// + /gf/8Af/////H//wD/////////AP////////8A/////////wH////////+Af////////4D/////////g + P////////+B/////////4H/////////gf////////+D/////////4P////////////////////////// + ////////iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR42u29eZRk133f97n3 + bbV19To9K2YADDAABrsAgYsIQhRNygSphZJNndhiZFG2adOREx2dJMfSsSImIn0sKUpkRfQRHZ1IpkxZ + NBcllEGJMSlCYkhQIIhlsGOAGcz0LD29d+1vub/88bp7umd6qa6uXqrqfs9pDKan3qt6r97ve7/f3/3d + 3wULCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLC4uOgLK3wKLT + 8S8e+6hcKF9iqjbD+dIYAFppsm6WG4qHGc4M8W8/+Mf2WV8F2t4Ci07H67NnmaxNU4kqS78TEWITM1uf + 41LlMh/8o3eLvVNWAVh0ET702R+WWlznzflz649yC2rgrpGT/Luf/Jx95i0BWHQ6fuqz75Op+hRTtWkS + SZp40BU5L0efX+CrP/uEfe6tBbDoZEzXp6lE1aaCH0AQwiSkkTT4+f/7p60dsARg0an4n7/638lUfWqF + 528GkYmITcx8WLI30RKARadirHyxZfdaCss8M37K3kRLABadilpcR6R1FS9YB2AJwKJj0YjDLZ/jN/7s + EcsClgAsehVxPMW/e+wesQRgYdFhyHqZLZ9jLkxnBCwBWFh0GHw3j1Jbm8qfjxLiJLYEYB8ni05D5J1E + tljDdr4u1AxEz5wQSwAWFh2EP/jALyuji6BatwIToVBN7L107S2w6ESIsw9QENdbOr6aQN3Q8yRgFYBF + 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 + GBgsBv8PNAlKsBafvBgAAAAASUVORK5CYII= + + \ No newline at end of file diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs index ea45d68e..98ebb389 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs @@ -28,6 +28,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NeuropixelsV1eHeadstageDialog)); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPageNeuropixelsV1e = new System.Windows.Forms.TabPage(); this.panelNeuropixelsV1e = new System.Windows.Forms.Panel(); @@ -54,20 +55,20 @@ private void InitializeComponent() this.tabControl1.Controls.Add(this.tabPageBno055); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabControl1.Margin = new System.Windows.Forms.Padding(2); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(863, 466); + this.tabControl1.Size = new System.Drawing.Size(1034, 603); this.tabControl1.TabIndex = 0; // // tabPageNeuropixelsV1e // this.tabPageNeuropixelsV1e.Controls.Add(this.panelNeuropixelsV1e); this.tabPageNeuropixelsV1e.Location = new System.Drawing.Point(4, 22); - this.tabPageNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2); this.tabPageNeuropixelsV1e.Name = "tabPageNeuropixelsV1e"; - this.tabPageNeuropixelsV1e.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.tabPageNeuropixelsV1e.Size = new System.Drawing.Size(855, 440); + this.tabPageNeuropixelsV1e.Padding = new System.Windows.Forms.Padding(2); + this.tabPageNeuropixelsV1e.Size = new System.Drawing.Size(1026, 577); this.tabPageNeuropixelsV1e.TabIndex = 0; this.tabPageNeuropixelsV1e.Text = "NeuropixelsV1e"; this.tabPageNeuropixelsV1e.UseVisualStyleBackColor = true; @@ -76,19 +77,19 @@ private void InitializeComponent() // this.panelNeuropixelsV1e.Dock = System.Windows.Forms.DockStyle.Fill; this.panelNeuropixelsV1e.Location = new System.Drawing.Point(2, 2); - this.panelNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panelNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2); this.panelNeuropixelsV1e.Name = "panelNeuropixelsV1e"; - this.panelNeuropixelsV1e.Size = new System.Drawing.Size(851, 436); + this.panelNeuropixelsV1e.Size = new System.Drawing.Size(1022, 573); this.panelNeuropixelsV1e.TabIndex = 0; // // tabPageBno055 // this.tabPageBno055.Controls.Add(this.panelBno055); this.tabPageBno055.Location = new System.Drawing.Point(4, 22); - this.tabPageBno055.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.tabPageBno055.Margin = new System.Windows.Forms.Padding(2); this.tabPageBno055.Name = "tabPageBno055"; - this.tabPageBno055.Padding = new System.Windows.Forms.Padding(2, 2, 2, 2); - this.tabPageBno055.Size = new System.Drawing.Size(855, 443); + this.tabPageBno055.Padding = new System.Windows.Forms.Padding(2); + this.tabPageBno055.Size = new System.Drawing.Size(1026, 577); this.tabPageBno055.TabIndex = 1; this.tabPageBno055.Text = "Bno055"; this.tabPageBno055.UseVisualStyleBackColor = true; @@ -97,17 +98,18 @@ private void InitializeComponent() // this.panelBno055.Dock = System.Windows.Forms.DockStyle.Fill; this.panelBno055.Location = new System.Drawing.Point(2, 2); - this.panelBno055.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.panelBno055.Margin = new System.Windows.Forms.Padding(2); this.panelBno055.Name = "panelBno055"; - this.panelBno055.Size = new System.Drawing.Size(851, 439); + this.panelBno055.Size = new System.Drawing.Size(1022, 573); this.panelBno055.TabIndex = 0; // // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.IsSplitterFixed = true; this.splitContainer1.Location = new System.Drawing.Point(0, 24); - this.splitContainer1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.splitContainer1.Margin = new System.Windows.Forms.Padding(2); this.splitContainer1.Name = "splitContainer1"; this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; // @@ -119,8 +121,8 @@ private void InitializeComponent() // this.splitContainer1.Panel2.Controls.Add(this.buttonCancel); this.splitContainer1.Panel2.Controls.Add(this.buttonOK); - this.splitContainer1.Size = new System.Drawing.Size(863, 503); - this.splitContainer1.SplitterDistance = 466; + this.splitContainer1.Size = new System.Drawing.Size(1034, 637); + this.splitContainer1.SplitterDistance = 603; this.splitContainer1.SplitterWidth = 3; this.splitContainer1.TabIndex = 1; // @@ -128,8 +130,8 @@ private void InitializeComponent() // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(747, 5); - this.buttonCancel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.buttonCancel.Location = new System.Drawing.Point(918, 2); + this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(108, 26); this.buttonCancel.TabIndex = 6; @@ -140,8 +142,8 @@ private void InitializeComponent() // this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOK.Location = new System.Drawing.Point(625, 5); - this.buttonOK.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.buttonOK.Location = new System.Drawing.Point(796, 2); + this.buttonOK.Margin = new System.Windows.Forms.Padding(2); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(108, 26); this.buttonOK.TabIndex = 5; @@ -156,7 +158,7 @@ private void InitializeComponent() this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1); - this.menuStrip1.Size = new System.Drawing.Size(863, 24); + this.menuStrip1.Size = new System.Drawing.Size(1034, 24); this.menuStrip1.TabIndex = 2; this.menuStrip1.Text = "menuStrip1"; // @@ -170,12 +172,13 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(863, 527); + this.ClientSize = new System.Drawing.Size(1034, 661); this.Controls.Add(this.splitContainer1); this.Controls.Add(this.menuStrip1); this.DoubleBuffered = true; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Margin = new System.Windows.Forms.Padding(2); this.Name = "NeuropixelsV1eHeadstageDialog"; this.Text = "NeuropixelsV1eHeadstageDialog"; this.tabControl1.ResumeLayout(false); diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx index d5494e30..88a9078e 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.resx @@ -120,4 +120,1659 @@ 17, 17 + + + + AAABAA4AEBAQAAEABAAoAQAA5gAAABAQAAABAAgAaAUAAA4CAAAQEAAAAQAgAGgEAAB2BwAAICAQAAEA + BADoAgAA3gsAACAgAAABAAgAqAgAAMYOAAAgIAAAAQAgAKgQAABuFwAAMDAQAAEABABoBgAAFigAADAw + AAABAAgAqA4AAH4uAAAwMAAAAQAYAKgcAAAmPQAAMDAAAAEAIACoJQAAzlkAAEBAAAABABgAKDIAAHZ/ + AABAQAAAAQAgAChCAACesQAAAAAAAAEAGABpMQAAxvMAAAAAAAABACAAZ10AAC8lAQAoAAAAEAAAACAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAgAAAgICAAACAgADAwMAA//8AAAD/ + /wAAAP8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUiAAAAAAAFU5YAAA + AAVVADYgAAAFVQAGYlAAVTUAVTUjMAM1VVVTIDOABVAAAAYDRHAAVQAAYzhlAAAFUAY4AFcAAABVA0AA + NwAAAAUDAAZAAAAAAAAAA0AAAAAAAAACAAAAAAAAAAEAAAAAAAAAAAAA//8AAP/xAAD/wQAA/jEAAPjh + AADDAAAAgBEAAJ+hAADPAwAA5jMAAPJzAAD45wAA/+cAAP/vAAD/7wAA//8AACgAAAAQAAAAIAAAAAEA + CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5YzAEWaLgCFpi8AJLioAL2exQA9QTAAO12VANK0 + LwAws5AAzarWAGZsPgA+Z9UAdLRpACbQ+wDdtS8Ak41jAEBr6QDAtkIA37YvAKmdbgA/auoAR27gANKu + MgA8zeMAu5vDAMiq0ABLXUwATaKmAHpvfACWlJUAqqmpALe2tgDGr2QAxKAqAHt6RQA+XowAHJXwALW0 + tACysbEAtLOzALe1swCrjzcAsp5eAK2ecQCQgU8ALk93AA09OADctDEAzqw0AN61LgDbrikA3bMsAMWs + XgC/gxAA1qYjALazrQCMYSEAnGUNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADg5 + OgAAAAAAAAAAAAAAICA1NjcAAAAAAAAAACAgIAAAMjM0AAAAAAAAICAgAAAAExMwMQAAACYnKCAAACAp + KissLS4vAB0eHyAgICAgISIAIyQlAAAZGgAAAAAAABMAFRscDgAAAAoKAAAAABMUFRYXGAAAAAAACgoA + AA8QEQAAEg4AAAAAAAAKCgALDAAAAA0OAAAAAAAAAAUGBwAAAAgJAAAAAAAAAAAAAAAAAAADBAAAAAAA + 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 + ABMAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////// + //////+H///+B///+AP//8AD//8HA//4HgP/4HwB/wP8ifwP+AHwAAABgAABAYAH5wOH/8YD4/+MB/H/ + kAf4/wEH/H4DD/48Dg//HB4f/4h+H//A/h//4f4///f+P////H////x////8f////P////z///////// + //8oAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGULgAmmTwAIpQuACGX + NwBNnC4AIZQvACW/wACPqC8AJLmsANS0LwAxly4AI6+JAD5CNwB1oy4AIqNhACbQ+wCchaAALDMkAC02 + KQA8X6cAwbEvACOZPgAmz/cAzarWAMmn0QBmWUwAM0MoADhQRQA+aN0A37YvAFKdLgAlyN8Ano0tAEFS + KwA6V3AAP2rpAJ+qLwAkvLcAxqYuAFliLAA8X6QAP2rqANm1LwA1tJAA2bIvAIF8OAA/Z9AAfLVpAKyb + VgBDbOUAxbZAACbQ+gDCqFEAPszgAEFr5gCrlzoAf8OZADpUWgCAei0AzLE5AIhxjgCkiKsAt5e/AMKn + yQA6WX8AN0wrAEFXUAAsuPcAaVZtAHZpeQCbmZoAsK+vALe2tgBWaGgAPE8rADpt6QAcpPMAdGJ3AIB2 + ggCKiYkAhoWFAIWEhACTkpIAqKenALa1tQCynl4AsI8lALSSJgCxp4oAwLKGAKqRKwBIVSwAPWXVABlb + 5AAUg+0AJMf5ALOysgCrqqoArq2tALazrwCkizoAoIIiAKSMPgC2tLEAoYQpAJl9IgBZZocAIkmpAAY3 + aAALRk0Au5goALaVJwC4pGMAp44+AKKEIgCsnnMAgIqoABAyJAAGLB4A3LMuANayOgC0mSoAmIsqAN60 + LQDftS8A3rQuANOgHwDarSgA2aomANK0VADetS8AyY0RAMyTFgCwlUEAtYMTALJqBQDNlRcAs62dAJdy + HAB9RAEAo2kMAKSQawB6QgEAgUoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAASY6PkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASUmKi4yNAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAASUlJaIaHiIkeAAAAAAAAAAAAAAAAAAAAAAAAAABJSUlJSUmCg4SFfx4AAAAA + AAAAAAAAAAAAAAAAAABJSUlJSQAAAB58f4CBHgAAAAAAAAAAAAAAAAAAAElJSUlJSQAAAAAeHnx9Hn4e + AAAAAAAAAAAAAAAAAElJSUlJSQAAAAAAHh4eHh4eHh4eAAAAAAAAAAAASUlJSUlJAAAAAAAAAAAeHgAe + eHkAensAAAAAAAAASUlJSUlJAAAAAAAAAAAAb3BxSXJzdHV2dwAAAAAAVWFIYmNVSUlJSUlJSUlJZGVm + Z2hoaWprbG1uAABOT1BRUlNUVUlJSUlJSUlJSUlWV1hZAFpbXF1eX2AAAEVFRkdISUlJSUlJSQAAAAAA + AB4eAAAASkscTE0QAAAAPT4/QAAAAAAAAAAAAAAAAAAeHh4AACpBQkNEEBAAAAAAABgYGAAAAAAAAAAA + AAAAHh4eAAAqKjo7PBAQAAAAAAAAABgYGAAAAAAAAAAAAAAeHgAqKio3OB45EBAAAAAAAAAAABgYGAAA + AAAAAAAAHh41KioqKgAeHjYQEAAAAAAAAAAAABgYGAAAAAAAAB4eMTIqKioAAB4zNBAAAAAAAAAAAAAA + ABgYGAAAAAAeLS4vKioAAAAeHjAQEAAAAAAAAAAAAAAAABgYGAAAACcoKSoqAAAAAB4rLBAAAAAAAAAA + AAAAAAAAABgYGAAhIiMkAAAAAAAAHiUmEAAAAAAAAAAAAAAAAAAAABgZGhscHQAAAAAAAAAeHyAQAAAA + AAAAAAAAAAAAAAAAABESExQAAAAAAAAAABUWFwAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAADg8Q + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoLDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + CAEJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAMEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + /4f///4H///4A///wAP//wcD//geA//gfAH/A/yJ/A/4AfAAAAGAAAEBgAfnA4f/xgPj/4wH8f+QB/j/ + AQf8fgMP/jwOD/8cHh//iH4f/8D+H//h/j//9/4////8f////H////x////8/////P///////////ygA + AAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsqqXDIxaEWuPWw1DAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AADwf//DAI8AAPg//4YADwAA/B//DBAfAAD+D/8AMB8AAP8H/gBwPwAA/8P8AeA/AAD/4fgD4D8AAP/w + eAfgfwAA//gwH+B/AAD//AA/4P8AAP/+AP/A/wAA//8B/8D/AAD//4P/wf8AAP//z//B/wAA/////8P/ + AAD/////g/8AAP////+D/wAA/////4f/AAD/////h/8AAP////+P/wAA/////w//AAD/////j/8AAP// + /////wAA////////AAD///////8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAIZQuAC2cQQA4nT8AI5xHACSVLgAhlzgAUp0uACGULwAlwMQAlqkvACS4qADXtS8AMZcuACOs + gQAm0PsA37YvAHmkLgAioVoAJtD6AMCwLwAmlS4AJs71AD1BNwA7QDQAVJ0uACXF1wCJd4sALDMkAC44 + LwA8YbUAoqsvACS6rwDNqtYAq5CwAC81KAAvOyYAOFJRAD9p4gDYtS8AN5guACOviQCbfXkAQEMmADZL + KwA3TCsAOll/AD9q6QB9pC4AIqNgAMypzQDHpS8AaGssADhMKwA3TC0APGGyAD9q6gDGsi8AJptCACbN + 8gDbtC8AkoYtADtPKwA4T0AAPmfWAFieMAAlx9wAu58uAFBbLAA5VWIAP2roAKWsLwAlvLcA0q4vAHFx + LQA8XZUA2bUvAD61jwDetS8Am4w1AEVpxACCtmkAwKZJAEpv3QDItj0AJ9D5ANKwPgBAaukA3rYvAELM + 3ACFw5IAP2rmAHV3SADUry8A2bc2ADpWaABTXiwAvaAuADtbjQA9UCsAioEvAIBqhQCKcpAAoISnAK+R + tgC7ocEAPWGxADhNLQA+ZtMAKcP5AHdlewBpVm0AeWp8AKGeoAC0s7MAt7a2ADlOLQA9YrkANHLrAB+y + 9gB2ZHoAcmV0AIKBgQCDgoIAh4aGAJqZmQCura0AyrFhANCpLADUrS0A2bEuANy0LgCymS4ATVorADtc + kgA+auoAElznABiU8QAlzfsAeWh8AIh+iQCRkJAAjYyMAImIiACGhYUAhYSEAISDgwCmpaUAtbS0ALe1 + tACnkU0AoYMiAKKEIgCkhSMArqB3AMCjRQC4mCkAXmEoADdSaQA9ZuIAJl/kAAlV5AARdusAIsH4ALGw + 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 + AAAAAAAAAAAAAAAAAAAAAAAAISEhISEAAAAAEENERUY4ODgAAAAAAAAQEEdIDw8AAAAAAAAAAAAAAAAA + AAAAAAAAACEhISEhAAA8PT4/QDg4AAAAAAAAAAAQEEFCDw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAhISEh + MjM0NTY3ODgAAAAAAAAAAAAQOTo7DwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAISEhKissLS4vAAAAAAAA + AAAAABAQMDEPDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEiIxwkJSYAAAAAAAAAAAAAABAnKCkPDwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbHBwdHgAAAAAAAAAAAAAAABAfASAPAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAFxgAAAAAAAAAAAAAAAAAABAZARoPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAABQVBhYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAEBEBEhMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADA0BDg8AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgEBCwAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwEICQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAABQEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAADAQEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQECAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//////nwAA//////4f + AAD/////8A8AAP/////ADwAA/////gAPAAD////4AAcAAP///+AQBwAA////AHAHAAD///wD4AcAAP// + 4A/AAwAA//+AP8AjAAD//AH/hCMAAP/wB/8MIQAA/8A//gABAAD+AP4AAAEAAPgAAAAAAQAAwAAAAAAD + AACAAAAQeAMAAIAA//D4BwAAwf//4eAHAADg///DwIcAAPB//8MAjwAA+D//hgAPAAD8H/8MEB8AAP4P + /wAwHwAA/wf+AHA/AAD/w/wB4D8AAP/h+APgPwAA//B4B+B/AAD/+DAf4H8AAP/8AD/g/wAA//4A/8D/ + AAD//wH/wP8AAP//g//B/wAA///P/8H/AAD/////w/8AAP////+D/wAA/////4P/AAD/////h/8AAP// + //+H/wAA/////4//AAD/////D/8AAP////+P/wAA////////AAD///////8AAP///////wAAKAAAADAA + AABgAAAAAQAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpWC49bDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKdLiGULiGULyXAxAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACSVLiGULiGXOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAADidPyGULiGULiOcRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACGULiGULi2cQQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA//////// + AAD//////58AAP/////+HwAA//////APAAD/////wA8AAP////4ADwAA////+AAHAAD////gEAcAAP// + /wBwBwAA///8A+AHAAD//+APwAMAAP//gD/AIwAA//wB/4QjAAD/8Af/DCEAAP/AP/4AAQAA/gD+AAAB + AAD4AAAAAAEAAMAAAAAAAwAAgAAAEHgDAACAAP/w+AcAAMH//+HgBwAA4P//w8CHAADwf//DAI8AAPg/ + /4YADwAA/B//DBAfAAD+D/8AMB8AAP8H/gBwPwAA/8P8AeA/AAD/4fgD4D8AAP/weAfgfwAA//gwH+B/ + AAD//AA/4P8AAP/+AP/A/wAA//8B/8D/AAD//4P/wf8AAP//z//B/wAA/////8P/AAD/////g/8AAP// + //+D/wAA/////4f/AAD/////h/8AAP////+P/wAA/////w//AAD/////j/8AAP///////wAA//////// + AAD///////8AACgAAAAwAAAAYAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + ogYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYyt7a2mre2tu+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tvm3traqt7a2Q7e2tgO3trYIt7a2ILe2tji3trZPt7a2aLe2toC3traXt7a2sLe2tsm3trbat7a27Le2 + tvqwp4v/oIIj/6CCIv+ggiL/pY5D/7a0sf+3trb/r6WG/6CCIv+ggiL/oYUq/5udpv9EXqr/FD1//wYs + Hv8GLB7/DDQp7WSTmw0AAAAAAAAAAAAAAAC3trYNt7a2XLe2tsa3trb+tLOz/7GwsP+ura3/qaio/6Sj + o/+mpaX/srGx9Le2tsC3tra/t7a21be2tu+3trb+t7a2/re2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7Swpf+ihzH/oIIi/6CCIv+hhSv/tK+h/7e2tv+3trb/q5to/6CCIv+fgSL/bWU3/zJQ + p/8qTKr/CECp/wY5bf8JQ1b/GXyMigAAAAAAAAAAkoKVGXlofJOIfonkkZCQ/42MjP+JiIj/hoWF/4WE + hP+Eg4P/kZCQ/6alpf+1tLT/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7W0/6eRTf+hgyL/ooQi/6SFI/6uoHfgt7a2xLe2tq63traWwKNF4riY + Kf9eYSj/N1Jp/z1m4v8mX+T/CVXk/xF26/8iwfj5JtD7JgAAAAAAAAAAdmR6sWlWbf9pVm3/cmV0/4KB + gf+DgoL/h4aG/5qZmf+ura3/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb5t7a25be2ts23tra3t7a2n7e2toe3trZvyrFhudCpLP/UrS3/2bEu/9y0LqTfti8CAAAAAAAA + AAAAAAAAspku501aK/83TCv/O1yS/z5q6v8SXOf/GJTx/yXN+/8m0Pu4JtD7AgAAAAAAAAAAd2V7xmlW + bf9pVm3/aVZt/3lqfP+hnqD/tLOz/7e2tv+3trb+t7a287e2tua3trbYt7a2wLe2tqm3traQt7a2eLe2 + tmG3trZIt7a2Mbe2thi3trYGt7a2A7e2tgEAAAAAAAAAAAAAAADfti8z37Yv99+2L//fti//37Yv2d+2 + LxEAAAAAAAAAAD9q6gdBZbx+OU4t/jdMK/83TCv/PWK5/zRy6/ofsvb/JtD7/ybQ+/8m0PtPAAAAAAAA + AAAAAAAAhHGHNYBqheGKcpD/oISn/6+Rtv+7ocH1u7S8Zre2tjq3trYjt7a2Fbe2tgu3trYCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lw/fti/T37Yv/9+2 + L//fti/537YvOgAAAAAAAAAAP2rqHj9q6rg9YbH/N0wr/zdMK/84TS3/PmbTrinD+b4m0Pv/JtD7/ybQ + ++Mm0PsGAAAAAAAAAAAAAAAAAAAAAM2q1iHNqtbWzarW/82q1v/Nqtb/zarW0M2q1hsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2 + L5rfti//37Yv/9+2L//fti98AAAAAAAAAAA/aupKP2rq5j9q6v87W43/N0wr/z1QK/+KgS/dOMXhIibQ + +/Mm0Pv/JtD7/ybQ+4IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYZzarWyM2q1v/Nqtb/zarW/82q + 1tzNqtYmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37YvV9+2L/zfti//37Yv/9+2L7vfti8GP2rqCT9q6os/aur7P2rq/z9q6v86Vmj/U14s/72g + Lv/fti+vJtD7dybQ+/8m0Pv/JtD79ibQ+yMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWEc2q + 1r7Nqtb/zarW/82q1v/NqtbjzarWMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADfti8g37Yv69+2L//fti//37Yv6d+2LyE/auojP2rqxj9q6v8/aur/P2rq/z9q + 5v51d0j+1K8v/9+2L//ZtzaCJtD72ybQ+/8m0Pv/JtD7swAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAM2q1gnNqtauzarW/82q1v/Nqtb/zarW7M2q1j0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lwbfti+937Yv/9+2L//fti/+3rUxVD9q6lk/aurtP2rq/z9q + 6v8/aur/P2rq71t3yHbeti/737Yv/9+2L/+Fw5KWJtD7/ibQ+/8m0Pv/JtD7TAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYHzarWnM2q1v/Nqtb/zarW/82q1vHNqtZOAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2L37fti//37Yv/9+2L//SsD6lQGrpmz9q + 6vw/aur/P2rq/z9q6v8/aurLP2rqKd+2L0Pfti//37Yv/962L/pCzNzLJtD7/ybQ+/8m0PvaJtD7BwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWBM2q1o7Nqtb+zarW/82q + 1v/Nqtb0zarWWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvO9+2L/ffti//37Yv/8Cm + SfVKb93eP2rq/z9q6v8/aur/P2rq/T9q6pI/auoMAAAAAN+2L3Pfti//37Yv/8i2Pfgn0Pn5JtD7/ybQ + +/8m0Pt9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q + 1gHNqtZ9zarW/M2q1v/Nqtb/zarW+82q1mvNqtYBAAAAAAAAAAAAAAAAAAAAAAAAAADfti8S37Yv29+2 + L//etS//m4w1/0VpxP8/aur/P2rq/z9q6v8/aurrP2rqUQAAAAAAAAAAAAAAAN+2L6Xfti//37Yv/4K2 + af8m0Pv/JtD7/ybQ+/cm0PsdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADNqtYBzarWas2q1vvNqtb/zarW/82q1vzNqtZ8zarWAwAAAAAAAAAAAAAAAN+2 + LwLfti+j37Yv/9KuL/9xcS3/PF2V/z9q6v8/aur/P2rq/z9q6r8/auoiAAAAAAAAAAAAAAAA37YvAd+2 + L9Xfti//2bUv/z61j/8m0Pv/JtD7/ybQ+6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1lzNqtb4zarW/82q1v/Nqtb+zarWjs2q + 1gIAAAAAAAAAAN+2L1/fti/9u58u/1BbLP85VWL/P2ro/z9q6v8/aur8P2rqgz9q6ggAAAAAAAAAAAAA + AAAAAAAA37YvFd+2L/Hfti//pawv/yW8t/8m0Pv/JtD7/ibQ+0cAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtZKzarW8M2q + 1v/Nqtb/zarW/82q1p/NqtYI37YvJtu0L/GShi3/O08r/zhPQP8+Z9b/P2rq/z9q6uI/aupEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA37YvOd+2L//fti//WJ4w/yXH3P8m0Pv/JtD71ibQ+wcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzarWPs2q1urNqtb/zarW/82q1v/Mqc2wx6UvxmhrLP84TCv/N0wt/zxhsv8/aur+P2rqtD9q + 6hoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yva9+2L//Gsi//JptC/ybN8v8m0Pv/JtD7dQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1jPNqtbkzarW/82q1v+bfXn/QEMm/zZLK/83TCv/Oll//z9q + 6fg/aup1P2rqBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yvm9+2L/99pC7/IqNg/ybQ + +/8m0Pv1JtD7GQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYmzarW2KuQsP8vNSj/LDMk/y87 + Jv84UlH/P2ni2j9q6jgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yvzti1 + L/83mC7/I6+J/ybQ+/8m0PumAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzarWHIl3 + i9EsMyT/LDMk/y44L/08YbWnP2rqEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADfti8H37Yv9qKrL/8hlC7/JLqv/ybQ+/0m0PtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAHdtdhs9QTfBO0A07kJKUnI/auoDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADfti8x37Yv/lSdLv8hlC7/JcXX/ybQ+9Um0PsDAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEfIQCe3V6BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti9iwLAv/yaVLv8hlzj/Js71/ybQ+3AAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti+TeaQu/yGULv8ioVr/JtD68CbQ + +xgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2LwHXtS/DMZcu/yGU + Lv8jrIH/JtD7oQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2 + LwyWqS/qIZQu/yGULv8kuKj/JtD7OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAANW0LydSnS7/IZQu/yGUL/8lwMTOJtD7AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIClL1kklS7/IZQu/yGXOP8lx9xqAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADidP5QhlC7/IZQu/yOcR/Am0PsUAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADefRX8hlC7/IZQu/y2c + QaEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKr + YQgxnD9zLZo6fFeuZhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA//////4PAAD/////+A8AAP// + ///ADwAA/////wAHAAD////4AAcAAP///+AABwAA////gAAHAAD///wAAAMAAP//8ADAAwAA//+AA4AD + AAD//gAPgAEAAP/4AH8AAQAA/8AD/gABAAD/AA/gAAAAAPwAAAAAAAAA4AAAAAABAACAAAAAAAEAAIAA + AAA4AQAAgAAA4GADAACAB//AwAMAAMB//8GABwAA4D//gAAHAADwH/8AAA8AAPgP/gAADwAA/Af+AAAP + AAD+A/wAIB8AAP8A+ADgHwAA/4BwAcA/AAD/4DADwD8AAP/wAA/APwAA//gAH8B/AAD//AA/wH8AAP/+ + AP/A/wAA//8B/4D/AAD//4P/gP8AAP//z/+B/wAA/////4H/AAD/////A/8AAP////8D/wAA/////wP/ + AAD/////B/8AAP////8H/wAA/////w//AAD/////D/8AAP///////wAA////////AAAoAAAAQAAAAIAA + AAABABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAjV0YiVQKi1YLAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2n4Ve + ekIBekIBekIBh1IIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2 + t7a2t7a2squWjWEUekIBekIBekIBiVQJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAt7a2t7a2t7a2t7a2trOupIs9i14LekIBekIBekIBpG8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7W1qZddn4EhjF0HfEUBhUgBnloDz5kb37YvAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2r6SCoIMkoX8eomwIqGMErF8Cv3wI1qUj + 37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2tK+grpAzw58pzp0gw4IJ + unQGuXMGw4IJ268q37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2uLaz0LBH + 3bQv37Yv0Joaw4IJyY0SxIMKxocN3rQu37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2AAAAAAAA37Yv37Yv37UvypATx4kO3LAryY4Ry5AT37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2AAAAAAAAAAAAAAAA37Yv37Yv37Yv3rQtxogO2Kgl37Yv0Zwc0Joa37Yv37Yv37YvAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv27Aq0Jsb37Yv37Yv2asn1aMh37Yv + 37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37Yv264p3rQu37Yv + 37Yv3rUu268q37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv + 37Yv37Yv37Yv37Yv37Yv37Yv37Yv37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv + 37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37Yv37Yv37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37Yv37YvAAAA37Yv37Yv37Yv37Yv37Yv + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37Yv37YvAAAAAAAA37Yv37Yv37Yv37YvAAAAAAAA37Yv + 37Yv37Yv37Yv37YvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37YvAAAAAAAAAAAA3rUv2rIu1q8t + 0qwuAAAAAAAAv6hesJMnYWclOlIjdXcnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA168t1a4t0KosyqUqxKAqw61ot7a2t7a2 + r51kp4gjpYYjo4Ujo4gvtbGpt7a2l5iXLEAjBiweBiweBy0eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7WzqZNLpIUjoIIioIIioIIi + ppBKtrSwt7a2t7a2qJNToIIioIIioIIipIw+tbS1gIywMlCkCjAzBiweBiweBiweHkc/AAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2AAAAAAAA + AAAAAAAAAAAAAAAAt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2rqF6oIIi + oIIioIIioIIioocvtK+it7a2t7a2t7W0o4k2oIIioIIioIIino5aXXGsLUynHkamBjRgBiweBiweBi0g + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2t7a2t7a2tLOzsrGxrq2tq6qqp6amoqGhnJubnp2dq6qq + tLOzt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2sqyYoYUroIIioIIioIIioIIjr6WFt7a2t7a2t7a2tLCkoYUqoIIioIIigm8hPE5uLUynLk6rD0Os + BkGrBzt4CEBgF4SdAAAAAAAAAAAAAAAAAAAAg3SGkImRmZeYlZSUkI+Pi4qKiYiIh4aGhYSEg4KChIOD + j46OpKOjs7Kyt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2trOtpY1CoIIioIIioIIioIIiqZZct7a1t7a2t7a2t7a2t6uHuZcouZgoeXEoN0gn + OV2zPGbgMWPiClXiCVXkDmzqILf3Js/7AAAAAAAAAAAAAAAAcmB2aVZtaVZtcmV0goCBg4KCg4KCg4KC + g4KChoWFmJeXrKurtrW1t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2uKNitpUnvJkowp4pyKMqyqUsAAAAAAAAAAAAAAAAAAAAAAAA + zasvamwsOEwrN042PmfYP2rqH17oCVjmFIXuJMf6JtD7AAAAAAAAAAAAAAAAAAAAaVZtaVZtaVZtaVZt + cGJzgX+Bg4KCjIuLoJ+fs7Kyt7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2t7a2 + t7a2t7a2t7a2t7a2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37Yv37Yv37Yv37Yv37YvAAAAAAAAAAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3rYvV54uIZQuIZQuJcPP + JtD7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwrEv + KZUuIZQuIZUxJs70JtD7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37Yve6QuIZQuIZQuIp9SJtD6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA17UvM5cuIZQuIZQuI6p6JtD7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnaovIZQuIZQuIZQuJLWgAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV54uIZQuIZQuIZUwJcDDAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ5UuIZQu + IZQuIZc5JcXXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAARZ46IZQuIZQuIZQuIpxIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAM5xAIZQuIZQuIZQuJ6BTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOaBHIZQuIZQuIpQvAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJ9GI5UwAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/////////////////////////////////////////H/////////wP/// + /////4A////////+AD////////gAH///////wAAf//////8AAB//////+AAAD//////gAYAP/////4AP + AA/////8AD4AD/////AB/AAH////gAf8AAf///4AP/ggh///+AD/8CCD///AA//gYYP//wAf/+Dhg//4 + AH//wAAD/+AD//gAAAH/AA/AAAAAA/wAAAAAAAAD4AAAAAAAAAPAAAAAAA/AB8AAAAP8H4AHwAAP//g/ + AA/AP///8D4AD+A////wfAYP+B///+DwBB/8D///wOAEH/4H//+BwAQ//wP//4MAAD//gf//BgMAP//A + f/4EBwB//+A//gAOAH//8B/8AD4A///4D/gAfgD///wH8AD+Af///gPwA/4B////AeAH/AH////AwA/8 + A////+AAP/wD////8AB//Af////4Af/8B/////wD//gH/////gf/+A//////H//4D/////////gf//// + ////+B/////////4H/////////A/////////8D/////////wf/////////B/////////8H/////////g + /////////+D/////////4f/////////z//////////////////////////////////8oAAAAQAAAAIAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADKpUACs4ckEMObMAgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqpcwjV0YpYlU + CvSLVgvSmWcTMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Dre2 + tli3trbBn4Ve/HpCAf96QgH/ekIB/4dSCM3FnzkGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2 + tgK3trYlt7a2g7e2tt63trb9squW/41hFP96QgH/ekIB/3pCAf+JVAn4yZ0oIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAt7a2Bre2tkW3trast7a28re2tv+3trb/trOu/6SLPf+LXgv/ekIB/3pCAf96QgH/pG8P/9+2 + L1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC3trYVt7a2b7e2ttW3trb+t7a2/7e2tv+3trb/t7W1/6mXXf+fgSH/jF0H/3xF + Af+FSAH/nloD/8+ZG//fti+iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAt7a2BLe2tjm3trabt7a277e2tv+3trb/t7a2/7e2tv+3trb/t7a2/6+k + gv+ggyT/oX8e/6JsCP+oYwT/rF8C/798CP/WpSP/37Yv4N+2LwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYSt7a2Xre2tsO3trb4t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7SvoP+ukDP/w58p/86dIP/Dggn/unQG/7lzBv/Dggn/268q/9+2L/vfti88AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Are2tiS3traJt7a24re2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2+Li2s7TQsEfr3bQv/9+2L//Qmhr/w4IJ/8mNEv/Egwr/xocN/960 + Lv/fti//37YvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYHt7a2T7e2trO3trb6t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trbgt7a2g7m2sSLfti9937Yv/9+2L//ftS//ypAT/8eJ + Dv/csCv/yY4R/8uQE//fti//37Yv/9+2L8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2tiG3trZ2t7a22be2 + tv23trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a297e2try3trZat7a2DAAAAADfti8/37Yv9t+2 + L//fti//3rQt/8aIDv/YqCX/37Yv/9GcHP/Qmhr/37Yv/9+2L//fti/637YvHAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYHt7a2Obe2 + tqS3trbtt7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv63trbqt7a2lre2tjO3trYEAAAAAAAA + AADfti8W37Yv1d+2L//fti//37Yv/9uwKv/Qmxv/37Yv/9+2L//Zqyf/1aMh/9+2L//fti//37Yv/9+2 + L2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2 + tgy3trZlt7a2xre2tv23trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2ttK3trZqt7a2FgAA + AAAAAAAAAAAAAAAAAADfti8C37Yvo9+2L//fti//37Yv/9+2L//brin23rQu/9+2L//fti//3rUu/duv + KvDfti//37Yv/9+2L//fti+p37YvAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC3trYBt7a2L7e2to+3trbut7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trbyt7a2pre2 + tkC3trYBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvYt+2L/zfti//37Yv/9+2L//fti/p37YvrN+2 + L//fti//37Yv/9+2L/Dfti+m37Yv/9+2L//fti//37Yv6d+2Lw8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALe2tg63trZSt7a2u7e2tva3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/re2 + ttq3trZ8t7a2ILe2tgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvKN+2L+/fti//37Yv/9+2 + L//fti/837YvYN+2L7Xfti//37Yv/9+2L//fti/G37YvV9+2L/7fti//37Yv/9+2L//fti9DAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC3trYCt7a2H7e2tn63trbZt7a2/re2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb3t7a2ure2tlO3trYNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvDN+2 + L8Lfti//37Yv/9+2L//fti//37Yvod+2LxHfti/b37Yv/9+2L//fti//37YvlN+2Lxbfti/037Yv/9+2 + L//fti//37YvjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2tgK3trZBt7a2pre2tvS3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tuy3traPt7a2Lre2tgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN+2L4Xfti//37Yv/9+2L//fti//37Yv3d+2LxDfti8i37Yv9d+2L//fti//37Yv/9+2 + L2QAAAAA37Yvv9+2L//fti//37Yv/9+2L9Dfti8HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Fre2tmy3trbUt7a2/re2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb9t7a2xbe2tmO3trYNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2L0rfti/337Yv/9+2L//fti//37Yv9N+2Lz4AAAAA37YvS961 + L//asi7/1q8t/9KsLv3Esndyt7a2X7+oXrqwkyf/YWcl/zpSI/91dyf4sp0sKwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALe2tgS3trY0t7a2lre2tum3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tu23traht7a2O7e2tgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2CMasViTXry3f1a4t/9CqLP/KpSr/xKAq/8Ot + aNu3traft7a2tq+dZN+niCP/pYYj/6OFI/+jiC//tbGp/7e2tv+XmJf/LEAj/wYsHv8GLB7/By0e/yhO + On8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Dbe2tli3tra/t7a2+Le2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb8t7a22re2tnW3trYeAAAAAAAAAAAAAAAAAAAAALe2 + tgK3trYFt7a2Cbe2tg23trYbt7a2Nbe2tky3trZlt7a2fLe2tpS3tratt7a2xLe1s9Spk0vspIUj/6CC + Iv+ggiL/oIIi/6aQSv+2tLD/t7a2/7e2tv+ok1P/oIIi/6CCIv+ggiL/pIw+/7W0tf+AjLD/MlCk/wow + M/8GLB7/Biwe/wYsHv8eRz+4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC3trYjt7a2hLe2 + tuG3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tvu3trawt7a2Ure2tiC3trYvt7a2Rbe2 + tlq3trZ0t7a2i7e2tqK3tra6t7a2zbe2tuO3trb2t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+uoXr/oIIi/6CCIv+ggiL/oIIi/6KHL/+0r6L/t7a2/7e2tv+3tbT/o4k2/6CCIv+ggiL/oIIi/56O + Wv9dcaz/LUyn/x5Gpv8GNGD/Biwe/wYsHv8GLSD/G0xIcgAAAAAAAAAAAAAAAAAAAAAAAAAAt7a2Cbe2 + tkm3travt7a297e2tv+0s7P/srGx/66trf+rqqr/p6am/6Khof+cm5v/np2d/6uqqv60s7Pht7a25Le2 + tvW3trb4t7a2+7e2tv23trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+yrJj/oYUr/6CCIv+ggiL/oIIi/6CCI/+vpYX/t7a2/7e2tv+3trb/tLCk/6GF + Kv+ggiL/oIIi/4JvIf88Tm7/LUyn/y5Oq/8PQ6z/BkGr/wc7eP8IQGD/F4Sd4ym42xYAAAAAAAAAAAAA + AACTg5Ygg3SGgJCJkdOZl5j7lZSU/5CPj/+Lior/iYiI/4eGhv+FhIT/g4KC/4SDg/+Pjo7/pKOj/7Oy + sv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+2s63/pY1C/6CCIv+ggiL/oIIi/6CCIv+pllz6t7a18be2 + tui3trbgt7a2zberh825lyj/uZgo/3lxKP83SCf/OV2z/zxm4P8xY+L/ClXi/wlV5P8ObOr/ILf3/ybP + +5EAAAAAAAAAAAAAAACLeo4acmB23mlWbf9pVm3/cmV0/4KAgf+DgoL/g4KC/4OCgv+DgoL/hoWF/5iX + l/+sq6v/trW1/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb/t7a2/7e2tv+3trb/t7a2/re2tvy3trb6t7a2+Le2tuy3trbWuKNi9baVJ/+8mSj/wp4p/8ij + Kv/KpSzUtaqGN7e2tiO3trYTt7a2BAAAAADfti90zasv/2psLP84TCv/N042/z5n2P8/aur/H17o/wlY + 5v8Uhe7/JMf6/ybQ+/wm0PsvAAAAAAAAAAAAAAAAjHqPcWlWbf9pVm3/aVZt/2lWbf9wYnP/gX+B/4OC + gv+Mi4v/oJ+f/7Oysv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2tv+3trb/t7a2/7e2 + tv+3trb9t7a27Le2tta3trbDt7a2rre2tpa3trZ+t7a2Zre2tk+3trY4t7a2I7e2tg4AAAAA37YvTt+2 + L/zfti//37Yv/9+2L//fti/y37YvNwAAAAAAAAAAAAAAAAAAAAAAAAAAlIczp0pYK/83TCv/N0wr/zhR + Tv8/aeT/O2nq/w9g6P8cpPT/Js/7/ybQ+/8m0Pu9JtD7BAAAAAAAAAAAAAAAAI59kVVrWG/+aVZt/2lW + bf9pVm3/a1hv/31sgP+moqX/tbS0/7e2tv+3trb/t7a2/7e2tve3trbot7a227e2ts63tra3t7a2obe2 + toe3trZvt7a2Wbe2tkG3trYmt7a2Ebe2tgy3trYHt7a2AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37YvH9+2L+Pfti//37Yv/9+2L//fti/+37YvcN+2LwEAAAAAAAAAAAAAAAA/auoMP2rqgzlR + SPs3TCv/N0wr/zdMK/86V27/P2rq/y567PchvPj/JtD7/ybQ+/8m0Pv+JtD7WQAAAAAAAAAAAAAAAAAA + AACjk6UJfmqBoHFddvx0X3n/hm+M/5p/of+mia3/s5q5/ruyvZu3trZht7a2Sre2tjG3trYit7a2F7e2 + tg23trYDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA37YvCN+2L7Lfti//37Yv/9+2L//fti//37Yvst+2LwcAAAAAAAAAAAAA + AAA/auonP2rqvD9p4f43TC7/N0wr/zdMK/83TCv/O1yQ+D5v65YnyfrTJtD7/ybQ+/8m0Pv/JtD76CbQ + +wsAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1gPCocuAyafS/c2q1v/Nqtb/zarW/82q1v/NqtbXzarWKwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2L3Lfti/937Yv/9+2L//fti//37Yv5t+2 + LxwAAAAAAAAAAD9q6gE/aupSP2rq5z9q6v89ZMH/N0wr/zdMK/83TCv/RFQr/2Nxbmonzfs8JtD7+ybQ + +/8m0Pv/JtD7/ybQ+40AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1m7Nqtb4zarW/82q + 1v/Nqtb/zarW/82q1ubNqtY2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lznfti/z37Yv/9+2 + L//fti//37Yv+N+2L00AAAAAAAAAAD9q6g4/auqSP2rq/z9q6v8/aur/PF2Z/zdMK/83TCv/ZGgs/8uq + L/7fti8SJtD7oCbQ+/8m0Pv/JtD7/ybQ+/Qm0PstAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADNqtYCzarWXc2q1vTNqtb/zarW/82q1v/Nqtb/zarW682q1kMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2 + Lw3fti/W37Yv/9+2L//fti//37Yv/9+2L43fti8CAAAAAD9q6i8/aurKP2rq/j9q6v8/aur/P2rq/zpY + d/89UCv/jIIt/9myL//fti/cQMzeHibQ++sm0Pv/JtD7/ybQ+/8m0Pu6JtD7AQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1gHNqtZNzarW8s2q1v/Nqtb/zarW/82q1v/NqtbwzarWUM2q + 1gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAN+2LwTfti+Y37Yv/9+2L//fti//37Yv/9+2L8nfti8PP2rqBD9q6mI/aursP2rq/z9q + 6v8/aur/P2rq/z9p5v9NX1b/spou/961L//fti//37YvrifQ+m8m0Pv/JtD7/ybQ+/8m0Pv+JtD7VgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1kDNqtbtzarW/82q + 1v/Nqtb/zarW/82q1vfNqtZeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti9V37Yv+9+2L//fti//37Yv/9+2L/Lfti8sP2rqET9q + 6p4/aur+P2rq/z9q6v8/aur/P2rq/z9q6v9Lb9m+zaw299+2L//fti//37Yv/9y2MoEm0PvUJtD7/ybQ + +/8m0Pv/JtD73ybQ+xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAzarWNM2q1t7Nqtb/zarW/82q1v/Nqtb/zarW/M2q1nHNqtYCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti8m37Yv6N+2L//fti//37Yv/9+2 + L/3fti9oQGrpOj9q6tU/aur/P2rq/z9q6v8/aur/P2rq/z9q6vI/aupv0rA+Mt+2L//fti//37Yv/9+2 + L/6LwouOJtD7/SbQ+/8m0Pv/JtD7/ybQ+4UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADNqtYtzarW1c2q1v/Nqtb/zarW/82q1v/Nqtb6zarWg82q + 1gUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfti8J37Yvvd+2 + L//fti//37Yv/9+2L//ZszawRGzkdD9q6vM/aur/P2rq/z9q6v8/aur/P2rq/z9q6tQ/auo5P2rqAd+2 + L2Lfti//37Yv/9+2L//etjD3RsvWxCbQ+/8m0Pv/JtD7/ybQ+/km0PsjAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM2q1iDNqtbQzarW/82q + 1v/Nqtb/zarW/82q1vzNqtaRzarWBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA37Yve9+2L/3fti//37Yv/9+2L//NrT/wVHTRxT9q6v4/aur/P2rq/z9q6v8/aur/P2rq/D9q + 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 + Lv8hlC7/JcPP/ybQ++wm0PsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADfti94wrEv/ymVLv8hlC7/IZUx/ybO9P8m0PukJtD7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA37Yvp3ukLv8hlC7/IZQu/yKfUv8m0Pr+JtD7PwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA37YvCNe1L9Ezly7/IZQu/yGULv8jqnr/JtD7zibQ + +wkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN+2Lxmdqi/0IZQu/yGU + Lv8hlC7/JLWg/ybQ+20AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADUtC87V54u/yGULv8hlC7/IZUw/yXAw/Qm0PsRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAk6kvbyeVLv8hlC7/IZQu/yGXOf8lxdegAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWeOqshlC7/IZQu/yGULv8inEj6Js/4PQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAznEDQIZQu/yGU + Lv8hlC7/J6BT0CbQ+wQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAOaBHnCGULv8hlC7/IpQv/zmhTHEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKrYQ44n0aRI5UwtT2hS35suH0JAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/////////////////////////////8f/// + //////g/////////wB////////4AH///////+AAf///////gAB///////wAAD//////8AAAP/////+AA + AA//////gAAAD/////4AAgAH////8AAMAAf////AAHgAA////gAB+AAD///4AAfwAAP//8AAP+AAA/// + AAD/4ACB//wAB//AQAH/4AAf/wAAAf+AAPAAAAAB/gAAAAAAAAHwAAAAAAAAAcAAAAAAAAADgAAAAAAA + gAOAAAAACA+AA4AAAA/wDgAHgAB//+AcAAfAH///4DAAD/AP///AYAAP8Af//4BAAA/4Af//AAAAH/4B + //8AAAAf/wB//gAAAD//gD/8AAAAP//AH/wABgA//+AP+AAOAH//8AfwADwAf//4A+AAfAD///wB4AD8 + AP///gDAA/wB////AAAH/AH///+AAA/4Af///+AAP/gD////8AB/+AP////4AP/4A/////wD//AH//// + /gf/8Af/////H//wD/////////AP////////8A/////////wH////////+Af////////4D/////////g + P////////+B/////////4H/////////gf////////+D/////////4P////////////////////////// + ////////iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAgAElEQVR42u29eZRk133f97n3 + bbV19To9K2YADDAABrsAgYsIQhRNygSphZJNndhiZFG2adOREx2dJMfSsSImIn0sKUpkRfQRHZ1IpkxZ + NBcllEGJMSlCYkhQIIhlsGOAGcz0LD29d+1vub/88bp7umd6qa6uXqrqfs9pDKan3qt6r97ve7/f3/3d + 3wULCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLC4uOgLK3wKLT + 8S8e+6hcKF9iqjbD+dIYAFppsm6WG4qHGc4M8W8/+Mf2WV8F2t4Ci07H67NnmaxNU4kqS78TEWITM1uf + 41LlMh/8o3eLvVNWAVh0ET702R+WWlznzflz649yC2rgrpGT/Luf/Jx95i0BWHQ6fuqz75Op+hRTtWkS + SZp40BU5L0efX+CrP/uEfe6tBbDoZEzXp6lE1aaCH0AQwiSkkTT4+f/7p60dsARg0an4n7/638lUfWqF + 528GkYmITcx8WLI30RKARadirHyxZfdaCss8M37K3kRLABadilpcR6R1FS9YB2AJwKJj0YjDLZ/jN/7s + EcsClgAsehVxPMW/e+wesQRgYdFhyHqZLZ9jLkxnBCwBWFh0GHw3j1Jbm8qfjxLiJLYEYB8ni05D5J1E + tljDdr4u1AxEz5wQSwAWFh2EP/jALyuji6BatwIToVBN7L107S2w6ESIsw9QENdbOr6aQN3Q8yRgFYBF + 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 + GBgsBv8PNAlKsBafvBgAAAAASUVORK5CYII= + + \ No newline at end of file diff --git a/OpenEphys.Onix1/NeuropixelsV1Helper.cs b/OpenEphys.Onix1/NeuropixelsV1Helper.cs index 94fac8a3..931e171e 100644 --- a/OpenEphys.Onix1/NeuropixelsV1Helper.cs +++ b/OpenEphys.Onix1/NeuropixelsV1Helper.cs @@ -12,19 +12,21 @@ public static class NeuropixelsV1Helper internal const int NumberOfGains = 8; /// - /// Returns the ADC values from an ADC calibration file for a specific probe. + /// Returns the ADC values and serial number from an ADC calibration file for a specific probe. /// /// Incoming that is reading from the ADC calibration file. /// Array of values. /// /// - public static NeuropixelsV1eAdc[] ParseAdcCalibrationFile(StreamReader file) + public static NeuropixelsV1eAdcCalibration ParseAdcCalibrationFile(StreamReader file) { if (file == null || file.EndOfStream) { throw new ArgumentException("Incoming stream reader is not pointing to a valid ADC calibration file."); } + var adcSerialNumber = ulong.Parse(file.ReadLine()); + NeuropixelsV1eAdc[] adcs = new NeuropixelsV1eAdc[NeuropixelsV1e.AdcCount]; for (var i = 0; i < NeuropixelsV1e.AdcCount; i++) @@ -48,7 +50,7 @@ public static NeuropixelsV1eAdc[] ParseAdcCalibrationFile(StreamReader file) }; } - return adcs; + return new(adcSerialNumber, adcs); } /// @@ -67,6 +69,8 @@ public static NeuropixelsV1eGainCorrection ParseGainCalibrationFile(StreamReader throw new ArgumentException("Incoming stream reader is not pointing to a valid gain calibration file."); } + var serialNumber = ulong.Parse(file.ReadLine()); + var gainCorrections = file.ReadLine().Split(',').Skip(1); if (gainCorrections.Count() != 2 * NumberOfGains) @@ -75,7 +79,7 @@ public static NeuropixelsV1eGainCorrection ParseGainCalibrationFile(StreamReader var ap = double.Parse(gainCorrections.ElementAt(Array.IndexOf(Enum.GetValues(typeof(NeuropixelsV1Gain)), apGain))); var lfp = double.Parse(gainCorrections.ElementAt(Array.IndexOf(Enum.GetValues(typeof(NeuropixelsV1Gain)), lfpGain) + 8)); - return new NeuropixelsV1eGainCorrection(ap, lfp); + return new NeuropixelsV1eGainCorrection(serialNumber, ap, lfp); } } } diff --git a/OpenEphys.Onix1/NeuropixelsV1eAdcCalibration.cs b/OpenEphys.Onix1/NeuropixelsV1eAdcCalibration.cs new file mode 100644 index 00000000..80cf44cc --- /dev/null +++ b/OpenEphys.Onix1/NeuropixelsV1eAdcCalibration.cs @@ -0,0 +1,29 @@ +namespace OpenEphys.Onix1 +{ + /// + /// A struct to hold an array of values and the serial number needed for each . + /// + public readonly struct NeuropixelsV1eAdcCalibration + { + /// + /// Gets an array of values. + /// + public NeuropixelsV1eAdc[] Adcs { get; } + + /// + /// Gets the serial number found in the ADC calibration file. + /// + public ulong SN { get; } + + /// + /// Initializes a new instance of the struct. + /// + /// Unsigned long value holding the serial number of the probe from the calibration file. + /// Array of values from the calibration file. + public NeuropixelsV1eAdcCalibration(ulong sn, NeuropixelsV1eAdc[] adcs) + { + SN = sn; + Adcs = adcs; + } + } +} diff --git a/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs b/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs index db28cc3f..8a8c6ed5 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eGainCorrection.cs @@ -1,27 +1,34 @@ namespace OpenEphys.Onix1 { /// - /// A struct to hold the two gain correction values (AP and LFP) needed for each . + /// A struct to hold the two gain correction values (AP and LFP) and the serial number needed for each . /// - public struct NeuropixelsV1eGainCorrection + public readonly struct NeuropixelsV1eGainCorrection { /// - /// Gets or sets the AP gain correction. + /// Gets the serial number found in the gain calibration file. /// - public double AP { get; set; } + public ulong SN { get; } /// - /// Gets or sets the LFP gain correction. + /// Gets the AP gain correction found in the gain calibration file for the appropriate AP gain. /// - public double LFP { get; set; } + public double AP { get; } + + /// + /// Gets the LFP gain correction found in the gain calibration file for the appropriate LFP gain. + /// + public double LFP { get; } /// /// Initializes a new instance of the struct. /// + /// Unsigned long value holding the serial number of the probe from the calibration file. /// Double holding the AP gain correction as pulled from the gain calibration file. /// Double holding the LFP gain correction as pulled from the gain calibration file. - public NeuropixelsV1eGainCorrection(double ap, double lfp) + public NeuropixelsV1eGainCorrection(ulong sn, double ap, double lfp) { + SN = sn; AP = ap; LFP = lfp; } diff --git a/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs b/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs index 9185ab25..f6f4ca03 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eRegisterContext.cs @@ -31,26 +31,26 @@ public NeuropixelsV1eRegisterContext(DeviceContext deviceContext, uint i2cAddres throw new ArgumentException("Calibration files must be specified."); } - StreamReader gainFile = new(gainCalibrationFile); - var calSerialNumber = ulong.Parse(gainFile.ReadLine()); + StreamReader adcFile = new(adcCalibrationFile); - if (calSerialNumber != probeSerialNumber) - throw new ArgumentException("Gain calibration file serial number does not match probe serial number."); + // parse ADC calibration file + var adcCalibration = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); - StreamReader adcFile = new(adcCalibrationFile); - var adcSerialNumber = ulong.Parse(adcFile.ReadLine()); + if (adcCalibration.SN != probeSerialNumber) + throw new ArgumentException($"ADC calibration file serial number {adcCalibration.SN} does not match probe serial number {probeSerialNumber}."); - if (adcSerialNumber != probeSerialNumber) - throw new ArgumentException("ADC calibration file serial number does not match probe serial number."); + StreamReader gainFile = new(gainCalibrationFile); // parse gain correction file var gainCorrection = NeuropixelsV1Helper.ParseGainCalibrationFile(gainFile, probeConfiguration.SpikeAmplifierGain, probeConfiguration.LfpAmplifierGain); + + if (gainCorrection.SN != probeSerialNumber) + throw new ArgumentException($"Gain calibration file serial number {gainCorrection.SN} does not match probe serial number {probeSerialNumber}."); + ApGainCorrection = gainCorrection.AP; LfpGainCorrection = gainCorrection.LFP; - // parse ADC calibration file - Adcs = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); - + Adcs = adcCalibration.Adcs; AdcThresholds = Adcs.ToList().Select(a => (ushort)a.Threshold).ToArray(); AdcOffsets = Adcs.ToList().Select(a => (ushort)a.Offset).ToArray(); From aaebf2689ef978ac333ae5a9d769cf388590dc80 Mon Sep 17 00:00:00 2001 From: bparks13 Date: Tue, 20 Aug 2024 17:46:33 -0400 Subject: [PATCH 3/7] Remove ADC/Gain calibration file elements - Until we can properly validate files using a schema, we cannot parse the calibration files using the GUI as any exceptions cause the dialog to crash --- .../NeuropixelsV1eDialog.Designer.cs | 286 ++++-------------- .../NeuropixelsV1eDialog.cs | 92 +----- .../NeuropixelsV1eDialog.resx | 15 - 3 files changed, 65 insertions(+), 328 deletions(-) diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs index 2cee1c46..44a80fcb 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs @@ -28,11 +28,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelGainCalSN; - System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabelAdcCalSN; System.Windows.Forms.Label labelPresets; - System.Windows.Forms.Label label4; - System.Windows.Forms.Label labelGainCorrection; System.Windows.Forms.Label adcCalibrationFile; System.Windows.Forms.Label gainCalibrationFile; System.Windows.Forms.Label spikeFilter; @@ -44,10 +40,6 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NeuropixelsV1eDialog)); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.statusStrip = new System.Windows.Forms.StatusStrip(); - this.gainCalibrationSN = new System.Windows.Forms.ToolStripStatusLabel(); - this.adcCalibrationSN = new System.Windows.Forms.ToolStripStatusLabel(); - this.toolStripStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.tabControlProbe = new System.Windows.Forms.TabControl(); this.tabPageProbe = new System.Windows.Forms.TabPage(); @@ -56,30 +48,22 @@ private void InitializeComponent() this.panelTrackBar = new System.Windows.Forms.Panel(); this.trackBarProbePosition = new System.Windows.Forms.TrackBar(); this.panelOptions = new System.Windows.Forms.Panel(); + this.buttonChooseAdcCalibrationFile = new System.Windows.Forms.Button(); + this.buttonChooseGainCalibrationFile = new System.Windows.Forms.Button(); this.buttonEnableContacts = new System.Windows.Forms.Button(); this.buttonClearSelections = new System.Windows.Forms.Button(); this.comboBoxChannelPresets = new System.Windows.Forms.ComboBox(); this.buttonResetZoom = new System.Windows.Forms.Button(); - this.textBoxLfpGainCorrection = new System.Windows.Forms.TextBox(); - this.textBoxApGainCorrection = new System.Windows.Forms.TextBox(); this.checkBoxSpikeFilter = new System.Windows.Forms.CheckBox(); this.textBoxAdcCalibrationFile = new System.Windows.Forms.TextBox(); this.textBoxGainCalibrationFile = new System.Windows.Forms.TextBox(); this.comboBoxReference = new System.Windows.Forms.ComboBox(); this.comboBoxLfpGain = new System.Windows.Forms.ComboBox(); this.comboBoxApGain = new System.Windows.Forms.ComboBox(); - this.tabPageADCs = new System.Windows.Forms.TabPage(); - this.dataGridViewAdcs = new System.Windows.Forms.DataGridView(); this.panel1 = new System.Windows.Forms.Panel(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOkay = new System.Windows.Forms.Button(); - this.buttonChooseGainCalibrationFile = new System.Windows.Forms.Button(); - this.buttonChooseAdcCalibrationFile = new System.Windows.Forms.Button(); - toolStripStatusLabelGainCalSN = new System.Windows.Forms.ToolStripStatusLabel(); - toolStripStatusLabelAdcCalSN = new System.Windows.Forms.ToolStripStatusLabel(); labelPresets = new System.Windows.Forms.Label(); - label4 = new System.Windows.Forms.Label(); - labelGainCorrection = new System.Windows.Forms.Label(); adcCalibrationFile = new System.Windows.Forms.Label(); gainCalibrationFile = new System.Windows.Forms.Label(); spikeFilter = new System.Windows.Forms.Label(); @@ -89,7 +73,6 @@ private void InitializeComponent() label3 = new System.Windows.Forms.Label(); label1 = new System.Windows.Forms.Label(); this.menuStrip.SuspendLayout(); - this.statusStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); @@ -104,59 +87,19 @@ private void InitializeComponent() this.panelTrackBar.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.trackBarProbePosition)).BeginInit(); this.panelOptions.SuspendLayout(); - this.tabPageADCs.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridViewAdcs)).BeginInit(); this.panel1.SuspendLayout(); this.SuspendLayout(); // - // toolStripStatusLabelGainCalSN - // - toolStripStatusLabelGainCalSN.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); - toolStripStatusLabelGainCalSN.Name = "toolStripStatusLabelGainCalSN"; - toolStripStatusLabelGainCalSN.Size = new System.Drawing.Size(119, 15); - toolStripStatusLabelGainCalSN.Text = "Gain Calibration SN: "; - // - // toolStripStatusLabelAdcCalSN - // - toolStripStatusLabelAdcCalSN.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); - toolStripStatusLabelAdcCalSN.Name = "toolStripStatusLabelAdcCalSN"; - toolStripStatusLabelAdcCalSN.Size = new System.Drawing.Size(118, 15); - toolStripStatusLabelAdcCalSN.Text = "ADC Calibration SN: "; - // // labelPresets // labelPresets.AutoSize = true; - labelPresets.Location = new System.Drawing.Point(10, 231); + labelPresets.Location = new System.Drawing.Point(10, 219); labelPresets.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); labelPresets.Name = "labelPresets"; labelPresets.Size = new System.Drawing.Size(46, 26); labelPresets.TabIndex = 25; labelPresets.Text = "Channel\r\nPresets:"; // - // label4 - // - label4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - label4.AutoSize = true; - label4.Location = new System.Drawing.Point(66, 103); - label4.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - label4.Name = "label4"; - label4.Size = new System.Drawing.Size(29, 13); - label4.TabIndex = 20; - label4.Text = "Gain"; - // - // labelGainCorrection - // - labelGainCorrection.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - labelGainCorrection.AutoSize = true; - labelGainCorrection.Location = new System.Drawing.Point(140, 103); - labelGainCorrection.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - labelGainCorrection.Name = "labelGainCorrection"; - labelGainCorrection.Size = new System.Drawing.Size(55, 13); - labelGainCorrection.TabIndex = 15; - labelGainCorrection.Text = "Correction"; - // // adcCalibrationFile // adcCalibrationFile.AutoSize = true; @@ -182,7 +125,7 @@ private void InitializeComponent() // spikeFilter // spikeFilter.AutoSize = true; - spikeFilter.Location = new System.Drawing.Point(10, 180); + spikeFilter.Location = new System.Drawing.Point(10, 168); spikeFilter.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); spikeFilter.Name = "spikeFilter"; spikeFilter.Size = new System.Drawing.Size(62, 13); @@ -192,7 +135,7 @@ private void InitializeComponent() // Reference // Reference.AutoSize = true; - Reference.Location = new System.Drawing.Point(10, 207); + Reference.Location = new System.Drawing.Point(10, 195); Reference.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); Reference.Name = "Reference"; Reference.Size = new System.Drawing.Size(60, 13); @@ -202,22 +145,22 @@ private void InitializeComponent() // lfpGain // lfpGain.AutoSize = true; - lfpGain.Location = new System.Drawing.Point(10, 151); + lfpGain.Location = new System.Drawing.Point(10, 139); lfpGain.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); lfpGain.Name = "lfpGain"; - lfpGain.Size = new System.Drawing.Size(29, 13); + lfpGain.Size = new System.Drawing.Size(54, 13); lfpGain.TabIndex = 2; - lfpGain.Text = "LFP:"; + lfpGain.Text = "LFP Gain:"; // // apGain // apGain.AutoSize = true; - apGain.Location = new System.Drawing.Point(10, 122); + apGain.Location = new System.Drawing.Point(10, 110); apGain.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); apGain.Name = "apGain"; - apGain.Size = new System.Drawing.Size(24, 13); + apGain.Size = new System.Drawing.Size(49, 13); apGain.TabIndex = 0; - apGain.Text = "AP:"; + apGain.Text = "AP Gain:"; // // label3 // @@ -257,44 +200,6 @@ private void InitializeComponent() this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 22); this.fileToolStripMenuItem.Text = "File"; // - // statusStrip - // - this.statusStrip.AutoSize = false; - this.statusStrip.ImageScalingSize = new System.Drawing.Size(24, 24); - this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - toolStripStatusLabelGainCalSN, - this.gainCalibrationSN, - toolStripStatusLabelAdcCalSN, - this.adcCalibrationSN, - this.toolStripStatus}); - this.statusStrip.Location = new System.Drawing.Point(0, 607); - this.statusStrip.Name = "statusStrip"; - this.statusStrip.Padding = new System.Windows.Forms.Padding(1, 0, 9, 0); - this.statusStrip.Size = new System.Drawing.Size(998, 20); - this.statusStrip.TabIndex = 1; - this.statusStrip.Text = "statusStrip1"; - // - // gainCalibrationSN - // - this.gainCalibrationSN.Name = "gainCalibrationSN"; - this.gainCalibrationSN.Size = new System.Drawing.Size(13, 15); - this.gainCalibrationSN.Text = " "; - this.gainCalibrationSN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // adcCalibrationSN - // - this.adcCalibrationSN.Name = "adcCalibrationSN"; - this.adcCalibrationSN.Size = new System.Drawing.Size(13, 15); - this.adcCalibrationSN.Text = " "; - this.adcCalibrationSN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; - // - // toolStripStatus - // - this.toolStripStatus.Image = global::OpenEphys.Onix1.Design.Properties.Resources.StatusReadyImage; - this.toolStripStatus.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.toolStripStatus.Name = "toolStripStatus"; - this.toolStripStatus.Size = new System.Drawing.Size(16, 15); - // // splitContainer1 // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; @@ -312,21 +217,20 @@ private void InitializeComponent() // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this.panel1); - this.splitContainer1.Size = new System.Drawing.Size(998, 583); - this.splitContainer1.SplitterDistance = 550; + this.splitContainer1.Size = new System.Drawing.Size(998, 603); + this.splitContainer1.SplitterDistance = 571; this.splitContainer1.SplitterWidth = 3; this.splitContainer1.TabIndex = 2; // // tabControlProbe // this.tabControlProbe.Controls.Add(this.tabPageProbe); - this.tabControlProbe.Controls.Add(this.tabPageADCs); this.tabControlProbe.Dock = System.Windows.Forms.DockStyle.Fill; this.tabControlProbe.Location = new System.Drawing.Point(0, 0); this.tabControlProbe.Margin = new System.Windows.Forms.Padding(2); this.tabControlProbe.Name = "tabControlProbe"; this.tabControlProbe.SelectedIndex = 0; - this.tabControlProbe.Size = new System.Drawing.Size(998, 550); + this.tabControlProbe.Size = new System.Drawing.Size(998, 571); this.tabControlProbe.TabIndex = 0; // // tabPageProbe @@ -336,7 +240,7 @@ private void InitializeComponent() this.tabPageProbe.Margin = new System.Windows.Forms.Padding(2); this.tabPageProbe.Name = "tabPageProbe"; this.tabPageProbe.Padding = new System.Windows.Forms.Padding(2); - this.tabPageProbe.Size = new System.Drawing.Size(990, 524); + this.tabPageProbe.Size = new System.Drawing.Size(990, 545); this.tabPageProbe.TabIndex = 0; this.tabPageProbe.Text = "Probe"; this.tabPageProbe.UseVisualStyleBackColor = true; @@ -357,8 +261,8 @@ private void InitializeComponent() // splitContainer2.Panel2 // this.splitContainer2.Panel2.Controls.Add(this.panelOptions); - this.splitContainer2.Size = new System.Drawing.Size(986, 520); - this.splitContainer2.SplitterDistance = 765; + this.splitContainer2.Size = new System.Drawing.Size(986, 541); + this.splitContainer2.SplitterDistance = 766; this.splitContainer2.SplitterWidth = 3; this.splitContainer2.TabIndex = 0; // @@ -369,7 +273,7 @@ private void InitializeComponent() this.panelProbe.Dock = System.Windows.Forms.DockStyle.Fill; this.panelProbe.Location = new System.Drawing.Point(0, 0); this.panelProbe.Name = "panelProbe"; - this.panelProbe.Size = new System.Drawing.Size(765, 520); + this.panelProbe.Size = new System.Drawing.Size(766, 541); this.panelProbe.TabIndex = 0; // // panelTrackBar @@ -378,7 +282,7 @@ private void InitializeComponent() this.panelTrackBar.Controls.Add(label1); this.panelTrackBar.Controls.Add(label3); this.panelTrackBar.Controls.Add(this.trackBarProbePosition); - this.panelTrackBar.Location = new System.Drawing.Point(714, -2); + this.panelTrackBar.Location = new System.Drawing.Point(715, 8); this.panelTrackBar.Name = "panelTrackBar"; this.panelTrackBar.Size = new System.Drawing.Size(48, 524); this.panelTrackBar.TabIndex = 33; @@ -409,10 +313,6 @@ private void InitializeComponent() this.panelOptions.Controls.Add(this.comboBoxChannelPresets); this.panelOptions.Controls.Add(labelPresets); this.panelOptions.Controls.Add(this.buttonResetZoom); - this.panelOptions.Controls.Add(label4); - this.panelOptions.Controls.Add(this.textBoxLfpGainCorrection); - this.panelOptions.Controls.Add(this.textBoxApGainCorrection); - this.panelOptions.Controls.Add(labelGainCorrection); this.panelOptions.Controls.Add(this.checkBoxSpikeFilter); this.panelOptions.Controls.Add(this.textBoxAdcCalibrationFile); this.panelOptions.Controls.Add(adcCalibrationFile); @@ -429,17 +329,41 @@ private void InitializeComponent() this.panelOptions.Location = new System.Drawing.Point(0, 0); this.panelOptions.Margin = new System.Windows.Forms.Padding(2); this.panelOptions.Name = "panelOptions"; - this.panelOptions.Size = new System.Drawing.Size(218, 520); + this.panelOptions.Size = new System.Drawing.Size(217, 541); this.panelOptions.TabIndex = 2; // + // buttonChooseAdcCalibrationFile + // + this.buttonChooseAdcCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(180, 24); + this.buttonChooseAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonChooseAdcCalibrationFile.Name = "buttonChooseAdcCalibrationFile"; + this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(28, 20); + this.buttonChooseAdcCalibrationFile.TabIndex = 36; + this.buttonChooseAdcCalibrationFile.Text = "..."; + this.buttonChooseAdcCalibrationFile.UseVisualStyleBackColor = true; + this.buttonChooseAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // + // buttonChooseGainCalibrationFile + // + this.buttonChooseGainCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(180, 72); + this.buttonChooseGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); + this.buttonChooseGainCalibrationFile.Name = "buttonChooseGainCalibrationFile"; + this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(28, 20); + this.buttonChooseGainCalibrationFile.TabIndex = 35; + this.buttonChooseGainCalibrationFile.Text = "..."; + this.buttonChooseGainCalibrationFile.UseVisualStyleBackColor = true; + this.buttonChooseGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); + // // buttonEnableContacts // this.buttonEnableContacts.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonEnableContacts.Location = new System.Drawing.Point(10, 277); + this.buttonEnableContacts.Location = new System.Drawing.Point(10, 265); this.buttonEnableContacts.Margin = new System.Windows.Forms.Padding(2); this.buttonEnableContacts.Name = "buttonEnableContacts"; - this.buttonEnableContacts.Size = new System.Drawing.Size(199, 36); + this.buttonEnableContacts.Size = new System.Drawing.Size(198, 36); this.buttonEnableContacts.TabIndex = 28; this.buttonEnableContacts.Text = "Enable Selected Contacts"; this.buttonEnableContacts.UseVisualStyleBackColor = true; @@ -449,10 +373,10 @@ private void InitializeComponent() // this.buttonClearSelections.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonClearSelections.Location = new System.Drawing.Point(10, 317); + this.buttonClearSelections.Location = new System.Drawing.Point(10, 305); this.buttonClearSelections.Margin = new System.Windows.Forms.Padding(2); this.buttonClearSelections.Name = "buttonClearSelections"; - this.buttonClearSelections.Size = new System.Drawing.Size(199, 36); + this.buttonClearSelections.Size = new System.Drawing.Size(198, 36); this.buttonClearSelections.TabIndex = 27; this.buttonClearSelections.Text = "Deselect Contacts"; this.buttonClearSelections.UseVisualStyleBackColor = true; @@ -464,51 +388,29 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxChannelPresets.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxChannelPresets.FormattingEnabled = true; - this.comboBoxChannelPresets.Location = new System.Drawing.Point(76, 234); + this.comboBoxChannelPresets.Location = new System.Drawing.Point(76, 222); this.comboBoxChannelPresets.Margin = new System.Windows.Forms.Padding(2); this.comboBoxChannelPresets.Name = "comboBoxChannelPresets"; - this.comboBoxChannelPresets.Size = new System.Drawing.Size(133, 21); + this.comboBoxChannelPresets.Size = new System.Drawing.Size(132, 21); this.comboBoxChannelPresets.TabIndex = 26; // // buttonResetZoom // this.buttonResetZoom.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.buttonResetZoom.Location = new System.Drawing.Point(10, 357); + this.buttonResetZoom.Location = new System.Drawing.Point(10, 345); this.buttonResetZoom.Margin = new System.Windows.Forms.Padding(2); this.buttonResetZoom.Name = "buttonResetZoom"; - this.buttonResetZoom.Size = new System.Drawing.Size(199, 36); + this.buttonResetZoom.Size = new System.Drawing.Size(198, 36); this.buttonResetZoom.TabIndex = 22; this.buttonResetZoom.Text = "Reset Zoom"; this.buttonResetZoom.UseVisualStyleBackColor = true; this.buttonResetZoom.Click += new System.EventHandler(this.ButtonClick); // - // textBoxLfpGainCorrection - // - this.textBoxLfpGainCorrection.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxLfpGainCorrection.Location = new System.Drawing.Point(126, 147); - this.textBoxLfpGainCorrection.Margin = new System.Windows.Forms.Padding(2); - this.textBoxLfpGainCorrection.Name = "textBoxLfpGainCorrection"; - this.textBoxLfpGainCorrection.ReadOnly = true; - this.textBoxLfpGainCorrection.Size = new System.Drawing.Size(83, 20); - this.textBoxLfpGainCorrection.TabIndex = 18; - // - // textBoxApGainCorrection - // - this.textBoxApGainCorrection.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.textBoxApGainCorrection.Location = new System.Drawing.Point(126, 118); - this.textBoxApGainCorrection.Margin = new System.Windows.Forms.Padding(2); - this.textBoxApGainCorrection.Name = "textBoxApGainCorrection"; - this.textBoxApGainCorrection.ReadOnly = true; - this.textBoxApGainCorrection.Size = new System.Drawing.Size(83, 20); - this.textBoxApGainCorrection.TabIndex = 16; - // // checkBoxSpikeFilter // this.checkBoxSpikeFilter.AutoSize = true; - this.checkBoxSpikeFilter.Location = new System.Drawing.Point(76, 179); + this.checkBoxSpikeFilter.Location = new System.Drawing.Point(76, 167); this.checkBoxSpikeFilter.Margin = new System.Windows.Forms.Padding(2); this.checkBoxSpikeFilter.Name = "checkBoxSpikeFilter"; this.checkBoxSpikeFilter.Size = new System.Drawing.Size(65, 17); @@ -523,7 +425,7 @@ private void InitializeComponent() this.textBoxAdcCalibrationFile.Location = new System.Drawing.Point(10, 24); this.textBoxAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxAdcCalibrationFile.Name = "textBoxAdcCalibrationFile"; - this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(167, 20); + this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(166, 20); this.textBoxAdcCalibrationFile.TabIndex = 12; this.textBoxAdcCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBoxAdcCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); @@ -535,7 +437,7 @@ private void InitializeComponent() this.textBoxGainCalibrationFile.Location = new System.Drawing.Point(10, 72); this.textBoxGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxGainCalibrationFile.Name = "textBoxGainCalibrationFile"; - this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(167, 20); + this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(166, 20); this.textBoxGainCalibrationFile.TabIndex = 9; this.textBoxGainCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBoxGainCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); @@ -546,55 +448,32 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxReference.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxReference.FormattingEnabled = true; - this.comboBoxReference.Location = new System.Drawing.Point(76, 203); + this.comboBoxReference.Location = new System.Drawing.Point(76, 191); this.comboBoxReference.Margin = new System.Windows.Forms.Padding(2); this.comboBoxReference.Name = "comboBoxReference"; - this.comboBoxReference.Size = new System.Drawing.Size(133, 21); + this.comboBoxReference.Size = new System.Drawing.Size(132, 21); this.comboBoxReference.TabIndex = 5; // // comboBoxLfpGain // this.comboBoxLfpGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxLfpGain.FormattingEnabled = true; - this.comboBoxLfpGain.Location = new System.Drawing.Point(39, 147); + this.comboBoxLfpGain.Location = new System.Drawing.Point(76, 135); this.comboBoxLfpGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxLfpGain.Name = "comboBoxLfpGain"; - this.comboBoxLfpGain.Size = new System.Drawing.Size(82, 21); + this.comboBoxLfpGain.Size = new System.Drawing.Size(132, 21); this.comboBoxLfpGain.TabIndex = 3; // // comboBoxApGain // this.comboBoxApGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxApGain.FormattingEnabled = true; - this.comboBoxApGain.Location = new System.Drawing.Point(39, 118); + this.comboBoxApGain.Location = new System.Drawing.Point(76, 106); this.comboBoxApGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxApGain.Name = "comboBoxApGain"; - this.comboBoxApGain.Size = new System.Drawing.Size(82, 21); + this.comboBoxApGain.Size = new System.Drawing.Size(132, 21); this.comboBoxApGain.TabIndex = 1; // - // tabPageADCs - // - this.tabPageADCs.Controls.Add(this.dataGridViewAdcs); - this.tabPageADCs.Location = new System.Drawing.Point(4, 22); - this.tabPageADCs.Margin = new System.Windows.Forms.Padding(2); - this.tabPageADCs.Name = "tabPageADCs"; - this.tabPageADCs.Size = new System.Drawing.Size(990, 528); - this.tabPageADCs.TabIndex = 2; - this.tabPageADCs.Text = "ADCs"; - this.tabPageADCs.UseVisualStyleBackColor = true; - // - // dataGridViewAdcs - // - this.dataGridViewAdcs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; - this.dataGridViewAdcs.Dock = System.Windows.Forms.DockStyle.Fill; - this.dataGridViewAdcs.Location = new System.Drawing.Point(0, 0); - this.dataGridViewAdcs.Margin = new System.Windows.Forms.Padding(2); - this.dataGridViewAdcs.Name = "dataGridViewAdcs"; - this.dataGridViewAdcs.RowHeadersWidth = 62; - this.dataGridViewAdcs.RowTemplate.Height = 28; - this.dataGridViewAdcs.Size = new System.Drawing.Size(990, 528); - this.dataGridViewAdcs.TabIndex = 0; - // // panel1 // this.panel1.Controls.Add(this.buttonCancel); @@ -603,14 +482,14 @@ private void InitializeComponent() this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Margin = new System.Windows.Forms.Padding(2); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(998, 30); + this.panel1.Size = new System.Drawing.Size(998, 29); this.panel1.TabIndex = 0; // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(908, 1); + this.buttonCancel.Location = new System.Drawing.Point(908, 0); this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(83, 22); @@ -621,7 +500,7 @@ private void InitializeComponent() // buttonOkay // this.buttonOkay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOkay.Location = new System.Drawing.Point(819, 1); + this.buttonOkay.Location = new System.Drawing.Point(819, 0); this.buttonOkay.Margin = new System.Windows.Forms.Padding(2); this.buttonOkay.Name = "buttonOkay"; this.buttonOkay.Size = new System.Drawing.Size(83, 22); @@ -630,37 +509,12 @@ private void InitializeComponent() this.buttonOkay.UseVisualStyleBackColor = true; this.buttonOkay.Click += new System.EventHandler(this.ButtonClick); // - // buttonChooseGainCalibrationFile - // - this.buttonChooseGainCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(181, 72); - this.buttonChooseGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); - this.buttonChooseGainCalibrationFile.Name = "buttonChooseGainCalibrationFile"; - this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(28, 20); - this.buttonChooseGainCalibrationFile.TabIndex = 35; - this.buttonChooseGainCalibrationFile.Text = "..."; - this.buttonChooseGainCalibrationFile.UseVisualStyleBackColor = true; - this.buttonChooseGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); - // - // buttonChooseAdcCalibrationFile - // - this.buttonChooseAdcCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(181, 24); - this.buttonChooseAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); - this.buttonChooseAdcCalibrationFile.Name = "buttonChooseAdcCalibrationFile"; - this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(28, 20); - this.buttonChooseAdcCalibrationFile.TabIndex = 36; - this.buttonChooseAdcCalibrationFile.Text = "..."; - this.buttonChooseAdcCalibrationFile.UseVisualStyleBackColor = true; - this.buttonChooseAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); - // // NeuropixelsV1eDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(998, 627); this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.statusStrip); this.Controls.Add(this.menuStrip); this.DoubleBuffered = true; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -671,8 +525,6 @@ private void InitializeComponent() this.Text = "NeuropixelsV1eDialog"; this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); - this.statusStrip.ResumeLayout(false); - this.statusStrip.PerformLayout(); this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); @@ -689,8 +541,6 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.trackBarProbePosition)).EndInit(); this.panelOptions.ResumeLayout(false); this.panelOptions.PerformLayout(); - this.tabPageADCs.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.dataGridViewAdcs)).EndInit(); this.panel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -700,7 +550,6 @@ private void InitializeComponent() #endregion private System.Windows.Forms.MenuStrip menuStrip; - private System.Windows.Forms.StatusStrip statusStrip; private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.TabControl tabControlProbe; private System.Windows.Forms.TabPage tabPageProbe; @@ -708,19 +557,12 @@ private void InitializeComponent() private System.Windows.Forms.SplitContainer splitContainer2; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOkay; - private System.Windows.Forms.ToolStripStatusLabel gainCalibrationSN; - private System.Windows.Forms.ToolStripStatusLabel adcCalibrationSN; - private System.Windows.Forms.ToolStripStatusLabel toolStripStatus; - private System.Windows.Forms.TabPage tabPageADCs; - private System.Windows.Forms.DataGridView dataGridViewAdcs; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; private System.Windows.Forms.Panel panelOptions; private System.Windows.Forms.Button buttonEnableContacts; private System.Windows.Forms.Button buttonClearSelections; private System.Windows.Forms.ComboBox comboBoxChannelPresets; private System.Windows.Forms.Button buttonResetZoom; - private System.Windows.Forms.TextBox textBoxLfpGainCorrection; - private System.Windows.Forms.TextBox textBoxApGainCorrection; private System.Windows.Forms.CheckBox checkBoxSpikeFilter; private System.Windows.Forms.TextBox textBoxAdcCalibrationFile; private System.Windows.Forms.TextBox textBoxGainCalibrationFile; diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs index db5a02de..63f4b893 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs @@ -23,11 +23,6 @@ private enum ChannelPreset None } - NeuropixelsV1eAdc[] Adcs = null; - - double ApGainCorrection = default; - double LfpGainCorrection = default; - /// /// Public instance that is manipulated by /// . @@ -122,57 +117,16 @@ private void FileTextChanged(object sender, EventArgs e) if (textBox.Name == nameof(textBoxGainCalibrationFile)) { ConfigureNode.GainCalibrationFile = textBox.Text; - ParseGainCalibrationFile(); } else if (textBox.Name == nameof(textBoxAdcCalibrationFile)) { ConfigureNode.AdcCalibrationFile = textBox.Text; - ParseAdcCalibrationFile(); } } CheckStatus(); } - private void ParseAdcCalibrationFile() - { - if (ConfigureNode.AdcCalibrationFile != null && ConfigureNode.AdcCalibrationFile != "") - { - if (File.Exists(ConfigureNode.AdcCalibrationFile)) - { - StreamReader adcFile = new(ConfigureNode.AdcCalibrationFile); - - var adcCalibration = NeuropixelsV1Helper.ParseAdcCalibrationFile(adcFile); - - adcCalibrationSN.Text = adcCalibration.SN.ToString(); - Adcs = adcCalibration.Adcs; - - dataGridViewAdcs.DataSource = Adcs; - - adcFile.Close(); - } - } - } - - private void ParseGainCalibrationFile() - { - if (ConfigureNode.GainCalibrationFile != null && ConfigureNode.GainCalibrationFile != "") - { - if (File.Exists(ConfigureNode.GainCalibrationFile)) - { - StreamReader gainCalibrationFile = new(ConfigureNode.GainCalibrationFile); - - var gainCorrection = NeuropixelsV1Helper.ParseGainCalibrationFile(gainCalibrationFile, ConfigureNode.ProbeConfiguration.SpikeAmplifierGain, ConfigureNode.ProbeConfiguration.LfpAmplifierGain); - - gainCalibrationSN.Text = gainCorrection.SN.ToString(); - ApGainCorrection = gainCorrection.AP; - LfpGainCorrection = gainCorrection.LFP; - - gainCalibrationFile.Close(); - } - } - } - private void SelectedIndexChanged(object sender, EventArgs e) { if (sender is ComboBox comboBox && comboBox != null) @@ -180,22 +134,10 @@ private void SelectedIndexChanged(object sender, EventArgs e) if (comboBox.Name == nameof(comboBoxApGain)) { ConfigureNode.ProbeConfiguration.SpikeAmplifierGain = (NeuropixelsV1Gain)comboBox.SelectedItem; - ParseGainCalibrationFile(); - - if (ApGainCorrection != default && LfpGainCorrection != default) - { - ShowCorrectionValues(); - } } else if (comboBox.Name == nameof(comboBoxLfpGain)) { ConfigureNode.ProbeConfiguration.LfpAmplifierGain = (NeuropixelsV1Gain)comboBox.SelectedItem; - ParseGainCalibrationFile(); - - if (ApGainCorrection != default && LfpGainCorrection != default) - { - ShowCorrectionValues(); - } } else if (comboBox.Name == nameof(comboBoxReference)) { @@ -295,33 +237,7 @@ private void UpdateChannelPresetIndex(object sender, EventArgs e) private void CheckStatus() { - if (gainCalibrationSN.Text == "" || adcCalibrationSN.Text == "" || gainCalibrationSN.Text != adcCalibrationSN.Text) - { - toolStripStatus.Image = Properties.Resources.StatusWarningImage; - toolStripStatus.Text = "Serial number mismatch"; - } - else if (!ChannelConfiguration.ChannelConfiguration.ValidateDeviceChannelIndices()) - { - toolStripStatus.Image = Properties.Resources.StatusBlockedImage; - toolStripStatus.Text = "Invalid channels selected"; - } - else - { - toolStripStatus.Image = Properties.Resources.StatusReadyImage; - toolStripStatus.Text = ""; - } - - if (ApGainCorrection != default && LfpGainCorrection != default) - { - ShowCorrectionValues(); - } - else - { - textBoxApGainCorrection.Text = ""; - textBoxLfpGainCorrection.Text = ""; - } - - if (ApGainCorrection != default && LfpGainCorrection != default && Adcs != null) + if (File.Exists(ConfigureNode.AdcCalibrationFile) && File.Exists(ConfigureNode.GainCalibrationFile)) { panelProbe.Visible = true; } @@ -331,12 +247,6 @@ private void CheckStatus() } } - private void ShowCorrectionValues() - { - textBoxApGainCorrection.Text = ApGainCorrection.ToString(); - textBoxLfpGainCorrection.Text = LfpGainCorrection.ToString(); - } - private void ButtonClick(object sender, EventArgs e) { if (sender is Button button && button != null) diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx index bb5a3335..faba1f31 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx @@ -117,21 +117,9 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - False - - - False - False - - False - - - False - False @@ -159,9 +147,6 @@ 17, 17 - - 175, 17 - 41 From e41d64ec4ce8dd81b99b28c3159d27b35cd63abf Mon Sep 17 00:00:00 2001 From: bparks13 Date: Wed, 21 Aug 2024 17:36:05 -0400 Subject: [PATCH 4/7] Modify NeuropixelsV1e dialogs to handle scaling issues --- .../NeuropixelsV1eDialog.Designer.cs | 213 ++++++------------ .../NeuropixelsV1eDialog.cs | 4 +- .../NeuropixelsV1eHeadstageDialog.Designer.cs | 94 ++++---- 3 files changed, 121 insertions(+), 190 deletions(-) diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs index 44a80fcb..321e3cf8 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs @@ -40,10 +40,6 @@ private void InitializeComponent() System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NeuropixelsV1eDialog)); this.menuStrip = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.tabControlProbe = new System.Windows.Forms.TabControl(); - this.tabPageProbe = new System.Windows.Forms.TabPage(); - this.splitContainer2 = new System.Windows.Forms.SplitContainer(); this.panelProbe = new System.Windows.Forms.Panel(); this.panelTrackBar = new System.Windows.Forms.Panel(); this.trackBarProbePosition = new System.Windows.Forms.TrackBar(); @@ -60,9 +56,10 @@ private void InitializeComponent() this.comboBoxReference = new System.Windows.Forms.ComboBox(); this.comboBoxLfpGain = new System.Windows.Forms.ComboBox(); this.comboBoxApGain = new System.Windows.Forms.ComboBox(); - this.panel1 = new System.Windows.Forms.Panel(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOkay = new System.Windows.Forms.Button(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); labelPresets = new System.Windows.Forms.Label(); adcCalibrationFile = new System.Windows.Forms.Label(); gainCalibrationFile = new System.Windows.Forms.Label(); @@ -73,21 +70,12 @@ private void InitializeComponent() label3 = new System.Windows.Forms.Label(); label1 = new System.Windows.Forms.Label(); this.menuStrip.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - this.tabControlProbe.SuspendLayout(); - this.tabPageProbe.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); - this.splitContainer2.Panel1.SuspendLayout(); - this.splitContainer2.Panel2.SuspendLayout(); - this.splitContainer2.SuspendLayout(); this.panelProbe.SuspendLayout(); this.panelTrackBar.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.trackBarProbePosition)).BeginInit(); this.panelOptions.SuspendLayout(); - this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // // labelPresets @@ -166,7 +154,7 @@ private void InitializeComponent() // label3.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); label3.AutoSize = true; - label3.Location = new System.Drawing.Point(5, 0); + label3.Location = new System.Drawing.Point(4, 0); label3.Name = "label3"; label3.Size = new System.Drawing.Size(38, 13); label3.TabIndex = 32; @@ -176,7 +164,7 @@ private void InitializeComponent() // label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); label1.AutoSize = true; - label1.Location = new System.Drawing.Point(8, 509); + label1.Location = new System.Drawing.Point(6, 552); label1.Name = "label1"; label1.Size = new System.Drawing.Size(32, 13); label1.TabIndex = 31; @@ -190,7 +178,7 @@ private void InitializeComponent() this.menuStrip.Location = new System.Drawing.Point(0, 0); this.menuStrip.Name = "menuStrip"; this.menuStrip.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1); - this.menuStrip.Size = new System.Drawing.Size(998, 24); + this.menuStrip.Size = new System.Drawing.Size(984, 24); this.menuStrip.TabIndex = 0; this.menuStrip.Text = "menuStrip1"; // @@ -200,80 +188,14 @@ private void InitializeComponent() this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 22); this.fileToolStripMenuItem.Text = "File"; // - // splitContainer1 - // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer1.IsSplitterFixed = true; - this.splitContainer1.Location = new System.Drawing.Point(0, 24); - this.splitContainer1.Margin = new System.Windows.Forms.Padding(2); - this.splitContainer1.Name = "splitContainer1"; - this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.tabControlProbe); - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.panel1); - this.splitContainer1.Size = new System.Drawing.Size(998, 603); - this.splitContainer1.SplitterDistance = 571; - this.splitContainer1.SplitterWidth = 3; - this.splitContainer1.TabIndex = 2; - // - // tabControlProbe - // - this.tabControlProbe.Controls.Add(this.tabPageProbe); - this.tabControlProbe.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControlProbe.Location = new System.Drawing.Point(0, 0); - this.tabControlProbe.Margin = new System.Windows.Forms.Padding(2); - this.tabControlProbe.Name = "tabControlProbe"; - this.tabControlProbe.SelectedIndex = 0; - this.tabControlProbe.Size = new System.Drawing.Size(998, 571); - this.tabControlProbe.TabIndex = 0; - // - // tabPageProbe - // - this.tabPageProbe.Controls.Add(this.splitContainer2); - this.tabPageProbe.Location = new System.Drawing.Point(4, 22); - this.tabPageProbe.Margin = new System.Windows.Forms.Padding(2); - this.tabPageProbe.Name = "tabPageProbe"; - this.tabPageProbe.Padding = new System.Windows.Forms.Padding(2); - this.tabPageProbe.Size = new System.Drawing.Size(990, 545); - this.tabPageProbe.TabIndex = 0; - this.tabPageProbe.Text = "Probe"; - this.tabPageProbe.UseVisualStyleBackColor = true; - // - // splitContainer2 - // - this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer2.Location = new System.Drawing.Point(2, 2); - this.splitContainer2.Margin = new System.Windows.Forms.Padding(2); - this.splitContainer2.Name = "splitContainer2"; - // - // splitContainer2.Panel1 - // - this.splitContainer2.Panel1.BackColor = System.Drawing.SystemColors.ControlLight; - this.splitContainer2.Panel1.Controls.Add(this.panelProbe); - // - // splitContainer2.Panel2 - // - this.splitContainer2.Panel2.Controls.Add(this.panelOptions); - this.splitContainer2.Size = new System.Drawing.Size(986, 541); - this.splitContainer2.SplitterDistance = 766; - this.splitContainer2.SplitterWidth = 3; - this.splitContainer2.TabIndex = 0; - // // panelProbe // this.panelProbe.BackColor = System.Drawing.SystemColors.Control; this.panelProbe.Controls.Add(this.panelTrackBar); this.panelProbe.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelProbe.Location = new System.Drawing.Point(0, 0); + this.panelProbe.Location = new System.Drawing.Point(3, 3); this.panelProbe.Name = "panelProbe"; - this.panelProbe.Size = new System.Drawing.Size(766, 541); + this.panelProbe.Size = new System.Drawing.Size(732, 566); this.panelProbe.TabIndex = 0; // // panelTrackBar @@ -282,25 +204,26 @@ private void InitializeComponent() this.panelTrackBar.Controls.Add(label1); this.panelTrackBar.Controls.Add(label3); this.panelTrackBar.Controls.Add(this.trackBarProbePosition); - this.panelTrackBar.Location = new System.Drawing.Point(715, 8); + this.panelTrackBar.Location = new System.Drawing.Point(691, 1); this.panelTrackBar.Name = "panelTrackBar"; - this.panelTrackBar.Size = new System.Drawing.Size(48, 524); + this.panelTrackBar.Size = new System.Drawing.Size(38, 564); this.panelTrackBar.TabIndex = 33; // // trackBarProbePosition // - this.trackBarProbePosition.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.trackBarProbePosition.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.trackBarProbePosition.BackColor = System.Drawing.SystemColors.Control; - this.trackBarProbePosition.Location = new System.Drawing.Point(2, 2); + this.trackBarProbePosition.Location = new System.Drawing.Point(3, 7); this.trackBarProbePosition.Margin = new System.Windows.Forms.Padding(2); this.trackBarProbePosition.Maximum = 100; this.trackBarProbePosition.Name = "trackBarProbePosition"; this.trackBarProbePosition.Orientation = System.Windows.Forms.Orientation.Vertical; - this.trackBarProbePosition.Size = new System.Drawing.Size(45, 520); + this.trackBarProbePosition.Size = new System.Drawing.Size(45, 550); this.trackBarProbePosition.TabIndex = 30; this.trackBarProbePosition.TickFrequency = 2; - this.trackBarProbePosition.TickStyle = System.Windows.Forms.TickStyle.Both; + this.trackBarProbePosition.TickStyle = System.Windows.Forms.TickStyle.TopLeft; this.trackBarProbePosition.Value = 50; this.trackBarProbePosition.Scroll += new System.EventHandler(this.TrackBarScroll); // @@ -326,16 +249,16 @@ private void InitializeComponent() this.panelOptions.Controls.Add(this.comboBoxApGain); this.panelOptions.Controls.Add(apGain); this.panelOptions.Dock = System.Windows.Forms.DockStyle.Fill; - this.panelOptions.Location = new System.Drawing.Point(0, 0); + this.panelOptions.Location = new System.Drawing.Point(740, 2); this.panelOptions.Margin = new System.Windows.Forms.Padding(2); this.panelOptions.Name = "panelOptions"; - this.panelOptions.Size = new System.Drawing.Size(217, 541); + this.panelOptions.Size = new System.Drawing.Size(242, 568); this.panelOptions.TabIndex = 2; // // buttonChooseAdcCalibrationFile // this.buttonChooseAdcCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(180, 24); + this.buttonChooseAdcCalibrationFile.Location = new System.Drawing.Point(205, 24); this.buttonChooseAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.buttonChooseAdcCalibrationFile.Name = "buttonChooseAdcCalibrationFile"; this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(28, 20); @@ -347,7 +270,7 @@ private void InitializeComponent() // buttonChooseGainCalibrationFile // this.buttonChooseGainCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(180, 72); + this.buttonChooseGainCalibrationFile.Location = new System.Drawing.Point(205, 72); this.buttonChooseGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.buttonChooseGainCalibrationFile.Name = "buttonChooseGainCalibrationFile"; this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(28, 20); @@ -363,7 +286,7 @@ private void InitializeComponent() this.buttonEnableContacts.Location = new System.Drawing.Point(10, 265); this.buttonEnableContacts.Margin = new System.Windows.Forms.Padding(2); this.buttonEnableContacts.Name = "buttonEnableContacts"; - this.buttonEnableContacts.Size = new System.Drawing.Size(198, 36); + this.buttonEnableContacts.Size = new System.Drawing.Size(223, 36); this.buttonEnableContacts.TabIndex = 28; this.buttonEnableContacts.Text = "Enable Selected Contacts"; this.buttonEnableContacts.UseVisualStyleBackColor = true; @@ -376,7 +299,7 @@ private void InitializeComponent() this.buttonClearSelections.Location = new System.Drawing.Point(10, 305); this.buttonClearSelections.Margin = new System.Windows.Forms.Padding(2); this.buttonClearSelections.Name = "buttonClearSelections"; - this.buttonClearSelections.Size = new System.Drawing.Size(198, 36); + this.buttonClearSelections.Size = new System.Drawing.Size(223, 36); this.buttonClearSelections.TabIndex = 27; this.buttonClearSelections.Text = "Deselect Contacts"; this.buttonClearSelections.UseVisualStyleBackColor = true; @@ -391,7 +314,7 @@ private void InitializeComponent() this.comboBoxChannelPresets.Location = new System.Drawing.Point(76, 222); this.comboBoxChannelPresets.Margin = new System.Windows.Forms.Padding(2); this.comboBoxChannelPresets.Name = "comboBoxChannelPresets"; - this.comboBoxChannelPresets.Size = new System.Drawing.Size(132, 21); + this.comboBoxChannelPresets.Size = new System.Drawing.Size(157, 21); this.comboBoxChannelPresets.TabIndex = 26; // // buttonResetZoom @@ -401,7 +324,7 @@ private void InitializeComponent() this.buttonResetZoom.Location = new System.Drawing.Point(10, 345); this.buttonResetZoom.Margin = new System.Windows.Forms.Padding(2); this.buttonResetZoom.Name = "buttonResetZoom"; - this.buttonResetZoom.Size = new System.Drawing.Size(198, 36); + this.buttonResetZoom.Size = new System.Drawing.Size(223, 36); this.buttonResetZoom.TabIndex = 22; this.buttonResetZoom.Text = "Reset Zoom"; this.buttonResetZoom.UseVisualStyleBackColor = true; @@ -425,7 +348,7 @@ private void InitializeComponent() this.textBoxAdcCalibrationFile.Location = new System.Drawing.Point(10, 24); this.textBoxAdcCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxAdcCalibrationFile.Name = "textBoxAdcCalibrationFile"; - this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(166, 20); + this.textBoxAdcCalibrationFile.Size = new System.Drawing.Size(191, 20); this.textBoxAdcCalibrationFile.TabIndex = 12; this.textBoxAdcCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBoxAdcCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); @@ -437,7 +360,7 @@ private void InitializeComponent() this.textBoxGainCalibrationFile.Location = new System.Drawing.Point(10, 72); this.textBoxGainCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxGainCalibrationFile.Name = "textBoxGainCalibrationFile"; - this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(166, 20); + this.textBoxGainCalibrationFile.Size = new System.Drawing.Size(191, 20); this.textBoxGainCalibrationFile.TabIndex = 9; this.textBoxGainCalibrationFile.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; this.textBoxGainCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); @@ -451,70 +374,90 @@ private void InitializeComponent() this.comboBoxReference.Location = new System.Drawing.Point(76, 191); this.comboBoxReference.Margin = new System.Windows.Forms.Padding(2); this.comboBoxReference.Name = "comboBoxReference"; - this.comboBoxReference.Size = new System.Drawing.Size(132, 21); + this.comboBoxReference.Size = new System.Drawing.Size(157, 21); this.comboBoxReference.TabIndex = 5; // // comboBoxLfpGain // + this.comboBoxLfpGain.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxLfpGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxLfpGain.FormattingEnabled = true; this.comboBoxLfpGain.Location = new System.Drawing.Point(76, 135); this.comboBoxLfpGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxLfpGain.Name = "comboBoxLfpGain"; - this.comboBoxLfpGain.Size = new System.Drawing.Size(132, 21); + this.comboBoxLfpGain.Size = new System.Drawing.Size(157, 21); this.comboBoxLfpGain.TabIndex = 3; // // comboBoxApGain // + this.comboBoxApGain.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxApGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxApGain.FormattingEnabled = true; this.comboBoxApGain.Location = new System.Drawing.Point(76, 106); this.comboBoxApGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxApGain.Name = "comboBoxApGain"; - this.comboBoxApGain.Size = new System.Drawing.Size(132, 21); + this.comboBoxApGain.Size = new System.Drawing.Size(157, 21); this.comboBoxApGain.TabIndex = 1; // - // panel1 - // - this.panel1.Controls.Add(this.buttonCancel); - this.panel1.Controls.Add(this.buttonOkay); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Margin = new System.Windows.Forms.Padding(2); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(998, 29); - this.panel1.TabIndex = 0; - // // buttonCancel // - this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(908, 0); + this.buttonCancel.Location = new System.Drawing.Point(893, 2); this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.Size = new System.Drawing.Size(83, 22); + this.buttonCancel.Size = new System.Drawing.Size(83, 28); this.buttonCancel.TabIndex = 1; this.buttonCancel.Text = "Cancel"; this.buttonCancel.UseVisualStyleBackColor = true; // // buttonOkay // - this.buttonOkay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOkay.Location = new System.Drawing.Point(819, 0); + this.buttonOkay.Location = new System.Drawing.Point(806, 2); this.buttonOkay.Margin = new System.Windows.Forms.Padding(2); this.buttonOkay.Name = "buttonOkay"; - this.buttonOkay.Size = new System.Drawing.Size(83, 22); + this.buttonOkay.Size = new System.Drawing.Size(83, 28); this.buttonOkay.TabIndex = 0; this.buttonOkay.Text = "OK"; this.buttonOkay.UseVisualStyleBackColor = true; this.buttonOkay.Click += new System.EventHandler(this.ButtonClick); // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 75F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel1.Controls.Add(this.panelProbe, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.panelOptions, 1, 0); + this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(984, 612); + this.tableLayoutPanel1.TabIndex = 3; + // + // flowLayoutPanel1 + // + this.tableLayoutPanel1.SetColumnSpan(this.flowLayoutPanel1, 2); + this.flowLayoutPanel1.Controls.Add(this.buttonCancel); + this.flowLayoutPanel1.Controls.Add(this.buttonOkay); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; + this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 575); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(978, 34); + this.flowLayoutPanel1.TabIndex = 0; + // // NeuropixelsV1eDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(998, 627); - this.Controls.Add(this.splitContainer1); + this.ClientSize = new System.Drawing.Size(984, 636); + this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.menuStrip); this.DoubleBuffered = true; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -525,23 +468,14 @@ private void InitializeComponent() this.Text = "NeuropixelsV1eDialog"; this.menuStrip.ResumeLayout(false); this.menuStrip.PerformLayout(); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - this.tabControlProbe.ResumeLayout(false); - this.tabPageProbe.ResumeLayout(false); - this.splitContainer2.Panel1.ResumeLayout(false); - this.splitContainer2.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); - this.splitContainer2.ResumeLayout(false); this.panelProbe.ResumeLayout(false); this.panelTrackBar.ResumeLayout(false); this.panelTrackBar.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.trackBarProbePosition)).EndInit(); this.panelOptions.ResumeLayout(false); this.panelOptions.PerformLayout(); - this.panel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -550,11 +484,6 @@ private void InitializeComponent() #endregion private System.Windows.Forms.MenuStrip menuStrip; - private System.Windows.Forms.SplitContainer splitContainer1; - private System.Windows.Forms.TabControl tabControlProbe; - private System.Windows.Forms.TabPage tabPageProbe; - private System.Windows.Forms.Panel panel1; - private System.Windows.Forms.SplitContainer splitContainer2; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOkay; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; @@ -574,5 +503,7 @@ private void InitializeComponent() private System.Windows.Forms.Panel panelTrackBar; private System.Windows.Forms.Button buttonChooseGainCalibrationFile; private System.Windows.Forms.Button buttonChooseAdcCalibrationFile; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; } } diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs index 63f4b893..45b09a75 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs @@ -90,8 +90,8 @@ private void FormShown(object sender, EventArgs e) { if (!TopLevel) { - splitContainer1.Panel2Collapsed = true; - splitContainer1.Panel2.Hide(); + tableLayoutPanel1.Controls.Remove(flowLayoutPanel1); + tableLayoutPanel1.RowCount = 1; menuStrip.Visible = false; } diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs index 98ebb389..8afc9536 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eHeadstageDialog.Designer.cs @@ -34,19 +34,18 @@ private void InitializeComponent() this.panelNeuropixelsV1e = new System.Windows.Forms.Panel(); this.tabPageBno055 = new System.Windows.Forms.TabPage(); this.panelBno055 = new System.Windows.Forms.Panel(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOK = new System.Windows.Forms.Button(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.tabControl1.SuspendLayout(); this.tabPageNeuropixelsV1e.SuspendLayout(); this.tabPageBno055.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); this.menuStrip1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.flowLayoutPanel1.SuspendLayout(); this.SuspendLayout(); // // tabControl1 @@ -54,11 +53,11 @@ private void InitializeComponent() this.tabControl1.Controls.Add(this.tabPageNeuropixelsV1e); this.tabControl1.Controls.Add(this.tabPageBno055); this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Location = new System.Drawing.Point(2, 2); this.tabControl1.Margin = new System.Windows.Forms.Padding(2); this.tabControl1.Name = "tabControl1"; this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(1034, 603); + this.tabControl1.Size = new System.Drawing.Size(1013, 585); this.tabControl1.TabIndex = 0; // // tabPageNeuropixelsV1e @@ -68,7 +67,7 @@ private void InitializeComponent() this.tabPageNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2); this.tabPageNeuropixelsV1e.Name = "tabPageNeuropixelsV1e"; this.tabPageNeuropixelsV1e.Padding = new System.Windows.Forms.Padding(2); - this.tabPageNeuropixelsV1e.Size = new System.Drawing.Size(1026, 577); + this.tabPageNeuropixelsV1e.Size = new System.Drawing.Size(1005, 559); this.tabPageNeuropixelsV1e.TabIndex = 0; this.tabPageNeuropixelsV1e.Text = "NeuropixelsV1e"; this.tabPageNeuropixelsV1e.UseVisualStyleBackColor = true; @@ -79,7 +78,7 @@ private void InitializeComponent() this.panelNeuropixelsV1e.Location = new System.Drawing.Point(2, 2); this.panelNeuropixelsV1e.Margin = new System.Windows.Forms.Padding(2); this.panelNeuropixelsV1e.Name = "panelNeuropixelsV1e"; - this.panelNeuropixelsV1e.Size = new System.Drawing.Size(1022, 573); + this.panelNeuropixelsV1e.Size = new System.Drawing.Size(1001, 555); this.panelNeuropixelsV1e.TabIndex = 0; // // tabPageBno055 @@ -89,7 +88,7 @@ private void InitializeComponent() this.tabPageBno055.Margin = new System.Windows.Forms.Padding(2); this.tabPageBno055.Name = "tabPageBno055"; this.tabPageBno055.Padding = new System.Windows.Forms.Padding(2); - this.tabPageBno055.Size = new System.Drawing.Size(1026, 577); + this.tabPageBno055.Size = new System.Drawing.Size(1026, 578); this.tabPageBno055.TabIndex = 1; this.tabPageBno055.Text = "Bno055"; this.tabPageBno055.UseVisualStyleBackColor = true; @@ -100,40 +99,16 @@ private void InitializeComponent() this.panelBno055.Location = new System.Drawing.Point(2, 2); this.panelBno055.Margin = new System.Windows.Forms.Padding(2); this.panelBno055.Name = "panelBno055"; - this.panelBno055.Size = new System.Drawing.Size(1022, 573); + this.panelBno055.Size = new System.Drawing.Size(1022, 574); this.panelBno055.TabIndex = 0; // - // splitContainer1 - // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer1.IsSplitterFixed = true; - this.splitContainer1.Location = new System.Drawing.Point(0, 24); - this.splitContainer1.Margin = new System.Windows.Forms.Padding(2); - this.splitContainer1.Name = "splitContainer1"; - this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; - // - // splitContainer1.Panel1 - // - this.splitContainer1.Panel1.Controls.Add(this.tabControl1); - // - // splitContainer1.Panel2 - // - this.splitContainer1.Panel2.Controls.Add(this.buttonCancel); - this.splitContainer1.Panel2.Controls.Add(this.buttonOK); - this.splitContainer1.Size = new System.Drawing.Size(1034, 637); - this.splitContainer1.SplitterDistance = 603; - this.splitContainer1.SplitterWidth = 3; - this.splitContainer1.TabIndex = 1; - // // buttonCancel // - this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(918, 2); + this.buttonCancel.Location = new System.Drawing.Point(901, 2); this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.Size = new System.Drawing.Size(108, 26); + this.buttonCancel.Size = new System.Drawing.Size(108, 28); this.buttonCancel.TabIndex = 6; this.buttonCancel.Text = "Cancel"; this.buttonCancel.UseVisualStyleBackColor = true; @@ -142,10 +117,10 @@ private void InitializeComponent() // this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; - this.buttonOK.Location = new System.Drawing.Point(796, 2); + this.buttonOK.Location = new System.Drawing.Point(789, 2); this.buttonOK.Margin = new System.Windows.Forms.Padding(2); this.buttonOK.Name = "buttonOK"; - this.buttonOK.Size = new System.Drawing.Size(108, 26); + this.buttonOK.Size = new System.Drawing.Size(108, 28); this.buttonOK.TabIndex = 5; this.buttonOK.Text = "OK"; this.buttonOK.UseVisualStyleBackColor = true; @@ -158,7 +133,7 @@ private void InitializeComponent() this.menuStrip1.Location = new System.Drawing.Point(0, 0); this.menuStrip1.Name = "menuStrip1"; this.menuStrip1.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1); - this.menuStrip1.Size = new System.Drawing.Size(1034, 24); + this.menuStrip1.Size = new System.Drawing.Size(1017, 24); this.menuStrip1.TabIndex = 2; this.menuStrip1.Text = "menuStrip1"; // @@ -168,12 +143,38 @@ private void InitializeComponent() this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 22); this.fileToolStripMenuItem.Text = "File"; // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.tabControl1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 1); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 24); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 40F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1017, 629); + this.tableLayoutPanel1.TabIndex = 3; + // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Controls.Add(this.buttonCancel); + this.flowLayoutPanel1.Controls.Add(this.buttonOK); + this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.RightToLeft; + this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 592); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(1011, 34); + this.flowLayoutPanel1.TabIndex = 0; + // // NeuropixelsV1eHeadstageDialog // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1034, 661); - this.Controls.Add(this.splitContainer1); + this.ClientSize = new System.Drawing.Size(1017, 653); + this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.menuStrip1); this.DoubleBuffered = true; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); @@ -184,12 +185,10 @@ private void InitializeComponent() this.tabControl1.ResumeLayout(false); this.tabPageNeuropixelsV1e.ResumeLayout(false); this.tabPageBno055.ResumeLayout(false); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); this.menuStrip1.ResumeLayout(false); this.menuStrip1.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.flowLayoutPanel1.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -201,11 +200,12 @@ private void InitializeComponent() private System.Windows.Forms.TabPage tabPageNeuropixelsV1e; private System.Windows.Forms.TabPage tabPageBno055; private System.Windows.Forms.Panel panelNeuropixelsV1e; - private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOK; private System.Windows.Forms.Panel panelBno055; private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; } } From 1763688c264bac75211b5bb6506cf3cabad05f71 Mon Sep 17 00:00:00 2001 From: jonnew Date: Thu, 22 Aug 2024 12:33:03 -0400 Subject: [PATCH 5/7] Small edits to neuropixels configuration GUIs - Make labels uniform - Tool tips on NP1.0 and uniform messages - Uniform look and feel (background color, track bar) --- .../NeuropixelsV1eDialog.Designer.cs | 21 +++++++-- .../NeuropixelsV1eDialog.resx | 3 ++ ...elsV2eProbeConfigurationDialog.Designer.cs | 46 +++++++++---------- 3 files changed, 42 insertions(+), 28 deletions(-) diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs index 321e3cf8..5812e85b 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.Designer.cs @@ -28,6 +28,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.Windows.Forms.Label labelPresets; System.Windows.Forms.Label adcCalibrationFile; System.Windows.Forms.Label gainCalibrationFile; @@ -60,6 +61,7 @@ private void InitializeComponent() this.buttonOkay = new System.Windows.Forms.Button(); this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.toolTip = new System.Windows.Forms.ToolTip(this.components); labelPresets = new System.Windows.Forms.Label(); adcCalibrationFile = new System.Windows.Forms.Label(); gainCalibrationFile = new System.Windows.Forms.Label(); @@ -81,7 +83,7 @@ private void InitializeComponent() // labelPresets // labelPresets.AutoSize = true; - labelPresets.Location = new System.Drawing.Point(10, 219); + labelPresets.Location = new System.Drawing.Point(10, 217); labelPresets.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); labelPresets.Name = "labelPresets"; labelPresets.Size = new System.Drawing.Size(46, 26); @@ -229,6 +231,7 @@ private void InitializeComponent() // // panelOptions // + this.panelOptions.BackColor = System.Drawing.SystemColors.ControlLightLight; this.panelOptions.Controls.Add(this.buttonChooseAdcCalibrationFile); this.panelOptions.Controls.Add(this.buttonChooseGainCalibrationFile); this.panelOptions.Controls.Add(this.buttonEnableContacts); @@ -264,6 +267,7 @@ private void InitializeComponent() this.buttonChooseAdcCalibrationFile.Size = new System.Drawing.Size(28, 20); this.buttonChooseAdcCalibrationFile.TabIndex = 36; this.buttonChooseAdcCalibrationFile.Text = "..."; + this.toolTip.SetToolTip(this.buttonChooseAdcCalibrationFile, "Browse for an ADC calibration file."); this.buttonChooseAdcCalibrationFile.UseVisualStyleBackColor = true; this.buttonChooseAdcCalibrationFile.Click += new System.EventHandler(this.ButtonClick); // @@ -276,6 +280,7 @@ private void InitializeComponent() this.buttonChooseGainCalibrationFile.Size = new System.Drawing.Size(28, 20); this.buttonChooseGainCalibrationFile.TabIndex = 35; this.buttonChooseGainCalibrationFile.Text = "..."; + this.toolTip.SetToolTip(this.buttonChooseGainCalibrationFile, "Browse for a gain calibration file."); this.buttonChooseGainCalibrationFile.UseVisualStyleBackColor = true; this.buttonChooseGainCalibrationFile.Click += new System.EventHandler(this.ButtonClick); // @@ -288,7 +293,9 @@ private void InitializeComponent() this.buttonEnableContacts.Name = "buttonEnableContacts"; this.buttonEnableContacts.Size = new System.Drawing.Size(223, 36); this.buttonEnableContacts.TabIndex = 28; - this.buttonEnableContacts.Text = "Enable Selected Contacts"; + this.buttonEnableContacts.Text = "Enable Selected Electrodes"; + this.toolTip.SetToolTip(this.buttonEnableContacts, "Click and drag to select electrodes in the probe view. \r\nPress this button to ena" + + "ble the selected electrodes. \r\nNot all electrode combinations are possible."); this.buttonEnableContacts.UseVisualStyleBackColor = true; this.buttonEnableContacts.Click += new System.EventHandler(this.ButtonClick); // @@ -301,7 +308,9 @@ private void InitializeComponent() this.buttonClearSelections.Name = "buttonClearSelections"; this.buttonClearSelections.Size = new System.Drawing.Size(223, 36); this.buttonClearSelections.TabIndex = 27; - this.buttonClearSelections.Text = "Deselect Contacts"; + this.buttonClearSelections.Text = "Clear Electrode Selection"; + this.toolTip.SetToolTip(this.buttonClearSelections, "Deselect all electrodes in the probe view. \r\nNote that this does not disable elec" + + "trodes, but simply deselects them."); this.buttonClearSelections.UseVisualStyleBackColor = true; this.buttonClearSelections.Click += new System.EventHandler(this.ButtonClick); // @@ -327,6 +336,7 @@ private void InitializeComponent() this.buttonResetZoom.Size = new System.Drawing.Size(223, 36); this.buttonResetZoom.TabIndex = 22; this.buttonResetZoom.Text = "Reset Zoom"; + this.toolTip.SetToolTip(this.buttonResetZoom, "Reset the zoom in the probe view so that the probe is zoomed out and centered."); this.buttonResetZoom.UseVisualStyleBackColor = true; this.buttonResetZoom.Click += new System.EventHandler(this.ButtonClick); // @@ -371,7 +381,7 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxReference.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxReference.FormattingEnabled = true; - this.comboBoxReference.Location = new System.Drawing.Point(76, 191); + this.comboBoxReference.Location = new System.Drawing.Point(76, 192); this.comboBoxReference.Margin = new System.Windows.Forms.Padding(2); this.comboBoxReference.Name = "comboBoxReference"; this.comboBoxReference.Size = new System.Drawing.Size(157, 21); @@ -383,7 +393,7 @@ private void InitializeComponent() | System.Windows.Forms.AnchorStyles.Right))); this.comboBoxLfpGain.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxLfpGain.FormattingEnabled = true; - this.comboBoxLfpGain.Location = new System.Drawing.Point(76, 135); + this.comboBoxLfpGain.Location = new System.Drawing.Point(76, 136); this.comboBoxLfpGain.Margin = new System.Windows.Forms.Padding(2); this.comboBoxLfpGain.Name = "comboBoxLfpGain"; this.comboBoxLfpGain.Size = new System.Drawing.Size(157, 21); @@ -505,5 +515,6 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonChooseAdcCalibrationFile; private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.ToolTip toolTip; } } diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx index faba1f31..537dd7c0 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.resx @@ -147,6 +147,9 @@ 17, 17 + + 365, 17 + 41 diff --git a/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs index f24f9370..2138168a 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs @@ -164,7 +164,7 @@ private void InitializeComponent() // this.splitContainer1.Panel2.Controls.Add(this.panel1); this.splitContainer1.Size = new System.Drawing.Size(834, 509); - this.splitContainer1.SplitterDistance = 478; + this.splitContainer1.SplitterDistance = 479; this.splitContainer1.SplitterWidth = 3; this.splitContainer1.TabIndex = 2; // @@ -183,8 +183,8 @@ private void InitializeComponent() // splitContainer2.Panel2 // this.splitContainer2.Panel2.Controls.Add(this.panelChannelOptions); - this.splitContainer2.Size = new System.Drawing.Size(834, 478); - this.splitContainer2.SplitterDistance = 626; + this.splitContainer2.Size = new System.Drawing.Size(834, 479); + this.splitContainer2.SplitterDistance = 627; this.splitContainer2.SplitterWidth = 3; this.splitContainer2.TabIndex = 1; // @@ -195,7 +195,7 @@ private void InitializeComponent() this.panelProbe.Location = new System.Drawing.Point(0, 0); this.panelProbe.Margin = new System.Windows.Forms.Padding(2); this.panelProbe.Name = "panelProbe"; - this.panelProbe.Size = new System.Drawing.Size(626, 478); + this.panelProbe.Size = new System.Drawing.Size(627, 479); this.panelProbe.TabIndex = 1; // // panelTrackBar @@ -204,7 +204,7 @@ private void InitializeComponent() this.panelTrackBar.Controls.Add(label6); this.panelTrackBar.Controls.Add(label7); this.panelTrackBar.Controls.Add(this.trackBarProbePosition); - this.panelTrackBar.Location = new System.Drawing.Point(584, 2); + this.panelTrackBar.Location = new System.Drawing.Point(585, 2); this.panelTrackBar.Name = "panelTrackBar"; this.panelTrackBar.Size = new System.Drawing.Size(39, 474); this.panelTrackBar.TabIndex = 30; @@ -222,7 +222,7 @@ private void InitializeComponent() this.trackBarProbePosition.Size = new System.Drawing.Size(37, 470); this.trackBarProbePosition.TabIndex = 22; this.trackBarProbePosition.TickFrequency = 2; - this.trackBarProbePosition.TickStyle = System.Windows.Forms.TickStyle.Both; + this.trackBarProbePosition.TickStyle = System.Windows.Forms.TickStyle.TopLeft; this.trackBarProbePosition.Value = 50; this.trackBarProbePosition.Scroll += new System.EventHandler(this.TrackBarScroll); // @@ -243,18 +243,19 @@ private void InitializeComponent() this.panelChannelOptions.Location = new System.Drawing.Point(0, 0); this.panelChannelOptions.Margin = new System.Windows.Forms.Padding(2); this.panelChannelOptions.Name = "panelChannelOptions"; - this.panelChannelOptions.Size = new System.Drawing.Size(205, 478); + this.panelChannelOptions.Size = new System.Drawing.Size(204, 479); this.panelChannelOptions.TabIndex = 1; // // buttonChooseCalibrationFile // this.buttonChooseCalibrationFile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonChooseCalibrationFile.Location = new System.Drawing.Point(170, 24); + this.buttonChooseCalibrationFile.Location = new System.Drawing.Point(169, 24); this.buttonChooseCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.buttonChooseCalibrationFile.Name = "buttonChooseCalibrationFile"; this.buttonChooseCalibrationFile.Size = new System.Drawing.Size(28, 20); this.buttonChooseCalibrationFile.TabIndex = 34; this.buttonChooseCalibrationFile.Text = "..."; + this.toolTip.SetToolTip(this.buttonChooseCalibrationFile, "Browse for a gain calibration file."); this.buttonChooseCalibrationFile.UseVisualStyleBackColor = true; this.buttonChooseCalibrationFile.Click += new System.EventHandler(this.ButtonClick); // @@ -265,7 +266,7 @@ private void InitializeComponent() this.textBoxProbeCalibrationFile.Location = new System.Drawing.Point(11, 24); this.textBoxProbeCalibrationFile.Margin = new System.Windows.Forms.Padding(2); this.textBoxProbeCalibrationFile.Name = "textBoxProbeCalibrationFile"; - this.textBoxProbeCalibrationFile.Size = new System.Drawing.Size(155, 20); + this.textBoxProbeCalibrationFile.Size = new System.Drawing.Size(154, 20); this.textBoxProbeCalibrationFile.TabIndex = 33; this.textBoxProbeCalibrationFile.TextChanged += new System.EventHandler(this.FileTextChanged); // @@ -278,7 +279,7 @@ private void InitializeComponent() this.comboBoxReference.Location = new System.Drawing.Point(78, 58); this.comboBoxReference.Margin = new System.Windows.Forms.Padding(2); this.comboBoxReference.Name = "comboBoxReference"; - this.comboBoxReference.Size = new System.Drawing.Size(116, 21); + this.comboBoxReference.Size = new System.Drawing.Size(115, 21); this.comboBoxReference.TabIndex = 31; // // comboBoxChannelPresets @@ -290,7 +291,7 @@ private void InitializeComponent() this.comboBoxChannelPresets.Location = new System.Drawing.Point(78, 97); this.comboBoxChannelPresets.Margin = new System.Windows.Forms.Padding(2); this.comboBoxChannelPresets.Name = "comboBoxChannelPresets"; - this.comboBoxChannelPresets.Size = new System.Drawing.Size(116, 21); + this.comboBoxChannelPresets.Size = new System.Drawing.Size(115, 21); this.comboBoxChannelPresets.TabIndex = 24; // // buttonEnableContacts @@ -300,11 +301,11 @@ private void InitializeComponent() this.buttonEnableContacts.Location = new System.Drawing.Point(11, 138); this.buttonEnableContacts.Margin = new System.Windows.Forms.Padding(2); this.buttonEnableContacts.Name = "buttonEnableContacts"; - this.buttonEnableContacts.Size = new System.Drawing.Size(183, 36); + this.buttonEnableContacts.Size = new System.Drawing.Size(182, 36); this.buttonEnableContacts.TabIndex = 20; this.buttonEnableContacts.Text = "Enable Selected Electrodes"; - this.toolTip.SetToolTip(this.buttonEnableContacts, "Click and drag to select contacts in the probe view. \r\nPress this button to enabl" + - "e the selected contacts."); + this.toolTip.SetToolTip(this.buttonEnableContacts, "Click and drag to select electrodes in the probe view. \r\nPress this button to ena" + + "ble the selected electrodes. \r\nNot all electrode combinations are possible."); this.buttonEnableContacts.UseVisualStyleBackColor = true; this.buttonEnableContacts.Click += new System.EventHandler(this.ButtonClick); // @@ -315,11 +316,11 @@ private void InitializeComponent() this.buttonClearSelections.Location = new System.Drawing.Point(11, 178); this.buttonClearSelections.Margin = new System.Windows.Forms.Padding(2); this.buttonClearSelections.Name = "buttonClearSelections"; - this.buttonClearSelections.Size = new System.Drawing.Size(183, 36); + this.buttonClearSelections.Size = new System.Drawing.Size(182, 36); this.buttonClearSelections.TabIndex = 19; this.buttonClearSelections.Text = "Clear Electrode Selection"; - this.toolTip.SetToolTip(this.buttonClearSelections, "Remove selections from contacts in the probe view. Press this button to deselect " + - "contacts.\r\nNote that this does not disable contacts, but simply deselects them."); + this.toolTip.SetToolTip(this.buttonClearSelections, "Deselect all electrodes in the probe view. \r\nNote that this does not disable elec" + + "trodes, but simply deselects them."); this.buttonClearSelections.UseVisualStyleBackColor = true; this.buttonClearSelections.Click += new System.EventHandler(this.ButtonClick); // @@ -330,11 +331,10 @@ private void InitializeComponent() this.buttonResetZoom.Location = new System.Drawing.Point(11, 218); this.buttonResetZoom.Margin = new System.Windows.Forms.Padding(2); this.buttonResetZoom.Name = "buttonResetZoom"; - this.buttonResetZoom.Size = new System.Drawing.Size(183, 36); + this.buttonResetZoom.Size = new System.Drawing.Size(182, 36); this.buttonResetZoom.TabIndex = 4; this.buttonResetZoom.Text = "Reset Zoom"; - this.toolTip.SetToolTip(this.buttonResetZoom, "Reset the zoom in the probe view so that the probe is zoomed out and centered.\r\nP" + - "ress this button to reset the zoom."); + this.toolTip.SetToolTip(this.buttonResetZoom, "Reset the zoom in the probe view so that the probe is zoomed out and centered."); this.buttonResetZoom.UseVisualStyleBackColor = true; this.buttonResetZoom.Click += new System.EventHandler(this.ButtonClick); // @@ -346,14 +346,14 @@ private void InitializeComponent() this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Margin = new System.Windows.Forms.Padding(2); this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(834, 28); + this.panel1.Size = new System.Drawing.Size(834, 27); this.panel1.TabIndex = 0; // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(744, 2); + this.buttonCancel.Location = new System.Drawing.Point(744, 1); this.buttonCancel.Margin = new System.Windows.Forms.Padding(2); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(83, 22); @@ -365,7 +365,7 @@ private void InitializeComponent() // buttonOkay // this.buttonOkay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.buttonOkay.Location = new System.Drawing.Point(655, 2); + this.buttonOkay.Location = new System.Drawing.Point(655, 1); this.buttonOkay.Margin = new System.Windows.Forms.Padding(2); this.buttonOkay.Name = "buttonOkay"; this.buttonOkay.Size = new System.Drawing.Size(83, 22); From d989371789ce2cbef02de69b51ad3893d4c8567b Mon Sep 17 00:00:00 2001 From: bparks13 Date: Thu, 22 Aug 2024 13:26:51 -0400 Subject: [PATCH 6/7] Ensure that settings are saved correctly after loading --- OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs index 45b09a75..40448ab3 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV1eDialog.cs @@ -58,7 +58,7 @@ public NeuropixelsV1eDialog(ConfigureNeuropixelsV1e configureNode) this.AddMenuItemsFromDialogToFileOption(ChannelConfiguration); ChannelConfiguration.OnZoom += UpdateTrackBarLocation; - ChannelConfiguration.OnFileLoad += UpdateChannelPresetIndex; + ChannelConfiguration.OnFileLoad += OnFileLoadEvent; comboBoxApGain.DataSource = Enum.GetValues(typeof(NeuropixelsV1Gain)); comboBoxApGain.SelectedItem = ConfigureNode.ProbeConfiguration.SpikeAmplifierGain; @@ -230,8 +230,10 @@ private void CheckForExistingChannelPreset() } } - private void UpdateChannelPresetIndex(object sender, EventArgs e) + private void OnFileLoadEvent(object sender, EventArgs e) { + // NB: Ensure that the newly loaded ProbeConfiguration in the ChannelConfigurationDialog is reflected here. + ConfigureNode.ProbeConfiguration = ChannelConfiguration.ProbeConfiguration; CheckForExistingChannelPreset(); } From a9236bc2f958b2127cadfd002eb38d6779edcfbf Mon Sep 17 00:00:00 2001 From: bparks13 Date: Thu, 22 Aug 2024 13:43:11 -0400 Subject: [PATCH 7/7] Fix merge conflict - A panel was removed, but the relevant code was left in place, leading to build errors --- ...NeuropixelsV2eProbeConfigurationDialog.Designer.cs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs b/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs index b6445355..de302bb2 100644 --- a/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs +++ b/OpenEphys.Onix1.Design/NeuropixelsV2eProbeConfigurationDialog.Designer.cs @@ -337,17 +337,6 @@ private void InitializeComponent() this.buttonResetZoom.UseVisualStyleBackColor = true; this.buttonResetZoom.Click += new System.EventHandler(this.ButtonClick); // - // panel1 - // - this.panel1.Controls.Add(this.buttonCancel); - this.panel1.Controls.Add(this.buttonOkay); - this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.panel1.Location = new System.Drawing.Point(0, 0); - this.panel1.Margin = new System.Windows.Forms.Padding(2); - this.panel1.Name = "panel1"; - this.panel1.Size = new System.Drawing.Size(834, 27); - this.panel1.TabIndex = 0; - // // buttonCancel // this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)