Changeset 4876
- Timestamp:
- 11/20/10 17:01:31 (14 years ago)
- Location:
- branches/HeuristicLab.DebugEngine
- Files:
-
- 6 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.DebugEngine/DebugEngineView.Designer.cs
r4871 r4876 50 50 this.executionTimeTextBox = new System.Windows.Forms.TextBox(); 51 51 this.executionStackView = new HeuristicLab.DebugEngine.ExecutionStackView(); 52 this.operationContentView = new HeuristicLab.DebugEngine.OperationContentView(); 52 53 this.logView = new HeuristicLab.Core.Views.LogView(); 53 54 this.splitContainer1 = new System.Windows.Forms.SplitContainer(); 54 55 this.splitContainer2 = new System.Windows.Forms.SplitContainer(); 55 this.splitContainer3 = new System.Windows.Forms.SplitContainer();56 this.parameterCollectionView = new HeuristicLab.Core.Views.ParameterCollectionView();57 this.label3 = new System.Windows.Forms.Label();58 this.scopeTreeView = new System.Windows.Forms.TreeView();59 this.label4 = new System.Windows.Forms.Label();60 this.operationTextBox = new System.Windows.Forms.TextBox();61 56 this.stepButton = new System.Windows.Forms.Button(); 62 this.updateButton = new System.Windows.Forms.Button();63 57 this.toolTip = new System.Windows.Forms.ToolTip(this.components); 64 this.parentButton = new System.Windows.Forms.Button();65 58 this.splitContainer1.Panel1.SuspendLayout(); 66 59 this.splitContainer1.Panel2.SuspendLayout(); … … 69 62 this.splitContainer2.Panel2.SuspendLayout(); 70 63 this.splitContainer2.SuspendLayout(); 71 this.splitContainer3.Panel1.SuspendLayout();72 this.splitContainer3.Panel2.SuspendLayout();73 this.splitContainer3.SuspendLayout();74 64 this.SuspendLayout(); 75 65 // … … 90 80 this.executionTimeTextBox.Name = "executionTimeTextBox"; 91 81 this.executionTimeTextBox.ReadOnly = true; 92 this.executionTimeTextBox.Size = new System.Drawing.Size( 684, 20);82 this.executionTimeTextBox.Size = new System.Drawing.Size(747, 20); 93 83 this.executionTimeTextBox.TabIndex = 1; 94 84 // … … 101 91 this.executionStackView.Name = "executionStackView"; 102 92 this.executionStackView.ReadOnly = false; 103 this.executionStackView.Size = new System.Drawing.Size( 433, 262);93 this.executionStackView.Size = new System.Drawing.Size(252, 262); 104 94 this.executionStackView.TabIndex = 0; 95 // 96 // operationContentView 97 // 98 this.operationContentView.Caption = "Operation Content View"; 99 this.operationContentView.Content = null; 100 this.operationContentView.Dock = System.Windows.Forms.DockStyle.Fill; 101 this.operationContentView.Location = new System.Drawing.Point(0, 0); 102 this.operationContentView.Name = "operationContentView"; 103 this.operationContentView.ReadOnly = false; 104 this.operationContentView.Size = new System.Drawing.Size(610, 503); 105 this.operationContentView.TabIndex = 0; 105 106 // 106 107 // logView … … 112 113 this.logView.Name = "logView"; 113 114 this.logView.ReadOnly = false; 114 this.logView.Size = new System.Drawing.Size( 433, 237);115 this.logView.Size = new System.Drawing.Size(252, 237); 115 116 this.logView.TabIndex = 2; 116 117 // … … 129 130 // 130 131 this.splitContainer1.Panel2.Controls.Add(this.logView); 131 this.splitContainer1.Size = new System.Drawing.Size( 433, 503);132 this.splitContainer1.Size = new System.Drawing.Size(252, 503); 132 133 this.splitContainer1.SplitterDistance = 262; 133 134 this.splitContainer1.TabIndex = 3; … … 147 148 // splitContainer2.Panel2 148 149 // 149 this.splitContainer2.Panel2.Controls.Add(this.splitContainer3); 150 this.splitContainer2.Panel2.Controls.Add(this.label4); 151 this.splitContainer2.Panel2.Controls.Add(this.operationTextBox); 150 this.splitContainer2.Panel2.Controls.Add(this.operationContentView); 152 151 this.splitContainer2.Size = new System.Drawing.Size(866, 503); 153 this.splitContainer2.SplitterDistance = 433;152 this.splitContainer2.SplitterDistance = 252; 154 153 this.splitContainer2.TabIndex = 0; 155 //156 // splitContainer3157 //158 this.splitContainer3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)159 | System.Windows.Forms.AnchorStyles.Left)160 | System.Windows.Forms.AnchorStyles.Right)));161 this.splitContainer3.Location = new System.Drawing.Point(3, 29);162 this.splitContainer3.Name = "splitContainer3";163 this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal;164 //165 // splitContainer3.Panel1166 //167 this.splitContainer3.Panel1.Controls.Add(this.parameterCollectionView);168 //169 // splitContainer3.Panel2170 //171 this.splitContainer3.Panel2.Controls.Add(this.label3);172 this.splitContainer3.Panel2.Controls.Add(this.scopeTreeView);173 this.splitContainer3.Size = new System.Drawing.Size(423, 471);174 this.splitContainer3.SplitterDistance = 235;175 this.splitContainer3.TabIndex = 4;176 //177 // parameterCollectionView178 //179 this.parameterCollectionView.Caption = "ParameterCollection View";180 this.parameterCollectionView.Content = null;181 this.parameterCollectionView.Dock = System.Windows.Forms.DockStyle.Fill;182 this.parameterCollectionView.Location = new System.Drawing.Point(0, 0);183 this.parameterCollectionView.Name = "parameterCollectionView";184 this.parameterCollectionView.ReadOnly = false;185 this.parameterCollectionView.Size = new System.Drawing.Size(423, 235);186 this.parameterCollectionView.TabIndex = 0;187 //188 // label3189 //190 this.label3.AutoSize = true;191 this.label3.Location = new System.Drawing.Point(3, 0);192 this.label3.Name = "label3";193 this.label3.Size = new System.Drawing.Size(63, 13);194 this.label3.TabIndex = 1;195 this.label3.Text = "Scope Tree";196 //197 // scopeTreeView198 //199 this.scopeTreeView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)200 | System.Windows.Forms.AnchorStyles.Left)201 | System.Windows.Forms.AnchorStyles.Right)));202 this.scopeTreeView.Location = new System.Drawing.Point(3, 16);203 this.scopeTreeView.Name = "scopeTreeView";204 this.scopeTreeView.ShowNodeToolTips = true;205 this.scopeTreeView.Size = new System.Drawing.Size(417, 216);206 this.scopeTreeView.TabIndex = 0;207 this.scopeTreeView.NodeMouseDoubleClick += new System.Windows.Forms.TreeNodeMouseClickEventHandler(this.scopeTreeView_NodeMouseDoubleClick);208 //209 // label4210 //211 this.label4.AutoSize = true;212 this.label4.Location = new System.Drawing.Point(3, 6);213 this.label4.Name = "label4";214 this.label4.Size = new System.Drawing.Size(56, 13);215 this.label4.TabIndex = 3;216 this.label4.Text = "Operation:";217 //218 // operationTextBox219 //220 this.operationTextBox.Location = new System.Drawing.Point(65, 3);221 this.operationTextBox.Name = "operationTextBox";222 this.operationTextBox.ReadOnly = true;223 this.operationTextBox.Size = new System.Drawing.Size(267, 20);224 this.operationTextBox.TabIndex = 2;225 154 // 226 155 // stepButton … … 228 157 this.stepButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 229 158 this.stepButton.Image = ((System.Drawing.Image)(resources.GetObject("stepButton.Image"))); 230 this.stepButton.Location = new System.Drawing.Point(8 12, 3);159 this.stepButton.Location = new System.Drawing.Point(845, 3); 231 160 this.stepButton.Name = "stepButton"; 232 161 this.stepButton.Size = new System.Drawing.Size(24, 24); … … 236 165 this.stepButton.Click += new System.EventHandler(this.stepButton_Click); 237 166 // 238 // updateButton239 //240 this.updateButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));241 this.updateButton.Image = ((System.Drawing.Image)(resources.GetObject("updateButton.Image")));242 this.updateButton.Location = new System.Drawing.Point(842, 3);243 this.updateButton.Name = "updateButton";244 this.updateButton.Size = new System.Drawing.Size(24, 24);245 this.updateButton.TabIndex = 5;246 this.toolTip.SetToolTip(this.updateButton, "Refresh/Reset View");247 this.updateButton.UseVisualStyleBackColor = true;248 this.updateButton.Click += new System.EventHandler(this.updateButton_Click);249 //250 // parentButton251 //252 this.parentButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));253 this.parentButton.Image = ((System.Drawing.Image)(resources.GetObject("parentButton.Image")));254 this.parentButton.Location = new System.Drawing.Point(782, 3);255 this.parentButton.Name = "parentButton";256 this.parentButton.Size = new System.Drawing.Size(24, 24);257 this.parentButton.TabIndex = 6;258 this.toolTip.SetToolTip(this.parentButton, "Go to parent ExecutionContext");259 this.parentButton.UseVisualStyleBackColor = true;260 this.parentButton.Click += new System.EventHandler(this.parentButton_Click);261 //262 167 // DebugEngineView 263 168 // 264 169 this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 265 this.Controls.Add(this.parentButton);266 170 this.Controls.Add(this.splitContainer2); 267 this.Controls.Add(this.updateButton);268 171 this.Controls.Add(this.stepButton); 269 172 this.Controls.Add(this.executionTimeTextBox); … … 276 179 this.splitContainer2.Panel1.ResumeLayout(false); 277 180 this.splitContainer2.Panel2.ResumeLayout(false); 278 this.splitContainer2.Panel2.PerformLayout();279 181 this.splitContainer2.ResumeLayout(false); 280 this.splitContainer3.Panel1.ResumeLayout(false);281 this.splitContainer3.Panel2.ResumeLayout(false);282 this.splitContainer3.Panel2.PerformLayout();283 this.splitContainer3.ResumeLayout(false);284 182 this.ResumeLayout(false); 285 183 this.PerformLayout(); … … 294 192 private System.Windows.Forms.SplitContainer splitContainer1; 295 193 private System.Windows.Forms.SplitContainer splitContainer2; 296 private System.Windows.Forms.Label label3;297 private System.Windows.Forms.TreeView scopeTreeView;298 194 private System.Windows.Forms.Button stepButton; 299 private System.Windows.Forms.Button updateButton;300 195 private System.Windows.Forms.ToolTip toolTip; 301 private System.Windows.Forms.Button parentButton;302 private System.Windows.Forms.Label label4;303 private System.Windows.Forms.TextBox operationTextBox;304 private System.Windows.Forms.SplitContainer splitContainer3;305 private Core.Views.ParameterCollectionView parameterCollectionView;306 196 private HeuristicLab.DebugEngine.ExecutionStackView executionStackView; 197 private HeuristicLab.DebugEngine.OperationContentView operationContentView; 307 198 308 199 } -
branches/HeuristicLab.DebugEngine/DebugEngineView.cs
r4871 r4876 54 54 public DebugEngineView() { 55 55 InitializeComponent(); 56 updateButton.Image = VS2008ImageLibrary.Refresh;57 stepButton.Image = VS2008ImageLibrary.MoveNext;58 parentButton.Image = VS2008ImageLibrary.ArrowUp;59 56 } 60 57 … … 91 88 executionTimeTextBox.Text = "-"; 92 89 executionStackView.Content = null; 90 operationContentView.Content = null; 93 91 } else { 94 92 logView.Content = Content.Log; 95 93 executionTimeTextBox.Text = Content.ExecutionTime.ToString(); 96 94 executionStackView.Content = Content.ExecutionStack; 95 operationContentView.Content = new OperationContent(Content.CurrentOperation); 97 96 } 98 97 } … … 103 102 logView.Enabled = false; 104 103 executionTimeTextBox.Enabled = false; 104 stepButton.Enabled = false; 105 105 } else { 106 106 logView.Enabled = true; 107 107 executionTimeTextBox.Enabled = true; 108 stepButton.Enabled = Content.CanContinue; 108 109 } 109 110 } … … 124 125 switch (Content.ExecutionState) { 125 126 case ExecutionState.Started: executionStackView.SuspendUpdate(); break; 126 default: executionStackView.ResumeUpdate(); break; 127 default: 128 executionStackView.ResumeUpdate(); 129 operationContentView.Content = new OperationContent(Content.CurrentOperation); 130 break; 127 131 } 132 SetEnabledStateOfControls(); 128 133 } 129 134 } 130 135 131 #region Current Operation132 133 136 void Content_CurrentOperationChanged(object sender, OperationChangedEventArgs e) { 134 if (InvokeRequired) 137 if (InvokeRequired) { 135 138 Invoke(new EventHandler<OperationChangedEventArgs>(Content_CurrentOperationChanged), sender, e); 136 else137 SetOperation(Content.CurrentOperation);138 }139 140 private void SetOperation(IOperation operation) {141 IAtomicOperation atomicOperation = operation as IAtomicOperation;142 operationTextBox.Text = "<none>";143 parameterCollectionView.Content = null;144 toolTip.SetToolTip(operationTextBox, null);145 if (atomicOperation != null && atomicOperation.Operator != null) {146 operationTextBox.Text = string.Format("Atomic {0}", atomicOperation.Operator.Name);147 toolTip.SetToolTip(operationTextBox, Utils.TypeName(atomicOperation.Operator));148 }149 OperationCollection operationCollection = operation as OperationCollection;150 if (operationCollection != null)151 operationTextBox.Text = string.Format("Collection {0}", operationCollection.Count);152 IExecutionContext context = operation as IExecutionContext;153 IScope scope = null;154 if (context != null) {155 parameterCollectionView.Content = context.Parameters;156 scope = context.Scope;157 while (scope != null && scope.Parent != null)158 scope = scope.Parent;159 }160 UpdateScope(scope);161 if (context != null)162 parentButton.Enabled = context.Parent != null;163 scopeTreeView.Tag = context;164 }165 166 private void UpdateScope(IScope scope) {167 scopeTreeView.BeginUpdate();168 scopeTreeView.Nodes.Clear();169 if (scope != null) {170 AddScope(scopeTreeView.Nodes, scope);171 }172 scopeTreeView.ExpandAll();173 if (scopeTreeView.Nodes.Count > 0)174 scopeTreeView.TopNode = scopeTreeView.Nodes[0];175 scopeTreeView.EndUpdate();176 }177 178 179 180 /*181 private string GetApproximateValue(IParameter param, ref string typeName) {182 string valueString = "<none>";183 IExecutionContext context = Content.CurrentOperation as IExecutionContext;184 IExecutionContext originalContext = param.ExecutionContext;185 object value = null;186 try {187 try {188 param.ExecutionContext = context;189 value = param.ActualValue;190 } finally {191 param.ExecutionContext = originalContext;192 }193 } catch (Exception) { }194 if (value != null) {195 valueString = value.ToString();196 if (context != originalContext)197 valueString = " ~ " + valueString;198 typeName = TypeName(value);199 }200 return valueString;201 }202 */203 204 private void AddScope(TreeNodeCollection nodes, IScope scope) {205 TreeNode node = nodes.Add(scope.Name);206 if (Content.CurrentAtomicOperation != null && Content.CurrentAtomicOperation.Scope == scope) {207 node.ForeColor = Color.Red;208 node.BackColor = Color.LightGray;209 }210 foreach (var var in scope.Variables) {211 TreeNode varNode = node.Nodes.Add(string.Format("{0}={1}", var.Name, var.Value.ToString()));212 varNode.Tag = var.Value;213 varNode.ToolTipText = Utils.TypeName(var.Value);214 }215 foreach (var subScope in scope.SubScopes) {216 AddScope(node.Nodes, subScope);217 }218 }219 220 #endregion221 222 protected virtual void UpdateView() {223 if (InvokeRequired) {224 Invoke(new Action(UpdateView));225 139 } else { 226 SetOperation(Content.CurrentOperation); 140 if (Content.ExecutionState != ExecutionState.Started) 141 operationContentView.Content = new OperationContent(Content.CurrentOperation); 227 142 } 228 143 } … … 230 145 private void stepButton_Click(object sender, EventArgs e) { 231 146 Content.Step(); 232 UpdateView();233 147 } 234 148 235 private void updateButton_Click(object sender, EventArgs e) {236 UpdateView();237 }238 239 private void scopeTreeView_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) {240 if (e.Node.Tag != null)241 MainFormManager.MainForm.ShowContent((IItem)e.Node.Tag);242 }243 244 private void parentButton_Click(object sender, EventArgs e) {245 IExecutionContext context = scopeTreeView.Tag as IExecutionContext;246 if (context != null) {247 SetOperation(context.Parent as IOperation);248 }249 }250 149 } 251 150 } -
branches/HeuristicLab.DebugEngine/DebugEngineView.resx
r4871 r4876 122 122 <value> 123 123 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 124 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALD gAA125 Cw 4BQL7hQQAAARBJREFUOE9j+P//PwM6Tuh5woxNHJsYhmaQIqABMkDMRIwhWA0onPX8f/zkt0rEGILV124 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDAAA 125 CwwBP0AiyAAAARBJREFUOE9j+P//PwM6Tuh5woxNHJsYhmaQIqABMkDMRIwhWA0onPX8f/zkt0rEGILV 126 126 gNyZz/4ndN/7HzfhtQYh72A1IGPK0//z9v/+H9Rw8zXQAFt8huAKg/+z9/3637n173+30sv/gQbY4zIE 127 127 qwGRXY/+T9n263/J0r//E6b//W+TexanIVgNCGx++L917XuwZuOSL/+lo6/9N45c9t+h6Gw8ukuwGuBR … … 134 134 <value>17, 17</value> 135 135 </metadata> 136 <data name="updateButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">137 <value>138 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8139 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDQAA140 Cw0B7QfALAAAAmJJREFUOE+dk21IU1Ecxt3MCBX8MLRsvhHmtI0SM6OImSFR+kECKSiDvgRFX6IiKnKa141 C9dsVmtbU2sWhCFBSvamFDFwrRcZbH7YmEZ2t9Y2Z24zU3ev29M9w0XS9UsXHg6Hc5/fec75/09S0tJH142 BweS6dAQnw4bM5kZcyrz82Mmqwxm5n02EzKuoqdf8civ8967koTnn5GZHckzjX1Au1GD+sdHUdVVC+mt143 fbjcL4eNcoTosPmIyqgHJyDi6xH0j75E3fMGyCYUULg0uOJQocnRhhOfzqHyTg2sE3aU3NzGDXB4xoPE144 fHXiBmr7DiGraQPWyTfimPFUHNTsuB6HFCjF3IALT5vRYDqJ7eo9aB/UYtTlxJiXQk6LKJ4qoWx5ITfg145 gOEwpJ370Wd5AWYxJqYXY2n+wDRsbucyiKAxnxtQ0VmF809kxFzKikczMV6vZQD5CglyFcUgOxNzxkUh146 N2CLdidGvtjgm/yRQm7Z4w3kuL/7U755J9d4fIHV7JxPuX1rnZ8pbgC7I5a0lx2TI3Rsl9vj581Hovy5147 hSjvF6vZuWiabFjJDSgzVGKzfgeKb5cHC9okYWGrCB3mh1igowKSiIVUdwzfR4l2hTJuNUihdOniJStU148 lcJC2clxwCbIJSms1BhqHtVjfWMRd4JNuoo/AAIRqcth+WpnO3AcXaaeeFeSUh5/cJobwMZG0bWyZTUn149 poSRmIUyEe697eUG5LWK8cz6GkK2cf42JRqImBVDGgRCzG7Ot6B/0w32ovDOYcGl3hbU6g4i/WwW0s9k150 oVpdB+1gN6bCTKpniuav+Br/Z+E3/RykhyEkCzoAAAAASUVORK5CYII=151 </value>152 </data>153 <data name="parentButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">154 <value>155 iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8156 YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAALDwAA157 Cw8BkvkDpQAAANpJREFUOE9j+P//PwMlGK9m99JLxoQMx2mAqu9cqbI5L/4DDYnAZwhWA2Ca5+37+98w158 bNF/45gNvrgMwTAAWXP+3B//nfKO/NcKWIDTEBQDkDW3rvv3P7Ln03+Psov/7bP2/9fwm4vVEBQDQH4u159 nvn0P4iuXfH/f9zkP//96+/91wxZ/R9o+H8Vz2lAn6DGGtYwABkAcgHMAHX/RRgaYQbhNGDy9r//c+f9160 BbtA1XsW6QaAYqBi6UAasOzwb8pcADIAFIUgrOw+ifQwAGlCxkSnREKZh6h0QIohAFsI3u6Zj7KhAAAA161 AElFTkSuQmCC162 </value>163 </data>164 136 </root> -
branches/HeuristicLab.DebugEngine/HeuristicLab.DebugEngine.csproj
r4871 r4876 133 133 </Compile> 134 134 <Compile Include="OperationChangedEventArgs.cs" /> 135 <Compile Include="OperationContent.cs" /> 136 <Compile Include="OperationContentView.cs"> 137 <SubType>UserControl</SubType> 138 </Compile> 139 <Compile Include="OperationContentView.Designer.cs"> 140 <DependentUpon>OperationContentView.cs</DependentUpon> 141 </Compile> 135 142 <Compile Include="Properties\AssemblyInfo.cs" /> 143 <Compile Include="Properties\Resources.Designer.cs"> 144 <AutoGen>True</AutoGen> 145 <DesignTime>True</DesignTime> 146 <DependentUpon>Resources.resx</DependentUpon> 147 </Compile> 136 148 <Compile Include="Utils.cs" /> 137 149 </ItemGroup> … … 142 154 <EmbeddedResource Include="ExecutionStackView.resx"> 143 155 <DependentUpon>ExecutionStackView.cs</DependentUpon> 156 </EmbeddedResource> 157 <EmbeddedResource Include="OperationContentView.resx"> 158 <DependentUpon>OperationContentView.cs</DependentUpon> 159 </EmbeddedResource> 160 <EmbeddedResource Include="Properties\Resources.resx"> 161 <Generator>ResXFileCodeGenerator</Generator> 162 <LastGenOutput>Resources.Designer.cs</LastGenOutput> 144 163 </EmbeddedResource> 145 164 </ItemGroup>
Note: See TracChangeset
for help on using the changeset viewer.