diff --git a/ChangeLogGenerator.cs b/ChangeLogGenerator.cs index 3418bc8a..1e0d7976 100644 --- a/ChangeLogGenerator.cs +++ b/ChangeLogGenerator.cs @@ -12,9 +12,16 @@ public class ChangeLogGenerator /// Creates change log entries in current project based on a previous project. /// /// The previous project for which definitions are compared. - /// The current project where change log entries are generated. - public static void Generate(DocProject projectPrev, DocProject projectCurr) + /// The current project where change log entries are generated. + /// The publication where to record change logs + public static void Generate(DocProject projectPrev, DocProject docProject, DocPublication docPublication) { + List listChangeSets = docProject.ChangeSets; + if(docPublication != null) + { + listChangeSets = docPublication.ChangeSets; + } + // copy over any previous change logs foreach(DocChangeSet prevCS in projectPrev.ChangeSets) { @@ -23,7 +30,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) currCS.Documentation = prevCS.Documentation; currCS.VersionBaseline = prevCS.VersionBaseline; currCS.VersionCompared = prevCS.VersionCompared; - projectCurr.ChangeSets.Add(currCS); + listChangeSets.Add(currCS); foreach(DocChangeAction prevCA in prevCS.ChangesEntities) { @@ -52,7 +59,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) // build maps Dictionary mapNew = new Dictionary(); - foreach (DocSection docSection in projectCurr.Sections) + foreach (DocSection docSection in docProject.Sections) { foreach (DocSchema docSchema in docSection.Schemas) { @@ -83,14 +90,14 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) } DocChangeSet docChangeSet = new DocChangeSet(); - projectCurr.ChangeSets.Add(docChangeSet); - docChangeSet.Name = projectPrev.Sections[0].Code; + listChangeSets.Add(docChangeSet); + docChangeSet.Name = projectPrev.GetSchemaIdentifier(); docChangeSet.VersionBaseline = projectPrev.Sections[0].Version; // iterate through each schema (new and old) for (int iSection = 4; iSection < 8; iSection++) { - DocSection docSection = projectCurr.Sections[iSection]; + DocSection docSection = docProject.Sections[iSection]; DocSection docSectionBase = projectPrev.Sections[iSection]; DocChangeAction docChangeSection = new DocChangeAction(); @@ -561,6 +568,20 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; docChangeAttribute.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.AGGREGATION, docAttributeBase.GetAggregation().ToString(), docAttribute.GetAggregation().ToString())); } + + if (docAttribute.XsdFormat != docAttributeBase.XsdFormat) + { + docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; + docChangeAttribute.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.XSDFORMAT, docAttributeBase.XsdFormat.ToString(), docAttribute.XsdFormat.ToString())); + docChangeAttribute.ImpactXML = true; + } + if (docAttribute.XsdTagless.GetValueOrDefault() != docAttributeBase.XsdTagless.GetValueOrDefault()) + { + docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; + docChangeAttribute.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.XSDTAGLESS, docAttributeBase.XsdTagless.GetValueOrDefault().ToString(), docAttribute.XsdTagless.GetValueOrDefault().ToString())); + docChangeAttribute.ImpactXML = true; + } + } } @@ -677,7 +698,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) { // entity may have moved to other schema; check other schemas DocSchema docThatSchema = null; - foreach (DocSection docOtherSection in projectCurr.Sections) + foreach (DocSection docOtherSection in docProject.Sections) { foreach (DocSchema docOtherSchema in docOtherSection.Schemas) { @@ -719,14 +740,194 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) // property sets foreach (DocPropertySet docPset in docSchema.PropertySets) + { + if (docPset.IsVisible()) + { + DocChangeAction docChangePset = new DocChangeAction(); + docChangeSchemaProperties.Changes.Add(docChangePset); + docChangePset.Name = docPset.Name; + + // find equivalent pset + DocPropertySet docPsetBase = null; + foreach (DocPropertySet docEntityEach in docSchemaBase.PropertySets) + { + if (docEntityEach.Name.Equals(docPset.Name)) + { + docPsetBase = docEntityEach; + break; + } + } + + if (docPsetBase == null) + { + // new entity + docChangePset.Action = DocChangeActionEnum.ADDED; + + // check if it was moved from another schema + foreach (DocSection docOtherSection in projectPrev.Sections) + { + foreach (DocSchema docOtherSchema in docOtherSection.Schemas) + { + foreach (DocPropertySet docOtherPset in docOtherSchema.PropertySets) + { + if (docOtherPset.Name.Equals(docPset.Name)) + { + docPsetBase = docOtherPset; // still compare attributes if moved (e.g. IfcRelSequence) + + docChangePset.Action = DocChangeActionEnum.MOVED; + docChangePset.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.SCHEMA, docOtherSchema.Name.ToUpper(), docSchema.Name.ToUpper())); + } + } + } + } + + } + + if (docPsetBase != null) + { + // existing entity + + // compare abstract vs. non-abstract + if (docPset.ApplicableType != docPsetBase.ApplicableType) + { + docChangePset.Action = DocChangeActionEnum.MODIFIED; + docChangePset.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.INSTANTIATION, docPsetBase.ApplicableType, docPset.ApplicableType)); + } + + // compare attributes by index + + // only report non-abstract entities; e.g. attributes may be demoted without file impact + + + foreach (DocProperty docAttribute in docPset.Properties) + { + // we only care about direct attributes + DocChangeAction docChangeAttribute = new DocChangeAction(); + docChangePset.Changes.Add(docChangeAttribute); + docChangeAttribute.Name = docAttribute.Name; + + DocProperty docAttributeBase = null; + foreach (DocProperty docEachProperty in docPsetBase.Properties) + { + if (docEachProperty.Name.Equals(docAttribute.Name)) + { + docAttributeBase = docEachProperty; + break; + } + } + + if (docAttributeBase == null) + { + // new attribute added + docChangeAttribute.Action = DocChangeActionEnum.ADDED; + } + else + { + // compare for changes + if (!docAttribute.PropertyType.Equals(docAttributeBase.PropertyType)) + { + DocChangeAspect docAspect = new DocChangeAspect(DocChangeAspectEnum.INSTANTIATION, docAttributeBase.PropertyType.ToString(), docAttribute.PropertyType.ToString()); + docChangeAttribute.Aspects.Add(docAspect); + docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; + } + + if (docAttribute.PrimaryDataType != null && docAttributeBase.PrimaryDataType != null && + !docAttribute.PrimaryDataType.Trim().Equals(docAttributeBase.PrimaryDataType.Trim())) + { + DocChangeAspect docAspect = new DocChangeAspect(DocChangeAspectEnum.TYPE, docAttributeBase.PrimaryDataType, docAttribute.PrimaryDataType); + docChangeAttribute.Aspects.Add(docAspect); + docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; + } + } + } + + // report deleted properties + foreach (DocProperty docAttributeBase in docPsetBase.Properties) + { + DocProperty docAttribute = null; + foreach (DocProperty docEachProperty in docPset.Properties) + { + if (docEachProperty.Name.Equals(docAttributeBase.Name)) + { + docAttribute = docEachProperty; + break; + } + } + + if (docAttribute == null) + { + DocChangeAction docChangeAttribute = new DocChangeAction(); + docChangePset.Changes.Add(docChangeAttribute); + docChangeAttribute.Name = docAttributeBase.Name; + docChangeAttribute.Action = DocChangeActionEnum.DELETED; + } + } + } + } + } + + // now find deleted psets + foreach (DocPropertySet docEntityBase in docSchemaBase.PropertySets) + { + // find equivalent + DocPropertySet docEntity = null; + foreach (DocPropertySet docEntityEach in docSchema.PropertySets) + { + if (docEntityEach.Name.Equals(docEntityBase.Name)) + { + docEntity = docEntityEach; + break; + } + } + + if (docEntity == null) + { + // entity may have moved to other schema; check other schemas + DocSchema docThatSchema = null; + foreach (DocSection docOtherSection in docProject.Sections) + { + foreach (DocSchema docOtherSchema in docOtherSection.Schemas) + { + foreach (DocPropertySet docOtherEntity in docOtherSchema.PropertySets) + { + if (docOtherEntity.Name.Equals(docEntityBase.Name)) + { + docEntity = docOtherEntity; + docThatSchema = docOtherSchema; + } + } + } + } + + DocChangeAction docChangeEntity = new DocChangeAction(); + docChangeSchemaProperties.Changes.Add(docChangeEntity); + docChangeEntity.Name = docEntityBase.Name; + + if (docEntity != null) + { + // moved from another schema + docChangeEntity.Action = DocChangeActionEnum.MOVED; + docChangeEntity.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.SCHEMA, docSchema.Name.ToUpper(), docThatSchema.Name.ToUpper())); + } + else + { + // otherwise, deleted + docChangeEntity.Action = DocChangeActionEnum.DELETED; + } + } + } + // end property sets + + // property enums + foreach (DocPropertyEnumeration docPset in docSchema.PropertyEnums) { DocChangeAction docChangePset = new DocChangeAction(); docChangeSchemaProperties.Changes.Add(docChangePset); docChangePset.Name = docPset.Name; // find equivalent pset - DocPropertySet docPsetBase = null; - foreach (DocPropertySet docEntityEach in docSchemaBase.PropertySets) + DocPropertyEnumeration docPsetBase = null; + foreach (DocPropertyEnumeration docEntityEach in docSchemaBase.PropertyEnums) { if (docEntityEach.Name.Equals(docPset.Name)) { @@ -745,11 +946,11 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) { foreach (DocSchema docOtherSchema in docOtherSection.Schemas) { - foreach (DocPropertySet docOtherPset in docOtherSchema.PropertySets) + foreach (DocPropertyEnumeration docOtherPset in docOtherSchema.PropertyEnums) { if (docOtherPset.Name.Equals(docPset.Name)) { - docPsetBase = docOtherPset; // still compare attributes if moved (e.g. IfcRelSequence) + docPsetBase = docOtherPset; docChangePset.Action = DocChangeActionEnum.MOVED; docChangePset.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.SCHEMA, docOtherSchema.Name.ToUpper(), docSchema.Name.ToUpper())); @@ -762,29 +963,14 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) if (docPsetBase != null) { - // existing entity - - // compare abstract vs. non-abstract - if (docPset.ApplicableType != docPsetBase.ApplicableType) - { - docChangePset.Action = DocChangeActionEnum.MODIFIED; - docChangePset.Aspects.Add(new DocChangeAspect(DocChangeAspectEnum.INSTANTIATION, docPsetBase.ApplicableType, docPset.ApplicableType)); - } - - // compare attributes by index - - // only report non-abstract entities; e.g. attributes may be demoted without file impact - - - foreach (DocProperty docAttribute in docPset.Properties) + foreach (DocPropertyConstant docAttribute in docPset.Constants) { - // we only care about direct attributes DocChangeAction docChangeAttribute = new DocChangeAction(); docChangePset.Changes.Add(docChangeAttribute); docChangeAttribute.Name = docAttribute.Name; - DocProperty docAttributeBase = null; - foreach (DocProperty docEachProperty in docPsetBase.Properties) + DocPropertyConstant docAttributeBase = null; + foreach (DocPropertyConstant docEachProperty in docPsetBase.Constants) { if (docEachProperty.Name.Equals(docAttribute.Name)) { @@ -795,33 +981,20 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) if (docAttributeBase == null) { - // new attribute added + // new constant added docChangeAttribute.Action = DocChangeActionEnum.ADDED; } else { - // compare for changes - if (!docAttribute.PropertyType.Equals(docAttributeBase.PropertyType)) - { - DocChangeAspect docAspect = new DocChangeAspect(DocChangeAspectEnum.INSTANTIATION, docAttributeBase.PropertyType.ToString(), docAttribute.PropertyType.ToString()); - docChangeAttribute.Aspects.Add(docAspect); - docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; - } - - if (docAttribute.PrimaryDataType != null && !docAttribute.PrimaryDataType.Trim().Equals(docAttributeBase.PrimaryDataType.Trim())) - { - DocChangeAspect docAspect = new DocChangeAspect(DocChangeAspectEnum.TYPE, docAttributeBase.PrimaryDataType, docAttribute.PrimaryDataType); - docChangeAttribute.Aspects.Add(docAspect); - docChangeAttribute.Action = DocChangeActionEnum.MODIFIED; - } + // compare for changes -- no state captured for constants } } // report deleted properties - foreach (DocProperty docAttributeBase in docPsetBase.Properties) + foreach (DocPropertyConstant docAttributeBase in docPsetBase.Constants) { - DocProperty docAttribute = null; - foreach (DocProperty docEachProperty in docPset.Properties) + DocPropertyConstant docAttribute = null; + foreach (DocPropertyConstant docEachProperty in docPset.Constants) { if (docEachProperty.Name.Equals(docAttributeBase.Name)) { @@ -842,12 +1015,12 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) } - // now find deleted psets - foreach (DocPropertySet docEntityBase in docSchemaBase.PropertySets) + // now find deleted property enums + foreach (DocPropertyEnumeration docEntityBase in docSchemaBase.PropertyEnums) { // find equivalent - DocPropertySet docEntity = null; - foreach (DocPropertySet docEntityEach in docSchema.PropertySets) + DocPropertyEnumeration docEntity = null; + foreach (DocPropertyEnumeration docEntityEach in docSchema.PropertyEnums) { if (docEntityEach.Name.Equals(docEntityBase.Name)) { @@ -860,11 +1033,11 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) { // entity may have moved to other schema; check other schemas DocSchema docThatSchema = null; - foreach (DocSection docOtherSection in projectCurr.Sections) + foreach (DocSection docOtherSection in docProject.Sections) { foreach (DocSchema docOtherSchema in docOtherSection.Schemas) { - foreach (DocPropertySet docOtherEntity in docOtherSchema.PropertySets) + foreach (DocPropertyEnumeration docOtherEntity in docOtherSchema.PropertyEnums) { if (docOtherEntity.Name.Equals(docEntityBase.Name)) { @@ -892,8 +1065,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) } } } - // end property sets - + // end property enums // quantity sets foreach (DocQuantitySet docQset in docSchema.QuantitySets) @@ -1031,7 +1203,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) { // entity may have moved to other schema; check other schemas DocSchema docThatSchema = null; - foreach (DocSection docOtherSection in projectCurr.Sections) + foreach (DocSection docOtherSection in docProject.Sections) { foreach (DocSchema docOtherSchema in docOtherSection.Schemas) { @@ -1099,7 +1271,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) // entity may have moved to other schema; check other schemas DocSchema docThatSchema = null; - foreach (DocSection docOtherSection in projectCurr.Sections) + foreach (DocSection docOtherSection in docProject.Sections) { foreach (DocSchema docOtherSchema in docOtherSection.Schemas) { @@ -1138,7 +1310,7 @@ public static void Generate(DocProject projectPrev, DocProject projectCurr) // entity may have moved to other schema; check other schemas DocSchema docThatSchema = null; - foreach (DocSection docOtherSection in projectCurr.Sections) + foreach (DocSection docOtherSection in docProject.Sections) { foreach (DocSchema docOtherSchema in docOtherSection.Schemas) { diff --git a/Compiler.cs b/Compiler.cs index 07b5b216..9b8baf37 100644 --- a/Compiler.cs +++ b/Compiler.cs @@ -36,7 +36,8 @@ public Compiler(DocProject project, DocModelView[] views, DocExchangeDefinition this.m_views = views; this.m_exchange = exchange; - this.m_assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName("IFC4"), AssemblyBuilderAccess.RunAndSave); + string schemaid = project.GetSchemaIdentifier(); + this.m_assembly = AppDomain.CurrentDomain.DefineDynamicAssembly(new AssemblyName(schemaid), AssemblyBuilderAccess.RunAndSave); this.m_module = this.m_assembly.DefineDynamicModule("IFC4.dll", "IFC4.dll"); this.m_definitions = new Dictionary(); this.m_types = new Dictionary(); diff --git a/CtlCheckGrid.cs b/CtlCheckGrid.cs index c9ce31b3..db1675d6 100644 --- a/CtlCheckGrid.cs +++ b/CtlCheckGrid.cs @@ -118,6 +118,36 @@ protected override void OnPaint(PaintEventArgs pe) // draw cell CellValue val = this.m_datasource.GetCell(iRow, iCol); + Brush brush = Brushes.Gray; // incompatible + switch(val) + { + case CellValue.None: + brush = Brushes.LightGray; + break; + + case CellValue.Mandatory: + brush = Brushes.LightGreen; + break; + + case CellValue.Recommended: + brush = Brushes.Blue; + break; + + case CellValue.NotRelevant: + brush = Brushes.White; + break; + + case CellValue.NotRecommended: + brush = Brushes.Yellow; + break; + + case CellValue.Excluded: + brush = Brushes.Red; + break; + } + g.FillRectangle(brush, new Rectangle(SX + iCol * CX + 1, SY + iRow * CY + 1, CX - 1, CY - 1)); + +#if false if (val != CellValue.Unavailable) { g.FillRectangle(Brushes.White, new Rectangle(SX + iCol * CX + 1, SY + iRow * CY + 1, CX-1, CY-1)); @@ -134,6 +164,7 @@ protected override void OnPaint(PaintEventArgs pe) { g.FillRectangle(Brushes.DarkGray, new Rectangle(SX + iCol * CX + 1, SY + iRow * CY + 1, CX - 1, CY - 1)); } +#endif } } } @@ -192,19 +223,19 @@ private void CtlCheckGrid_MouseClick(object sender, MouseEventArgs e) { case CellValue.None: - newval = CellValue.Optional; + newval = CellValue.Recommended; break; - case CellValue.Optional: - newval = CellValue.Required; + case CellValue.Recommended: + newval = CellValue.Mandatory; break; - case CellValue.Required: + case CellValue.Mandatory: newval = CellValue.None; break; default: - newval = CellValue.Required; + newval = CellValue.Mandatory; break; } this.m_datasource.SetCell(iRow, iCol, newval); @@ -314,24 +345,39 @@ public interface ICheckGrid public enum CellValue { /// - /// Cannot be edited + /// Black -- entry is not possible (not compatible) /// Unavailable = -1, /// - /// Blank value + /// Grey -- entry is possible but not defined /// None = 0, /// - /// Half slash for optional + /// Green indicator + /// + Mandatory = 1, + + /// + /// Blue indicator + /// + Recommended = 2, + + /// + /// White indicator - entry defined /// - Optional = 1, + NotRelevant = 3, /// - /// X for required + /// Yellow indicator /// - Required = 2, + NotRecommended = 4, + + /// + /// Red indicator + /// + Excluded = 5, } /// @@ -352,11 +398,17 @@ public CheckGridConcept(DocTemplateDefinition docTemplate, DocModelView docView, public int GetColumnCount() { + if (this.m_view == null) + return 0; + return this.m_view.Exchanges.Count; } public int GetRowCount() { + if (this.m_view == null) + return 0; + return this.m_view.ConceptRoots.Count; } @@ -420,15 +472,24 @@ public CellValue GetCell(int row, int col) switch (docEx.Requirement) { case DocExchangeRequirementEnum.Mandatory: - return CellValue.Required; + return CellValue.Mandatory; case DocExchangeRequirementEnum.Optional: - return CellValue.Optional; + return CellValue.Recommended; + + case DocExchangeRequirementEnum.NotRelevant: + return CellValue.NotRelevant; + + case DocExchangeRequirementEnum.NotRecommended: + return CellValue.NotRecommended; + + case DocExchangeRequirementEnum.Excluded: + return CellValue.Excluded; } } } - return CellValue.None; + return CellValue.NotRelevant; } } @@ -460,11 +521,11 @@ public void SetCell(int row, int col, CellValue val) DocExchangeRequirementEnum req = DocExchangeRequirementEnum.NotRelevant; switch (val) { - case CellValue.Required: + case CellValue.Mandatory: req = DocExchangeRequirementEnum.Mandatory; break; - case CellValue.Optional: + case CellValue.Recommended: req = DocExchangeRequirementEnum.Optional; break; } @@ -618,10 +679,10 @@ public CellValue GetCell(int row, int col) switch (docItem.Requirement) { case DocExchangeRequirementEnum.Mandatory: - return CellValue.Required; + return CellValue.Mandatory; case DocExchangeRequirementEnum.Optional: - return CellValue.Optional; + return CellValue.Recommended; default: return CellValue.None; @@ -659,11 +720,11 @@ public void SetCell(int row, int col, CellValue val) DocExchangeRequirementEnum req = DocExchangeRequirementEnum.NotRelevant; switch (val) { - case CellValue.Required: + case CellValue.Mandatory: req = DocExchangeRequirementEnum.Mandatory; break; - case CellValue.Optional: + case CellValue.Recommended: req = DocExchangeRequirementEnum.Optional; break; } @@ -806,13 +867,24 @@ public CellValue GetCell(int row, int col) switch (docExchangeItem.Requirement) { case DocExchangeRequirementEnum.Mandatory: - return CellValue.Required; + return CellValue.Mandatory; case DocExchangeRequirementEnum.Optional: - return CellValue.Optional; + return CellValue.Recommended; + + case DocExchangeRequirementEnum.NotRelevant: + return CellValue.NotRelevant; + + case DocExchangeRequirementEnum.NotRecommended: + return CellValue.NotRecommended; + + case DocExchangeRequirementEnum.Excluded: + return CellValue.Excluded; } } } + + return CellValue.NotRelevant; } } @@ -844,11 +916,11 @@ public void SetCell(int row, int col, CellValue val) DocExchangeRequirementEnum req = DocExchangeRequirementEnum.NotRelevant; switch (val) { - case CellValue.Required: + case CellValue.Mandatory: req = DocExchangeRequirementEnum.Mandatory; break; - case CellValue.Optional: + case CellValue.Recommended: req = DocExchangeRequirementEnum.Optional; break; } diff --git a/CtlConcept.cs b/CtlConcept.cs index e2489ea6..4b0810b4 100644 --- a/CtlConcept.cs +++ b/CtlConcept.cs @@ -26,14 +26,14 @@ public partial class CtlConcept : ScrollableControl DocTemplateDefinition m_template; DocConceptRoot m_conceptroot; DocAttribute m_attribute; - DocModelRule m_selection; - DocModelRule m_highlight; + SEntity m_selection; + SEntity m_highlight; int m_iSelection; // index of attribute within selection, or -1 if entity int m_iHighlight; Rectangle m_rcSelection; Rectangle m_rcHighlight; Dictionary m_map; - Dictionary m_hitmap; + Dictionary m_hitmap; SEntity m_instance; // optional instance to highlight public event EventHandler SelectionChanged; @@ -82,7 +82,7 @@ public DocTemplateDefinition Template set { this.m_template = value; - this.m_hitmap = new Dictionary(); + this.m_hitmap = new Dictionary(); Redraw(); } } @@ -96,12 +96,12 @@ public DocConceptRoot ConceptRoot set { this.m_conceptroot = value; - this.m_hitmap = new Dictionary(); + this.m_hitmap = new Dictionary(); this.Redraw(); } } - public DocModelRule Selection + public SEntity Selection { get { @@ -118,14 +118,15 @@ public DocModelRule Selection // determine rectangle foreach(Rectangle rc in this.m_hitmap.Keys) { - DocModelRule mr = this.m_hitmap[rc]; - if(mr == value) + SEntity ent = this.m_hitmap[rc]; + DocModelRule mr = ent as DocModelRule; + if (ent == value) { this.m_rcSelection = rc; this.m_iSelection = -1; break; } - else if(mr is DocModelRuleEntity && mr.Rules != null && mr.Rules.Contains(value)) + else if(value is DocModelRule && mr is DocModelRuleEntity && mr.Rules != null && mr.Rules.Contains((DocModelRule)value)) { this.m_rcSelection = rc; this.m_iSelection = -1; @@ -141,7 +142,7 @@ public DocModelRule Selection for (int i = 0; i < listAttr.Count; i++) { DocAttribute docAttr = listAttr[i]; - if (docAttr.Name.Equals(value.Name)) + if (docAttr.Name.Equals(((DocModelRule)value).Name)) { this.m_attribute = docAttr; this.m_iSelection = i; @@ -152,7 +153,7 @@ public DocModelRule Selection } break; } - else if(mr == null && this.m_template != null && this.m_template.Rules.Contains(value)) + else if(mr == null && this.m_template != null && value is DocModelRule && this.m_template.Rules.Contains((DocModelRule)value)) { this.m_rcSelection = rc; this.m_iSelection = -1; @@ -164,7 +165,7 @@ public DocModelRule Selection for (int i = 0; i < listAttr.Count; i++) { DocAttribute docAttr = listAttr[i]; - if (docAttr.Name.Equals(value.Name)) + if (docAttr.Name.Equals(((DocModelRule)value).Name)) { this.m_attribute = docAttr; this.m_iSelection = i; @@ -292,7 +293,7 @@ protected override void OnPaint(PaintEventArgs pe) } } - private DocModelRule Pick(Point pt, out int iAttr, out DocAttribute docAttribute, out Rectangle rc) + private SEntity Pick(Point pt, out int iAttr, out DocAttribute docAttribute, out Rectangle rc) { docAttribute = null; iAttr = -1; @@ -304,75 +305,85 @@ private DocModelRule Pick(Point pt, out int iAttr, out DocAttribute docAttribute { rc = rect; iAttr = (pt.Y - rc.Top) / FormatPNG.CY - 1; - DocModelRuleEntity ruleEntity = this.m_hitmap[rc] as DocModelRuleEntity; - DocEntity docEntity = null; - if (ruleEntity != null) + SEntity sel = this.m_hitmap[rc]; + + if (sel is DocTemplateDefinition) + { + return sel; + } + else { - DocObject docObjRef = null; + DocModelRuleEntity ruleEntity = sel as DocModelRuleEntity; - if (this.m_template != null && !String.IsNullOrEmpty(this.m_template.Code)) + DocEntity docEntity = null; + if (ruleEntity != null) { - foreach(DocSection docSection in this.m_project.Sections) + DocObject docObjRef = null; + + if (this.m_template != null && !String.IsNullOrEmpty(this.m_template.Code)) { - foreach(DocSchema docSchema in docSection.Schemas) + foreach (DocSection docSection in this.m_project.Sections) { - if (docSchema.Name.Equals(this.m_template.Code, StringComparison.OrdinalIgnoreCase)) + foreach (DocSchema docSchema in docSection.Schemas) { - docObjRef = docSchema.GetDefinition(ruleEntity.Name); - break; + if (docSchema.Name.Equals(this.m_template.Code, StringComparison.OrdinalIgnoreCase)) + { + docObjRef = docSchema.GetDefinition(ruleEntity.Name); + break; + } } } } - } - if (docObjRef == null) - { - this.m_map.TryGetValue(ruleEntity.Name, out docObjRef); - } - - if (docObjRef is DocEntity) - { - docEntity = (DocEntity)docObjRef; - List listAttr = new List(); - FormatPNG.BuildAttributeList(docEntity, listAttr, this.m_map); + if (docObjRef == null) + { + this.m_map.TryGetValue(ruleEntity.Name, out docObjRef); + } - if (iAttr >= 0 && iAttr < listAttr.Count) + if (docObjRef is DocEntity) { - docAttribute = listAttr[iAttr]; - foreach (DocModelRule ruleAttr in ruleEntity.Rules) + docEntity = (DocEntity)docObjRef; + List listAttr = new List(); + FormatPNG.BuildAttributeList(docEntity, listAttr, this.m_map); + + if (iAttr >= 0 && iAttr < listAttr.Count) { - if (ruleAttr is DocModelRuleAttribute && ruleAttr.Name.Equals(docAttribute.Name)) + docAttribute = listAttr[iAttr]; + foreach (DocModelRule ruleAttr in ruleEntity.Rules) { - return ruleAttr; + if (ruleAttr is DocModelRuleAttribute && ruleAttr.Name.Equals(docAttribute.Name)) + { + return ruleAttr; + } } } } } - } - else if (this.m_template != null) - { - docEntity = this.m_map[this.m_template.Type] as DocEntity; - List listAttr = new List(); - FormatPNG.BuildAttributeList(docEntity, listAttr, this.m_map); - - if (iAttr >= 0 && iAttr < listAttr.Count) + else if (this.m_template != null) { - docAttribute = listAttr[iAttr]; - if (this.m_template.Rules != null) + docEntity = this.m_map[this.m_template.Type] as DocEntity; + List listAttr = new List(); + FormatPNG.BuildAttributeList(docEntity, listAttr, this.m_map); + + if (iAttr >= 0 && iAttr < listAttr.Count) { - foreach (DocModelRule ruleAttr in this.m_template.Rules) + docAttribute = listAttr[iAttr]; + if (this.m_template.Rules != null) { - if (ruleAttr is DocModelRuleAttribute && ruleAttr.Name.Equals(docAttribute.Name)) + foreach (DocModelRule ruleAttr in this.m_template.Rules) { - return ruleAttr; + if (ruleAttr is DocModelRuleAttribute && ruleAttr.Name.Equals(docAttribute.Name)) + { + return ruleAttr; + } } } } } } - return ruleEntity; + return sel; } } diff --git a/CtlExpressG.cs b/CtlExpressG.cs index fa70b5b3..72d8b4bd 100644 --- a/CtlExpressG.cs +++ b/CtlExpressG.cs @@ -380,19 +380,22 @@ private void CtlExpressG_MouseDown(object sender, MouseEventArgs e) this.m_mousedown = true; this.m_ptDown = e.Location; - if (!multi) + this.Selection = this.Pick(e.Location, out this.m_lineselection, out this.m_handle); + if (this.Selection == null && !multi) { this.m_multiselect.Clear(); + this.m_pointmap.Clear(); } - this.Selection = this.Pick(e.Location, out this.m_lineselection, out this.m_handle); UpdateCursor(this.m_handle); - m_pointmap.Clear(); if (this.m_selection is DocDefinition) { DocDefinition docDef = (DocDefinition)this.Selection; - m_pointmap.Add(docDef, new PointF((float)docDef.DiagramRectangle.X, (float)docDef.DiagramRectangle.Y)); + if (!m_pointmap.ContainsKey(docDef)) + { + m_pointmap.Add(docDef, new PointF((float)docDef.DiagramRectangle.X, (float)docDef.DiagramRectangle.Y)); + } m_selectionsize = new SizeF((float)docDef.DiagramRectangle.Width, (float)docDef.DiagramRectangle.Height); } @@ -482,6 +485,11 @@ public void LayoutDefinition(DocDefinition selection) { foreach(DocDefinitionRef docDefRef in docSchemaRef.Definitions) { + if(docDefRef.Name.Equals("IfcRelAssociates")) + { + this.ToString(); + } + foreach (DocLine docLine in docDefRef.Tree) { if (docLine.Definition == selection) @@ -546,11 +554,6 @@ public void LayoutDefinition(DocDefinition selection) } } - if (docEntity.Name.Equals("IfcBooleanResult")) - { - this.ToString(); - } - foreach(DocLine docLine in docEntity.Tree) { // workaround to fix-up broken data (due to bug in previous import from Visual Express -- no longer occurs with new files) @@ -652,6 +655,64 @@ public void LayoutDefinition(DocDefinition selection) selection.DiagramNumber = page; } + private void MoveObject(DocDefinition docSelection, float dx, float dy) + { + if (this.m_pointmap.ContainsKey(docSelection)) + { + PointF ptSelection = this.m_pointmap[docSelection]; + + if ((this.m_handle & ResizeHandle.North) != 0) + { + double yTail = docSelection.DiagramRectangle.Y + docSelection.DiagramRectangle.Height; + docSelection.DiagramRectangle.Y = ptSelection.Y + dy / Factor; + docSelection.DiagramRectangle.Height = yTail - docSelection.DiagramRectangle.Y; + } + else if ((this.m_handle & ResizeHandle.South) != 0) + { + docSelection.DiagramRectangle.Height = m_selectionsize.Height + dy / Factor; + } + + if ((this.m_handle & ResizeHandle.West) != 0) + { + double xTail = docSelection.DiagramRectangle.X + docSelection.DiagramRectangle.Width; + docSelection.DiagramRectangle.X = ptSelection.X + dx / Factor; + docSelection.DiagramRectangle.Width = xTail - docSelection.DiagramRectangle.X; + } + else if ((this.m_handle & ResizeHandle.East) != 0) + { + docSelection.DiagramRectangle.Width = m_selectionsize.Width + dx / Factor; + } + + if (this.m_handle == ResizeHandle.Move) + { + docSelection.DiagramRectangle.X = ptSelection.X + dx / Factor; + docSelection.DiagramRectangle.Y = ptSelection.Y + dy / Factor; + + if(docSelection.DiagramRectangle.X < 0) + { + docSelection.DiagramRectangle.X = 0; + } + if (docSelection.DiagramRectangle.Y < 0) + { + docSelection.DiagramRectangle.Y = 0; + } + } + else + { + if (docSelection.DiagramRectangle.Width < 64) + { + docSelection.DiagramRectangle.Width = 64; + } + if (docSelection.DiagramRectangle.Height < 64) + { + docSelection.DiagramRectangle.Height = 64; + } + } + + LayoutDefinition(docSelection); + } + } + private void CtlExpressG_MouseMove(object sender, MouseEventArgs e) { this.m_ptMove = e.Location; @@ -689,57 +750,17 @@ private void CtlExpressG_MouseMove(object sender, MouseEventArgs e) float dx = (float)(ptLocation.X - this.m_ptDown.X); float dy = (float)(ptLocation.Y - this.m_ptDown.Y); + // move or resize the object... DocDefinition docSelection = (DocDefinition)this.m_selection; - if (this.m_pointmap.ContainsKey(docSelection)) + MoveObject(docSelection, dx, dy); + foreach(DocDefinition docDef in this.m_multiselect) { - PointF ptSelection = this.m_pointmap[docSelection]; - - if ((this.m_handle & ResizeHandle.North) != 0) - { - double yTail = docSelection.DiagramRectangle.Y + docSelection.DiagramRectangle.Height; - docSelection.DiagramRectangle.Y = ptSelection.Y + dy / Factor; - docSelection.DiagramRectangle.Height = yTail - docSelection.DiagramRectangle.Y; - } - else if ((this.m_handle & ResizeHandle.South) != 0) - { - docSelection.DiagramRectangle.Height = m_selectionsize.Height + dy / Factor; - } - - if ((this.m_handle & ResizeHandle.West) != 0) - { - double xTail = docSelection.DiagramRectangle.X + docSelection.DiagramRectangle.Width; - docSelection.DiagramRectangle.X = ptSelection.X + dx / Factor; - docSelection.DiagramRectangle.Width = xTail - docSelection.DiagramRectangle.X; - } - else if ((this.m_handle & ResizeHandle.East) != 0) - { - docSelection.DiagramRectangle.Width = m_selectionsize.Width + dx / Factor; - } - - if (this.m_handle == ResizeHandle.Move) - { - docSelection.DiagramRectangle.X = ptSelection.X + dx / Factor; - docSelection.DiagramRectangle.Y = ptSelection.Y + dy / Factor; - } - else - { - if(docSelection.DiagramRectangle.Width < 64) - { - docSelection.DiagramRectangle.Width = 64; - } - if (docSelection.DiagramRectangle.Height < 64) - { - docSelection.DiagramRectangle.Height = 64; - } - } - - if (this.m_selection is DocDefinition) + if (docDef != docSelection) { - LayoutDefinition((DocDefinition)this.m_selection); + MoveObject(docDef, dx, dy); } } - this.Redraw(); } else if(this.m_selection == null) @@ -812,6 +833,10 @@ private void SelectWithinRectangle(DocDefinition def, Rectangle rc) if(rc.IntersectsWith(rcObject)) { this.m_multiselect.Add(def); + if (!this.m_pointmap.ContainsKey(def)) + { + m_pointmap.Add(def, new PointF((float)def.DiagramRectangle.X, (float)def.DiagramRectangle.Y)); + } } } @@ -1099,6 +1124,11 @@ private void CtlExpressG_MouseUp(object sender, MouseEventArgs e) this.Redraw(); } + this.m_pointmap.Clear(); + foreach(DocDefinition docDef in this.m_multiselect) + { + this.m_pointmap.Add(docDef, new PointF((float)docDef.DiagramRectangle.X, (float)docDef.DiagramRectangle.Y)); + } this.Invalidate(); } @@ -1165,45 +1195,26 @@ private DocObject Pick(Point pt, out DocLine line, out ResizeHandle handle) PointF ptFloat = new PointF(pt.X, pt.Y); - foreach(DocType docType in this.m_schema.Types) + // pick in reverse order + for (int iType = this.m_schema.Entities.Count - 1; iType >= 0; iType--) { - if (HitTest(docType.DiagramRectangle, pt, out handle)) - return docType; - - if(docType is DocSelect) - { - DocSelect docSel = (DocSelect)docType; - foreach (DocLine docLine in docSel.Tree) - { - DocPoint docPoint = docLine.DiagramLine[docLine.DiagramLine.Count - 1]; - PointF ptA = new PointF((float)(docPoint.X * Factor), (float)docPoint.Y * Factor); - if (Math.Abs(ptFloat.X - ptA.X) < 4 && Math.Abs(ptFloat.Y - ptA.Y) <= 5) - { - handle = ResizeHandle.Move; - line = docLine; - return docType; - } - } - } - } + DocEntity docType = this.m_schema.Entities[iType]; - foreach (DocEntity docType in this.m_schema.Entities) - { if (HitTest(docType.DiagramRectangle, pt, out handle)) return docType; - foreach(DocAttribute docAttr in docType.Attributes) + foreach (DocAttribute docAttr in docType.Attributes) { if (docAttr.DiagramLine != null) { - for(int i = 0; i < docAttr.DiagramLine.Count-1; i++) + for (int i = 0; i < docAttr.DiagramLine.Count - 1; i++) { PointF ptA = new PointF((float)(docAttr.DiagramLine[i].X * Factor), (float)docAttr.DiagramLine[i].Y * Factor); - PointF ptB = new PointF((float)(docAttr.DiagramLine[i+1].X * Factor), (float)docAttr.DiagramLine[i+1].Y * Factor); - + PointF ptB = new PointF((float)(docAttr.DiagramLine[i + 1].X * Factor), (float)docAttr.DiagramLine[i + 1].Y * Factor); + PointF ptClosest = new PointF(); double distance = FindDistanceToSegment(ptFloat, ptA, ptB, out ptClosest); - if(distance < 3.0) + if (distance < 3.0) { return docAttr; } @@ -1211,7 +1222,7 @@ private DocObject Pick(Point pt, out DocLine line, out ResizeHandle handle) } } - foreach(DocLine docLine in docType.Tree) + foreach (DocLine docLine in docType.Tree) { if (docLine.DiagramLine.Count > 0) { @@ -1227,6 +1238,30 @@ private DocObject Pick(Point pt, out DocLine line, out ResizeHandle handle) } } + for (int iType = this.m_schema.Types.Count - 1; iType >= 0; iType--) + { + DocType docType = this.m_schema.Types[iType]; + + if (HitTest(docType.DiagramRectangle, pt, out handle)) + return docType; + + if (docType is DocSelect) + { + DocSelect docSel = (DocSelect)docType; + foreach (DocLine docLine in docSel.Tree) + { + DocPoint docPoint = docLine.DiagramLine[docLine.DiagramLine.Count - 1]; + PointF ptA = new PointF((float)(docPoint.X * Factor), (float)docPoint.Y * Factor); + if (Math.Abs(ptFloat.X - ptA.X) < 4 && Math.Abs(ptFloat.Y - ptA.Y) <= 5) + { + handle = ResizeHandle.Move; + line = docLine; + return docType; + } + } + } + } + foreach (DocComment docType in this.m_schema.Comments) { if (HitTest(docType.DiagramRectangle, pt, out handle)) diff --git a/CtlOperators.cs b/CtlOperators.cs index bb214520..6a677985 100644 --- a/CtlOperators.cs +++ b/CtlOperators.cs @@ -353,6 +353,8 @@ private void SelectRule(TreeNode tn, DocOp selection) private void treeViewRules_AfterSelect(object sender, TreeViewEventArgs e) { + TreeNode tn = this.treeViewRules.SelectedNode; + DocOp op = this.GetSelectedOp(); if (this.Template == null) @@ -369,8 +371,8 @@ private void treeViewRules_AfterSelect(object sender, TreeViewEventArgs e) return; } - this.toolStripButtonRuleInsert.Enabled = (this.Rule != null); - this.toolStripButtonRuleRemove.Enabled = (op != null); + this.toolStripButtonRuleInsert.Enabled = (this.Rule is DocModelRuleEntity); + this.toolStripButtonRuleRemove.Enabled = (tn != null); this.toolStripButtonRuleUpdate.Enabled = (op is DocOpStatement); this.toolStripButtonRuleRef.Enabled = (op is DocOpStatement && this.Rule != null); @@ -423,6 +425,8 @@ private void toolStripButtonRuleInsert_Click(object sender, EventArgs e) private void toolStripButtonRuleRemove_Click(object sender, EventArgs e) { TreeNode tn = this.treeViewRules.SelectedNode; + if (tn == null) + return; if (tn.Tag is DocModelRuleConstraint) { diff --git a/CtlParameters.Designer.cs b/CtlParameters.Designer.cs index 2a450deb..863e28d7 100644 --- a/CtlParameters.Designer.cs +++ b/CtlParameters.Designer.cs @@ -268,6 +268,7 @@ private void InitializeComponent() this.dataGridViewConceptRules.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewConceptRules_CellContentClick); this.dataGridViewConceptRules.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewConceptRules_CellEnter); this.dataGridViewConceptRules.CellValidated += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridViewConceptRules_CellValidated); + this.dataGridViewConceptRules.CurrentCellDirtyStateChanged += new System.EventHandler(this.dataGridViewConceptRules_CurrentCellDirtyStateChanged); this.dataGridViewConceptRules.DataError += new System.Windows.Forms.DataGridViewDataErrorEventHandler(this.dataGridViewConceptRules_DataError); this.dataGridViewConceptRules.SelectionChanged += new System.EventHandler(this.dataGridViewConceptRules_SelectionChanged); this.dataGridViewConceptRules.UserAddedRow += new System.Windows.Forms.DataGridViewRowEventHandler(this.dataGridViewConceptRules_UserAddedRow); diff --git a/CtlParameters.cs b/CtlParameters.cs index 924b20df..e374b3db 100644 --- a/CtlParameters.cs +++ b/CtlParameters.cs @@ -158,7 +158,10 @@ public SEntity CurrentInstance } else { - row.DefaultCellStyle.BackColor = System.Drawing.Color.Empty; + //row.DefaultCellStyle.BackColor = System.Drawing.Color.Empty; + + //... + row.DefaultCellStyle.BackColor = item.GetColor(); } } } @@ -258,6 +261,22 @@ private void LoadUsage() listItems = this.m_conceptroot.ApplicableItems; } + // add usage column + DataGridViewColumn colflag = new DataGridViewColumn(); + colflag.HeaderText = "Usage"; + DataGridViewComboBoxCell cellflag = new DataGridViewComboBoxCell(); + colflag.CellTemplate = cellflag; + colflag.Width = 80; + cellflag.MaxDropDownItems = 32; + cellflag.DropDownWidth = 80; + cellflag.Items.Add("Key"); + cellflag.Items.Add("Reference"); + cellflag.Items.Add("Required"); + cellflag.Items.Add("Optional"); + cellflag.Items.Add("Calculated"); + cellflag.Items.Add("System"); + this.dataGridViewConceptRules.Columns.Add(colflag); + if (docTemplate != null) { this.m_columns = docTemplate.GetParameterRules(); @@ -343,6 +362,8 @@ private void LoadUsage() { string[] values = new string[this.dataGridViewConceptRules.Columns.Count]; + values[0] = item.GetUsage(); + if (this.m_columns != null) { for (int i = 0; i < this.m_columns.Length; i++) @@ -351,7 +372,7 @@ private void LoadUsage() string val = item.GetParameterValue(parmname); if (val != null) { - values[i] = val; + values[i + 1] = val; } } } @@ -361,10 +382,7 @@ private void LoadUsage() int row = this.dataGridViewConceptRules.Rows.Add(values); this.dataGridViewConceptRules.Rows[row].Tag = item; - if(item.Optional) - { - this.dataGridViewConceptRules.Rows[row].DefaultCellStyle.ForeColor = Color.Gray; - } + //this.dataGridViewConceptRules.Rows[row].DefaultCellStyle.BackColor = item.GetColor(); } if (this.dataGridViewConceptRules.SelectedCells.Count > 0) @@ -472,6 +490,9 @@ private void dataGridViewConceptRules_CellValidated(object sender, DataGridViewC docItem.RuleParameters = sb.ToString(); object val = this.dataGridViewConceptRules[this.dataGridViewConceptRules.Columns.Count - 1, e.RowIndex].Value; docItem.Documentation = val as string; + + object usage = this.dataGridViewConceptRules[0, e.RowIndex].Value; + docItem.SetUsage(usage as string); } } @@ -522,7 +543,7 @@ private void dataGridViewConceptRules_CellContentClick(object sender, DataGridVi // get the model view DocTemplateDefinition docTemplateInner = null; - DocModelRule docRule = this.m_columns[e.ColumnIndex]; + DocModelRule docRule = this.m_columns[e.ColumnIndex - 1]; DocModelRuleAttribute dma = null; if(docRule is DocModelRuleAttribute) { @@ -585,6 +606,9 @@ private void toolStripButtonTemplateInsert_Click(object sender, EventArgs e) private void toolStripButtonTemplateRemove_Click(object sender, EventArgs e) { + if (this.dataGridViewConceptRules.SelectedRows.Count == 0) + return; + this.m_editcon = true; int index = this.dataGridViewConceptRules.SelectedRows[0].Index; if(this.m_conceptleaf != null) @@ -598,6 +622,12 @@ private void toolStripButtonTemplateRemove_Click(object sender, EventArgs e) this.m_editcon = false; LoadUsage(); + + if (this.dataGridViewConceptRules.Rows.Count > index) + { + this.dataGridViewConceptRules.Rows[index].Selected = true; + //... how to change caret? + } } private void toolStripButtonMoveUp_Click(object sender, EventArgs e) @@ -772,5 +802,24 @@ private void toolStripComboBoxOperator_SelectedIndexChanged(object sender, Event { this.m_conceptleaf.Operator = (DocTemplateOperator)this.toolStripComboBoxOperator.SelectedIndex; } + + private void dataGridViewConceptRules_CurrentCellDirtyStateChanged(object sender, EventArgs e) + { + // fired when combobox changes -- handle immediately to update color + if (this.dataGridViewConceptRules.SelectedCells.Count == 1 && + this.dataGridViewConceptRules.SelectedCells[0].ColumnIndex == 0 && + this.dataGridViewConceptRules.SelectedCells[0].RowIndex >= 0) + { + int row = this.dataGridViewConceptRules.SelectedCells[0].RowIndex; + + DocTemplateItem docItem = (DocTemplateItem)this.dataGridViewConceptRules.SelectedCells[0].OwningRow.Tag; + if (docItem != null) + { + docItem.SetUsage(this.dataGridViewConceptRules.SelectedCells[0].Value as string); + this.dataGridViewConceptRules.SelectedCells[0].OwningRow.DefaultCellStyle.BackColor = docItem.GetColor(); + this.dataGridViewConceptRules.InvalidateRow(row); + } + } + } } } diff --git a/CtlProperties.Designer.cs b/CtlProperties.Designer.cs index 35e581a7..46929909 100644 --- a/CtlProperties.Designer.cs +++ b/CtlProperties.Designer.cs @@ -67,9 +67,7 @@ private void InitializeComponent() this.textBoxIdentityUuid = new System.Windows.Forms.TextBox(); this.label7 = new System.Windows.Forms.Label(); this.tabPageTemplate = new System.Windows.Forms.TabPage(); - this.ctlRules = new IfcDoc.CtlRules(); this.tabPageConcept = new System.Windows.Forms.TabPage(); - this.ctlParameters = new IfcDoc.CtlParameters(); this.tabPageRequirements = new System.Windows.Forms.TabPage(); this.listViewExchange = new System.Windows.Forms.ListView(); this.columnHeaderExchangeName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -95,12 +93,19 @@ private void InitializeComponent() this.buttonApplicabilityAddEntity = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.tabPageProperty = new System.Windows.Forms.TabPage(); + this.label20 = new System.Windows.Forms.Label(); + this.comboBoxPropertyAccess = new System.Windows.Forms.ComboBox(); + this.buttonPropertyDataSecondary = new System.Windows.Forms.Button(); + this.textBoxPropertyDataSecondary = new System.Windows.Forms.TextBox(); + this.label18 = new System.Windows.Forms.Label(); this.buttonPropertyDataPrimary = new System.Windows.Forms.Button(); this.textBoxPropertyDataPrimary = new System.Windows.Forms.TextBox(); this.labelPropertyType = new System.Windows.Forms.Label(); this.label4 = new System.Windows.Forms.Label(); this.comboBoxPropertyType = new System.Windows.Forms.ComboBox(); this.tabPageQuantity = new System.Windows.Forms.TabPage(); + this.label21 = new System.Windows.Forms.Label(); + this.comboBoxQuantityAccess = new System.Windows.Forms.ComboBox(); this.labelQuantityType = new System.Windows.Forms.Label(); this.comboBoxQuantityType = new System.Windows.Forms.ComboBox(); this.tabPageEntity = new System.Windows.Forms.TabPage(); @@ -177,9 +182,9 @@ private void InitializeComponent() this.textBoxExample = new System.Windows.Forms.TextBox(); this.toolStrip4 = new System.Windows.Forms.ToolStrip(); this.toolStripButtonExampleLoad = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonExampleLink = new System.Windows.Forms.ToolStripButton(); this.toolStripButtonExampleClear = new System.Windows.Forms.ToolStripButton(); this.tabPageOperations = new System.Windows.Forms.TabPage(); - this.ctlOperators = new IfcDoc.CtlOperators(); this.tabPageConceptRoot = new System.Windows.Forms.TabPage(); this.listViewConceptRoot = new System.Windows.Forms.ListView(); this.columnHeaderRootTemplate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -206,6 +211,7 @@ private void InitializeComponent() this.toolStripButtonViewInsert = new System.Windows.Forms.ToolStripButton(); this.toolStripButtonViewRemove = new System.Windows.Forms.ToolStripButton(); this.tabPagePublication = new System.Windows.Forms.TabPage(); + this.checkBoxPublishHtmlExamples = new System.Windows.Forms.CheckBox(); this.checkBoxPublishExchangeTables = new System.Windows.Forms.CheckBox(); this.checkBoxPublishUML = new System.Windows.Forms.CheckBox(); this.textBoxFooter = new System.Windows.Forms.TextBox(); @@ -226,9 +232,10 @@ private void InitializeComponent() this.imageListRules = new System.Windows.Forms.ImageList(this.components); this.openFileDialogIcon = new System.Windows.Forms.OpenFileDialog(); this.openFileDialogExample = new System.Windows.Forms.OpenFileDialog(); - this.buttonPropertyDataSecondary = new System.Windows.Forms.Button(); - this.textBoxPropertyDataSecondary = new System.Windows.Forms.TextBox(); - this.label18 = new System.Windows.Forms.Label(); + this.ctlRules = new IfcDoc.CtlRules(); + this.ctlParameters = new IfcDoc.CtlParameters(); + this.ctlOperators = new IfcDoc.CtlOperators(); + this.textBoxPublicationNote = new System.Windows.Forms.TextBox(); ((System.ComponentModel.ISupportInitialize)(this.splitContainerTranslation)).BeginInit(); this.splitContainerTranslation.Panel1.SuspendLayout(); this.splitContainerTranslation.Panel2.SuspendLayout(); @@ -502,6 +509,7 @@ private void InitializeComponent() // comboBoxIdentityStatus // resources.ApplyResources(this.comboBoxIdentityStatus, "comboBoxIdentityStatus"); + this.comboBoxIdentityStatus.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.comboBoxIdentityStatus.FormattingEnabled = true; this.comboBoxIdentityStatus.Items.AddRange(new object[] { resources.GetString("comboBoxIdentityStatus.Items"), @@ -559,19 +567,6 @@ private void InitializeComponent() this.tabPageTemplate.Name = "tabPageTemplate"; this.tabPageTemplate.UseVisualStyleBackColor = true; // - // ctlRules - // - this.ctlRules.Attribute = null; - this.ctlRules.BaseTemplate = null; - this.ctlRules.CurrentInstance = null; - resources.ApplyResources(this.ctlRules, "ctlRules"); - this.ctlRules.Name = "ctlRules"; - this.ctlRules.Project = null; - this.ctlRules.Selection = null; - this.ctlRules.Template = null; - this.ctlRules.SelectionChanged += new System.EventHandler(this.ctlRules_SelectionChanged); - this.ctlRules.ContentChanged += new System.EventHandler(this.ctlRules_ContentChanged); - // // tabPageConcept // this.tabPageConcept.Controls.Add(this.ctlParameters); @@ -579,16 +574,6 @@ private void InitializeComponent() this.tabPageConcept.Name = "tabPageConcept"; this.tabPageConcept.UseVisualStyleBackColor = true; // - // ctlParameters - // - this.ctlParameters.ConceptItem = null; - this.ctlParameters.ConceptLeaf = null; - this.ctlParameters.ConceptRoot = null; - this.ctlParameters.CurrentInstance = null; - resources.ApplyResources(this.ctlParameters, "ctlParameters"); - this.ctlParameters.Name = "ctlParameters"; - this.ctlParameters.Project = null; - // // tabPageRequirements // this.tabPageRequirements.Controls.Add(this.listViewExchange); @@ -781,6 +766,8 @@ private void InitializeComponent() // // tabPageProperty // + this.tabPageProperty.Controls.Add(this.label20); + this.tabPageProperty.Controls.Add(this.comboBoxPropertyAccess); this.tabPageProperty.Controls.Add(this.buttonPropertyDataSecondary); this.tabPageProperty.Controls.Add(this.textBoxPropertyDataSecondary); this.tabPageProperty.Controls.Add(this.label18); @@ -793,6 +780,43 @@ private void InitializeComponent() this.tabPageProperty.Name = "tabPageProperty"; this.tabPageProperty.UseVisualStyleBackColor = true; // + // label20 + // + resources.ApplyResources(this.label20, "label20"); + this.label20.Name = "label20"; + // + // comboBoxPropertyAccess + // + resources.ApplyResources(this.comboBoxPropertyAccess, "comboBoxPropertyAccess"); + this.comboBoxPropertyAccess.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxPropertyAccess.FormattingEnabled = true; + this.comboBoxPropertyAccess.Items.AddRange(new object[] { + resources.GetString("comboBoxPropertyAccess.Items"), + resources.GetString("comboBoxPropertyAccess.Items1"), + resources.GetString("comboBoxPropertyAccess.Items2"), + resources.GetString("comboBoxPropertyAccess.Items3"), + resources.GetString("comboBoxPropertyAccess.Items4")}); + this.comboBoxPropertyAccess.Name = "comboBoxPropertyAccess"; + this.comboBoxPropertyAccess.SelectedIndexChanged += new System.EventHandler(this.comboBoxPropertyAccess_SelectedIndexChanged); + // + // buttonPropertyDataSecondary + // + resources.ApplyResources(this.buttonPropertyDataSecondary, "buttonPropertyDataSecondary"); + this.buttonPropertyDataSecondary.Name = "buttonPropertyDataSecondary"; + this.buttonPropertyDataSecondary.UseVisualStyleBackColor = true; + this.buttonPropertyDataSecondary.Click += new System.EventHandler(this.buttonPropertyDataSecondary_Click); + // + // textBoxPropertyDataSecondary + // + resources.ApplyResources(this.textBoxPropertyDataSecondary, "textBoxPropertyDataSecondary"); + this.textBoxPropertyDataSecondary.Name = "textBoxPropertyDataSecondary"; + this.textBoxPropertyDataSecondary.ReadOnly = true; + // + // label18 + // + resources.ApplyResources(this.label18, "label18"); + this.label18.Name = "label18"; + // // buttonPropertyDataPrimary // resources.ApplyResources(this.buttonPropertyDataPrimary, "buttonPropertyDataPrimary"); @@ -834,12 +858,33 @@ private void InitializeComponent() // // tabPageQuantity // + this.tabPageQuantity.Controls.Add(this.label21); + this.tabPageQuantity.Controls.Add(this.comboBoxQuantityAccess); this.tabPageQuantity.Controls.Add(this.labelQuantityType); this.tabPageQuantity.Controls.Add(this.comboBoxQuantityType); resources.ApplyResources(this.tabPageQuantity, "tabPageQuantity"); this.tabPageQuantity.Name = "tabPageQuantity"; this.tabPageQuantity.UseVisualStyleBackColor = true; // + // label21 + // + resources.ApplyResources(this.label21, "label21"); + this.label21.Name = "label21"; + // + // comboBoxQuantityAccess + // + resources.ApplyResources(this.comboBoxQuantityAccess, "comboBoxQuantityAccess"); + this.comboBoxQuantityAccess.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxQuantityAccess.FormattingEnabled = true; + this.comboBoxQuantityAccess.Items.AddRange(new object[] { + resources.GetString("comboBoxQuantityAccess.Items"), + resources.GetString("comboBoxQuantityAccess.Items1"), + resources.GetString("comboBoxQuantityAccess.Items2"), + resources.GetString("comboBoxQuantityAccess.Items3"), + resources.GetString("comboBoxQuantityAccess.Items4")}); + this.comboBoxQuantityAccess.Name = "comboBoxQuantityAccess"; + this.comboBoxQuantityAccess.SelectedIndexChanged += new System.EventHandler(this.comboBoxQuantityAccess_SelectedIndexChanged); + // // labelQuantityType // resources.ApplyResources(this.labelQuantityType, "labelQuantityType"); @@ -1627,6 +1672,7 @@ private void InitializeComponent() this.toolStrip4.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.toolStrip4.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.toolStripButtonExampleLoad, + this.toolStripButtonExampleLink, this.toolStripButtonExampleClear}); resources.ApplyResources(this.toolStrip4, "toolStrip4"); this.toolStrip4.Name = "toolStrip4"; @@ -1638,6 +1684,13 @@ private void InitializeComponent() this.toolStripButtonExampleLoad.Name = "toolStripButtonExampleLoad"; this.toolStripButtonExampleLoad.Click += new System.EventHandler(this.buttonExampleLoad_Click); // + // toolStripButtonExampleLink + // + this.toolStripButtonExampleLink.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + resources.ApplyResources(this.toolStripButtonExampleLink, "toolStripButtonExampleLink"); + this.toolStripButtonExampleLink.Name = "toolStripButtonExampleLink"; + this.toolStripButtonExampleLink.Click += new System.EventHandler(this.toolStripButtonExampleLink_Click); + // // toolStripButtonExampleClear // this.toolStripButtonExampleClear.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; @@ -1652,16 +1705,6 @@ private void InitializeComponent() this.tabPageOperations.Name = "tabPageOperations"; this.tabPageOperations.UseVisualStyleBackColor = true; // - // ctlOperators - // - this.ctlOperators.CurrentInstance = null; - this.ctlOperators.CurrentPopulation = null; - resources.ApplyResources(this.ctlOperators, "ctlOperators"); - this.ctlOperators.Name = "ctlOperators"; - this.ctlOperators.Project = null; - this.ctlOperators.Rule = null; - this.ctlOperators.Template = null; - // // tabPageConceptRoot // this.tabPageConceptRoot.Controls.Add(this.listViewConceptRoot); @@ -1848,6 +1891,8 @@ private void InitializeComponent() // // tabPagePublication // + this.tabPagePublication.Controls.Add(this.textBoxPublicationNote); + this.tabPagePublication.Controls.Add(this.checkBoxPublishHtmlExamples); this.tabPagePublication.Controls.Add(this.checkBoxPublishExchangeTables); this.tabPagePublication.Controls.Add(this.checkBoxPublishUML); this.tabPagePublication.Controls.Add(this.textBoxFooter); @@ -1860,6 +1905,13 @@ private void InitializeComponent() this.tabPagePublication.Name = "tabPagePublication"; this.tabPagePublication.UseVisualStyleBackColor = true; // + // checkBoxPublishHtmlExamples + // + resources.ApplyResources(this.checkBoxPublishHtmlExamples, "checkBoxPublishHtmlExamples"); + this.checkBoxPublishHtmlExamples.Name = "checkBoxPublishHtmlExamples"; + this.checkBoxPublishHtmlExamples.UseVisualStyleBackColor = true; + this.checkBoxPublishHtmlExamples.CheckedChanged += new System.EventHandler(this.checkBoxPublishHtmlExamples_CheckedChanged); + // // checkBoxPublishExchangeTables // resources.ApplyResources(this.checkBoxPublishExchangeTables, "checkBoxPublishExchangeTables"); @@ -1995,23 +2047,46 @@ private void InitializeComponent() this.openFileDialogExample.DefaultExt = "ifc"; resources.ApplyResources(this.openFileDialogExample, "openFileDialogExample"); // - // buttonPropertyDataSecondary + // ctlRules // - resources.ApplyResources(this.buttonPropertyDataSecondary, "buttonPropertyDataSecondary"); - this.buttonPropertyDataSecondary.Name = "buttonPropertyDataSecondary"; - this.buttonPropertyDataSecondary.UseVisualStyleBackColor = true; - this.buttonPropertyDataSecondary.Click += new System.EventHandler(this.buttonPropertyDataSecondary_Click); + this.ctlRules.Attribute = null; + this.ctlRules.BaseTemplate = null; + this.ctlRules.CurrentInstance = null; + resources.ApplyResources(this.ctlRules, "ctlRules"); + this.ctlRules.Name = "ctlRules"; + this.ctlRules.Project = null; + this.ctlRules.Selection = null; + this.ctlRules.Template = null; + this.ctlRules.SelectionChanged += new System.EventHandler(this.ctlRules_SelectionChanged); + this.ctlRules.ContentChanged += new System.EventHandler(this.ctlRules_ContentChanged); // - // textBoxPropertyDataSecondary + // ctlParameters // - resources.ApplyResources(this.textBoxPropertyDataSecondary, "textBoxPropertyDataSecondary"); - this.textBoxPropertyDataSecondary.Name = "textBoxPropertyDataSecondary"; - this.textBoxPropertyDataSecondary.ReadOnly = true; + this.ctlParameters.ConceptItem = null; + this.ctlParameters.ConceptLeaf = null; + this.ctlParameters.ConceptRoot = null; + this.ctlParameters.CurrentInstance = null; + resources.ApplyResources(this.ctlParameters, "ctlParameters"); + this.ctlParameters.Name = "ctlParameters"; + this.ctlParameters.Project = null; // - // label18 + // ctlOperators // - resources.ApplyResources(this.label18, "label18"); - this.label18.Name = "label18"; + this.ctlOperators.CurrentInstance = null; + this.ctlOperators.CurrentPopulation = null; + resources.ApplyResources(this.ctlOperators, "ctlOperators"); + this.ctlOperators.Name = "ctlOperators"; + this.ctlOperators.Project = null; + this.ctlOperators.Rule = null; + this.ctlOperators.Template = null; + // + // textBoxPublicationNote + // + resources.ApplyResources(this.textBoxPublicationNote, "textBoxPublicationNote"); + this.textBoxPublicationNote.BackColor = System.Drawing.SystemColors.ControlLightLight; + this.textBoxPublicationNote.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxPublicationNote.Name = "textBoxPublicationNote"; + this.textBoxPublicationNote.ReadOnly = true; // // CtlProperties // @@ -2287,5 +2362,12 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonPropertyDataSecondary; private System.Windows.Forms.TextBox textBoxPropertyDataSecondary; private System.Windows.Forms.Label label18; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.ComboBox comboBoxPropertyAccess; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.ComboBox comboBoxQuantityAccess; + private System.Windows.Forms.CheckBox checkBoxPublishHtmlExamples; + private System.Windows.Forms.ToolStripButton toolStripButtonExampleLink; + private System.Windows.Forms.TextBox textBoxPublicationNote; } } diff --git a/CtlProperties.cs b/CtlProperties.cs index 227f9f63..ddf4051e 100644 --- a/CtlProperties.cs +++ b/CtlProperties.cs @@ -32,6 +32,11 @@ public CtlProperties() bool m_loadall; SEntity m_instance; // optional instance to highlight + public event EventHandler Navigate; + public event EventHandler RuleSelectionChanged; + public event EventHandler RuleContentChanged; + public event EventHandler SchemaChanged; // regen EXPRESS-G diagram + //public FormProperties(DocObject docObject, DocObject docParent, DocProject docProject) : this() public void Init(DocObject[] path, DocProject docProject) { @@ -69,7 +74,7 @@ public void Init(DocObject[] path, DocProject docProject) { foreach (DocEntity docEntity in docSchema.Entities) { - if (!this.m_map.ContainsKey(docEntity.Name)) + if (docEntity.Name != null && !this.m_map.ContainsKey(docEntity.Name)) { this.m_map.Add(docEntity.Name, docEntity); } @@ -347,7 +352,7 @@ public void Init(DocObject[] path, DocProject docProject) DocTemplateUsage docUsage = (DocTemplateUsage)docObject; this.ctlParameters.Project = this.m_project; - this.ctlParameters.ConceptRoot = this.m_path[3] as DocConceptRoot; + this.ctlParameters.ConceptRoot = this.m_path[2] as DocConceptRoot;// this.m_path[3] as DocConceptRoot; this.ctlParameters.ConceptItem = this.ctlParameters.ConceptRoot; this.ctlParameters.ConceptLeaf = docUsage; @@ -447,6 +452,7 @@ public void Init(DocObject[] path, DocProject docProject) } } + this.comboBoxPropertyAccess.Text = docProp.AccessState.ToString(); this.comboBoxPropertyType.Text = docProp.PropertyType.ToString(); this.LoadPropertyType(); @@ -463,6 +469,7 @@ public void Init(DocObject[] path, DocProject docProject) DocQuantity docProp = (DocQuantity)docObject; this.comboBoxQuantityType.Text = docProp.QuantityType.ToString(); + this.comboBoxQuantityAccess.Text = docProp.AccessState.ToString(); } else if (docObject is DocExample) { @@ -481,6 +488,13 @@ public void Init(DocObject[] path, DocProject docProject) this.textBoxExample.ReadOnly = false; this.textBoxExample.Focus(); } + else if(docExample.Path != null) + { + this.textBoxExample.Text = docExample.Path; + this.toolStripButtonExampleClear.Enabled = true; + this.textBoxExample.ReadOnly = true; + this.textBoxExample.Focus(); + } else { this.textBoxExample.Text = String.Empty; @@ -506,6 +520,7 @@ public void Init(DocObject[] path, DocProject docProject) this.checkBoxPublishUML.Checked = docPublication.UML; //this.checkBoxPublishComparison.Checked = docPublication.Comparison; this.checkBoxPublishExchangeTables.Checked = docPublication.Exchanges; + this.checkBoxPublishHtmlExamples.Checked = docPublication.HtmlExamples; this.listViewFormats.Items.Clear(); foreach (DocFormat docFormat in docPublication.Formats) @@ -688,8 +703,10 @@ private void LoadModelView() this.listViewExchange.Items.Clear(); // find the view - DocModelView docView = null; - DocConceptRoot docRoot = (DocConceptRoot)this.m_path[3]; + DocModelView docView = (DocModelView)this.m_path[1];//null; + DocConceptRoot docRoot = (DocConceptRoot)this.m_path[2];// this.m_path[3]; + +#if false foreach (DocModelView eachView in this.m_project.ModelViews) { if (eachView.ConceptRoots.Contains(docRoot)) @@ -698,6 +715,7 @@ private void LoadModelView() break; } } +#endif if (docView == null) return; @@ -1011,6 +1029,11 @@ private void comboBoxPropertyType_SelectedIndexChanged(object sender, EventArgs docProperty.PrimaryDataType = "IfcTimeSeries"; docProperty.SecondaryDataType = "IfcReal"; break; + + case DocPropertyTemplateTypeEnum.COMPLEX: + docProperty.PrimaryDataType = String.Empty; + docProperty.SecondaryDataType = String.Empty; + break; } // update @@ -1184,7 +1207,14 @@ private void textBoxLocaleURL_TextChanged(object sender, EventArgs e) private void buttonAttributeType_Click(object sender, EventArgs e) { - using (FormSelectEntity form = new FormSelectEntity(null, null, this.m_project, SelectDefinitionOptions.Entity | SelectDefinitionOptions.Type)) + DocDefinition selection = null; + if (this.m_target is DocAttribute) + { + DocAttribute docAttr = (DocAttribute)this.m_target; + selection = this.m_project.GetDefinition(docAttr.DefinedType); + } + + using (FormSelectEntity form = new FormSelectEntity(null, selection, this.m_project, SelectDefinitionOptions.Entity | SelectDefinitionOptions.Type)) { if (form.ShowDialog(this) == DialogResult.OK && form.SelectedEntity != null) { @@ -1214,7 +1244,7 @@ private void buttonAttributeType_Click(object sender, EventArgs e) if (docSchemaReference == null) { docSchemaReference = new DocSchemaRef(); - docSchemaReference.Name = docOtherSchema.Name; + docSchemaReference.Name = docOtherSchema.Name.ToUpper(); docSchema.SchemaRefs.Add(docSchemaReference); } @@ -1288,6 +1318,12 @@ private void buttonAttributeType_Click(object sender, EventArgs e) docDefined.DefinedType = form.SelectedEntity.Name; this.textBoxAttributeType.Text = docDefined.DefinedType; } + + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } + } } } @@ -1303,6 +1339,11 @@ private void checkBoxAttributeOptional_CheckedChanged(object sender, EventArgs e { docAttr.AttributeFlags &= ~1; } + + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } private void checkBoxEntityAbstract_CheckedChanged(object sender, EventArgs e) @@ -1316,6 +1357,11 @@ private void checkBoxEntityAbstract_CheckedChanged(object sender, EventArgs e) { docAttr.EntityFlags |= 0x20; } + + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } private void textBoxExpression_TextChanged(object sender, EventArgs e) @@ -1531,8 +1577,6 @@ private void checkBoxXsdTagless_CheckedChanged(object sender, EventArgs e) } } - public event EventHandler Navigate; - private void buttonUsageEdit_Click(object sender, EventArgs e) { if (this.Navigate != null) @@ -1731,6 +1775,10 @@ private void buttonAttributeAggregationInsert_Click(object sender, EventArgs e) } this.LoadAttributeCardinality(); + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } private void buttonAttributeAggregationRemove_Click(object sender, EventArgs e) @@ -1745,6 +1793,10 @@ private void buttonAttributeAggregationRemove_Click(object sender, EventArgs e) docAttr.AggregationAttribute = null; this.LoadAttributeCardinality(); + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } private void comboBoxAttributeAggregation_SelectedIndexChanged(object sender, EventArgs e) @@ -1758,6 +1810,10 @@ private void comboBoxAttributeAggregation_SelectedIndexChanged(object sender, Ev docAttr.AggregationType = this.comboBoxAttributeAggregation.SelectedIndex; this.LoadAttributeCardinality(); } + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } private void textBoxAttributeAggregationMin_TextChanged(object sender, EventArgs e) @@ -1768,6 +1824,10 @@ private void textBoxAttributeAggregationMin_TextChanged(object sender, EventArgs DocAttribute docAttr = this.GetAttributeAggregation(); docAttr.AggregationLower = this.textBoxAttributeAggregationMin.Text; this.LoadAttributeCardinality(); + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } private void textBoxAttributeAggregationMax_TextChanged(object sender, EventArgs e) @@ -1778,6 +1838,10 @@ private void textBoxAttributeAggregationMax_TextChanged(object sender, EventArgs DocAttribute docAttr = this.GetAttributeAggregation(); docAttr.AggregationUpper = this.textBoxAttributeAggregationMax.Text; this.LoadAttributeCardinality(); + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } @@ -1914,6 +1978,7 @@ private void buttonExampleLoad_Click(object sender, EventArgs e) { if (fs.Length < Int32.MaxValue) { + docExample.Path = null; docExample.File = new byte[fs.Length]; fs.Read(docExample.File, 0, (int)fs.Length); this.textBoxExample.Text = Encoding.ASCII.GetString(docExample.File); @@ -1935,6 +2000,7 @@ private void buttonExampleClear_Click(object sender, EventArgs e) { DocExample docExample = (DocExample)this.m_target; docExample.File = null; + docExample.Path = null; this.textBoxExample.Text = String.Empty; } @@ -1952,10 +2018,125 @@ private void buttonEntityBase_Click(object sender, EventArgs e) DialogResult res = form.ShowDialog(this); if (res == DialogResult.OK && form.SelectedEntity != null) { + //todo: circular inheritance check... + docEntity.BaseDefinition = form.SelectedEntity.Name; this.textBoxEntityBase.Text = docEntity.BaseDefinition; + + // find existing type or reference type in schema + DocSchema docSchema = (DocSchema)this.m_path[1]; + + // 1. Existing entity in schema + // 2. Existing reference in schema + // 3. Make new reference to other schema + + DocDefinition docDef = docSchema.GetDefinition(form.SelectedEntity.Name); + if (docDef == null) + { + // generate link to schema + foreach (DocSection docSection in this.m_project.Sections) + { + foreach (DocSchema docOtherSchema in docSection.Schemas) + { + docDef = docOtherSchema.GetDefinition(form.SelectedEntity.Name); + if (docDef is DocEntity) + { + DocEntity docEntityBase = (DocEntity)docDef; + DocSchemaRef docSchemaReference = null; + foreach (DocSchemaRef docSchemaRef in docSchema.SchemaRefs) + { + if (String.Equals(docSchemaRef.Name, docOtherSchema.Name, StringComparison.OrdinalIgnoreCase)) + { + docSchemaReference = docSchemaRef; + break; + } + } + + if (docSchemaReference == null) + { + docSchemaReference = new DocSchemaRef(); + docSchemaReference.Name = docOtherSchema.Name.ToUpper(); + docSchema.SchemaRefs.Add(docSchemaReference); + } + + DocDefinitionRef docDefRef = new DocDefinitionRef(); + docDef = docDefRef; + docDef.Name = form.SelectedEntity.Name; + docSchemaReference.Definitions.Add((DocDefinitionRef)docDef); + + docDef.DiagramRectangle = new DocRectangle(); + docDef.DiagramNumber = docEntity.DiagramNumber; + docDef.DiagramRectangle.X = docEntity.DiagramRectangle.X; + docDef.DiagramRectangle.Y = docEntity.DiagramRectangle.Y - 200; + docDef.DiagramRectangle.Width = docEntity.DiagramRectangle.Width; + docDef.DiagramRectangle.Height = 100; + + } + + break; + + } + + if (docDef != null) + break; + } + } + + if (docDef != null && docDef.DiagramRectangle != null) + { + // find page target, make page reference + if (docDef is DocDefinitionRef) + { + DocDefinitionRef ddr = (DocDefinitionRef)docDef; + + // find existing page target + foreach (DocPageTarget docPageTarget in docSchema.PageTargets) + { + if (docPageTarget.Definition == ddr) + { + // found it -- make page source + DocPageSource docPageSource = new DocPageSource(); + docPageTarget.Sources.Add(docPageSource); + docDef = docPageSource; + break; + } + } + } + + if (docDef.DiagramRectangle == null) + { + docDef.DiagramRectangle = new DocRectangle(); + docDef.DiagramNumber = docEntity.DiagramNumber; + docDef.DiagramRectangle.X = docEntity.DiagramRectangle.X; + docDef.DiagramRectangle.Y = docEntity.DiagramRectangle.Y - 100; + docDef.DiagramRectangle.Width = docEntity.DiagramRectangle.Width; + docDef.DiagramRectangle.Height = docEntity.DiagramRectangle.Height; + } + + DocLine docLine = new DocLine(); + CtlExpressG.LayoutLine(docDef, docEntity, docLine.DiagramLine); + docLine.Definition = docEntity; + + if (docDef is DocEntity) + { + ((DocEntity)docDef).Tree.Add(docLine); + } + else if(docDef is DocDefinitionRef) + { + ((DocDefinitionRef)docDef).Tree.Add(docLine); + + } + + } + + if(this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } + } + } private void buttonEntityBaseClear_Click(object sender, EventArgs e) @@ -1980,8 +2161,19 @@ private void buttonEntityBaseClear_Click(object sender, EventArgs e) } } + foreach (DocLine docLine in docEntBase.Tree) { + foreach(DocLine docLineSub in docLine.Tree) + { + if(docLineSub.Definition == docEntity) + { + docLineSub.Delete(); + docLine.Tree.Remove(docLineSub); + break; + } + } + if (docLine.Definition == docEntity) { docLine.Delete(); @@ -1991,8 +2183,42 @@ private void buttonEntityBaseClear_Click(object sender, EventArgs e) } } + DocSchema docSchema = this.m_project.GetSchemaOfDefinition(docEntity); + + foreach(DocSchemaRef docSchemaRef in docSchema.SchemaRefs) + { + foreach (DocDefinitionRef docEntBase in docSchemaRef.Definitions) + { + foreach (DocLine docLine in docEntBase.Tree) + { + foreach (DocLine docLineSub in docLine.Tree) + { + if (docLineSub.Definition == docEntity) + { + docLineSub.Delete(); + docLine.Tree.Remove(docLineSub); + break; + } + } + + if (docLine.Definition == docEntity) + { + docLine.Delete(); + docEntBase.Tree.Remove(docLine); + break; + } + } + } + } + docEntity.BaseDefinition = null; } + + this.textBoxEntityBase.Text = String.Empty; + if (this.SchemaChanged != null) + { + this.SchemaChanged(this, EventArgs.Empty); + } } public void DoInsert(ToolMode toolmode) @@ -2011,7 +2237,7 @@ public void DoInsert(ToolMode toolmode) } - public DocModelRule SelectedRule + public SEntity SelectedRule { get { @@ -2020,7 +2246,7 @@ public DocModelRule SelectedRule set { this.ctlRules.Selection = value; - this.ctlOperators.Rule = value; + this.ctlOperators.Rule = value as DocModelRule; } } @@ -2064,9 +2290,6 @@ private void ctlRules_ContentChanged(object sender, EventArgs e) } } - public event EventHandler RuleSelectionChanged; - public event EventHandler RuleContentChanged; - private void toolStripButtonTranslationInsert_Click(object sender, EventArgs e) { using (FormSelectLocale form = new FormSelectLocale()) @@ -2618,5 +2841,39 @@ private void textBoxExample_TextChanged(object sender, EventArgs e) docExample.File = Encoding.ASCII.GetBytes(this.textBoxExample.Text); } + private void comboBoxPropertyAccess_SelectedIndexChanged(object sender, EventArgs e) + { + if (this.m_loadall) + return; + + DocProperty docProperty = (DocProperty)this.m_target; + docProperty.AccessState = (DocStateEnum)this.comboBoxPropertyAccess.SelectedIndex; + } + + private void comboBoxQuantityAccess_SelectedIndexChanged(object sender, EventArgs e) + { + if (this.m_loadall) + return; + + DocQuantity docProperty = (DocQuantity)this.m_target; + docProperty.AccessState = (DocStateEnum)this.comboBoxPropertyAccess.SelectedIndex; + } + + private void checkBoxPublishHtmlExamples_CheckedChanged(object sender, EventArgs e) + { + DocPublication docPub = (DocPublication)this.m_target; + docPub.HtmlExamples = checkBoxPublishHtmlExamples.Checked; + } + + private void toolStripButtonExampleLink_Click(object sender, EventArgs e) + { + if (this.openFileDialogExample.ShowDialog() == DialogResult.OK) + { + DocExample docExample = (DocExample)this.m_target; + docExample.Path = this.openFileDialogExample.FileName; + docExample.File = null; + } + } + } } diff --git a/CtlProperties.ja.resx b/CtlProperties.ja.resx index 30da78e1..0116e457 100644 --- a/CtlProperties.ja.resx +++ b/CtlProperties.ja.resx @@ -126,6 +126,9 @@ 説明 + + 文書化 + @@ -142,60 +145,20 @@ hYezAaRgDAPIwcPJAPLx//8ARLZjI8VMTLsAAAAASUVORK5CYII= - - - NoControl - - - NoControl - - - 文書化 - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - - - NoControl - 一致 - - NoControl + + クリア - - NoControl + + 274, 13 - - NoControl + + アイコン (16×16 テーブル内のハイパーリンクに使用される) + + + セットアイコン テンプレート @@ -203,38 +166,135 @@ 概念 - - NoControl - - - NoControl + + 必要条件 - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJfSURBVDhPjZNbSJNhGMe/bETURRBdBUJ4URTEFgXRTRHa + IGWbzJK66GCuqDB1uFLx0MHJwqUiumpEoi3dIQ+ZRqZ5/Jxuw6ZbUzxVo8KQdRGD6MKLf8/7fWUfNMwX + /vDy8fx/z//hex8uzph44UBjyve0FxqsRfsakqJxWQcLOI7bRpJxzGzy5iK45EHkxyK+RsOYjUzC96UP + ve9daJl+iMeTJlT68lHi1iFn8ATk1cd/kjlFgDBq/8d2hJZ8mPsWwEzEj4lFHny4Cy/nbLCHamH1l6HC + m0eATOgH06Ht0IDMJaRdIuBDG0Y/dVPXN/B87sVwuBPd83a0TlvRGDCjdrwY5WPZKOTPCQk0zwVAFUku + ADpm6vFqvgk9C068XnCga/YJRbfCFqzEA/9tmH0G3HRfgmH4NK4NaJEsAqpJCo7FsQWr4AjVwTV1H84p + C5rf1aAhUEHmWzT7DZSNXkUBf1bozgDH2iWAVAJY3pYKcz6aKCcZha4140XC3HfIzKKz2ZmZ6UibBKCi + OCZPjlB8z3cdZq8Bd716GMeyUOq+iHz+DJlPrpiZDrVKAMkUp5A/j+KRTDLohF9VNJIhGPOGTq3Elmp/ + i/ovQEkAVpRLXfRD6YLYPXsg7R/jH+11SQCJNE+sotW0Uwo4SoAr/bELY0nXp8UOpwQQX58U1fZocXkN + kAwy7+5MxRaLcpnM4kNii5FAb1vxTI09FC2B6Nsdamy1q7C5WYUNTSqsfypqI9031SmX1x2OnySz+JTp + sK1ii8E+MCqLtppYDasVl4mO7PeF0eQkxX/EalgteTjZL721DKNyzYwHAAAAAElFTkSuQmCC + - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJVSURBVDhPfZNdSJNRGMdPcxVe2EVFNIoIKooIVoEQBUGB + Ua0uoi4Kqgstgr5IKBiFEUEXFmmaUUZfW82lLXP2oeUHM2FZWA3dcJX7cJvu3dbcnMaCLv49z7uiNV72 + wp/nnJf/73+eczhHqOpdpRqDJ3nYJkH/Lory3giOdIVxoC2EXdYAtlj8WG/2YpVxGJo7X1BQ9TElTj7U + CyHmktRCY3AmX32bxICUhjv2E45wGjbfFCyuCdzsH8fF3hiOdUjY/WIMa54GMavBB1HZlyZYJ4fonodg + dafQ5ZlCj+8HOj2TaBlK4YEjgat9cZy1RVHWLkHXOooVlgAKzX6IGy4QXEFaLna2BnH/cwLmwSSanBNy + vfcpgWvv47jwNoYTHRHsfTmGjc9CWNAUgNpEAXVODqgiaUVJcwCX7XHUEFD3YVyulfbvON8Tw6nOCA62 + hbHNOoqVliCKzCOY9oi2cH2QA6pJq8WGRj/OdEdxzhZDBUFcT9P86BsJ+wneQa2vpb3PaxxBAa/OAbVZ + AVqTl048LO/z0GsJpe1hGdxDh1bSEoKW4PkET/8Ls2oG/gUsNgxjMxm3UpvbaTWum2he3BzEsicBzH6c + A+cGFN39ikV0OEvJzMAS0kKazyGwsMEPVS6cG6C67ZZPdgaZZ5K48lxlyoGylR0g6t3Kpnz6L+DWkLIp + n6odWQFX+lPC6FU2KsnogSgz/SI4c5HEcYNeXLKn5bb4gtRS5bGSeGWG1+1zEJy5yvTxq+KHwT84lVvL + J/awN/OY6FP/GXAatcT7yiv2sJcYof4NnuUmtS83AXEAAAAASUVORK5CYII= + - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIoSURBVDhPlZPLaxNRGMVnkT/BhTs3ta2aSaJSxbcuFEWs + UBctoiBSsYg7Cwali660m6oggiK4VMEH6MbWR16KNG2T6tjWN1VLG5sxncTWLuK9x/PNGGyMURw43NzM + +Z3vu3fuNfKJmoMziXXO7HAYhdEuOFYncoPtsPvaYD/ZDzvehGx0O+zIRmQfNmDsbqhwp7s+bBjGAspn + zCbWOGriKnQuDuST0F9i0Jkb0B8vQL/thB49CmW1QA1thUqtQjG5FOmbwTnCO92Qb6kW6PHL0JPXCd7i + eA360yXo913Qr45DjbRCPW9iwGaowRVQA/XIPjBBuIOqM2b6m2k+Df3hHHUeeuws9LtT0K9PsPoRqBd7 + oZ7tgEqvJRyA6q/F5143oJsKGoWnu1mpncBJ6DcdHvjyGOE2wvsIN7L6JlZfyYAlDFhcCjhDhQzn8Tao + 4QPQI4eow+4oc2U1E95FeAvX3kDY71aXgEzPvIDp+AbPKOu09nijCzI4zXcubBKsc+HKgBgN6fUU25SN + klHmqdVseznhZWVwZUA0SKOIZtlld+RmCcgdL7VdNcCJltbGKgNSSSTzSrCksoB8TFr8s7Gayr7C18T/ + B0zeC/wKsHvNwvdk9XZ/V7GvFtaVRUXC3kGKXKwJT9w256YjfuQe+XlM/Zi6b2KKbUqr85XpCbhwa+PC + IcLeUeYjt0ouhvwhqdLa3yQe8XqXiY/v5w9JC1Khf0g84iVj+H4AZbxenFtgTrIAAAAASUVORK5CYII= + - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKnSURBVDhPhZPZS1RhGMbPhX9BdBveCF05Z9wqXHMhl2HU + 3MZJRx3NcTctl2lqtEzNrLSihWyRwqggoqsgvKg/IEoiCCIDKaOpOXO2GRe8eHrfc5KZCOrAA8Pw/Z7n + Xb5P+FptaV51ZSjalAf6+Q5oky1Qx1xQ/Q4o3gooA3bIfUWQu/MQas3ESm2StliQ4BUEYScpTmB48+UC + Nl8tYOPFHNafzWLt0QQi8ycQvtEPfbaNTBugjlRCGSwho1yslonrBNsME+1MEzYX72Dj+XUTfjyJyH0/ + wnODCF/phj7dDG3MCcVXDuVoIeTOHAQbUkGwn7Rb0MabCJzB2pNprD0cR+QewbeGEL7aA/1iK6VTOyNV + UIZskI/kI9SeiZ/1KWwwQxIFddSJyIMxSh1B5K4P4ZsDJjzjgXaWSj9VA+V4qZnelQPp8D4EDiWzwSzJ + Kii+KkRuD5vgtT6EL3dCv0DJDJ+mQXLpx4oh9+Qi5MmA1JSG7w5r1EAeLDV7vdRBJdMmpt3QJuqhjlKy + r4y2QHCvWbrUvAdSfTJWq8WogdRXDP2cG/pUowFqlKr6aeJeOyXT+nppfe1ZkFr2QmpIQbDWii+VMQbB + rnyjTx6UepL2zv3SupT+A8bKjORt2GlF0CFipSLG4IcnG8owpdGUuVwD7MmjdWVTz+mQ3FS2KwqzPpfH + GATc6bSeAqNUuXs/5I4sE+TUxlSjZy57G2Z9KrNEDb7VpSHUlmFCtCJjUAy6CHQm/QFu64M9xmC5QtT4 + ZkksLrWOQUqs/RtkBWpELOTFbxFsXqSnOQnet/bE9eWDVBr19rHUYiS8t1nwrsSCpeJEvCky9bowEfMJ + 8VuOXTuWCDavMn38qvhh8B/syqX9S3yGz5qPib643z/YTSRZ/yM+w2eJEeJ+ATR6Fx996KZnAAAAAElF + TkSuQmCC + - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZNfSFNRHMePKErDMVKMkL2kFcOWGJphEYPe + LLfdu6VopcsV/RllVkqKhTMhVMImhIY+KKYGxe6mVkKamy7FzASLEIqgHnxPeurp2/deFEZMVPrC5+X8 + vp9zDtxzRcwMntqZO1L0q8BvXxVH03O4oidx2mwryQtYm9vmb8O3UI999/LHuHSIJGnDTdNv3VMyUYrw + j2GMfRvCtakLEAfTajkxks1vkRu0Pe1easX49+cILPegc7EJB1oKvnBkITqttGH6C09UTp7D668DUJa7 + MfCpHU+4gTvkgq4o08dGBonXurFyOGiLdCw0YuhzB/qW2tC16MXD+VrcnbkEc5dlhZVCYtDK/8bwzOq4 + GCrniffR+bERvg/1aH1/E97Zy7gTKUfpuBOJJfv7WDWRBE2KTrZi/9kwcwUtc9V4MFeFptmraHjnRs30 + GdwIn4Yn5IC59+RvVmWSoknrMb6wuSveFqMu4tJQT6yZKkN1uBjXKa7jeOOA7nyWQiWbrN2Cj+YYH40n + 5ERVFNFiNGa/5Y8w6t00d5E4YfJbm89OxC7Hwslb6G/lTVPOJ0niuF9ardjGBmXspj3mLYRwkd3CNCLj + yCsZOS9lZI3KyBiWkE5SAhKSSaJiRzxJIDsUCQaupQYlUPYS9YuITOIh7eTRFlG7qqO6IpnsJepftx1U + R3X/J0L8Bd48LVrBtjyjAAAAAElFTkSuQmCC + - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAH+SURBVDhPpZNdSFNhHMb/5+yYUEqUIkWCqAUhFAkmXQSS + F9HuUiiom8yKRIJuCkQvFGcfMtmWK4xBJa71JUnUqBZkoZEr3NSGYF+rk01XYk266urpOQeJRRMnPvC7 + Of/nd96X9z1HUqbBv0ZcoYS4w3NSUrGNT7KJYs7SiiNo2+GPYffDKchx5yM+KSWZ5mzRNAUKV12dgDeS + wOXhHyi68RGyqew0J/kkjV04gt6a/m+4NvIT9qFZ1ASmoZz0jHNSQVaanQXTHKjM8X5AF1e2v5xF4/MZ + HAvEUdjzHrJzv4uNImIxuynTGRo8wBWbB2Zwqv87jlLe+yCGLb1fYGnsjbFhJavN7n8587R6vS+Kuidx + HHkcx0EeoPV+DKV3J5FzS4d25R1k1+FuNjcTzXSSo7jD+naW91CqvPcV5X2TKObK2Td1qL5PEG8UWpv/ + F6tVZK0p/U37YO2Knijy7+jYQPJu66ao+T5DrlOeR/W8hWI90UdjK5nfBT8axRVJKCwkkyz+w/lnvyW3 + oJZmHlFE6Qja1G7edapyKjwTkH2tA5TLSaaol8bmlvQC4zDruQuRQ2SdqM4QtIsRaO43yOgcQ8aFUWjO + EVgcYagdIYh9GNL+GnLuFeRsENI2BLG9AOUWYtyIFJN64iDONDG6hmO4kkU2EuOvWwqGY7jLicgfz/U6 + mmLSF3UAAAAASUVORK5CYII= + - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGESURBVDhPY8AGDi/VFbyy0PjDxRW6H11N+Q2AQrxAzAiW + JAZcWGrU/Ptm1n8Qnlamsh0oZAjE7GBJQuDEIjPF5/s9/v//8/H//59P/oPYFrq8pUApGSAm7Ioryw0W + //904v+/G9H//54z+v/vUcv/BU2qV4FS9kDMBVaEC5yYZ+T09lTi/38v5v//e1oFjt/u1fof4yE+AahE + CYiZwYqxgVvrdQ7/e7MWbDOyASC8e6rSU6ASTyDmBytGB6fmGQZ9vloFcTqaZhD+dEjjf3qg5AKgUg0g + ZgFrQgb31+k9BPkXm2YYPjlf5zNQaSAQC4E1wcCpeSZJP46pYdWEjEFqiiJl1wG16AExxBWgRPNok9YH + bBqw4VtrdX4qSrEnAbWKATEjONH8OqmKVTE2DFLbk6d0CKjZDIjZGR6v1f2ITSE+DHIFUHM8EEswXF9l + /P/5Dl2S8JXlJv+BmhuAGBQjDMpAnAXEfUDcTyQGqQXpAell4AFiFSAG5TpSMEgPSC8lgIEBACv7YkkN + KA9iAAAAAElFTkSuQmCC + - - 必要条件 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIzSURBVDhPpdNvSBNhHAfwk4KBJWZBVoRRRoq7u00rLaPO + 2bTanDZdXfknU9NioyWkKQlljqw3ldWLCIIgTXrTqwihFy2Mgl74ophRFJUsM2znbn/O8NW3357hi8rY + oB98uON5vt977sUdt9BM1AoZk3Ke6rcLoao16UZaSiMpbDOZ8R8QPdq9Psw+6MeQKXeElvKJjm0mmi8O + cb1yyoKfj25Cu98HpbsGOzPTOmlrLUn8Fp/twqA2eAGzwx5od7oQudKGYSlnnLYkkspC/5qPdrF0ur0C + 2t0eRG93IHrdicjlo5h270FT9ooBimwgi1h4oflUbXweGXAiesNFJ7ci3N+A0DkH1DNWPC7Lm6TIPpLO + wn/OW5tY/d1VjvClIwhfrEOoV0aoxw61w4Kgeze+NhRBzlp+i6I55O+3eLdfnAh22aCerYLaTddOC9T2 + MgRdJZhpK4bStBUvzPowRSvJMlaaH5+NPz3VXMxOYk6aEHRKmDm+A0rLNiiNWxCoK4C/xgD3ptUPqSKQ + xaz8xipkfKAPRjlGwdbtYNeWIjqxkBWV+gIEDhsRkA2MV+Ln1qXqmqm6kqRwPivv+SYbWVCp3xxHpwVq + 8+PFQ/HivCmHAef1WaNULiQ67n2liB8Hfw8l4pX0c1RuJKu4MbMYHq8Q4SOvLSLG9op4VS7gpVnAaKkA + r4nH05K4Z3QfW3uyiweVe0kuYR/HCXKVXEtSLOsk2YRbQmIPMZDYn5esjWQp+Z/huF96+DSWLHLtdgAA + AABJRU5ErkJggg== + - - NoControl + + 適用性 114, 356 @@ -245,9 +305,6 @@ テンプレートを追加 - - NoControl - 削る @@ -257,56 +314,14 @@ 定義済み型 - - NoControl - - - NoControl - 102, 23 実体を追加 - - NoControl - - - 適用性 - - - NoControl - - - 削る - - - NoControl - - - 加える - - - アイテム - - - NoControl - - - 44, 13 - - - アイテム - - - NoControl - - - セレクト - - - NoControl + + プロパティ 47, 13 @@ -314,9 +329,6 @@ データ型 - - NoControl - 63, 13 @@ -344,11 +356,14 @@ コンプレックス - - プロパティ + + 数量 - - NoControl + + 242, 13 + + + このテンプレートは次のエンティティで使用されている 43, 13 @@ -374,53 +389,29 @@ Q_時間 - - 数量 - - - NoControl + + 実体 クリア - - NoControl - 50, 17 抽象 - - NoControl - セレクト - - NoControl - 71, 13 スーパークラス - - 実体 - - - NoControl - - - 36, 13 - - - 大きさ - - - NoControl + + 属性 31, 13 @@ -428,21 +419,12 @@ 最大 - - NoControl - 31, 13 最小 - - NoControl - - - NoControl - アグリゲーション @@ -452,33 +434,21 @@ 最大 - - NoControl - インバース - - NoControl - 88, 13 属性のインバース - - NoControl - 62, 17 タグなし - - NoControl - 53, 13 @@ -500,48 +470,36 @@ コンテント - - NoControl - 77, 13 アグリゲーション - - NoControl - 80, 17 オプショナル - - NoControl - 7, 24 - - NoControl - 19, 13 - - 属性 - 表現 + + ビュー + 実体 @@ -569,9 +527,6 @@ コンテント - - NoControl - 279, 360 @@ -581,47 +536,29 @@ タグなし - - NoControl - 削る - - NoControl - ロード - - NoControl - 70, 13 XSDタグ設定 - - NoControl - セレクト - - NoControl - 43, 13 底面図 - - ビュー - - - NoControl + + 交換 101, 13 @@ -947,9 +884,6 @@ 34-61 51 31 組合 - - NoControl - 101, 13 @@ -1274,9 +1208,6 @@ 34-61 51 31 組合 - - NoControl - 78, 13 @@ -1310,9 +1241,6 @@ 31-90 00 00 閉鎖相 - - NoControl - 83, 26 @@ -1322,59 +1250,20 @@ エクスポート - - NoControl - 72, 17 インポート - - NoControl - 43, 13 適用性 - - NoControl - - - クリア - - - NoControl - - - セットアイコン - - - NoControl - - - 274, 13 - - - アイコン (16×16 テーブル内のハイパーリンクに使用される) - - - 交換 - - - NoControl - - - 別のテンプレートに移行 - - - NoControl - - - プロパティ + + 使用 モデルビュー @@ -1382,54 +1271,55 @@ 実体 - - NoControl - - - 242, 13 - - - このテンプレートは次のエンティティで使用されている - - - 使用 - - - NoControl - - - 75, 13 - - - ファイルの内容 - - - NoControl - - - 76, 13 - - - 該当するビュー - - - NoControl - - - クリア - - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABfSURBVDhP3YxbEoAgCEVZNstjZxRDCJhjE9pPH0ceFw8A + MK9xPohYIgnc6OTDe6Z9GIioYftZJvUbgQZZ0OePAvtsjHKpfxbY3g9fCOLRLJO6V9ATBaNM+2uo0AR1 + mA8t41zDYGgG2QAAAABJRU5ErkJggg== + - - ロード·ファイル + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABhSURBVDhPvcxRCoBACIRhj+3xvJkl24bRKINBD3/Q7uwn + Iu7fOj+qOooCunsaqDY0YGYQeQDrBxcAQtb9dZiHXRkZAVF+8z+w9xCoQo9fQNUG0I4Gqg0NoPOIArpu + YJ77AU7OZbEmCy7WAAAAAElFTkSuQmCC + 実例 + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB1SURBVDhPrZDRCcAgDAU7SD8dMuO5UGdQUoi81kOp9eNh + NJdDclxnKn9yC8xsKSgYCYl9CLzOOaOEel43QQCRN0g9P/EHCtKb8rgDHdAQ2wmiMRsObr+AhiPE7lvi + DKSen/gDfRv1vMYd6F1DbCf4kiZYTyoVZHp5fwaxxEAAAAAASUVORK5CYII= + + 操作 + + インヘリタンス + テンプレート @@ -1444,7 +1334,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy - CwAAAk1TRnQBSQFMAgEBBAEAATABAAEwAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CwAAAk1TRnQBSQFMAgEBBAEAATgBAAE4AQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -1546,7 +1436,201 @@ GHnNewm/syD8BvfA1J6LMQqMAAAAAElFTkSuQmCC - - インヘリタンス + + 変更 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 眺望 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABUSURBVDhP3cxBCgAhCEBRj+3xvJlNBJNNX4iGNi1eUNoX + Efd/nkNVt6SBXh/xXjIws8H5QLt0FIgw8P2UuTkQ0adoCkT1jQK0dy5AeA8Gq97APvcCZN1yd7JMcNIA + AAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAzSURBVDhPY2Bg+P+fMgwkKioqyMLDzQAIh3iM1YADBw4Q + hYezAaRgDAPIwcPJAPLx//8ARLZjI8VMTLsAAAAASUVORK5CYII= + + + + 出版 + + + 36, 13 + + + 大きさ + + + 形式 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0JAAAA + BFRleHQKSW1hZ2VJbmRleAxTdWJJdGVtQ291bnQIU3ViSXRlbTEJQmFja0NvbG9yB0NoZWNrZWQERm9u + dAlGb3JlQ29sb3IXVXNlSXRlbVN0eWxlRm9yU3ViSXRlbXMBAAAEBAAEBAAICDFTeXN0ZW0uV2luZG93 + cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0rTGlzdFZpZXdTdWJJdGVtAgAAABRTeXN0ZW0uRHJhd2luZy5Db2xv + cgMAAAABE1N5c3RlbS5EcmF3aW5nLkZvbnQDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAECAAAA + BgQAAAAEU1RFUAAAAAACAAAACQUAAAAF+v///xRTeXN0ZW0uRHJhd2luZy5Db2xvcgQAAAAEbmFtZQV2 + YWx1ZQprbm93bkNvbG9yBXN0YXRlAQAAAAkHBwMAAAAKAAAAAAAAAAAYAAEAAAkHAAAAAfj////6//// + CgAAAAAAAAAAGgABAAEFBQAAADFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0rTGlzdFZp + ZXdTdWJJdGVtBAAAAAR0ZXh0BG5hbWUFc3R5bGUIdXNlckRhdGEBAQQCPlN5c3RlbS5XaW5kb3dzLkZv + cm1zLkxpc3RWaWV3SXRlbStMaXN0Vmlld1N1Ykl0ZW0rU3ViSXRlbVN0eWxlAgAAAAIAAAAKCgoKBQcA + AAATU3lzdGVtLkRyYXdpbmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0u + RHJhd2luZy5Gb250U3R5bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABgkA + AAAUTWljcm9zb2Z0IFNhbnMgU2VyaWYAAARBBfb///8YU3lzdGVtLkRyYXdpbmcuRm9udFN0eWxlAQAA + AAd2YWx1ZV9fAAgDAAAAAAAAAAX1////G1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAEAAAAHdmFs + dWVfXwAIAwAAAAMAAAAL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0JAAAA + BFRleHQKSW1hZ2VJbmRleAxTdWJJdGVtQ291bnQIU3ViSXRlbTEJQmFja0NvbG9yB0NoZWNrZWQERm9u + dAlGb3JlQ29sb3IXVXNlSXRlbVN0eWxlRm9yU3ViSXRlbXMBAAAEBAAEBAAICDFTeXN0ZW0uV2luZG93 + cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0rTGlzdFZpZXdTdWJJdGVtAgAAABRTeXN0ZW0uRHJhd2luZy5Db2xv + cgMAAAABE1N5c3RlbS5EcmF3aW5nLkZvbnQDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAECAAAA + BgQAAAADWE1MAAAAAAIAAAAJBQAAAAX6////FFN5c3RlbS5EcmF3aW5nLkNvbG9yBAAAAARuYW1lBXZh + bHVlCmtub3duQ29sb3IFc3RhdGUBAAAACQcHAwAAAAoAAAAAAAAAABgAAQAACQcAAAAB+P////r///8K + AAAAAAAAAAAaAAEAAQUFAAAAMVN5c3RlbS5XaW5kb3dzLkZvcm1zLkxpc3RWaWV3SXRlbStMaXN0Vmll + d1N1Ykl0ZW0EAAAABHRleHQEbmFtZQVzdHlsZQh1c2VyRGF0YQEBBAI+U3lzdGVtLldpbmRvd3MuRm9y + bXMuTGlzdFZpZXdJdGVtK0xpc3RWaWV3U3ViSXRlbStTdWJJdGVtU3R5bGUCAAAAAgAAAAoKCgoFBwAA + ABNTeXN0ZW0uRHJhd2luZy5Gb250BAAAAAROYW1lBFNpemUFU3R5bGUEVW5pdAEABAQLGFN5c3RlbS5E + cmF3aW5nLkZvbnRTdHlsZQMAAAAbU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AwAAAAMAAAAGCQAA + ABRNaWNyb3NvZnQgU2FucyBTZXJpZgAABEEF9v///xhTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGUBAAAA + B3ZhbHVlX18ACAMAAAAAAAAABfX///8bU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AQAAAAd2YWx1 + ZV9fAAgDAAAAAwAAAAs= + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0JAAAA + BFRleHQKSW1hZ2VJbmRleAxTdWJJdGVtQ291bnQIU3ViSXRlbTEJQmFja0NvbG9yB0NoZWNrZWQERm9u + dAlGb3JlQ29sb3IXVXNlSXRlbVN0eWxlRm9yU3ViSXRlbXMBAAAEBAAEBAAICDFTeXN0ZW0uV2luZG93 + cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0rTGlzdFZpZXdTdWJJdGVtAgAAABRTeXN0ZW0uRHJhd2luZy5Db2xv + cgMAAAABE1N5c3RlbS5EcmF3aW5nLkZvbnQDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAECAAAA + BgQAAAAESlNPTgIAAAACAAAACQUAAAAF+v///xRTeXN0ZW0uRHJhd2luZy5Db2xvcgQAAAAEbmFtZQV2 + YWx1ZQprbm93bkNvbG9yBXN0YXRlAQAAAAkHBwMAAAAKAAAAAAAAAAAYAAEAAAkHAAAAAfj////6//// + CgAAAAAAAAAAGgABAAEFBQAAADFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0rTGlzdFZp + ZXdTdWJJdGVtBAAAAAR0ZXh0BG5hbWUFc3R5bGUIdXNlckRhdGEBAQQCPlN5c3RlbS5XaW5kb3dzLkZv + cm1zLkxpc3RWaWV3SXRlbStMaXN0Vmlld1N1Ykl0ZW0rU3ViSXRlbVN0eWxlAgAAAAIAAAAKCgoKBQcA + AAATU3lzdGVtLkRyYXdpbmcuRm9udAQAAAAETmFtZQRTaXplBVN0eWxlBFVuaXQBAAQECxhTeXN0ZW0u + RHJhd2luZy5Gb250U3R5bGUDAAAAG1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAMAAAADAAAABgkA + AAAUTWljcm9zb2Z0IFNhbnMgU2VyaWYAAARBBfb///8YU3lzdGVtLkRyYXdpbmcuRm9udFN0eWxlAQAA + AAd2YWx1ZV9fAAgDAAAAAAAAAAX1////G1N5c3RlbS5EcmF3aW5nLkdyYXBoaWNzVW5pdAEAAAAHdmFs + dWVfXwAIAwAAAAMAAAAL + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkMAwAAAFFTeXN0 + ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2Vu + PWIwM2Y1ZjdmMTFkNTBhM2EFAQAAACFTeXN0ZW0uV2luZG93cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0JAAAA + BFRleHQKSW1hZ2VJbmRleAxTdWJJdGVtQ291bnQIU3ViSXRlbTEJQmFja0NvbG9yB0NoZWNrZWQERm9u + dAlGb3JlQ29sb3IXVXNlSXRlbVN0eWxlRm9yU3ViSXRlbXMBAAAEBAAEBAAICDFTeXN0ZW0uV2luZG93 + cy5Gb3Jtcy5MaXN0Vmlld0l0ZW0rTGlzdFZpZXdTdWJJdGVtAgAAABRTeXN0ZW0uRHJhd2luZy5Db2xv + cgMAAAABE1N5c3RlbS5EcmF3aW5nLkZvbnQDAAAAFFN5c3RlbS5EcmF3aW5nLkNvbG9yAwAAAAECAAAA + BgQAAAADUkRGAgAAAAIAAAAJBQAAAAX6////FFN5c3RlbS5EcmF3aW5nLkNvbG9yBAAAAARuYW1lBXZh + bHVlCmtub3duQ29sb3IFc3RhdGUBAAAACQcHAwAAAAoAAAAAAAAAABgAAQAACQcAAAAB+P////r///8K + AAAAAAAAAAAaAAEAAQUFAAAAMVN5c3RlbS5XaW5kb3dzLkZvcm1zLkxpc3RWaWV3SXRlbStMaXN0Vmll + d1N1Ykl0ZW0EAAAABHRleHQEbmFtZQVzdHlsZQh1c2VyRGF0YQEBBAI+U3lzdGVtLldpbmRvd3MuRm9y + bXMuTGlzdFZpZXdJdGVtK0xpc3RWaWV3U3ViSXRlbStTdWJJdGVtU3R5bGUCAAAAAgAAAAoKCgoFBwAA + ABNTeXN0ZW0uRHJhd2luZy5Gb250BAAAAAROYW1lBFNpemUFU3R5bGUEVW5pdAEABAQLGFN5c3RlbS5E + cmF3aW5nLkZvbnRTdHlsZQMAAAAbU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AwAAAAMAAAAGCQAA + ABRNaWNyb3NvZnQgU2FucyBTZXJpZgAABEEF9v///xhTeXN0ZW0uRHJhd2luZy5Gb250U3R5bGUBAAAA + B3ZhbHVlX18ACAMAAAAAAAAABfX///8bU3lzdGVtLkRyYXdpbmcuR3JhcGhpY3NVbml0AQAAAAd2YWx1 + ZV9fAAgDAAAAAwAAAAs= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ+SURBVDhPhVNdSFNhGD7gRXe7KeqmHDLYonY2+xlogT9T + SGc1Sd2m/RmVq2EK1vqTiDRSqRX9mhWlUkppo6K8sBZUFHSRN0EXhlGJSmv/P0ft5ul9z6bYMnrgge98 + 532e73nf7xxhLkbLdcaxMvGpz6pHsL4YAUcBeD1s1nr681RWKlEQ0+TiVIxXiJcC9nxId1vx620fJh9f + RPzOcUTP2xFsKIZvhwHvTepBKs0gLmDNLCYsYnfAUYhpTzemX/VgauAapN7TiF1vQLRtF8KNpQjWGeHd + ugZP8lXPSbKcmDDh2P7qbMTvNWHS7YL08CwkWsduOOXTI002hJwmBPbnwF9twIRFD4dmcStJlcQ0gXsO + nbAg1nEI8VtHECdh7Go9oq4aRJqrEDq6mU4vgH9PFvzbVuMHGTzKzRgh8QaiQvDSRviUjeI6IT04B+k+ + JehpQbyLUtxsRPTKQURctQi32BE4YJKH+nWLHiSuk1NMVOgROrwRUy968T9Ife2ywZdSHRtwG1phrJyu + zJGDyYHOZNm/MWMwbJYNLhAzhe8Ux7fTgKDTjEjbvgQpbvhMDcLNe6m93bMM1NJ1ksHHkjkGQyVaz7gl + E77KVfBVJVlJzzYiFadytEyP9rXpXhInWuhap7J+pkg/aZjzCVL5oUiH/CWKNyRODJGgcOeq3Z826cA3 + Mp9ohkNFIo6pl30jzWVi4hoJ/G0rO7NUg0PkPkITThXy1F8bRTSol7L4NrGaNUmtDP4sNduVi1o7DBkj + L/NEvCsUZdGz9StxckW6N3uhHJtPZrEmqfkDvMGuHI374yHxpJm85j1+xzV/iWfAkbgvLtISM5PkNe+l + /M6C8Bt+U9RjWxhloQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFNSURBVDhPY8AF3jy9+f/PFpb/dy/s+A8VIh7ANP8/k/Z/ + dY0G3IB/L//+v5594z+IhgphB8iaFxQpwhWDNP9f9h9syJ+rf3Ab8m4tD1gziJ6cLoViwDOnJ2BDzsqf + xm0AsuaL+2ajGPAnDqIZrwFtbW3/W6OF/p/Y0P7fKyAMrhDkd5hmnAYga4ABmBiI/n34N1gzPAyQQxab + ZhjAKYcesi8/vPxv2aT9X69O7b96lRKYj+wCsCZkgB6yIM2Tr3f87zhb9z9zcwrcEKhyTEPQQxak2LhJ + 53/8+qj/8Suj//vP8f0vUy75/8OH7/+LZz2H4+fPP0MMwhayIEM08tX/ywCjEYRBfJCm6fv+/F944Pf/ + po2//xuGLfr/5MkniCEYIYsFPHz44b+q79z/SXN//Y9oewjGID5Umjhw+vRTsCYY3r37LmkG0AAwMAAA + tqlSvGZSt54AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABbSURBVDhPzY5BCgAxCAP9/0d9xhY1ktLDovbSuaRkkEbe + 4RuA0wCFC1X1t6Xx0xMUKapJdjFe0AWngRWNnzPJIapJrLhe0AWnAQoXjSUERYpqkl2MF3TB6Q0iCwgM + HTn+NhLLAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACISURBVDhP3Y9BCsAgDAT9/+P8hejdizdrwmYbUaTQS+mA + NGxmxYaf0R8CfQXL43l0QWvNRJYks3l8V1JKuvSMmCWPuFoyEGB9I5nl4gmW8xIrl1IoCSZinHZwe85Z + c5a9iFnPJuclr16w/IYXMU+5DgMZWTZijJRqrSr5IxnKdLeodQDaZwjhAnCbSoIhS3CfAAAAAElFTkSu + QmCC + \ No newline at end of file diff --git a/CtlProperties.resx b/CtlProperties.resx index 66d3ea28..9ac30e4a 100644 --- a/CtlProperties.resx +++ b/CtlProperties.resx @@ -571,7 +571,7 @@ ctlRules - IfcDoc.CtlRules, IfcDoc, Version=10.3.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlRules, IfcDoc, Version=11.1.0.0, Culture=neutral, PublicKeyToken=null tabPageTemplate @@ -610,7 +610,7 @@ ctlParameters - IfcDoc.CtlParameters, IfcDoc, Version=10.3.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlParameters, IfcDoc, Version=11.1.0.0, Culture=neutral, PublicKeyToken=null tabPageConcept @@ -810,23 +810,29 @@ 5 - - Top, Right + + label20 - - NoControl + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 263, 123 + + tabPageProperty - - 75, 23 + + 0 - - 15 + + comboBoxPropertyAccess - - Select... + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 1 buttonPropertyDataSecondary @@ -838,19 +844,7 @@ tabPageProperty - 0 - - - Top, Left, Right - - - 7, 125 - - - 250, 20 - - - 14 + 2 textBoxPropertyDataSecondary @@ -862,25 +856,7 @@ tabPageProperty - 1 - - - True - - - NoControl - - - 6, 107 - - - 114, 13 - - - 13 - - - Secondary Data Type: + 3 label18 @@ -892,25 +868,7 @@ tabPageProperty - 2 - - - Top, Right - - - NoControl - - - 263, 74 - - - 75, 23 - - - 12 - - - Select... + 4 buttonPropertyDataPrimary @@ -922,19 +880,7 @@ tabPageProperty - 3 - - - Top, Left, Right - - - 7, 76 - - - 250, 20 - - - 11 + 5 textBoxPropertyDataPrimary @@ -946,25 +892,7 @@ tabPageProperty - 4 - - - True - - - NoControl - - - 6, 58 - - - 97, 13 - - - 10 - - - Primary Data Type: + 6 labelPropertyType @@ -976,25 +904,7 @@ tabPageProperty - 5 - - - True - - - NoControl - - - 6, 9 - - - 76, 13 - - - 9 - - - Property Type: + 7 label4 @@ -1006,39 +916,6 @@ tabPageProperty - 6 - - - Top, Left, Right - - - P_SINGLEVALUE - - - P_ENUMERATEDVALUE - - - P_BOUNDEDVALUE - - - P_LISTVALUE - - - P_TABLEVALUE - - - P_REFERENCEVALUE - - - COMPLEX - - - 7, 27 - - - 331, 21 - - 8 @@ -1051,7 +928,7 @@ tabPageProperty - 7 + 9 4, 22 @@ -1080,6 +957,30 @@ 6 + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageQuantity + + + 0 + + + comboBoxQuantityAccess + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageQuantity + + + 1 + labelQuantityType @@ -1090,7 +991,7 @@ tabPageQuantity - 0 + 2 comboBoxQuantityType @@ -1102,7 +1003,7 @@ tabPageQuantity - 1 + 3 4, 22 @@ -1990,7 +1891,7 @@ ctlOperators - IfcDoc.CtlOperators, IfcDoc, Version=10.3.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlOperators, IfcDoc, Version=11.1.0.0, Culture=neutral, PublicKeyToken=null tabPageOperations @@ -2187,92 +2088,290 @@ 18 - - checkBoxPublishExchangeTables - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPagePublication + + Top, Bottom, Left, Right - - 0 + + 6, 242 - - checkBoxPublishUML + + True - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 340, 146 - - tabPagePublication + + 10 - - 1 + + For the Documentation tab, the list of translations indicates those included within the overall publication; if none specified, then all available translations are included. + +For the Identity tab, fields are used for generating the header frame. + +If change logs are specified underneath the publication, they override change logs defined for the project overall. + +The EXPRESS schema identifier is defined at the first node in the tree. - - textBoxFooter + + textBoxPublicationNote - + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPagePublication - - 2 - - - textBoxHeader - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - tabPagePublication + + True - - 3 + + NoControl - - label17 + + 6, 211 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 331, 17 - - tabPagePublication + + 8 - - 4 + + Provide examples with HTML annotations (increases overall size) - - label5 + + checkBoxPublishHtmlExamples - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + tabPagePublication - - 5 + + 1 - - checkBoxPublishISO + + True - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - tabPagePublication + + 6, 188 - - 6 + + 261, 17 - - checkBoxPublishHideHistory + + 7 + + + Show tables of exchanges applicable to concepts + + + checkBoxPublishExchangeTables + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 2 + + + True + + + NoControl + + + 6, 165 + + + 213, 17 + + + 6 + + + UML diagrams (instead of EXPRESS-G) + + + checkBoxPublishUML + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 3 + + + Top, Left, Right + + + 6, 77 + + + 340, 20 + + + 5 + + + textBoxFooter + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 4 + + + Top, Left, Right + + + 6, 26 + + + 340, 20 + + + 4 + + + textBoxHeader + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 5 + + + True + + + NoControl + + + 3, 61 + + + 68, 13 + + + 3 + + + Page Footer: + + + label17 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 6 + + + True + + + NoControl + + + 3, 10 + + + 73, 13 + + + 2 + + + Page Header: + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 7 + + + True + + + NoControl + + + 6, 142 + + + 307, 17 + + + 1 + + + ISO conformance (encapsulates EXPRESS with comments) + + + checkBoxPublishISO + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPagePublication + + + 8 + + + True + + + NoControl + + + 6, 119 + + + 120, 17 + + + 0 + + + Hide change history + + + checkBoxPublishHideHistory System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2281,7 +2380,7 @@ tabPagePublication - 7 + 9 4, 22 @@ -3153,54 +3252,6 @@ 14 - - Fill - - - 3, 3 - - - 346, 388 - - - 4 - - - ctlRules - - - IfcDoc.CtlRules, IfcDoc, Version=10.3.0.0, Culture=neutral, PublicKeyToken=null - - - tabPageTemplate - - - 0 - - - Fill - - - 3, 3 - - - 346, 388 - - - 9 - - - ctlParameters - - - IfcDoc.CtlParameters, IfcDoc, Version=10.3.0.0, Culture=neutral, PublicKeyToken=null - - - tabPageConcept - - - 0 - Fill @@ -3304,17 +3355,17 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJVSURBVDhPfZNdbItRGMePrsgu5gIRDREJQkRSJBIhkZBM - UC6ECxJcDJEwQkLSkIlIXIzYbCZMfLV0tala52NjH+ksqZGh2dqsWD/WduvbVteum1Ti4u953hLVvOmb - /POc8+b/+5/nnJwjVPXuMo3Bmzpsl6B/F8OpniiOdEawvzWMnbYgNlsCWGf2YYVxCJo7X1BU9TEtTjzU - CyFmk9RCY3ClXn2bQL+UgSf+E85IBnb/JCzucdzsG8PFnjiOtUvY9WIUq56GMKPBD1HZmyFYJ4fonodh - 86TR6Z1Et/8HOrwTaB5M44Eziau9CZy1x3CwTYKuZQTLLEEUmwMQN9wguIK0VOxoCeH+5yTMAyk0ucbl - eu9TEtfeJ3DhbRzH26PY83IUG56FMa8pCLWJAupcHFBF0opSaxCXHQnUEFD3YUyulY7vON8dx8mOKA60 - RrDVNoLllhBKzMOY8oi2cH2AA6pJK8X6xgDOdMVwzh5HBUFcT9P86BsJ+wjeTq2vpr3PaRxGEa/OAbU5 - AVqTj048Iu/z0GsJZW0RGdxNh1baHIaW4LkET/0Ls2r6/wUsNAxhExm3UJvbaDWuG2m+xhrCkidBzHyc - B+cHlNz9igV0OIvJzMAi0nyazyKwuCEAVT6cH6C67ZFPdhqZp5O48lxlyoNylRsg6j3KpkL6L+DWoLKp - kKqdOQFX+tLC6FM2KsnohSi3/iI4e5FEuUEvLjkyclt8QWqp8lhJvDLDa/c6Cc5eZfr4VfHD4B+cyq0V - EnvYm31M9Kn/DDiNWuJ9FRR72EuMUP8Gt4Em2ZC0+WsAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJVSURBVDhPfZNdSJNRGMdPcxVe2EVFOIoIKooIVoEQBUGB + Ua0uoi4KKsiKoC8KCkZhRNCFRZpmlNHXZnNpy5x9aKkxE5aF1dANV7kPt+nebc3NaSzo4t/zvCta42Uv + /HnOefn//uc5h3OEqs5VpjF4kodsEvTvojjVE8HhrjD2toWw3RrARosfa8xeLDcOQXPnCwoqP6bEiXq9 + EGI2SS00Bmfy5bcJ9EtpuGM/4QinYfNNwuIax82+MVzsieFoh4Qdz0ex8kkQMxp8EBW9aYJ1cojuWQhW + dwpdnkl0+36g0zOBlsEUHjgSuNobx1lbFAfaJehaR7DUEkCh2Q9xwwWCy0lLxLbWIO5/TsA8kESTc1yu + 9z4lcO19HBfexnC8I4JdL0ax7mkIc5sCUJsooNbJAZUkrShtDuCyPY5qAmo/jMm1wv4d57tjONkZwb62 + MDZbR7DMEkSReRhTHtIWrg9wQBVphVjb6MeZN1Gcs8VQThDX0zQ/8lrCHoK3UuuraO9zGodRwKtzQE1W + gNbkpRMPy/s8+EpCWXtYBnfSoZW2hKAluJjgqX9hVnX/v4AFhiFsIOMmanMLrcZ1Pc1LmoNY/DiAmY9y + 4NyAortfMZ8OZxGZGVhImkfzWQQWNvihyoVzA1S33fLJTiPzdBJXnqtMOVC2sgNEnVvZlE//BdwaVDbl + U5UjK+BKX0oYvcpGJRk9EPvrfxGcuUjimEEvLtnTclt8QWqo8lhJvDLDq3c7CM5cZfr4VfHD4B+cyq3l + E3vYm3lM9Kn/DDiNWuJ95RV72EuMUP8GmW0mrYDKLnIAAAAASUVORK5CYII= @@ -3359,19 +3410,19 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKmSURBVDhPhZPZS1RhGMbPhX9BdBveCF3NnHGrcM2F3Bg1 - t3HSUUdz3E3LZZoaLVMzK61oIdsobIOMroLwov6AKIkgiAykjKw5c7YZF7x4et9zkpkI6sADw/D9nudd - vk/4WmltXHalKtqEB/rZNmjjTVBHXFD9DijeMih9dsg9+ZA7sxFsTsNSdbw2nxvnFQRhOylGYHjj5Sw2 - Xs1i/cUM1p5NY/XRGMJ3jiF0rRf6dAuZ1kEdKofSX0hGWVguEdcILjJMtFMN2Ji/hfXnV0348TjC9/wI - zfQjdKkT+mQjtBEnFF8plMN5kNszEahLAsF+0k5BG20gcAqrTyax+nAU4bsE3xhA6HIX9PPNlE7tDFVA - GSiCfCgHwdY0/KxNZIMpkiiow06E749Q6hDCt30IXe8z4SkPtNNU+okqKEeLzfSOTEgH92DlQAIbTJNs - guKrQPjmoAle6UHoYjv0c5TM8EkaJJd+pAByVxaCnlRIDcn47rBFDOT+YrPXC21UMm1i0g1trBbqMCX7 - SmgLBHebpUuNuyDVJmC5UowYSD0F0M+4oU/UG6BGqaqfJu61UzKtr5vW15oOqWk3pLpEBKpt+FIeZRDo - yDH65EGpx2nv3C+tS+ndZ6zMSN6CnTYEHCKWyqIMfngyoAxSGk2ZyzXArmxaVwb1nALJTWW7IjDrc2mU - wYo7hdaTa5Qqd+6F3JZugpxan2T0zGVvwaxPJdaIwbeaZARbUk2IVmQMikEXgc74P8AtfbBHGSyWiRrf - LInFpdYwSInVf4OslSoRc9mxmwSbF+lpZpz3rd2ytrifSqPePhZbjYT3RVa8K7RiocCCN/mmXudZ8MAS - u+nYsW2BYPMq08evih8G/8GuXNq/xGf4rPmY6Iv5/YPdRJLtP+IzfJYYIeYXRNgXOMZhBJUAAAAASUVO - RK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKnSURBVDhPhZPZS1RhGMbPhX9BdBtCCF05Z9wqXHMhN0bN + bZx01NEcd9NymaZGy9TMSitayBZJjAoiugrCi/oDoiSCIDKQMpqaM2ebccGLp/c9J5mJoA48MAzf73ne + 5fuEr1WWplVnmqJNuqFfaIc20Qx11AnVZ4fiKYfSb4PcWwC5KwfBlnSs1CRoi3lxHkEQdpJiBIY3Xy5g + 89UCNl7MYv3ZDNYejSM8dxKhm33QZ1rJtB7qcAWUgSIyysZqqbhOcLFhop1txObiXWw8v2HCjycQnvch + NDuA0NUu6FNN0EYdULxlUI7lQ+7IQqA+GQT7SHsEbayRwGmsPZnC2sMxhO8TfHsQoWvd0C+1UDq1M1wJ + ZbAY8tFcBNvS8bMuiQ2mSaKgjjgQfjBKqcMI3/MidKvfhKfd0M5R6aeroZwoMdM7syAd2Q//4UQ2mCFZ + BcVbifCdIRO83ovQlQ7oFymZ4TM0SC79eCHk7mwE3WmQGlPw3W6NGMgDJWavl9upZNrElAvaeB3UEUr2 + ltIWCO4xS5ea9kKqS8RqlRgxkHoLoZ93QZ9sMECNUlUfTdxjo2RaXw+try0DUvM+SPVJCNRY8aUiyiDQ + mWv0yYNST9HeuV9al9J30FiZkbwNO6wI2EWslEcZ/HBnQhmiNJoyl2uA3Tm0rkzqORWSi8p2RmDW57Io + A78rldaTZ5Qqdx2A3J5hgpzakGz0zGVvw6xPpZaIwbfaFARb00yIVmQMikEngY6EP8BtfbBFGSyXixrf + LInFpdYySIk1f4Msf7WI+ZzYLYLNi/Q0K87z1ha/vnyISqPePpZYjIT3xRa8K7JgqTAebwpMvc6Px9zu + 2C37rh1LBJtXmT5+Vfww+A925dL+JT7DZ83HRF/M7x/sJpKs/xGf4bPECDG/ADG6FxsSsBFXAAAAAElF + TkSuQmCC @@ -3389,16 +3440,16 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZNfSFNRHMePKIrDMVKMkL2kFcOWGJphEYPe - /LPt3i1FS12tKBtlVoqJhTMhVMLmi5Y9JKYGxe6mVkJamy7F1ASLEIqgHnpXeurp2/deEkYsVPrC5+X8 - vp9zDtxzRcwMl+zIGytdK/Tb18WRjFyu6EmcNttK8gPW9q6F6/AtNWPvrYIJLh0kSdpw0wxad5dPVSD8 - bRQTX0ZwafosxIH0Rk6MZPNb5AVtj/tXOjH59SkCqw/Ru9yG/R2FnziyEJ1W+mcGi46feVOFl5+HoKz2 - Y+hDN+5zA3fIBV1plo+NTBKvdWPlUNAW6VlqxcjHHgysdKFv2Yu7C424OXse5j7LD1aKiEEr/x3DE6vj - XKiaJ95G7/tW+Bab0fnuKrxzF9AUqUbFpBOJ5fsGWDWRBE2KTo5i/94yW4uO+Xrcma9D29xFtLx1o2Hm - JK6ET8ATcsD8qPgnqzJJ1aSNGJ/Z3DWvy3Aj4tJQT2yYrkR9uAyXKW7geOWA7nS2QiWH/LkFH81RPhpP - yIm6KKLFaMx+yy9h1Ltp7iRxwuS3tp+ail2OhZO30F/Ln6FcQJLEMb+0XrONDSrZTX/AWwjhIruEaUzG - 4Rcycp/LyB6XkTkqIYOkBiSkkETFjniSQJIVCQaupQUlUPYS9YuILOIh3eTeFlG7qqO6IoXsIepftx1U - R3X/J0L8BuOHLV+T4BiJAAAAAElFTkSuQmCC + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZNfSFNRHMePKErDMVKMkL2kFcOWGJphEYPe + LLfdu6VopcsV/RllVkqKhTMhVMImhIY+KKYGxe6mVkKamy7FzASLEIqgHnxPeurp2/deFEZMVPrC5+X8 + vp9zDtxzRcwMntqZO1L0q8BvXxVH03O4oidx2mwryQtYm9vmb8O3UI999/LHuHSIJGnDTdNv3VMyUYrw + j2GMfRvCtakLEAfTajkxks1vkRu0Pe1easX49+cILPegc7EJB1oKvnBkITqttGH6C09UTp7D668DUJa7 + MfCpHU+4gTvkgq4o08dGBonXurFyOGiLdCw0YuhzB/qW2tC16MXD+VrcnbkEc5dlhZVCYtDK/8bwzOq4 + GCrniffR+bERvg/1aH1/E97Zy7gTKUfpuBOJJfv7WDWRBE2KTrZi/9kwcwUtc9V4MFeFptmraHjnRs30 + GdwIn4Yn5IC59+RvVmWSoknrMb6wuSveFqMu4tJQT6yZKkN1uBjXKa7jeOOA7nyWQiWbrN2Cj+YYH40n + 5ERVFNFiNGa/5Y8w6t00d5E4YfJbm89OxC7Hwslb6G/lTVPOJ0niuF9ardjGBmXspj3mLYRwkd3CNCLj + yCsZOS9lZI3KyBiWkE5SAhKSSaJiRzxJIDsUCQaupQYlUPYS9YuITOIh7eTRFlG7qqO6IpnsJepftx1U + R3X/J0L8Bd48LVrBtjyjAAAAAElFTkSuQmCC @@ -3416,16 +3467,16 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAH+SURBVDhPpZNfSFNhGMbfc3ZUsCTSECMh1IIQioSSLgTJ - i2h3FhTUTWZFEUk3BWEXRrNSJttyhTKoxLX+SRI1qgVZaOSMbWYj0MrVyZZLMSdddfX0nIPEokmTHvjd - nPf5ne/j+86RtDnlXy6ucFLckTkpr97IJ3lEMWcZxRG0bfHHse3hV8hh5yM+qSA55uyfOR0oWXJ1FN5o - Ep2h7yi9MQ5Zu+kkJ8Ukg104gt66vm+4NjwL++AM6gKTUI573nJSTXLNzoJpCtQUeD+ggyvbX86g8fk0 - DgUSKOl+D6na7WKjlFjMbtq0hwf2cMWm/mmc6JvCQcq1D+JY3/MZlsaeOBtWsszs/pVzT3eu9MVw5EkC - Bx4nsJcHaL0fR8XdCRTc0qFdeQfZur+LzXVEM53UKO6Ivpnl7ZRq7n1BZe8Eyrhy3k0dqu8jxBuD1uz/ - weoOkm9Kv9M6UJ/dHUPxHR2rSOFt3RQ13yfIdcrzqJ4xKNZjvTQ2kPld8KNRXNGkwkIqqeIftDz7KStW - 19MsJIoobUGb2sW7TldOh2cUsutsP+VKkiPq5ZG5Rb3AOMwG7kJkHykS1RmGdikKzf0GWe0jyLr4Gppz - GBZHBGpbGGIPQVpfQS4MQc4HIc2DENsLUD5DjBuRMnKUOIgzQ4yu4RiuLCVriPHXLQbDMdz/icgv0yI6 - ncPOd9sAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAH+SURBVDhPpZNdSFNhHMb/5+yYUEqUIkWCqAUhFAkmXQSS + F9HuUiiom8yKRIJuCkQvFGcfMtmWK4xBJa71JUnUqBZkoZEr3NSGYF+rk01XYk266urpOQeJRRMnPvC7 + Of/nd96X9z1HUqbBv0ZcoYS4w3NSUrGNT7KJYs7SiiNo2+GPYffDKchx5yM+KSWZ5mzRNAUKV12dgDeS + wOXhHyi68RGyqew0J/kkjV04gt6a/m+4NvIT9qFZ1ASmoZz0jHNSQVaanQXTHKjM8X5AF1e2v5xF4/MZ + HAvEUdjzHrJzv4uNImIxuynTGRo8wBWbB2Zwqv87jlLe+yCGLb1fYGnsjbFhJavN7n8587R6vS+Kuidx + HHkcx0EeoPV+DKV3J5FzS4d25R1k1+FuNjcTzXSSo7jD+naW91CqvPcV5X2TKObK2Td1qL5PEG8UWpv/ + F6tVZK0p/U37YO2Knijy7+jYQPJu66ao+T5DrlOeR/W8hWI90UdjK5nfBT8axRVJKCwkkyz+w/lnvyW3 + oJZmHlFE6Qja1G7edapyKjwTkH2tA5TLSaaol8bmlvQC4zDruQuRQ2SdqM4QtIsRaO43yOgcQ8aFUWjO + EVgcYagdIYh9GNL+GnLuFeRsENI2BLG9AOUWYtyIFJN64iDONDG6hmO4kkU2EuOvWwqGY7jLicgfz/U6 + mmLSF3UAAAAASUVORK5CYII= @@ -3730,14 +3781,395 @@ 6 - + True - + NoControl - - 6, 9 + + 6, 11 + + + 73, 13 + + + 17 + + + Access State: + + + label20 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 0 + + + Top, Left, Right + + + READWRITE + + + READONLY + + + LOCKED + + + READWRITELOCKED + + + READONLYLOCKED + + + 7, 27 + + + 331, 21 + + + 16 + + + comboBoxPropertyAccess + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 1 + + + Top, Right + + + NoControl + + + 263, 174 + + + 75, 23 + + + 15 + + + Select... + + + buttonPropertyDataSecondary + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 2 + + + Top, Left, Right + + + 7, 176 + + + 250, 20 + + + 14 + + + textBoxPropertyDataSecondary + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 3 + + + True + + + NoControl + + + 6, 158 + + + 114, 13 + + + 13 + + + Secondary Data Type: + + + label18 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 4 + + + Top, Right + + + NoControl + + + 263, 125 + + + 75, 23 + + + 12 + + + Select... + + + buttonPropertyDataPrimary + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 5 + + + Top, Left, Right + + + 7, 127 + + + 250, 20 + + + 11 + + + textBoxPropertyDataPrimary + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 6 + + + True + + + NoControl + + + 6, 109 + + + 97, 13 + + + 10 + + + Primary Data Type: + + + labelPropertyType + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 7 + + + True + + + NoControl + + + 6, 60 + + + 76, 13 + + + 9 + + + Property Type: + + + label4 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 8 + + + Top, Left, Right + + + P_SINGLEVALUE + + + P_ENUMERATEDVALUE + + + P_BOUNDEDVALUE + + + P_LISTVALUE + + + P_TABLEVALUE + + + P_REFERENCEVALUE + + + COMPLEX + + + 7, 78 + + + 331, 21 + + + 8 + + + comboBoxPropertyType + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageProperty + + + 9 + + + True + + + NoControl + + + 6, 11 + + + 73, 13 + + + 19 + + + Access State: + + + label21 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageQuantity + + + 0 + + + Top, Left, Right + + + READWRITE + + + READONLY + + + LOCKED + + + READWRITELOCKED + + + READONLYLOCKED + + + 7, 27 + + + 331, 21 + + + 18 + + + comboBoxQuantityAccess + + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + tabPageQuantity + + + 1 + + + True + + + NoControl + + + 6, 60 76, 13 @@ -3758,7 +4190,7 @@ tabPageQuantity - 0 + 2 Top, Left, Right @@ -3782,7 +4214,7 @@ Q_TIME - 7, 27 + 7, 78 331, 21 @@ -3800,7 +4232,7 @@ tabPageQuantity - 1 + 3 Top, Right @@ -6125,9 +6557,6 @@ 3 - - toolStrip4 - toolStrip4 @@ -6165,6 +6594,26 @@ &Open + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABhSURBVDhPvcxRCoBACIRhj+3xvJkl24bRKINBD3/Q7uwn + Iu7fOj+qOooCunsaqDY0YGYQeQDrBxcAQtb9dZiHXRkZAVF+8z+w9xCoQo9fQNUG0I4Gqg0NoPOIArpu + YJ77AU7OZbEmCy7WAAAAAElFTkSuQmCC + + + + Magenta + + + 23, 22 + + + Link File + + + Migrate selected usages to another template + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -6179,32 +6628,8 @@ 23, 22 - - He&lp - - - Fill - - - 3, 3 - - - 346, 388 - - - 0 - - - ctlOperators - - - IfcDoc.CtlOperators, IfcDoc, Version=10.3.0.0, Culture=neutral, PublicKeyToken=null - - - tabPageOperations - - - 0 + + He&lp Template @@ -6241,7 +6666,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy - CwAAAk1TRnQBSQFMAgEBBAEAASQBAQEkAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CwAAAk1TRnQBSQFMAgEBBAEAAYwBAQGMAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -6505,380 +6930,152 @@ 30, 22 - - SPF - - - False - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG - YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 - 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw - bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc - VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 - c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 - Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo - mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ - kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D - TgDQASA1MVpwzwAAAABJRU5ErkJggg== - - - - Magenta - - - 35, 22 - - - XML - - - False - - - NOCHANGE - - - ADDED - - - DELETED - - - MODIFIED - - - MOVED - - - 121, 25 - - - Fill - - - 3, 28 - - - 346, 363 - - - 1 - - - listViewViews - - - System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageViews - - - 0 - - - Model View - - - 300 - - - 1288, 17 - - - 3, 3 - - - 346, 25 - - - 0 - - - toolStrip4 - - - toolStripViews - - - System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageViews - - - 1 - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABUSURBVDhP3cxBCgAhCEBRj+3xvJlNBJNNX4iGNi1eUNoX - Efd/nkNVt6SBXh/xXjIws8H5QLt0FIgw8P2UuTkQ0adoCkT1jQK0dy5AeA8Gq97APvcCZN1yd7JMcNIA - AAAASUVORK5CYII= - - - - Magenta - - - 23, 22 - - - Insert View - - - False - - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAzSURBVDhPY2Bg+P+fMgwkKioqyMLDzQAIh3iM1YADBw4Q - hYezAaRgDAPIwcPJAPLx//8ARLZjI8VMTLsAAAAASUVORK5CYII= - - - - Magenta - - - 23, 22 - - - Remove View - - - Remove View - - - True - - - NoControl - - - 6, 188 - - - 261, 17 - - - 7 - - - Show tables of exchanges applicable to concepts - - - checkBoxPublishExchangeTables - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPagePublication - - - 0 - - - True - - - NoControl - - - 6, 165 - - - 213, 17 - - - 6 - - - UML diagrams (instead of EXPRESS-G) - - - checkBoxPublishUML - - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPagePublication - - - 1 - - - Top, Left, Right - - - 6, 77 - - - 340, 20 - - - 5 - - - textBoxFooter - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPagePublication - - - 2 - - - Top, Left, Right - - - 6, 26 - - - 340, 20 - - - 4 - - - textBoxHeader - - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPagePublication - - - 3 + + SPF - - True + + False - - NoControl + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + - - 3, 61 + + Magenta - - 68, 13 + + 35, 22 - - 3 + + XML - - Page Footer: + + False - - label17 + + NOCHANGE - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ADDED - - tabPagePublication + + DELETED - - 4 + + MODIFIED - - True + + MOVED - - NoControl + + 121, 25 - - 3, 10 + + Fill - - 73, 13 + + 3, 28 - - 2 + + 346, 363 - - Page Header: + + 1 - - label5 + + listViewViews - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ListView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPagePublication + + tabPageViews - - 5 + + 0 - - True + + Model View - - NoControl + + 300 - - 6, 142 + + 1288, 17 + + + 3, 3 - - 109, 17 + + 346, 25 - - 1 + + 0 - - ISO conformance + + toolStrip4 - - checkBoxPublishISO + + toolStripViews - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPagePublication + + tabPageViews - - 6 + + 1 - - True + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABUSURBVDhP3cxBCgAhCEBRj+3xvJlNBJNNX4iGNi1eUNoX + Efd/nkNVt6SBXh/xXjIws8H5QLt0FIgw8P2UuTkQ0adoCkT1jQK0dy5AeA8Gq97APvcCZN1yd7JMcNIA + AAAASUVORK5CYII= + - - NoControl + + Magenta - - 6, 119 + + 23, 22 - - 120, 17 + + Insert View - - 0 + + False - - Hide change history + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAzSURBVDhPY2Bg+P+fMgwkKioqyMLDzQAIh3iM1YADBw4Q + hYezAaRgDAPIwcPJAPLx//8ARLZjI8VMTLsAAAAASUVORK5CYII= + - - checkBoxPublishHideHistory + + Magenta - - System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 23, 22 - - tabPagePublication + + Remove View - - 7 + + Remove View Format @@ -7140,6 +7337,78 @@ Load IFC Example + + Fill + + + 3, 3 + + + 346, 388 + + + 4 + + + ctlRules + + + IfcDoc.CtlRules, IfcDoc, Version=11.1.0.0, Culture=neutral, PublicKeyToken=null + + + tabPageTemplate + + + 0 + + + Fill + + + 3, 3 + + + 346, 388 + + + 9 + + + ctlParameters + + + IfcDoc.CtlParameters, IfcDoc, Version=11.1.0.0, Culture=neutral, PublicKeyToken=null + + + tabPageConcept + + + 0 + + + Fill + + + 3, 3 + + + 346, 388 + + + 0 + + + ctlOperators + + + IfcDoc.CtlOperators, IfcDoc, Version=11.1.0.0, Culture=neutral, PublicKeyToken=null + + + tabPageOperations + + + 0 + True @@ -7329,6 +7598,12 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripButtonExampleLink + + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStripButtonExampleClear diff --git a/CtlRules.cs b/CtlRules.cs index d98af7e4..ea98f422 100644 --- a/CtlRules.cs +++ b/CtlRules.cs @@ -17,7 +17,7 @@ public partial class CtlRules : UserControl DocTemplateDefinition m_parent; DocTemplateDefinition m_template; DocAttribute m_attribute; - DocModelRule m_selection; + SEntity m_selection; SEntity m_instance; public event EventHandler SelectionChanged; @@ -79,7 +79,7 @@ public DocAttribute Attribute } } - public DocModelRule Selection + public SEntity Selection { get { @@ -500,6 +500,8 @@ private void toolStripButtonTemplateRemove_Click(object sender, EventArgs e) { DocModelRuleEntity dme = (DocModelRuleEntity)this.treeViewTemplate.SelectedNode.Parent.Tag; dme.References.Remove(dtd); + this.m_template.PropagateRule(this.treeViewTemplate.SelectedNode.Parent.FullPath); + this.treeViewTemplate.SelectedNode.Remove(); } else @@ -610,7 +612,7 @@ private void UpdateCommands() private void treeViewTemplate_AfterSelect(object sender, TreeViewEventArgs e) { this.m_attribute = null; - this.m_selection = e.Node.Tag as DocModelRule; + this.m_selection = e.Node.Tag as SEntity; UpdateCommands(); if (this.SelectionChanged != null) @@ -684,9 +686,21 @@ private void toolStripButtonRuleRef_Click(object sender, EventArgs e) return; } - docRule.References.Add(form.SelectedTemplate); + DocTemplateDefinition dtd = form.SelectedTemplate; + docRule.References.Add(dtd); + + TreeNode tnTemplate = LoadTemplateRuleNode(tnSelect, dtd, dtd.Name); + if (dtd.Rules != null) + { + foreach (DocModelRule docTemplateRule in dtd.Rules) + { + LoadTemplateGraph(tnTemplate, docTemplateRule); + } + } + + this.m_template.PropagateRule(this.treeViewTemplate.SelectedNode.FullPath); - LoadTemplateGraph(tnSelect, docRule); + //LoadTemplateGraph(tnSelect, docRule); } } } diff --git a/DataDictionary.cs b/DataDictionary.cs new file mode 100644 index 00000000..bf3d0300 --- /dev/null +++ b/DataDictionary.cs @@ -0,0 +1,103 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using System.Net; +using System.Web; + +using IfcDoc.Schema.DOC; +using No.Catenda.Peregrine.Model.Objects; + +namespace IfcDoc +{ + public class DataDictionary + { + public static void Upload(DocProject project, string baseurl, string username, string password) + { + string url = baseurl + "api/4.0/session/login?email=" + HttpUtility.UrlEncode(username) + "&password=" + HttpUtility.UrlEncode(password); + + + HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); + request.Method = "POST"; + request.ContentLength = 0; + request.ContentType = "application/x-www-form-urlencoded"; + request.Accept = "application/json"; + HttpWebResponse response = (HttpWebResponse)request.GetResponse(); + System.IO.Stream stream = response.GetResponseStream(); + System.IO.StreamReader reader = new System.IO.StreamReader(stream); + string body = reader.ReadToEnd(); + + string cookie = response.Headers.Get("Set-Cookie"); + + string[] parts = cookie.Split(new char[] { ';', ',' }); // bug? comma separates session ID + string match = "peregrineapisessionid="; + string sessionid = null; + foreach(string part in parts) + { + if(part.StartsWith(match)) + { + sessionid = part.Substring(match.Length); + break; + } + } + + /*-Get all users: +var client = new RestClient("http://test.bsdd.buildingsmart.org/api/4.0/IfdUser/"); +var request = new RestRequest(Method.GET); +request.AddHeader("cookie", "peregrineapisessionid=thesessionid"); +request.AddHeader("accept", "application/json"); +request.AddHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); +IRestResponse response = client.Execute(request);*/ + + /*- Get all languages: +var client = new RestClient("http://test.bsdd.buildingsmart.org/api/4.0/IfdLanguage/"); +var request = new RestRequest(Method.GET); +request.AddHeader("cookie", "peregrineapisessionid={{sessionId}}"); +request.AddHeader("accept", "application/json"); +request.AddHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8"); +IRestResponse response = client.Execute(request);*/ + request = (HttpWebRequest)HttpWebRequest.Create("http://test.bsdd.buildingsmart.org/api/4.0/IfdLanguage/"); + request.Method = "GET"; + request.ContentLength = 0; + request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; + request.Headers.Add("cookie", "peregrineapisessionid=" + sessionid); + request.Accept = "application/json"; + response = (HttpWebResponse)request.GetResponse(); + + stream = response.GetResponseStream(); + reader = new System.IO.StreamReader(stream); + body = reader.ReadToEnd(); + + body.ToString(); + + request = (HttpWebRequest)HttpWebRequest.Create("http://test.bsdd.buildingsmart.org/api/4.0/IfdConcept/search/filter/language/1ASQw0qJqHuO00025QrE$V/type/NEST/Pset_*"); + request.Method = "GET"; + request.ContentLength = 0; + request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; + request.Headers.Add("cookie", "peregrineapisessionid=" + sessionid); + request.Accept = "application/json"; + response = (HttpWebResponse)request.GetResponse(); + + stream = response.GetResponseStream(); + reader = new System.IO.StreamReader(stream); + body = reader.ReadToEnd(); + + request = (HttpWebRequest)HttpWebRequest.Create("http://test.bsdd.buildingsmart.org/api/4.0/IfdConcept/search/filter/language/1ASQw0qJqHuO00025QrE$V/type/NEST/Pset_*"); + request.Method = "GET"; + request.ContentLength = 0; + request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8"; + request.Headers.Add("cookie", "peregrineapisessionid=" + sessionid); + request.Accept = "application/json"; + response = (HttpWebResponse)request.GetResponse(); + + stream = response.GetResponseStream(); + reader = new System.IO.StreamReader(stream); + body = reader.ReadToEnd(); + + body.ToString(); + + } + } +} diff --git a/DocumentationISO.cs b/DocumentationISO.cs index c4625473..8582c5b6 100644 --- a/DocumentationISO.cs +++ b/DocumentationISO.cs @@ -51,13 +51,15 @@ public ContentRef(string caption, DocObject page) /// /// File path to export. /// Optional filter of templates to export. - /// Optional filter of views to export. + /// Optional filter of views to export, where first one indicates primary view (for defining schema). /// Optional filter of schemas to export. /// Optional filter of locales to export. - public static void DoExport(DocProject docProject, string filepath, DocModelView[] views, string[] locales, DocDefinitionScopeEnum scope, Dictionary instances) + public static void DoExport(DocProject docProject, DocPublication docPublication, string filepath, DocModelView[] views, string[] locales, DocDefinitionScopeEnum scope, Dictionary instances, + Dictionary mapEntity) { string ext = System.IO.Path.GetExtension(filepath).ToLower(); + string xmlns = null; Dictionary included = null; if (views != null) { @@ -66,15 +68,16 @@ public static void DoExport(DocProject docProject, string filepath, DocModelView { docProject.RegisterObjectsInScope(docView, included); } + xmlns = views[0].XsdUri; } // special case for zip files -- determine based on special naming; make configurable in future Type typeExport = null; - if (filepath.EndsWith("-psd.zip")) + if (filepath.EndsWith("-psd.zip_")) { typeExport = typeof(DocPropertySet); } - else if(filepath.EndsWith("-qto.zip")) + else if(filepath.EndsWith("-qto.zip_")) { typeExport = typeof(DocQuantitySet); } @@ -82,18 +85,28 @@ public static void DoExport(DocProject docProject, string filepath, DocModelView switch (ext) { case ".ifc": - using (FormatSPF format = new FormatSPF(filepath, Schema.IFC.SchemaIfc.Types, instances)) + Program.t_lastid = 0; + Program.t_instances = new Dictionary(); + SEntity.EntityCreated += Program.SEntity_EntityCreated; + try { - string filename = System.IO.Path.GetFileName(filepath); - format.InitHeaders(filename, "IFC4"); // we always use IFC4 (not later schema) for exporting templates, as that is the earliest version required. - Schema.IFC.IfcProject ifcProject = new IfcDoc.Schema.IFC.IfcProject(); - Program.ExportIfc(ifcProject, docProject, included); - format.Save(); + using (FormatSPF format = new FormatSPF(filepath, Schema.IFC.SchemaIfc.Types, Program.t_instances)) + { + string filename = System.IO.Path.GetFileName(filepath); + format.InitHeaders(filename, docProject.GetSchemaIdentifier()); + Schema.IFC.IfcProject ifcProject = new IfcDoc.Schema.IFC.IfcProject(); + Program.ExportIfc(ifcProject, docProject, included); + format.Save(); + } + } + finally + { + SEntity.EntityCreated -= Program.SEntity_EntityCreated; } break; case ".ifcxml": - using (FormatXML format = new FormatXML(filepath, typeof(Schema.IFC.IfcProject), "http://www.buildingsmart-tech.org/ifcXML/IFC4")) + using (FormatXML format = new FormatXML(filepath, typeof(Schema.IFC.IfcProject), xmlns)) { Schema.IFC.IfcProject ifcProject = new IfcDoc.Schema.IFC.IfcProject(); Program.ExportIfc(ifcProject, docProject, included); @@ -106,7 +119,7 @@ public static void DoExport(DocProject docProject, string filepath, DocModelView using (FormatXML format = new FormatXML(filepath, typeof(mvdXML), mvdXML.DefaultNamespace)) { mvdXML mvd = new mvdXML(); - Program.ExportMvd(mvd, docProject, included); + Program.ExportMvd(mvd, docProject, mapEntity, included); format.Instance = mvd; format.Save(); } @@ -116,6 +129,7 @@ public static void DoExport(DocProject docProject, string filepath, DocModelView using (FormatCSC format = new FormatCSC(filepath)) { format.Instance = docProject; + format.Map = mapEntity; format.Save(); } break; @@ -134,7 +148,8 @@ public static void DoExport(DocProject docProject, string filepath, DocModelView // use currently visible model view(s) using (FormatXSD format = new FormatXSD(filepath)) { - format.Instance = docProject; + format.Project = docProject; + format.Publication = docPublication; format.ModelViews = views; format.Save(); } @@ -172,6 +187,7 @@ public static void DoExport(DocProject docProject, string filepath, DocModelView break; case ".zip": + case ".zip_": using (FormatZIP format = new FormatZIP(new System.IO.FileStream(filepath, System.IO.FileMode.Create), docProject, included, typeExport)) { format.Save(); @@ -428,6 +444,8 @@ private static string FormatExchange(DocProject docProject, DocModelView docView } // table and description + sbMain.AppendLine(""); + sbMain.Append("
" + docConcept.Name + "
"); sbMain.Append(docConcept.Documentation); @@ -453,71 +471,26 @@ private static string FormatExchange(DocProject docProject, DocModelView docView { string name = docItem.GetParameterValue("Name"); string refv = docItem.GetParameterValue("Reference"); + string disp = "#" + docItem.GetColor().ToArgb().ToString("X8"); //docItem.GetParameterValue("Color"); string mapp = FormatReference(docProject, refv); + string desc = ""; - string desc = null; - CvtValuePath valpath = CvtValuePath.Parse(refv, mapEntity); - - if (valpath != null && - valpath.Property != null && - valpath.Property.Name.Equals("IsDefinedBy") && - valpath.InnerPath != null && valpath.InnerPath.Type.Name.Equals("IfcRelDefinesByProperties")) - { - DocObject docPset = null; - mapEntity.TryGetValue(valpath.Identifier, out docPset); - if (docPset is DocPropertySet) - { - DocProperty docProp = ((DocPropertySet)docPset).GetProperty(valpath.InnerPath.InnerPath.Identifier); - if (docProp != null) - { - desc = docProp.Documentation;// localize?? - } - } - else if (docPset is DocQuantitySet) - { - DocQuantity docProp = ((DocQuantitySet)docPset).GetQuantity(valpath.InnerPath.InnerPath.Identifier); - if (docProp != null) - { - desc = docProp.Documentation;// localize?? - } - } - } - else if (valpath != null && - valpath.Property != null && - valpath.Property.Name.Equals("HasPropertySets") && - valpath.InnerPath != null && valpath.InnerPath.Type.Name.Equals("IfcPropertySet")) + CvtValuePath valpath = CvtValuePath.Parse(refv, mapEntity); + if (valpath != null) { - DocObject docPset = null; - mapEntity.TryGetValue(valpath.Identifier, out docPset); - - if (docPset is DocPropertySet) - { - DocProperty docProp = ((DocPropertySet)docPset).GetProperty(valpath.InnerPath.Identifier); - if (docProp != null) - { - desc = docProp.Documentation;// localize?? - } - } + desc = valpath.GetDescription(mapEntity, docView); } - if (desc == null) + //int colorval = 0; + string style = ""; + if (!String.IsNullOrEmpty(disp))// && disp.StartsWith("#") && Int32.TryParse(disp.Substring(1), out colorval)) { - while (valpath != null && valpath.InnerPath != null && valpath.InnerPath.Property != null) - { - valpath = valpath.InnerPath; - } - if (valpath != null && valpath.Property != null) - { - desc = valpath.Property.Documentation; - } - else if(valpath != null) - { - desc = "The IFC class identifier indicating the subtype of object."; - } + // interpret colors as disposition -- todo: migrate to well-defined values + style = " style=\"background-color:" + disp + ";\""; } - sbMain.Append("" + name + "" + mapp + "" + desc + "" + docItem.Documentation + ""); + sbMain.Append("" + name + "" + mapp + "" + desc + "" + docItem.Documentation + ""); foreach (DocModelView docViewCross in listViewCross) { foreach (DocExchangeDefinition docExchangeCross in docViewCross.Exchanges) @@ -740,8 +713,7 @@ private static string FormatDiagram(DocProject docProject, DocObject def, DocMod // create the figure file string filename = MakeLinkName(def) + ".png"; - Dictionary layout = new Dictionary(); - //if (!Properties.Settings.Default.SkipDiagrams) + Dictionary layout = new Dictionary(); { try { @@ -807,7 +779,9 @@ private static string FormatDiagram(DocProject docProject, DocObject def, DocMod sb.Append("\">"); foreach (Rectangle rc in layout.Keys) { - DocModelRule rule = layout[rc]; + SEntity target = layout[rc]; + + DocModelRule rule = target as DocModelRule; DocObject ruleObject = null; string strschema = null; @@ -826,17 +800,36 @@ private static string FormatDiagram(DocProject docProject, DocObject def, DocMod typename = def.Name; } - if (mapEntity.TryGetValue(typename, out ruleObject) && mapSchema.TryGetValue(typename, out strschema)) + string caption = null; + string hyperlink = null; + if (target is DocTemplateDefinition) + { + DocTemplateDefinition dtd = (DocTemplateDefinition)target; + string relative = @"./"; + if (def is DocEntity) + { + relative = "../../../schema/templates/"; + } + + caption = dtd.Name; + hyperlink = relative + MakeLinkName(dtd) + ".htm"; + } + else if (typename != null && mapEntity.TryGetValue(typename, out ruleObject) && mapSchema.TryGetValue(typename, out strschema)) { - // hyperlink to IFC entity - // replace it with hyperlink string relative = @"../"; if (def is DocEntity) { relative = "../../../schema/"; } - string hyperlink = relative + strschema.ToLower() + @"/lexical/" + ruleObject.Name.ToLower() + ".htm"; + // hyperlink to IFC entity + // replace it with hyperlink + caption = ruleObject.Name; + hyperlink = relative + strschema.ToLower() + @"/lexical/" + ruleObject.Name.ToLower() + ".htm"; + } + + if (hyperlink != null) + { int indent = 0; sb.Append("\"");"); } + } sb.Append(""); @@ -1297,6 +1291,9 @@ private static void BuildExampleList(List listExample, DocExample do /// public static string MakeLinkName(DocObject docobj) { + if (docobj == null) + return null; + if (docobj.Name == null) return docobj.Uuid.ToString(); @@ -1681,7 +1678,7 @@ private static string FormatConceptTable( return sb.ToString(); } - private static string FormatReference(DocProject docProject, string value) + public static string FormatReference(DocProject docProject, string value) { if (value == null) return null; @@ -1708,7 +1705,36 @@ private static string FormatReference(DocProject docProject, string value) if (tokens.Length > 1) { sb.Append("."); - sb.Append(tokens[1]); + + DocPropertySet docPset = null; + DocQuantitySet docQset = null; + DocSchema docSchema = null; + string suffix = tokens[1]; + if (suffix.StartsWith("IsDefinedBy[") || suffix.StartsWith("HasProperties[")) // for IfcMaterialProperties + { + int bracketopen = suffix.IndexOf('[') + 2; + int bracketclose = suffix.IndexOf(']') - 1; + string psetname = suffix.Substring(bracketopen, bracketclose - bracketopen); + + docPset = docProject.FindPropertySet(psetname, out docSchema); + if (docPset == null) + { + docQset = docProject.FindQuantitySet(psetname, out docSchema); + } + } + + if (docPset != null) + { + sb.Append("IsDefinedBy['
" + docPset.Name + "']"); + } + else if (docQset != null) + { + sb.Append("IsDefinedBy['" + docQset.Name + "']"); + } + else + { + sb.Append(suffix); + } } sb.Append("
"); @@ -1757,11 +1783,21 @@ private static string FormatConcept( conceptcaption = usage.Definition.Name; } - // Caption - sb.Append("

"); - sb.Append(conceptcaption); - sb.Append("

"); - sb.AppendLine(); + // Caption + if (docPublication.ISO) + { + sb.Append("

"); + sb.Append(conceptcaption); + sb.Append("

"); + sb.AppendLine(); + } + else + { + sb.Append("

"); + sb.Append(conceptcaption); + sb.Append("

"); + sb.AppendLine(); + } // filter by particular model view DocModelView docModelView = null; @@ -1965,6 +2001,8 @@ SEntity outerinstanceroot } string indexpathstring = indexpathname.ToString(); + string htmlpreview = String.Empty; + string pathExample = path + @"\annex\annex-e\" + MakeLinkName(docExample) + ".htm"; using (FormatHTM htmExample = new FormatHTM(pathExample, mapEntity, mapSchema, included)) { @@ -1972,46 +2010,96 @@ SEntity outerinstanceroot htmExample.WriteScript(-5, indexpath[0], 0, 0); htmExample.WriteLine("

" + indexpathstring + " " + docExample.Name + "

"); + // extract file + byte[] filecontents = docExample.File; + if (filecontents == null && docExample.Path != null && !String.IsNullOrEmpty(Properties.Settings.Default.ConverterPath)) + { + try + { + // generate IFC file, read it + if (System.IO.File.Exists(Properties.Settings.Default.ConverterPath)) + { + string outputpath = System.IO.Path.GetDirectoryName(docExample.Path) + @"\" + System.IO.Path.GetFileNameWithoutExtension(docExample.Path) + ".ifc"; + + // execute + ////if (!System.IO.File.Exists(outputpath)) + { + System.Diagnostics.Process proc = System.Diagnostics.Process.Start(Properties.Settings.Default.ConverterPath, "-i " + docExample.Path); + proc.WaitForExit(); + } + + // now read the file + if (System.IO.File.Exists(outputpath)) + { + filecontents = System.IO.File.ReadAllBytes(outputpath); + + string previewpath = "./" + docExample.Name.Replace("_","") + "/index.htm"; + htmlpreview = "\"Preview\"/  Preview"; + } + else + { + System.Diagnostics.Debug.WriteLine("IfcDoc: missing example file: " + outputpath); + } + } + } + catch + { + } + } + // table of files - if (docExample.File != null) + if (filecontents != null) { htmExample.Write(""); - htmExample.Write(""); + htmExample.Write(""); + if (docPublication.HtmlExamples) + { + htmExample.Write(""); + } + htmExample.Write(""); - if (docExample.File != null && !Properties.Settings.Default.SkipDiagrams) + if (filecontents != null && !Properties.Settings.Default.SkipDiagrams) { string pathIFC = path + @"\annex\annex-e\" + MakeLinkName(docExample) + ".ifc"; using (System.IO.FileStream filestream = new System.IO.FileStream(pathIFC, System.IO.FileMode.Create, System.IO.FileAccess.Write, System.IO.FileShare.Read)) { - filestream.Write(docExample.File, 0, docExample.File.Length); + filestream.Write(filecontents, 0, filecontents.Length); } - using (FormatSPF spfExample = new FormatSPF(new System.IO.MemoryStream(docExample.File, false), typemap, null)) + using (FormatSPF spfExample = new FormatSPF(new System.IO.MemoryStream(filecontents, false), typemap, null)) { string pathListing = path + @"\annex\annex-e\" + MakeLinkName(docExample) + ".ifc.htm"; if (docPublication.GetFormatOption(DocFormatSchemaEnum.STEP) == DocFormatOptionEnum.Examples)//Properties.Settings.Default.ExampleSPF) { - using (FormatHTM htmListing = new FormatHTM(pathListing, mapEntity, mapSchema, included)) + if (docPublication.HtmlExamples) { - htmListing.WriteHeader(docExample.Name, 2, docPublication.Header); - - htmListing.WriteLine(""); - string htm = null; - try - { - htm = spfExample.LoadMarkup(); - outerinstancemap = spfExample.Instances; - } - catch + using (FormatHTM htmListing = new FormatHTM(pathListing, mapEntity, mapSchema, included)) { - } - htmListing.Write(htm); - htmListing.Write(""); - htmListing.WriteFooter(String.Empty); + htmListing.WriteHeader(docExample.Name, 2, docPublication.Header); + htmListing.WriteLine(""); + string htm = null; + try + { + htm = spfExample.LoadMarkup(); + outerinstancemap = spfExample.Instances; + } + catch + { + } + htmListing.Write(htm); + htmListing.Write(""); + htmListing.WriteFooter(String.Empty); + + } + } + else + { + spfExample.Load(); + outerinstancemap = spfExample.Instances; } } @@ -2029,9 +2117,9 @@ SEntity outerinstanceroot foreach (DocFormat docFormat in docPublication.Formats) { // generate example in other formats... - if (docFormat.FormatOptions == DocFormatOptionEnum.Examples) + if (docFormat.FormatOptions == DocFormatOptionEnum.Examples && docFormat.FormatType != DocFormatSchemaEnum.SQL) { - long filesize = docExample.File.LongLength; + long filesize = filecontents.LongLength; if (docFormat.FormatType != DocFormatSchemaEnum.STEP) { IFormatData formatext = null; @@ -2043,23 +2131,31 @@ SEntity outerinstanceroot { writer.Write(content); } + filesize = content.Length; - string conmark = formatext.FormatData(docProject, docPublication, null, mapEntity, spfExample.Instances, rootproject, true); - string pathHTM = pathRAW + ".htm"; - using (FormatHTM fmtHTM = new FormatHTM(pathHTM, mapEntity, mapSchema, included)) + if (docPublication.HtmlExamples) { - fmtHTM.WriteHeader(docExample.Name, 2, docPublication.Header); - fmtHTM.Write(conmark); - fmtHTM.WriteFooter(""); + string conmark = formatext.FormatData(docProject, docPublication, null, mapEntity, spfExample.Instances, rootproject, true); + string pathHTM = pathRAW + ".htm"; + using (FormatHTM fmtHTM = new FormatHTM(pathHTM, mapEntity, mapSchema, included)) + { + fmtHTM.WriteHeader(docExample.Name, 2, docPublication.Header); + fmtHTM.Write(conmark); + fmtHTM.WriteFooter(""); + } } - filesize = content.Length; } } string sizetext = filesize.ToString(); string ext = docFormat.ExtensionInstances; - htmExample.WriteLine(""); + htmExample.WriteLine(""); + if (docPublication.HtmlExamples) + { + htmExample.WriteLine(""); + } + htmExample.WriteLine(""); } } @@ -2069,6 +2165,8 @@ SEntity outerinstanceroot htmExample.Write("
FormatASCIIHTMLSize
FormatASCIIHTMLSize
" + docFormat.FormatType.ToString() + "FileMarkup" + sizetext + "
" + docFormat.FormatType.ToString() + "FileMarkup" + sizetext + "
"); + htmExample.WriteLine(htmlpreview); + htmExample.Write(""); htmExample.Write(""); foreach (DocModelView docView in docExample.Views) @@ -2099,7 +2197,7 @@ SEntity outerinstanceroot htmExample.WriteDocumentationMarkup(docExample.Documentation, docExample, docPublication); - if (docExample.File == null && outerinstancemap != null) + if (filecontents == null && outerinstancemap != null) { // if specific to exchange, capture inline if (docExample.Views.Count > 0) @@ -2118,6 +2216,15 @@ SEntity outerinstanceroot } } } + else if (filecontents != null && docExample.Examples.Count == 0 && outerinstancemap != null && docExample.Views.Count > 0 && docExample.Views[0].Exchanges.Count > 0) + { + DocExchangeDefinition docExchange = docExample.Views[0].Exchanges[0]; + + // if no sub-items, then render tables for all tabular data expressions defined + FormatSQL fmt = new FormatSQL(); + string content = fmt.FormatData(docProject, docPublication, docExchange, mapEntity, outerinstancemap, outerinstanceroot, false); + htmExample.Write(content); + } htmExample.WriteLinkTo(docExample); htmExample.WriteFooter(docPublication.Footer); @@ -2234,14 +2341,14 @@ private static void GenerateTemplate( } } - htmTemplate.WriteSummaryHeader("mvdXML Specification", false); - htmTemplate.WriteLine("
"); - htmTemplate.WriteExpression(mvdOutput.ToString()); //... need to use tabs... - htmTemplate.WriteLine("
"); - htmTemplate.WriteSummaryFooter(); - - //htmTemplate.WriteLine(""); - + if (!docPublication.ISO) + { + htmTemplate.WriteSummaryHeader("mvdXML Specification", false, docPublication); + htmTemplate.WriteLine("
"); + htmTemplate.WriteExpression(mvdOutput.ToString()); //... need to use tabs... + htmTemplate.WriteLine("
"); + htmTemplate.WriteSummaryFooter(docPublication); + } if (docProject.Examples != null) { @@ -2510,54 +2617,62 @@ private static string FormatEntityConcepts( if (docRoot.Concepts.Count > 0) { - sb.AppendLine("
"); - sb.AppendLine("Concept usage"); + if (!docPublication.ISO) + { + sb.AppendLine("
"); + sb.AppendLine("Concept usage"); + } + foreach (DocTemplateUsage eachusage in docRoot.Concepts) { FormatEntityUsage(docProject, entity, docRoot, eachusage, mapEntity, mapSchema, listFigures, listTables, included, sb, path, docPublication); } - sb.AppendLine("
"); - - //... mvdXML for entire root - ConceptRoot mvdConceptRoot = new ConceptRoot(); - Program.ExportMvdConceptRoot(mvdConceptRoot, docRoot, false); - XmlSerializer ser = new XmlSerializer(typeof(ConceptRoot)); - StringBuilder mvdOutput = new StringBuilder(); - using (System.IO.Stream streamMVD = new System.IO.MemoryStream()) + + if (!docPublication.ISO) { - ser.Serialize(streamMVD, mvdConceptRoot, null); - streamMVD.Position = 0; - using (System.IO.StreamReader reader = new System.IO.StreamReader(streamMVD)) + sb.AppendLine("
"); + + //... mvdXML for entire root + ConceptRoot mvdConceptRoot = new ConceptRoot(); + Program.ExportMvdConceptRoot(mvdConceptRoot, docRoot, docProject, mapEntity, false); + XmlSerializer ser = new XmlSerializer(typeof(ConceptRoot)); + StringBuilder mvdOutput = new StringBuilder(); + using (System.IO.Stream streamMVD = new System.IO.MemoryStream()) { - while (!reader.EndOfStream) + ser.Serialize(streamMVD, mvdConceptRoot, null); + streamMVD.Position = 0; + using (System.IO.StreamReader reader = new System.IO.StreamReader(streamMVD)) { - string mvdLine = reader.ReadLine(); - - int pos = 0; - while (pos < mvdLine.Length && mvdLine[pos] == ' ') + while (!reader.EndOfStream) { - mvdOutput.Append("\t"); - pos++; - } + string mvdLine = reader.ReadLine(); + + int pos = 0; + while (pos < mvdLine.Length && mvdLine[pos] == ' ') + { + mvdOutput.Append("\t"); + pos++; + } - // replace any leading spaces with tabs for proper formatting - string mvdMark = mvdLine.Substring(pos, mvdLine.Length - pos); - mvdOutput.AppendLine(mvdMark); + // replace any leading spaces with tabs for proper formatting + string mvdMark = mvdLine.Substring(pos, mvdLine.Length - pos); + mvdOutput.AppendLine(mvdMark); + } } } - } - string html = System.Web.HttpUtility.HtmlEncode(mvdOutput.ToString()); - html = html.Replace("\r\n", "
\r\n"); - html = html.Replace("\t", " "); - - //sb.AppendLine("
"); - sb.AppendLine("
mvdXML Specification"); - sb.AppendLine("
"); - sb.AppendLine(html); //... need to use tabs... - //sb.AppendLine(mvdOutput.ToString()); - sb.AppendLine("
"); - //sb.AppendLine("
"); + string html = System.Web.HttpUtility.HtmlEncode(mvdOutput.ToString()); + html = html.Replace("\r\n", "
\r\n"); + html = html.Replace("\t", " "); + + //sb.AppendLine("
"); + sb.AppendLine("
mvdXML Specification"); + sb.AppendLine("
"); + sb.AppendLine(html); //... need to use tabs... + //sb.AppendLine(mvdOutput.ToString()); + sb.AppendLine("
"); + //sb.AppendLine("
"); + } } } @@ -2566,7 +2681,7 @@ private static string FormatEntityConcepts( // now format inherited use definitions - if (listLines.Count > 0) + if (listLines.Count > 0 && !docPublication.ISO) { sb.AppendLine("
"); @@ -2611,7 +2726,7 @@ private static void FormatEntityUsage(DocProject docProject, DocEntity entity, D sb.Append(eachtext); sb.AppendLine(); - if (eachusage.Concepts.Count > 0) + if (eachusage.Concepts.Count > 0 && !docPublication.ISO) { sb.AppendLine("
"); sb.AppendLine("Concept alternates"); @@ -2731,7 +2846,7 @@ public static void Generate( public static void GeneratePublication( DocProject docProject, - string path, + string pathPublication, Dictionary instances, Dictionary mapEntity, Dictionary mapSchema, @@ -2742,6 +2857,10 @@ public static void GeneratePublication( instances.Clear(); // clear out old state from mvdxml export docPublication.ErrorLog.Clear(); + string path = pathPublication + @"\html"; + System.IO.Directory.CreateDirectory(pathPublication); // ensure directory exists + System.IO.Directory.CreateDirectory(path); // ensure directory exists + DiagramFormat diagramformat = DiagramFormat.ExpressG; if(docPublication.UML) { @@ -2749,11 +2868,22 @@ public static void GeneratePublication( } DocModelView[] views = docPublication.Views.ToArray(); - string[] locales = docPublication.Locales.ToArray(); List xsdFormatBase = docProject.BuildXsdFormatList(); string xmlns = "http://www.buildingsmart-tech.org/ifcXML/IFC4/final"; + if (views.Length > 0 && !String.IsNullOrEmpty(views[0].XsdUri)) + { + xmlns = views[0].XsdUri; + } + + List listChangeSets = docProject.ChangeSets; + if (docPublication.ChangeSets.Count > 0) + { + // override change sets for publication + listChangeSets = docPublication.ChangeSets; + } + // for now these are paired; in future they may be split Dictionary mapFormatSchema = new Dictionary(); Dictionary mapFormatData = new Dictionary(); @@ -2761,9 +2891,9 @@ public static void GeneratePublication( { switch(docFormat.FormatType) { - case DocFormatSchemaEnum.TTL: + case DocFormatSchemaEnum.OWL: mapFormatSchema.Add(docFormat.FormatType, new FormatOWL()); - mapFormatData.Add(docFormat.FormatType, new FormatTTL()); + mapFormatData.Add(docFormat.FormatType, new FormatTTL(new System.IO.MemoryStream(), xmlns)); break; case DocFormatSchemaEnum.SQL: @@ -2777,12 +2907,12 @@ public static void GeneratePublication( case DocFormatSchemaEnum.JSON: mapFormatSchema.Add(docFormat.FormatType, new FormatJAV()); - mapFormatData.Add(docFormat.FormatType, new FormatJSN(xsdFormatBase, xmlns, docPublication.Code)); + mapFormatData.Add(docFormat.FormatType, new FormatJSN(xsdFormatBase, xmlns, docPublication.GetReleaseIdentifier())); break; case DocFormatSchemaEnum.XML: mapFormatSchema.Add(docFormat.FormatType, new FormatXSD(null)); - mapFormatData.Add(docFormat.FormatType, new FormatSML(new System.IO.MemoryStream(), xsdFormatBase, xmlns, docPublication.Code)); + mapFormatData.Add(docFormat.FormatType, new FormatSML(new System.IO.MemoryStream(), xsdFormatBase, xmlns, docPublication.GetReleaseIdentifier())); break; } @@ -2854,6 +2984,43 @@ public static void GeneratePublication( } } + // if publication is limited to specific locales, then customize + if (docPublication.Localization.Count > 0) + { + for (int i = listLocale.Keys.Count - 1; i >= 0; i--) + { + string language = listLocale.Keys[i]; + + bool langincluded = false; + for (int j = 0; j < docPublication.Localization.Count; j++) + { + if (docPublication.Localization[j].Locale.StartsWith(language)) + { + langincluded = true; + break; + } + } + + if (!langincluded) + { + listLocale.Remove(language); + } + } + } + + string[] locales = new string[listLocale.Count]; + for(int k = 0; k < listLocale.Keys.Count; k++) + { + locales[k] = listLocale.Keys[k]; + } + + if (docPublication.ISO) + { + // only english translations, so set to NULL + locales = null; + listLocale = null; + } + // build filter Dictionary included = null; if (views != null) @@ -2894,6 +3061,12 @@ public static void GeneratePublication( } string projectcopy = docPublication.Copyright; + string coverentry = "
  • Cover
  • "; + if(docPublication.ISO) + { + coverentry = "
  • Cover
  • "; + } + htmProp.Write( "\r\n" + "" + @@ -2926,7 +3099,7 @@ public static void GeneratePublication( "
    " + "
    View
    " + "
      " + - "
    1. Cover
    2. " + + coverentry + "
    3. Contents
    4. " + "
    5. " + docPublication.Annotations[0].Name + "
    6. " + "
    7. " + docPublication.Annotations[1].Name + "
    8. " + @@ -2975,18 +3148,32 @@ public static void GeneratePublication( // cover - using (FormatHTM htmSection = new FormatHTM(path + "\\cover.htm", mapEntity, mapSchema, included)) + if (docPublication.ISO) { - htmSection.WriteHeader(docPublication.Name, 0, docPublication.Header); - htmSection.Write( - "\r\n" + - "\r\n"); - htmSection.WriteLine(docPublication.Documentation); - htmSection.WriteFooter(docPublication.Footer); + // separate cover page without frame + System.IO.File.SetAttributes(path + "\\index.htm", System.IO.FileAttributes.Normal); // strip off read-only flag from copying from source control + using (FormatHTM htmSection = new FormatHTM(path + "\\index.htm", mapEntity, mapSchema, included)) + { + htmSection.WriteHeader(docPublication.Name, 0, null); // no text for header + htmSection.WriteLine(docPublication.Documentation); + htmSection.WriteFooter(null); // no text for footer + } + } + else + { + using (FormatHTM htmSection = new FormatHTM(path + "\\cover.htm", mapEntity, mapSchema, included)) + { + htmSection.WriteHeader(docPublication.Name, 0, docPublication.Header); + htmSection.Write( + "\r\n" + + "\r\n"); + htmSection.WriteLine(docPublication.Documentation); + htmSection.WriteFooter(docPublication.Footer); + } } using (FormatHTM htmSection = new FormatHTM(path + "\\foreword.htm", mapEntity, mapSchema, included)) @@ -3043,63 +3230,70 @@ public static void GeneratePublication( { if (included == null || included.ContainsKey(docPset)) { - // include locales - foreach (DocLocalization doclocal in docPset.Localization) + if (docPset.IsVisible()) { - // only deal with languages, not regions - if (doclocal.Locale != null && doclocal.Locale.Length >= 2) + // include locales + foreach (DocLocalization doclocal in docPset.Localization) { - string language = doclocal.Locale.Substring(0, 2); - - if (!listLocale.ContainsKey(language)) + // only deal with languages, not regions + if (doclocal.Locale != null && doclocal.Locale.Length >= 2) { - listLocale.Add(language, doclocal.Locale); + string language = doclocal.Locale.Substring(0, 2); + + /* + if (!listLocale.ContainsKey(language)) + { + listLocale.Add(language, doclocal.Locale); + }*/ } } - } - foreach (DocProperty docProp in docPset.Properties) - { - string datatype = docProp.PrimaryDataType; - if (datatype == null) + foreach (DocProperty docProp in docPset.Properties) { - datatype = "IfcLabel"; // enumerations - } + string datatype = docProp.PrimaryDataType; + if (datatype == null) + { + datatype = "IfcLabel"; // enumerations + } - string match = docProp.Name + " (" + docProp.PropertyType.ToString() + "/" + datatype.ToString() + ")"; + string match = docProp.Name + " (" + docProp.PropertyType.ToString() + "/" + datatype.ToString() + ")"; - SortedList mapPset = null; - if (!mapProperty.TryGetValue(match, out mapPset)) - { - mapPset = new SortedList(); - mapProperty.Add(match, mapPset); - } + SortedList mapPset = null; + if (!mapProperty.TryGetValue(match, out mapPset)) + { + mapPset = new SortedList(); + mapProperty.Add(match, mapPset); + } - mapPset.Add(docPset.Name, docPset); + mapPset.Add(docPset.Name, docPset); - // include locales - foreach (DocLocalization doclocal in docProp.Localization) - { - // only deal with languages, not regions - if (doclocal.Locale != null && doclocal.Locale.Length >= 2) + // include locales + /* + foreach (DocLocalization doclocal in docProp.Localization) { - string language = doclocal.Locale.Substring(0, 2); - - if (!listLocale.ContainsKey(language)) + // only deal with languages, not regions + if (doclocal.Locale != null && doclocal.Locale.Length >= 2) { - listLocale.Add(language, doclocal.Locale); + string language = doclocal.Locale.Substring(0, 2); + + if (!listLocale.ContainsKey(language)) + { + listLocale.Add(language, doclocal.Locale); + } } } + */ } - } } } } } + + // now format listing of properties StringBuilder sbProperties = new StringBuilder(); foreach (string nameProp in mapProperty.Keys) @@ -3112,14 +3306,17 @@ public static void GeneratePublication( foreach (DocPropertySet pset in mapPset.Values) { - string proplinkurl = "../../schema/" + mapSchema[pset.Name].ToLower() + "/pset/" + pset.Name.ToLower() + ".htm"; - - sbProperties.Append("     "); - sbProperties.Append(""); - sbProperties.Append(pset.Name); - sbProperties.Append("
      "); + if (pset.IsVisible()) + { + string proplinkurl = "../../schema/" + mapSchema[pset.Name].ToLower() + "/pset/" + pset.Name.ToLower() + ".htm"; + + sbProperties.Append("     "); + sbProperties.Append(""); + sbProperties.Append(pset.Name); + sbProperties.Append("
      "); + } } sbProperties.Append(""); @@ -3176,10 +3373,13 @@ public static void GeneratePublication( htmTemplate.WriteLine("<" + tag + ">" + indexer + " " + docProjectModelView.Name + ""); // write table of status for MVD - htmTemplate.WriteLine(""); - htmTemplate.WriteLine(""); - htmTemplate.WriteLine(""); - htmTemplate.WriteLine("
      CodeVersionStatusAuthorCopyright
      " + docProjectModelView.Code + "" + docProjectModelView.Version + "" + docProjectModelView.Status + "" + docProjectModelView.Author + "" + docProjectModelView.Copyright + "
      "); + if (!docPublication.ISO) + { + htmTemplate.WriteLine(""); + htmTemplate.WriteLine(""); + htmTemplate.WriteLine(""); + htmTemplate.WriteLine("
      CodeVersionStatusAuthorCopyright
      " + docProjectModelView.Code + "" + docProjectModelView.Version + "" + docProjectModelView.Status + "" + docProjectModelView.Author + "" + docProjectModelView.Copyright + "
      "); + } string viewtable = FormatView(docProject, docProjectModelView, mapEntity, mapSchema); htmTemplate.WriteDocumentationMarkup(viewtable, docProjectModelView, docPublication); @@ -3410,9 +3610,10 @@ public static void GeneratePublication( { FormatHTM.WriteTOCforTemplates(docProject.Templates, 1, iSection.ToString(), htmTOC, htmSectionTOC, included); + // (a) full templates + htmSection.WriteSummaryHeader("Concept templates", true, docPublication); htmSection.WriteLine(""); htmSection.WriteLine(""); - for (int i = 0; i < docProject.ModelViews.Count; i++) { DocModelView docView = docProject.ModelViews[i]; @@ -3421,15 +3622,41 @@ public static void GeneratePublication( htmSection.WriteLine(""); } } - htmSection.WriteLine(""); - foreach (DocTemplateDefinition docTemplateDefinition in docProject.Templates) { - htmSection.WriteTemplateTable(docProject, docTemplateDefinition, 0, dictionaryViews); + if (!String.IsNullOrEmpty(docTemplateDefinition.Type)) + { + htmSection.WriteTemplateTable(docProject, docTemplateDefinition, 0, dictionaryViews); + } } htmSection.WriteLine("
      Template" + docProject.ModelViews[i].Name + "
      "); + htmSection.WriteSummaryFooter(docPublication); + htmSection.WriteLine("

      "); + + // (b) partial templates + htmSection.WriteSummaryHeader("Partial templates in use", true, docPublication); + htmSection.WriteLine(""); + htmSection.WriteLine(""); + for (int i = 0; i < docProject.ModelViews.Count; i++) + { + DocModelView docView = docProject.ModelViews[i]; + if (included != null && included.ContainsKey(docView)) + { + htmSection.WriteLine(""); + } + } + htmSection.WriteLine(""); + foreach (DocTemplateDefinition docTemplateDefinition in docProject.Templates) + { + if (String.IsNullOrEmpty(docTemplateDefinition.Type)) + { + htmSection.WriteTemplateTable(docProject, docTemplateDefinition, 0, dictionaryViews); + } + } + htmSection.WriteLine("
      Template" + docProject.ModelViews[i].Name + "
      "); + htmSection.WriteSummaryFooter(docPublication); } @@ -3527,9 +3754,13 @@ public static void GeneratePublication( htmDef.WriteLine("

      " + type.Name + "

      "); - htmDef.WriteViewIcons(type, docProject, dictionaryViews, path); - htmDef.WriteLocalizedNames(type); - htmDef.WriteChangeLog(type, docProject); + if (!docPublication.ISO) + { + htmDef.WriteViewIcons(type, docProject, dictionaryViews, path); + } + htmDef.WriteLocalizationSection(type, locales, docPublication); + + htmDef.WriteChangeLog(type, listChangeSets, docPublication); htmDef.WriteLine("
      "); htmDef.WriteLine("
      Semantic definitions at the type
      "); @@ -3538,15 +3769,15 @@ public static void GeneratePublication( type.Documentation = UpdateNumbering(type.Documentation, listFigures, listTables, type); } - htmDef.WriteSummaryHeader("Type definition", true); + htmDef.WriteSummaryHeader("Type definition", true, docPublication); htmDef.WriteDocumentationMarkup(type.Documentation, type, docPublication); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); if(type is DocEnumeration) { DocEnumeration docEnumeration = (DocEnumeration)type; - htmDef.WriteSummaryHeader("Enumeration definition", true); + htmDef.WriteSummaryHeader("Enumeration definition", true, docPublication); htmDef.WriteLine(""); htmDef.WriteLine(""); foreach (DocConstant docConstant in docEnumeration.Constants) @@ -3558,13 +3789,13 @@ public static void GeneratePublication( htmDef.Write(""); } htmDef.WriteLine("
      ConstantDescription
      "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } else if (type is DocSelect) { DocSelect docSelect = (DocSelect)type; - htmDef.WriteSummaryHeader("Select definition", true); + htmDef.WriteSummaryHeader("Select definition", true, docPublication); htmDef.WriteLine(""); htmDef.WriteLine(""); foreach (DocSelectItem docSelectItem in docSelect.Selects) @@ -3584,7 +3815,7 @@ public static void GeneratePublication( } } htmDef.WriteLine("
      TypeDescription
      "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } htmDef.WriteLine("
      "); @@ -3597,7 +3828,7 @@ public static void GeneratePublication( DocDefined entity = (DocDefined)type; // formal propositions - htmDef.WriteSummaryHeader("Formal Propositions", true); + htmDef.WriteSummaryHeader("Formal Propositions", true, docPublication); htmDef.WriteLine(""); htmDef.WriteLine(""); @@ -3614,7 +3845,7 @@ public static void GeneratePublication( } htmDef.WriteLine("
      RuleDescription
      \r\n"); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } @@ -3632,7 +3863,7 @@ public static void GeneratePublication( switch (docFormat.FormatType) { case DocFormatSchemaEnum.STEP: - htmDef.WriteExpressTypeAndDocumentation(type, !docPublication.HideHistory, docPublication.ISO); + htmDef.WriteExpressTypeAndDocumentation(type, !docPublication.HideHistory, docPublication); break; default: @@ -3653,11 +3884,11 @@ public static void GeneratePublication( } if (output != null) { - htmDef.WriteSummaryHeader(docFormat.FormatType.ToString() + " Specification", false); + htmDef.WriteSummaryHeader(docFormat.FormatType.ToString() + " Specification", false, docPublication); htmDef.Write("
      "); htmDef.WriteExpression(output); htmDef.Write("
      "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } } break; @@ -3706,22 +3937,26 @@ public static void GeneratePublication( htmDef.WriteScript(iSection, iSchema, iSubSection, iEntity); htmDef.WriteLine("

      " + entity.Name + "

      "); - htmDef.WriteViewIcons(entity, docProject, dictionaryViews, path); - htmDef.WriteLocalizedNames(entity); - htmDef.WriteChangeLog(entity, docProject); + + if (!docPublication.ISO) + { + htmDef.WriteViewIcons(entity, docProject, dictionaryViews, path); + } + htmDef.WriteLocalizationSection(entity, locales, docPublication); + htmDef.WriteChangeLog(entity, listChangeSets, docPublication); htmDef.WriteLine("
      "); htmDef.WriteLine("
      Semantic definitions at the entity
      "); string entitydocumentation = FormatEntityDescription(docProject, entity, listFigures, listTables); - htmDef.WriteSummaryHeader("Entity definition", true); + htmDef.WriteSummaryHeader("Entity definition", true, docPublication); htmDef.WriteDocumentationMarkup(entitydocumentation, entity, docPublication); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); if (entity.Attributes != null && entity.Attributes.Count > 0) { - htmDef.WriteSummaryHeader("Attribute definitions", true); + htmDef.WriteSummaryHeader("Attribute definitions", true, docPublication); htmDef.WriteLine(""); htmDef.WriteLine(""); @@ -3758,7 +3993,7 @@ public static void GeneratePublication( htmDef.WriteLine("
      #AttributeTypeCardinalityDescription
      "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } if (entity.WhereRules != null && entity.WhereRules.Count > 0) @@ -3776,7 +4011,7 @@ public static void GeneratePublication( if (cDescs > 0) { // formal propositions - htmDef.WriteSummaryHeader("Formal Propositions", true); + htmDef.WriteSummaryHeader("Formal Propositions", true, docPublication); htmDef.WriteLine(""); htmDef.WriteLine(""); @@ -3793,68 +4028,72 @@ public static void GeneratePublication( } htmDef.WriteLine("
      RuleDescription
      \r\n"); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } } htmDef.WriteLine("
      "); - htmDef.WriteLine("
      "); - htmDef.WriteLine("
      Inherited definitions from supertypes
      "); - - Dictionary map = new Dictionary(); - using (Font font = new Font(FontFamily.GenericSansSerif, 8.0f)) + if (!docPublication.ISO) { - using (Image img = FormatPNG.CreateInheritanceDiagramForEntity(docProject, included, entity, font, map)) + htmDef.WriteLine("
      "); + htmDef.WriteLine("
      Inherited definitions from supertypes
      "); + + Dictionary map = new Dictionary(); + using (Font font = new Font(FontFamily.GenericSansSerif, 8.0f)) { - try + using (Image img = FormatPNG.CreateInheritanceDiagramForEntity(docProject, included, entity, font, map)) { - img.Save(path + "\\diagrams\\" + entity.Name.ToLower() + ".png", System.Drawing.Imaging.ImageFormat.Png); - } - catch - { - img.ToString(); + try + { + img.Save(path + "\\diagrams\\" + entity.Name.ToLower() + ".png", System.Drawing.Imaging.ImageFormat.Png); + } + catch + { + img.ToString(); + } } } - } - htmDef.WriteSummaryHeader("Entity inheritance", true); - htmDef.WriteLine(""); + htmDef.WriteSummaryHeader("Entity inheritance", true, docPublication); + htmDef.WriteLine(""); - htmDef.WriteLine(""); - foreach (Rectangle rc in map.Keys) - { - DocEntity docEntref = map[rc]; - DocSchema docEntsch = docProject.GetSchemaOfDefinition(docEntref); + htmDef.WriteLine(""); + foreach (Rectangle rc in map.Keys) + { + DocEntity docEntref = map[rc]; + DocSchema docEntsch = docProject.GetSchemaOfDefinition(docEntref); - string hyperlink = "../../../schema/" + docEntsch.Name.ToLower() + "/lexical/" + docEntref.Name.ToLower() + ".htm"; - htmDef.WriteLine("\"""); - } - htmDef.WriteLine(""); - - htmDef.WriteSummaryFooter(); + string hyperlink = "../../../schema/" + docEntsch.Name.ToLower() + "/lexical/" + docEntref.Name.ToLower() + ".htm"; + htmDef.WriteLine("\"""); + } + htmDef.WriteLine(""); - htmDef.WriteSummaryHeader("Attribute inheritance", false); + htmDef.WriteSummaryFooter(docPublication); - htmDef.WriteLine(""); - htmDef.Write(""); - if(views != null) - { - foreach(DocModelView docViewHeader in views) + htmDef.WriteSummaryHeader("Attribute inheritance", false, docPublication); + + htmDef.WriteLine("
      #AttributeTypeCardinalityDescription
      "); + htmDef.Write(""); + if (views != null) { - htmDef.Write(""); + foreach (DocModelView docViewHeader in views) + { + htmDef.Write(""); + } } - } - htmDef.WriteLine(""); + htmDef.WriteLine(""); - int sequenceX = 0; - htmDef.WriteEntityInheritance(entity, entity, views, dictionaryViews, docPublication, ref sequenceX); + int sequenceX = 0; + htmDef.WriteEntityInheritance(entity, entity, views, dictionaryViews, docPublication, ref sequenceX); - htmDef.WriteLine("
      #AttributeTypeCardinalityDescription"); - htmDef.Write(docViewHeader.Name.Substring(0, 1)); - htmDef.Write(""); + htmDef.Write(docViewHeader.Name.Substring(0, 1)); + htmDef.Write("
      "); + htmDef.WriteLine("
    "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); + htmDef.WriteLine(""); + } string conceptdocumentation = FormatEntityConcepts(docProject, entity, mapEntity, mapSchema, included, listFigures, listTables, path, docPublication); //htmDef.WriteLine(conceptdocumentation); @@ -3902,7 +4141,7 @@ public static void GeneratePublication( switch(docFormat.FormatType) { case DocFormatSchemaEnum.STEP: - htmDef.WriteExpressEntitySpecification(entity, !docPublication.HideHistory, docPublication.ISO); + htmDef.WriteExpressEntitySpecification(entity, !docPublication.HideHistory, docPublication); break; default: @@ -3911,11 +4150,11 @@ public static void GeneratePublication( string output = formatext.FormatEntity(entity, mapEntity, included); if (output != null) { - htmDef.WriteSummaryHeader(docFormat.FormatType.ToString() + " Specification", false); + htmDef.WriteSummaryHeader(docFormat.FormatType.ToString() + " Specification", false, docPublication); htmDef.Write("
    "); htmDef.WriteExpression(output); htmDef.Write("
    "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); } } break; @@ -3961,25 +4200,27 @@ public static void GeneratePublication( htmDef.WriteLine("

    " + entity.Name + "

    "); + htmDef.WriteLocalizationSection(entity, locales, docPublication); + htmDef.WriteLine("
    "); htmDef.WriteLine("
    Semantic definitions at the function
    "); - htmDef.WriteSummaryHeader("Function Definition", true); + htmDef.WriteSummaryHeader("Function Definition", true, docPublication); htmDef.WriteLine("

    "); htmDef.WriteDocumentationMarkup(entity.Documentation, entity, docPublication); htmDef.WriteLine("

    "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); htmDef.WriteLine("
    "); htmDef.WriteLine("
    "); htmDef.WriteLine("
    Formal representations
    "); - htmDef.WriteSummaryHeader("EXPRESS Specification", true); + htmDef.WriteSummaryHeader("EXPRESS Specification", true, docPublication); htmDef.Write("
    "); htmDef.WriteExpressFunction(entity); htmDef.Write("
    "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); htmDef.WriteLine("
    "); @@ -4019,25 +4260,27 @@ public static void GeneratePublication( htmDef.WriteLine("

    " + entity.Name + "

    "); + htmDef.WriteLocalizationSection(entity, locales, docPublication); + htmDef.WriteLine("
    "); htmDef.WriteLine("
    Semantic definitions at the global rule
    "); - htmDef.WriteSummaryHeader("Global Rule Definition", true); + htmDef.WriteSummaryHeader("Global Rule Definition", true, docPublication); htmDef.WriteLine("

    "); htmDef.WriteDocumentationMarkup(entity.Documentation, entity, docPublication); htmDef.WriteLine("

    "); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); htmDef.WriteLine("
    "); htmDef.WriteLine("
    "); htmDef.WriteLine("
    Formal representations
    "); - htmDef.WriteSummaryHeader("EXPRESS Specification", true); + htmDef.WriteSummaryHeader("EXPRESS Specification", true, docPublication); htmDef.WriteLine("\r\n"); htmDef.WriteExpressGlobalRule(entity); htmDef.WriteLine("\r\n"); - htmDef.WriteSummaryFooter(); + htmDef.WriteSummaryFooter(docPublication); htmDef.WriteLine("
    "); @@ -4063,96 +4306,91 @@ public static void GeneratePublication( if (worker.CancellationPending) return; - if (included == null || included.ContainsKey(entity)) + if (entity.IsVisible()) { - iPset++; - - string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString(); - mapNumber.Add(entity, formatnum); + if (included == null || included.ContainsKey(entity)) + { + iPset++; - htmTOC.WriteTOC(3, "" + formatnum + " " + entity.Name + ""); - htmSectionTOC.WriteLine("" + formatnum + " " + entity.Name + "\r\n"); + string formatnum = iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString(); + mapNumber.Add(entity, formatnum); - using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\pset\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included)) - { - htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iPset, docPublication.Header); - htmDef.WriteScript(iSection, iSchema, iSubSection, iPset); - htmDef.WriteLine("

    " + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString() + " " + entity.Name + "

    "); + htmTOC.WriteTOC(3, "" + formatnum + " " + entity.Name + ""); + htmSectionTOC.WriteLine("" + formatnum + " " + entity.Name + "\r\n"); - if (!String.IsNullOrEmpty(entity.ApplicableType)) + using (FormatHTM htmDef = new FormatHTM(pathSchema + @"\" + schema.Name.ToLower() + "\\pset\\" + entity.Name.ToLower() + ".htm", mapEntity, mapSchema, included)) { - htmDef.Write("

    "); - htmDef.WriteDefinition(entity.PropertySetType); - htmDef.WriteLine("/"); + htmDef.WriteHeader(entity.Name, iSection, iSchema, iSubSection, iPset, docPublication.Header); + htmDef.WriteScript(iSection, iSchema, iSubSection, iPset); + htmDef.WriteLine("

    " + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString() + " " + entity.Name + "

    "); - if (entity.ApplicableType != null && entity.ApplicableType.Contains("/")) + if (!String.IsNullOrEmpty(entity.ApplicableType)) { - // break out, e.g. "IfcSensor/TEMPERATURESENSOR" - string[] applicableparts = entity.ApplicableType.Split('/'); - for (int iapppart = 0; iapppart < applicableparts.Length; iapppart++) + htmDef.Write("

    "); + htmDef.WriteDefinition(entity.PropertySetType); + htmDef.WriteLine("/"); + + if (entity.ApplicableType != null && entity.ApplicableType.Contains("/")) { - if (iapppart > 0) + // break out, e.g. "IfcSensor/TEMPERATURESENSOR" + string[] applicableparts = entity.ApplicableType.Split('/'); + for (int iapppart = 0; iapppart < applicableparts.Length; iapppart++) { - htmDef.Write(" / "); + if (iapppart > 0) + { + htmDef.Write(" / "); + } + htmDef.WriteDefinition(applicableparts[iapppart]); } - htmDef.WriteDefinition(applicableparts[iapppart]); } + else + { + htmDef.WriteDefinition(entity.ApplicableType); + } + htmDef.Write("

    "); } - else - { - htmDef.WriteDefinition(entity.ApplicableType); - } - htmDef.Write("

    "); - } - // english by default - htmDef.WriteLine(""); + // english by default + htmDef.WriteLocalizationSection(entity, locales, docPublication); + htmDef.WriteChangeLog(entity, listChangeSets, docPublication); - entity.Localization.Sort(); // ensure sorted - foreach (DocLocalization doclocal in entity.Localization) - { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; + htmDef.WriteSummaryHeader("Properties", true, docPublication); + if (!docPublication.ISO)//!Properties.Settings.Default.NoXml) + { + ////htmDef.WriteLine("

    buildingSMART Data Dictionary

    \r\n"); + //http://lookup.bsdd.buildingsmart.com/api/4.0/IfdPSet/search/Pset_ActionRequest - string localid = doclocal.Locale.Substring(0, 2).ToLower(); + // use guid + string guid = IfcGloballyUniqueId.Format(entity.Uuid); + htmDef.WriteLine("

    buildingSMART Data Dictionary

    \r\n"); - if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) - { - localdesc = entity.Documentation; + htmDef.WriteLine("

    PSD-XML

    \r\n"); } - htmDef.WriteLine(""); - } + DocEntity[] apptypes = entity.GetApplicableTypeDefinitions(docProject); + DocEntity applicableentity = null; + if (apptypes != null && apptypes.Length > 0 && apptypes[0] != null) + { + applicableentity = docProject.GetDefinition(apptypes[0].BaseDefinition) as DocEntity; + } - htmDef.WriteLine("
    " + localname + ": " + localdesc + "
    "); + // write diagram if it exists + htmDef.WriteLine(FormatFigure(docProject, entity, null, entity.Name, listFigures, path)); + htmDef.WriteProperties(entity.Properties, docProject, applicableentity, locales); + htmDef.WriteSummaryFooter(docPublication); - if (true)//!Properties.Settings.Default.NoXml) - { - ////htmDef.WriteLine("

    buildingSMART Data Dictionary

    \r\n"); - //http://lookup.bsdd.buildingsmart.com/api/4.0/IfdPSet/search/Pset_ActionRequest + // write url for incoming page link + htmDef.WriteLinkTo(entity); - // use guid - string guid = IfcGloballyUniqueId.Format(entity.Uuid); - htmDef.WriteLine("

    buildingSMART Data Dictionary

    \r\n"); - - htmDef.WriteLine("

    PSD-XML

    \r\n"); + htmDef.WriteFooter(docPublication.Footer); } - // write diagram if it exists - htmDef.WriteLine(FormatFigure(docProject, entity, null, entity.Name, listFigures, path)); - htmDef.WriteProperties(entity.Properties); - - // write url for incoming page link - htmDef.WriteLinkTo(entity); - - htmDef.WriteFooter(docPublication.Footer); - } - - // generate PSD listing - using (FormatXML formatPSD = new FormatXML(path + @"\psd\" + entity.Name + ".xml", typeof(PropertySetDef)))//, PropertySetDef.DefaultNamespace)) // full casing for compatibility with original files - { - formatPSD.Instance = Program.ExportPsd(entity, mapPropEnum); - formatPSD.Save(); + // generate PSD listing + using (FormatXML formatPSD = new FormatXML(path + @"\psd\" + entity.Name + ".xml", typeof(PropertySetDef)))//, PropertySetDef.DefaultNamespace)) // full casing for compatibility with original files + { + formatPSD.Instance = Program.ExportPsd(entity, mapPropEnum, docProject); + formatPSD.Save(); + } } } } @@ -4179,69 +4417,20 @@ public static void GeneratePublication( htmDef.WriteLine("

    " + iSection.ToString() + "." + iSchema.ToString() + "." + iSubSection.ToString() + "." + iPset.ToString() + " " + entity.Name + "

    "); // english by default - htmDef.WriteLine(""); - - entity.Localization.Sort(); // ensure sorted - foreach (DocLocalization doclocal in entity.Localization) - { - if (doclocal.Locale != null && doclocal.Locale.Length > 2) - { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; - - string localid = doclocal.Locale.Substring(0, 2).ToLower(); - - if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) - { - localdesc = entity.Documentation; - } - - htmDef.WriteLine(""); - } - } - - htmDef.WriteLine("
    " + localname + ": " + localdesc + "
    "); + htmDef.WriteLocalizationSection(entity, locales, docPublication); + htmDef.WriteChangeLog(entity, listChangeSets, docPublication); + htmDef.WriteSummaryHeader("Constants", true, docPublication); htmDef.WriteLine(""); htmDef.WriteLine(""); - - bool showdefaultdesc = true; - foreach (DocPropertyConstant docprop in entity.Constants) { htmDef.WriteLine(""); } - htmDef.WriteLine("
    NameDescription
    " + docprop.Name + ""); - - if (docprop.Localization.Count > 0) - { - htmDef.WriteLine(""); - docprop.Localization.Sort(); - foreach (DocLocalization doclocal in docprop.Localization) - { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; - - string localid = doclocal.Locale.Substring(0, 2).ToLower(); - - if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) - { - localdesc = docprop.Documentation; - showdefaultdesc = false; - } - - htmDef.WriteLine(""); - } - htmDef.WriteLine("
    " + localname + "" + localdesc + "
    "); - } - - if(showdefaultdesc) - { - htmDef.WriteLine(docprop.Documentation); - } - + htmDef.WriteLocalizationTable(docprop, locales); htmDef.WriteLine("
    "); + htmDef.WriteSummaryFooter(docPublication); // write url for incoming page link htmDef.WriteLinkTo(entity); @@ -4294,25 +4483,11 @@ public static void GeneratePublication( } // english by default - htmDef.WriteLine(""); - entity.Localization.Sort(); // ensure sorted - foreach (DocLocalization doclocal in entity.Localization) - { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; - string localid = doclocal.Locale.Substring(0, 2).ToLower(); - - if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) - { - localdesc = entity.Documentation; - } + htmDef.WriteLocalizationSection(entity, locales, docPublication); + htmDef.WriteChangeLog(entity, listChangeSets, docPublication); - htmDef.WriteLine(""); - } - - htmDef.WriteLine("
    " + localname + ": " + localdesc + "
    "); - - if (true)//!Properties.Settings.Default.NoXml) + htmDef.WriteSummaryHeader("Quantities", true, docPublication); + if (!docPublication.ISO)//!Properties.Settings.Default.NoXml) { htmDef.WriteLine("

    QTO-XML

    \r\n"); } @@ -4326,37 +4501,12 @@ public static void GeneratePublication( htmDef.WriteDefinition(docprop.QuantityType.ToString()); htmDef.WriteLine(""); - bool showdefaultdesc = false; - if(docprop.Localization.Count > 0) - { - htmDef.WriteLine(""); - - docprop.Localization.Sort(); - foreach (DocLocalization doclocal in docprop.Localization) - { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; - - string localid = doclocal.Locale.Substring(0, 2).ToLower(); - - if (String.IsNullOrEmpty(localdesc) && localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) - { - localdesc = docprop.Documentation; - showdefaultdesc = false; - } - - htmDef.WriteLine(""); - } - htmDef.WriteLine("
    " + localname + "" + localdesc + "
    "); - } - if(showdefaultdesc) - { - htmDef.WriteLine(docprop.Documentation); - } + htmDef.WriteLocalizationTable(docprop, locales); htmDef.WriteLine(""); } htmDef.WriteLine(""); + htmDef.WriteSummaryFooter(docPublication); // write url for incoming page link htmDef.WriteLinkTo(entity); @@ -4367,7 +4517,7 @@ public static void GeneratePublication( // generate PSD listing using (FormatXML formatPSD = new FormatXML(path + @"\qto\" + entity.Name + ".xml", typeof(QtoSetDef), QtoSetDef.DefaultNamespace)) // full casing for compatibility with original files { - formatPSD.Instance = Program.ExportQto(entity); + formatPSD.Instance = Program.ExportQto(entity, docProject); formatPSD.Save(); } @@ -4421,47 +4571,58 @@ public static void GeneratePublication( } htmSection.WriteLine("

    " + docannex.Name + "

    "); - // no numbering for annex currently... docannex.Documentation = UpdateNumbering(section.Documentation, ref iFigure, ref iTable); - htmSection.WriteDocumentationMarkup(docannex.Documentation, docannex, docPublication); - - // write listing of schemas - if (chAnnex == 'A') + if (chAnnex == 'A')// && String.IsNullOrEmpty(docannex.Documentation)) { - // create page for model view - //htmSection.WriteComputerListing("IFC4", "ifc4", 0); - - /* - DoExport(docProject, path + @"\annex\annex-a\default\ifc4.exp", null, null, instances, true); - DoExport(docProject, path + @"\annex\annex-a\default\ifcXML4.xsd", null, null, instances, true); - DoExport(docProject, path + @"\annex\annex-a\default\ifc4.ifc", null, null, instances, true); - DoExport(docProject, path + @"\annex\annex-a\default\ifc4.ifcxml", null, null, instances, true); - - using (FormatHTM htmExpress = new FormatHTM(path + @"\annex\annex-a\default\ifc4.exp.htm", mapEntity, mapSchema, included)) + string uriprefix = docProject.GetSchemaURI(docPublication); + string version = docProject.GetSchemaIdentifier(); + string release = docPublication.GetReleaseIdentifier(); + + //string ifcexpress = uriprefix + version.ToUpper() + "_" + release.ToUpper() + ".exp"; + //string ifcxsdfile = uriprefix + version.ToUpper() + "_" + release.ToUpper() + ".xsd"; + //string ifcxsdconf = uriprefix + version.ToUpper() + "_" + release.ToUpper() + "_config.xml"; + + // now automatic -- specific text required by ISO + htmSection.WriteLine( + "

    This annex contains a listing of the complete schema combining all definitions " + + "of clauses 5, 6, 7, and 8 without comments or other explanatory text. "+ + "These listings are available in computer-interpretable form that may be parsed by computer.

    "); + htmSection.WriteLine("

    Official schema publications for this release are at the following URLs:

    "); + + htmSection.WriteLine(""); + htmSection.WriteLine(""); + foreach (DocFormat docFormat in docPublication.Formats) { - htmExpress.UseAnchors = true; - htmExpress.WriteHeader("EXPRESS", 3); - htmExpress.WriteExpressSchema(docProject); - htmExpress.WriteFooter(""); - } - - using (FormatHTM htmXSD = new FormatHTM(path + @"\annex\annex-a\default\ifcXML4.xsd.htm", mapEntity, mapSchema, included)) - { - string xsdcontent = null; - using (System.IO.StreamReader reader = new System.IO.StreamReader(path + @"\annex\annex-a\default\ifcXML4.xsd.txt")) + if (docFormat.FormatOptions != DocFormatOptionEnum.None) { - xsdcontent = reader.ReadToEnd(); - } + string formatdesc = docFormat.FormatType.ToString(); + System.Reflection.FieldInfo fieldinfo = typeof(DocFormatSchemaEnum).GetField(docFormat.FormatType.ToString(), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public); + DescriptionAttribute[] attrs = (DescriptionAttribute[])fieldinfo.GetCustomAttributes(typeof(DescriptionAttribute), false); + if(attrs.Length == 1) + { + formatdesc = attrs[0].Description; + } - htmXSD.UseAnchors = false; - htmXSD.WriteHeader("XSD", 3); - htmXSD.Write(""); - htmXSD.WriteFormatted(xsdcontent); - htmXSD.Write(""); - htmXSD.WriteFooter(""); + string formaturi = uriprefix + "/" + version + "_" + release.ToUpper() + "." + docFormat.ExtensionSchema; + + htmSection.WriteLine(""); + } } + htmSection.WriteLine("
    FormatURL
    " + formatdesc + "" + formaturi + "
    "); + + /* + htmSection.WriteLine("
  • IFC EXPRESS: " + ifcexpress + "
  • "); + htmSection.WriteLine("
  • ifcXML XSD: " + ifcxsdfile + "
  • "); + htmSection.WriteLine("
  • ifcXML Config: " + ifcxsdconf + "
  • "); */ + htmSection.WriteLine(""); } - else if(chAnnex == 'C') + else + { + // no numbering for annex currently... docannex.Documentation = UpdateNumbering(section.Documentation, ref iFigure, ref iTable); + htmSection.WriteDocumentationMarkup(docannex.Documentation, docannex, docPublication); + } + + if (chAnnex == 'C') { htmSection.WriteInheritanceMapping(docProject, views, docPublication); } @@ -4490,13 +4651,19 @@ public static void GeneratePublication( { case 'A': // each MVD has specific schema - //if (Properties.Settings.Default.ConceptTables) { int iCodeView = 0; foreach (DocModelView docModelView in docProject.ModelViews) { - if ((included == null || included.ContainsKey(docModelView)) && !String.IsNullOrEmpty(docModelView.Code)) + if ((included == null || included.ContainsKey(docModelView))) { + string code = docModelView.Code; + if (String.IsNullOrEmpty(code)) + { + // fallback on name + code = MakeLinkName(docModelView); + } + iCodeView++; htmTOC.WriteTOC(1, "A." + iCodeView.ToString() + " " + docModelView.Name + ""); @@ -4507,52 +4674,63 @@ public static void GeneratePublication( string pathRoot = path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\index.htm"; using (FormatHTM htmRoot = new FormatHTM(pathRoot, mapEntity, mapSchema, included)) { - htmRoot.WriteComputerListing(docModelView.Name, docModelView.Code, iCodeView, docPublication); + htmRoot.WriteComputerListing(docModelView.Name, code, iCodeView, docPublication); } // show filtered schemas for model views only if exchanges defined DocModelView[] modelviews = docProject.GetViewInheritance(docModelView); - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".exp", modelviews, locales, DocDefinitionScopeEnum.Default, instances); - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".xsd", modelviews, locales, DocDefinitionScopeEnum.Default, instances); - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".ifc", modelviews, locales, DocDefinitionScopeEnum.Default, instances); - //DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".ifcxml", modelviews, locales, instances); - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".xml", modelviews, locales, DocDefinitionScopeEnum.Default, instances); - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "-psd.zip", modelviews, locales, DocDefinitionScopeEnum.Default, instances); - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "-qto.zip", modelviews, locales, DocDefinitionScopeEnum.Default, instances); + DoExport(docProject, docPublication, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".exp", modelviews, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); + //DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".xsd", modelviews, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); + DoExport(docProject, docPublication, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".ifc", modelviews, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); + //DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".ifcxml", modelviews, locales, instances); + DoExport(docProject, docPublication, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".xml", modelviews, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); + DoExport(docProject, docPublication, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + "-psd.zip_", modelviews, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); + DoExport(docProject, docPublication, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + "-qto.zip_", modelviews, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); if (docPublication.GetFormatOption(DocFormatSchemaEnum.STEP) != DocFormatOptionEnum.None) { - using (FormatHTM htmExpress = new FormatHTM(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".exp.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmExpress = new FormatHTM(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".exp.htm", mapEntity, mapSchema, included)) { htmExpress.UseAnchors = true; htmExpress.WriteHeader("EXPRESS", 3, docPublication.Header); htmExpress.WriteExpressSchema(docProject); htmExpress.WriteFooter(""); } + + // copy over to main directory + System.IO.File.Copy( + path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".exp", + pathPublication + @"\" + docProject.GetSchemaIdentifier() + "_" + docPublication.GetReleaseIdentifier() + ".exp", true); } - DoExport(docProject, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + ".mvdxml", new DocModelView[] { docModelView }, locales, DocDefinitionScopeEnum.Default, instances); + DoExport(docProject, docPublication, path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + ".mvdxml", new DocModelView[] { docModelView }, locales, DocDefinitionScopeEnum.Default, instances, mapEntity); foreach(DocFormat docFormat in docPublication.Formats) { IFormatExtension formatextension = null; if (docFormat.FormatOptions != DocFormatOptionEnum.None && mapFormatSchema.TryGetValue(docFormat.FormatType, out formatextension)) { - string content = formatextension.FormatDefinitions(docProject, mapEntity, included); - using (System.IO.StreamWriter writer = new System.IO.StreamWriter(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "." + docFormat.ExtensionSchema, false)) + string content = formatextension.FormatDefinitions(docProject, docPublication, mapEntity, included); + using (System.IO.StreamWriter writer = new System.IO.StreamWriter(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + "." + docFormat.ExtensionSchema, false)) { writer.Write(content); } // write formatted - using(FormatHTM htmFormat = new FormatHTM(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + docModelView.Code + "." + docFormat.ExtensionSchema + ".htm", mapEntity, mapSchema, included)) + using (FormatHTM htmFormat = new FormatHTM(path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + "." + docFormat.ExtensionSchema + ".htm", mapEntity, mapSchema, included)) { htmFormat.UseAnchors = false; htmFormat.WriteHeader(docFormat.ExtensionSchema, 3, docPublication.Header); htmFormat.WriteExpression(content); htmFormat.WriteFooter(""); } + + // copy to main directory + System.IO.File.Copy( + path + @"\annex\annex-a\" + MakeLinkName(docModelView) + @"\" + code + "." + docFormat.ExtensionSchema, + pathPublication + @"\" + docProject.GetSchemaIdentifier() + "_" + docPublication.GetReleaseIdentifier() + "." + docFormat.ExtensionSchema, true); + } } } @@ -4588,131 +4766,134 @@ public static void GeneratePublication( // locales int indexb = 1; - foreach (string locale in listLocale.Keys) + if (locales != null) { - indexb++; - - string localeheader = locale.ToUpper(); - if (locale == "zh") - { - localeheader += " [Chinese]"; // no language-generic info available - } - else + foreach (string locale in locales) { - try + indexb++; + + string localeheader = locale.ToUpper(); + if (locale == "zh") { - System.Globalization.CultureInfo cultureinfo = System.Globalization.CultureInfo.GetCultureInfo(locale); - if (cultureinfo != null) - { - localeheader += " [" + cultureinfo.EnglishName + "]"; - } + localeheader += " [Chinese]"; // no language-generic info available } - catch + else { + try + { + System.Globalization.CultureInfo cultureinfo = System.Globalization.CultureInfo.GetCultureInfo(locale); + if (cultureinfo != null) + { + localeheader += " [" + cultureinfo.EnglishName + "]"; + } + } + catch + { + } } - } - - // each locale - htmSectionTOC.WriteLine(" "); - - htmTOC.WriteTOC(1, "B." + indexb.ToString() + " " + localeheader); - htmSectionTOC.WriteLine("B." + indexb.ToString() + " " + localeheader + ""); - - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".1 Defined types"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".1 Defined types"); - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".2 Enumeration types"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".2 Enumeration types"); - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".3 Select types"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".3 Select types"); - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".4 Entities"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".4 Entities"); - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".5 Functions"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".5 Functions"); - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".6 Rules"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".6 Rules"); - - /* no translations currently -- enable in future - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".7 Property sets"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".7 Property sets"); - htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".8 Quantity sets"); - htmSectionTOC.WriteLine("B." + indexb.ToString() + ".8 Quantity sets"); - */ - } - // generate alphabetical listings - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_definedtypes.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Defined Types", path, "definedtypes", docPublication); - } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_enumtypes.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Enumeration Types", path, "enumtypes", docPublication); - } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_selecttypes.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Select Types", path, "selecttypes", docPublication); - } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_entities.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Entities", path, "entities", docPublication); - } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_functions.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Functions", path, "functions", docPublication); - } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_rules.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Rules", path, "rules", docPublication); - } - // no translations currently -- enable in future - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_psets.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Property Sets", path, "psets", docPublication); - } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_qsets.htm", mapEntity, mapSchema, included)) - { - htmAlpha1.WriteAlphabeticalListing("Quantity Sets", path, "qsets", docPublication); - } - + // each locale + htmSectionTOC.WriteLine(" "); - // generate localized listings - foreach (string locale in listLocale.Keys) - { - string code = listLocale[locale]; // null for default + htmTOC.WriteTOC(1, "B." + indexb.ToString() + " " + localeheader); + htmSectionTOC.WriteLine("B." + indexb.ToString() + " " + localeheader + ""); + + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".1 Defined types"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".1 Defined types"); + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".2 Enumeration types"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".2 Enumeration types"); + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".3 Select types"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".3 Select types"); + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".4 Entities"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".4 Entities"); + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".5 Functions"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".5 Functions"); + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".6 Rules"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".6 Rules"); + + /* no translations currently -- enable in future + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".7 Property sets"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".7 Property sets"); + htmTOC.WriteTOC(2, "B." + indexb.ToString() + ".8 Quantity sets"); + htmSectionTOC.WriteLine("B." + indexb.ToString() + ".8 Quantity sets"); + */ + } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_definedtypes.htm", mapEntity, mapSchema, included)) + // generate alphabetical listings + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_definedtypes.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Defined Types", code, path, "definedtypes", docPublication); + htmAlpha1.WriteAlphabeticalListing("Defined Types", path, "definedtypes", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_enumtypes.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_enumtypes.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Enumeration Types", code, path, "enumtypes", docPublication); + htmAlpha1.WriteAlphabeticalListing("Enumeration Types", path, "enumtypes", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_selecttypes.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_selecttypes.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Select Types", code, path, "selecttypes", docPublication); + htmAlpha1.WriteAlphabeticalListing("Select Types", path, "selecttypes", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_entities.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_entities.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Entities", code, path, "entities", docPublication); + htmAlpha1.WriteAlphabeticalListing("Entities", path, "entities", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_functions.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_functions.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Functions", code, path, "functions", docPublication); + htmAlpha1.WriteAlphabeticalListing("Functions", path, "functions", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_rules.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_rules.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Rules", code, path, "rules", docPublication); + htmAlpha1.WriteAlphabeticalListing("Rules", path, "rules", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_psets.htm", mapEntity, mapSchema, included)) + // no translations currently -- enable in future + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_psets.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Property Sets", code, path, "psets", docPublication); + htmAlpha1.WriteAlphabeticalListing("Property Sets", path, "psets", docPublication); } - using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_qsets.htm", mapEntity, mapSchema, included)) + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/alphabeticalorder_qsets.htm", mapEntity, mapSchema, included)) { - htmAlpha1.WriteLocalizedListing("Quantity Sets", code, path, "qsets", docPublication); + htmAlpha1.WriteAlphabeticalListing("Quantity Sets", path, "qsets", docPublication); } + + // generate localized listings + foreach (string locale in listLocale.Keys) + { + string code = listLocale[locale]; // null for default + + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_definedtypes.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Defined Types", code, path, "definedtypes", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_enumtypes.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Enumeration Types", code, path, "enumtypes", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_selecttypes.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Select Types", code, path, "selecttypes", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_entities.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Entities", code, path, "entities", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_functions.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Functions", code, path, "functions", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_rules.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Rules", code, path, "rules", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_psets.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Property Sets", code, path, "psets", docPublication); + } + using (FormatHTM htmAlpha1 = new FormatHTM(path + "/annex/annex-b/" + locale + "/alphabeticalorder_qsets.htm", mapEntity, mapSchema, included)) + { + htmAlpha1.WriteLocalizedListing("Quantity Sets", code, path, "qsets", docPublication); + } + + } } break; @@ -5091,19 +5272,21 @@ public static void GeneratePublication( Dictionary typemap = new Dictionary(); Compiler compiler = new Compiler(docProject, docExample.Views.ToArray(), null); System.Reflection.Emit.AssemblyBuilder assembly = compiler.Assembly; + Type[] types = null; try { - Type[] types = assembly.GetTypes(); - foreach (Type t in types) - { - typemap.Add(t.Name.ToUpper(), t); - } + types = assembly.GetTypes(); } catch(System.Reflection.ReflectionTypeLoadException) { // schema could not be compiled according to definition } + foreach (Type t in types) + { + typemap.Add(t.Name.ToUpper(), t); + } + List listFormats = new List(xsdFormatBase); if (docExample.Views.Count > 0) { @@ -5119,11 +5302,11 @@ public static void GeneratePublication( break; case 'F': - if (docProject.ChangeSets != null) + //if (!docPublication.HideHistory) { - for (int iChangeset = 1; iChangeset <= docProject.ChangeSets.Count; iChangeset++) + for (int iChangeset = 1; iChangeset <= listChangeSets.Count; iChangeset++) { - DocChangeSet docChangeSet = docProject.ChangeSets[iChangeset - 1]; + DocChangeSet docChangeSet = listChangeSets[iChangeset - 1]; // what's new page htmTOC.WriteTOC(1, "F." + iChangeset + " " + docChangeSet.Name + ""); @@ -5169,7 +5352,7 @@ public static void GeneratePublication( // change log for properties htmTOC.WriteTOC(1, "F." + iChangeset + ".2 Properties"); - htmSectionTOC.WriteLine("F." + iChangeset + ".1 Properties"); + htmSectionTOC.WriteLine("F." + iChangeset + ".2 Properties"); pathChange = path + @"\annex\annex-f\" + MakeLinkName(docChangeSet) + @"\properties.htm"; using (FormatHTM htmChange = new FormatHTM(pathChange, mapEntity, mapSchema, included)) { @@ -5456,9 +5639,12 @@ public static void GeneratePublication( { if (included == null || included.ContainsKey(docLinkObj)) { - using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included)) + if (docLinkObj.IsVisible()) { - htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/pset/" + MakeLinkName(docLinkObj) + ".htm", docPublication); + using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docLinkObj) + ".htm", mapEntity, mapSchema, included)) + { + htmLink.WriteLinkPage("../schema/" + docLinkSchema.Name.ToLower() + "/pset/" + MakeLinkName(docLinkObj) + ".htm", docPublication); + } } } } @@ -5506,7 +5692,7 @@ public static void GeneratePublication( } } - foreach(DocChangeSet docChange in docProject.ChangeSets) + foreach (DocChangeSet docChange in listChangeSets) { using (FormatHTM htmLink = new FormatHTM(path + "/link/" + MakeLinkName(docChange) + ".htm", mapEntity, mapSchema, included)) { diff --git a/FormAbout.resx b/FormAbout.resx index a202db64..cad50218 100644 --- a/FormAbout.resx +++ b/FormAbout.resx @@ -119,8 +119,8 @@ IFC Documentation Generator -Version 10.4 (June 17, 2016) -© Copyright 2011-2016 buildingSMART International Ltd. +Version 11.2 (January 24, 2017) +© Copyright 2011-2017 buildingSMART International Ltd. Model Support Group (MSG) Thomas Liebich - MSG Leader (tl@aec3.com) diff --git a/FormCredentials.Designer.cs b/FormCredentials.Designer.cs new file mode 100644 index 00000000..e5774c68 --- /dev/null +++ b/FormCredentials.Designer.cs @@ -0,0 +1,151 @@ +namespace IfcDoc +{ + partial class FormCredentials + { + /// + /// 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.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormCredentials)); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.textBoxWarning = new System.Windows.Forms.TextBox(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox1.Location = new System.Drawing.Point(12, 70); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(441, 20); + this.textBox1.TabIndex = 1; + // + // textBox2 + // + this.textBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBox2.Location = new System.Drawing.Point(12, 115); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(441, 20); + this.textBox2.TabIndex = 3; + this.textBox2.UseSystemPasswordChar = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 54); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(58, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Username:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(14, 99); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(56, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Password:"; + // + // textBoxWarning + // + this.textBoxWarning.BackColor = System.Drawing.Color.Red; + this.textBoxWarning.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBoxWarning.Dock = System.Windows.Forms.DockStyle.Top; + this.textBoxWarning.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBoxWarning.ForeColor = System.Drawing.Color.White; + this.textBoxWarning.Location = new System.Drawing.Point(0, 0); + this.textBoxWarning.Margin = new System.Windows.Forms.Padding(5); + this.textBoxWarning.Multiline = true; + this.textBoxWarning.Name = "textBoxWarning"; + this.textBoxWarning.ReadOnly = true; + this.textBoxWarning.Size = new System.Drawing.Size(464, 39); + this.textBoxWarning.TabIndex = 5; + this.textBoxWarning.Text = resources.GetString("textBoxWarning.Text"); + // + // 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(297, 166); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 4; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // 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(378, 166); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 5; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // FormCredentials + // + this.AcceptButton = this.buttonOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(464, 201); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.textBoxWarning); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.textBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FormCredentials"; + this.ShowInTaskbar = false; + this.Text = "Login"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBoxWarning; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonCancel; + } +} \ No newline at end of file diff --git a/FormCredentials.cs b/FormCredentials.cs new file mode 100644 index 00000000..15087d7f --- /dev/null +++ b/FormCredentials.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace IfcDoc +{ + public partial class FormCredentials : Form + { + public FormCredentials() + { + InitializeComponent(); + } + + public string Username + { + get + { + return this.textBox1.Text; + } + } + + // no sense in using SecureString as it will be sent in the clear anyways + public string Password + { + get + { + return this.textBox2.Text; + } + } + } +} diff --git a/FormCredentials.resx b/FormCredentials.resx new file mode 100644 index 00000000..497be787 --- /dev/null +++ b/FormCredentials.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 + + + Warning: The specified server does not support a secure connection, such that all information (including username and password) will be sent in the clear. It is strongly recommended that the username and password used for this site should not be used at any other websites. + + \ No newline at end of file diff --git a/FormEdit.Designer.cs b/FormEdit.Designer.cs index 6ba2b76f..8249f033 100644 --- a/FormEdit.Designer.cs +++ b/FormEdit.Designer.cs @@ -31,6 +31,7 @@ private void InitializeComponent() this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormEdit)); this.splitContainerRoot = new System.Windows.Forms.SplitContainer(); + this.treeView = new IfcDoc.ThemedTreeView(); this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components); this.toolStripMenuItemContextInsert = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertModelView = new System.Windows.Forms.ToolStripMenuItem(); @@ -41,7 +42,13 @@ private void InitializeComponent() this.toolStripMenuItemContextInsertTerm = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertAbbreviatedTerm = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertTemplate = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertSchema = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertDefined = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertEnumeration = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertConstant = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertSelect = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertEntity = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertAttribute = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertPset = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertProperty = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertPropertyEnum = new System.Windows.Forms.ToolStripMenuItem(); @@ -50,6 +57,7 @@ private void InitializeComponent() this.toolStripMenuItemContextInsertQuantity = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertExample = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextInsertBibliography = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemContextInsertPublication = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemEnableDisable = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemContextSeparator = new System.Windows.Forms.ToolStripSeparator(); this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -58,7 +66,12 @@ private void InitializeComponent() this.panelWorkspace = new System.Windows.Forms.Panel(); this.panelDiagram = new System.Windows.Forms.Panel(); this.splitContainerWorkspace = new System.Windows.Forms.SplitContainer(); + this.ctlConcept = new IfcDoc.CtlConcept(); + this.ctlExpressG = new IfcDoc.CtlExpressG(); + this.ctlInheritance = new IfcDoc.CtlInheritance(); + this.ctlProperties = new IfcDoc.CtlProperties(); this.textBoxHTML = new System.Windows.Forms.TextBox(); + this.ctlCheckGrid = new IfcDoc.CtlCheckGrid(); this.webBrowser = new System.Windows.Forms.WebBrowser(); this.splitContainerInstances = new System.Windows.Forms.SplitContainer(); this.listViewValidate = new System.Windows.Forms.ListView(); @@ -104,11 +117,11 @@ private void InitializeComponent() this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator(); this.modelViewDefinitionToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.buildFromSubschemaToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItemEditBuildConcepts = new System.Windows.Forms.ToolStripMenuItem(); this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItemViewWeb = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItemViewText = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemViewDiagram = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemViewRequirement = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemViewText = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemViewWeb = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInsert = new System.Windows.Forms.ToolStripMenuItem(); this.documentationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInsertNormative = new System.Windows.Forms.ToolStripMenuItem(); @@ -116,7 +129,6 @@ private void InitializeComponent() this.ToolStripMenuItemInsertTerm = new System.Windows.Forms.ToolStripMenuItem(); this.ToolStripMenuItemInsertAbbreviatedTerm = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem11 = new System.Windows.Forms.ToolStripSeparator(); - this.generateChangeLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem19 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItemInsertExample = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); @@ -164,8 +176,11 @@ private void InitializeComponent() this.toolStripMenuItemInsertExchange = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInsertConceptRoot = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemInsertConceptLeaf = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemInsertConceptPset = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemInsertConceptQset = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem20 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItemInsertPublication = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemInsertChangeLog = new System.Windows.Forms.ToolStripMenuItem(); this.diagramToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemModeSelect = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemModeMove = new System.Windows.Forms.ToolStripMenuItem(); @@ -201,13 +216,12 @@ private void InitializeComponent() this.toolStripMenuItemDiagramSpaceVertRemove = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemTools = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemToolsValidate = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripMenuItemToolsConvert = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem8 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripMenuItemToolsISO = new System.Windows.Forms.ToolStripMenuItem(); this.ToolStripMenuItemGenerateBallotSubmission = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemToolsSourceCode = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemToolsModule = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem22 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripMenuItemDictionaryUpload = new System.Windows.Forms.ToolStripMenuItem(); this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItemHelpAbout = new System.Windows.Forms.ToolStripMenuItem(); this.openFileDialogLoad = new System.Windows.Forms.OpenFileDialog(); @@ -232,9 +246,10 @@ private void InitializeComponent() this.toolStripButtonMoveOut = new System.Windows.Forms.ToolStripButton(); this.toolStripButtonMoveIn = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripButtonViewWeb = new System.Windows.Forms.ToolStripButton(); - this.toolStripButtonViewText = new System.Windows.Forms.ToolStripButton(); this.toolStripButtonViewDiagram = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonViewRequirement = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonViewText = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonViewWeb = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.toolStripButtonModeSelect = new System.Windows.Forms.ToolStripButton(); this.toolStripButtonModeMove = new System.Windows.Forms.ToolStripButton(); @@ -258,13 +273,7 @@ private void InitializeComponent() this.imageListRules = new System.Windows.Forms.ImageList(this.components); this.saveFileDialogModule = new System.Windows.Forms.SaveFileDialog(); this.openFileDialogExpress = new System.Windows.Forms.OpenFileDialog(); - this.treeView = new IfcDoc.ThemedTreeView(); - this.ctlConcept = new IfcDoc.CtlConcept(); - this.ctlExpressG = new IfcDoc.CtlExpressG(); - this.ctlCheckGrid = new IfcDoc.CtlCheckGrid(); - this.ctlInheritance = new IfcDoc.CtlInheritance(); - this.ctlProperties = new IfcDoc.CtlProperties(); - this.toolStripMenuItemToolsConvert = new System.Windows.Forms.ToolStripMenuItem(); + this.openFileDialogExamples = new System.Windows.Forms.OpenFileDialog(); ((System.ComponentModel.ISupportInitialize)(this.splitContainerRoot)).BeginInit(); this.splitContainerRoot.Panel1.SuspendLayout(); this.splitContainerRoot.Panel2.SuspendLayout(); @@ -302,6 +311,20 @@ private void InitializeComponent() // this.splitContainerRoot.Panel2.Controls.Add(this.splitContainerEdit); // + // treeView + // + this.treeView.ContextMenuStrip = this.contextMenuStrip; + resources.ApplyResources(this.treeView, "treeView"); + this.treeView.HideSelection = false; + this.treeView.ImageList = this.imageListIcon; + this.treeView.LabelEdit = true; + this.treeView.Name = "treeView"; + this.treeView.BeforeLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView_BeforeLabelEdit); + this.treeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView_AfterLabelEdit); + this.treeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); + this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeView_AfterSelect); + this.treeView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseUp); + // // contextMenuStrip // this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -323,7 +346,13 @@ private void InitializeComponent() this.toolStripMenuItemContextInsertTerm, this.toolStripMenuItemContextInsertAbbreviatedTerm, this.toolStripMenuItemContextInsertTemplate, + this.toolStripMenuItemContextInsertSchema, + this.toolStripMenuItemContextInsertDefined, + this.toolStripMenuItemContextInsertEnumeration, this.toolStripMenuItemContextInsertConstant, + this.toolStripMenuItemContextInsertSelect, + this.toolStripMenuItemContextInsertEntity, + this.toolStripMenuItemContextInsertAttribute, this.toolStripMenuItemContextInsertPset, this.toolStripMenuItemContextInsertProperty, this.toolStripMenuItemContextInsertPropertyEnum, @@ -331,7 +360,8 @@ private void InitializeComponent() this.toolStripMenuItemContextInsertQset, this.toolStripMenuItemContextInsertQuantity, this.toolStripMenuItemContextInsertExample, - this.toolStripMenuItemContextInsertBibliography}); + this.toolStripMenuItemContextInsertBibliography, + this.toolStripMenuItemContextInsertPublication}); resources.ApplyResources(this.toolStripMenuItemContextInsert, "toolStripMenuItemContextInsert"); this.toolStripMenuItemContextInsert.Name = "toolStripMenuItemContextInsert"; // @@ -383,12 +413,48 @@ private void InitializeComponent() this.toolStripMenuItemContextInsertTemplate.Name = "toolStripMenuItemContextInsertTemplate"; this.toolStripMenuItemContextInsertTemplate.Click += new System.EventHandler(this.toolStripMenuItemInsertTemplate_Click); // + // toolStripMenuItemContextInsertSchema + // + resources.ApplyResources(this.toolStripMenuItemContextInsertSchema, "toolStripMenuItemContextInsertSchema"); + this.toolStripMenuItemContextInsertSchema.Name = "toolStripMenuItemContextInsertSchema"; + this.toolStripMenuItemContextInsertSchema.Click += new System.EventHandler(this.toolStripMenuItemInsertSchema_Click); + // + // toolStripMenuItemContextInsertDefined + // + resources.ApplyResources(this.toolStripMenuItemContextInsertDefined, "toolStripMenuItemContextInsertDefined"); + this.toolStripMenuItemContextInsertDefined.Name = "toolStripMenuItemContextInsertDefined"; + this.toolStripMenuItemContextInsertDefined.Click += new System.EventHandler(this.toolStripMenuItemInsertDefined_Click); + // + // toolStripMenuItemContextInsertEnumeration + // + resources.ApplyResources(this.toolStripMenuItemContextInsertEnumeration, "toolStripMenuItemContextInsertEnumeration"); + this.toolStripMenuItemContextInsertEnumeration.Name = "toolStripMenuItemContextInsertEnumeration"; + this.toolStripMenuItemContextInsertEnumeration.Click += new System.EventHandler(this.toolStripMenuItemInsertEnumeration_Click); + // // toolStripMenuItemContextInsertConstant // resources.ApplyResources(this.toolStripMenuItemContextInsertConstant, "toolStripMenuItemContextInsertConstant"); this.toolStripMenuItemContextInsertConstant.Name = "toolStripMenuItemContextInsertConstant"; this.toolStripMenuItemContextInsertConstant.Click += new System.EventHandler(this.toolStripMenuItemInsertEnumerationConstant_Click); // + // toolStripMenuItemContextInsertSelect + // + resources.ApplyResources(this.toolStripMenuItemContextInsertSelect, "toolStripMenuItemContextInsertSelect"); + this.toolStripMenuItemContextInsertSelect.Name = "toolStripMenuItemContextInsertSelect"; + this.toolStripMenuItemContextInsertSelect.Click += new System.EventHandler(this.toolStripMenuItemInsertSelect_Click); + // + // toolStripMenuItemContextInsertEntity + // + resources.ApplyResources(this.toolStripMenuItemContextInsertEntity, "toolStripMenuItemContextInsertEntity"); + this.toolStripMenuItemContextInsertEntity.Name = "toolStripMenuItemContextInsertEntity"; + this.toolStripMenuItemContextInsertEntity.Click += new System.EventHandler(this.toolStripMenuItemInsertEntity_Click); + // + // toolStripMenuItemContextInsertAttribute + // + resources.ApplyResources(this.toolStripMenuItemContextInsertAttribute, "toolStripMenuItemContextInsertAttribute"); + this.toolStripMenuItemContextInsertAttribute.Name = "toolStripMenuItemContextInsertAttribute"; + this.toolStripMenuItemContextInsertAttribute.Click += new System.EventHandler(this.toolStripMenuItemInsertAttribute_Click); + // // toolStripMenuItemContextInsertPset // resources.ApplyResources(this.toolStripMenuItemContextInsertPset, "toolStripMenuItemContextInsertPset"); @@ -437,6 +503,12 @@ private void InitializeComponent() this.toolStripMenuItemContextInsertBibliography.Name = "toolStripMenuItemContextInsertBibliography"; this.toolStripMenuItemContextInsertBibliography.Click += new System.EventHandler(this.toolStripMenuItemInsertBibliography_Click); // + // toolStripMenuItemContextInsertPublication + // + resources.ApplyResources(this.toolStripMenuItemContextInsertPublication, "toolStripMenuItemContextInsertPublication"); + this.toolStripMenuItemContextInsertPublication.Name = "toolStripMenuItemContextInsertPublication"; + this.toolStripMenuItemContextInsertPublication.Click += new System.EventHandler(this.toolStripMenuItemInsertPublication_Click); + // // toolStripMenuItemEnableDisable // resources.ApplyResources(this.toolStripMenuItemEnableDisable, "toolStripMenuItemEnableDisable"); @@ -526,6 +598,7 @@ private void InitializeComponent() this.panelWorkspace.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.panelWorkspace.Controls.Add(this.panelDiagram); this.panelWorkspace.Controls.Add(this.textBoxHTML); + this.panelWorkspace.Controls.Add(this.ctlCheckGrid); this.panelWorkspace.Controls.Add(this.webBrowser); resources.ApplyResources(this.panelWorkspace, "panelWorkspace"); this.panelWorkspace.Name = "panelWorkspace"; @@ -545,13 +618,63 @@ private void InitializeComponent() // this.splitContainerWorkspace.Panel1.Controls.Add(this.ctlConcept); this.splitContainerWorkspace.Panel1.Controls.Add(this.ctlExpressG); - this.splitContainerWorkspace.Panel1.Controls.Add(this.ctlCheckGrid); this.splitContainerWorkspace.Panel1.Controls.Add(this.ctlInheritance); // // splitContainerWorkspace.Panel2 // this.splitContainerWorkspace.Panel2.Controls.Add(this.ctlProperties); // + // ctlConcept + // + resources.ApplyResources(this.ctlConcept, "ctlConcept"); + this.ctlConcept.ConceptRoot = null; + this.ctlConcept.CurrentInstance = null; + this.ctlConcept.Map = null; + this.ctlConcept.Name = "ctlConcept"; + this.ctlConcept.Project = null; + this.ctlConcept.Selection = null; + this.ctlConcept.Template = null; + this.ctlConcept.SelectionChanged += new System.EventHandler(this.ctlConcept_SelectionChanged); + this.ctlConcept.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ctlConcept_MouseDoubleClick); + // + // ctlExpressG + // + this.ctlExpressG.AllowDrop = true; + resources.ApplyResources(this.ctlExpressG, "ctlExpressG"); + this.ctlExpressG.Format = IfcDoc.Format.PNG.DiagramFormat.ExpressG; + this.ctlExpressG.Map = null; + this.ctlExpressG.Mode = IfcDoc.ToolMode.Select; + this.ctlExpressG.Name = "ctlExpressG"; + this.ctlExpressG.Schema = null; + this.ctlExpressG.ScrollToSelection = true; + this.ctlExpressG.Selection = null; + this.ctlExpressG.SelectionChanged += new System.EventHandler(this.ctlExpressG_SelectionChanged); + this.ctlExpressG.LinkOperation += new System.EventHandler(this.ctlExpressG_LinkOperation); + this.ctlExpressG.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ctlExpressG_MouseDoubleClick); + // + // ctlInheritance + // + resources.ApplyResources(this.ctlInheritance, "ctlInheritance"); + this.ctlInheritance.Entity = null; + this.ctlInheritance.Mode = IfcDoc.ToolMode.Select; + this.ctlInheritance.ModelView = null; + this.ctlInheritance.Name = "ctlInheritance"; + this.ctlInheritance.Project = null; + this.ctlInheritance.SelectionChanged += new System.EventHandler(this.ctlInheritance_SelectionChanged); + // + // ctlProperties + // + this.ctlProperties.CurrentInstance = null; + this.ctlProperties.CurrentPopulation = null; + resources.ApplyResources(this.ctlProperties, "ctlProperties"); + this.ctlProperties.Name = "ctlProperties"; + this.ctlProperties.SelectedAttribute = null; + this.ctlProperties.SelectedRule = null; + this.ctlProperties.Navigate += new System.EventHandler(this.ctlProperties_Navigate); + this.ctlProperties.RuleSelectionChanged += new System.EventHandler(this.ctlProperties_RuleSelectionChanged); + this.ctlProperties.RuleContentChanged += new System.EventHandler(this.ctlProperties_RuleContentChanged); + this.ctlProperties.SchemaChanged += new System.EventHandler(this.ctlProperties_SchemaChanged); + // // textBoxHTML // this.textBoxHTML.BorderStyle = System.Windows.Forms.BorderStyle.None; @@ -559,6 +682,15 @@ private void InitializeComponent() this.textBoxHTML.Name = "textBoxHTML"; this.textBoxHTML.Validated += new System.EventHandler(this.TextBoxHTML_Validated); // + // ctlCheckGrid + // + resources.ApplyResources(this.ctlCheckGrid, "ctlCheckGrid"); + this.ctlCheckGrid.CheckGridSource = null; + this.ctlCheckGrid.Mode = IfcDoc.ToolMode.Select; + this.ctlCheckGrid.Name = "ctlCheckGrid"; + this.ctlCheckGrid.Selection = null; + this.ctlCheckGrid.SelectionChanged += new System.EventHandler(this.ctlCheckGrid_SelectionChanged); + // // webBrowser // resources.ApplyResources(this.webBrowser, "webBrowser"); @@ -868,8 +1000,7 @@ private void InitializeComponent() // modelViewDefinitionToolStripMenuItem1 // this.modelViewDefinitionToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.buildFromSubschemaToolStripMenuItem, - this.toolStripMenuItemEditBuildConcepts}); + this.buildFromSubschemaToolStripMenuItem}); this.modelViewDefinitionToolStripMenuItem1.Name = "modelViewDefinitionToolStripMenuItem1"; resources.ApplyResources(this.modelViewDefinitionToolStripMenuItem1, "modelViewDefinitionToolStripMenuItem1"); // @@ -879,26 +1010,29 @@ private void InitializeComponent() this.buildFromSubschemaToolStripMenuItem.Name = "buildFromSubschemaToolStripMenuItem"; this.buildFromSubschemaToolStripMenuItem.Click += new System.EventHandler(this.buildFromSubschemaToolStripMenuItem_Click); // - // toolStripMenuItemEditBuildConcepts - // - resources.ApplyResources(this.toolStripMenuItemEditBuildConcepts, "toolStripMenuItemEditBuildConcepts"); - this.toolStripMenuItemEditBuildConcepts.Name = "toolStripMenuItemEditBuildConcepts"; - this.toolStripMenuItemEditBuildConcepts.Click += new System.EventHandler(this.toolStripMenuItemEditBuildConcepts_Click); - // // viewToolStripMenuItem // this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItemViewWeb, + this.toolStripMenuItemViewDiagram, + this.toolStripMenuItemViewRequirement, this.toolStripMenuItemViewText, - this.toolStripMenuItemViewDiagram}); + this.toolStripMenuItemViewWeb}); this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; resources.ApplyResources(this.viewToolStripMenuItem, "viewToolStripMenuItem"); // - // toolStripMenuItemViewWeb + // toolStripMenuItemViewDiagram // - resources.ApplyResources(this.toolStripMenuItemViewWeb, "toolStripMenuItemViewWeb"); - this.toolStripMenuItemViewWeb.Name = "toolStripMenuItemViewWeb"; - this.toolStripMenuItemViewWeb.Click += new System.EventHandler(this.toolStripMenuItemViewWeb_Click); + this.toolStripMenuItemViewDiagram.Checked = true; + this.toolStripMenuItemViewDiagram.CheckState = System.Windows.Forms.CheckState.Checked; + resources.ApplyResources(this.toolStripMenuItemViewDiagram, "toolStripMenuItemViewDiagram"); + this.toolStripMenuItemViewDiagram.Name = "toolStripMenuItemViewDiagram"; + this.toolStripMenuItemViewDiagram.Click += new System.EventHandler(this.toolStripMenuItemViewDiagram_Click); + // + // toolStripMenuItemViewRequirement + // + resources.ApplyResources(this.toolStripMenuItemViewRequirement, "toolStripMenuItemViewRequirement"); + this.toolStripMenuItemViewRequirement.Name = "toolStripMenuItemViewRequirement"; + this.toolStripMenuItemViewRequirement.Click += new System.EventHandler(this.toolStripMenuItemViewRequirement_Click); // // toolStripMenuItemViewText // @@ -906,13 +1040,11 @@ private void InitializeComponent() this.toolStripMenuItemViewText.Name = "toolStripMenuItemViewText"; this.toolStripMenuItemViewText.Click += new System.EventHandler(this.toolStripMenuItemViewText_Click); // - // toolStripMenuItemViewDiagram + // toolStripMenuItemViewWeb // - this.toolStripMenuItemViewDiagram.Checked = true; - this.toolStripMenuItemViewDiagram.CheckState = System.Windows.Forms.CheckState.Checked; - resources.ApplyResources(this.toolStripMenuItemViewDiagram, "toolStripMenuItemViewDiagram"); - this.toolStripMenuItemViewDiagram.Name = "toolStripMenuItemViewDiagram"; - this.toolStripMenuItemViewDiagram.Click += new System.EventHandler(this.toolStripMenuItemViewDiagram_Click); + resources.ApplyResources(this.toolStripMenuItemViewWeb, "toolStripMenuItemViewWeb"); + this.toolStripMenuItemViewWeb.Name = "toolStripMenuItemViewWeb"; + this.toolStripMenuItemViewWeb.Click += new System.EventHandler(this.toolStripMenuItemViewWeb_Click); // // toolStripMenuItemInsert // @@ -922,7 +1054,8 @@ private void InitializeComponent() this.userDataDefinitionToolStripMenuItem, this.modelViewDefinitionToolStripMenuItem, this.toolStripMenuItem20, - this.toolStripMenuItemInsertPublication}); + this.toolStripMenuItemInsertPublication, + this.toolStripMenuItemInsertChangeLog}); this.toolStripMenuItemInsert.Name = "toolStripMenuItemInsert"; resources.ApplyResources(this.toolStripMenuItemInsert, "toolStripMenuItemInsert"); // @@ -934,7 +1067,6 @@ private void InitializeComponent() this.ToolStripMenuItemInsertTerm, this.ToolStripMenuItemInsertAbbreviatedTerm, this.toolStripMenuItem11, - this.generateChangeLogToolStripMenuItem, this.toolStripMenuItem19, this.toolStripMenuItemInsertExample, this.toolStripSeparator7, @@ -970,12 +1102,6 @@ private void InitializeComponent() this.toolStripMenuItem11.Name = "toolStripMenuItem11"; resources.ApplyResources(this.toolStripMenuItem11, "toolStripMenuItem11"); // - // generateChangeLogToolStripMenuItem - // - resources.ApplyResources(this.generateChangeLogToolStripMenuItem, "generateChangeLogToolStripMenuItem"); - this.generateChangeLogToolStripMenuItem.Name = "generateChangeLogToolStripMenuItem"; - this.generateChangeLogToolStripMenuItem.Click += new System.EventHandler(this.generateChangeLogToolStripMenuItem_Click); - // // toolStripMenuItem19 // this.toolStripMenuItem19.Name = "toolStripMenuItem19"; @@ -1249,7 +1375,9 @@ private void InitializeComponent() this.toolStripMenuItemInsertViewDefinition, this.toolStripMenuItemInsertExchange, this.toolStripMenuItemInsertConceptRoot, - this.toolStripMenuItemInsertConceptLeaf}); + this.toolStripMenuItemInsertConceptLeaf, + this.toolStripMenuItemInsertConceptPset, + this.toolStripMenuItemInsertConceptQset}); this.modelViewDefinitionToolStripMenuItem.Name = "modelViewDefinitionToolStripMenuItem"; resources.ApplyResources(this.modelViewDefinitionToolStripMenuItem, "modelViewDefinitionToolStripMenuItem"); // @@ -1288,6 +1416,18 @@ private void InitializeComponent() this.toolStripMenuItemInsertConceptLeaf.Name = "toolStripMenuItemInsertConceptLeaf"; this.toolStripMenuItemInsertConceptLeaf.Click += new System.EventHandler(this.toolStripMenuItemInsertUseDefinition_Click); // + // toolStripMenuItemInsertConceptPset + // + resources.ApplyResources(this.toolStripMenuItemInsertConceptPset, "toolStripMenuItemInsertConceptPset"); + this.toolStripMenuItemInsertConceptPset.Name = "toolStripMenuItemInsertConceptPset"; + this.toolStripMenuItemInsertConceptPset.Click += new System.EventHandler(this.toolStripMenuItemInsertConceptPset_Click); + // + // toolStripMenuItemInsertConceptQset + // + resources.ApplyResources(this.toolStripMenuItemInsertConceptQset, "toolStripMenuItemInsertConceptQset"); + this.toolStripMenuItemInsertConceptQset.Name = "toolStripMenuItemInsertConceptQset"; + this.toolStripMenuItemInsertConceptQset.Click += new System.EventHandler(this.toolStripMenuItemInsertConceptQset_Click); + // // toolStripMenuItem20 // this.toolStripMenuItem20.Name = "toolStripMenuItem20"; @@ -1299,6 +1439,12 @@ private void InitializeComponent() this.toolStripMenuItemInsertPublication.Name = "toolStripMenuItemInsertPublication"; this.toolStripMenuItemInsertPublication.Click += new System.EventHandler(this.toolStripMenuItemInsertPublication_Click); // + // toolStripMenuItemInsertChangeLog + // + resources.ApplyResources(this.toolStripMenuItemInsertChangeLog, "toolStripMenuItemInsertChangeLog"); + this.toolStripMenuItemInsertChangeLog.Name = "toolStripMenuItemInsertChangeLog"; + this.toolStripMenuItemInsertChangeLog.Click += new System.EventHandler(this.generateChangeLogToolStripMenuItem_Click); + // // diagramToolStripMenuItem // this.diagramToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -1538,9 +1684,7 @@ private void InitializeComponent() this.toolStripMenuItemToolsISO, this.ToolStripMenuItemGenerateBallotSubmission, this.toolStripMenuItemToolsSourceCode, - this.toolStripMenuItemToolsModule, - this.toolStripMenuItem22, - this.toolStripMenuItemDictionaryUpload}); + this.toolStripMenuItemToolsModule}); this.toolStripMenuItemTools.Name = "toolStripMenuItemTools"; resources.ApplyResources(this.toolStripMenuItemTools, "toolStripMenuItemTools"); // @@ -1550,6 +1694,12 @@ private void InitializeComponent() this.toolStripMenuItemToolsValidate.Name = "toolStripMenuItemToolsValidate"; this.toolStripMenuItemToolsValidate.Click += new System.EventHandler(this.toolStripMenuItemToolsValidate_Click); // + // toolStripMenuItemToolsConvert + // + resources.ApplyResources(this.toolStripMenuItemToolsConvert, "toolStripMenuItemToolsConvert"); + this.toolStripMenuItemToolsConvert.Name = "toolStripMenuItemToolsConvert"; + this.toolStripMenuItemToolsConvert.Click += new System.EventHandler(this.toolStripMenuItemToolsConvert_Click); + // // toolStripMenuItem8 // this.toolStripMenuItem8.Name = "toolStripMenuItem8"; @@ -1579,17 +1729,6 @@ private void InitializeComponent() resources.ApplyResources(this.toolStripMenuItemToolsModule, "toolStripMenuItemToolsModule"); this.toolStripMenuItemToolsModule.Click += new System.EventHandler(this.toolStripMenuItemToolsModule_Click); // - // toolStripMenuItem22 - // - this.toolStripMenuItem22.Name = "toolStripMenuItem22"; - resources.ApplyResources(this.toolStripMenuItem22, "toolStripMenuItem22"); - // - // toolStripMenuItemDictionaryUpload - // - this.toolStripMenuItemDictionaryUpload.Name = "toolStripMenuItemDictionaryUpload"; - resources.ApplyResources(this.toolStripMenuItemDictionaryUpload, "toolStripMenuItemDictionaryUpload"); - this.toolStripMenuItemDictionaryUpload.Click += new System.EventHandler(this.toolStripMenuItemDictionaryUpload_Click); - // // helpToolStripMenuItem // this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -1645,9 +1784,10 @@ private void InitializeComponent() this.toolStripButtonMoveOut, this.toolStripButtonMoveIn, this.toolStripSeparator4, - this.toolStripButtonViewWeb, - this.toolStripButtonViewText, this.toolStripButtonViewDiagram, + this.toolStripButtonViewRequirement, + this.toolStripButtonViewText, + this.toolStripButtonViewWeb, this.toolStripSeparator2, this.toolStripButtonModeSelect, this.toolStripButtonModeMove, @@ -1766,12 +1906,21 @@ private void InitializeComponent() this.toolStripSeparator4.Name = "toolStripSeparator4"; resources.ApplyResources(this.toolStripSeparator4, "toolStripSeparator4"); // - // toolStripButtonViewWeb + // toolStripButtonViewDiagram // - this.toolStripButtonViewWeb.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - resources.ApplyResources(this.toolStripButtonViewWeb, "toolStripButtonViewWeb"); - this.toolStripButtonViewWeb.Name = "toolStripButtonViewWeb"; - this.toolStripButtonViewWeb.Click += new System.EventHandler(this.toolStripMenuItemViewWeb_Click); + this.toolStripButtonViewDiagram.Checked = true; + this.toolStripButtonViewDiagram.CheckState = System.Windows.Forms.CheckState.Checked; + this.toolStripButtonViewDiagram.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + resources.ApplyResources(this.toolStripButtonViewDiagram, "toolStripButtonViewDiagram"); + this.toolStripButtonViewDiagram.Name = "toolStripButtonViewDiagram"; + this.toolStripButtonViewDiagram.Click += new System.EventHandler(this.toolStripMenuItemViewDiagram_Click); + // + // toolStripButtonViewRequirement + // + this.toolStripButtonViewRequirement.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + resources.ApplyResources(this.toolStripButtonViewRequirement, "toolStripButtonViewRequirement"); + this.toolStripButtonViewRequirement.Name = "toolStripButtonViewRequirement"; + this.toolStripButtonViewRequirement.Click += new System.EventHandler(this.toolStripMenuItemViewRequirement_Click); // // toolStripButtonViewText // @@ -1780,14 +1929,12 @@ private void InitializeComponent() this.toolStripButtonViewText.Name = "toolStripButtonViewText"; this.toolStripButtonViewText.Click += new System.EventHandler(this.toolStripMenuItemViewText_Click); // - // toolStripButtonViewDiagram + // toolStripButtonViewWeb // - this.toolStripButtonViewDiagram.Checked = true; - this.toolStripButtonViewDiagram.CheckState = System.Windows.Forms.CheckState.Checked; - this.toolStripButtonViewDiagram.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; - resources.ApplyResources(this.toolStripButtonViewDiagram, "toolStripButtonViewDiagram"); - this.toolStripButtonViewDiagram.Name = "toolStripButtonViewDiagram"; - this.toolStripButtonViewDiagram.Click += new System.EventHandler(this.toolStripMenuItemViewDiagram_Click); + this.toolStripButtonViewWeb.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + resources.ApplyResources(this.toolStripButtonViewWeb, "toolStripButtonViewWeb"); + this.toolStripButtonViewWeb.Name = "toolStripButtonViewWeb"; + this.toolStripButtonViewWeb.Click += new System.EventHandler(this.toolStripMenuItemViewWeb_Click); // // toolStripSeparator2 // @@ -1944,84 +2091,11 @@ private void InitializeComponent() // resources.ApplyResources(this.openFileDialogExpress, "openFileDialogExpress"); // - // treeView - // - this.treeView.ContextMenuStrip = this.contextMenuStrip; - resources.ApplyResources(this.treeView, "treeView"); - this.treeView.HideSelection = false; - this.treeView.ImageList = this.imageListIcon; - this.treeView.LabelEdit = true; - this.treeView.Name = "treeView"; - this.treeView.BeforeLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView_BeforeLabelEdit); - this.treeView.AfterLabelEdit += new System.Windows.Forms.NodeLabelEditEventHandler(this.treeView_AfterLabelEdit); - this.treeView.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); - this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TreeView_AfterSelect); - this.treeView.MouseUp += new System.Windows.Forms.MouseEventHandler(this.treeView_MouseUp); + // openFileDialogExamples // - // ctlConcept - // - resources.ApplyResources(this.ctlConcept, "ctlConcept"); - this.ctlConcept.ConceptRoot = null; - this.ctlConcept.CurrentInstance = null; - this.ctlConcept.Map = null; - this.ctlConcept.Name = "ctlConcept"; - this.ctlConcept.Project = null; - this.ctlConcept.Selection = null; - this.ctlConcept.Template = null; - this.ctlConcept.SelectionChanged += new System.EventHandler(this.ctlConcept_SelectionChanged); - this.ctlConcept.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ctlConcept_MouseDoubleClick); - // - // ctlExpressG - // - this.ctlExpressG.AllowDrop = true; - resources.ApplyResources(this.ctlExpressG, "ctlExpressG"); - this.ctlExpressG.Format = IfcDoc.Format.PNG.DiagramFormat.ExpressG; - this.ctlExpressG.Map = null; - this.ctlExpressG.Mode = IfcDoc.ToolMode.Select; - this.ctlExpressG.Name = "ctlExpressG"; - this.ctlExpressG.Schema = null; - this.ctlExpressG.ScrollToSelection = true; - this.ctlExpressG.Selection = null; - this.ctlExpressG.SelectionChanged += new System.EventHandler(this.ctlExpressG_SelectionChanged); - this.ctlExpressG.LinkOperation += new System.EventHandler(this.ctlExpressG_LinkOperation); - this.ctlExpressG.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.ctlExpressG_MouseDoubleClick); - // - // ctlCheckGrid - // - resources.ApplyResources(this.ctlCheckGrid, "ctlCheckGrid"); - this.ctlCheckGrid.CheckGridSource = null; - this.ctlCheckGrid.Mode = IfcDoc.ToolMode.Select; - this.ctlCheckGrid.Name = "ctlCheckGrid"; - this.ctlCheckGrid.Selection = null; - this.ctlCheckGrid.SelectionChanged += new System.EventHandler(this.ctlCheckGrid_SelectionChanged); - // - // ctlInheritance - // - resources.ApplyResources(this.ctlInheritance, "ctlInheritance"); - this.ctlInheritance.Entity = null; - this.ctlInheritance.Mode = IfcDoc.ToolMode.Select; - this.ctlInheritance.ModelView = null; - this.ctlInheritance.Name = "ctlInheritance"; - this.ctlInheritance.Project = null; - this.ctlInheritance.SelectionChanged += new System.EventHandler(this.ctlInheritance_SelectionChanged); - // - // ctlProperties - // - this.ctlProperties.CurrentInstance = null; - this.ctlProperties.CurrentPopulation = null; - resources.ApplyResources(this.ctlProperties, "ctlProperties"); - this.ctlProperties.Name = "ctlProperties"; - this.ctlProperties.SelectedAttribute = null; - this.ctlProperties.SelectedRule = null; - this.ctlProperties.Navigate += new System.EventHandler(this.ctlProperties_Navigate); - this.ctlProperties.RuleSelectionChanged += new System.EventHandler(this.ctlProperties_RuleSelectionChanged); - this.ctlProperties.RuleContentChanged += new System.EventHandler(this.ctlProperties_RuleContentChanged); - // - // toolStripMenuItemToolsConvert - // - resources.ApplyResources(this.toolStripMenuItemToolsConvert, "toolStripMenuItemToolsConvert"); - this.toolStripMenuItemToolsConvert.Name = "toolStripMenuItemToolsConvert"; - this.toolStripMenuItemToolsConvert.Click += new System.EventHandler(this.toolStripMenuItemToolsConvert_Click); + this.openFileDialogExamples.FileName = "openFileDialogExample"; + resources.ApplyResources(this.openFileDialogExamples, "openFileDialogExamples"); + this.openFileDialogExamples.Multiselect = true; // // FormEdit // @@ -2263,7 +2337,6 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemToolsModule; private System.Windows.Forms.SaveFileDialog saveFileDialogModule; private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; - private System.Windows.Forms.ToolStripMenuItem generateChangeLogToolStripMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem19; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemEnableDisable; private CtlProperties ctlProperties; @@ -2278,7 +2351,6 @@ private void InitializeComponent() private System.Windows.Forms.ImageList imageListValidate; private System.Windows.Forms.ToolStripMenuItem modelViewDefinitionToolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem buildFromSubschemaToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemEditBuildConcepts; private System.Windows.Forms.OpenFileDialog openFileDialogExpress; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertConstant; private System.Windows.Forms.SplitContainer splitContainerInstances; @@ -2298,8 +2370,19 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemStyleExpressG; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemStyleUML; private System.Windows.Forms.ToolStripSeparator toolStripMenuItem7; - private System.Windows.Forms.ToolStripSeparator toolStripMenuItem22; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemDictionaryUpload; private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemToolsConvert; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemInsertConceptPset; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemInsertConceptQset; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertSchema; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertEntity; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertPublication; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertAttribute; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertDefined; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertEnumeration; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemContextInsertSelect; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemViewRequirement; + private System.Windows.Forms.ToolStripButton toolStripButtonViewRequirement; + private System.Windows.Forms.OpenFileDialog openFileDialogExamples; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItemInsertChangeLog; } } \ No newline at end of file diff --git a/FormEdit.cs b/FormEdit.cs index a8fbf0d8..f5ee04bf 100644 --- a/FormEdit.cs +++ b/FormEdit.cs @@ -165,12 +165,9 @@ public FormEdit(string[] args) if (args.Length == 2) { Properties.Settings.Default.OutputPath = args[1]; - //this.FilterInclude( this.GenerateDocumentation(); this.Close(); } - - this.toolStripMenuItemDictionaryUpload.Visible = false; // not yet functional } @@ -259,8 +256,6 @@ private void toolStripMenuItemFileNew_Click(object sender, EventArgs e) // init defaults this.m_project = new DocProject(); - this.m_project.Annexes[1].Code = "IFC4"; // schema id - LoadTree(); } @@ -594,7 +589,7 @@ private void toolStripMenuItemFileSave_Click(object sender, EventArgs e) case ".ifcdoc": using (FormatSPF format = new FormatSPF(this.m_file, SchemaDOC.Types, this.m_instances)) { - format.InitHeaders(this.m_file, "IFCDOC_10_4"); + format.InitHeaders(this.m_file, "IFCDOC_11_2"); format.Save(); } break; @@ -954,6 +949,7 @@ private void toolStripMenuItemFileImport_Click(object sender, EventArgs e) } +#if false // map to use definition if (this.m_mapTree.TryGetValue(qset.ApplicableType.ToLowerInvariant(), out tn)) { @@ -999,10 +995,10 @@ private void toolStripMenuItemFileImport_Click(object sender, EventArgs e) // if no template, add it if (templateuse == null) { - // get the pset template + // get the qset template templateuse = new DocTemplateUsage(); docRoot.Concepts.Add(templateuse); - templateuse.Definition = this.m_project.GetTemplate(new Guid("6652398e-6579-4460-8cb4-26295acfacc7")); + templateuse.Definition = this.m_project.GetTemplate(guidTemplateQset); } if (templateuse != null) @@ -1014,6 +1010,7 @@ private void toolStripMenuItemFileImport_Click(object sender, EventArgs e) } } } +#endif } else { @@ -1392,7 +1389,11 @@ private void toolStripMenuItemFileExport_Click(object sender, EventArgs e) try { - DocumentationISO.DoExport(this.m_project, this.saveFileDialogExport.FileName, views, locales, scope, this.m_instances); + Dictionary mapEntity = new Dictionary(); + Dictionary mapSchema = new Dictionary(); + BuildMaps(mapEntity, mapSchema); + + DocumentationISO.DoExport(this.m_project, null, this.saveFileDialogExport.FileName, views, locales, scope, this.m_instances, mapEntity); } catch (Exception x) { @@ -1529,7 +1530,11 @@ private void toolStripMenuItemEditDelete_Click(object sender, EventArgs e) else if (this.treeView.SelectedNode.Tag is DocConceptRoot) { DocConceptRoot conceptroot = (DocConceptRoot)this.treeView.SelectedNode.Tag; - + DocModelView docView = (DocModelView)this.treeView.SelectedNode.Parent.Tag; + docView.ConceptRoots.Remove(conceptroot); + this.treeView.SelectedNode.Remove(); + conceptroot.Delete(); +#if false // find the model view foreach (DocModelView docView in this.m_project.ModelViews) { @@ -1542,6 +1547,7 @@ private void toolStripMenuItemEditDelete_Click(object sender, EventArgs e) this.treeView.SelectedNode.Remove(); conceptroot.Delete(); +#endif } else if (this.treeView.SelectedNode.Tag is DocTemplateUsage) { @@ -1653,7 +1659,15 @@ private void toolStripMenuItemEditDelete_Click(object sender, EventArgs e) else if (this.treeView.SelectedNode.Tag is DocChangeSet) { DocChangeSet changeset = (DocChangeSet)this.treeView.SelectedNode.Tag; - this.m_project.ChangeSets.Remove(changeset); + if (this.treeView.SelectedNode.Parent != null && this.treeView.SelectedNode.Parent.Tag is DocPublication) + { + DocPublication docPub = (DocPublication)this.treeView.SelectedNode.Parent.Tag; + docPub.ChangeSets.Remove(changeset); + } + else + { + this.m_project.ChangeSets.Remove(changeset); + } this.treeView.SelectedNode.Remove(); changeset.Delete(); } @@ -1668,8 +1682,16 @@ private void toolStripMenuItemEditDelete_Click(object sender, EventArgs e) else if (this.treeView.SelectedNode.Tag is DocProperty) { DocProperty docTarget = (DocProperty)this.treeView.SelectedNode.Tag; - DocPropertySet docPset = (DocPropertySet)this.treeView.SelectedNode.Parent.Tag; - docPset.Properties.Remove(docTarget); + if (this.treeView.SelectedNode.Parent.Tag is DocPropertySet) + { + DocPropertySet docPset = (DocPropertySet)this.treeView.SelectedNode.Parent.Tag; + docPset.Properties.Remove(docTarget); + } + else if(this.treeView.SelectedNode.Parent.Tag is DocProperty) + { + DocProperty docPset = (DocProperty)this.treeView.SelectedNode.Parent.Tag; + docPset.Elements.Remove(docTarget); + } this.treeView.SelectedNode.Remove(); docTarget.Delete(); } @@ -1777,6 +1799,34 @@ private void toolStripMenuItemEditDelete_Click(object sender, EventArgs e) this.treeView.SelectedNode.Remove(); docTarget.Delete(); } + else if(this.treeView.SelectedNode.Tag is DocSelectItem) + { + DocSelectItem docTarget = (DocSelectItem)this.treeView.SelectedNode.Tag; + DocSelect docSelect = (DocSelect)this.treeView.SelectedNode.Parent.Tag; + docSelect.Selects.Remove(docTarget); + this.treeView.SelectedNode.Remove(); + docTarget.Delete(); + + // remove lines + foreach (DocLine docLine in docSelect.Tree) + { + if (docLine.Definition != null && docLine.Definition.Name.Contains(docTarget.Name)) + { + docSelect.Tree.Remove(docLine); + docLine.Delete(); + break; + } + foreach(DocLine docSub in docLine.Tree) + { + if (docSub.Definition != null && docSub.Definition.Name.Contains(docTarget.Name)) + { + docLine.Tree.Remove(docSub); + docSub.Delete(); + break; + } + } + } + } else if (this.treeView.SelectedNode.Tag is DocGlobalRule) { DocGlobalRule docTarget = (DocGlobalRule)this.treeView.SelectedNode.Tag; @@ -1867,6 +1917,15 @@ private void toolStripMenuItemEditDelete_Click(object sender, EventArgs e) docDefRef.Delete(); DeleteReferencesForSchemaDefinition(docSchema, docDefRef); + + // clear out references if none left + if(docSchemaRef.Definitions.Count == 0) + { + docSchema.SchemaRefs.Remove(docSchemaRef); + this.treeView.SelectedNode.Remove(); + docSchemaRef.Delete(); + } + UpdateTreeDeletion(); this.ctlExpressG.Redraw(); } @@ -1897,6 +1956,27 @@ private void DeleteReferencesForSchemaDefinition(DocSchema docSchema, DocDefinit docEnt.Attributes.RemoveAt(iAttr); } } + + // delete any subtype relations + foreach(DocLine docLine in docEnt.Tree) + { + if(docLine.Definition == docDef) + { + docEnt.Tree.Remove(docLine); + docLine.Delete(); + break; + } + + foreach(DocLine docSub in docLine.Tree) + { + if(docSub.Definition == docDef) + { + docLine.Tree.Remove(docSub); + docSub.Delete(); + break; + } + } + } } for(int iType = docSchema.Types.Count-1; iType >= 0; iType--) @@ -1913,6 +1993,34 @@ private void DeleteReferencesForSchemaDefinition(DocSchema docSchema, DocDefinit } } + foreach(DocSchemaRef docSchemaRef in docSchema.SchemaRefs) + { + foreach(DocDefinitionRef docDefRef in docSchemaRef.Definitions) + { + // delete any subtype relations + foreach (DocLine docLine in docDefRef.Tree) + { + if (docLine.Definition == docDef) + { + docDefRef.Tree.Remove(docLine); + docLine.Delete(); + break; + } + + foreach (DocLine docSub in docLine.Tree) + { + if (docSub.Definition == docDef) + { + docLine.Tree.Remove(docSub); + docSub.Delete(); + break; + } + } + } + + } + } + // delete page refs referencing the definition for (int iPage = docSchema.PageTargets.Count - 1; iPage >= 0; iPage--) { @@ -1969,6 +2077,11 @@ private void DeleteReferencesForDefinition(string definition) docEntity.BaseDefinition = null; } + if(docEntity.Name.Equals("IfcCurve")) + { + this.ToString(); + } + foreach (DocSubtype docSub in docEntity.Subtypes) { if (docSub.DefinedType == definition) @@ -1979,7 +2092,39 @@ private void DeleteReferencesForDefinition(string definition) } } - //... delete lines... + if (docEntity.Tree != null) + { + foreach (DocLine docLine in docEntity.Tree) + { + if (docLine.Definition != null && docLine.Definition.Name.Equals(definition)) + { + docEntity.Tree.Remove(docLine); + docLine.Delete(); + break; + } + + if(docLine.Tree != null) + { + foreach(DocLine docLineSub in docLine.Tree) + { + if (docLineSub.Definition != null && docLineSub.Definition.Name.Equals(definition)) + { + docLine.Tree.Remove(docLineSub); + docLineSub.Delete(); + break; + } + } + } + + if (docLine.Tree.Count == 0) + { + // dissolve the tree + docEntity.Tree.Remove(docLine); + break; + } + + } + } for (int iAttr = docEntity.Attributes.Count - 1; iAttr >= 0; iAttr--) { @@ -2482,6 +2627,7 @@ private void LoadNodeSchema(TreeNode tnSchema, DocSchema schema) LoadNode(tnType, ur, ur.Name, false); } +#if false // new style templates foreach (DocModelView docModelView in this.m_project.ModelViews) { @@ -2505,6 +2651,7 @@ private void LoadNodeSchema(TreeNode tnSchema, DocSchema schema) } } } +#endif } TreeNode tnGlobHeader = LoadNode(tnSchema, typeof(DocGlobalRule), "Global Rules", false); @@ -2620,11 +2767,23 @@ private void LoadTree() LoadNode(tnModel, docExchange, docExchange.Name, false); } - //temp: also load concept roots -#if false + // new: also load concept roots +#if true foreach(DocConceptRoot docCR in docModel.ConceptRoots) { - LoadNode(tnModel, docCR, docCR.ApplicableEntity.Name, false); + //LoadNode(tnModel, docCR, docCR.ApplicableEntity.Name, false); + + string rootname = docCR.Name; + if (String.IsNullOrEmpty(rootname)) + { + rootname = docCR.ToString();//docModel.Name; + } + + TreeNode tnConceptRoot = LoadNode(tnModel, docCR, rootname, false); + foreach (DocTemplateUsage docConcept in docCR.Concepts) + { + LoadNodeConcept(tnConceptRoot, docConcept); + } } #endif } @@ -2737,6 +2896,15 @@ private void LoadTree() { LoadNode(tnPub, docAnno, docAnno.Name, false); } + + foreach (DocChangeSet docChangeSet in docPub.ChangeSets) + { + TreeNode tnSet = LoadNode(tnPub, docChangeSet, docChangeSet.Name, true); + foreach (DocChangeAction docChangeItem in docChangeSet.ChangesEntities) + { + LoadTreeChange(tnSet, docChangeItem); + } + } } // force update of main pain @@ -2847,7 +3015,8 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemEditCopy.Enabled = false; this.toolStripMenuItemEditPaste.Enabled = false; - this.toolStripMenuItemEditBuildConcepts.Enabled = false; + this.toolStripMenuItemInsertConceptPset.Enabled = false; + this.toolStripMenuItemInsertConceptQset.Enabled = false; this.buildFromSubschemaToolStripMenuItem.Enabled = false; this.toolStripMenuItemContextInsertModelView.Visible = false; @@ -2859,6 +3028,12 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemContextInsertNormative.Visible = false; this.toolStripMenuItemContextInsertTerm.Visible = false; this.toolStripMenuItemContextInsertAbbreviatedTerm.Visible = false; + this.toolStripMenuItemContextInsertSchema.Visible = false; + this.toolStripMenuItemContextInsertDefined.Visible = false; + this.toolStripMenuItemContextInsertSelect.Visible = false; + this.toolStripMenuItemContextInsertEnumeration.Visible = false; + this.toolStripMenuItemContextInsertEntity.Visible = false; + this.toolStripMenuItemContextInsertAttribute.Visible = false; this.toolStripMenuItemContextInsertPset.Visible = false; this.toolStripMenuItemContextInsertProperty.Visible = false; this.toolStripMenuItemContextInsertPropertyEnum.Visible = false; @@ -2867,6 +3042,7 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemContextInsertQuantity.Visible = false; this.toolStripMenuItemContextInsertExample.Visible = false; this.toolStripMenuItemContextInsertBibliography.Visible = false; + this.toolStripMenuItemContextInsertPublication.Visible = false; this.toolStripMenuItemContextInsert.Visible = false; @@ -3017,7 +3193,8 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) { this.toolStripMenuItemEditMoveDown.Enabled = true; } - this.toolStripMenuItemEditBuildConcepts.Enabled = true; + this.toolStripMenuItemInsertConceptPset.Enabled = true; + this.toolStripMenuItemInsertConceptQset.Enabled = true; } else if(e.Node.Parent.Tag is DocTemplateUsage) { @@ -3053,9 +3230,12 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemEditRename.Enabled = true; this.toolStripMenuItemEditPaste.Enabled = (this.m_clipboard is DocExchangeDefinition); - this.toolStripMenuItemEditBuildConcepts.Enabled = true; + this.toolStripMenuItemInsertConceptRoot.Enabled = true; + this.toolStripMenuItemInsertConceptPset.Enabled = true; + this.toolStripMenuItemInsertConceptQset.Enabled = true; this.buildFromSubschemaToolStripMenuItem.Enabled = true; + this.toolStripMenuItemContextInsertRoot.Visible = true; this.toolStripMenuItemContextInsertExchange.Visible = true; this.toolStripMenuItemContextInsert.Visible = true; @@ -3092,6 +3272,34 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) } } } + else if (e.Node.Tag is DocConceptRoot) + { + DocConceptRoot obj = (DocConceptRoot)e.Node.Tag; + this.SetContent(obj, obj.Documentation); + + this.toolStripMenuItemEditDelete.Enabled = true; + this.toolStripMenuItemEditRename.Enabled = true; + + this.toolStripMenuItemInsertConceptLeaf.Enabled = true; + this.toolStripMenuItemContextInsertLeaf.Visible = true; + this.toolStripMenuItemContextInsert.Visible = true; + + if (e.Node.Parent.Tag is DocModelView) + { + + DocModelView ent = (DocModelView)e.Node.Parent.Tag; + if (ent.ConceptRoots.IndexOf(obj) > 0) + { + this.toolStripMenuItemEditMoveUp.Enabled = true; + } + + if(ent.ConceptRoots.IndexOf(obj) < ent.ConceptRoots.Count - 1) + { + this.toolStripMenuItemEditMoveDown.Enabled = true; + } + } + + } else if (e.Node.Tag is DocChangeSet) { DocChangeSet obj = (DocChangeSet)e.Node.Tag; @@ -3148,6 +3356,11 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemInsertPrimitive.Enabled = true; this.toolStripMenuItemInsertReference.Enabled = true; this.toolStripMenuItemInsertComment.Enabled = true; + + this.toolStripMenuItemContextInsertEntity.Visible = true; + this.toolStripMenuItemContextInsertEnumeration.Visible = true; + this.toolStripMenuItemContextInsertSelect.Visible = true; + this.toolStripMenuItemContextInsertDefined.Visible = true; } else if (obj is DocType) { @@ -3156,6 +3369,9 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) if (obj is DocEnumeration) { toolStripMenuItemInsertEnumerationConstant.Enabled = true; + + this.toolStripMenuItemContextInsertConstant.Visible = true; + this.toolStripMenuItemContextInsert.Visible = true; } else if(obj is DocSelect) { @@ -3167,6 +3383,11 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) } this.toolStripMenuItemDiagramFormatPageRef.Enabled = true; } + else if(obj is DocSelectItem) + { + this.toolStripMenuItemEditDelete.Enabled = true; + this.toolStripMenuItemEditRename.Enabled = false; + } else if (obj is DocConstant) { DocConstant docConst = (DocConstant)obj; @@ -3182,14 +3403,11 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemEditDelete.Enabled = true; this.toolStripMenuItemEditPaste.Enabled = false; - //this.ToolStripMenuItemEditCut.Enabled = true; - this.toolStripMenuItemInsertAttribute.Enabled = true; this.toolStripMenuItemInsertUnique.Enabled = true; this.toolStripMenuItemInsertWhere.Enabled = true; - this.toolStripMenuItemInsertConceptRoot.Enabled = true; - this.toolStripMenuItemContextInsertRoot.Visible = true; + this.toolStripMenuItemContextInsertAttribute.Visible = true; this.toolStripMenuItemContextInsert.Visible = true; if (entity.Subtypes.Count > 0) @@ -3234,16 +3452,11 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) { this.toolStripMenuItemEditDelete.Enabled = true; } - else if (obj is DocSchema) - { - this.toolStripMenuItemEditDelete.Enabled = true; - - //this.toolStripMenuItemEditPaste.Enabled = (this.m_clipboard is DocEntity); - } else if (obj is DocFunction) { this.toolStripMenuItemEditDelete.Enabled = true; } +#if false else if (obj is DocConceptRoot) { this.toolStripMenuItemEditDelete.Enabled = true; @@ -3262,8 +3475,10 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemEditMoveDown.Enabled = (indexof < dmv.ConceptRoots.Count - 1); } - this.toolStripMenuItemEditBuildConcepts.Enabled = true; + this.toolStripMenuItemInsertConceptPset.Enabled = true; + this.toolStripMenuItemInsertConceptQset.Enabled = true; } +#endif else if(obj is DocPropertyConstant) { this.toolStripMenuItemEditDelete.Enabled = true; @@ -3296,16 +3511,33 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) this.toolStripMenuItemEditDelete.Enabled = true; this.toolStripMenuItemEditCopy.Enabled = true; this.ToolStripMenuItemEditCut.Enabled = true; + this.toolStripMenuItemInsertProperty.Enabled = true; // though only applicable if complex - DocPropertySet ent = (DocPropertySet)e.Node.Parent.Tag; - if (ent.Properties.IndexOf((DocProperty)obj) > 0) + if (e.Node.Parent.Tag is DocPropertySet) { - this.toolStripMenuItemEditMoveUp.Enabled = true; - } + DocPropertySet ent = (DocPropertySet)e.Node.Parent.Tag; + if (ent.Properties.IndexOf((DocProperty)obj) > 0) + { + this.toolStripMenuItemEditMoveUp.Enabled = true; + } - if (ent.Properties.IndexOf((DocProperty)obj) < ent.Properties.Count - 1) + if (ent.Properties.IndexOf((DocProperty)obj) < ent.Properties.Count - 1) + { + this.toolStripMenuItemEditMoveDown.Enabled = true; + } + } + else if(e.Node.Parent.Tag is DocProperty) { - this.toolStripMenuItemEditMoveDown.Enabled = true; + DocProperty ent = (DocProperty)e.Node.Parent.Tag; + if (ent.Elements.IndexOf((DocProperty)obj) > 0) + { + this.toolStripMenuItemEditMoveUp.Enabled = true; + } + + if (ent.Elements.IndexOf((DocProperty)obj) < ent.Elements.Count - 1) + { + this.toolStripMenuItemEditMoveDown.Enabled = true; + } } } else if (obj is DocPropertyEnumeration) @@ -3404,6 +3636,8 @@ private void TreeView_AfterSelect(object sender, TreeViewEventArgs e) { this.toolStripMenuItemEditRename.Enabled = true; this.toolStripMenuItemInsertSchema.Enabled = true; + this.toolStripMenuItemContextInsertSchema.Visible = true; + this.toolStripMenuItemContextInsert.Visible = true; this.toolStripMenuItemEditPaste.Enabled = (this.m_clipboard is DocSchema); } @@ -3574,9 +3808,10 @@ private void SetContent(DocObject obj, string content) this.ctlOperators.Rule = null; */ this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlExpressG.Visible = false; this.ctlConcept.Visible = true; + + this.ctlCheckGrid.CheckGridSource = new CheckGridConcept(docTemplate, null, this.m_project); } else if (obj is DocModelView) { @@ -3597,8 +3832,9 @@ private void SetContent(DocObject obj, string content) } this.ctlInheritance.Visible = true; this.ctlExpressG.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = new CheckGridExchange(null, docView, this.m_project); } else if(obj is DocSection) { @@ -3608,8 +3844,9 @@ private void SetContent(DocObject obj, string content) this.ctlInheritance.Visible = false; this.ctlExpressG.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = null;//?? } else if (obj is DocExchangeDefinition) { @@ -3618,7 +3855,6 @@ private void SetContent(DocObject obj, string content) this.ctlCheckGrid.CheckGridSource = new CheckGridExchange(docExchange, docView, this.m_project); this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = true; this.ctlExpressG.Visible = false; this.ctlConcept.Visible = false; } @@ -3644,16 +3880,9 @@ private void SetContent(DocObject obj, string content) this.ctlConcept.Template = null; this.ctlConcept.ConceptRoot = docRoot; this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlExpressG.Visible = false; - this.ctlConcept.Visible = true; - -#if false // requirements view -- move into separate view mode in future + this.ctlConcept.Visible = true;//! this.ctlCheckGrid.CheckGridSource = new CheckGridEntity(docRoot, docView, this.m_project, mapEntity); - this.ctlCheckGrid.Visible = true; - this.ctlExpressG.Visible = false; - this.splitContainerConcept.Visible = false; -#endif } else if (obj is DocTemplateUsage) { @@ -3685,7 +3914,6 @@ private void SetContent(DocObject obj, string content) this.ctlConcept.Template = docUsage.Definition; this.ctlConcept.ConceptRoot = null; this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlExpressG.Visible = false; this.ctlConcept.Visible = true; @@ -3697,12 +3925,7 @@ private void SetContent(DocObject obj, string content) this.ctlParameters.ConceptLeaf = docUsage; */ -#if false // requirements view -- move into separate view mode in future this.ctlCheckGrid.CheckGridSource = new CheckGridConcept(docUsage.Definition, docView, this.m_project); - this.ctlCheckGrid.Visible = true; - this.ctlExpressG.Visible = false; - this.splitContainerConcept.Visible = false; -#endif } else if (obj is DocSchema) { @@ -3715,8 +3938,9 @@ private void SetContent(DocObject obj, string content) this.ctlExpressG.Selection = null; this.ctlExpressG.Visible = true; this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = null; } else if(obj is DocDefinition) { @@ -3742,8 +3966,9 @@ private void SetContent(DocObject obj, string content) } this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = null; } else if (obj is DocAttribute || obj is DocWhereRule || obj is DocUniqueRule || obj is DocConstant || obj is DocSchemaRef || obj is DocSelectItem) { @@ -3769,8 +3994,9 @@ private void SetContent(DocObject obj, string content) } this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = null; } else if (obj == null && this.treeView.SelectedNode != null && this.treeView.SelectedNode.Parent != null && this.treeView.SelectedNode.Parent.Tag is DocSchema) { @@ -3784,15 +4010,17 @@ private void SetContent(DocObject obj, string content) this.ctlExpressG.Selection = null; this.ctlExpressG.Visible = true; this.ctlInheritance.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = null; } else { this.ctlInheritance.Visible = false; this.ctlExpressG.Visible = false; - this.ctlCheckGrid.Visible = false; this.ctlConcept.Visible = false; + + this.ctlCheckGrid.CheckGridSource = null; } } @@ -3963,7 +4191,7 @@ private void toolStripMenuItemInsertExchange_Click(object sender, EventArgs e) docView.Exchanges.Add(docExchange); TreeNode tnParent = this.treeView.SelectedNode; - this.treeView.SelectedNode = this.LoadNode(tnParent, docExchange, docExchange.ToString(), false); + this.treeView.SelectedNode = this.LoadNode(tnParent, docExchange, docExchange.ToString(), false, docView.Exchanges.Count - 1); toolStripMenuItemEditRename_Click(this, e); } @@ -3974,7 +4202,7 @@ private void toolStripMenuItemInsertUseDefinition_Click(object sender, EventArgs if (docConceptRoot == null) return; - DocEntity docEntity = (DocEntity)this.treeView.SelectedNode.Parent.Tag as DocEntity; + DocEntity docEntity = docConceptRoot.ApplicableEntity;// (DocEntity)this.treeView.SelectedNode.Parent.Tag as DocEntity; if (docEntity == null) return; @@ -4032,7 +4260,9 @@ private void generateChangeLogToolStripMenuItem_Click(object sender, EventArgs e } } - ChangeLogGenerator.Generate(docProjectBase, this.m_project); + DocPublication docPub = this.treeView.SelectedNode.Tag as DocPublication; // if publication selected, then change log is specific to publication + + ChangeLogGenerator.Generate(docProjectBase, this.m_project, docPub); this.LoadTree(); } @@ -4248,6 +4478,20 @@ private void MoveSelection(int direction) docSchema.Properties.Remove(docProp); docSchema.Properties.Insert(index, docProp); + tnParent.Nodes.Remove(tn); + tnParent.Nodes.Insert(treeindex, tn); + } + else if(tn.Parent.Tag is DocProperty) + { + DocProperty docSchema = (DocProperty)tnParent.Tag; + int index = docSchema.Elements.IndexOf(docProp); + + index += direction; + treeindex += direction; + + docSchema.Elements.Remove(docProp); + docSchema.Elements.Insert(index, docProp); + tnParent.Nodes.Remove(tn); tnParent.Nodes.Insert(treeindex, tn); } @@ -4484,6 +4728,7 @@ private void toolStripMenuItemEditPaste_Click(object sender, EventArgs e) localNew.URL = localOld.URL; propNew.Localization.Add(localNew); } + psetNew.Properties.Add(propNew); this.treeView.SelectedNode = this.LoadNode(this.treeView.SelectedNode, propNew, propNew.Name, false); } @@ -4619,9 +4864,17 @@ private void toolStripMenuItemInsertPropertyset_Click(object sender, EventArgs e private void toolStripMenuItemInsertProperty_Click(object sender, EventArgs e) { - DocPropertySet docPset = (DocPropertySet)this.treeView.SelectedNode.Tag; DocProperty docProp = new DocProperty(); - docPset.Properties.Add(docProp); + if (this.treeView.SelectedNode.Tag is DocPropertySet) + { + DocPropertySet docPset = (DocPropertySet)this.treeView.SelectedNode.Tag; + docPset.Properties.Add(docProp); + } + else if(this.treeView.SelectedNode.Tag is DocProperty) + { + DocProperty docPset = (DocProperty)this.treeView.SelectedNode.Tag; + docPset.Elements.Add(docProp); + } docProp.PropertyType = DocPropertyTemplateTypeEnum.P_SINGLEVALUE; this.treeView.SelectedNode = this.LoadNode(this.treeView.SelectedNode, docProp, docProp.Name, false); this.toolStripMenuItemEditRename_Click(sender, e); @@ -4637,7 +4890,7 @@ private void toolStripMenuItemInsertQuantityset_Click(object sender, EventArgs e DocSchema docSchema = (DocSchema)tn.Tag; DocQuantitySet docPset = new DocQuantitySet(); docSchema.QuantitySets.Add(docPset); - this.treeView.SelectedNode = this.LoadNode(tn.Nodes[5], docPset, docPset.Name, true); + this.treeView.SelectedNode = this.LoadNode(tn.Nodes[6], docPset, docPset.Name, true); this.toolStripMenuItemEditRename_Click(sender, e); } @@ -4653,6 +4906,29 @@ private void toolStripMenuItemInsertQuantity_Click(object sender, EventArgs e) private void toolStripMenuItemInsertConceptRoot_Click(object sender, EventArgs e) { + if(this.treeView.SelectedNode.Tag is DocModelView) + { + DocModelView docView = (DocModelView)this.treeView.SelectedNode.Tag; + //DocEntity docEntity = (DocEntity)this.treeView.SelectedNode.Tag; + + // pick the entity + using (FormSelectEntity form = new FormSelectEntity(null, null, this.m_project, SelectDefinitionOptions.Entity)) + { + if (form.ShowDialog(this) == DialogResult.OK && form.SelectedEntity != null) + { + DocConceptRoot docConceptRoot = new DocConceptRoot(); + docConceptRoot.ApplicableEntity = form.SelectedEntity as DocEntity; + docView.ConceptRoots.Add(docConceptRoot); + + // update tree + this.treeView.SelectedNode = this.LoadNode(this.treeView.SelectedNode, docConceptRoot, docConceptRoot.ToString(), false); + } + } + + } + + // old +#if false DocEntity docEntity = (DocEntity)this.treeView.SelectedNode.Tag; // pick the model view definition @@ -4670,7 +4946,7 @@ private void toolStripMenuItemInsertConceptRoot_Click(object sender, EventArgs e this.treeView.SelectedNode = this.LoadNode(this.treeView.SelectedNode, docConceptRoot, docView.Name, false); } } - +#endif } @@ -4694,14 +4970,17 @@ private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) // swap out instances such that constructors go to different cache this.m_instances = new Dictionary(); this.m_lastid = 0; + this.m_loading = true; DocumentationISO.Generate(this.m_project, path, this.m_instances, mapEntity, mapSchema, this.m_publications, this.backgroundWorkerGenerate, this.m_formProgress); + this.m_loading = false; + // launch the content foreach (DocPublication docPub in this.m_publications) { string relpath = path + @"\" + DocumentationISO.MakeLinkName(docPub); - System.Diagnostics.Process.Start(relpath + @"\index.htm"); + System.Diagnostics.Process.Start(relpath + @"\html\index.htm"); } } catch (Exception ex) @@ -4773,7 +5052,7 @@ private void toolStripMenuItemExportFolder_Click(object sender, EventArgs e) { foreach (DocPropertySet docPset in docSchema.PropertySets) { - PropertySetDef psd = Program.ExportPsd(docPset, mapPropEnum); + PropertySetDef psd = Program.ExportPsd(docPset, mapPropEnum, this.m_project); string filename = System.IO.Path.Combine(this.folderBrowserDialog.SelectedPath, docPset.Name + ".xml"); using (FormatXML format = new FormatXML(filename, typeof(PropertySetDef)))//, PropertySetDef.DefaultNamespace)) { @@ -4784,7 +5063,7 @@ private void toolStripMenuItemExportFolder_Click(object sender, EventArgs e) foreach (DocQuantitySet docQset in docSchema.QuantitySets) { - QtoSetDef qto = Program.ExportQto(docQset); + QtoSetDef qto = Program.ExportQto(docQset, this.m_project); string filename = System.IO.Path.Combine(this.folderBrowserDialog.SelectedPath, docQset.Name + ".xml"); using (FormatXML format = new FormatXML(filename, typeof(QtoSetDef), QtoSetDef.DefaultNamespace)) { @@ -4804,25 +5083,60 @@ private void toolStripMenuItemExportFolder_Click(object sender, EventArgs e) private void toolStripMenuItemInsertExample_Click(object sender, EventArgs e) { - DocExample docExample = new DocExample(); - - if (this.treeView.SelectedNode.Tag is DocExample) + // new: support multiple example files + DialogResult res = this.openFileDialogExamples.ShowDialog(this); + if (res == System.Windows.Forms.DialogResult.OK) { - DocExample docParent = (DocExample)this.treeView.SelectedNode.Tag; - docParent.Examples.Add(docExample); + // generate linked examples + foreach(string path in this.openFileDialogExamples.FileNames) + { + DocExample docExample = new DocExample(); + docExample.Name = System.IO.Path.GetFileNameWithoutExtension(path); + docExample.Path = path; - TreeNode tn = LoadNode(this.treeView.SelectedNode, docExample, docExample.Name, true); - this.treeView.SelectedNode = tn; + if (this.treeView.SelectedNode.Tag is DocExample) + { + DocExample docParent = (DocExample)this.treeView.SelectedNode.Tag; + docParent.Examples.Add(docExample); + + // include model views from parent example + foreach(DocModelView docView in docParent.Views) + { + docExample.Views.Add(docView); + } + + LoadNode(this.treeView.SelectedNode, docExample, docExample.Name, true); + } + else + { + this.m_project.Examples.Add(docExample); + LoadNode(this.treeView.Nodes[12], docExample, docExample.Name, true); + } + + } } else { - // top-level - this.m_project.Examples.Add(docExample); + DocExample docExample = new DocExample(); - TreeNode tn = LoadNode(this.treeView.Nodes[12], docExample, docExample.Name, true); - this.treeView.SelectedNode = tn; + if (this.treeView.SelectedNode.Tag is DocExample) + { + DocExample docParent = (DocExample)this.treeView.SelectedNode.Tag; + docParent.Examples.Add(docExample); + + TreeNode tn = LoadNode(this.treeView.SelectedNode, docExample, docExample.Name, true); + this.treeView.SelectedNode = tn; + } + else + { + // top-level + this.m_project.Examples.Add(docExample); + + TreeNode tn = LoadNode(this.treeView.Nodes[12], docExample, docExample.Name, true); + this.treeView.SelectedNode = tn; + } + this.toolStripMenuItemEditRename_Click(sender, e); } - this.toolStripMenuItemEditRename_Click(sender, e); this.m_modified = true; } @@ -5169,6 +5483,7 @@ private void toolStripMenuItemPublish_Click(object sender, EventArgs e) { using (FormPublish form = new FormPublish()) { + form.Project = this.m_project; form.LocalPath = this.m_file; if (this.m_server != null) { @@ -5772,18 +6087,8 @@ private void ValidateConcept(DocTemplateUsage docUsage, DocModelView docView, Do DocModelRule[] parameterrules = docUsage.Definition.GetParameterRules(); Dictionary conditions = new Dictionary(); - if (docUsage.Definition.Name.Contains("-086")) - { - this.ToString(); - } - foreach (SEntity ent in list) { - if(docUsage.Definition.Name.Contains("-077") && ent.GetType().Name.Equals("IfcWindow")) - { - this.ToString(); - } - object[] args = new object[0]; if (parameterrules != null && parameterrules.Length > 0) { @@ -6385,11 +6690,6 @@ private void UpdateTreeValidationNode(TreeNode tn) DocEntity docEntity = (DocEntity)tnTest.Parent.Tag; DocSchema docSchema = this.m_project.GetSchemaOfDefinition(docEntity); - if (docUsage.Definition.Name.Contains("053") && docEntity.Name.Equals("IfcWall")) - { - this.ToString(); - } - if (docSchema != null && this.m_formatTest != null) { string typename = docSchema.Name + "." + docEntity.Name; @@ -6457,10 +6757,14 @@ private void toolStripMenuItemToolsSourceCode_Click(object sender, EventArgs e) DialogResult res = form.ShowDialog(); if (res == System.Windows.Forms.DialogResult.OK) { + Dictionary mapEntity = new Dictionary(); + Dictionary mapSchema = new Dictionary(); + BuildMaps(mapEntity, mapSchema); + switch (form.Language) { case "C#": - FormatCSC.GenerateCode(this.m_project, form.Path); + FormatCSC.GenerateCode(this.m_project, form.Path, mapEntity); break; case "Java": @@ -6664,7 +6968,7 @@ private void toolStripMenuItemInsertAttribute_Click(object sender, EventArgs e) if (docTargetSchemaRef == null) { docTargetSchemaRef = new DocSchemaRef(); - docTargetSchemaRef.Name = docTargetSchema.Name; + docTargetSchemaRef.Name = docTargetSchema.Name.ToUpper(); docSchema.SchemaRefs.Add(docTargetSchemaRef); } @@ -6830,7 +7134,7 @@ private void toolStripMenuItemInsertPropertyEnumeration_Click(object sender, Eve DocSchema docSchema = (DocSchema)tn.Tag; DocPropertyEnumeration docType = new DocPropertyEnumeration(); docSchema.PropertyEnums.Add(docType); - this.treeView.SelectedNode = this.LoadNode(tn.Nodes[4], docType, null, true); + this.treeView.SelectedNode = this.LoadNode(tn.Nodes[5], docType, null, true); toolStripMenuItemEditRename_Click(this, e); } } @@ -6884,6 +7188,16 @@ private void ctlExpressG_LinkOperation(object sender, EventArgs e) { if (tree.Count > 0 && tree[0].Definition == null) { + // prune the tree from bogus definitions not linked propertly (due to old bug in importing vex files) + // also prevent duplicates + for (int iLine = tree[0].Tree.Count - 1; iLine >= 0; iLine--) + { + if (tree[0].Tree[iLine].Definition == null || tree[0].Tree[iLine].Definition == docDefinition) + { + tree[0].Tree.RemoveAt(iLine); + } + } + // existing tree structure tree[0].Tree.Add(docLine); } @@ -7026,17 +7340,17 @@ private void treeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) { DocObject docObj = (DocObject)target; -#if false - if (String.IsNullOrEmpty(e.Label)) +//#if false + if (e.Label == null) { - docObj.Name = null; - e.Node.Text = docObj.ToString(); +// docObj.Name = null; +// e.Node.Text = docObj.ToString(); e.CancelEdit = true; return; } -#endif +//#endif bool unique = true; - if(target is DocProperty || target is DocQuantity || target is DocWhereRule || target is DocUniqueRule || target is DocTemplateUsage) + if(target is DocProperty || target is DocQuantity || target is DocPropertyConstant || target is DocConstant || target is DocWhereRule || target is DocUniqueRule || target is DocTemplateUsage || target is DocAttribute) { unique = false; } @@ -7068,6 +7382,23 @@ private void treeView_AfterLabelEdit(object sender, NodeLabelEditEventArgs e) this.m_mapTree.Remove(oldkey); } } + + if(docObj is DocSchema) + { + this.m_project.Rename((DocSchema)docObj, null, null, e.Label); + } + else if (docObj is DocEntity || docObj is DocType) + { + DocSchema docSchema = (DocSchema)this.treeView.SelectedNode.Parent.Parent.Tag; + this.m_project.Rename(docSchema, (DocDefinition)docObj, null, e.Label); + } + else if(docObj is DocAttribute) + { + DocSchema docSchema = (DocSchema)this.treeView.SelectedNode.Parent.Parent.Parent.Tag; + DocEntity docEntity = (DocEntity)this.treeView.SelectedNode.Parent.Tag; + this.m_project.Rename(docSchema, docEntity, (DocAttribute)docObj, e.Label); + } + docObj.Name = e.Label; e.Node.Text = docObj.ToString(); e.CancelEdit = true; // prevent from updating to other text @@ -7340,12 +7671,16 @@ private void SetView(int view) this.toolStripButtonViewDiagram.Checked = (view == 3); this.panelDiagram.Visible = (view == 3); - this.toolStripMenuItemModeSelect.Enabled = (view == 3); - this.toolStripMenuItemModeMove.Enabled = (view == 3); - this.toolStripMenuItemModeLink.Enabled = (view == 3); - this.toolStripButtonModeSelect.Enabled = (view == 3); - this.toolStripButtonModeMove.Enabled = (view == 3); - this.toolStripButtonModeLink.Enabled = (view == 3); + this.toolStripMenuItemViewRequirement.Checked = (view == 4); + this.toolStripButtonViewRequirement.Checked = (view == 4); + this.ctlCheckGrid.Visible = (view == 4); + + this.toolStripMenuItemModeSelect.Enabled = (view >= 3); + this.toolStripMenuItemModeMove.Enabled = (view >= 3); + this.toolStripMenuItemModeLink.Enabled = (view >= 3); + this.toolStripButtonModeSelect.Enabled = (view >= 3); + this.toolStripButtonModeMove.Enabled = (view >= 3); + this.toolStripButtonModeLink.Enabled = (view >= 3); } private void toolStripMenuItemViewWeb_Click(object sender, EventArgs e) @@ -7363,6 +7698,12 @@ private void toolStripMenuItemViewDiagram_Click(object sender, EventArgs e) SetView(3); } + private void toolStripMenuItemViewRequirement_Click(object sender, EventArgs e) + { + SetView(4); + } + + private void SetMode(int mode) { DocObject docobj = this.treeView.SelectedNode.Tag as DocObject; @@ -7543,6 +7884,32 @@ private DocDefinition CreateLink(DocDefinition target, DocPoint docPoint) /// If true, redirects even if on same page; if false and on same page, then doesn't redirect private void RedirectReference(DocSchema docSchema, DocDefinition docOld, DocDefinition docNew, bool force) { + foreach(DocSchemaRef docSchemaRef in docSchema.SchemaRefs) + { + foreach(DocDefinitionRef docDefRef in docSchemaRef.Definitions) + { + if (force || (docDefRef.DiagramNumber != docOld.DiagramNumber)) + { + foreach (DocLine docLine in docDefRef.Tree) + { + if (docLine.Definition == docOld) + { + docLine.Definition = CreateLink(docNew, docLine.DiagramLine[0]); + this.ctlExpressG.LayoutDefinition(docDefRef); + } + foreach (DocLine docNode in docLine.Tree) + { + if (docNode.Definition == docOld) + { + docNode.Definition = CreateLink(docNew, docLine.DiagramLine[0]); + this.ctlExpressG.LayoutDefinition(docDefRef); + } + } + } + } + } + } + // find reference to each source and redirect to target definition foreach (DocEntity docEntity in docSchema.Entities) { @@ -7641,7 +8008,7 @@ private void toolStripMenuItemDiagramFormatPageRef_Click(object sender, EventArg docPageTarget.Delete(); // remove from tree - tnSchema.Nodes[7].Nodes[index].Remove(); + ////tnSchema.Nodes[7].Nodes[index].Remove(); bCreate = false; break; @@ -7759,7 +8126,7 @@ private void toolStripMenuItemInsertReference_Click(object sender, EventArgs e) targetschemaref = docSchemaRef; int index = sourceschema.SchemaRefs.IndexOf(docSchemaRef); - tnTargetSchema = this.treeView.SelectedNode.Nodes[6].Nodes[index]; + tnTargetSchema = this.treeView.SelectedNode.Nodes[7].Nodes[index]; break; } } @@ -7769,7 +8136,7 @@ private void toolStripMenuItemInsertReference_Click(object sender, EventArgs e) targetschemaref = new DocSchemaRef(); targetschemaref.Name = targetschema.Name.ToUpper(); sourceschema.SchemaRefs.Add(targetschemaref); - tnTargetSchema = LoadNode(this.treeView.SelectedNode.Nodes[6], targetschemaref, targetschemaref.Name, false); + tnTargetSchema = LoadNode(this.treeView.SelectedNode.Nodes[7], targetschemaref, targetschemaref.Name, false); } // add definition reference @@ -8061,9 +8428,9 @@ private void ctlConcept_MouseDoubleClick(object sender, MouseEventArgs e) // if link mode, insert a rule if (this.ctlExpressG.Mode == ToolMode.Select) { - if (this.ctlConcept.Selection != null) + if (this.ctlConcept.Selection is DocModelRule) { - using (FormRule form = new FormRule(this.ctlConcept.Selection, this.m_project, this.ctlConcept.Template)) + using (FormRule form = new FormRule((DocModelRule)this.ctlConcept.Selection, this.m_project, this.ctlConcept.Template)) { DialogResult res = form.ShowDialog(this); if (res == System.Windows.Forms.DialogResult.OK) @@ -8085,6 +8452,7 @@ private void ctlConcept_MouseDoubleClick(object sender, MouseEventArgs e) private void ctlConcept_SelectionChanged(object sender, EventArgs e) { + this.ctlProperties.SelectedRule = this.ctlConcept.Selection; this.ctlProperties.SelectedAttribute = this.ctlConcept.CurrentAttribute; } @@ -8184,14 +8552,30 @@ private void ctlCheckGrid_SelectionChanged(object sender, EventArgs e) } } - private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocTemplateDefinition docTemplatePset, DocPropertySet[] psets) + private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocPropertySet[] psets) { + DocTemplateDefinition docTemplatePsetObject = this.LoadTemplate(guidTemplatePsetObject); + DocTemplateDefinition docTemplatePsetProfile = this.LoadTemplate(guidTemplatePsetProfile); + DocTemplateDefinition docTemplatePsetMaterial = this.LoadTemplate(guidTemplatePsetMaterial); + + DocTemplateDefinition docTemplate = docTemplatePsetObject; + if (docRoot.ApplicableEntity.Name.Equals("IfcMaterial")) + { + docTemplate = docTemplatePsetMaterial; + } + else if (docRoot.ApplicableEntity.Name.Equals("IfcProfileDef") || + docRoot.ApplicableEntity.Name.Equals("IfcArbitraryClosedProfileDef") || + docRoot.ApplicableEntity.Name.Equals("IfcArbitraryClosedProfileDefWithVoids")) + { + docTemplate = docTemplatePsetProfile; + } + DocTemplateUsage docConcept = null; // get any existing concept for psets foreach (DocTemplateUsage docExistConcept in docRoot.Concepts) { - if (docExistConcept.Definition == docTemplatePset) + if (docExistConcept.Definition == docTemplate) { docConcept = docExistConcept; break; @@ -8203,7 +8587,7 @@ private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocTemplateDefi if (docConcept == null) { docConcept = new DocTemplateUsage(); - docConcept.Definition = docTemplatePset; + docConcept.Definition = docTemplate; docRoot.Concepts.Add(docConcept); LoadNode(this.treeView.SelectedNode, docConcept, docConcept.ToString(), false); @@ -8223,7 +8607,7 @@ private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocTemplateDefi { // add new, in order DocTemplateItem docItemPset = new DocTemplateItem(); - docItemPset.RuleParameters = "Name=" + docPset.Name + ";"; + docItemPset.RuleParameters = "PsetName=" + docPset.Name + ";"; docConcept.Items.Add(docItemPset); //... predefined type @@ -8237,29 +8621,40 @@ private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocTemplateDefi switch (docProp.PropertyType) { case DocPropertyTemplateTypeEnum.P_SINGLEVALUE: - docInnerTemplate = this.m_project.GetTemplate(new Guid("6655f6d0-29a8-47b8-8f3d-c9fce9c9a620")); + docInnerTemplate = this.m_project.GetTemplate(guidTemplatePropertySingle); break; case DocPropertyTemplateTypeEnum.P_BOUNDEDVALUE: - docInnerTemplate = this.m_project.GetTemplate(new Guid("3d67a2d2-761d-44d9-a09e-b7fbb1fa5632")); + docInnerTemplate = this.m_project.GetTemplate(guidTemplatePropertyBounded); break; case DocPropertyTemplateTypeEnum.P_ENUMERATEDVALUE: - docInnerTemplate = this.m_project.GetTemplate(new Guid("c148a099-c351-43a8-9266-5f3de0b45a95")); - suffix = "Reference=" + docProp.SecondaryDataType.Substring(0, docProp.SecondaryDataType.IndexOf(':')); + docInnerTemplate = this.m_project.GetTemplate(guidTemplatePropertyEnumerated); + if(docProp.SecondaryDataType != null) + { + int indexcolon = docProp.SecondaryDataType.IndexOf(':'); + if (indexcolon > 0) + { + suffix = "Reference=" + docProp.SecondaryDataType.Substring(0, indexcolon); + } + else + { + suffix = "Reference=" + docProp.SecondaryDataType; + } + } break; case DocPropertyTemplateTypeEnum.P_LISTVALUE: - docInnerTemplate = this.m_project.GetTemplate(new Guid("8e10b688-9179-4e3a-8db2-6abcaafe952d")); + docInnerTemplate = this.m_project.GetTemplate(guidTemplatePropertyList); break; case DocPropertyTemplateTypeEnum.P_TABLEVALUE: - docInnerTemplate = this.m_project.GetTemplate(new Guid("35c947b0-6abc-4b13-8ec7-696ef2041721")); + docInnerTemplate = this.m_project.GetTemplate(guidTemplatePropertyTable); suffix = "Reference=" + docProp.SecondaryDataType; break; case DocPropertyTemplateTypeEnum.P_REFERENCEVALUE: - docInnerTemplate = this.m_project.GetTemplate(new Guid("e20bc116-889b-46cc-b193-31b3e2376a8e")); + docInnerTemplate = this.m_project.GetTemplate(guidTemplatePropertyReference); suffix = "Reference=" + docProp.SecondaryDataType; break; } @@ -8269,7 +8664,7 @@ private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocTemplateDefi order++; DocTemplateUsage docInnerConcept = docItemPset.RegisterParameterConcept("Properties", docInnerTemplate); DocTemplateItem docInnerItem = new DocTemplateItem(); - docInnerItem.RuleParameters = "Order=" + order + ";Name=" + docProp.Name + ";Value=" + docProp.PrimaryDataType + ";" + suffix; + docInnerItem.RuleParameters = "Order=" + order + ";PropertyName=" + docProp.Name + ";Value=" + docProp.PrimaryDataType + ";" + suffix; docInnerConcept.Items.Add(docInnerItem); } } @@ -8278,71 +8673,100 @@ private void BuildConceptForPropertySets(DocConceptRoot docRoot, DocTemplateDefi } } - private void toolStripMenuItemEditBuildConcepts_Click(object sender, EventArgs e) + private void BuildConceptForQuantitySets(DocConceptRoot docRoot, DocTemplateDefinition docTemplatePset, DocQuantitySet[] psets) { - DocTemplateDefinition docTemplatePset = this.m_project.GetTemplate(new Guid("f74255a6-0c0e-4f31-84ad-24981db62461")); - - // also check for new template additions - DocTemplateDefinition docTemplatePropertyReference = this.m_project.GetTemplate(new Guid("e20bc116-889b-46cc-b193-31b3e2376a8e")); + DocTemplateUsage docConcept = null; - if (docTemplatePset == null || docTemplatePropertyReference == null) + // get any existing concept for psets + foreach (DocTemplateUsage docExistConcept in docRoot.Concepts) { - // import it - string filepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\defaults.mvdxml"; - this.ImportMVD(filepath); - docTemplatePset = this.m_project.GetTemplate(new Guid("f74255a6-0c0e-4f31-84ad-24981db62461")); - if(docTemplatePset == null) + if (docExistConcept.Definition == docTemplatePset) { - MessageBox.Show(this, "The required file information is missing. You may need to re-download the application from www.buildingsmart-tech.org."); - return; + docConcept = docExistConcept; + break; } } - // select property sets within dialog - DocConceptRoot docRoot = null; - DocEntity docEntity = null; // all properties - if(this.treeView.SelectedNode.Tag is DocConceptRoot) + if (psets.Length > 0) { - docRoot = (DocConceptRoot)this.treeView.SelectedNode.Tag; - docEntity = docRoot.ApplicableEntity; - using (FormSelectProperty form = new FormSelectProperty(docEntity, this.m_project, true)) + if (docConcept == null) { - if (form.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + docConcept = new DocTemplateUsage(); + docConcept.Definition = docTemplatePset; + docRoot.Concepts.Add(docConcept); + + TreeNode tnEntity = this.m_mapTree[docRoot.ApplicableEntity.Name.ToLower()]; + foreach(TreeNode tnSub in tnEntity.Nodes) { - this.BuildConceptForPropertySets(docRoot, docTemplatePset, form.IncludedPropertySets); + if(tnSub.Tag == docRoot) + { + LoadNode(tnSub, docConcept, docConcept.ToString(), false); + } } } - } - else if (this.treeView.SelectedNode.Tag is DocModelView) - { - // all entities - DocModelView docView = (DocModelView)this.treeView.SelectedNode.Tag; - foreach (DocConceptRoot docEachRoot in docView.ConceptRoots) + + // remove old listings + for (int iExist = docConcept.Items.Count - 1; iExist >= 0; iExist--) { - docEntity = docEachRoot.ApplicableEntity; + docConcept.Items[iExist].Delete(); + docConcept.Items.RemoveAt(iExist); + } - // find all property sets directly linked to object - List psets = new List(); - foreach(DocSection docSection in this.m_project.Sections) + foreach (DocQuantitySet docPset in psets) + { { - foreach(DocSchema docSchema in docSection.Schemas) + // add new, in order + DocTemplateItem docItemPset = new DocTemplateItem(); + docItemPset.RuleParameters = "QsetName=" + docPset.Name + ";"; + docConcept.Items.Add(docItemPset); + + //... predefined type + + //... properties... + int order = 0; + foreach (DocQuantity docProp in docPset.Quantities) { - foreach(DocPropertySet docPset in docSchema.PropertySets) + DocTemplateDefinition docInnerTemplate = null; + string suffix = String.Empty; + switch (docProp.QuantityType) { - if ((docPset.PropertySetType == "PSET_OCCURRENCEDRIVEN" || - docPset.PropertySetType == "PSET_TYPEDRIVENOVERRIDE") && - !String.IsNullOrEmpty(docPset.ApplicableType) && docPset.ApplicableType.Equals(docEntity.Name)) - { - psets.Add(docPset); - } + case DocQuantityTemplateTypeEnum.Q_LENGTH: + docInnerTemplate = this.m_project.GetTemplate(new Guid("dd8678e1-e300-4f70-9d63-e539db4bd11c")); + break; + + case DocQuantityTemplateTypeEnum.Q_AREA: + docInnerTemplate = this.m_project.GetTemplate(new Guid("65ac4747-6eff-437e-94e2-643fd4e3bf86")); + break; + + case DocQuantityTemplateTypeEnum.Q_VOLUME: + docInnerTemplate = this.m_project.GetTemplate(new Guid("6491a3b0-b7e9-412a-8226-bcd91c2b0b0e")); + break; + + case DocQuantityTemplateTypeEnum.Q_WEIGHT: + docInnerTemplate = this.m_project.GetTemplate(new Guid("e1016e56-3c89-4f42-9679-07e1db3c0afb")); + break; + + case DocQuantityTemplateTypeEnum.Q_COUNT: + docInnerTemplate = this.m_project.GetTemplate(new Guid("8aaeff32-572c-4f6a-ac64-e2151663cbf1")); + break; + + case DocQuantityTemplateTypeEnum.Q_TIME: + docInnerTemplate = this.m_project.GetTemplate(new Guid("43c4c050-04de-4b0f-9e43-708bd98201a8")); + break; + } + + if (docInnerTemplate != null) + { + order++; + DocTemplateUsage docInnerConcept = docItemPset.RegisterParameterConcept("Quantities", docInnerTemplate); + DocTemplateItem docInnerItem = new DocTemplateItem(); + docInnerItem.RuleParameters = "Order=" + order + ";QuantityName=" + docProp.Name + ";"; + docInnerConcept.Items.Add(docInnerItem); } } } - - this.BuildConceptForPropertySets(docEachRoot, docTemplatePset, psets.ToArray()); } } - } private void ctlProperties_RuleContentChanged(object sender, EventArgs e) @@ -8755,19 +9179,13 @@ private void toolStripMenuItemStyleUML_Click(object sender, EventArgs e) this.toolStripMenuItemStyleUML.Checked = true; } - private void toolStripMenuItemDictionaryUpload_Click(object sender, EventArgs e) - { - //DataDictionary.Upload(this.m_project); - - } - private void toolStripMenuItemToolsConvert_Click(object sender, EventArgs e) { using(OpenFileDialog dlgImport = new OpenFileDialog()) { dlgImport.Title = "Convert [Step 1 of 2]: Choose the input file"; dlgImport.Filter = "IFC-SPF (*.ifc)|*.ifc"; - if (dlgImport.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + if(dlgImport.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { using(SaveFileDialog dlgExport = new SaveFileDialog()) { @@ -8776,10 +9194,9 @@ private void toolStripMenuItemToolsConvert_Click(object sender, EventArgs e) "IFC-RDF (*.ttl)|*.ttl|" + "IFC-XML (*.ifcxml)|*.ifcxml"; - dlgExport.FilterIndex = 2; dlgExport.Title = "Convert [Step 2 of 2]: Specify the output file and format"; dlgExport.FileName = System.IO.Path.GetFileNameWithoutExtension(dlgImport.FileName); - if (dlgExport.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + if(dlgExport.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { //todo: run in background, show progress @@ -8832,10 +9249,11 @@ private void toolStripMenuItemToolsConvert_Click(object sender, EventArgs e) } //TODO: use schema according to source file, look up publication... + + List xsdFormatBase = this.m_project.BuildXsdFormatList(); - string xmlns = "http://www.buildingsmart-tech.org/ifcXML/IFC4/final"; - string code = "IFC4";//... - string ifcowlns = "http://ifcowl.openbimstandards.org/IFC4_ADD1"; + string schemacode = this.m_project.GetSchemaIdentifier(); + string schemauri = this.m_project.GetSchemaURI(null); try { @@ -8843,15 +9261,15 @@ private void toolStripMenuItemToolsConvert_Click(object sender, EventArgs e) switch (dlgExport.FilterIndex) { case 1: - formatter = new FormatJSN(xsdFormatBase, xmlns, code); + formatter = new FormatJSN(xsdFormatBase, schemauri, schemacode); break; case 2: - formatter = new FormatTTL(new System.IO.MemoryStream(), ifcowlns); + formatter = new FormatTTL(new System.IO.MemoryStream(), schemauri); break; case 3: - formatter = new FormatSML(new System.IO.MemoryStream(), xsdFormatBase, xmlns, code); + formatter = new FormatSML(new System.IO.MemoryStream(), xsdFormatBase, schemauri, schemacode); break; } @@ -8859,7 +9277,6 @@ private void toolStripMenuItemToolsConvert_Click(object sender, EventArgs e) { string content = formatter.FormatData(this.m_project, null, null, mapEntity, instances, rootproject, false); - System.IO.File.WriteAllText(dlgExport.FileName, ""); using (System.IO.FileStream filestream = System.IO.File.OpenWrite(dlgExport.FileName)) { System.IO.TextWriter writer = new System.IO.StreamWriter(filestream); @@ -8880,6 +9297,142 @@ private void toolStripMenuItemToolsConvert_Click(object sender, EventArgs e) } //... } + + readonly Guid guidTemplateQset = new Guid("6652398e-6579-4460-8cb4-26295acfacc7"); + readonly Guid guidTemplatePsetObject = new Guid("f74255a6-0c0e-4f31-84ad-24981db62461"); + readonly Guid guidTemplatePsetMaterial = new Guid("f3269e50-59bd-4660-a1df-68e93c8ba30f"); + readonly Guid guidTemplatePsetProfile = new Guid("34ff8134-b8da-4670-9839-f24b362d6ecf"); + + readonly Guid guidTemplatePropertySingle = new Guid("6655f6d0-29a8-47b8-8f3d-c9fce9c9a620"); + readonly Guid guidTemplatePropertyBounded = new Guid("3d67a2d2-761d-44d9-a09e-b7fbb1fa5632"); + readonly Guid guidTemplatePropertyEnumerated = new Guid("c148a099-c351-43a8-9266-5f3de0b45a95"); + readonly Guid guidTemplatePropertyList = new Guid("8e10b688-9179-4e3a-8db2-6abcaafe952d"); + readonly Guid guidTemplatePropertyTable = new Guid("35c947b0-6abc-4b13-8ec7-696ef2041721"); + readonly Guid guidTemplatePropertyReference = new Guid("e20bc116-889b-46cc-b193-31b3e2376a8e"); + + private DocTemplateDefinition LoadTemplate(Guid guidTemplate) + { + DocTemplateDefinition docTemplatePset = this.m_project.GetTemplate(guidTemplate); + + if (docTemplatePset == null || docTemplatePset.Version != "10.9") + { + // import it + string filepath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\defaults.mvdxml"; + this.ImportMVD(filepath); + docTemplatePset = this.m_project.GetTemplate(guidTemplate); + docTemplatePset.Version = "10.9"; + if (docTemplatePset == null) + { + MessageBox.Show(this, "The required file information is missing. You may need to re-download the application from www.buildingsmart-tech.org."); + } + } + + return docTemplatePset; + } + + private void toolStripMenuItemInsertConceptPset_Click(object sender, EventArgs e) + { + // select property sets within dialog + DocConceptRoot docRoot = null; + DocEntity docEntity = null; // all properties + if (this.treeView.SelectedNode.Tag is DocConceptRoot) + { + docRoot = (DocConceptRoot)this.treeView.SelectedNode.Tag; + docEntity = docRoot.ApplicableEntity; + using (FormSelectProperty form = new FormSelectProperty(docEntity, this.m_project, true)) + { + if (form.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + { + this.BuildConceptForPropertySets(docRoot, form.IncludedPropertySets); + } + } + } + else if (this.treeView.SelectedNode.Tag is DocModelView) + { + // all entities + DocModelView docView = (DocModelView)this.treeView.SelectedNode.Tag; + foreach (DocConceptRoot docEachRoot in docView.ConceptRoots) + { + docEntity = docEachRoot.ApplicableEntity; + + // find all property sets directly linked to object + List psets = new List(); + foreach (DocSection docSection in this.m_project.Sections) + { + foreach (DocSchema docSchema in docSection.Schemas) + { + foreach (DocPropertySet docPset in docSchema.PropertySets) + { + if ((docPset.PropertySetType == "PSET_OCCURRENCEDRIVEN" || + docPset.PropertySetType == "PSET_TYPEDRIVENOVERRIDE") && + !String.IsNullOrEmpty(docPset.ApplicableType) && docPset.ApplicableType.Equals(docEntity.Name)) + { + psets.Add(docPset); + } + } + } + } + + this.BuildConceptForPropertySets(docEachRoot, psets.ToArray()); + } + } + + } + + private void toolStripMenuItemInsertConceptQset_Click(object sender, EventArgs e) + { + DocTemplateDefinition docTemplatePset = this.LoadTemplate(guidTemplateQset); + + // select property sets within dialog + DocConceptRoot docRoot = null; + DocEntity docEntity = null; // all properties + if (this.treeView.SelectedNode.Tag is DocConceptRoot) + { + docRoot = (DocConceptRoot)this.treeView.SelectedNode.Tag; + docEntity = docRoot.ApplicableEntity; + using (FormSelectQuantity form = new FormSelectQuantity(docEntity, this.m_project, true)) + { + if (form.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) + { + this.BuildConceptForQuantitySets(docRoot, docTemplatePset, form.IncludedQuantitySets); + } + } + } + else if (this.treeView.SelectedNode.Tag is DocModelView) + { + // all entities + DocModelView docView = (DocModelView)this.treeView.SelectedNode.Tag; + foreach (DocConceptRoot docEachRoot in docView.ConceptRoots) + { + docEntity = docEachRoot.ApplicableEntity; + + // find all property sets directly linked to object + List psets = new List(); + foreach (DocSection docSection in this.m_project.Sections) + { + foreach (DocSchema docSchema in docSection.Schemas) + { + foreach (DocQuantitySet docPset in docSchema.QuantitySets) + { + if (!String.IsNullOrEmpty(docPset.ApplicableType) && docPset.ApplicableType.Equals(docEntity.Name)) + { + psets.Add(docPset); + } + } + } + } + + this.BuildConceptForQuantitySets(docEachRoot, docTemplatePset, psets.ToArray()); + } + } + + } + + private void ctlProperties_SchemaChanged(object sender, EventArgs e) + { + this.ctlExpressG.Redraw(); + } + } } diff --git a/FormEdit.ja-JP.resx b/FormEdit.ja-JP.resx new file mode 100644 index 00000000..8a68d612 --- /dev/null +++ b/FormEdit.ja-JP.resx @@ -0,0 +1,2601 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg + jwAAAk1TRnQBSQFMAgEBLwEAAfQBBQH0AQUBEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABwAMAAQEBAAEYBgABkBsAA/4D/AP2A/EG7wPxA/YD/AP+EgAD/gP8A/YD8QbvA/ED9gP8A/4SAAP+ + A/wD9gPxBu8D8QP2A/wD/j8AA/4D9gPiA8UDqwakA6sDxQPiA/YD/gwAA/4D9gPiA8UDqwakA6sDxQPi + A/YD/gwAA/4D9gPiA8UDqwakA6sDxQPiA/YD/jkAA/4D8wG2AcIBqwFqAaIBPgFQAa8BEAFQAa8BDwFQ + Aa8BDAFQAa8BCgFWAZIBKgFyAYQBZQOfA9ED8wP+BgAD/gPzAbIBwwHKAVUBpgHBAS8BtAHjATABtAHi + ATABsgHhATABsgHhAUEBlgGzAWsBhQGOA58D0QPzA/4GAAP+A/MBsQG0AcYBVAFiAa4BLQFAAb4BLQFE + AcYBLQFCAcIBKwE7AbUBPgFIAZMBawFuAYQDnwPRA/MD/jMAA/4D9gGOAbMBbQFQAbIBJAFSAbsBVgFS + Ab4BaQFSAb8BbQFSAb8BbQFSAb4BZwFRAbkBSAFQAbABFAFbAYsBOAOTA9ED9gb+A/YBgAG1AckBLwG3 + AecBKQHEAfUBJgHKAfwBJQHLAf0BJQHLAf0BJgHJAfsBKgHAAfABMAG0AeIBSwGNAaYDkwPRA/YG/gP2 + AYIBjAHEAS4BSAHOAS4BUAHdAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS4BUAHeAS0BQgHCAUoBUgGO + A5MD0QP2A/4wAAP8AZMBvAFvAVEBtwFAAVIBvgFqAVIBvwFtAVIBvwFtAVIBvwFtAVIBvwFtAVIBvwFt + AVIBvwFtAVIBvgFoAVABswEpAVoBiwE4A58D4gb8AYMBvQHSAS0BvgHuASYBygH8ASUBywH9ASUBywH9 + ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASYByQH7AS8BuAHnAUsBjQGjA58D4gb8AZABnAHQAS4BTQHW + AS8BVgHqAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS0BSAHOAUsBUwGS + A58D4gP8MAAB3gHmAdcBUQGzAS8BUgG/AWsBUgG/AW0BUgG/AW0BUgG/AW0BUgG/AW0BUgG/AW0BUgG/ + AW0BUgG/AW0BUgG/AW0BUgG+AWkBUAGyAR8BcgGEAWMDxQP2AdwB5gHqAS0BuAHoASYBygH8ASUBywH9 + ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASYBygH7AS8BtgHlAWsBhAGN + A8UD9gHcAd4B6gEuAU8B2wEvAVYB6wEvAVcB7AEvAVcB7AEvAVcB7AEvAVcB7AEvAVcB7AEvAVcB7AEv + AVcB7AEvAVcB7AEvAVcB7AEuAUgBzQFrAXABiAPFA/YwAAGSAcMBdAFSAb0BZQFSAb8BbQFTAb8BbgFT + Ab8BbgFTAb8BbgFTAb8BbgFSAb8BbQFSAb8BbQFSAb8BbQFSAb8BbQFSAb8BbQFSAbsBWQFVAZIBKgOr + A/EBgwHDAdoBJwHJAfoBJQHLAf0BJwHLAf0BJwHLAf0BJwHLAf0BJgHLAf0BJQHLAf0BJQHLAf0BJQHL + Af0BJQHLAf0BJQHLAf0BKQHFAfYBQQGUAbEDqwPxAYMBlAHcATABVgHmATEBWQHsATEBWgHsATEBWgHs + ATABWQHsATABWAHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BUwHjAUABUQGkA6sD8TAA + AVABsgEqAVYBwAFwAVoBwgF0AVwBwwF2AV4BwwF4AV0BwwF3AVsBwgF2AVgBwQFzAVUBwAFwAVIBvwFt + AVIBvwFtAVIBvwFtAVIBvgFqAVABsQEdA6QD7wEtAbQB4gEtAcwB/QE0Ac4B/QE5Ac8B/QE7Ac8B/QE6 + Ac8B/QE3Ac4B/QExAc0B/QEqAcwB/QEmAcsB/QElAcsB/QElAcsB/QEmAcoB/AEvAbQB4wOkA+8BLwFS + AeIBNQFfAewBTwF1Ae8BaAGJAfIBaAGJAfIBZwGHAfIBZgGGAfEBZQGDAfEBYwGBAfEBYwGBAfEBYwGB + AfEBSQFsAe4BLwFXAewBLgFLAdMDpAPvMAABUAGzATIBYwHEAXwBaAHGAYEBbAHHAYQBbQHIAYUBbQHH + AYUBagHHAYMBZgHFAX8BYAHEAXkBWQHBAXQBVAHAAW8BUgG/AW0BUgG/AW0BUAGyASUDpAPvASwBtQHj + AUIB0AH9AUsB0QH9AVAB0gH9AVMB0wH9AVIB0gH9AU4B0gH9AUgB0QH9AT4BzwH9ATMBzQH9ASgBzAH9 + ASUBywH9ASUBywH9AS8BtQHkA6QD7wEvAVQB5QE+AWoB7wGgAbYB9xj/AZcBqwH2AS8BVwHsAS4BTwHa + A6QD7zAAAVABtAE0AXEByAGIAXcBywGOAXsBzAGSAX0BzQGUAXwBzAGTAXoBywGQAXUBygGMAW4ByAGG + AWUBxQF+AVwBwgF2AVQBwAFvAVIBvwFtAVABsgEpA6sD8QErAbQB4gFYAdMB/QFhAdUB/QFnAdYB/gFp + AdcB/gFoAdcB/gFkAdYB/QFeAdQB/QFUAdMB/QFGAdAB/QE3Ac4B/QEpAcwB/QElAcsB/QEuAbUB5AOr + A/EBLwFVAecBTAF2AfABpwG8AfgY/wGXAasB9gEvAVcB7AEuAVAB3gOrA/EwAAFQAbMBLwF8AcwBkwGG + Ac8BnAGLAdEBoQGNAdIBowGNAdIBogGJAdEBnwGDAc8BmgF7AcwBkgFyAckBiQFnAcYBgAFbAcIBdgFT + Ab8BbQFQAbIBJwPFA/YBKwGvAd4BZwHWAf4BdQHZAf4BfAHbAf4BfwHbAf4BfgHbAf4BegHaAf4BcgHY + Af4BZwHWAf4BWQHUAf0BSQHRAf0BNwHOAf0BKAHLAf0BLgGzAeEDxQP2AS8BVgHqAVgBgQHxAXUBmAH0 + AYwBqgH2AYsBqQH2AYcBpgH2AYIBoQH1AXsBmwH0AXMBlAHzAWwBjQHyAWcBhwHxAUoBbQHuAS8BVwHs + AS8BUgHgA8UD9jAAAZ0BywGAAXcBywGPAZUB1QGqAZwB1wGvAZ8B2AGyAZ4B2AGxAZkB1gGtAZIB1AGn + AYgB0AGeAX0BzQGUAXEByQGJAWUBxQF+AVcBwAFtAWoBoQFDA+ID/AGNAcQB2gFdAdUB/gGIAd4B/gGQ + AeAB/gGUAeEB/gGTAeEB/gGNAd8B/gGEAd0B/gF4AdoB/gFqAdcB/gFZAdMB/QFFAdAB/QEwAcsB+wFV + AZ0BuQPiA/wBjQGgAekBVgF9AfABdAGZAfQBdwGcAfUBdQGaAfUBbwGVAfQBZgGNAfMBWgGDAfIBTgF4 + AfABQwFuAe8BOAFkAe0BMgFcAe0BLwFWAekBVQFqAcAD4gP8MAAB6gHwAeUBVQG3AUEBoAHZAbIBrgHe + Ab4BsgHgAcEBsAHfAcABqwHdAbsBoQHZAbMBlQHVAakBiAHQAZ4BegHMAZEBawHHAYMBUQG1AToBtgHC + AasD9gP+AegB7wHyATEBswHhAZMB4gH+AaQB5gH+AakB5wH+AagB5wH+AaEB5QH+AZUB4gH+AYcB3gH+ + AXgB2QH+AWUB1gH+AU8B0gH9ASwBtgHkAbIBwQHGA/YD/gHoAesB9QE5AWAB7QGCAaUB9QGNAa4B9wGL + Aa0B9gGCAaUB9gF1AZoB9AFnAY4B8wFYAYIB8gFKAXUB8AE+AWkB7gE1AWAB7QEvAVYB5wGyAbYBygP2 + A/4zAAG6AdcBoQFkAcEBaQG5AeMBxgHFAecB0AHEAecBzwG7AeMByQGuAd4BvwGgAdkBsgGRAdMBpgF/ + Ac0BlgFYAb0BXQGPAbUBbwPzA/4GAAGwAc4B2wFAAcQB8AGvAekB/gG/Ae0B/gG9Ae0B/gG0AeoB/gGl + AeYB/gGVAeIB/gGDAdwB/gFsAdcB/gEyAcIB8QGCAa4BwAPzA/4GAAGgAbEB6wFEAWoB7gGiAb0B+QGm + AcEB+QGWAbYB+AGEAacB9gFyAZgB9AFhAYkB8wFQAXsB8QFCAW4B7wEzAVsB6gGAAZABzQPzA/45AAGt + AdEBjgFYAbkBRAGkAdwBtAHNAesB1wHKAekB1QG6AeMByAGkAdoBtQF+Ac0BlAFUAbcBQAGdAcABfwP2 + A/4MAAGhAcUB1AE0Aa8B2wGRAeQB/gHHAfAB/wHFAe8B/gGzAeoB/gGYAeMB/gFlAdcB/gEwAbMB4QGR + AbgByAP2A/4MAAGvAb0B7AFBAWcB7gGIAaQB9gGrAcUB+gGRAbEB9wF6AZ8B9QFnAY4B8wFJAXIB7wE1 + AV4B7AGDAZYB2gP2A/4/AAHqAfAB5QGdAcsBgAFQAbMBMAFQAbUBNwFQAbUBNwFQAbMBMAGSAcMBdAHe + AeYB1wP8A/4SAAHoAe4B8QGNAbsB0AEsAaEBzQErAaYB0wErAagB1QErAaYB0wGCAbkBzwHcAeQB5wP8 + A/4SAAHoAesB9QGNAaAB6QEvAVcB7AFJAW8B7wFDAWoB7gEvAVcB7AGDAZYB4wHcAd8B7AP8A/7/AF0A + LfYGACT2aQAD9gNCA/YDQgP2A0ID9gNCA/YDQgP2A0ID9gNCA/YGAAP2D0IB8QHvAfAMQgP2DwAb9hIA + J/YGAC32BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0IB8QHvAfAB8QHvAfAB8QHvAfADQgP2 + DwAD9glCA/YJQgP2EgAD9gZCA/YDQgP2A0ID9gNCA/YGQgP2BgAD9gNCIfYDQgP2BgAD9gNCAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0ID9g8AA/YDQgP2A0ID9gNC + A/YDQgP2EgAD9gNCG/YDQgP2BgAM9hVCDPYGAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgHx + Ae8B8AHxAe8B8AHxAe8B8ANCA/YPAAP2CUID9gNCA/YDQgP2EgAD9gNCA/YDQgP2A0ID9glCA/YDQgP2 + BgAD9gNCIfYDQgP2BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwA0ID9g8ACfYDQgP2A0ID9gNCA/YSAAn2A0ID9gNCA/YDQgP2A0IJ9gYADPYVQgz2BgAD9gHx + Ae8B8ANCAfEB7wHwA0IB8QHvAfADQgHxAe8B8AHxAe8B8AHxAe8B8ANCA/YPAAP2CUID9glCA/YYAAP2 + A0ID9gNCA/YDQgP2A0ID9gwAA/YDQiH2A0ID9gYAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YGABj2A0IV9gwAA/YJQgP2CUID9gwADPYJQgP2CUIM9gYA + A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YGAAP2 + A0ID9gNCA/YGAAn2AwAD9gNCA/YDQgP2DAAD9gNCA/YDQgP2A0ID9gNCA/YMAAP2A0IG9glCEvYDQgP2 + BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwDEID9gYAA/YDQgP2A0ID9hIAA/YDQgP2 + A0ID9gwAA/YJQgP2CUID9gwADPYJQgP2CUIM9gYAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AlCA4YD9QYAD/YSAA/2DAAb9gwAA/YDQiH2A0ID9gYAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AZCA4YD9QP4aQAt9gYAA/YVQgOcA/MD+mwAA/YDQgP2A0ID9gNCA/YDQgP2A0ID9gNC + A/YDQgP2BgAY9gPzA/xvAC32MAAD+APyEvYD8gPxA/wPACr2EgAD9APyDPYD8gP0GAAD9APyDPYD8gP0 + DAAD8gOGA0IDegOGDEIDkQPyDwAD9iRCA/YMAAP6A/MG9gPgBkID4Ab2A/MD+gwAA/oD8wb2A+AGQgP2 + A1kDyQPzA/oGAAP2A0IDswP2A0IDZAb2A7MDQhX2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgn2AwAD+gP1A6cDyQP2A6cGQgOcA/YDyQOn + A/UD+gYAA/oD9QOnA8kD9gOnBkID9gZCA3oD3gPyAwAD9gNCA6cD6wP2A2QDQgP2A6cDQgP2DEIG9gNC + AfEB7wHwAfEB7wHwA0IB2wHZAdoB8QHvAfAB8QHvAfAB2wHZAdoDQgHxAe8B8AHxAe8B8ANCA/YDQgP2 + AwAD8wOnBkIDZANNBkIDTQNkBkIDpwPzBgAD8wOnBkIDZANNBkID9glCA00DnAPzA/IDhgxCA4YDegNC + A4YB8wHyAfMB8QHvAfAB8QHvAfAB8QHvAfADQgb2A0IB8QHvAfADQgOGAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwA4YDQgHxAe8B8ANCA/YDQgP2A/QD9gPJHkIDyQP2BvQD9gPJEkID9glCA00DnAP2A/gD8hL2 + AfUB9AH1AfMB8gHzAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0IG9gNCAfEB7wHwA0IDhgHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AOGA0IB8QHvAfADQgP2A0ID9gPyBvYDZANCA00BxQHEAcUB8QHvAfAB8QHv + AfABxQHEAcUDTQNCA2QG9gbyBvYDZANCA00BxQHEAcUB8QHvAfAB8QHvAfAD9gZCA3oD3gP2A/UMAAP2 + A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgb2A0IB8QHv + AfAB8QHvAfADQgHbAdkB2gHxAe8B8AHxAe8B8AHbAdkB2gNCAfEB7wHwAfEB7wHwA0ID9gNCBvYD4AOn + A00DQgHFAcQBxQHxAe8B8AHQAs8B0ALPAfEB7wHwAcUBxAHFA0IDTQOnA+AG9gPgA5wDTQNCAcUBxAHF + AfEB7wHwAdACzwHQAs8D6wNZA8kM9gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8ANCBvYDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YDQgb2DEIB8QHvAfAB0ALPBkIB0ALPAfEB7wHwDEID9gPr + DEIB8QHvAfAB0ALPBkIDnAb2A2QGQgP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwA0IG9iRCA/YDQgb2DEIB8QHvAfAB0ALPBkIB0ALPAfEB7wHwDEID9gPr + DEIB8QHvAfAB0ALPBkIBuwG6AbsB8QHvAfAMQgP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0It9gNCBvYD4AOcA00DQgHFAcQBxQHxAe8B8AHQAs8B0ALP + AfEB7wHwAcUBxAHFA0IDTQOcA+AG9gPgA5wDTQNCAcUBxAHFAfEB7wHwAdACzwHQAs8B8QHvAfABxQHE + AcUDQgNNA5wD4AP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwA0ID9gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8ANCA/YD8gb2A2QDQgNNAcUBxAHFAfEB7wHwAfEB7wHwAcUBxAHFA00DQgNkBvYG8gb2A2QDQgNN + AcUBxAHFAfEB7wHwAfEB7wHwAcUBxAHFA00DQgNkBvYD8gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AxCA/YMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAMQgP2A/QD9gPJ + HkIDyQP2BvQD9gPJHkIDyQP2A/QMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAJQgOG + A/UMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAJQgOGA/UDAAPzA6cGQgNkA00GQgNN + A2QGQgOnA/MGAAPzA6cGQgNkA00GQgNNA2QGQgOnA/MPAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAGQgOGA/UD+AwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AZCA4YD9QP4 + AwAD+gP1A6cDyQP2A6cGQgOcA/YDyQOnA/UD+gYAA/oD9QOnA8kD9gOnBkIDnAP2A8kDpwP1A/oPAAP2 + FUIDnAPzA/oPAAP2FUIDnAPzA/oJAAP6A/MG9gPgBkID4Ab2A/MD+gwAA/oD8wb2A+AGQgPgBvYD8wP6 + EgAY9gPzA/wSABj2A/MD/BIAA/QD8gz2A/ID9BgAA/QD8gz2A/ID9HIADPYD9QP4rgAD9glCA4YD9QP4 + SAABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFxAYsBRQFpAYQBPwFiAX4BOgFcAXgBswHAActIAAP1 + A4YGQgOGA/YD9QP4RQABSQG4Ad8BgwHbAe8BeQHUAewBbwHPAeoBZAHIAecBWQHDAeUBTwG9AeIBRAG3 + AeABOQFaAXcbAAHIAb0BtQGIAXABXQGDAWoBWAF+AWUBUgF6AWABTgF1AVwBSAFxAVcBQwFtAVMBPgFq + AU8BOwFnAUsBNwG6Aa4BpAwAA/gD9QaGA/YGhgP1A/gPADD2AwABTgG8AeIBjgHgAfEBhQHbAe8BpgGM + AXoBmwGBAW4BlQF6AWcBWgHDAeUBUAG+AeMBPAFeAXobAAGvAZYBhwHpAeAB3AHjAdoB0wHeAdMBzAHa + AcwBxAHVAcUBvAHQAb4BtQHLAbgBrAHGAbEBpgHDAasBnwFoAU4BOQ8AA/gD9QP2A4YGQgOGA/UD+AwA + A/YqQgP2AwABUAG+AeMBmAHmAfQBjwHhAfIBhQHcAe8BfAHWAe0BcgHRAeoBZwHKAekBXAHFAeUBQAFi + AX0bAAGzAZoBiwHuAegB5QHpAeEB3AHjAdkB1AHfAdIBzAHaAcwBxAHVAcUBvAHQAb4BtQHMAbgBrQHG + AbEBpQFtAVMBPhIAA/gD9QOGCUIDhgP1A/gJAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgP2AwABUAG+AeMBnwHr + AfYBmQHmAfQBpwGLAXoBnAGBAW8BlQF6AWcBcwHRAesBaQHLAekBQwFmAYEBUgF5AZEBTAFxAYsBRQFp + AYQBPwFiAX4BOgFcAXgBswHAAcsJAAG3AZ4BkAHzAe8B7AHuAegB5AHoAeAB3AF+AWUBUgFuAVQBQAFj + AUgBMwHVAcUBvAHQAb4BtAHLAbgBrAFzAVoBRgYAFfYDhglCA4YD9QP4BgAD9gNCAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + A0ID9gMAAVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHyAYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGG + AW8BzwHqAWQByAHnAVkBwwHlAU8BvQHiAUQBtwHgATkBWgF3CQABvAGjAZYB+AH2AfQB8wHvAe0B7wHo + AeQB6QHgAdwB4wHZAdMB3wHTAcsB2gHMAcUB1QHFAbwB0AG+AbUBegFgAU4GAAP2EkIDswOGCUIDhgP1 + A/gDAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAB8QHvAfAB8QHvAfADQgP2AwABzwHtAfcBUAG+AeMBUAG+AeMBTwG9AeIBSQG4Ad4BQQGw + AdgBOAGpAdIBMQGiAcwBaQG/AdkBpgGMAXoBmwGBAW4BlQF6AWcBWgHDAeUBUAG+AeMBPAFeAXoJAAHB + AakBnQH8AvsB+AH2AvQB7wHsAX4BZgFSAW4BVAE/AWMBSAEzAd4B0wHMAdoBzAHEAdUBxQG8AYABaAFV + BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwA0IB8QHvAfAB8QHvAfAB9AHzAfQDhglCA4YD9QP4A/YDQgHx + Ae8B8AHxAe8B8BhCAfEB7wHwAfEB7wHwA0ID9hUAAVABvgHjAZgB5gH0AY8B4QHyAYUB3AHvAXwB1gHt + AXIB0QHqAWcBygHpAVwBxQHlAUABYgF9CQABxQGvAaMD/wH8AvsB+QH2AfUB9AHvAewB7gHnAeQB6QHh + AdsB5AHZAdMB3gHSAcwB2gHMAcUBiAFwAV0GAAP2A0IB8QHvAfADQgHxAe8B8ANCAfEB7wHwA0IB8QHv + AfADswOGCUIDhgP1A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YVAAFQAb4B4wGfAesB9gGZAeYB9AGnAYsBegGc + AYEBbwGVAXoBZwFzAdEB6wFpAcsB6QFDAWYBgQkAAckBtAGqBv8B/AH7AfoB+AH1AfQB8wHvAewB7gHn + AeUB6AHgAdwB4wHZAdQB3wHTAcwBjgF3AWYGAAP2BkIB8QHvAfAB8QHvAfADQgHxAe8B8ANCAfEB7wHw + A0ID9gOGBkIDhgP1A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YVAAFQAb4B4wGmAe0B9wGgAesB9QGZAecB9AGR + AeMB8gGJAd4B8QF/AdgB7gF1AdIB6wFHAWwBhgkAAeYB3QHYAckBtAGpAcQBrQGiAb8BqAGbAbsBogGT + AbUBnAGOAbIBmAGJAa0BlAGEAagBjwF/AaMBigF5AcgBvQG1BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHw + A0IB8QHvAfAB8QHvAfAB8QHvAfADQgP2A/UGhgP1A/gD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0ID9hUAAc8B7QH3 + AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHYATgBqQHSATEBogHMAakB0QHiMAAD9g9CAfEB7wHw + CUID9gP4BvUD+AMAA/YqQgP2YAAD9g9CAfEB7wHwCUID9gMABvgGADD2YAAD9htCA/afACH2PwAB6gHm + AeMBnAGFAXUBlgF/AW0BkAF3AWcBiQFwAV4BggFqAVcBfAFjAU8B6gHmAeMMAAH4Ae4B4wwAAZQBfAFs + AwABkwF8AWoDAAGRAXkBaAMAAY4BeAFmAwABjAF1AWIDAAGJAXABXwMAAYYBbQFbAwABggFpAVcVAAHk + AdUB1AHLAaIBnwG2AWcBaEIAAcIBqwGgAd4B0QHKAdoBzAHEAdYBxwG+AdIBwQG4Ac4BuwGyAcsBtwGr + AXsBYgFPCQAB+AHuAeMBmQEzAQAB+AHuAeMGAAGXAYEBcAH8AfgB9QH8AfYB8wH8AfQB8QH7AfIB7wH7 + AfEB7AH7Ae8B6gH5Ae0B5wH5AesB5QH5AekB4wH4AegB4AH3AeYB3QH3AeMB2wH2AeIB1wH1AeAB1RIA + A/0BywGfAZwB0QG6AbQB4gHmAd0BzQGnAaUBtgFnAWgSAAG3AaIBkwFjAUkBNQFjAUkBNQFjAUkBNQFj + AUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQMA + AcsBtwGsAeoB4wHfAdkBzgHIAVgBSwFBAdkBzgHIAdkBzgHIAc4BuwGyAYEBaAFVBgAB+AHuAeMBtQFj + ATUB2AGbAVsBmQEzAQAB+AHuAeMGAAH9AfoB+QHGAbYBrQGUAXwBbAG9AawBoQGTAXwBagG8AasBngGR + AXkBaAG6AagBmwGGAW4BWwH5AesB5AGqAZUBhgG6AaQBlgGLAXMBYQH2AeMB2gGGAW4BWwwAAegC2wG7 + AX0BegHRAboBtAHoAfYB6wHpAfkB7gHpAfkB7gHIAZkBlwG2AWcBaA8AAbcBogGTA/8BtwGiAZMBtwGi + AZMBtwGiAZMBtwGiAZMBtwGiAZIBtwGdAYwBtwGiAZMBtwGiAZMBtwGiAZMBtwGiAZMBtwGiAZMBYwFJ + ATUDAAHUAcMBuwHqAeMB3wFYAUsBQQFYAUsBQQFYAUsBQQHiAdcC0gHAAbgBhwFvAV0BlwGAAW8BlwGA + AW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQAB+AHuAeMBnQGIAXYB/gH8AfsBpQGPAX4BnwL+ + AZwB/QH+AZkB/QH+AZUC/gGSAf0B/gGOAf0B/gG3AaMBlgH6Ae4B6QHMAboBrgGDAv4BuAGjAZUB+AHm + Ad4JAAH5AvgBxgKXAcEBlAGQAeIB5gHdAeQB6wHhAcQBmQGUAbkBdQF0AcABwwHBAekB+QHuAcYBlQGU + AbYBZwFoDAABtwGiAZMD/wHFAUoBEAH9AYUBYgHUAV4BKwG2AVEBJAGiAUgBHQGzAWEBOAHkAcgBugHm + AdEBxgHmAdMByQHhAcoBvQG3AaIBkwFjAUkBNQMAAd0B0AHJAeoB4wHfAeoB4wHfAeoB4wHfAeoB4wHf + AeIB1wHSAdYBxwG+AY0BdQFjAZcBgAFvAwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEz + BAAD/gHKAbwBswGnAv4BpAL+AaAB/gH/AZ0C/gGZAv4BlgL+AYsBcwFhAfsB8QHtAbABmwKMAf0B/gGL + AXMBYQH5AeoB4wGLAXMBYQP/AeIC0AG4AXsBeQHTAcUBvgHpAfkB7gHXAccBwAHBAYMBgQHDAn0BwgF1 + AXYBugFuAW0BxwHMAckB6QH5Ae4BxQGUAZMBtgFnAWgJAAG3AaIBkwP/Ae4BzAG8AcoBWQEkAf0BqQGQ + AcsBZwE6AbQBXQExAdkBoAGGAe4B4gHbAe0B4QHaAeoB2QHQAeQBzwHEAbcBogGTAWMBSQE1AwAB6gHm + AeMB1AHFAbsBtAGeAZAB3QHQAckB3QHQAckBjQF2AWQBjgF2AWQB6gHmAeMBlwGAAW8GAAH4Ae4B4wHY + AZsBWwH/Ac0BmQHJAXMBQwH4Ae4B4wGlAY8BfgP/AaoBlQGGAa4B/gH/AeoBgAFKAegBewFEAeUBdgE/ + AeIBcgE6AZ0B/gH/AbkBqQGdAfwB9AHxAdABwAG1AZMC/gG5AaYBmQH6Ae0B5wMAAbkBnAGZAboBkwGQ + AeYB8QHnAeQB6wHhAb8BkQGOAcIBhQGDAckCgAHIAX0BfwHGAn0BwgF7AX0BugFuAW0BxwHMAckB6QH5 + Ae4BwwGRAY8BtgFnAWgGAAG3AaIBkwP/Av4B/QHuAcwBvAHLAV4BKwHMAX4BWAHZAaEBhgH6AfUB8wH6 + AfUB8wHxAegB4gHsAd0B1QHoAdcBzQG4AaMBlAFjAUkBNQMAAfQB8gHwAdkBzAHEAbwBpwGYAwAB2AHu + AfYBywG3AawBlwGAAW8B9AHyAfABlwGAAW8JAAH3Ad4B4gHYAZsBWwH4Ae4B4wYAA/8BzgHBAbgBtQH+ + Af8BsgL+Aa4C/gGsAv4BqAL+AaUC/gGQAXcBZgH8AfcB9QG1AaEBkgGaAv4BkAF3AWYB+wHwAewBkAF3 + AWYBuAF2AXQB5AHoAd8BzwG/AbkBuwF7AXkBwQJ/AcYCgwHIAoIBxwKDAcYBfwGBAcUBfQF8AcMBegF7 + AbkBbQFsAccBzAHJAekB+QHuAcIBjgGNAbYBZwFoAwABugGlAZYG/wL+Af0B7gHMAbwB5AGvAZQB/QH6 + AfgBxQHWAccBTgFuAVEBLwFUATABVAFzAVYByAHTAb8BuQGkAZUBYwFJATUGAAHeAdEBygHqAeMB3wHL + AbcBrAHCAasBoAHWAcYBvQGhAYoBegMAAZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHeAeIGAAGqAZUBhgP/ + AbABmwGMAb0C/gHqAYABSgHoAXsBRAH5Ad0BzwMAAYECgAGrAagBpgH9AfoB+QHUAcYBvAGiAv4BvAGr + AZ8B/AH0AfADAAHBAYEBfwHSAasBqAHCAYMBgQHKAZABjAHOAY0BjAHMAYsBigHMAYcBiQHJAYYBhwHK + AYIBhQHJAYEBhQHGAX8BgAHCAnkBuQFsAWsBxwHMAckB6QH5Ae4BxwGVAZQDAAG+AakBmhL/AVwBgwFe + AWMBqAFnAUoBlQFLATsBeQE6AVgBeAFYAbgBowGUAWMBSQE1BgAB9AHyAfAB3gHRAcoB0gHAAbgBzQG6 + AbEBywG3AawB0QHiAegDAAGXAYABbwMAAf0B7AH9AbMBPAGyAdwBcAHbAY0BLQGMAf0B7AH9BgAD/wHR + AcUBvAHDAf4B/wHAAv4BvQL+AboC/gGBAoABdQFxAW4BVwFUAVEDAAGjAZcBjQHSAcMBugGTAX0BawH9 + AfYB9AGTAX0BawHWAaEBnQHTAaoBqAHMAY8BjgHdAaEBnwHYAZoBmwHWAZQBlwHTAZEBkwHSAY8BkQHQ + AYwBjgHOAooBzQGIAYkByAKCAb8BdgF3AbgBawFqAccBzAHJAd4B4gHbAwABwwGuAZ4S/wFWAY4BWQF9 + AckBggFbAbMBXAFIAZQBSwE5AV0BOgG4AaMBlAFjAUkBNQYAAdgB7gH2AQ4BeAGeAU8BywHxATQBwAHv + AS8BvgHvAQwBYgGBAZcBgAFvAZcBgAFvAZcBgAFvAdkBbAHYAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGM + Af0B7AH9AbABmwGMA/8BtQGhAZIBygH+Af8B6gGAAUoB6AF7AUQB5QF2AT4BsgHSAc8BowGdAZgB/QL+ + AVEBkwGpAQ4BEgEWAdwB4wHlAf4B+gH5Af0B+gH3AwAB+QL3AdYBoQGdAe8D0QGYAZUB4QGpAagB4gKr + Ad8BpAGmAdwBnwGgAdgCmwHUAZgBlwHRAZEBkgHMAooByAGDAYQBvwFzAXQBuAFrAWoBxgGxAa8DAAHI + AbIBowP/ARMBKwGcARIBKgGYAQkBHwF+AQkBHwF+A/8BhAG0AYgBpQHZAaoBeAHLAX0BXAGnAV8BWgF8 + AVoBuAGjAZQBYwFJATUDAAHYAe4B9gEUAaoB4QGFAeEB9QFrAdcB9AFQAcsB8QE0AcAB8AEdAbUB7gEM + AWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAwAD/wHUAcgBwAHR + Af4B/wHOAv4BywL+AccB/gH/AcUB/wH+AaMBnQGYAYgBtwHHAXQBzgHiAUkBmgGyAQ4BEgEWAd0B4AHh + Af4B+wH6AZcBgAFvAwAB9gLzAdYBoQGdAe0CyQHRAZgBlQHkAbABrwHrArcB5gKwAeIBqAGpAd0CogHZ + ApwB1AKVAc4CjwHLAocBvgFyAXMBuAFtAWwDAAHMAbYBpwP/ASEBOAG7ASABOQHBARQBLQGiAQkBHwF+ + A/8B2QHqAdoBkgHCAZUBZAGpAWgBeAGjAXoBxgHQAbwBuAGjAZQBZAFKATYGAAHYAe4B9gEUAaoB4QGG + AeEB9QFsAdYB8wFQAcsB8gE1AcAB8AEcAbUB7QEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6 + AdMBZQHSAf0B7AH9AbUBoQGSA/8BuwGnAZgB1gHKAcEBuQGlAZcB1AHIAb8BtgGiAZMB0gHFAb0BpAGe + AZcBTQGcAbMBjAHgAe4BYgG/AdcBSQGaAbIBDgESARYB1wHeAeEJAAH2AvMB1gGhAZ0B7QLJAdEBmAGV + AeYBswGyAfABvgG/AesCtwHoAbIBsQHlAa8BrgHhAasBqgHcAaIBowHWApgBzwKOAc8BmgGXAwAB0QG7 + AasD/wFDAVwB2AErAUYB4AEfATcBvAENASMBiQz/Af0B+wH6AfMB7AHmAbkBpQGWAWQBSgE2CQAB2AHu + AfYBFAGqAeEBhQHgAfUBbAHWAfMBUAHLAfIBNAHAAe8BHQG1Ae0BDAFiAYEB2AHuAfYDAAH9AewB/QHT + AWUB0gH9AewB/QYAGP8B3AHmAeoBVwGgAbUBjAHgAe4BbAHEAdkBfQKGAjUBkAF5AW0BeAkAAfYC8wHW + AaEBnQHtAskB0QGYAZUB6AG2AbUB9ALFAfIBwAHDAfABwAHBAe0BuwG8AeUCrwHVAaUBowHhAskB/AL7 + AwAB1QG/Aa8D/wFoAX4B5wFDAV0B3QElAT8BzQEXAS8BpQL+Af8C/gH/Av4F/wL+AfsB+AH2AdABwgG5 + AWQBSgE2DAAB2AHuAfYBFAGqAeEBhgHhAfQBawHWAfQBUAHLAfEBFwGYAcgB2AHuAfYJAAH9AewB/QYA + AbsBpwGYAwABuQGlAZcDAAG2AaIBkwMAAbMBngGOAwABrgGZAYoDAAGgAZoBlAF9AbABuwHKAbgBrAFz + AYUB0QFeAWwBrQI1AZAMAAH2AvMB1gGhAZ0B7QLJAdEBmAGVAewBwQHAAeQBvgG9AeABvQG7AdcBqQGo + AeECyAH8AvsJAAHYAcIBsiT/AWQBSgE2DwAB2AHuAfYBFAGqAeEBhQHhAfUBFwGYAcgB2AHuAfY5AAFe + AWwBrQGBAZ8B6wFeAXYB0AFeAWwBrQ8AAfYC8wHWAaEBnQHtAtEB2QGgAZ8B1QGpAagB3wLIAfsC+g8A + AdgBwgGyAdcBwQGxAdUBvwGvAdMBvQGtAdABugGrAc0BuAGoAcoBtQGlAcgBsgGjAcUBrwGgAcIBrAGd + Ab8BqgGaAbwBpwGYAboBpQGWAbgBowGUEgAB2AHuAfYBFAGqAeEB2AHuAfY/AAFeAWwBrQFeAWwBrRUA + AfkC9wHbArMB3wLGAfoC+aIAAawBlwGIAYQBbwFeAX0BaAFWAXwBZwFVAYUBcQFfAYcBcwFhAYYBcQFg + AXUBXwFMGAAB6gHmAeMBnAGFAXUBlgF/AW0BkAF3AWcBiQFwAV4BggFqAVcBfAFjAU8B6gHmAeMnAAG/ + AsEBMgFjAToBWAFuAVoBQwFTAUQBNAFBATUBJQEvASYBGAEgARkBEgEYAhIBGAISARgBEjMAAbwBpwGZ + AegB6QHrA/sD/wH3AfQB8QHrAekB5gH2AfQB8gF7AWUBUxgAAcIBqwGgAd4B0QHKAdoBzAHEAdYBxwG+ + AdIBwQG4Ac4BuwGyAcsBtwGrAXsBYgFPJAABvwLBAR0BJAEfAS8BYAE4AWIBrAFjAVwBogFdAVYBmAFX + AVMBjgFUAU4BhQFOAUoBegFKAVEBdAFSARIBGAESCQADyQFPAVEBTwE2AWYBNwFYAW4BWgFPAWMBUQFD + AVMBRAE0AUEBNQElAS8BJgEYASABGQFDAUcBQwGGAYgBhgkAAbsBpwGZAfgC+QMPAtwB2wH/AvwBCgEL + AQoB+AH5AfYBfwFqAVcYAAHLAbcBrAHqAeMB3wHZAc4ByAFYAUsBQQHZAc4ByAHZAc4ByAHOAbsBsgGB + AWgBVRsAAb8CwQEyAWMBOgFYAW4BWgFwAW4BbQHoAuwBNwFtAT8BUwGvAWsBTAGqAWUBRQGnAV8BPwGi + AVoBOQGeAVQBMgGaAU8BXAGHAVwBEwEaARMJAAEpAS0BKQPXATsBcAE9AW4BuAFyAVoBnwFbAVgBmAFZ + AVQBjgFVAU4BhAFPAUkBeQFKAT0BYwE+AUkBTQFJCQABvwGrAZ4D/wOPAwABxQLCAQoCCQHqAu0BewFm + AVMY/wHUAcMBuwHqAeMB3wFYAUsBQQFYAUsBQQFYAUsBQQHiAdcC0gHAAbgBhwFvAV0YAAG/AsEBHQEk + AR8BLwFgATgBYgGsAWMBvwLBAR8BJQEgAT8BewFGAV4BtgF0AVcBsgFuAVABrQFoAUkBqQFiAUMBpQFd + AT0BoAFXAVwBhwFcARwBKQEcCQABtwG4AbcBWAFZAVgBRgF7AUkBeQHCAX8BcQG7AXQBaAGyAWoBXwGn + AWABVQGcAVUBSwGSAUgBSQF6AUkBEAEVARAJAAHHAbUBqAb/A5cGAAH0AfYB+AF+AWkBVwPnA/8DAAP/ + A+cDAAPnA/8B3QHQAckB6gHjAd8B6gHjAd8B6gHjAd8B6gHjAd8B4gHXAdIB1gHHAb4BjQF1AWMDAAHx + AdsBxQGZATMBAAHeAb0BrAwAAXABbgFtAegC7AE3AW0BPwFTAa8BawFxAm8B6ALsAUYBigFOAWkBvQF8 + AWIBuAF3AVsBtAFxAVQBrwFsAU0BrAFmAUcBpwFgAWEBjgFjARABFQEQCQABIgEmASID/QFMAYkBUQGB + AcYBiAF3AcEBfQFvAbkBcgFmAbABaAFdAaUBXgFTAZsBUQFMAYIBTQEQARUBEAkAAc8BvwGyA/cDEAEr + AiwGAAHzAfYB+AF8AWcBVQMAA/8DAAP/AwAD/wMAA/8B6gHmAeMB1AHFAbsBtAGeAZAB3QHQAckB3QHQ + AckBjQF2AWQBjgF2AWQB6gHmAeMB8AHZAcIB1wGaAVoBmQEzAQABmQEzAQAB4QHEAbUJAAG/AsEBHwEl + ASABPwF7AUYBXgG2AXQBvwLBAR4BIwEhAU0BmAFVAXMBwwGFAW0BvwF/AWYBuwF7AV8BtgF0AVgBswFv + AVEBrgFpAWABmAFiARABFQEQCQABpgGnAaYDYwFSAY4BWgGNAcsBkwF+AcUBhQF3AcABfQFuAbgBcAFl + Aa4BZwFbAaQBWwFSAYsBUwEbASMBGwkAAc4BvgGzA/8C9wH4AfIC8wL7AfwB9gL3A/8BjwF8AWsD5wP/ + AwAD/wPnAwAD5wP/AfQB8gHwAdkBzAHEAbwBpwGYBgABywG3AawBlwGAAW8B5gHPAbcB1wGaAVoB2AGb + AVsBmQEzAQABmQEzAQABmQEzAQAB4QHEAbUGAAFxAm8B6ALsAUYBigFOAWkBvQF8AWECYwHoAuwBVAGl + AVsBfAHJAY4BdgHFAYgBcAHCAYMBagG9AX0BYwG5AXcBXAG1AXIBagGfAWgBGwEjARsJAAEgASUBIAP/ + AVcBkwFhAZkB0QGfAYkByQGPAXwBxAGDAXYBvgF7AWwBtgFuAWMBrQFlAVcBlAFYASsBNwEsCQABvAGp + AZsBuAGmAZgBugGnAZoBvAGrAZ0BwQGwAaMBvgGsAZ8BuwGqAZ0BqwGXAYkY/wMAAd4B0QHKAeoB4wHf + AcsBtwGsAcIBqwGgAdYBxgG9AaEBigF6AdgBmwFcAdgBmwFbAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEA + AZkBMwEAAeUBywG+AwABvwLBAR4BIwEhAU0BmAFVAXMBwwGFAb8CwQEjASYBJAFaAbABYQGFAc8BlAFE + AYYBSwFOAZoBVgFXAakCXQG2AWQBYgG/AWkBaAGmAWoBKwE3ASwJAAOsA3ABXQGYAWkBpgHYAawBRAGG + AUsBTgGaAVYBVwGpAl0BtgFkAWIBvwFpAVkBnAFbAT0BTQE+EgAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/ + AwAD/wMAAfQB8gHwAd4B0QHKAdIBwAG4Ac0BugGxAcsBtwGsAfQB8gHwAdgBmwFbAdgBmwFbAekBtAF8 + AfwB1gGvAbUBYwE1AZkBMwEAAZkBMwEAAZkBMwEAAf0B+wH6AWECYwHoAuwBVAGlAVsBfAHJAY4BWwFY + AVoB6ALsAV8BugFmAY0B0wGbAUQBhgFLAbQB3gG6AbQB3gG6AbQB3gG6AWABugFnAW4BqwFvAT0BTQE+ + CQABHAEgARwD/wFqAaMBeQGyAd0BuAFEAYYBSwG0Ad4BugG0Ad4BugG0Ad4BugFgAboBZwFeAaIBXwFN + AWEBTxIAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8VAAHYAZsBWwHqAbcBggH7AdgBsgH+AdEBowH7 + AdgBsgGvAVcBKAGZATMBAAGZATMEAAG/AsEBIwEmASQBWgGwAWEBhQHPAZQB1gHVAdcBKgEuASkBYgG/ + AWkBlAHXAaABRAGGAUsBRAGGAUsBRAGGAUsBRAGGAUsBYAG6AWcBdQG1AXYBTQFhAU8JAAGmAacBpgOA + AXMBrAGEAbsB4QHBAUQBhgFLAUQBhgFLAUQBhgFLAUQBhgFLAWABugFnAWIBqAFjAVgBcQFaEgAD/wPn + AwAD5wP/AwAD/wPnAwAD5wP/AwAD/xUAAecBswF8AfEBwwGRAf4BzwGdAf8BzQGZAf4B0AGfAfsB2AGy + AakBTgEeAZkBMwQAAVsBWAFaAegC7AFfAboBZgGNAdMBmwFbAVgBWgHoAuwBYgG/AWkBmQHbAaUBlQHZ + AaMBkgHXAaABjgHUAZwBiQHRAZgBhAHOAZQBngHOAaABWAFxAVoJAAEgASUBIAP/AYEBuAGSAb4B4wHE + AbgB4AG+AasB2gGxAZsB0gGhAYsBygGRAX0BxAGDAW4BtQFzAW8BlgFwEgAn/xUAAfsB6AHVAeUBsgF7 + AfQBwAGLAf8BzQGZAf8BzQGZAf4B0AGhAfIByQGdAbABWgEpAwAB1gHVAdcBKgEuASkBYgG/AWkBlAHX + AaAB1gHVAdcDcAFiAb8BaQFiAb8BaQFiAb4BaAFdAbYBZQFXAawBXwFRAZ8BWQFKAZEBUQFCAYMBSgHx + AfMB8QkAA+QEjQHEAZ4BiQHBAZgBgwG7AZABfAG1AYcBdAGuAX0BbAGnAXMBZAGgAWgBbgGkAXABpgHD + AaYSAAP/AwAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/GAAB+gHnAdMB5AGwAXkB9gHEAZAB/wHNAZkB8wHC + AY4B4wGwAXkB+QHmAdIDAAFbAVgBWgHoAuwBYgG/AWkBmQHbAaUBlQHZAaMBkgHXAaABjgHUAZwBiQHR + AZgBhAHOAZQBngHOAaABWAFxAVpIAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/GwAB+QHjAc0B4wGv + AXgB7gG9AYoB4wGwAXkB+gHtAd4GAAHWAdUB1wNwAWIBvwFpAWIBvwFpAWIBvgFoAV0BtgFlAVcBrAFf + AVEBnwFZAUoBkQFRAUIBgwFKAfEB8wHxSAAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/x4AAfgB5gHS + AeUBsgF9AfsB8QHncgAn/zwAAa0BWAEnAfIB5QHfEgAB+AHuAeMkAAGtAVgBJwHyAeUB3w8AAawBlwGI + AYQBbwFeAX0BaAFWAXwBZwFVAYUBcQFfAYcBcwFhAYYBcQFgAXUBXwFMTgAB/QH3AfEB5AGnAVYB2QGk + AXgBpQFJARgB7gHdAdUMAAH4Ae4B4wGZATMBAAH4Ae4B4xsAAf0B9wHxAeQBpwFWAdkBpAF4AaUBSQEY + Ae4B3QHVDAABvAGnAZkB6AHpAesD+wP/AfcB9AHxAesB6QHmAfYB9AHyAXsBZQFTMwABuwGmAZcBYwFJ + ATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUGAAH7AfQB6gHkAacBVgH/AeoBxQH+AeEBtAHdAasBgAGk + AUYBFQHtAdoB0QYAAfgB7gHjAbUBYwE1AdgBmwFbAZkBMwEAAfgB7gHjFQAB+wH0AeoB5AGnAVYB/wHq + AcUB/gHhAbQB3QGrAYABpAFGARUB7QHaAdEJAAG7AacBmQH4AvkDDwLcAdsB/wL8AQoBCwEKAfgB+QH2 + AX8BagFXMwABwgGsAZ0B/gH9AvwB8gHrAfoB5AHYAfcB2AHEAWMBSQE1BgAB5QGqAVkB/gH5AdsB/wHw + AckB/gHnAb4B/gHhAbQB3wGuAYMBpAFGARUBlwGAAW8BlwGAAW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGb + AVsBmQEzAQAB+AHuAeMSAAHlAaoBWQH+AfkB2wH/AfAByQH+AecBvgH+AeEBtAHfAa4BgwGkAUYBFQkA + Ab8BqwGeA/8DjwMAAcUCwgEKAgkB6gLtAXsBZgFTMwABzAG2AacD/wHYAccBvAHDAbEBpgH9AfIB6wFj + AUkBNQYAAeUBqgFbAf8B/gHjAf8B+AHWAf8B8AHJAf4B6AG+AfsB3wG0Aa8BWAEmAZcBgAFvAwAB+AHu + AeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFx + AYsBRQFpAYQB4AGmAVgB5gHqAdIB/wH4AdYB/wHwAckB/gHoAb4B+wHfAbQBrwFYASYJAAHHAbUBqAb/ + A5cGAAH0AfYB+AF+AWkBVwMAAfEB2wHFAZkBMwEAAd4BvQGsIQAD/AHvAeoB6AHMAbYBpwn/Af4B+gH4 + AWMBSQE1BgAB+wH0AeoB5QGqAVkB/wH+AeMB/wH3AdYB+wHlAbsB5AGlAVIB8AHPAaMBlwGAAW8GAAH4 + Ae4B4wHYAZsBWwH/Ac0BmQHJAXMBQwH4Ae4B4wFJAbgB3wGDAdsB7wF5AdQB7AFvAc8B6gFkAcgB5wFZ + AcMB5QFfAbkB0AHgAagBWAHmAekB0gH/AfcB1gH7AeUBuwHkAaUBUgHwAc8BowkAAc8BvwGyA/cDEAEr + AiwGAAHzAfYB+AF9AWgBVgHwAdkBwgHXAZoBWgGZATMBAAGZATMBAAHhAcQBtQkAAbsBpgGXAWMBSQE1 + AWMBSQE1AWMBSQE1AWMBSQE1AWMBSQE1Ae8B6wHoAb4BfQFYAYEBWQE+AeoBqgGLAekBpAGCAegBmwF1 + AeYBkQFmAeUBhwFWAd8BeAFECQAB+wH0AeoB5AGoAVYB+wH8AeEB4gGjAU8B8wHaAbkDAAGXAYABbwkA + AfcB3gHiAdgBmwFbAfgB7gHjAwABTgG8AeIBjgHgAfEBhQHbAe8BpgGMAXoBmwGBAW4BlQF6AWcBWgHD + AeUBYAG6AdEB4AGlAVQB/wH+AeMB4gGjAU8B8wHaAbkMAAHOAb4BswP/AvcB+AHyAvMC+wH8AfYC9wP/ + AY8BfAFrAdcBmgFaAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAeEBxAG1BgABwgGsAZ0B/gH9AvwB8gHr + AfoB5AHYAfcB2AHEAWMBSQE1AY8BYgFGAesB4wHfAwAB6gGqAYsB/wHCAaIB/QG5AZUB+QGrAYQB9gGe + AXIBzQFlATEMAAHZAeQB4gHfAaoBXAHZAdoBygYAAZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHeAeIGAAFQ + Ab4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFRAWgBdgHmAa0BXwH3 + AecB0g8AAbwBqQGbAbgBpgGYAboBpwGaAbwBqwGdAcEBsQGkAb8BrQGgAbwBqwGeAaoBlgGIAdgBmwFb + AdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAZkBMwEAAeUBywG+AwABzAG2AacD/wHYAccBvAHDAbEBpgH9 + AfIB6wFjAUkBNQH7AvoGAAHqAaoBiwHpAaQBggHoAZsBdQHnAZEBZgHlAYcBVwHjAX4BSgkAAdgB7gH2 + AQ4BeAGeARwBtgHuAQ4BeAGeAdgB7gH2AwABlwGAAW8DAAH9AewB/QGzATwBsgHcAXAB2wGNAS0BjAH9 + AewB/QMAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6AZwBgQFvAZUBegFnAXMB0QHrAWkBywHpAUMBZgGB + AVIBeQGRAUwBcQGLAUUBaQGEAT8BYgF+AToBXAF4AbMBwAHLGAAB2AGbAVsB2AGbAVsB6QG0AXwB/AHW + Aa8BtQFjATUBmQEzAQABmQEzAQABmQEzAQAB/QH7AfoBzAG2AacJ/wH+AfoB+AFjAUkBNQHxAe4B7B4A + AdgB7gH2AQ4BeAGeAU8BywHxATQBwAHvAS8BvgHvAQwBYgGBAZcBgAFvAZcBgAFvAZcBgAFvAdkBbAHY + AfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAf0B7AH9AVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHy + AYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGGAW8BzwHqAWQByAHnAVkBwwHlAU8BvQHiAUQBtwHgATkBWgF3 + GAAB2AGbAVsB6gG3AYIB+wHYAbIB/gHRAaMB+wHYAbIBrwFXASgBmQEzAQABmQEzBAAB6gGqAYsB6QGk + AYIB6AGbAXUB5gGRAWYB5QGHAVYB3wF4AUQB0wGBAVkBlQFyAV0B8gHvAe0DAAG7AaYBlwFjAUkBNQFj + AUkBNQFjAUkBNQFjAUkBNQFjAUkBNQHYAe4B9gEUAaoB4QGFAeEB9QFrAdcB9AFQAcsB8QE0AcAB8AEd + AbUB7gEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAc8B7QH3 + AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHYATgBqQHSATEBogHMAWkBvwHZAaYBjAF6AZsBgQFu + AZUBegFnAVoBwwHlAVABvgHjATwBXgF6GAAB5wGzAXwB8QHDAZEB/gHPAZ0B/wHNAZkB/gHQAZ8B+wHY + AbIBqQFOAR4BmQEzBAAB6gGqAYsB/wHCAaIB/QG5AZUB+QGrAYQB9gGeAXIBzQFlATED/gHuAegB5AG8 + AXsBVwGIAWEBSQHCAawBnQH+Af0C/AHyAesB+gHkAdgB9wHYAcQBYwFJATUDAAHYAe4B9gEUAaoB4QGG + AeEB9QFsAdYB8wFQAcsB8gE1AcAB8AEcAbUB7QEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6 + AdMBZQHSAf0B7AH9EgABUAG+AeMBmAHmAfQBjwHhAfIBhQHcAe8BfAHWAe0BcgHRAeoBZwHKAekBXAHF + AeUBQAFiAX0YAAH7AegB1QHlAbIBewH0AcABiwH/Ac0BmQH/Ac0BmQH+AdABoQHyAckBnQGwAVoBKQMA + AeoBqgGLAekBpAGCAegBmwF1AecBkQFmAeUBhwFXAeMBfgFKBgAD/QHpAd8B2QHMAbYBpwP/AdgBxwG8 + AcMBsQGmAf0B8gHrAWMBSQE1BgAB2AHuAfYBFAGqAeEBhQHgAfUBbAHWAfMBUAHLAfIBNAHAAe8BHQG1 + Ae0BDAFiAYEB2AHuAfYDAAH9AewB/QHTAWUB0gH9AewB/RUAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6 + AZwBgQFvAZUBegFnAXMB0QHrAWkBywHpAUMBZgGBGwAB+gHnAdMB5AGwAXkB9gHEAZAB/wHNAZkB8wHC + AY4B4wGwAXkB+QHmAdIhAAHMAbYBpwn/Af4B+gH4AWMBSQE1CQAB2AHuAfYBFAGqAeEBhgHhAfQBawHW + AfQBUAHLAfEBFwGYAcgB2AHuAfYJAAH9AewB/RgAAVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHy + AYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGGHgAB+QHjAc0B4wGvAXgB7gG9AYoB4wGwAXkB+gHtAd4kAAHq + AaoBiwHpAaQBggHoAZsBdQHmAZEBZgHlAYcBVgHfAXgBRAwAAdgB7gH2ARQBqgHhAYUB4QH1ARcBmAHI + AdgB7gH2JwABzwHtAfcBUAG+AeMBUAG+AeMBTwG9AeIBSQG4Ad4BQQGwAdgBOAGpAdIBMQGiAcwBqQHR + AeIhAAH4AeYB0gHlAbIBfQH7AfEB5ycAAeoBqgGLAf8BwgGiAf0BuQGVAfkBqwGEAfYBngFyAc0BZQEx + DwAB2AHuAfYBFAGqAeEB2AHuAfaWAAHqAaoBiwHpAaQBggHoAZsBdQHnAZEBZgHlAYcBVwHjAX4BSgkA + Aa0BWAEnAfIB5QHftAAB/QH3AfEB5AGnAVYB2QGkAXgBpQFJARgB7gHdAdUqAAH2AvUBdAFXAUMBaAFN + AToBZAFIATYBaQFMATkBawFOATkBbAFQATsBbAFRAT0BcQFSAUABiQFsAVwBoQGKAXwBvgGuAaZgAAH7 + AfQB6gHkAacBVgH/AeoBxQH+AeEBtAHdAasBgAGkAUYBFQHtAdoB0SQAAfQC8wF7AVkBRwG4AXYBdAFt + AVEBPQFbAUMBMgG1AmcBtgFnAWgBuwJvAb0BcgFxAcEBdgF6AccBgQGDAcIBfQF8AZsBbAFfYAAB5QGq + AVkB/gH5AdsB/wHwAckB/gHnAb4B/gHhAbQB3wGuAYMBpAFGARUhAAHyAfEB8AF5AVgBRgG4AXYBdAHj + AdoB1QGYAXcBXgGXAXYBYAGfAYMBbgHKAboBrwHXAcwBwwHjAdoB1QHpAeIB3gHmAd0B2QG/AXoBeAGu + AWgBZQYAAZ4BhwF3AZcBgAFvAZABeAFnAYkBcQFeAYIBaQFWAXsBYgFPAXUBXAFIAXABVgFBAWoBUAE8 + AWcBSwE3AWMBSAEzAWMBSAEzDAABngGHAXcBlwGAAW8BkAF4AWcBiQFxAV4BggFpAVYBewFiAU8BdQFc + AUgBcAFWAUEBagFQATwBZwFLATcBYwFIATMBYwFIATMGAAHlAaoBWwH/Af4B4wH/AfgB1gH/AfAByQH+ + AegBvgH7Ad8BtAGvAVgBJh4AAe8B7gHtAXkBWAFGAbgBdgF0AcsBmwGaAeMB2gHVAZgBdwFeAeUB0QHC + AdkBzgHGAZsBewFmAawBkQGAAd0B0gHLAekB4QHcAeoB4wHfAcUBgAGBAbcCbmAAAfsB9AHqAeUBqgFZ + Af8B/gHjAf8B9wHWAfoB5QG7AeMBpQFSAfABzwGkD/8MAAP9AXkBWAFGAbMBcwFvAcgBlQGUAfAB6wHo + AeMB2gHVAZ8BegFgAd8BygG7AekB4wHeAesB5QHhAdcBwgG1AZsBewFmAd8B1AHOAewB5gHgAcsBhwGK + Ab0CdQYAAZ8BhwF3AZcBgAFvAZABeAFnAYgBcQFfAYIBaQFWAXsBYgFPAXUBXAFIAXABVgFBAWoBUAE7 + AWcBSwE3AWMBSAEzDwABnwGHAXcBlwGAAW8BkAF4AWcBiAFxAV8BggFpAVYBewFiAU8BdQFcAUgBcAFW + AUEBagFQATsBZwFLATcBYwFIATMMAAH7AfQB6gHiAaYBVgH/Af4B4wHiAaMBTwHsAdIBsQwAA/MD/wMA + A84JAAGyAYkBggG6AXoBeAP/AfAB6wHoAeMB2gHVAaEBfAFiAd8BygG7AekB4wHeAfcB9QHzBv8BlwF2 + AWAB8AHrAegBzwGNAY8BwgF6AXxjAAPlARgBEQEHAeUBrQFfAfcB5wHSAwAD/wYAA/8DAAb/AwAD5QP/ + AwABuQGDAX4BugF7AXgD/wHwAesB6AHjAdoB1QGoAX8BaAHfAcoBuwHpAeMB3gH3AfUB8wb/AZcBdwFg + Ae8B6gHnAdQBkwGVAckBhAGHBgAB4gFzAToB4gFxATkB3wFvATYB2QFqATIB0AFlAS8BxAFfASsBtgFX + ASgBpgFQASUBmAFJASMBiwFEASEBhgFBASABhgFBASAMAAHiAXMBOgHiAXEBOQHfAW8BNgHZAWoBMgHQ + AWUBLwHEAV8BKwG2AVcBKAGmAVABJQGYAUkBIwGLAUQBIQGGAUEBIAGGAUEBIAYAA+UDAAPoCQAD/wYA + A/8JAAPoAwAD5QMAAcEBhwGEAb0BfAF5A/8B8AHrAegB4wHaAdUBrwGGAWwB3wHKAbsB6QHjAd4B9wH1 + AfMG/wGeAXoBZAHvAegB5QHVAZYBmAHNAYkBjAYAAf8BmwFnAf8B4gG1Af8B3QGoAf8B1QGVAf8BzQF/ + Af8BwwFnAf8BuAFOAf8BrwE2Af8BpQEgAf8BngENAf8BmQEAAYYBQQEgDAAB/wGbAWcB/wHiAbUB/wHd + AagB/wHVAZUB/wHNAX8B/wHDAWcB/wG4AU4B/wGvATYB/wGlASAB/wGeAQ0B/wGZAQABhgFBASAJAAPo + AwAD/wYAA/8GAAP/BgAD/wMAA+gGAAHFAYkBhwG9AX4BewP/AfAB6wHoAeMB2gHVAcIBlwF9Ad8BygG7 + AekB4wHeAfcB9QHzBv8BowF8AWYB7AHmAeEB1wGYAZsB0AGNAZAGAAH/AaMBcQH/AaIBcAH/AaABbgH/ + AZ0BaAH/AZgBYwH9AZMBXgH2AY0BWAHtAYUBUwHiAX4BTQHVAXUBRwHIAW0BQQG8AWUBPAwAAf8BowFx + Af8BogFwAf8BoAFuAf8BnQFoAf8BmAFjAf0BkwFeAfYBjQFYAe0BhQFTAeIBfgFNAdUBdQFHAcgBbQFB + AbwBZQE8BgAD5QMAA+gJAAP/BgAD/wkAA+gDAAPlAwABxwKPAcABgQF9Af8B/QH/AfAB6wHoAeMB2gHV + AcgBmwGBAd8BygG7AekB4wHeAfcB9QHzBv8BqAGAAWoB6wHhAd8B1wGYAZsB1QGVAZhjAAPlAwAM/wYA + A/8GAAP/AwAD5QYAAc4ClQHCAYQBfwL/Af4B8AHrAegB4gHOAcEB3AG6AakB4QHEAbMB6QHjAd4B9wH1 + AfMG/wG5AYsBcQHaAZ4BoAHiAakBrAH8AvsGAAGeAYcBeAGXAYABbwGQAXgBZwGJAXABXgGCAWkBVgF8 + AWIBTwF1AVsBRwFwAVYBQRgAAZ4BhwF4AZcBgAFvAZABeAFnAYkBcAFeAYIBaQFWAXwBYgFPAXUBWwFH + AXABVgFBGAAD5Qz/BgAM/wPlCQAB0wKfAcYBiQGBAf8C/gHwAesB5wHlAcMBrwP+AecB2gHUAcoBrgGh + AcoBowGOAfYB8AHsA/8BxAGRAXVyAAP/AwAD+AP/BgAD/wP4AwAD/wwAAeIBrwGxAckBkAGFAf8B/gH/ + AfMB6gHlAd0BsgGaCQAB5wHcAdYBxwGsAZ4BygGjAY4BzwGnAZAPAAGeAYgBdwGXAYABbwGQAXkBZgGJ + AXEBXgGCAWkBVgF7AWIBTwF1AVsBSAFwAVYBQQFqAVABPAFmAUsBNwFjAUgBMwFjAUgBMwwAAZ4BiAF3 + AZcBgAFvAZABeQFmAYkBcQFeAYIBaQFWAXsBYgFPAXUBWwFIAXABVgFBAWoBUAE8AWYBSwE3AWMBSAEz + AWMBSAEzDwAD/xgAA/8PAAHVAaMBjQP/Ad0BuQGlAfUB8gHwhwAe/xIAAdsBrQGTAfQB8gHwA/6iAAH7 + AecB+roAAfsB5wH6AY0BLQGMAfsB5wH6NgABzwFrAWwByQFoAWkBsgFbAVwBfwI/AW4BkgGiAWoBiwGc + AVkBdgGHAUMBWAFpASgBNQFDAXQBnAGKAXABlgGGAV4BgQF0AUcBZAFbASsBQAE7JwAB+AHuAeMqAAH7 + AecB+gGNAS0BjAHeAXMB3gGNAS0BjCcAAeUCywGdAU0BJQGdAU0BJQGdAU0BJQHdArsB0AFtAW4B6AGO + AY8B5gGJAYoBtgJbAXEBlgGmAVgBxQHhAU0BvgHdAU0BvgHdAVsBugHbAXcBnwGNAWgB0AGXAV4BzAGR + AV4BzAGRAWoBywGbAT4BbAFfIQAB+AHuAeMBmQEzAQAB+AHuAeMYAAH4Ae4B4wkAAfsB5wH6AZ8BNQGe + AeoBkAHqAeQBhAHkAeABdwHeAY0BLQGMAfsB5wH6AwAB+wHDAfsBywEfAc0B/AHVAfwSAAHwAuEBnQFN + ASUB+gGdAWIB4QGGAVgB4QGGAVgBnQFNASUB0gFxAXIBpgJsAaABYwFkAYwCSwF0AZsBrAFiAaMBvQFX + AZgBtAFNAY0BqwFLAYABnAF6AaUBkgFtAbIBkgFiAakBiQFYAaABgQFUAZIBeQE7AbwBfQE+AWwBXxsA + AfgB7gHjAbUBYwE1AekBqQFZAZkBMwEAAfgB7gHjEgAB+AHuAeMBmQEzAQAB+AHuAeMDAAH7AecB+gHT + AWUB0gH2AawB9gHxAaEB8AHrAZQB6wHnAYgB5QHhAXsB4AGNAS0BjAH9AekB/gHLAR8BzQHLAR8BzQHL + AR8BzQMAAekB8AHpAScBbwEoARoBZwEcARoBZwEcAekB8AHpAecBmgFzAfwBvgGXAfsBwAGhAfsBsQGC + AaIBVgExAfIC5AHWAXgBeQH2AaoBqwHwAZ0BngHLAmgBdwGhAbEBYwHTAfMBXAHQAfMBVQHNAfIBWwG6 + AdsBfgGqAZUBdAHiAagBbgHhAaUBZwHfAaEBagHLAZsBOwG8AX0BPgFsAV8MAAHYAe4B9gkAAfgB7gHj + AbUBYwE1AfkBwwGJAfEBtgFxAekBqAFZAZkBMwEAAfgB7gHjDAAB+AHuAeMBtQFjATUB4wGfAUkBmQEz + AQAB9QHZAeMB5QFwAeQB+wG5AfsB+gG3AfoB9gGwAfYB8gGlAfMB7QGZAe0B3AFlAdsB+wHnAfoB2AFr + AdcB/wFeAfwBywEfAc0BywEfAc0B6QHwAekBLAGCATMBWgGvAV8BWwGpAV8BTQGcAU8BGQF3ARwB9wLw + AecBmgFzAecBmgFzAecBmgFzAfMC5wMAAdoBggGDAcMCfwG8AXQBdQGkAlkBfAGmAbcBaQGmAb0BXwGc + AbQBVQGQAawBSwGAAZwBgwGwAZsBcwGzAZQBaQGqAYwBXwGhAYUBVAGSAXkBOwG8AX0BQAFuAWEJAAHY + Ae4B9gEOAXgBngHYAe4B9gMAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfkBxAGIAfEBtgFxAegBqAFa + AZkBMwEAAfgB7gHjBgAB+AHuAeMBtQFjATUB7wGzAWsB6QGoAVkB4gGfAUkBmQEzAQAB9QHZAeMB5QFw + AeQB+wG5AvsBuQH7AfgBsgH4AdwBZQHbAfsB5wH6AwAB2AFrAdcB5AFCAeYB/wGmAf8BywEfAc0BKwGC + ATkBiAHXAZMBfgHNAYgBZAGzAWkBIgF6AScB6QHwAekGAAFWAVABSgkAAd8BigGLAf0BuQG7AfkBsAGx + Ac4BbgFtAX8BrAG9AX4B3gH1AXgB3AH0AXEB2QH0AVsBugHbAYYBtQGfAYwB5wG0AYcB5QGwAYAB5AGu + AWoBywGbATsBvAF9AUMBcgFlBgAB2AHuAfYBDgF4AZ4BLwG+Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHY + AZsBWwH/Ac0BmQH/Ac0BmQH5AcQBiQHxAbYBcQHpAagBWQGZATMEAAH4Ae4B4wG1AWMBNQH7AccBjgH1 + Ab0BfgHvAbMBawHoAakBWQHjAZ8BSQGZATMBAAH1AdkB4wHcAWUB2wH7AbkB+wHlAXAB5AH7AecB+gYA + AdgBawHXAf8BpgH/AdgBawHXAfwB1QH8AekB8AHpASsBggE5ASYBfgEuASIBegEnAekB8AHpAVYBUAFK + AwABVgFQAUoMAAHjAZMBlAH/Ab0BvgH9AbcBuQHPAXEBcAGDAbIBwwGLAeMB9QGFAeEB9AF+Ad4B9AFb + AboB2wGKAbsBowGXAegBuQGSAecBtgGMAeYBswFqAcsBmwE7AbwBfQFHAXYBaAYAAQ4BeAGeAVgBzwHy + AUIBxgHxAS4BvQHvAQwBYgGBAa0BlAGDAZ8BhAFxAZUBegFnAdgBmwFbAf8BzQGZAf8BzQGZAfkBwwGJ + AckBcwFDAfgB7gHjAwAB2AGbAVsB/wHNAZkB/wHNAZkB+wHHAY4B9gG+AX4B7wGzAWwB6AGpAVkB4wGf + AUkBmQEzAQAB+AHuAeMB5QFwAeQB+wHnAfoJAAH9AekB/gHYAWsB1wH9AekB/gFWAVABShIAAVYBUAFK + DwAB5wGbAZwB/wG9Ab4B/wG9Ab4B0QF0AXMBiAG3AckBlgHnAfYBkQHmAfYBigHjAfUBWwG6AdsBjwHB + AakBoQHqAb8BnQHqAbwBlgHoAbgBagHLAZsBOwG8AX0BSwF7AWsB2AHuAfYBFAGqAeEBggHfAfUBbAHW + AfMBVgHOAfIBQAHEAfABLAG8Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHYAZsBWwH/Ac0BmQHJAXMBQwH4 + Ae4B4wYAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGOAfUBvgF+Ae8BswFsAegBqAFZAeMBnwFJ + AZkBMwEAAfUB2QHjGAABVgFQAUoMAAFWAVABSgMAAVYBUAFKAfsBwwH7AcsBHwHNAfwB1QH8AwAB7AGk + AaUB/wG9Ab4B/wG9Ab4B0gJ2AYsBvAHOAZ8B6wH2AZsB6gH2AZYB5wH2AVsBugHbAZMBxgGtAakB6wHC + AaYB6wHAAaEB6gG/AWoBywGbATsBvAF9AU8BgAFwAwAB2AHuAfYBFAGqAeEBfwHeAfUBagHXAfMBVAHN + AfIBPgHEAfEBKgG8Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHYAZsBWwH4Ae4B4wwAAfgB7gHjAdgBmwFb + Af8BzQGZAf8BzQGZAfsBxwGPAfYBvgF+Ae8BswFsAegBqAFZAeMBnwFIAZkBMwEAAfgB7gHjGAADhgES + AVsBhQGHAbAByAFWAVABSgYAAf0B6QH+AcsBHwHNAcsBHwHNAcsBHwHNAwAB8AGsAa0BzQKFAcUBegF7 + AawCXQGNAcAB0gF4Aa0BvgFvAaIBtQFmAZcBrAFLAYABnAGVAcoBsAGAAbUBmgF3AawBkwFuAaMBiwFU + AZIBeQE7AbwBfQFUAYQBcwYAAdgB7gH2ARQBqgHhAX4B3gH0AWgB1gHzAVIBzAHyARcBmAHIAdgB7gH2 + CQAB+AHuAeMSAAH4Ae4B4wHYAZsBWwH/Ac0BmQH/Ac0BmQH8AccBjgH2Ab0BfgHvAbMBawHJAXMBQwH4 + Ae4B4xsAASgBfAGrAQwBrQHuARoBZwGTAZsBvgHRBgAB2AFrAdcB/wFeAfwBywEfAc0BywEfAc0DAAH0 + AbMBtAH/Ab0BvgH/Ab0BvgHTAnkBjwHDAdUBqwHwAfcBqwHwAfcBqAHvAfcBWwG6AdsBlwHMAbIBtAHu + AcgBtAHuAcgBsQHtAcYBagHLAZsBOwG8AX0BWQGKAXgJAAHYAe4B9gEUAaoB4QF8Ad0B9QEXAZgByAHY + Ae4B9iQAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGOAdgBmwFbAfgB7gHjHgABDAGtAe4BKAF8 + AasBDAGtAe4BGgFnAZMGAAHYAWsB1wHkAUIB5gH/AaYB/wHLAR8BzQMAAfUBtgG3AfUBtgG3Ae0BpwGp + Ac8CcQGPAcMB1QGFAbQBxwF6AaQBtAFwAZUBpgFqAYsBnAGXAcwBsgGNAb8BqAGBAa0BmAF2AZ8BjQFw + AZYBhgE7AbwBfQFeAZABfQwAAdgB7gH2ARQBqgHhAdgB7gH2KgAB+AHuAeMB2AGbAVsB/wHNAZkB2AGb + AVsB+AHuAeMhAAEEAbQB/AFmAcwB/wEoAXwBqwEhAXIBoAYAAdgBawHXAf8BpgH/AdgBawHXAfwB1QH8 + BgAB1gGiAZ0BkgF9AW0B5QHgAdwBzQGZAZ4BkQGyAbkBkAF8AW0B5QHgAdwD/wFqAYsBnAGWAbQBowGL + AXEBegHkAd0B3wP/AXABlgGGAWQBlQGBDwAB2AHuAfYwAAH4Ae4B4wHYAZsBWwH4Ae4B4yQAAdkB5QHs + AQQBtAH8AWYBzAH/ASgBfAGrBgAB/QHpAf4B2AFrAdcB/QHpAf4MAAHGAZkBkgGVAX0BbgH0AewB6AHL + AZEBlgGMAasBswGGAYMBfQH0AewB6AHiAfMB9QFqAYsBnAMAAYUBfgF/AfIB6QHtAeQB8gHpAXABlgGG + RQAB+AHuAeMqAAHZAeUB7AEEAbQB/AG4AdAB3R4AAf4C/cMAAfgB7gHjAZkBMwEAAfMB4AHMRQABcwGi + AbcwAAGTAXsBagFgAUYBMgFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFj + AUkBNQFjAUkBNQFoAU4BOhgAAfgB7gHjAckBcwFDAeMBnwFJAZkBMwEAAfgB7gHjGAABtwGiAZMBYwFJ + ATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJ + ATUBYwFJATUBYwFJATUBdAGnAbkwAAGXAYABbwH8Af4B/AHnAeYB5AHnAeIB3AHmAdwB1AHlAdYBywHk + Ac8BwQHjAcoBuAHjAcUBsQHiAcIBrAHHAaoBmAFoAU4BOhUAAfgB7gHjAckBcwFDAfEBtgFxAegBqAFa + AeMBnwFJAZkBMwEAAfgB7gHjFQABtwGiAZMB+wH0AfAB4QHcAdgB4AHXAdIB3wHSAcoB3wHOAcMB3QHI + AbsB3AHDAbMB2wG/Aa0B2wG7AacB2wG7AacB2wG7AacBzwG0AaMBYwFJATUBeAGqAb0GAAGeAYcBdwGX + AYABbwGQAXgBZwGJAXEBXgGCAWkBVgF7AWIBTwF1AVwBSAFwAVYBQQFqAVABPAFnAUsBNwFjAUgBMwFj + AUgBMwYAAZwBhQF0AfwB/gH8AbABmwGMAaoBlAGFAfsB9QHvAbYBoQGSAbABmgGMAasBlQGFAaUBjwF/ + AfYB2wHIAccBqgGYAWgBTgE6EgAB+AHuAeMB2AGbAVsB/wHNAZkB+QHDAYkB8QG2AXEB6QGpAVkB4wGf + AUkBmQEzAQAB+AHuAeMDAAH7AecB+gwAAbcBogGTAf0B9gH0AfsB9AHwAfsB8QHsAfoB7gHpAfkB6wHl + AfgB6QHhAfcB5QHdAfYB4gHZAfYB4AHVAfUB3QHRAfQB2QHNAc8BtAGjAWMBSQE1AXsBrQHAMAABoAGK + AXoB/AH+AvwB/gL8Af4B/AH7AfoB9wH7AfUB7wH6Ae8B5gH5AegB3AH3AeEB0QH2AdsCyAGuAZwBaAFO + AToVAAH4Ae4B4wHYAZsBWwH/Ac0BmQH5AcMBiQHxAbYBcQHoAagBWQHjAZ8BSQGZATMBAAH4Ae4B4wGN + AS0BjAH7AecB+gkAAbcBogGTAf0B+AH2Aa0BlwGHAaQBjgF+AZwBhQF0AZIBfAFqAYoBcwFgAYIBaQFX + AfcB5QHcAXMBWQFFAWwBUgE+AWcBTQE4Ac8BtAGjAWMBSQE1AX0BsAHDBgABnwGHAXcBlwGAAW8BkAF4 + AWcBiAFxAV8BggFpAVYBewFiAU8BdQFcAUgBcAFWAUEBagFQATsBZwFLATcBYwFIATMJAAGlAY8BfwH8 + Af4B/AGwAZsBjAGqAZQBhQH7AfoB9wG1AaEBkgGwAZsBjAGqAZQBhQGkAY8BfgH3AeEB0QHIAbIBogFo + AU4BOhUAAdIB3wHeAdIB3wHeAdgBmwFbAf8BzQGZAfkBwwGJAfEBtgFxAckBcwFDAfUB2gHfAY0BLQGM + Ad4BcwHeAY0BLQGMAfsB5wH6BgABtwGiAZMBFgHpAV8BFgHpAV8BFgHpAV8BFgHpAV8B+gHwAesB+gHt + AecB+AHqAeQB+AHoAd8B9wHkAdsB9gHhAdgB9gHeAdQBzwG0AaMBYwFJATUBfwGyAcQwAAGqAZUBhQH8 + Af4C/AH+AvwB/gL8Af4C/AH+AfwB+wH6AfcB+wH1AfAB+gHxAekB+QHoAd0BygG4AasBaAFOAToSAAHY + Ae4B9gEOAXgBngEMAWIBgQHSAd8B3gHYAZsBWwH/Ac0BmQHJAXMBQwH1AdoB3wGfATUBngHqAZAB6gHk + AYQB5AHgAXcB3gGNAS0BjAH7AecB+gMAAboBpQGWARYB6QFfBgABFgHpAV8BkwF8AWoBigFyAWABggFp + AVYBegFhAU0BcwFZAUUBbAFSAT0BZwFNATgB0AG5AasBYwFJATUJAAHiAXMBOgHiAXEBOQHfAW8BNgHZ + AWoBMgHQAWUBLwHEAV8BKwG2AVcBKAGmAVABJQGYAUkBIwGLAUQBIQGGAUEBIAGGAUEBIAYAAa8BmwGL + AfwB/gH8AdsBywHBAeUB2gHRAfwB/gH8AdwBygHBAdwBygHBAbABrQGsAUEBXAFyAfoB8wHsAdQByQHB + AWoBUQE9CQAB9AH3AfQDAAHcAe8B9wEOAXgBngEtAb0B7wEYAbMB7QEMAWIBgQHSAd8B3gHYAZsBWwH1 + AdoB3wHTAWUB0gH2AawB9gHxAaEB8AHrAZQB6wHnAYgB5QHhAXsB4AGNAS0BjAMAAb4BqQGaARYB6QFf + ARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfAfcB5gHeAfYB4wHa + AdEBwQG2AWMBSQE1CQAB/wGbAWcB/wHiAbUB/wHdAagB/wHVAZUB/wHNAX8B/wHDAWcB/wG4AU4B/wGv + ATYB/wGlASAB/wGeAQ0B/wGZAQABhgFBASAGAAG0AaABkQH8Af4B/AHiAukBXgF1AYQB3wHkAeUB/AH+ + AfwBwgHKAc4BSgFhAXABLgGpAdYBIwE1AUcBwgG+AbkBfwFpAVgGAAGoAcEBqwFBAYIBTAHYAe4B9gEO + AXgBngFcAdEB8wFDAcYB8QEsAb0B7wEYAbMB7QEMAWIBgQLPAdwB5QFwAeQB+wG5AfsB+gG3AfoB9gGw + AfYB8gGlAfMB7QGZAe0B3AFlAdsB+wHnAfoDAAHDAa4BngH/Av4BrAGXAYcBpAGOAX4BnAGFAXQBFgHp + AV8JAAEWAekBXwFsAVIBPgFoAU0BNwHRAcEBtgFjAUkBNQkAAf8BowFxAf8BogFwAf8BoAFuAf8BnQFo + Af8BmAFjAf0BkwFeAfYBjQFYAe0BhQFTAeIBfgFNAdUBdQFHAcgBbQFBAbwBZQE8BgAB3wGdAX0B8QHK + AbcBjwGkAawBhgHTAeUBSwFhAXABpwGSAYkBSgFhAXABYQHBAd4BTAFhAW8BKQG2AekBFQEnATMBEAEs + AToBFwEpATUBeQGBAYcBPQF0AUMBSwGnAWEBEAF9AaUBiwHjAfUBdQHaAfQBXAHQAfMBRAHGAfEBLAG9 + Ae8BGAG0Ae0BDAFiAYEB1AHaAfIB5QFwAeQB+wG5AvsBuQH7AfgBsgH4AdwBZQHbAfsB5wH6BgAByAGy + AaME/wL9Af4B/AH7Af0B+gH4ARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfAfkB6wHkAfgB6AHh + AdEBwQG2AWMBSQE1MwAB3wGdAX0B/wHFAaQB5QHJAbkBjwGkAawBgwHhAfYBSwFhAXABegHNAeIBTAFh + AW8BZQHSAfIBRQFdAXEBMgGyAd8BHQGZAcgBGgGIAbMBHwFTAW0BTwGEAVgBTAGsAWQBFQGnAd0BngHr + AfcBiwHjAfUBdQHaAfMBXAHQAfMBQwHGAfEBLAG8Ae8BGAG0Ae0BDAFiAYEB1AHaAfIB3AFlAdsB+wG5 + AfsB5QFwAeQB+wHnAfoJAAHMAbYBpwf/Af0B/AH+AfwB+wH+AfoB+AH9AfcB9QH8AfYB8gH7AfIB7gH6 + AfAB6wH5Ae0B5wH5AeoB5AH4AecB3wFjAUkBNQkAAZ4BhwF4AZcBgAFvAZABeAFnAYkBcAFeAYIBaQFW + AXwBYgFPAXUBWwFHAXABVgFBEgAB3wGdAX0B3wGdAX0B3wGdAX0B2gG6AaoBjwGkAawBgwHhAfYBSwFh + AXABgwHhAfYBPAFZAXMBZQHSAfIBUAHJAe8BOwG/AesBJwGyAeQBHAGjAdYBZAGVAW4BUwG0AWwB2AHu + AfYBFAGqAeEBnQHrAfYBiwHjAfUBdAHaAfQBXAHQAfIBQwHGAfEBLAG8Ae8BGAGzAe0BDAFiAYEB2AHu + AfYB5QFwAeQB+wHnAfoMAAHqAaoBiwHqAaoBiwHqAaoBiwHpAaUBhAHpAZ8BegHnAZcBbgHmAY4BYgHl + AYYBVgHjAX0BSgHjAXYBQAHiAXIBOQHiAXIBOQHiAXIBOQHIAWIBLzwAA/8B5gHrAewBjwGkAawBgwHh + AfYBQAFbAXIBgwHhAfYBdwHbAfQBZQHSAfIBUAHJAe8BOwG/AesBKQG2AekBdgGlAYMBXQHAAXgDAAHY + Ae4B9gEUAaoB4QGeAeoB9gGLAeMB9QF0AdoB8wFcAdEB8wFDAccB8QEXAZgByAHYAe4B9gMAAfsB5wH6 + DwAB6gGqAYsB/wHCAaIB/gHAAZ8B/QG9AZoB/AG5AZYB+wG1AZAB+gGwAYsB+QGrAYQB+AGnAX0B9gGi + AXcB9QGdAXEB9QGZAWoB8wGVAWUBzQFlATEJAAGeAYgBdwGXAYABbwGQAXkBZgGJAXEBXgGCAWkBVgF7 + AWIBTwF1AVsBSAFwAVYBQQFqAVABPAFmAUsBNwFjAUgBMwFjAUgBMxUAAeYB6wHsAY8BpAGsAYMB4QH2 + AYMB4QH2AYMB4QH2AXcB2wH0AWUB0gHyAV8BsgHPAXoBiwGWAa4BwQGmAZMB0wGaBgAB2AHuAfYBFAGq + AeEBnQHrAfYBiwHjAfUBdQHbAfQBFwGYAcgB2AHuAfYYAAHqAaoBiwHqAaoBiwHqAaoBiwHqAaoBiwHq + AaYBhgHpAaEBfwHoAZsBdgHnAZQBbAHmAY4BYgHlAYcBWAHkAYEBTgHkAXsBRgHjAXYBPgHiAXIBOUUA + AeYB6wHsAY8BpAGsAYwBoQGpAYgBnAGlAYMBlgGgAX4BkAGaAXoBiwGWAb8ByAHNAZkBuAGcAa4BwQGm + CQAB2AHuAfYBFAGqAeEBnQHqAfYBFwGYAcgBtwHfAe60AAHYAe4B9gEUAaoB4QHYAe4B9pwAAfgB7gHj + cgAn/yEAAfgB7gHjAZkBMwEAAfgB7gHjbwAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/x4AAfgB7gHj + AbUBYwE1AdgBmwFbAZkBMwEAAfgB7gHjCQABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFxAYsBRQFp + AYQBPwFiAX4BOgFcAXgBswHAActIAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/GAABlwGAAW8BlwGA + AW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQAB+AHuAeMGAAFJAbgB3wGDAdsB7wF5AdQB7AFv + Ac8B6gFkAcgB5wFZAcMB5QFPAb0B4gFEAbcB4AE5AVoBdzMAAewB0gHsAXIBJAFxAeYBzAHmDAAD/wMA + A/8D5wMAA+cD/wMAA/8D5wMAA+cD/xgAAZcBgAFvAwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGb + AVsBmQEzAQAB+AHuAeMDAAFOAbwB4gGOAeAB8QGFAdsB7wGmAYwBegGbAYEBbgGVAXoBZwFaAcMB5QFQ + Ab4B4wE8AV4BejAAAe0B2AHtAakBUAGoAYABMAF/AXUBJwF1AesB0QHrCQAn/xgAAZcBgAFvBgAB+AHu + AeMB2AGbAVsB/wHNAZkByQFzAUMB+AHuAeMGAAFQAb4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFy + AdEB6gFnAcoB6QFcAcUB5QFAAWIBfS0AAegB0QHoAaoBUAGpAcwBZwHLAX4BLgF+AZYBOAGVAXsBKwF6 + AfAB1QHwBgAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/AwAD/wwAAdgB7gH2CQABlwGAAW8JAAH3Ad4B4gHY + AZsBWwH4Ae4B4wkAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6AZwBgQFvAZUBegFnAXMB0QHrAWkBywHp + AUMBZgGBAVIBeQGRAUwBcQGLAUUBaQGEAT8BYgF+AToBXAF4AbMBwAHLBgABqwHwAfcBqwHiAeUBrAHO + AcwBrQG7AbUBrgGnAZwDAAHkAcoB5AGpAVABqAHTAWsB0gHUAW4B0wF/ATABfgGfATwBnwGOATUBjQF9 + AS0BfAYAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8JAAHYAe4B9gEOAXgBngHYAe4B9gYAAZcBgAFv + BgAB/QHsAf0BjQEtAYwB9wHeAeIMAAFQAb4B4wGmAe0B9wGgAesB9QGZAecB9AGRAeMB8gGJAd4B8QF/ + AdgB7gF1AdIB6wFHAWwBhgFvAc8B6gFkAcgB5wFZAcMB5QFPAb0B4gFEAbcB4AE5AVoBdxgAAaoBUgGp + AdIBagHRAdUBbwHVAb0BcAG8Ad4BmAHdAY8BRgGOAZ0BPAGcAX4BLgF+BgAD/wPnAwAD5wP/AwAD/wPn + AwAD5wP/AwAD/wYAAdgB7gH2AQ4BeAGeARwBtgHuAQ4BeAGeAdgB7gH2AwABlwGAAW8DAAH9AewB/QGz + ATwBsgHcAXAB2wGNAS0BjAH9AewB/QkAAc8B7QH3AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHY + ATgBqQHSATEBogHMAWkBvwHZAaYBjAF6AZsBgQFuAZUBegFnAVoBwwHlAVABvgHjATwBXgF6AwABqwHw + AfcBqwHlAekBrALVAawBxAHBAa0BtQGsAa4BpAGYAwABqAFPAacB0gFtAdEBvAFvAbsB7wGlAe4B+wGf + AfoB7wGdAe4BlwFSAZYBfAEuAXwGACf/AwAB2AHuAfYBDgF4AZ4BTwHLAfEBNAHAAe8BLwG+Ae8BDAFi + AYEBlwGAAW8BlwGAAW8BlwGAAW8B2QFsAdgB+gGtAfoB+wGYAfoB3AFwAdsBjQEtAYwB/QHsAf0YAAFQ + Ab4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFAAWIBfRgAAacBUAGm + AbwBbwG7Ae8BpQHuAfsBmwH6AfsBmAH6AfsBmQH6AecBmAHmAZEBTgGQBgAD/wMAA/8D5wMAA+cD/wMA + A/8D5wMAA+cD/wMAARQBqgHhAYUB4QH1AWsB1wH0AVABywHxATQBwAHwAR0BtQHuAQwBYgGBAdgB7gH2 + AwAB/QHsAf0B0wFlAdIB+gGtAfoB+wGYAfoB3AFwAdsBjQEtAYwB/QHsAf0VAAFQAb4B4wGfAesB9gGZ + AeYB9AGnAYsBegGcAYEBbwGVAXoBZwFzAdEB6wFpAcsB6QFDAWYBgQkAAasB8AH3AawC1QGuAbQBrAGu + AZkBigP9Ac8BiAHPAeIBrwHiAfsBqwH6AfsBmAH6AfsBmAH6AeoBkAHpAc8BiAHPAfQB5gH0BgAD/wMA + A/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAAdgB7gH2ARQBqgHhAYYB4QH1AWwB1gHzAVABywHyATUBwAHw + ARwBtQHtAQwBYgGBAdgB7gH2AwAB/QHsAf0B0wFlAdIB+gGtAfoB0wFlAdIB/QHsAf0YAAFQAb4B4wGm + Ae0B9wGgAesB9QGZAecB9AGRAeMB8gGJAd4B8QF/AdgB7gF1AdIB6wFHAWwBhhgAAfAB1AHwAc8BiAHP + Ae4BvgHuAfsBrgH6AewBkQHrAc8BiAHPAfMB4AHyCQAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/wYA + AdgB7gH2ARQBqgHhAYUB4AH1AWwB1gHzAVABywHyATQBwAHvAR0BtQHtAQwBYgGBAdgB7gH2AwAB/QHs + Af0B0wFlAdIB/QHsAf0bAAHPAe0B9wFQAb4B4wFQAb4B4wFPAb0B4gFJAbgB3gFBAbAB2AE4AakB0gEx + AaIBzAGpAdEB4hsAAfIB2wHyAc8BiAHPAeMBrAHjAc8BiAHPAfMB4wHzDAAn/wkAAdgB7gH2ARQBqgHh + AYYB4QH0AWsB1gH0AVABywHxARcBmAHIAdgB7gH2CQAB/QHsAf1XAAHyAdsB8gHPAYgBzwHwAeMB8EIA + AdgB7gH2ARQBqgHhAYUB4QH1ARcBmAHIAdgB7gH2aQAB/gH7Af5IAAHYAe4B9gEUAaoB4QHYAe4B9qsA + AdMBzgHLAaYBmgGVAYYBdwFvAXcBZwFeAXQBYwFaAXMBYgFZAXMBYgFZAXMBYgFZAXMBYgFZAXMBYgFZ + AXMBYgFZAXQBYwFaAXkBaQFgAYoBfAF0AawBogGdAdkB0wHSkAABrgF7AW4B1AGnAZcB1wGpAZsB1AGn + AZkB0wGlAZgB0AGjAZgBywGgAZkByQGeAZcBxgGcAZYBxAGZAZUBwgGXAZQBugGTAY4BtwGQAYsBogGC + AX0BkAGCAXsBzAHGAcRpAAP/AwAG/wkABv8DAAP/BgABtQGCAXIB8wHVAcAB+wHgAckB+wHfAcYB+wHd + AcMB+wHbAcEB+gHaAb0B+gHYAbsB+wHXAbgB+gHUAbUB+QHTAbIB+gHRAa8B9AHHAaoBwAGbAYkBhwF4 + AXEBygHEAcBsAAPuA4gDMwkAAzMDiAPuCQABuwGIAXUB9AHZAcQB/AHjAc0B+wHhAcoB+wHfAcgB+wHd + AcUB+wHcAcIB+wHaAb8B+wHZAbwB+gHWAbkB+gHVAbYB+gHUAbMB9QHJAa0BwQGcAYoBhgF3AXAByAHC + AcAVAAHxAdsBxQGZATMBAAHeAb0BrBsAAcgBvQG1AYgBcAFdAYMBagFYAX4BZQFSAXoBYAFOAXUBXAFI + AXEBVwFDAW0BUwE+AWoBTwE7AWcBSwE3AboBrgGkEgADiAMKA+gJAAPoAwoDiAkAAcIBjwF5AfUB3AHJ + AfwB5QHSAfwB4wHPAfwB4gHMAfwB4AHJAfsB3gHGAfsB3AHEAfsB2wHAAfoB2gG9AfsB2AG6AfsB1gG3 + AfYBywGxAcEBnQGMAYYBdwFwAcgBwgHAEgAB8AHZAcIB1wGaAVoBmQEzAQABmQEzAQAB4QHEAbUYAAGv + AZYBhwHpAeAB3AHjAdoB0wHeAdMBzAHaAcwBxAHVAcUBvAHQAb4BtQHLAbgBrAHGAbEBpgHDAasBnwFo + AU4BOQ8AA/8DTQMKDwADCgNNA/8GAAHIAZUBfAH2Ad4BzQH8AecB1gH8AeUB0wH8AeQB0AH8AeIBzQH7 + AeEBygH7AeAByAH7Ad4BxAH6AdwBwQH7AdoBvwH6AdgBvAH1Ac4BtQHBAZ8BjwGGAXcBcAHIAcIBwA8A + Ae8B2AG/AdcBmgFaAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAeEBxAG1FQABswGaAYsB7gHoAeUB6QHh + AdwB4wHZAdQB3wHSAcwB2gHMAcQB1QHFAbwB0AG+AbUBzAG4Aa0BxgGxAaUBbQFTAT4MAAb/A00DCg8A + AwoDTQb/AwABzwGcAYAB9gHhAdEB/QHqAdsB/AHoAdgB/AHnAdUB/AHlAdIB/AHkAc4B/AHiAcwB+wHg + AckB+wHeAcYB+wHdAcMB+gHbAcAB9gHQAbgBwgGgAZABhgF3AXAByAHCAcAPAAHYAZsBXAHYAZsBWwHY + AZsBWwGZATMBAAGZATMBAAGZATMBAAGZATMBAAHlAcsBvhIAAbcBngGQAfMB7wHsAe4B6AHkAegB4AHc + AX4BZQFSAW4BVAFAAWMBSAEzAdUBxQG8AdABvgG0AcsBuAGsAXMBWgFGCQAD/wMAA/gDCgO/DwADvwMK + A/gGAAHVAaIBgwH4AeUB1AH9Ae0B3gH8AesB3AH8AekB2QH8AecB1gH8AeYB0wH8AeQB0QH7AeIBzQH7 + AeEBygH7AeABxwH7Ad4BxAH3AdMBvAHCAaIBkwGGAXcBcAHIAcIBwA8AAdgBmwFbAdgBmwFbAekBtAF8 + AfwB1gGvAbUBYwE1AZkBMwEAAZkBMwEAAZkBMwEAAf0B+wH6DwABvAGjAZYB+AH2AfQB8wHvAe0B7wHo + AeQB6QHgAdwB4wHZAdMB3wHTAcsB2gHMAcUB1QHFAbwB0AG+AbUBegFgAU4JAAb/AwoDZBUAA2QDCgP/ + AwAB3AGpAYcB+gHnAdkB/QHvAeIB/QHtAeAB/QHsAd0B/QHqAdoB/QHoAdcB/AHmAdUB/AHlAdEB+wHj + Ac4B/AHiAcsB+wHgAcgB9wHUAb8BwgGiAZQBhgF3AXAByAHCAcAPAAHYAZsBWwHqAbcBggH7AdgBsgH+ + AdEBowH7AdgBsgGvAVcBKAGZATMBAAGZATMTAAHBAakBnQH8AvsB+AH2AvQB7wHsAX4BZgFSAW4BVAE/ + AWMBSAEzAd4B0wHMAdoBzAHEAdUBxQG8AYABaAFVCQAD/wMAA/gDMwO6DwADugMzA/gGAAHcAakBhwH5 + AeoB3gH9AfIB5wH9AfAB5AH9Ae4B4QH9AewB3gH8AesB2wH9AekB2QH9AecB1gH8AeUB0wH8AeQB0AH8 + AeIBzQH4AdcCwwGkAZYBhgF3AXAByAHCAcAPAAHnAbMBfAHxAcMBkQH+Ac8BnQH/Ac0BmQH+AdABnwH7 + AdgBsgGpAU4BHgGZATMTAAHFAa8BowP/AfwC+wH5AfYB9QH0Ae8B7AHuAecB5AHpAeEB2wHkAdkB0wHe + AdIBzAHaAcwBxQGIAXABXQ8AA/8DTQMzDwADMwNNA/8GAAHcAakBhwH5AewB4AH+AfQB6wH9AfIB6AH9 + AfEB5gH9Ae4B4wH9Ae0B4AH9AewB3gH8AeoB2gH8AegB1wH8AecB1AH8AeUB0QH4AdkBxwHFAacBmgGL + AXwBdQHLAcUBwQ8AAfsB6AHVAeUBsgF7AfQBwAGLAf8BzQGZAf8BzQGZAf4B0AGhAfIByQGdAbABWgEp + EgAByQG0AaoG/wH8AfsB+gH4AfUB9AHzAe8B7AHuAecB5QHoAeAB3AHjAdkB1AHfAdMBzAGOAXcBZg8A + A/8DTQMzDwADMwNNA/8GAAHcAakBhwH6Ae4B5QH+AfYB7wH9AfQB7QH9AfMB6gH9AfEB5wH9AfAB5AH9 + Ae4B4gH9AewB3gH9AeoB2wH8AekB2QH8AecB1gH4AdgBxwHMAasBngGaAYwBhAHSAcwByxIAAfoB5wHT + AeQBsAF5AfYBxAGQAf8BzQGZAfMBwgGOAeMBsAF5AfkB5gHSEgAB5gHdAdgByQG0AakBxAGtAaIBvwGo + AZsBuwGiAZMBtQGcAY4BsgGYAYkBrQGUAYQBqAGPAX8BowGKAXkByAG9AbUSAAOIAzMD3gkAA94DMwOI + CQAB3AGpAYcB+wHwAekB/gH5AfQB/gH3AfEB/gH1Ae4B/gHzAesB/gHyAegB/QHxAeYB/QHvAeIB/wHY + Ac8B/wHVAcwB+QHAAbcB1AGeAZQBrwGQAYcBtgGsAaYB4AHcAdkVAAH5AeMBzQHjAa8BeAHuAb0BigHj + AbABeQH6Ae0B3kgAA+4DiAMzCQADMwOIA+4JAAHcAakBhwH7AfMB7QH/AfwB+AH+AfoB9QH+AfgB8wH+ + AfYB8AH+AfUB7QH9AfMB6wH9AfEB5wH4Aa8BWAH3AaYBQwHpAZoBQgG7AYwBXwGrAZ0BlgHWAc4BywHu + AusYAAH4AeYB0gHlAbIBfQH7AfEB50gAA/8DAAb/CQAG/wMAA/8GAAHcAakBhwH7AfQB8AH/Af4B/AH/ + AfwB+QH/AfsB9wH+AfkB9AH+AfgB8AH+AfYB7gH9AfMB7AHgAbIBlAHnAbEBewGvAYwBawGjAZIBhgHL + AcIBvQHrAegB5QL1AfOQAAHcAakBhwHcAakBhwHcAakBhwHcAakBhwHcAakBhwHcAakBhwHdAaoBhwHd + AaoBiAHWAaMBhAHbAagBhwHxAd4B0QH0AfMB8mwAAUIBTQE+BwABPgMAASgDAAFAAwABwAMAAQEBAAEB + BgABBhYAA/8BAAHgAQcB4AEHAeABBwIAAcABAwHAAQMBwAEDAgABgAEBAYABAQGAAQFSAAGAAQEBgAEB + AYABAQIAAcABAwHAAQMBwAEDAgAB4AEHAeABBwHgAQcCAAz/AYABAAHAAQME/wGAAQABwAEDAeABDwHA + AQEBgAEAAcABAwHgAQ8BwAEBAYABAAHAAQMB4AEPAcABAQGAAQABwAEDAeABDwHAAQEBgAEAAcABAwHg + AQ8BwAEBAYABAAHAAQMB4AEPAfABBwGAAQABwAEDAgAB8AEHAYABAAHAAQMBBgEgAfABBwGAAQABwAED + AQcB4AHwAQcBgAEAAcABAwEHAeAB8AEHAYABAAHAAQME/wGAAQABwAEHBP8BgAEAAcABDwT/AYABAAL/ + AQABHwEAAQMB8AEPAfABDwEAAR8BAAEDAcABAwHAAQMEAAGAAQEBgAEBBAABgAEBAYARAAHwBwAB8AcA + AfAHAAHwBwAB8AEAAfAFAAHwAQAB8AUAAfABAAHwAQABgAEBAYABAQHwAQAB8AEAAYABAQGAAQEB8AEB + AfABAQHAAQMBwAEDAfABAwHwAQMB8AEPAfABDwT/AcAH/wHAAX8C/wGAAT8C/wHAAT8C/wGAAT8B4AED + AcABHwIAAYABPwHgAQMB4AEPAgABgAE/AeABAwHwAQcCAAGAAQAB4AEDAQABAwIAAYABAAHgAQMBAAEB + AgABgAEAAeABAwQAAf4BAAHgAQMEAAH+AQAB4AEDBAAB/gEAAeABAwQAAf4BAAL/AQABAQIABP8BAAET + AgAE/wEAAR8G/wEAAR8C/wEAAfcCqgH+AT8C/wEAAeMBAAEBAfgBHwGAAQEBAAHBAYABAAHwAQ8BgAEB + AwABAQHAAQcBgAEBAQABQAGAAgABAwGAAQEBAAFgAQABAQEAAQEBgAEBARABcQGAAwABgAEBAYEBYwEA + AQECAAGAAQEBgQFBAYADAAGAAQEBgAIAAQECAAGAAQEBAAFAAYABAAGAAQABgAEBAYABIAEAAQEBwAEA + AYABAQHAAREBgAEAAeABAAGAAQEB4AE7AVUBQAHwAQMBgAEBAfABfwH/AfAB+AEPAYABAQH4Av8B+QH8 + AT8G/wEAAf8BAAH/AfgBAQL/AQAB/wEAAf8B8AEBAcABBwEAAf8BAAH/AYABAQHAAQcDAAH/AQABAQHA + AQcDAAGPAQABAQHAAQcDAAEHAQABAQHAAQcCAAEYAQMBAAEBAcABBwIAAYABAQEAAQEBwAEHAeABAAGA + AgABAQHAAQcB4AEAAf4BAQEAAQEBwAEHAeABAAH+AQEBAAEBAcABBwHgAQAB/gEBAQABAQHAAQcB4AEA + Af8BAQEAAR8C/wHgAQAB/wGDAQABHwL/AeABAAH/AccE/wHgAQAC/wHzAfcB/wGfAQAD/wHBAeMB/gEP + AQAC/wGBAYABwQH8AQcBAAL/AYEBgAEAAfwBBwEAAv8BgQGAAUABAAEHAQABjwH+AQEBgAFgAQABBwEA + AQcBAAEBAcEBcQEAAQ8BAAEDAQABgQHjAWMBAAEfAQACAQGBAcEBQQEAAQEB/gEAAQEB/wGAAgABAQH+ + AQEBAAFAAQABQAEAAQEB/gEBAgABgAEgAfwBAQH+AQEBAwEAAcABEQH8AQEB/wEBAf8BwAHgATsB/AEB + Af8BgwH/AcAB8AF/AfwBAQH/AccB/wHAAfgG/wHAAecH/wGDAf8B8AEABP8BAQH/AeABAAT/AQEB/wHA + AQABwAEDAcABAwEBAf8BgAEABP8BAAEPAgABwAEHAcABBwGAAQsBgAEABP8BhAEgAYABAAHAAQMBwAED + ARwBOAGAAQABwAEDAcABAwEsATQBgAEAAcABAwHAAQMBHAE4AYABAAT/AYABMQGAAQABwAE/AcABPwHA + AQMBgAEHBP8B4AEHAYMBhwHAAQMBwAEDAeABBwHDBf8B4AEHAeMG/wH3B/8B4wL/AQABAwH/Ae8B/wHD + Af8B4AEAAQEB/wHHAfsBgAGPAcACAAH/AYMB8QEAAQgDAAH3AQEB4AIAAQECAAHiAQABwAEBAQABNwIA + AcEBAAGAAQMBAAEvAgABwAEAAYABBwEPAd8DAAFBAYABDwH3AaECAAGAASMBwAEHAfgBYQIAAcABdwHg + AQ8B+AFhAgAB4AH/AfABHwH4AWECAAHxAf8B+AE/AfgBYQGAAQAB+wH/AfwBfwH4AWMBwAEQAv8B/gH/ + AfwBfwHvB/8B+AL/Af4C/wEAAQ8B8AF/AYABAAL/AQABDwHgAT8BgAEAAcABAwEAAQ8BwAEXAYABAAL/ + AQABDwHgAQMBgAEAAcABBwEAAQ8B4AEBAYABAAL/AQABDwHAAQABgAEBAcABAwEAAQ4BgAEAAYABAQHA + AQMBAAEMAgABgAEBAcABAwMAAQEBgAEBAv8DAAEDAYABAQHAAT8DAAEHAYABAQL/AeABAAGAAS8BgAEB + AcABAwH4AQABwAF/AYABAQL/AfwBAAHgB/8B8Qb/Ae8E/wHAAQEB/wHHBP8BwAEBAf8BgwGAAT8C/wHA + AQEB/gEBAYABPwH/AeMBwAEBAf4CgAE/Af8BwQHAAQEB/gHBAYABPwH/AYABwAEBAe4B4wGAAQABwQEA + AcABAQHGAccBgAEAAf8BAAHAAQEBggGDAYABAAGBAQABwAEBAQABAQH+AQAB/wEAAcABAQEAAYAB/gEA + AeABAAHAAQEBAAFBAf4BAAH/AQEBwAEBAYABIwH+AQAB/wGDAcABAQHAAXcD/wHHAv8B4AT/Ae8C/wHx + B/8CAAb/AgAE/wHpAcsCAAT/AfEBxwIAAf4BPwHgAQMB8QHHAgAB/AEfAeABAwLjAgAB+AEPAeABAwHD + AeECAAH4AQcB4AEDAaMB4wIAAfgBAwHgAQMBhwHxAgAB+AEHAeABAwGjAeMCAAH4AQcB4AEDAuMCAAH4 + AQcB4AEDAuMCAAH8AQcB4AEDAfEBxwIAAf4BDwL/AfEBxwIAAf8BHwL/AekBywIABv8BAAEPBP8L + + + + + 221, 245 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy + CwAAAk1TRnQBSQFMAgEBBAEAAUgBAAFIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD//8A/wD/AP8ACAAC/wL0 + AvMC9AL/BgAC/wL0AvMC9AL/BgAC/wL0AvMC9AL/BgAC/wL0AvMC9AL/BQAB/wH0AfIBBwHvAvcB7wEH + AfIB9AH/BAAB/wH0AfIBBwHvAvcB7wEHAfIB9AH/BAAB/wH0AfIBBwHvAvcB7wEHAfIB9AH/BAAB/wH0 + AfIBBwHvAvcB7wEHAfIB9AH/AwAB/wH0AQcBkASyAYsB6wGSAfAB9AH/AgAB/wH0Ae8BcQFOAk8BTgFx + AesBkgHwAfQB/wIAAf8B9AEHAXQEWAFSAewBkgHwAfQB/wIAAf8B9AEHAW4ERgFFAesBkgHwAfQB/wEA + Af8B9AG0CLIBiwHtAfAB9AL/AfQBnQFOAXcFlwFPAXEB7QHwAfQC/wH0AZkBWAZZAVgBUQHtAfAB9AL/ + AfQBkwFGAUwETQFMAUYBSwHtAfAB9AL/AbsKsgGLAZIB8gL/AZ0BcAiXAXcBcQGSAfIC/wGZCVkBWAFR + AZIB8gL/AZMBRghNAUYBSwGSAfIB/wHyDLIB6wEHAfQB8QFwCpcBTwHrAQcB9AEbC1kBWAHsAQcB9AHy + AUYKTQFGAW4BBwH0AboMsgGLAe8B9AGdAXcLlwFxAe8B9AGZDFkBUgHvAfQBkwFMCk0BTAFLAe8B9A6y + AfcB8wF3DJcBTgH3AfMBWAxZAVgB9wHzAUwCTQh1Ak0BRgH3AfMOsgH3AfMBdwyXAXcB9wHzAVgCWQN6 + B1kBWAH3AfMBTAFNAZoI/wGUAU0BRgH3AfMBsgazB7IB7wH0AXcFeAeXAXcB7wH0AVgIegRZAVgB7wH0 + AUwBTQGaCP8BlAFNAUwB7wH0AbIBuQO6ArkBswayAQcB9AGXB3gFlwF3AQcB9AFSCXoDWQFYAQcB9AFN + AnUElAR1Ak0BTAEHAfQBugG5BboBuQGzBLIBswHyAf8BmAF4BJgDeASXAXEB8gH/AZkBegaaA3oCWQF0 + AfIB/wGUAeMGdQVNAW8B8gH/AfQBsgHcAQkC3AK6AbkBswOyAbsB9AH/AfQBlwGYAggDmAJ4ApcBdwEH + AfQB/wH0AVgHmgJ6AVkBWAEHAfQB/wH0AU0ElAN1A00BTAEHAfQB/wEAAbsBswMJAdwCugGzArIBugH0 + Af8CAAEIAZcDCAKYAngClwGYAfQB/wIAARoBWQGgA8MDmgF6AVkBHAH0Af8CAAGaAU0DmgGUAnUB4wJN + AZMB9AH/AwABCQGzAdsCCQK6AbMBsgG6AfQB/wQAAQgBlwGYAggCmAKXAZgB9AH/BAABmQFSAZoDwwGa + AXoBWAGZAfQB/wQAAZoBTQGUApoCdQJNAZMB9AH/BQAB9AG6AbICswGyAboB8gL/BgAB9AGYAZcBeAKX + AZgBGwL/BgAB9AGZBFIBmQHyAv8GAAH0AZQETQGTAfIC/wMAAUIBTQE+BwABPgMAASgDAAFAAwABIAMA + AQEBAAEBBgABARYAA/+BAAHgAQcB4AEHAeABBwHgAQcBwAEDAcABAwHAAQMBwAEDAYABAQGAAQEBgAEB + AYABAVAAAYABAQGAAQEBgAEBAYABAQHAAQMBwAEDAcABAwHAAQMB4AEHAeABBwHgAQcB4AEHCw== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAB9klE + QVQ4T4WQ3UtTcRyH9wf0YgZdhSR0UzdZEGW4CirtBXrFSigwTVplEAV5kXVhCMaUooJM6sIhtVKZEKy0 + Vstk1Bi4Zss3zNFom2dDLFbzeM58OufIGdQO7eKBD18+Lz9+JkAj5DrFaG8FfocZb0ehclq45yIjxlxV + pMVB5GQnHvs65ZRtNsL0te8YE/0WBt27SM+6kRINONvXcLthBS1X8hWPcVDHFHRWkJYCyKIX6Xc38s9r + JEPHEYKl1J9dqXiMgzomv6MYeaYDMW5FnGlEilfxY2QHX94UUV6Wp3iMgzomT9tynK0FdN8pIBWtYfqz + mTOHl7J1/WIOlCxRPMZBnYxoayokMbyboZerWLt6kXLKNhuREU0X87hwIp+Te5dxdOfC57V0xbE+EzRu + 2gXqHsY4fy9KZXOE7XVhii99S/3V9i9qge09PHo7T+srGWvPHDc6Reofz2K5/4vNtYHcBc3q+lOB67Yp + qm9FKG/8TtlVZf1ymKLTvv8XPHH6kOflLFJzEpOxFCUHzxkHdfQCt3dcQ9W9AyMKowQnomw7Umsc1DF6 + gbo+nZTwBcO5C9p7PFpIXXd9GNPCjtdDdPUFGPBP5i54YHdpBVPxBKGIQGA8xsdglHefojzvH8Z8KMcf + 3LW9YENpJZv21bBxT3UWW/Zb+AOFZ/s9gjvb4gAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZDdS1NxHIf3J4gSWFoaU8GKJCmswEbNrFab + rS235ta2c3Jtq72VKaQRZOsNGhQLloUOY4k1M0qlFjYsuujGiF5GBF134f/w5Dnb3AvdiB/4XJ3zeb4P + P8Wak/nxk2AwiCctyHW/F+ids2FPmjg1pkd/T4Nm+ACHr6l35CalsZh7WFr6K48Tvx/y5NcD4pn7PP4e + Ifb1NtHF68QXR7GEzOQmpZEMmrdvkQHxTJRVG+UNXCk7j77dZdVGCwtpGpqUOF9aiH4JywbFRkdvdJT0 + bMpB/+wlupzaLEAUnfLFnoSRyOehFYO8kTRK/ZlZqQQIPPezT9teMNis3MTJmJbwx4uUG0mA7hEdtkkT + Z5bfQjLzPnWzrW1rFhAIhOSLujudDM17KDe69amf4Q9Brsx7GXgrcmHWinvMS42ypmBQ31hH56CKvrnT + skGx0dW0j8F3ruVvdgKvzXhe6BFiDirWVWQBPn9QvqjytXFu2kC50cAbgdBMD+enjbiSWhwThxAjzgJA + uljXsJHdjhbEpCAbFBv5X5lwTx1HmDyCLaHGFG/HetNKbXNtFiBFGu0VW7H4zZQb9T47hn3iIJZxFcbR + PXSNtMqAqg1VBUBxyo1s41ZMsW6MEQO6sA7NZQ0n+vRUVlf+HyCl2KjDoGbX/p00tTSyvr5aHuab+30t + USj+AR9n0X2919e8AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHSSURBVDhP3dDdS1MBGMfx/QneBIVeDENBKrqpvIgJMalO + Osdca2cb8+34MkXm0UmydDXTlkOOlUaslOzFzopOUpJ6crBarWB1VTeLoCjavzG+6YhAOHYb9IPn8vnw + ex7Tf5RCoYCiKNzOKiQyca6mJri8OkZkeZhQsp/AnU7kpSDqG5XfK9tjrjKzlVl9nOzPNOnvOs++PObu + p3muvZ9mIhshtBpEvjFgDKhJlWg0yqQWIvMjRUOsftv0bLQhPezAOygaAxXmilKD8P0+9K8rpaWNb8// + zBbQeq8Fe7vNGNA0DVmW6U340T6rJeDMrSb8j9x0rvnpfdmBb8FDnc3y9x+0z7lZ/HiTK7n45t1jjKbP + Elzrp+uJhHjdzf7afTv/QJIkvDPNzH1QuPT2PJFXI8h6kJ7lLnxLPpzTzZTvLTcGKqsrKRaLOOKNTL0b + J5IZYejFAIGn3bQ88OOYd2K72EjZrjJjYF1fR/SICKPHufA6zHBqkL6VAG3JVlwLLk7ONiCcE3YGag7U + kM/nschHGdqs7Vv04kmIuGZOY59s4lRYoE6yINgEYyCXy2F32KntPoI3KOKQ7NQ7rRw+dojqg1XsMe/G + esJKbCpmDPyjmEy/AEn4KbUnMluRAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACX0lE + QVQ4T33R21MSURwHcKb3Xnpqpofe/Bf6k2pSayYuhetyW5BELpIyYNioWAYyE2il3AQW4rJGygqSmuRg + SDRGWdM0NU59293aQsUevjNnz/w+3z1njgRAx9ybqnTZ7UVGp8u6VarMhU4zfDpucvgSF7BsCxOTm5h5 + uP6NorIuruj88dkjH3xEzDAtOFwskvR7LMXriMVrP72+yqFWl+OLzonz/8VPF5rIZL4gnfwMOnmAWLSF + QGAP0w/KhxSVd/JFp+L5xw0k4gdYXNzH3HwTjzg4669h2rMNl6sCq3UV+oF8vSMOBOsCDAYb8Hl34fFU + MT6+CYejDJttBUbjc0hvxNHTGxJwF49Z9qOAvb4a/P5dzNzfweTENtzuDThdZdyxszCZCtBTecikCVzt + DiEwlxUK4J0twWorYGKqCvddDoxWMGIvwW5bg9Vc5OAKBm+/gE6Xx03Fb8wUcth+s/NDotbS8PrXoKVS + MA8vw2xZgWmogEFjAcYBBgbdMgxaBhp1FkplCt09YQF/+P4OhCpWk8gUIew06wgnVqEkolCraXBvLvyN + onLQcrCfzIDoS3N3/oel8lDtyuUFSPpVM1vDIxG8/dRAbb8Oqz0BypCCRsNATeZBklmQRAq91yLt+DWP + +QeQDFryZ5REzKAkQohnSsJAMveSuxLN4TQU8hP4lYiFAnGh1acuEmS0OjxKo9rYFU4zOvYMMnkYdDop + 4o12zOfvQgxBxq/3kVE8ibDY/9oU4B+8fhzzOfIhhlQnzipuRYp8CX+aIVtqqxPmc2KjPc6xgkWlWSqd + hgFIfgHBM/JDRsjR9wAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJZSURBVDhPndDtS1NhGAbwQRD0vf+hT30piCyDZFFB7zLp + DUrEdOZybLqp58yOS8ssVy6zjQ4qIqLiy0hZ5WQt5/Jl1lbhWObL2sbUbZKSZVBtVzvP2TRxH6Tr4/3c + 94+LR/Bv6rqn8MoZOgFgW3y09WhaXLE7QNvp9t1tnUiNj7eWZwYfbteOAVEgEFrBo+6p7/Enkrb+T7rG + rhE8aLGjts2J+Hg9DQ2WiLp6GNEYMB9ehmEowJXZ3mmaamrusZPDxeVV0lChtW0GGIaJMpVWrgAWYsCg + w4cO0zT6bF7M+oNY+fGTHHOR3e9HAzv5u6vDB4vl204CaDSWSJn6NRDhAddnP9TsKAbsnk3A9fJ2eLxh + sHo39PUuvg3D2P7QN81kIQGU6axJgRxVC7xziwSo1bxPAL2/SlUbAckdQ1Igm2pEYGEJ+icu1FS/4wEl + bVwtoU1kIQGImfakQGaxDvOhJdTXTaCqcowH8uStcyXURiBL1ZwcUOrIzkONEyrKCsF+kWzH0QulkBb2 + 4XH96BqQSTWtAd5AGEarGzk0C8eEB19if3CvahwKhZlvcCRDnsohRcqXeMqOE+BKsR7WDwEMOybJYbm2 + C+MfZzDtDcLjD0Fd/gYFBS94gEtaRuHeBJIAuLoFFU0wmOwYeusm81lfEJMzcyihLLgm7lkHuAhFst3H + LtIEOXTuBvYILyM31whx7nNIpQOQyc2glIOoUI9AVWbFVQm7EeCSJlLsEp4vwoFTYuw7no2Uk3lIOZ2P + g2clMVSCw+kyCNPpr2eybrkv5df0xs/+NwLBXxNmPntHx4OgAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAAB7UlE + QVQ4T5WS32tSYRzGz78y1mh0IQwJuuqqISNm80b6cRUFg4ERjA1GGxGMCLICTTNXZ6ZubY50c1ux00xN + hBIrU1bddGGEFnObZs5Njz697ytz53jsYg88nON7vp+Phy+HA8C6FP56yv/2G3zBDSwICcysxuDwRWH3 + BGGdEWB2viJjjVlpmzApeG8U+XyeHClzsu8KvSgFBFRTOJsrwjq73lZA//2/AvratvkgzC4B9/mVowsW + Q18YJO1BqmINpXKF7GAN2stjcXKkFLwIpMhVmXq9zuDfWyXMv/4ME7/gIsdKgUf4hFqtTu7l2a+I2C6U + kc4W4I+kcc3yA8f6rGrySC6YfRmHSF5VGpEI/5T2kdn8i8CHHEaf/MKzUBU9eqdCwrn87ygjS3mvis2d + XYQTW03YuAycv53GiQGHTMJNeyMMOghdXL64h0hqB8P2LBzBKu4S2MADlx7sQjOSRLf2aVPCTXlCDZJE + ujgKn76ehHrwI+4RwdWHBVaVfg5d/UxAEY6zPV9nMI10cRvfc3ifykB76yf4NzUGX7yTxvFzTjp6uAOL + e40esI+ltV4hxgQT7gasu5FA11k7HT8U0EH6lbX2wtBNjE4+YgIKD4wn0GsIoFNjkgukP9qVClS6x+g4 + Y2xW+lw2fPSC+welbCDidGY6DQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABgSURBVDhP3Y1BDsAgCAR5G/9/D9cazM5Ftzbp0UlWREeM + C6iqZ42uNqzbS2bOhip/w7r2UPSe0NsBpyC+Zf4EfdAPiOulepjKQ1elehDJ7wGnKtWDSFwv1dPCV6Te + Q8QAl/dJ+3TnvwcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABhSURBVDhP3Y1RCsAwCEM9m/c/j78bYjLcyCr77B4Eq03U + fkhEHJNg1aTB3S+pHlYNA6sKq4ZGSvWwavqltwrrnfygpgUUooUy9kr1OaJF/5i0XPC8oirfiBY5+CpE + 98bsBG4CVl6Q3X7mAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAESSURBVDhPYyAWdK969b9pycv/pbNf/E+b+Px/ePvT/151 + j/9DpQkDkAGLDv3/P3Xn3/8tq3/+L5r37b9h6lnSDEC44Nn/MKALXCruE2/A8m1n/iODH7/+/Tf1TP5P + 0G+uxTu5A0q2psIM2HP8xv9lGw//f/3pL8IAbH5LSzvD6l+0PiC0sv6fZWD9l7lrDv3/8/cfUOOf/zee + /Pp/5MZ3bC5A+C28vv6fRVj9M9f02dYgl0xfthusAR3j9JtX2hw7sB8IAVx+C8xYKwZVgj+ccPnNJaH+ + n1/B2miYATjTAC6/eWTOcQurrv+nFVb/B1c4gQ3ABzyiJ/L55K/2xJkGiAU40wCxAGcaIBbgTAOUAwYG + AJr6mZ5ldm01AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFNSURBVDhPY8AF3jy9+f/PFpb/dy/s+A8VIh7ANP8/k/Z/ + dY0G3IB/L//+v5594z+IhgphB8iaFxQpwhWDNP9f9h9syJ+rf3Ab8m4tD1gziJ6cLoViwDOnJ2BDzsqf + xm0AsuaL+2ajGPAnDqIZrwFtbW3/W6OF/p/Y0P7fKyAMrhDkd5hmnAYga4ABmBiI/n34N1gzPAyQQxab + ZhjAKYcesi8/vPxv2aT9X69O7b96lRKYj+wCsCZkgB6yIM2Tr3f87zhb9z9zcwrcEKhyTEPQQxak2LhJ + 53/8+qj/8Suj//vP8f0vUy75/8OH7/+LZz2H4+fPP0MMwhayIEM08tX/ywCjEYRBfJCm6fv+/F944Pf/ + po2//xuGLfr/5MkniCEYIYsFPHz44b+q79z/SXN//Y9oewjGID5Umjhw+vRTsCYY3r37LmkG0AAwMAAA + tqlSvGZSt54AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABbSURBVDhPzY5BCgAxCAP9/0d9xhY1ktLDovbSuaRkkEbe + 4RuA0wCFC1X1t6Xx0xMUKapJdjFe0AWngRWNnzPJIapJrLhe0AWnAQoXjSUERYpqkl2MF3TB6Q0iCwgM + HTn+NhLLAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEnSURBVDhPYxjm4Pvb8/8f7wsA40d7/f/f2+H5/8YGx/+X + Vlr8P7PI8P+jiyv/Q5ViByCN398u+//19YL/X57P/P/p8cT/H+91/n93o/7/60ul/9ty3Akb8O31/P9f + ns38X9W9/H9+45z/6VVT/7++WPz/5enM/41pzoQN+PJsxv9PD/v/v7/T+v/ttZr/ry4W/X95Kv3/06Mx + /2uTHCAGEPLrzf2Z/6t6lv3Pa5wNdsHTw1FgtVVxNhADQBxCfn11Pv//8xMpQM2RYEsebHf5Xx5liTCA + kF8nVgb97y70+d+S6fq/Lsn+f0WM1f/TBzYjDCDKr7jAoz1+/z8+6Pv//nYrfr/iAveBgfb+dvP/N1cq + 8fsVFwClqPkdcf9nNkTg9+sgBAwMANsQU5TL62k1AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFeSURBVDhP7ZHdK4NhGMbf/8mBpFBKKzU1RKKUzFoRSeJg + FOWrRtGSz9rQhlnYshiSTbT3QBtlw0Z7xxR24N0yU5fneTa0ev4B5Tr/XR/3LfwrV1e3D7DYz2C0ujFr + PsSkcQ/6OQdGprcwOGVF37gZPaMmOPZPkUVytUrgb32kPyEn3vEcf0P08RU3dzFcBCIQ/WGou/V8A5PN + w+A0gRPJFIFlSAS+vn+CPyBB9IXgEYNoaB/mG8xbjhgsJ2myDJVah+KqNuQpmkhyCG4CuzyXqNb08w0M + JheDX0htKRYntWlyBF5SmyZT2HFwDmVjL99gYmGHbZZimc2qZh1Ksg0obCfwutOLsrpOvsHYzDaiFCab + 2cF84Z/aNNnqFLG8eYKiyla+wZDBlqkdpNf+3UxhmrxC4MW1YxQoNXwD+l964VrtAKtPtyrqu1Ba08FS + Cyu0yC9vwdLGLt/gL0oQvgBfyDULH4KzUwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD+SURBVDhPYxic4Nu7G/+hTNIBSPPDVSL/yTIEpvnr3Zr/ + J2aIk2YITPOXe3X/P1/L+P/pTBBWQx6/+4FpKNzme/X/P1/P+v/pbMj/j0fs/r/fo/W/MYkHbghIc/Ts + G/9RDIFrvt8EtDnn/6dzYf8/HHEAatbBqnnm2f//nYtPohoCAvMq+P5/Oh/x/+Mxp//v9+qBNTdPWfu/ + sGX+//SqqXDNINx5+CemISCbQIa836eP02aw5iM//xdu+/g/csXL/wzGM1FdATMEl+YOqOaoFS/AmjG8 + AQIwzTAAUmSavBXsbGSbsWrGBWCGRK4kQzMMgDWRqxkGKNKMHTAwAAA9wjHTfNR4mQAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEkSURBVDhPY0AH397d+P9wlch/EA0VIh7ANH992Pr/xAxx + 0gyBaf7ysO3/l2vZ/z+eDsBqyN83fzENhdv8oPX/52s5/z8BNb8/YPL/7VbZ/41JPHBDQJovpV7+j2II + XDPQZpjmDwdMgZplsGr+tfYXqiEwP3+5DnH2B6DN73DYDNL8a8bv/7cL7vzv0e2FGAJSNK+CD6jZH+zs + 9/v0wZrzG6bD8Y2cm9g1wwDMkHfbZMA0zGaQZhANUrzJZjN2zTAAMwSmGQRgBoAASBNI86N73zE1wwCy + ZhBANgAEQJqjZ9/4//jdD9yGIANkA0CaQJpnnv3/37n4JHGGwAxA1lyz5SWYzWA8k7AhIANAmCzNyACk + 2DR5K3maYQCsiVzNMICpmYEBAH1DheFtxXWhAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADwSURBVDhPYxj84NKzH/9rNz39//zj7/9QIeLB2cc//1es + f/y/a++7/5UbHv+/9/YX8YZcfv4LqOnJ/wlHvv2fefb//75Dn8GGXHr2k7AhV1/8/l8NdHb3gS9gzSC8 + 8MK//3NPfvqvGbWBsAE1m5//n3j44/+55/+BNc8Hat504/d/Ob+V/xmMZxI2IHr2jf9N21+BNS2+CNGs + Eb4eoplYA0C4ZsvL/+uv/flvmrwVoRmIf/3+i9+QGKgBIIysEYT3nX5K2AX7b7z/HzXrOoYBW488JKwZ + Bg7d/AA2hCzNMHD09kew5jV775GueagABgYAPyPNIjxmaVoAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF6SURBVDhPndDNSgJhFAbguYCIFkVdRK6iK7BNl9DPKnBf + mBREi6BFUUGLFkmotJB+aBEVSZCroB8oLGshaqOiYjnoNE6Opos3z+fM6DiC1oFh4JvzvOd8w7WWkg8h + cdwPeqtH3ZeOsy7c7w4iH/N1H6JjwYVicgPfEQcL6WqTxmQ3w3J4HvLLNKQ7qyGkkqmaw0yTa7jwXMO3 + VojXw8idD2FlpoeFpGbTMIW8HwygJGiTHZCb8UUdF8JviNiiqF5VzSHe5T51sobHIPqNmBBhespnZRam + h9Bq7sXe+p1pMmF17WggoOOKrwLlVIHsLSDnzBlDSmKUhYh+i475WBBTeyHEwkUEba9QThR87UsQdgSk + 1zKILyWwadlqXEXbpBk7nwCr/YGFuEc9yG5nkVpNgV+IM2z6oQSb8frND+YuJT2EEG/n22OqZL5swhOH + Hxj3JMGNOEHf/4aPPg2Y+tpiraiJ1iU82TJZbelcWsi/sFYM1fBjXO6AOe4XLrzzETlvl4sAAAAASUVO + RK5CYII= + + + + + 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 + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAAB+UlE + QVQ4T6WRX0hTYRjGve0iiAq6CovsphHWRaXrogshbEIgiEzbjFLQq266WZG76I8kRIRtIZJhW2NOq5Ga + uTkbrmZzf2gyTY8ipIwlYkJIIZP563xHZhtbF9YDz3l53vO9v/N93ykA/svKo883w5vRaZzeKV6NxOh1 + R+keimB7G8TaF6DL6afzpY+OHi/tdg9PbG5M1iF5NAOwU53WNIiyBRBfFvpmbGJeX0bk3FFsxQdgc/OP + ZYnya30Dly+aDegdnhCBGV0ZX8+r8JwppPXIbqWXqeRGisTKmnwEVzbAPhgWgeGSw4yWHsJyfD/Gwl1K + b3ZZwuxro8nRwE2rAU90TDl/FkBclNBT1T7aj+1VhtOA+wN36ZFsNIcMXLbrqL1VqwBOXagXr7cAz15/ + ECGvah5Wc3u8GV3/JSpM5aj1pbmADsd7EfKq7o6Oxu56Kswa1DfOojVocwHiv6aVkq/aE17F5Iyznkzx + 6YufymsXOVFVTPX1KryxAOYXrmzAY8s7EbaHVXUhtMYwLc8l1n4mFS8u/WBqfoXI9FLuDtIAMVxUE+SR + I4W6McRJ/QAtXRJzi6vMLnwnKi3z8XMcsT4vYI/Gz9V7KXkHkxRVDnKw3ELJlX7cgThjEwnGYwlGggt/ + B4ia6TbZDzqze2nnAERjp94G/Lsp+A2CB/zdurHUfAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAABzUlE + QVQ4T6XQ70sTARzHcf+d6LFl9SCDCLPlw6hHMcqUehZalFFSFIRaD1zD/DFyLmQYThxbusm5TVvbSlxy + 5WCKLWYyV2qaMr273t6d7IiaG9SDN3zh7vM6uDLgvzKO4VCCPxsURJyj0zjcUa2W34f5jEMbSIr8Vztq + 3QMBDlVfLogYh2v8Y8FxTpKxvvTheyPmkdaCwID/gzH0Brw8DD/n1vh9PLEQ4XezHK2p0wGt/EbLOPq9 + 7/Wx8HaMC75zmMVJTnmHqHxRi19FrI5R2u2v9wf6hiM6YO11cdx9g2Mj9ZgeTXDwwQmaHM2kljZ0oPz0 + JfX1AoBtcEIHPP4Zqp7EONBxkoqbjVSa27D0dpFIrRQHOp0CsqKQyWS596yfmtvNmK6103i3g8nwFDNz + 34oD2p+WVGBrW+H76g9CwSCRaIzP6WWSi5tMJ0sA2sOc9AvbmEyLK8cdxzoNPVmuWtOYn84T/ZQtDWxs + KWTXJBZXdlhY3ib5NYeY+snU/DrB+FJpYHVTplX9epN9jetdGeosX7jYluT841l8sXRpQPu6OJchHF9A + iCRwC3Gcngh2VwjbqwCWvpHiwOEztVSY9jpy9opx59PG+wL/FmW74+QAuamdTsIAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAGpJREFUOE+djlEKQCEIBDub9z9Pvz0KdhAxeSkMYbsNjT1zztUFgZmdi9cTQRcE + Mv6l/MEORbZ7EPiweiCUIYihF8TdgyALK9RHEMMbsYsgCyvURxDDG7GLIAsr1EfQBYGMryeCLkfQnzE+ + Nhr5FNl/PegAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAACLUlE + QVQ4T52TvY/ScBjHuVIRKHA9JAgnL+VoC7TX0kLLS6EvFBTa0uj5J7gYF+PsfpOTMrg4ORgHY+LCYJwc + TYyJiYuDLu7GxHgxd/Hnr5fA8TZcrsmnzfN9nufTNPnVBwDw2ZYljGzr3ciyTNu2EC87L75eb+DvD67f + hU9g9vt/HNs5cMaOf9Owohro7YNbe8PhjfuzzBOgkDuabk6bbRXoxuBkNLIeus6yhKyIwY5umo5tHxmG + +Wwu8G5QkIa0jN5gqnR1oOkGuOk6b1x3jHl9uaWGhpb1UtXNY1luPmJ4KbIkmAElAcgD3egfa5oJxq77 + oq3ovKJoE7XbBbwoTWhG2F7cWRJ4dFR1S9fNCvykT41mB9TqjSOxXvtJM9zrYokLrc4vFYtUBcngq9Lf + tqICvlr7RhQr8U1za4FHXZIIurT/mePFf1AEJLkFGJb7uml2LRBrcp4us1+g4KRcYV8lkmkplyenglgH + VIm9tzq/VJRZLpUlih9yBQrAt79Pp3bjkVgM244nsPwe/VQQ6r8pRsgu7pwtC61grkA/T10r/NrnxB8s + V2VmvQiOB0MhLMZVxY/pDPEkU6DnZ2Qu2M0STjJFAIpmAUmXD0NY9PQMzEBRPwJzkiSp71F8J1/ipNMj + f9rE8XggkUgexq9cBXmi+DYYjtCRGL72T+D4jr/RaE+waFgu8c0zgUcmT9UuBS4/9m0hmh9Fo7N8FXih + CIKE5/Vi8yJsDM8P8P0HLGwR4Wl3ICYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB1SURBVDhPrZDRCcAgDAU7SD8dMuO5UGdQUoi81kOp9eNh + NJdDclxnKn9yC8xsKSgYCYl9CLzOOaOEel43QQCRN0g9P/EHCtKb8rgDHdAQ2wmiMRsObr+AhiPE7lvi + DKSen/gDfRv1vMYd6F1DbCf4kiZYTyoVZHp5fwaxxEAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU + 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j + LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei + ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 + mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV + 2Mz2wxeg6/UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW + DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 + 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ + 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH + 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy + ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS + rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV + Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W + r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv + 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA + AElFTkSuQmCC + + + + + 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 + BfYnqDir8APuS/KgTOJh1wAAAABJRU5ErkJggg== + + + + + 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 + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi + LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb + QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk + EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C + 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F + EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb + 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh + TNAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHkSURBVDhPvZHfS1NhHIf3p5QypLr2D4goMwoMCi/qIugH + Xe1Cr7qKDIMkZixwNhfWLGWbnuki0kXKzLU023KubBNPJrbRdOzocm6e2dPOO21mMS+CHvjcvOf9PF++ + 79H9M+7RT2iRRsIi9sEAXe43yAvf2LpSHq28G9uAnytNT4jMLewtcQ2Ht2pF8ps/aOt+gccX5lxD694S + +1BQFD1RkN5DSFa4Z3uONKbgHE3h8KZ4OJTC1J8UiSzmfhd2uf1CoJHbyKOsZokl0kKwm+aeJaov+wjO + rpQkVqdXfOz0bWAcVLghfaXxkUz3y2VxvpMGSwL3uMKh+gHezSSLEnNhX23vtYzKUirDfGyFj/Iy1mdx + UWqR8iKhwtQLxjgH659y4EwvVXWPiwJt3/Ws+muywRrlqvkDdx3zQrCN8l1ldnEd3/QqFmkS/akHJYGS + zjLzOUEwEsMf+sLI2zmaOou/93pPGoM5zvk7UU7fnBKxSBPoT7SXBNW1F/9Io2lKCNTCeomUyrS8xnBA + wfUqyf1eP5U1ptJD/o1LzeNCsHPydtqdr6k4aiwvOHvNSya3ibU/QIdrEkvfhJislc32MfYfuV1eUGPw + FF7bIVJVZ0N/soPK421UHGstlFvYd/hWecF/Qqf7CR0A5wwgSQA2AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJSSURBVDhPtZJrSJNRGMdf6IN9KbpQn/pUEH2JIoLqQ0Zh + FqYZRmJG1iKmUqKyLB2pqSm6vC1Nm5GXoeatEsVJ0RASR3eNzegikRq5lrV3857Fr/d9ddlICoL+8OfA + Oef/e57zcIT/os7WLMw302muSGJ2689qqi7A44q8IzjtNYzarzHQm8tZtT8FmRqu6LToMxN+B8qhCbGR + KVcDE85ajKUaxoaryEuL4UVXIudPB5Ko2oy98xjDptXERuz3hsgAOTzlqqMk6yjdllzE90UM9Wp5azlB + S1kwkeG+1CSv4mmBQPThfd6Ahqq8GYB4A11yBKmaMLQxoZyLDkGjDiZOFUhUuB+FsWsUQFiArzegtlzH + pFjPpMPA2GA2jucx2KqWK7ZWLqO7dBGP9D5KWLbfto3eAKMhi3FHBeP9GYy9PMXos4OIrYvJrzSRbWjm + wuV6EnVG4tLLiEzSExGf4w0oL05nZEDPaK+akceBuO9v4uPtFUrYo6npbzhdE/QPOQmNSiPouHYOUpaf + gvgqA/dDf9wd63G1r2SgUlAqyyq/1anYUGfG2mdXwne7bOwJUc1AinOS+NxzBpd5HWLbUhyNPvRdF5S2 + v05/54tbqvzBifWNHUvPOwLC4/CXwrv2HsB3+w6EwosJOB5ESeElfGpayGD1AmwlArHSm+W2PR1clToo + MrbT0mFTVtlbN6xFuJQar3wQz5Q9VksD+7XyPctrJdx4p5s605M5gKz8lJPSDwtGFbKboJ1blAN52vKb + PdXm80/AfDokTVu+8DfPXv9XCcIPTvjvLQ8YoakAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAACLUlE + QVQ4T52TvY/ScBjHuVIRKHA9JAgnL+VoC7TX0kLLS6EvFBTa0uj5J7gYF+PsfpOTMrg4ORgHY+LCYJwc + TYyJiYuDLu7GxHgxd/Hnr5fA8TZcrsmnzfN9nufTNPnVBwDw2ZYljGzr3ciyTNu2EC87L75eb+DvD67f + hU9g9vt/HNs5cMaOf9Owohro7YNbe8PhjfuzzBOgkDuabk6bbRXoxuBkNLIeus6yhKyIwY5umo5tHxmG + +Wwu8G5QkIa0jN5gqnR1oOkGuOk6b1x3jHl9uaWGhpb1UtXNY1luPmJ4KbIkmAElAcgD3egfa5oJxq77 + oq3ovKJoE7XbBbwoTWhG2F7cWRJ4dFR1S9fNCvykT41mB9TqjSOxXvtJM9zrYokLrc4vFYtUBcngq9Lf + tqICvlr7RhQr8U1za4FHXZIIurT/mePFf1AEJLkFGJb7uml2LRBrcp4us1+g4KRcYV8lkmkplyenglgH + VIm9tzq/VJRZLpUlih9yBQrAt79Pp3bjkVgM244nsPwe/VQQ6r8pRsgu7pwtC61grkA/T10r/NrnxB8s + V2VmvQiOB0MhLMZVxY/pDPEkU6DnZ2Qu2M0STjJFAIpmAUmXD0NY9PQMzEBRPwJzkiSp71F8J1/ipNMj + f9rE8XggkUgexq9cBXmi+DYYjtCRGL72T+D4jr/RaE+waFgu8c0zgUcmT9UuBS4/9m0hmh9Fo7N8FXih + CIKE5/Vi8yJsDM8P8P0HLGwR4Wl3ICYAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m + dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADnSURBVDhPpZMxDoJAFET3XHIHuINeQCpCRUmiBd1W + NHQeBVtptbKhIhQkFJCMfzZBEVhMpHgZZtiZZkEB2MRiOCYIApA8z42S8fuvw2tMiwOzwIZ1IMsyLeAX + HFjItUrTFH3fo+u6VTgw9uywq7TWaNsWx8vTSlVVZoA6wA67KkkSNE2DffoQ7jiIHoze31lZlmaAOsAO + uyqOY2O8cwHvdBMlBVx5dqnibQPsqiiKjNmFOZzwKvqB3pHcNsCuuR6auq5X4bmxZ4eZ8n1fC/gFDy/k + evZh2ODANCOzwMbfAyySzT/TMlAvwlgDbVUHrK8AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAB3ElE + QVQ4T5WS3UtacRjH/VdiRWMXRUTBbqKLhlj04o3IumtJNyu2IoOVjIFYYG9sZeSmq9OLq6CisFhQRt20 + VSYVGHRRvlRq9CJuctTZt/P7ndTJOYQ98OH58Tzn+/kdOEcCQKKfDiCBbjKAj6N+qL/68HbgAnW951B2 + nqHqkxclag/lZbObi4FmkwJmAzCuxmH4+Q/91hj081FoZyLQWFi0MWG8N/2FajBEKVDtCgUE7YQfH777 + 0TTE36zQnaFc40Hpw60J8uu20gWWpR0yyLiKy+tJe1xweMqiadCNg+PAwyRVAsHYAn2lZDndLNTffBhd + j6FAwQgkRbI3pKUE5tlNMqD1f7h7EVDqXHhRM5ImEQiMU2tgo3c4OGHRYrzAiI37Cly40QzU9oUhbd3H + 8yoT7E4fItG4UGCYWMF1KEbDJe/2UdhgRw8nqB8IUvIUP5BTaUK2zECfEwi+MMvwXEbgDUTg4SA/jXkt + TsOvu1zIrWboLrEXFThd4SREoBnnw/J2B3IqjGl7UcHvoxBlm4MISLimw4FXjat4Jv2MbSfZ/6GICmyO + INb3bmHbC1JBnnwYWWXdScg8gahgaeua5xfpN7ByZyvX+TnpPGQmKpjbvMoYUQEZPgVeAMk980YN58T5 + xqUAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAB9klE + QVQ4T62Q60uTURzH9+d0eRG+KJBqRK9KZN1gGISFutCSSoMVxZBoWrGQkTVzNcvFXClMS2cXcZOGYVGo + ECgVo5xPbau8tNLdHj/tObtE7Hlh0A8+/Di/73M+55xHA2gsPVHytHRHaeqKYLwVpv76F6paP1NxSUJ3 + YQ6tMSQobZzNbEPsLQicz8E+ImN7msbqTWHpT2LuTWByxznjXKbB8QvDjZigxPCmWKBgdkU4dyfCifbs + yfoWiTJTiB25U/Nsqhr/W+Aeeq0M1lxbymqU9h8F9x6JKxXKeDtM48056q8FMVimqTRP5pJsbd5drbQ/ + gk5PQBkU6pRtlu5AivbMD73SL1PeMJJLslUksD/wEU+uksgQT8rUtr6j0ydz1iVzyLqCtuZhLpcFRQKb + 6xnzsRQLsbToh5unaPasUtmWRn/5G9uqB0WWz4sEbc7HhL4mxNtPd0gcs77HdB8OXv3BnqYg6/e7KT3i + YWetl1A0oS6Y/rTMi7eL6IxjHLevcNIR54BZYpdxiq1Hh1mnczAQCInvVAWvZmKCgbEIGys87LsoUX5+ + Bm2dnw1779Iz/DGT/xSoCvyTS4xOLOKfWKLXFxaS7XWjlOiddA0GxTyPqmBofD7LS6Uv4HwiCUlH3wex + zuPNoCroC3xfM6oCZfgvZAVofgN5BRFfKg0m/QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAAB60lE + QVQ4T6XS30uTYRTA8f0roaZ2ExIJEUgXgmnMTEyUrtKkGxPpxwgjRLB14TQytdD8sUEihRAYjArUEppd + 6EiKSC9sTn03hc1tbg63/PY8z+t+aLswPHBeeF7e8+G8zzkG4FhpeGaz8z/Z8XojmQo4W1rPlDOA43sI + 59I2P10Rlj07aL5d/KEYkegfYvE9+bGK9ldebJ85DGzh+BFifh/49C3InX4NnwDCClC1KlqGdcA8mgFw + LoX5OKcXFzUv4A8mgFQHTc81BbRavfKYDgR59zWA6aWHkakYZ27O09ijUde1Ts3jNcrbVhUgzwOTYBrw + pAMBxmf8qtg6HaNjAjpFto5FabH6uPvCRV7lmAKqzWs8taPwJDAtgKbeFVVsEYW3huDakwhXzV6MD35R + 3DzLSaN4KaLsoZtHb/VODgCj739TUG2jxuz6p/h8g52siz0KuGByc180I38rCSTGOD7p4lTFCCX3Fsiv + ekPuZRs5l/rJKunmRLFFAedur9A4TOJOUpf4RVyiHOPEjJu88kFyjIP4gnHCOwenIIHrfVAkOhGRAvQx + 6nvwwbFKdmlfxkWSQG1X9DAQEB0IYHF/E7UoHrWJcQHE2U0DTtfNcqV9U0EidOAoWVh2Q6UEChrmUoB8 + HCczvjx6YvgLkFMG0dMpmG8AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAACH0lE + QVQ4T6XS/0sTcRzH8f0vJX37IfyhoF/69ktpNZNiKPSFLCFsrDAYUoiE3wpjmIaWtqyBEgXiD4EUZJQm + EoRopWI2c9ttnm1Nnbu7fTmf3d2W3qgfDH943Q933OP9en/4WIBNxdL0fIE/afX0/1fWAM97qOsWURIq + cVllOZ4mGksRXkoh/koihBP4xATeoMK0X2ZyLs6egosZoKEnA9zoEpF1QFGJSeuA89E8499jzInKGjDx + Q1oHap6KBuBoDyEnM4C5wfWHAlbnB4Y/RzRA1gCJCXMDZ+c8nQNQ5goaK+gTr7X5uOya5nz9GBXN37jS + IbOrpJeh8Ui2gQmw3w9xTzsPW4NgrFD5IEDPYIrHAyr1vatUP4OrboXiWsFA3o2Gc1fQJ9f3QWG1Hymx + ir3FS/urNFXdKuda05TeXeZUncDxm1MccgwbyFczUNIoUKVNOejUAZXypknu9KmcaZax3Q5TVOPlqHOM + w44h8m0eXg76NcC0gvVWAHsX7Kv0IWkHeLZ2lC1HWsg71sG2Ig87Tr/gQMVbdp58Qv9wgCmflNtgvzb5 + QlsW0BrE5DSL8RSR5RQL0SR5J9xst7p5PRJgJiBrgJzbQAdKXcpagxXtDiytpDPAYpKtBW28+SgwG1KY + ETLAl1kToP9YXPeT3WUjBqBfosUsIEZTBLVb6F9QMoDRQPobyC//ZAB7Cy8Z0T9uJAagPzaTf77ceLD8 + BhCfCn0sbkl0AAAAAElFTkSuQmCC + + + + 169, 6 + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAFdJREFUOE9j+Pbt239KMNgAJycnsjD1Dfjw/iNRGK8B69eth/NBGMQnyQAYjawY + mQ8TA2HaGECxF4jBRBsAE0fGJBuAjQ9TT3sX4MI4DSAVU88A8vG3/wCG/9+rByuxvAAAAABJRU5ErkJg + gg== + + + + 170, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAFNJREFUOE+tzkEKwDAIAEHf5v//0uTitaVCQEpl22hgMYc4RMzsrOSAqm7VD4xj + evH+FgIUAoQhQKXAQr7Mu/4fxAdx4RkCFAKEpcDf+oBKUjsiF42tyFGIhio0AAAAAElFTkSuQmCC + + + + 152, 22 + + + 入用ビュー + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAEhJREFUOE9j+Pbt239KMNgAJycnsjD1Dfjw/iNRmLYGwNjImCQDiMF4DYCxsWGi + DCAG4zUAxkbHRBtADB7EBpCKqWcA+fjbfwCHaurjkGMIcAAAAABJRU5ErkJggg== + + + + 170, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAHBJREFUOE/Vj0EOgCAMBH0bX8P3yNPES6+YmgzBhggiFw+TLLQ7gUVE0hcugXNu + iPmCuB9ddAvCFvKs3CE/CmpldsjNFyjer3nODrkpoFxKqgJbVMqynjXrt8g3ARcWygrlVwIKFuY/EdTu + YZ5gHEknSSvJwSwsWUsAAAAASUVORK5CYII= + + + + 170, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr/AAAK/wE0YpqCAAAB7UlE + QVQ4T5WS32tSYRzGz78y1mh0IQwJuuqqISNm80b6cRUFg4ERjA1GGxGMCLICTTNXZ6ZubY50c1ux00xN + hBIrU1bddGGEFnObZs5Njz697ytz53jsYg88nON7vp+Phy+HA8C6FP56yv/2G3zBDSwICcysxuDwRWH3 + BGGdEWB2viJjjVlpmzApeG8U+XyeHClzsu8KvSgFBFRTOJsrwjq73lZA//2/AvratvkgzC4B9/mVowsW + Q18YJO1BqmINpXKF7GAN2stjcXKkFLwIpMhVmXq9zuDfWyXMv/4ME7/gIsdKgUf4hFqtTu7l2a+I2C6U + kc4W4I+kcc3yA8f6rGrySC6YfRmHSF5VGpEI/5T2kdn8i8CHHEaf/MKzUBU9eqdCwrn87ygjS3mvis2d + XYQTW03YuAycv53GiQGHTMJNeyMMOghdXL64h0hqB8P2LBzBKu4S2MADlx7sQjOSRLf2aVPCTXlCDZJE + ujgKn76ehHrwI+4RwdWHBVaVfg5d/UxAEY6zPV9nMI10cRvfc3ifykB76yf4NzUGX7yTxvFzTjp6uAOL + e40esI+ltV4hxgQT7gasu5FA11k7HT8U0EH6lbX2wtBNjE4+YgIKD4wn0GsIoFNjkgukP9qVClS6x+g4 + Y2xW+lw2fPSC+welbCDidGY6DQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABgSURBVDhP3Y1BDsAgCAR5G/9/D9cazM5Ftzbp0UlWREeM + C6iqZ42uNqzbS2bOhip/w7r2UPSe0NsBpyC+Zf4EfdAPiOulepjKQ1elehDJ7wGnKtWDSFwv1dPCV6Te + Q8QAl/dJ+3TnvwcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABhSURBVDhP3Y1RCsAwCEM9m/c/j78bYjLcyCr77B4Eq03U + fkhEHJNg1aTB3S+pHlYNA6sKq4ZGSvWwavqltwrrnfygpgUUooUy9kr1OaJF/5i0XPC8oirfiBY5+CpE + 98bsBG4CVl6Q3X7mAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAB3klE + QVQ4T51STUsbURR9f6EmYKzLFruuRGMX3RUa3bvron7E/yD4C7pxoaXQRVtFBD+yGEPUVA1GzaRFo5nS + RkOskFBJhUSI+JFMTE7vffYNQ4kaOnCY++5959x7z4zQNpLQNlPQIgcIRvYRiKQxH/6G2VACE4FtCXrE + yPCR9uTxKBjeF4kanZ9yXgQjKb4gn2q1hrJZw2WpiuL5NfJFE+7uQS4JJvKbiOttj96wyDs+i4Xwdy7g + msmVGmUEkSsoFCvY+5FBZ4+Py4JB5JCv/0BOwTHnxNxn44ZsViWZkSfy74IJPZ6Gu6ffEnj+bFeRkyon + Jhe+wqTOF3/HZoHcaRnZkxLCehId3iFLgIga4YM6M8SEf1Pu3IiZ3L2z/QvxbALvZ1Zl50bMrCvwdmpF + 7qzMPDMMRB82If2q91Yz7RBjkyEyrAxlpt7ShEI8gZjLgeziSl0z7RDjnxap2Ae7mYWjX4iRUCYar2um + HVagzGRy1OVEdovJZfw8vkIwbNw+gQqUmXqzE7HWB+SDg9ZxYD9zCf/Szv0TKDNzp6bVmcnG4QWmtZj1 + S/8LK1Bm6vFDrNHOPLZ/eVuSP85t0FcYoGt3CCgzPd5BOa6HwHu7vX3o6vbB8/I1XbtD4P8A8QcEHP6b + qXjzjAAAAABJRU5ErkJggg== + + + + + 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 + tqlSvGZSt54AAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABbSURBVDhPzY5BCgAxCAP9/0d9xhY1ktLDovbSuaRkkEbe + 4RuA0wCFC1X1t6Xx0xMUKapJdjFe0AWngRWNnzPJIapJrLhe0AWnAQoXjSUERYpqkl2MF3TB6Q0iCwgM + HTn+NhLLAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEnSURBVDhPYxjm4Pvb8/8f7wsA40d7/f/f2+H5/8YGx/+X + Vlr8P7PI8P+jiyv/Q5ViByCN398u+//19YL/X57P/P/p8cT/H+91/n93o/7/60ul/9ty3Akb8O31/P9f + ns38X9W9/H9+45z/6VVT/7++WPz/5enM/41pzoQN+PJsxv9PD/v/v7/T+v/ttZr/ry4W/X95Kv3/06Mx + /2uTHCAGEPLrzf2Z/6t6lv3Pa5wNdsHTw1FgtVVxNhADQBxCfn11Pv//8xMpQM2RYEsebHf5Xx5liTCA + kF8nVgb97y70+d+S6fq/Lsn+f0WM1f/TBzYjDCDKr7jAoz1+/z8+6Pv//nYrfr/iAveBgfb+dvP/N1cq + 8fsVFwClqPkdcf9nNkTg9+sgBAwMANsQU5TL62k1AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFeSURBVDhP7ZHdK4NhGMbf/8mBpFBKKzU1RKKUzFoRSeJg + FOWrRtGSz9rQhlnYshiSTbT3QBtlw0Z7xxR24N0yU5fneTa0ev4B5Tr/XR/3LfwrV1e3D7DYz2C0ujFr + PsSkcQ/6OQdGprcwOGVF37gZPaMmOPZPkUVytUrgb32kPyEn3vEcf0P08RU3dzFcBCIQ/WGou/V8A5PN + w+A0gRPJFIFlSAS+vn+CPyBB9IXgEYNoaB/mG8xbjhgsJ2myDJVah+KqNuQpmkhyCG4CuzyXqNb08w0M + JheDX0htKRYntWlyBF5SmyZT2HFwDmVjL99gYmGHbZZimc2qZh1Ksg0obCfwutOLsrpOvsHYzDaiFCab + 2cF84Z/aNNnqFLG8eYKiyla+wZDBlqkdpNf+3UxhmrxC4MW1YxQoNXwD+l964VrtAKtPtyrqu1Ba08FS + Cyu0yC9vwdLGLt/gL0oQvgBfyDULH4KzUwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD+SURBVDhPYxic4Nu7G/+hTNIBSPPDVSL/yTIEpvnr3Zr/ + J2aIk2YITPOXe3X/P1/L+P/pTBBWQx6/+4FpKNzme/X/P1/P+v/pbMj/j0fs/r/fo/W/MYkHbghIc/Ts + G/9RDIFrvt8EtDnn/6dzYf8/HHEAatbBqnnm2f//nYtPohoCAvMq+P5/Oh/x/+Mxp//v9+qBNTdPWfu/ + sGX+//SqqXDNINx5+CemISCbQIa836eP02aw5iM//xdu+/g/csXL/wzGM1FdATMEl+YOqOaoFS/AmjG8 + AQIwzTAAUmSavBXsbGSbsWrGBWCGRK4kQzMMgDWRqxkGKNKMHTAwAAA9wjHTfNR4mQAAAABJRU5ErkJg + gg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEkSURBVDhPY0AH397d+P9wlch/EA0VIh7ANH992Pr/xAxx + 0gyBaf7ysO3/l2vZ/z+eDsBqyN83fzENhdv8oPX/52s5/z8BNb8/YPL/7VbZ/41JPHBDQJovpV7+j2II + XDPQZpjmDwdMgZplsGr+tfYXqiEwP3+5DnH2B6DN73DYDNL8a8bv/7cL7vzv0e2FGAJSNK+CD6jZH+zs + 9/v0wZrzG6bD8Y2cm9g1wwDMkHfbZMA0zGaQZhANUrzJZjN2zTAAMwSmGQRgBoAASBNI86N73zE1wwCy + ZhBANgAEQJqjZ9/4//jdD9yGIANkA0CaQJpnnv3/37n4JHGGwAxA1lyz5SWYzWA8k7AhIANAmCzNyACk + 2DR5K3maYQCsiVzNMICpmYEBAH1DheFtxXWhAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADwSURBVDhPYxj84NKzH/9rNz39//zj7/9QIeLB2cc//1es + f/y/a++7/5UbHv+/9/YX8YZcfv4LqOnJ/wlHvv2fefb//75Dn8GGXHr2k7AhV1/8/l8NdHb3gS9gzSC8 + 8MK//3NPfvqvGbWBsAE1m5//n3j44/+55/+BNc8Hat504/d/Ob+V/xmMZxI2IHr2jf9N21+BNS2+CNGs + Eb4eoplYA0C4ZsvL/+uv/flvmrwVoRmIf/3+i9+QGKgBIIysEYT3nX5K2AX7b7z/HzXrOoYBW488JKwZ + Bg7d/AA2hCzNMHD09kew5jV775GueagABgYAPyPNIjxmaVoAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEWSURBVDhPYxg8oLxj3v/8hun/0yon/I8r7Pwfltn03z+p + +r9HdOl/x7CC/zYBWf/NvdP+G3skgzFUGxVBRTvEBekVQBcUwFxQ898d6gKoMhqCwsX//xcs+v8/b8H/ + /xlz//9PnvH/f9zkv/8jer/9D259+9+37tF/99Kr/x1zT/y3Sd2D6aL02f//b330//+Ku///T736/3/9 + 2f//0w///++34/9/s/X//yss/f+fd97//wwzgWzHNkwDrIof/bcsfPTfLP/+f6Osm//1Uy/8144/8l8j + fNt/1YBl/5U9Z/xXdOkGa8ZqAMWgvH0+PBbiCzsQ6SAGEgvW4HSQTqM0AALlyOkAOSVCXQBJiRAX0M4V + AwAYGAALaL7vBcuVIwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEWSURBVDhPYxg8oLxj3v/8hun/0yon/I8r7Pwfltn03z+p + +r9HdOl/x7CC/zYBWf/NvdP+G3skgzFUGxVBRTvEBekVQBcUwFxQ898d6gKoMhqCwsX//xcs+v8/b8H/ + /xlz//9PnvH/f9zkv/8jer/9D259+9+37tF/99Kr/x1zT/y3Sd2D6aL02f//b330//+Ku///T736/3/9 + 2f//0w///++34/9/s/X//yss/f+fd97//wwzgWzHNkwDrIof/bcsfPTfLP/+f6Osm//1Uy/8144/8l8j + fNt/1YBl/5U9Z/xXdOkGa8ZqAMWgvH0+PBbiCzsQ6SAGEgvW4HSQTqM0AALlyOkAOSVCXQBJiRAX0M4V + AwAYGAALaL7vBcuVIwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEWSURBVDhPYxg8oLxj3v/8hun/0yon/I8r7Pwfltn03z+p + +r9HdOl/x7CC/zYBWf/NvdP+G3skgzFUGxVBRTvEBekVQBcUwFxQ898d6gKoMhqCwsX//xcs+v8/b8H/ + /xlz//9PnvH/f9zkv/8jer/9D259+9+37tF/99Kr/x1zT/y3Sd2D6aL02f//b330//+Ku///T736/3/9 + 2f//0w///++34/9/s/X//yss/f+fd97//wwzgWzHNkwDrIof/bcsfPTfLP/+f6Osm//1Uy/8144/8l8j + fNt/1YBl/5U9Z/xXdOkGa8ZqAMWgvH0+PBbiCzsQ6SAGEgvW4HSQTqM0AALlyOkAOSVCXQBJiRAX0M4V + AwAYGAALaL7vBcuVIwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFWSURBVDhPzZK9SwJhAMb9Y4KGSFyCBufGEv+JoCgrcCnT + xggyHbKTlFsqv85ryUkNgqaS5E4PgijC00tTz0OF4A59yvcUl0BviR54eT+f5/kNr+lP1df6GC6Nq/3S + Rv4wD0VUjIeMzCIjkrkjdqYPUYoKMcm3MlRWQ93fIPv2+y8hX0oCgsCAuWFxFGTR6/XI49J1CWpCg0rp + o+b7JOddqTuZ5MoWQdqRgXzZgno+DAlqkKgP+Jb9esCguVbR2+/ufwhSSVAXLLmMrETBbfDjEFqDHG4h + YD+Dy+yaTBCzx8Gt8RAcAjJbWbxSb/AunSBkDcNtdo8DBhSVUgK5JwapdBKhiE5QfigjaouBXy+gsFmE + 2+IBbaVxvOCFa35/MsFAVa6KmC2Ox9UcaT1dDGB3bg+KYOBPNJ+bhMRjOYBz1ok6V5/ePFKDb2B7ZgdS + TjJu/q8ymb4BoiQQRGnTxVgAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAADpJREFUOE9jGHjw7du3/5RgsAFOTk5kYRQDPrz/SBIexAaA2PgwQQOIxYPQAHIw + 3ABKMDRBD13AwAAARFI7/1SrZzcAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAEOSURBVDhPjVOxEYMwEPMozELP + AHQUDJCaWejZIRRpQkHlTEDoKUgaWsf6WL4/SADfibP/Jdl+3mY9lmUpPG4ebgXEikDbDp9MPGwgu3Ec + XZqmAswZD5wkyL4DAY+5aRrX970QMadBXdcSQw5xcKEJcjGwWlCWpcuyLK4xR4zrYGIpxp3FnYQj8JTQ + wiAWjLtgx+7eudf8FmDOE4FDPrQwkCLhniRRbO1DQBOag8vCmmmaJKFBMdfttZWY5gCnDfgXAF1MMcDn + 6ArYJM9zXbyIU0VEjrtWVeWGYaDBfOo3agOAhUScvbDbSDsGsZl2W1kbhCuglS8i5ggmPx8T1qqI28ek + h0/+e85Pj9VzNuYDK8uFj2OiI5sAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAJdJREFUOE+lkNENgCAMRBnJGRiOhRhMjQ2/6hHPFAQt8ZJLaei7oi6ltFvtWsKF + 9/7TwwHLvBY9A0RkgjMMjQQAPOsM3yEMAEC3eswBDCHs8B3CAA3xrCvmAHKWIcULejXGWMBwM4DWvWzS + hR+fUPttc/ETe/6EW8Ilhn7B9fbhzReQqwmGCFdbbTCEYcLmZ2td27QNsHMHa4Yi2qBeHNEAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF6SURBVDhPndDNSgJhFAbguYCIFkVdRK6iK7BNl9DPKnBf + mBREi6BFUUGLFkmotJB+aBEVSZCroB8oLGshaqOiYjnoNE6Opos3z+fM6DiC1oFh4JvzvOd8w7WWkg8h + cdwPeqtH3ZeOsy7c7w4iH/N1H6JjwYVicgPfEQcL6WqTxmQ3w3J4HvLLNKQ7qyGkkqmaw0yTa7jwXMO3 + VojXw8idD2FlpoeFpGbTMIW8HwygJGiTHZCb8UUdF8JviNiiqF5VzSHe5T51sobHIPqNmBBhespnZRam + h9Bq7sXe+p1pMmF17WggoOOKrwLlVIHsLSDnzBlDSmKUhYh+i475WBBTeyHEwkUEba9QThR87UsQdgSk + 1zKILyWwadlqXEXbpBk7nwCr/YGFuEc9yG5nkVpNgV+IM2z6oQSb8frND+YuJT2EEG/n22OqZL5swhOH + Hxj3JMGNOEHf/4aPPg2Y+tpiraiJ1iU82TJZbelcWsi/sFYM1fBjXO6AOe4XLrzzETlvl4sAAAAASUVO + RK5CYII= + + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIaSURBVDhPtZHfS1NhGMfPn9BNBGF00YUI4YWxG0tQoqQc + /cAbpTRHBiqppfbDRVrNleVgNp3lXLDV5o9tmi212UV2BuJ2xMSUXbjlcO7MhsLSlqMpfj3nXY5OTrqI + Hvjyvg+cz+d5eA/132p5KQCLQYkevQJGbSN0bTJomuvQ1iTFhGMEWls7Ouk+/PpcWNvw2rwsnrD7FlY/ + X8Gk9RKR8LBmukUoAFe/w1UXMgVwyHkOSyNHERxKgcx4E7c/FoC6+8KL7Zjez8bha5IcclbnHxPAfmsy + XK+SUKEuxtWB3JjAMAoMO1kB7JuQolIiJvD1ghPwWtPgaD+At437UZ57EHkNZ1FsEccE75gVArPTDwn8 + WNXFnacxR0uIhF/5SPJepB/eA1HKPjy6X4vjNRmQdOWAeqobwMbmBoJBHxpuFIL1e0n/ibETiasnFdmi + Qxj+YEdeaX380cx0N8QPskA1dbwmAD3uxtQsG7szHhJLbz+qLmZh+XsUtHMGGefLBK8ejoRBydUmAv2Z + SHQd336sI7gSxZevP2G2MUg/U7Lzv9crjQRQdPRD3moioEo/GO/rlAZMzUfw0upILJA+0e2YHOImB0JR + eLjJPOxwr0Hbt4ugRq4VbMDDKv0QFBquV5vBb8gLnpvGEgsq7z0jAn9gER7fImY8AYy7WNCTftiYBbwZ + XYDF7ttdUHanBWkniyA6dfmvSSj4t6KoLR+EFMVZB9kGAAAAAElFTkSuQmCC + + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEnSURBVDhPYxjm4Pvb8/8f7wsA40d7/f/f2+H5/8YGx/+X + Vlr8P7PI8P+jiyv/Q5ViByCN398u+//19YL/X57P/P/p8cT/H+91/n93o/7/60ul/9ty3Akb8O31/P9f + ns38X9W9/H9+45z/6VVT/7++WPz/5enM/41pzoQN+PJsxv9PD/v/v7/T+v/ttZr/ry4W/X95Kv3/06Mx + /2uTHCAGEPLrzf2Z/6t6lv3Pa5wNdsHTw1FgtVVxNhADQBxCfn11Pv//8xMpQM2RYEsebHf5Xx5liTCA + kF8nVgb97y70+d+S6fq/Lsn+f0WM1f/TBzYjDCDKr7jAoz1+/z8+6Pv//nYrfr/iAveBgfb+dvP/N1cq + 8fsVFwClqPkdcf9nNkTg9+sgBAwMANsQU5TL62k1AAAAAElFTkSuQmCC + + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFeSURBVDhP7ZHdK4NhGMbf/8mBpFBKKzU1RKKUzFoRSeJg + FOWrRtGSz9rQhlnYshiSTbT3QBtlw0Z7xxR24N0yU5fneTa0ev4B5Tr/XR/3LfwrV1e3D7DYz2C0ujFr + PsSkcQ/6OQdGprcwOGVF37gZPaMmOPZPkUVytUrgb32kPyEn3vEcf0P08RU3dzFcBCIQ/WGou/V8A5PN + w+A0gRPJFIFlSAS+vn+CPyBB9IXgEYNoaB/mG8xbjhgsJ2myDJVah+KqNuQpmkhyCG4CuzyXqNb08w0M + JheDX0htKRYntWlyBF5SmyZT2HFwDmVjL99gYmGHbZZimc2qZh1Ksg0obCfwutOLsrpOvsHYzDaiFCab + 2cF84Z/aNNnqFLG8eYKiyla+wZDBlqkdpNf+3UxhmrxC4MW1YxQoNXwD+l964VrtAKtPtyrqu1Ba08FS + Cyu0yC9vwdLGLt/gL0oQvgBfyDULH4KzUwAAAABJRU5ErkJggg== + + + + 152, 22 + + + 149, 6 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEdSURBVDhPY8AHHr/78R/KJB2ANEfPvvGfLENgmmee/U+6 + IciaQbjv+G/iDcHU/Od/3d5v/7M3v//vXHwSvyHomvuBNtft+/Y/B6g5csWL/x7zH/9nMJ6J3RBMm0Ga + v8I1e8I03/yK3QWYmqE2r0TSDLTkScHT/7+e/8buAtPkrRDNe7+C/YyiGWjz7dQ7/3/v/E3YELDmFS+B + mh/BNYM0gTSD8I9NP8CG4TUE2WaY5l/bf/3/tuHb/89LP/1/O/MtfkNgfgbxQYoupV7+/23Nt/8fFn78 + /3rK6/9PO57/f1D98H+Pbi+mASAA0wwDIEPmmc7//2rCq/9PWp78v1f+AKwZqwtwAZBikKZ7xfdw20wI + wAwhyWZ0gKqZgQEAUNOQmv8OVGIAAAAASUVORK5CYII= + + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAH3SURBVDhPzZDhSxNxHMb7K/o3ohdRvUh6U1CwXvTC6lVm + SDVEyImFuqQwBQWJLCUrpZmNtIVYKUssa70YkZVSpLk5527OmyVm2+122+3T3c3dNUYv6lVfeODufvd8 + nu/v2fZ/TMdQnN/V+iBO8z2R+turVN+IUdm5wvG2KEcuCxxsFCirj7C3dpktex7geg39Uzl6J1W6vVmu + PcvQMaLQMpzG6Za54JI4fzeJ/VaSqps/2Vk1XQwoqGVQpKFfpKYnn1zeGuWwM8L+rdSCdlT6LYB77B2F + yaqQyeaQlRzJlMqmlGV9M8PahkLsexohniYUk9l16LQFGBj1G2bVNKucFLeXSFhLE16VGXs1Uwzoe+wj + l4O2nkdc6rxP3dU7hkE7MqW/lx2tZrftbCmg9+GLoqQ/aXElxdeIVAroHnxu/KA9mmn2pi4qatspP3cF + 26kGDpxwsE/bYI/tDMPej8WALtd4UZKufGmKVppMSLv3gpBiLizxaVFi4OkHA/BmtDkP0QGSrGodeMwO + 7E3XqXC0c0zbIBBNGRvoHegbFAC+EacFSEgqG4kM335kENcVonrjokxQM88vS3xekpgJJpmeT5iAKU+j + BdDNc4Ews1+WeDsbwvc+xIQ/yBNfAM/LBdwTlgqAyaGLFkD/8LfyuuusIv9lxl0OfgGG/xh4UFrkGAAA + AABJRU5ErkJggg== + + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAESSURBVDhPYyAWdK969b9pycv/pbNf/E+b+Px/ePvT/151 + j/9DpQkDkAGLDv3/P3Xn3/8tq3/+L5r37b9h6lnSDEC44Nn/MKALXCruE2/A8m1n/iODH7/+/Tf1TP5P + 0G+uxTu5A0q2psIM2HP8xv9lGw//f/3pL8IAbH5LSzvD6l+0PiC0sv6fZWD9l7lrDv3/8/cfUOOf/zee + /Pp/5MZ3bC5A+C28vv6fRVj9M9f02dYgl0xfthusAR3j9JtX2hw7sB8IAVx+C8xYKwZVgj+ccPnNJaH+ + n1/B2miYATjTAC6/eWTOcQurrv+nFVb/B1c4gQ3ABzyiJ/L55K/2xJkGiAU40wCxAGcaIBbgTAOUAwYG + AJr6mZ5ldm01AAAAAElFTkSuQmCC + + + + 219, 22 + + + 216, 6 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZDdS1NxHIf3J4gSWFoaU8GKJCmswEbNrFab + rS235ta2c3Jtq72VKaQRZOsNGhQLloUOY4k1M0qlFjYsuujGiF5GBF134f/w5Dnb3AvdiB/4XJ3zeb4P + P8Wak/nxk2AwiCctyHW/F+ids2FPmjg1pkd/T4Nm+ACHr6l35CalsZh7WFr6K48Tvx/y5NcD4pn7PP4e + Ifb1NtHF68QXR7GEzOQmpZEMmrdvkQHxTJRVG+UNXCk7j77dZdVGCwtpGpqUOF9aiH4JywbFRkdvdJT0 + bMpB/+wlupzaLEAUnfLFnoSRyOehFYO8kTRK/ZlZqQQIPPezT9teMNis3MTJmJbwx4uUG0mA7hEdtkkT + Z5bfQjLzPnWzrW1rFhAIhOSLujudDM17KDe69amf4Q9Brsx7GXgrcmHWinvMS42ypmBQ31hH56CKvrnT + skGx0dW0j8F3ruVvdgKvzXhe6BFiDirWVWQBPn9QvqjytXFu2kC50cAbgdBMD+enjbiSWhwThxAjzgJA + uljXsJHdjhbEpCAbFBv5X5lwTx1HmDyCLaHGFG/HetNKbXNtFiBFGu0VW7H4zZQb9T47hn3iIJZxFcbR + PXSNtMqAqg1VBUBxyo1s41ZMsW6MEQO6sA7NZQ0n+vRUVlf+HyCl2KjDoGbX/p00tTSyvr5aHuab+30t + USj+AR9n0X2919e8AAAAAElFTkSuQmCC + + + + 219, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHSSURBVDhP3dDdS1MBGMfx/QneBIVeDENBKrqpvIgJMalO + Osdca2cb8+34MkXm0UmydDXTlkOOlUaslOzFzopOUpJ6crBarWB1VTeLoCjavzG+6YhAOHYb9IPn8vnw + ex7Tf5RCoYCiKNzOKiQyca6mJri8OkZkeZhQsp/AnU7kpSDqG5XfK9tjrjKzlVl9nOzPNOnvOs++PObu + p3muvZ9mIhshtBpEvjFgDKhJlWg0yqQWIvMjRUOsftv0bLQhPezAOygaAxXmilKD8P0+9K8rpaWNb8// + zBbQeq8Fe7vNGNA0DVmW6U340T6rJeDMrSb8j9x0rvnpfdmBb8FDnc3y9x+0z7lZ/HiTK7n45t1jjKbP + Elzrp+uJhHjdzf7afTv/QJIkvDPNzH1QuPT2PJFXI8h6kJ7lLnxLPpzTzZTvLTcGKqsrKRaLOOKNTL0b + J5IZYejFAIGn3bQ88OOYd2K72EjZrjJjYF1fR/SICKPHufA6zHBqkL6VAG3JVlwLLk7ONiCcE3YGag7U + kM/nschHGdqs7Vv04kmIuGZOY59s4lRYoE6yINgEYyCXy2F32KntPoI3KOKQ7NQ7rRw+dojqg1XsMe/G + esJKbCpmDPyjmEy/AEn4KbUnMluRAAAAAElFTkSuQmCC + + + + 219, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAACX0lE + QVQ4T33R21MSURwHcKb3Xnpqpofe/Bf6k2pSayYuhetyW5BELpIyYNioWAYyE2il3AQW4rJGygqSmuRg + SDRGWdM0NU59293aQsUevjNnz/w+3z1njgRAx9ybqnTZ7UVGp8u6VarMhU4zfDpucvgSF7BsCxOTm5h5 + uP6NorIuruj88dkjH3xEzDAtOFwskvR7LMXriMVrP72+yqFWl+OLzonz/8VPF5rIZL4gnfwMOnmAWLSF + QGAP0w/KhxSVd/JFp+L5xw0k4gdYXNzH3HwTjzg4669h2rMNl6sCq3UV+oF8vSMOBOsCDAYb8Hl34fFU + MT6+CYejDJttBUbjc0hvxNHTGxJwF49Z9qOAvb4a/P5dzNzfweTENtzuDThdZdyxszCZCtBTecikCVzt + DiEwlxUK4J0twWorYGKqCvddDoxWMGIvwW5bg9Vc5OAKBm+/gE6Xx03Fb8wUcth+s/NDotbS8PrXoKVS + MA8vw2xZgWmogEFjAcYBBgbdMgxaBhp1FkplCt09YQF/+P4OhCpWk8gUIew06wgnVqEkolCraXBvLvyN + onLQcrCfzIDoS3N3/oel8lDtyuUFSPpVM1vDIxG8/dRAbb8Oqz0BypCCRsNATeZBklmQRAq91yLt+DWP + +QeQDFryZ5REzKAkQohnSsJAMveSuxLN4TQU8hP4lYiFAnGh1acuEmS0OjxKo9rYFU4zOvYMMnkYdDop + 4o12zOfvQgxBxq/3kVE8ibDY/9oU4B+8fhzzOfIhhlQnzipuRYp8CX+aIVtqqxPmc2KjPc6xgkWlWSqd + hgFIfgHBM/JDRsjR9wAAAABJRU5ErkJggg== + + + + 219, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJZSURBVDhPndDtS1NhGAbwQRD0vf+hT30piCyDZFFB7zLp + DUrEdOZybLqp58yOS8ssVy6zjQ4qIqLiy0hZ5WQt5/Jl1lbhWObL2sbUbZKSZVBtVzvP2TRxH6Tr4/3c + 94+LR/Bv6rqn8MoZOgFgW3y09WhaXLE7QNvp9t1tnUiNj7eWZwYfbteOAVEgEFrBo+6p7/Enkrb+T7rG + rhE8aLGjts2J+Hg9DQ2WiLp6GNEYMB9ehmEowJXZ3mmaamrusZPDxeVV0lChtW0GGIaJMpVWrgAWYsCg + w4cO0zT6bF7M+oNY+fGTHHOR3e9HAzv5u6vDB4vl204CaDSWSJn6NRDhAddnP9TsKAbsnk3A9fJ2eLxh + sHo39PUuvg3D2P7QN81kIQGU6axJgRxVC7xziwSo1bxPAL2/SlUbAckdQ1Igm2pEYGEJ+icu1FS/4wEl + bVwtoU1kIQGImfakQGaxDvOhJdTXTaCqcowH8uStcyXURiBL1ZwcUOrIzkONEyrKCsF+kWzH0QulkBb2 + 4XH96BqQSTWtAd5AGEarGzk0C8eEB19if3CvahwKhZlvcCRDnsohRcqXeMqOE+BKsR7WDwEMOybJYbm2 + C+MfZzDtDcLjD0Fd/gYFBS94gEtaRuHeBJIAuLoFFU0wmOwYeusm81lfEJMzcyihLLgm7lkHuAhFst3H + LtIEOXTuBvYILyM31whx7nNIpQOQyc2glIOoUI9AVWbFVQm7EeCSJlLsEp4vwoFTYuw7no2Uk3lIOZ2P + g2clMVSCw+kyCNPpr2eybrkv5df0xs/+NwLBXxNmPntHx4OgAAAAAElFTkSuQmCC + + + + 219, 22 + + + 161, 6 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAGpJREFUOE+djlEKQCEIBDub9z9Pvz0KdhAxeSkMYbsNjT1zztUFgZmdi9cTQRcE + Mv6l/MEORbZ7EPiweiCUIYihF8TdgyALK9RHEMMbsYsgCyvURxDDG7GLIAsr1EfQBYGMryeCLkfQnzE+ + Nhr5FNl/PegAAAAASUVORK5CYII= + + + + 164, 22 + + + 出版 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAO9JREFUOE+VkjsOgzAQRDlCjpIz0COlpUtBT07BNVJyAGpITUUK+tSBwhDzKTeM + wZaRHGKvNELszjxbtj3UMAznaZrYIrIUQ2YXTpKEfN+3ErwK4hqWkhAAVLOqntSx/lDwSD+yO4ApYJIT + gPNBSO85ATCPooiad6N6zgDMwjCkuq6p7z6/AaZD1OdBEFCe5+IGdMDhNeoAqTRNKcsyzNjfh2QCQOod + 6K8RZpMQwPbxjeNYn62Ao4IRt9C2rQgDUpYljeN42SzHhVWgJXBHUG5/+X9sFvvinL+KohBbn+f5urXt + C2e1rHxjjJ3Wjud9AZWRavYJLOTxAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAD9JREFUOE9joAr49u3bf3Ix3AAnJyeSMYYBH95/JBrjNIAUmrYuwIWR1Q13FxBD + U98FpGIUA8jFYAMGEDAwAACe8nQwqEU6AAAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAE5JREFUOE9jGAHg27dv//FhnAqg+sHyTk5OWDFYHTYFVDEAGaPLwzBIDqcB2Njo + GK8ByBhdHoZBctQJA2wYqp+wAYQAsqHYMFTZCAYMDADrkkqIuGBDwwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAFpJREFUOE9joAr49u3bf3IwVDvEACcnJ5IwVgM+vP9IFKauASAGNoxNIwxjGAAS + QMbIBhHCOA1AF8OGaWsAsZjyQAQBEAckiE0xNkw7A0jBGAaQg6HaKQEMDAAjp4vxUiKCUAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAI9JREFUOE+tkEEKgDAMBPu2Pq5X6Qt8ZXtV1uxCLI1WcGAJiZkopoje+6Fw9A2I + Oef1A/6Nig5EoWpgAEFZ6akaWkBVvDibUzWeFn1V0FM1/KLixVmlauiBstJTNTD4GqpGa23HsJRyvQEV + PeZciYnkt0zl1fx3AIxHaq23T41C3Xj4DxtX3tGRMZhzZSClE2+rGTmoCGSdAAAAAElFTkSuQmCC + + + + 174, 6 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAGhJREFUOE+1kFEKwDAIQz2b9z+PvxtKHak0LYUZeB+KCUExs6ciN3KDqn7UMGec + ruUH1XwKRLYBOeMO8f0xIFsyehvgjrEMqMS3mfzg94Ccd6FJ7xPjYLRk9DbAHWMKYIb4NtO1YZLICwBJ + e1MpKoBbAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAJZJREFUOE+1kcERQDAURFOCEpSghhSXKtKTM4rAJVcsf5MgCDN25hHy900MdYxz + bnqgXihk/BwMaa0vsdZSUkplHwqGfjxBiTEGkn6hklpIjiCWSC0kVwAwK7WQO0GMF+DyhZ2AR8olKUgd + M8WjAOu26fwz1sf9SwHu+D0cJngXz/wn4MDnT8iBReIFb1iLTGx7w9ZWagbvFb7v47pmTgAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAsMAAALDAE/QCLIAAACaklE + QVQ4T6WRX0hTYRjGdxMkikcqmeWURbeamAg60pVK82KgppIzCh3WNvwzRtjCuahhCYabyzRrFcQyVEbQ + hSj+YaKrkCBnDpuSTsu55lEXG1mG29PZuRiunau6+MH3PTzPw/u9HwvAf8EoBlmcKOa+GTi7p68ndrsV + xGEmTxBGMcjbgfz5JfvN3/MzSn9HLTHI5AnCKFr68oTzU5f9vp9PsbnWCNsID50NxEkmb4QQ5P3rQvLz + chdUzTUQiYpgGZOht4XjYvJGCGYjX2mflvibVFdgMpmg0WiQyEmAdTADulpC8rc/7EItLurjkHA3OLqo + shw6nQ5SqRRsNgFyqRovNfG/qIUe2J8JKxh/ntO3sqCm3v4MzepqKBQK5PLPQFGfg+2vcixbTge0MsK4 + PxM6WPrzkuyTInpxvh0DzGY1Ss+XIj0tBeahKnhWrmJroQyjj7gB6mu5EQVmY67V/U27Rxd49XA7WyAQ + nIKoPBO2dxXY/FRCUYTVMY5fX0fYwgqGDDy+Y0YWoMO+Tni3W7G6qIThQTG62gVYmy3DxgceNqx8uKa4 + GNTGBNqlscJQgaU/3+3beUKN/pgOf3erqLEluFhZguzsLOg1KSDnCkDOFsA1mYQvw1HoUhBeuuBVR4bS + 6bgN7w9DKOxZk2PVVgVhYTrSUo9hcSIL7ulUuCzHsT7BhnM0GuaH0YG74thelrYhOeDx9mCLbAuFtx1i + emHk3Dlq9Oyw8Po4AefIQQzrY3BPGk+yeho5U93XT8BwIxnd1xJp7suPQleXQNNaE09zR3wEty4domm6 + EAdVRRzaJOwXoV/4N8D6AwpMvVRjyTFwAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAEOSURBVDhPjVOxEYMwEPMozELP + AHQUDJCaWejZIRRpQkHlTEDoKUgaWsf6WL4/SADfibP/Jdl+3mY9lmUpPG4ebgXEikDbDp9MPGwgu3Ec + XZqmAswZD5wkyL4DAY+5aRrX970QMadBXdcSQw5xcKEJcjGwWlCWpcuyLK4xR4zrYGIpxp3FnYQj8JTQ + wiAWjLtgx+7eudf8FmDOE4FDPrQwkCLhniRRbO1DQBOag8vCmmmaJKFBMdfttZWY5gCnDfgXAF1MMcDn + 6ArYJM9zXbyIU0VEjrtWVeWGYaDBfOo3agOAhUScvbDbSDsGsZl2W1kbhCuglS8i5ggmPx8T1qqI28ek + h0/+e85Pj9VzNuYDK8uFj2OiI5sAAAAASUVORK5CYII= + + + + 210, 22 + + + 変換 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAC60lE + QVQ4T52T21OMYQCHv7/DP+BU6aSj7FiHmhJllSLfTitb6aQDKURRa9KRUDbbdLLaxFbosCmTTUgqpBKZ + JDPcuDBm3D3evuR45+L33j2/3/O+832Sb0jCss5uGyl9cSTZYjlwZz/xbTpirdHom7XsM+8lun432poI + 9ltknMJqXABpKdLU5BSunm4C1mN736ake65VScdsC7dnLLS/acI8eRmNIQhjYycFzScF+6NAlmNYMEjo + iFFgy2sT5ulqGqcqqZu4gOlFOdXPisnpTSUkL4DqLEnJWJ2kmEgDA/dxcFpNfLsO21wb5ldGGiYvUfey + QsClGEeLuPTUQFZ3IsHHNzPfI4bHJK7nLwiIAn1cPDet7ehvaul6Z6V+4iK14+e48qyEqtFCLg4bODeU + S6JVJjBT/W/BkkFM017uzF7HNF6mKFeOnKFiOJ+yRycofnCU2JZI/NNUlKQIuOC3K6SmH1EMoht20z5z + DeOYUB4xcH7oFKWPcjg7kI3hfgb7LDvZlLQOvc2btFEV0t8Gck041ukGoVxAuVAueXicQnsm+f3p5PYl + oTVvRx3r829BStphbgiDPVUamidrFeWiwWzO2A9x6t5BTvYmcLRbj8akRqXzQEqWFFiqlbb8YRBREYJp + rFQoZ2EQq3l9yeT0xJHdFcOh2zIBlV74ye5I5fMCFqTcvGiQnLpoEFYcTOXTQk73p5Lbm8gx8VVmdupI + vxVFSusu/MrX4B3p+luBZbFgySDUEEjF49PE39hFVGMwkfX+BBvXs7XKB/V5VzzOLsczbA3StiIFlg6O + LF6hrOyCYqAp3spG8coqvSd+urX4ad3xjXITqy54hTvjoXHCPdSRyw0duIU4KOtKgd3ez2rHVRjsGXz5 + +o0PHz/zZvYT49PzDD9/i/3JND0D49y6O0pL5xBXWwdxCVr5q2DhEAUugVlq/DNUbEjw/mHhga/shleE + M57hYn2HA+7bV+EctAIHjennH6kc/x+k799YkRaVXOKkAAAAAElFTkSuQmCC + + + + 152, 22 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAERSURBVDhPrZDbSgJRGIXnpewd6jXsjSQvIrwoI0RQMChU + 0iiDPCGiE3ZCRkvR8VzTeBhnyR5/ccaZNnPhB4t9sdf6Ln5hb8QeathNJFVFKF5C8DqL4ksDVHWGDf7j + LHyPg6NjviSaFqlu5yQYR+KpupaIkrMknCxT3Y7v/NYYb0ITK1c3BarbWWhLQ7IR0cTKReyZ6lZ0XYei + ztHpK4bAc+h1FgQijzSxMptrGIxVSO0xX3AaStFki7bUMVFmaMm/eJMGfIH/MkGzLep0AXn4h/r3CJV3 + mS9gn2bY4UY/UzQ7E9TqfeTFtnuB+XAfzSHKr11kSl/uBebDiZ89ZCst3OUkdwL28sIVsE83ock+EIQV + 2Mz2wxeg6/UAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIySURBVDhPrZLfS5NRGMfff6H7boIuuq2pMZyL1eAt11CW + DcOKsB9vpFmaLtNExco0av6CbIVLJ61Wk3BSkT/AFCkRZSpZmrmiJQ41xSaCwdfznL15XEUX0Reem5f3 + 8znnec4j/Zc8fxYGla91CS3eRTx0z6OpMYS7jmnU1X6B/VYA18snUVoyjsKCt8jLHcH5c36ouCQR2NUJ + 1Nas4G9ZXlmFKbULh1Kf8lJxSfI+WeCCyopv6q+/h+DQ/DJ2WV5Ao1FgPegRAveDOS4oLfmq/h6dn/DH + 4AJizD4UXJrCAUuzEDgbZrjgou2DiohshIcnQtgme5GTPYbkJKcQ1N8OckHW2REVi+RXuM8fxGaDG4oy + ALPZIQQ11Z+5QDk1oKJ/hjv7P2FTfCMOH3mFxMQ6IbhROYWOdrCnBI4dfwPr0V4+bRoY9UzXppMjcDdS + rC8hy3YhuFI2gTYf2A4Aza4f7N2/o/zaLB8qDYx6zszwr8P7k1thNFYIweXCMXgeAfedq2xxwjClZUeV + Jd2GtDNFETiJwfs8MBjKhMCWN8pgoLoqzE8miH1GjE7G4PsZjE7OQsm9ij2mFg7rdrug1xcJAa2l4w7W + r00Cgk/n38S7wBwC04u4UGxHrMHF4CbEJtyDLj5fCDIzhljfSxzeavRgyw4Zj9t64GvvQ0d3P3pfD2Kv + 2QqNvgFxDN6urYdWmyMElJMnevh60obRktA701PRtGlg1DOdSkXwzrisaMG/RZLWAE60OMW5fNhvAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGDSURBVDhPrZFNSwJRGIX9NYGbFoUlFElY1EJQKEYhCJsi + LaVsERnRF5iCaSZJO1toCDVGFkgoFpWQWWRR2aIvUxm1BKN1wSnHCFw4TOCzue+9nPNw4eVVnav4Izzb + QfxeGZ5TWaxT/rK3irzmC7CsusvC1G4IkbNLboIiDieF4GGUKeTeClDpppF8eeEu2PIfwfrzizSdw3Hk + EnKlFpkMzV2wH77AosOFTV8A+vkl9CiHuJeLJNNZjM8tYWB0FkTvMAwmy/8ERTR6CwjlGAi1Ccence6C + 1NsXzN4PKIxJLLgeIJ2MoXvmFraNBKK3eXZRIveJPvs7FIYniEkXZENOdE+GIZ2Ko10TwLK7tJmKmL0F + EEYarYM+NMnt0C1sQzpx/lcSEnZ2gcKY/gs0dlmZuWvmjjmpwA1qxVp2AWFIMAF/OAGBzMjMI7ZrtJCb + 4Df3o4Zfxy7QrdxDRFKol5khkpR2H4qmIOzUQNBGwrsXYxccnNOQqNbQ0KGGZ+eEPVwdeLxvqqrf4wGh + TNAAAAAASUVORK5CYII= + + + + + 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 + YGAAACU+dY6KGF/OAAAAAElFTkSuQmCC + + + + + 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 + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHgSURBVDhPxdLdS5NxFMDx/SthmnkTIgUiSBeCacxeKDG6 + yhRvVERriCIi2LrQDF+y0Ew3UEQRBINRgS8JzS50KEqoFzanPZvC5jY3h1t9/T2/Z5tueVF00YFz8Txw + PpzfOUf3z9FttvA32Ta2F08JXC14zIzNi3XVj23zkG/2IFvOIxT3MR5/mGDoJ+HIL2LROuzC/Jlk4ADr + mp+lKDC37KOuT8EtgIAEotUiGgY1wDhyDmDbDPBpUSvOrVnB44sBpx1Uv1Yk0GxyJQM+3n/1YnjrZGgm + TFbFEpU9CqUdPyh5vktRy44E1O/+aTD0OxNnMDHvkcWm2TBtU/BCZPNoiAaTmydv7KTfHZVAsXGXTgsS + jwOzAqh+tS2L20Vh1Tt4+DLIfaMLfeM6eTULpOnFTxGFTQ6eTWqdJAAjH76TWWymxGj/rTin3ELKjR4J + XDc4qBfNqM+KA7E1Tkzbybg9RP7TFS7fG+fSLTOpN/tIye/iQl67BLJrt6kcRM7kDHDAFzFEdY1T8w7S + iwZI1Q/g9kUIHCVuQQUe9UKu6CQB0Nao3cFH6w4XC3rPPSQVeNARSga8ogMBbEQvUQnhlJcYEUCE4zPA + ldIF7rTuSygO/EleKyyTqQKZ5YunwH8One4EZ3RQeRJxuJAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIYSURBVDhPxdLfS1NxGMfx/S8l/boILwq66ddNaTWTYij0 + gywhTFYYDClEwqmFMUxjlrasgRIF4kUwCjJKEwlCtFIxm7ntOI9tbW7unLMfx3fnnC3d6Kbooi88V1++ + r+fzfHlM/3zani7zqzrdnr+qdcD9Fux9IkpSJSGrxBIZIvE0oZU04o8UQiiJT0ziXVSY9ctMLyTYVXI+ + C7T0Z4FrvSKyDigqcWkDsD1YYvJrnAVRWQemvkkbQONj0QCsXUHkVBbIT3D1voDZ9o7Rj2ENkDVAYio/ + ga1niZ4hqHIsGiPoHa84fVx0zHK2eYKa9i9c6pbZUTHAyGQ4lyAPqL0b5I4HLC2CMULdvQD9w2keDqk0 + D6zR8AQuuxTKmwQDeTMeKhxB79w8CKUNfqTkGrUdXrpeZKjvUznTmaHydowTdoGj12c4YB01kM/5QEWr + QL3WZb9NB1Sq26a5Nahyql3GcjNEWaOXw7YJDlpHKLa4eT7s14C8Ecw3AtT2wp46H5L2gaebxtl0qIOi + I91sKXOz7eQz9tW8ZvvxR3hGA8z4pMIEe7XO55w5QEsQlzNEE2nCsTTLkRRFx1xsNbt4ORZgLiBrgFyY + QAcqHcp6glVtB1ZWM1kgmmJziZNX7wXmgwpzQhb4NJ8H6A/L7d/ZWTVmAPoSRXOAGEmzqG2hf1nJAkYC + 6XeguPqDAewuvWCUfvknZQD/+ZhMPwHnsVQlHGf7CwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABXSURBVDhPY/j27dt/SjDYACcnJ7Iw9Q348P4jURivAevX + rYfzQRjEJ8kAGI2sGJkPEwNh2hhAsReIwUQbABNHxiQbgI0PU097F+DCOA0gFVPPAPLxt/8Ahv/fqwcr + sbwAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABTSURBVDhPrc5BCsAwCABB3+b//9Lk4rWlQkBKZdtoYDGH + OETM7KzkgKpu1Q+MY3rx/hYCFAKEIUClwEK+zLv+H8QHceEZAhQChKXA3/qASlI7IheNrchRiIYqNAAA + AABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABISURBVDhPY/j27dt/SjDYACcnJ7Iw9Q348P4jUZi2BsDY + yJgkA4jBeA2AsbFhogwgBuM1AMZGx0QbQAwexAaQiqlnAPn4238Ah2rq45BjCHAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABwSURBVDhP1Y9BDoAgDAR9G1/D98jTxEuvmJoMwYYIIhcP + kyy0O4FFRNIXLoFzboj5grgfXXQLwhbyrNwhPwpqZXbIzRco3q95zg65KaBcSqoCW1TKsp4167fINwEX + FsoK5VcCChbmPxHU7mGeYBxJJ0krycEsLFlLAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADvSURBVDhPlZI7DoMwEEQ5Qo6SM9AjpaVLQU9OwTVScgBq + SE1FCvrUgcIQ8yk3jMGWkRxirzRC7M48W7Y91DAM52ma2CKyFENmF06ShHzftxK8CuIalpIQAFSzqp7U + sf5Q8Eg/sjuAKWCSE4DzQUjvOQEwj6KImnejes4AzMIwpLquqe8+vwGmQ9TnQRBQnufiBnTA4TXqAKk0 + TSnLMszY34dkAkDqHeivEWaTEMD28Y3jWJ+tgKOCEbfQtq0IA1KWJY3jeNksx4VVoCVwR1Buf/l/bBb7 + 4py/iqIQW5/n+bq17Qtntax8Y4yd1o7nfQGVkWr2CSzk8QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAA/SURBVDhPY6AK+Pbt239yMdwAJycnkjGGAR/efyQa4zSA + FJq2LsCFkdUNdxcQQ1PfBaRiFAPIxWADBhAwMAAAnvJ0MKhFOgAAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABOSURBVDhPYxgB4Nu3b//xYZwKoPrB8k5OTlgxWB02BVQx + ABmjy8MwSA6nAdjY6BivAcgYXR6GQXLUCQNsGKqfsAGEALKh2DBU2QgGDAwA65JKiLhgQ8MAAAAASUVO + RK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALqSURBVDhPndPrU4xhGMfx++/wDxCVTjqRHeuQKVGWFHl2 + WtlKJx1IUYRak46EsllWZbWJrXTQpkw2IWlDlBwmZIY3Xhgz3n09PcsI71wz18vfdX3ue+5bBG9MWdDT + aydjIIk0eyJ7unaT3K4j0RaPvkXLLstO4hu2o70Yw26rhKfG7C3m19TkFD4BvnJYj/1Du9K979uU7p5p + pfONlY7XzVgmz6MxhGNs6qGk5Qg/40JIUgJzgpTuBCVsfWXCMl1P01Qtl1+cwfSsmvon5RT2ZxJ5dD31 + eUJpp1m4JENDd3H3XEJyhw77+3YsL400Tp7j8vMaOVyJ0VnGuccG8npTiShYy2yfgHHBtWLhUuiTkrlh + 60B/Q8utdzYaXpzFPHGKC08qqHOWcnbUwKmRIlJtEmG56n8H/BIkNO+ka+YapokqhVw7doKa0WKqHhym + /N5BEltjCc1SUZEhh0vmHSEz+4AiiG/cTsebqxjHZfKYgdMjx6h8UMjJoXwMd3PYZd3CmrQV6O1BZDlV + iL8F0sVobNONMrmEaplccb+AUkcuxYPZFA2kobVsQp0Y/O+AjKz9XJcFO+o0tEyaFXLZcD4nHPs4dmcv + R/pTONirR2NSo9L5I9Ll4Fz4klinDPgliKmJxDReKZPzMMhbjw6kU9iXRP6tBPZ1SqyvDSRE8kNUzyLM + IKQWlyA90yXYWh5B7eNSjg9mUtSfyiH5Veb26Mi+GUdG2zZCqpcSFOszb4D1zzuIMoRR8/A4yde3EdcU + QWxDKBHGlWyoC0Z92gf/kwsJ2LoUsbHMFd475jpCVdUZRaAp38Bq+ZZV+gBCdMsI0fqxPM5X3upNYLQX + /hpP/KI8ON/YjW+ku2v7XDkcgyzxWIzBkcPXb9/5+OkLr2c+MzE9y+jTtzgeTdM3NMHN205ae0a40jaM + d7jb7wFz5ebp5h2WpyY0R8WqlKCfCn+WS74ExngREC1v3+yO36bFeIUvwk1T/+eP/P8S4gcGUx95MUvF + RQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIVSURBVDhPtVJNaxNRFM1PyE+Yn1AUXLjK0uWgDWQZwUUX + KsGFBEEcCkIwqBEpGiydsSo2kupsasdo7Yi2toh0sFZjG5JpiZo20/TpVOmH5njvm8BYahEXHji8+968 + c+55l4n8F0zM+rhVWkHmdg29A/PoK1Yw8uIjOp/3xpvqBgrjLeilZbjNLXxZ34bwt6jexMVCGRndQenl + 0p+NWHzPXoP3rQ3bAbQhQM0E5Np2BKprbZzrm8TIs8puE+68+r0NwwZiacCwALEBCVcAqet8JlAjk1PZ + JzsNJt6u4+FMS3ZmMV9mmFNAMhesbBZLC6oFdOsd8oVXocmdx018Ej9k1FgqiJ0zgS6qlR6BVI4iEFRN + IJlxMF/1cfTMcGiQvbskB6ZqgairJ6BCTJKYu9tlAUW1oSRsNDwfB+JXQ4PzN6s07W0ZPxDS5aSgJEFn + 06Y9CaOqSauJRvMr9qmXQ4P8/RoWvU16eyBUEq5kbigwiKoOMTBQ0zbKlTq6TxihwejkZ1iOJwfEwmiC + BQ49yaW50J7Fh0xJw3IxbM3hwo2x0ICRHZzFgveTunYERK5lgo5YMxx8WPFw5Li+U8wYm66jNz+Naov+ + Beqiao58N5NrPluoryJO0QeKU7sNGKPPazh9aRzGo/eYmVvEMk270fTlmzl2N3XW9xL/jv7iaxw7+wAH + E9ew//AVxE8OItv/9O/Cf0ck8gud2vKswuxNZgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAAoAAAASCAYAAABit09LAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACJSURBVChTY1Aq33Nevn6/AAMhoFS5/z9YcdV+A6gQdgBW + CFa8/T1exXCFUMXKlfsDoFKoAEUhDFftT4BKIwBWhSBcsb8AqgQCsCqCYsWKvfOhyvArBGG4YmySGBjk + DKwS6JgYhcRZjexzrApAGD0sMRTgih10RTjjG6Fw933CiYKYNElcwmVgAADSSfAhMn3zRAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAAoAAAASCAYAAABit09LAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACOSURBVChTjdJRDYAgEIBhItAAJYGRbIHwYgQjGMMX8SIY + xQi6k2MyOZR/u03hG3OqqEmNIOmyHCJt1p1u+ZSBBpG2cNJSnnLQabMciIrwjVioHfQpYGEJ4RARorXb + xIE4AQ1+5jbTCdB64DbTuSH2dyqx0NdzEnmqej0xDtNWXtUnjKWYlspV/WYxNYK8ANHmxgWBdQNPAAAA + AElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABRSURBVDhPYxgG4Nu3b/8pwWADnJycyMIoBsBMJBbjNQCb + gbjUYBgAYu/auQvOh+Hz5y9gqAPR1DcAGx+bGF4DiMEYBpCD4QZQgqHpcegCBgYARLcFLXDVgGQAAAAA + SUVORK5CYII= + + + + 72, 22 + + + 見附る + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAGFJREFUOE+t + 0kEKwCAMRNGcLbeul9DTZJuioFAySmK6eLQO8leSqqbAMQKOESQimjECzHzlE5hFr2MABXd3TKD/l6es + 81RrM/f69/8AOqPtGPAwgRsrkAGfZwQcI+Dop/QCrVAkHEBiZ1oAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAJZJREFUOE+1kcERQDAURFOCEpSghhSXKtKTM4rAJVcsf5MgCDN25hHy900MdYxz + bnqgXihk/BwMaa0vsdZSUkplHwqGfjxBiTEGkn6hklpIjiCWSC0kVwAwK7WQO0GMF+DyhZ2AR8olKUgd + M8WjAOu26fwz1sf9SwHu+D0cJngXz/wn4MDnT8iBReIFb1iLTGx7w9ZWagbvFb7v47pmTgAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + xAAADsQBlSsOGwAAAMZJREFUOE/tkcERgyAQRS3BElKCNVgLVVgAd+/cOeZAASkhJViAB5MYuZL9zq6C + GmIB+TNPYWf3jWCxjfc+/OBOlNy+D5rquv6KMUYkFx5JI4LH8NwhEq01JANR8diaM4JYwmNrzgoAenls + TU4Q8xdEAnpURIfNEdN7CuNrzAo6/FMUYlBrmmZZbyWoi2DeWGtD3/dzUSm1NKAua7xjEoFzbmmCAGuA + ujQfkRwBn3x0nLZt0Xwj+KqjUDF7iQQGr0RJ8JSkKD5+34z+dzcdwQAAAABJRU5ErkJggg== + + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABO + CwAAAk1TRnQBSQFMAgEBBQEAAegBAgHoAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA + AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 + AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA + AWYDAAGZAwABzAIAATMDAAIzAgABMwFmAgABMwGZAgABMwHMAgABMwH/AgABZgMAAWYBMwIAAmYCAAFm + AZkCAAFmAcwCAAFmAf8CAAGZAwABmQEzAgABmQFmAgACmQIAAZkBzAIAAZkB/wIAAcwDAAHMATMCAAHM + AWYCAAHMAZkCAALMAgABzAH/AgAB/wFmAgAB/wGZAgAB/wHMAQABMwH/AgAB/wEAATMBAAEzAQABZgEA + ATMBAAGZAQABMwEAAcwBAAEzAQAB/wEAAf8BMwIAAzMBAAIzAWYBAAIzAZkBAAIzAcwBAAIzAf8BAAEz + AWYCAAEzAWYBMwEAATMCZgEAATMBZgGZAQABMwFmAcwBAAEzAWYB/wEAATMBmQIAATMBmQEzAQABMwGZ + AWYBAAEzApkBAAEzAZkBzAEAATMBmQH/AQABMwHMAgABMwHMATMBAAEzAcwBZgEAATMBzAGZAQABMwLM + AQABMwHMAf8BAAEzAf8BMwEAATMB/wFmAQABMwH/AZkBAAEzAf8BzAEAATMC/wEAAWYDAAFmAQABMwEA + AWYBAAFmAQABZgEAAZkBAAFmAQABzAEAAWYBAAH/AQABZgEzAgABZgIzAQABZgEzAWYBAAFmATMBmQEA + AWYBMwHMAQABZgEzAf8BAAJmAgACZgEzAQADZgEAAmYBmQEAAmYBzAEAAWYBmQIAAWYBmQEzAQABZgGZ + AWYBAAFmApkBAAFmAZkBzAEAAWYBmQH/AQABZgHMAgABZgHMATMBAAFmAcwBmQEAAWYCzAEAAWYBzAH/ + AQABZgH/AgABZgH/ATMBAAFmAf8BmQEAAWYB/wHMAQABzAEAAf8BAAH/AQABzAEAApkCAAGZATMBmQEA + AZkBAAGZAQABmQEAAcwBAAGZAwABmQIzAQABmQEAAWYBAAGZATMBzAEAAZkBAAH/AQABmQFmAgABmQFm + ATMBAAGZATMBZgEAAZkBZgGZAQABmQFmAcwBAAGZATMB/wEAApkBMwEAApkBZgEAA5kBAAKZAcwBAAKZ + Af8BAAGZAcwCAAGZAcwBMwEAAWYBzAFmAQABmQHMAZkBAAGZAswBAAGZAcwB/wEAAZkB/wIAAZkB/wEz + AQABmQHMAWYBAAGZAf8BmQEAAZkB/wHMAQABmQL/AQABzAMAAZkBAAEzAQABzAEAAWYBAAHMAQABmQEA + AcwBAAHMAQABmQEzAgABzAIzAQABzAEzAWYBAAHMATMBmQEAAcwBMwHMAQABzAEzAf8BAAHMAWYCAAHM + AWYBMwEAAZkCZgEAAcwBZgGZAQABzAFmAcwBAAGZAWYB/wEAAcwBmQIAAcwBmQEzAQABzAGZAWYBAAHM + ApkBAAHMAZkBzAEAAcwBmQH/AQACzAIAAswBMwEAAswBZgEAAswBmQEAA8wBAALMAf8BAAHMAf8CAAHM + Af8BMwEAAZkB/wFmAQABzAH/AZkBAAHMAf8BzAEAAcwC/wEAAcwBAAEzAQAB/wEAAWYBAAH/AQABmQEA + AcwBMwIAAf8CMwEAAf8BMwFmAQAB/wEzAZkBAAH/ATMBzAEAAf8BMwH/AQAB/wFmAgAB/wFmATMBAAHM + AmYBAAH/AWYBmQEAAf8BZgHMAQABzAFmAf8BAAH/AZkCAAH/AZkBMwEAAf8BmQFmAQAB/wKZAQAB/wGZ + AcwBAAH/AZkB/wEAAf8BzAIAAf8BzAEzAQAB/wHMAWYBAAH/AcwBmQEAAf8CzAEAAf8BzAH/AQAC/wEz + AQABzAH/AWYBAAL/AZkBAAL/AcwBAAJmAf8BAAFmAf8BZgEAAWYC/wEAAf8CZgEAAf8BZgH/AQAC/wFm + AQABIQEAAaUBAANfAQADdwEAA4YBAAOWAQADywEAA7IBAAPXAQAD3QEAA+MBAAPqAQAD8QEAA/gBAAHw + AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wEAEAcwAAMHBuwHBzAA + AwcB7AQHAewHBzAAAwcB7AQHAewHBzAAAwcB7AQHAewHBzAAAwcB7AQHAewHBzAAAwcG7AcHMAACBwHs + BwcD7AMHMAABBwHsBwcB7AMHAewCBzAAAgcB7AUHAewFBwHsAQcwAAMHAewEBwHsBQcB7AEHMAAEBwHs + AwcB7AUHAewBBzAAAwcB7AEHAewDBwHsAwcB7AIHMAACBwHsAwcB7AEHAewBBwPsAwcwAAEHAewFBwHs + CAcwABAHOwAB9CMAARwQBwoAAfQBpgH0FAAB9w1mAXQQBwkAAfQBrQG0AaYB9BMAAfcB/wHxAvACvAUJ + AbsBZgEcEAcHAAKRAbQB3AHbAbQBpgH0CAABGQGmAQkHAAH3Av8E9ALzAxkBuwFmAXQGBwLsBQcC7AEH + BwABkQEAAfQBtAHcAdsBtAGmAfQGAAEZAbQCpgEJBgAB9wH/Ae0CkQOuAfMCbAFmAbsBZgEcBgcB7AcH + AewBBwcAAZECAAH0AbQB3AGtAfQGAAEJArQDpgEJBQAB9wQ5A/QBGQLzARkBuwFmARwGBwHsBwcB7AEH + AwABGwMAAZEDAAHzAbQB9AcAA7QEpgEJBAABtQE5AgABOQOuA2wBZgG7AWYBAAYHAewHBwHsAQcCAAEb + ASoBGwIAAZECAAH/AYIB8wgAArQB2wEJAa0DpgH/AwAB7wk5AvMBBwFmAQABBwPsAgcB7AcHAewBBwEA + ARsBKgFZASoBGwEAAZEBAAH/AaoBsAGCAf8HAAG0AdwBCQHcAQkBiwKmBAABtQH/Ae0CkQE5AwABOQFs + AWYBBwFmAQAGBwHsBwcB7AEHARsBKgNZASoDkQGwAtgBsAGCAf8GAAG6BNwBCQGGAaYEAAG7BP8FOQL0 + AQcBZgEAAQcD7AIHAewHBwHsAQcBMQGaAnoCWQEqARsBAAH/AbAC2AGwAYIB/wUAARkBugTcAQkBrQQA + AbsH/wT0ARkBZgEABgcB7AcHAewBBwEbATEBmgJ6AlkBKgEbAQAB/wGwAdgBsAH/BwABGQG6A9wBugEZ + BAAE1gHVA7QGrQEABgcB7AcHAewBBwEAARsBMQGaAnoCWQEqARsBAAH/AbAB/wkAARkBtAHcAboBGQUA + AdYBCQXcAdYF1QGtAQAGBwLsBQcC7AEHAgABGwExAZoCegExARsDAAH/CwABGQG6AfQGAAXWAtUDtAGz + A60BABAHAwABGwExAZoBMQEbKAAQBwQAARsBMQEbKQAQBwFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEB + AQABAQYAAQEWAAP/gQAB/wHvA/8B/gIAAf8BxwL/AYADAAH/AYMC/wGAAwAB/gEBAf4BPwGAAwAB/gGA + AfwBHwGAAwAB/gHBAfgBDwGAAwAB7gHjAfgBBwGAAQECAAHGAccB+AEDAYABAQIAAYIBgwH4AQcBgAEB + AwABAQH4AQcBgAEBAwABgAH4AQcBgAEBAwABQQH8AQcBgAEBAgABgAEjAf4BDwGAAQECAAHAAXcB/wEf + AYABAQIAAeAF/wIAAfEF/wIACw== + + + + + AAABAAEAQEAAAAAAGAAoMgAAFgAAACgAAABAAAAAgAAAAAEAGAAAAAAAADAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7fHxLTEw3 + ODgpKioeHx8aGxsZGhoZGhoYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkY + GRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkYGRkZGhoaGxse + Hx8lJiYzNDQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABfYGD///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////8cHR0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8bHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////8aGxsAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABdXl7///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////8aGxsAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABdXl7///////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////////////////////////////////////// + ///z8PS5msWyjMDBp8v///////////////////////////////////////////////////////////// + //////////////////////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////////////////////// + ///////////////g0+V/Lp+DJamDJamDJamHR6Dz8PT///////////////////+/tn+ahw+VgQCgjh/U + z6////+/up+/up/f3M////////////////////////////////////8aGxsAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///////////////////// + ///////////////////////////g0+WDL6SDJamDJamDJamDJamDJamPSarz8PT///////////+1qV+r + lACrlACrlACrlACgigDPyJ/p6N/p6N/08+////////////////////////////////////8aGxsAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABdXl7///// + ///////////////////////////////////////g0+WDL6SDJamDJamDJamDJamDJamDJamDJamPSarz + 8PT///+1qV+rlACrlACrlACrlACrlACrlACljwDPyJ////////////////////////////////////// + //////8aGxsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABdXl7////////////////////////////////////////g0+WDL6SDJamDJamDJamDJamDJamD + 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 + 8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw + 8PDu7u7q6uri4uLT09PCwsLY2Nj49/fz8/Pu7u7p6enj4+Pd3d3X1tfd290wMTEAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABOT0/v7u/v + 7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v7u/v + 7u/v7u/v7u/v7u/u7u7t7O3p6Ong4ODS0tLBwMHV1dXz8/Pu7u7p6enj4+Pd3d3X1tfd290sLS0AAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABNTk7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7u + 7e7u7e7u7e7u7e7u7e7u7e7u7e7u7e7t7e3s6+zn5+ff39/R0dHBwMHU1NTu7u7p6enj4+Pd3d3X1tfd + 290rKywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABNTU7t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t + 7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3t7O3s7Ozq6urm5ube3d7R0dHCwsLT09Pp6enj + 4+Pd3d3X1tfc29wqKisAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLTEzr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr + 6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6+vr6uvp6Onk5OTc3NzR + 0dHFxcXT09Pj4+Pd3d3X1tfc29wpKioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLS0vq6urq6urq6urq6urq6urq + 6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urq6urp + 6Onm5ubi4uLb2trS0dHKycrU1NTd3d3X1tfd290pKioAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLTEzp6enp + 6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp + 6enp6enp6eno6Ojn5+fk5OTg4ODa2trT09PPz8/X19fX1tfd290rKywAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABNTk7o6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo + 6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojn5ufl5eXj4uPe3t7a2trW1tbV1dXW1tbd3N0uLi8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABRUVLn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn + 5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubn5ubm5ubl5eXj4+Ph4OHe3d3b2trZ2dnY19jd3N02NjcA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABWVlfl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl + 5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXk4+Ti4uLg4ODe3t7d3N3b + 2tvf3t9EREUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABbXFzk5OTk5OTk5OTk5OTk5OTk + 5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk4+Tj4uPi + 4eLg4ODf39/b2tsICAlYWVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACtra6SkpOK + i4uEhIWCgoN/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/f4B/ + f4B/f4B/f4B+fn96ent4eHlzc3RzcnTz8/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////// + /////////4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAA + A///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+A + AAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAA + A///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+A + AAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAA + A///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAP//4AAAAAAA///gAAAAAAD//+A + AAAAAAP//4AAAAAAA///gAAAAAAD//+AAAAAAAf//4AAAAAAD///gAAAAAAf//+AAAAAAD///4AAAAAA + f///gAAAAAD///+AAAAAAf///4AAAAAD////gAAAAAf///+AAAAAD////4AAAAAf////gAAAAD////+A + AAAAf////4AAAAD//////////////w== + + + \ No newline at end of file diff --git a/FormEdit.ja.resx b/FormEdit.ja.resx index 9c5b7f61..b89d59e1 100644 --- a/FormEdit.ja.resx +++ b/FormEdit.ja.resx @@ -338,553 +338,624 @@ - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ - fwAAAk1TRnQBSQFMAgEBKgEAAWQBBAFkAQQBEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA - AwABsAMAAQEBAAEYBgABhP8A/wBdABv2EgAn9mwAA/YJQgP2CUID9hIAA/YGQgP2A0ID9gNCA/YDQgP2 - BkID9mwAA/YDQgP2A0ID9gNCA/YDQgP2EgAD9gNCG/YDQgP2bAAD9glCA/YDQgP2A0ID9hIAA/YDQgP2 - A0ID9gNCA/YJQgP2A0ID9mwACfYDQgP2A0ID9gNCA/YSAAn2A0ID9gNCA/YDQgP2A0IJ9mwAA/YJQgP2 - CUID9hgAA/YDQgP2A0ID9gNCA/YDQgP2aQAY9gNCFfYMAAP2CUID9glCA/ZpAAP2A0ID9gNCA/YGAAn2 - AwAD9gNCA/YDQgP2DAAD9gNCA/YDQgP2A0ID9gNCA/ZpAAP2A0ID9gNCA/YSAAP2A0ID9gNCA/YMAAP2 - CUID9glCA/ZpAA/2EgAP9gwAG/b/AP8AqwAD+APyEvYD8gPxA/wPACr2EgAD9APyDPYD8gP0GAAD9APy - DPYD8gP0DAAD8gOGA0IDegOGDEIDkQPyDwAD9iRCA/YMAAP6A/MG9gPgBkID4Ab2A/MD+gwAA/oD8wb2 - A+AGQgP2A1kDyQPzA/oGAAP2A0IDswP2A0IDZAb2A7MDQhX2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHv - AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgn2AwAD+gP1A6cDyQP2A6cGQgOc - A/YDyQOnA/UD+gYAA/oD9QOnA8kD9gOnBkID9gZCA3oD3gPyAwAD9gNCA6cD6wP2A2QDQgP2A6cDQgP2 - DEIG9gNCAfEB7wHwAfEB7wHwA0IB2wHZAdoB8QHvAfAB8QHvAfAB2wHZAdoDQgHxAe8B8AHxAe8B8ANC - A/YDQgP2AwAD8wOnBkIDZANNBkIDTQNkBkIDpwPzBgAD8wOnBkIDZANNBkID9glCA00DnAPzA/IDhgxC - A4YDegNCA4YB8wHyAfMB8QHvAfAB8QHvAfAB8QHvAfADQgb2A0IB8QHvAfADQgOGAfEB7wHwAfEB7wHw - AfEB7wHwAfEB7wHwA4YDQgHxAe8B8ANCA/YDQgP2A/QD9gPJHkIDyQP2BvQD9gPJEkID9glCA00DnAP2 - A/gD8hL2AfUB9AH1AfMB8gHzAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0IG9gNCAfEB7wHwA0IDhgHx - Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AOGA0IB8QHvAfADQgP2A0ID9gPyBvYDZANCA00BxQHEAcUB8QHv - AfAB8QHvAfABxQHEAcUDTQNCA2QG9gbyBvYDZANCA00BxQHEAcUB8QHvAfAB8QHvAfAD9gZCA3oD3gP2 - A/UMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgb2 - A0IB8QHvAfAB8QHvAfADQgHbAdkB2gHxAe8B8AHxAe8B8AHbAdkB2gNCAfEB7wHwAfEB7wHwA0ID9gNC - BvYD4AOnA00DQgHFAcQBxQHxAe8B8AHQAs8B0ALPAfEB7wHwAcUBxAHFA0IDTQOnA+AG9gPgA5wDTQNC - AcUBxAHFAfEB7wHwAdACzwHQAs8D6wNZA8kM9gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx - Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCBvYDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx - Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YDQgb2DEIB8QHvAfAB0ALPBkIB0ALPAfEB7wHw - DEID9gPrDEIB8QHvAfAB0ALPBkIDnAb2A2QGQgP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw - AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0IG9iRCA/YDQgb2DEIB8QHvAfAB0ALPBkIB0ALPAfEB7wHw - DEID9gPrDEIB8QHvAfAB0ALPBkIBuwG6AbsB8QHvAfAMQgP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHw - AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0It9gNCBvYD4AOcA00DQgHFAcQBxQHxAe8B8AHQ - As8B0ALPAfEB7wHwAcUBxAHFA0IDTQOcA+AG9gPgA5wDTQNCAcUBxAHFAfEB7wHwAdACzwHQAs8B8QHv - AfABxQHEAcUDQgNNA5wD4AP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw - AfEB7wHwAfEB7wHwA0ID9gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx - Ae8B8AHxAe8B8ANCA/YD8gb2A2QDQgNNAcUBxAHFAfEB7wHwAfEB7wHwAcUBxAHFA00DQgNkBvYG8gb2 - A2QDQgNNAcUBxAHFAfEB7wHwAfEB7wHwAcUBxAHFA00DQgNkBvYD8gwAA/YDQgHxAe8B8AHxAe8B8AHx - Ae8B8AHxAe8B8AHxAe8B8AxCA/YMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAMQgP2 - A/QD9gPJHkIDyQP2BvQD9gPJHkIDyQP2A/QMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv - AfAJQgOGA/UMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAJQgOGA/UDAAPzA6cGQgNk - A00GQgNNA2QGQgOnA/MGAAPzA6cGQgNkA00GQgNNA2QGQgOnA/MPAAP2A0IB8QHvAfAB8QHvAfAB8QHv - AfAB8QHvAfAB8QHvAfAGQgOGA/UD+AwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AZC - A4YD9QP4AwAD+gP1A6cDyQP2A6cGQgOcA/YDyQOnA/UD+gYAA/oD9QOnA8kD9gOnBkIDnAP2A8kDpwP1 - A/oPAAP2FUIDnAPzA/oPAAP2FUIDnAPzA/oJAAP6A/MG9gPgBkID4Ab2A/MD+gwAA/oD8wb2A+AGQgPg - BvYD8wP6EgAY9gPzA/wSABj2A/MD/BIAA/QD8gz2A/ID9BgAA/QD8gz2A/ID9HIADPYD9QP4rgAD9glC - A4YD9QP4SAABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFxAYsBRQFpAYQBPwFiAX4BOgFcAXgBswHA - ActIAAP1A4YGQgOGA/YD9QP4RQABSQG4Ad8BgwHbAe8BeQHUAewBbwHPAeoBZAHIAecBWQHDAeUBTwG9 - AeIBRAG3AeABOQFaAXcbAAHIAb0BtQGIAXABXQGDAWoBWAF+AWUBUgF6AWABTgF1AVwBSAFxAVcBQwFt - AVMBPgFqAU8BOwFnAUsBNwG6Aa4BpAwAA/gD9QaGA/YGhgP1A/gPADD2AwABTgG8AeIBjgHgAfEBhQHb - Ae8BpgGMAXoBmwGBAW4BlQF6AWcBWgHDAeUBUAG+AeMBPAFeAXobAAGvAZYBhwHpAeAB3AHjAdoB0wHe - AdMBzAHaAcwBxAHVAcUBvAHQAb4BtQHLAbgBrAHGAbEBpgHDAasBnwFoAU4BOQ8AA/gD9QP2A4YGQgOG - A/UD+AwAA/YqQgP2AwABUAG+AeMBmAHmAfQBjwHhAfIBhQHcAe8BfAHWAe0BcgHRAeoBZwHKAekBXAHF - AeUBQAFiAX0bAAGzAZoBiwHuAegB5QHpAeEB3AHjAdkB1AHfAdIBzAHaAcwBxAHVAcUBvAHQAb4BtQHM - AbgBrQHGAbEBpQFtAVMBPhIAA/gD9QOGCUIDhgP1A/gJAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHv - AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgP2AwABUAG+ - AeMBnwHrAfYBmQHmAfQBpwGLAXoBnAGBAW8BlQF6AWcBcwHRAesBaQHLAekBQwFmAYEBUgF5AZEBTAFx - AYsBRQFpAYQBPwFiAX4BOgFcAXgBswHAAcsJAAG3AZ4BkAHzAe8B7AHuAegB5AHoAeAB3AF+AWUBUgFu - AVQBQAFjAUgBMwHVAcUBvAHQAb4BtAHLAbgBrAFzAVoBRgYAFfYDhglCA4YD9QP4BgAD9gNCAfEB7wHw - AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw - AfEB7wHwA0ID9gMAAVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHyAYkB3gHxAX8B2AHuAXUB0gHr - AUcBbAGGAW8BzwHqAWQByAHnAVkBwwHlAU8BvQHiAUQBtwHgATkBWgF3CQABvAGjAZYB+AH2AfQB8wHv - Ae0B7wHoAeQB6QHgAdwB4wHZAdMB3wHTAcsB2gHMAcUB1QHFAbwB0AG+AbUBegFgAU4GAAP2EkIDswOG - CUIDhgP1A/gDAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv - AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgP2AwABzwHtAfcBUAG+AeMBUAG+AeMBTwG9AeIBSQG4 - Ad4BQQGwAdgBOAGpAdIBMQGiAcwBaQG/AdkBpgGMAXoBmwGBAW4BlQF6AWcBWgHDAeUBUAG+AeMBPAFe - AXoJAAHBAakBnQH8AvsB+AH2AvQB7wHsAX4BZgFSAW4BVAE/AWMBSAEzAd4B0wHMAdoBzAHEAdUBxQG8 - AYABaAFVBgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwA0IB8QHvAfAB8QHvAfAB9AHzAfQDhglCA4YD9QP4 - A/YDQgHxAe8B8AHxAe8B8BhCAfEB7wHwAfEB7wHwA0ID9hUAAVABvgHjAZgB5gH0AY8B4QHyAYUB3AHv - AXwB1gHtAXIB0QHqAWcBygHpAVwBxQHlAUABYgF9CQABxQGvAaMD/wH8AvsB+QH2AfUB9AHvAewB7gHn - AeQB6QHhAdsB5AHZAdMB3gHSAcwB2gHMAcUBiAFwAV0GAAP2A0IB8QHvAfADQgHxAe8B8ANCAfEB7wHw - A0IB8QHvAfADswOGCUIDhgP1A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx - Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YVAAFQAb4B4wGfAesB9gGZAeYB9AGn - AYsBegGcAYEBbwGVAXoBZwFzAdEB6wFpAcsB6QFDAWYBgQkAAckBtAGqBv8B/AH7AfoB+AH1AfQB8wHv - AewB7gHnAeUB6AHgAdwB4wHZAdQB3wHTAcwBjgF3AWYGAAP2BkIB8QHvAfAB8QHvAfADQgHxAe8B8ANC - AfEB7wHwA0ID9gOGBkIDhgP1A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx - Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YVAAFQAb4B4wGmAe0B9wGgAesB9QGZ - AecB9AGRAeMB8gGJAd4B8QF/AdgB7gF1AdIB6wFHAWwBhgkAAeYB3QHYAckBtAGpAcQBrQGiAb8BqAGb - AbsBogGTAbUBnAGOAbIBmAGJAa0BlAGEAagBjwF/AaMBigF5AcgBvQG1BgAD9gNCAfEB7wHwAfEB7wHw - AfEB7wHwA0IB8QHvAfAB8QHvAfAB8QHvAfADQgP2A/UGhgP1A/gD9gNCAfEB7wHwAfEB7wHwAfEB7wHw - AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0ID9hUA - Ac8B7QH3AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHYATgBqQHSATEBogHMAakB0QHiMAAD9g9C - AfEB7wHwCUID9gP4BvUD+AMAA/YqQgP2YAAD9g9CAfEB7wHwCUID9gMABvgGADD2YAAD9htCA/afACH2 - PwAB6gHmAeMBnAGFAXUBlgF/AW0BkAF3AWcBiQFwAV4BggFqAVcBfAFjAU8B6gHmAeMMAAH4Ae4B4wwA - AZQBfAFsAwABkwF8AWoDAAGRAXkBaAMAAY4BeAFmAwABjAF1AWIDAAGJAXABXwMAAYYBbQFbAwABggFp - AVcVAAHkAdUB1AHLAaIBnwG2AWcBaEIAAcIBqwGgAd4B0QHKAdoBzAHEAdYBxwG+AdIBwQG4Ac4BuwGy - AcsBtwGrAXsBYgFPCQAB+AHuAeMBmQEzAQAB+AHuAeMGAAGXAYEBcAH8AfgB9QH8AfYB8wH8AfQB8QH7 - AfIB7wH7AfEB7AH7Ae8B6gH5Ae0B5wH5AesB5QH5AekB4wH4AegB4AH3AeYB3QH3AeMB2wH2AeIB1wH1 - AeAB1RIAA/0BywGfAZwB0QG6AbQB4gHmAd0BzQGnAaUBtgFnAWgSAAG3AaIBkwFjAUkBNQFjAUkBNQFj - AUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFj - AUkBNQMAAcsBtwGsAeoB4wHfAdkBzgHIAVgBSwFBAdkBzgHIAdkBzgHIAc4BuwGyAYEBaAFVBgAB+AHu - AeMBtQFjATUB2AGbAVsBmQEzAQAB+AHuAeMGAAH9AfoB+QHGAbYBrQGUAXwBbAG9AawBoQGTAXwBagG8 - AasBngGRAXkBaAG6AagBmwGGAW4BWwH5AesB5AGqAZUBhgG6AaQBlgGLAXMBYQH2AeMB2gGGAW4BWwwA - AegC2wG7AX0BegHRAboBtAHoAfYB6wHpAfkB7gHpAfkB7gHIAZkBlwG2AWcBaA8AAbcBogGTA/8BtwGi - AZMBtwGiAZMBtwGiAZMBtwGiAZMBtwGiAZIBtwGdAYwBtwGiAZMBtwGiAZMBtwGiAZMBtwGiAZMBtwGi - AZMBYwFJATUDAAHUAcMBuwHqAeMB3wFYAUsBQQFYAUsBQQFYAUsBQQHiAdcC0gHAAbgBhwFvAV0BlwGA - AW8BlwGAAW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQAB+AHuAeMBnQGIAXYB/gH8AfsBpQGP - AX4BnwL+AZwB/QH+AZkB/QH+AZUC/gGSAf0B/gGOAf0B/gG3AaMBlgH6Ae4B6QHMAboBrgGDAv4BuAGj - AZUB+AHmAd4JAAH5AvgBxgKXAcEBlAGQAeIB5gHdAeQB6wHhAcQBmQGUAbkBdQF0AcABwwHBAekB+QHu - AcYBlQGUAbYBZwFoDAABtwGiAZMD/wHFAUoBEAH9AYUBYgHUAV4BKwG2AVEBJAGiAUgBHQGzAWEBOAHk - AcgBugHmAdEBxgHmAdMByQHhAcoBvQG3AaIBkwFjAUkBNQMAAd0B0AHJAeoB4wHfAeoB4wHfAeoB4wHf - AeoB4wHfAeIB1wHSAdYBxwG+AY0BdQFjAZcBgAFvAwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGb - AVsBmQEzBAAD/gHKAbwBswGnAv4BpAL+AaAB/gH/AZ0C/gGZAv4BlgL+AYsBcwFhAfsB8QHtAbABmwKM - Af0B/gGLAXMBYQH5AeoB4wGLAXMBYQP/AeIC0AG4AXsBeQHTAcUBvgHpAfkB7gHXAccBwAHBAYMBgQHD - An0BwgF1AXYBugFuAW0BxwHMAckB6QH5Ae4BxQGUAZMBtgFnAWgJAAG3AaIBkwP/Ae4BzAG8AcoBWQEk - Af0BqQGQAcsBZwE6AbQBXQExAdkBoAGGAe4B4gHbAe0B4QHaAeoB2QHQAeQBzwHEAbcBogGTAWMBSQE1 - AwAB6gHmAeMB1AHFAbsBtAGeAZAB3QHQAckB3QHQAckBjQF2AWQBjgF2AWQB6gHmAeMBlwGAAW8GAAH4 - Ae4B4wHYAZsBWwH/Ac0BmQHJAXMBQwH4Ae4B4wGlAY8BfgP/AaoBlQGGAa4B/gH/AeoBgAFKAegBewFE - AeUBdgE/AeIBcgE6AZ0B/gH/AbkBqQGdAfwB9AHxAdABwAG1AZMC/gG5AaYBmQH6Ae0B5wMAAbkBnAGZ - AboBkwGQAeYB8QHnAeQB6wHhAb8BkQGOAcIBhQGDAckCgAHIAX0BfwHGAn0BwgF7AX0BugFuAW0BxwHM - AckB6QH5Ae4BwwGRAY8BtgFnAWgGAAG3AaIBkwP/Av4B/QHuAcwBvAHLAV4BKwHMAX4BWAHZAaEBhgH6 - AfUB8wH6AfUB8wHxAegB4gHsAd0B1QHoAdcBzQG4AaMBlAFjAUkBNQMAAfQB8gHwAdkBzAHEAbwBpwGY - AwAB2AHuAfYBywG3AawBlwGAAW8B9AHyAfABlwGAAW8JAAH3Ad4B4gHYAZsBWwH4Ae4B4wYAA/8BzgHB - AbgBtQH+Af8BsgL+Aa4C/gGsAv4BqAL+AaUC/gGQAXcBZgH8AfcB9QG1AaEBkgGaAv4BkAF3AWYB+wHw - AewBkAF3AWYBuAF2AXQB5AHoAd8BzwG/AbkBuwF7AXkBwQJ/AcYCgwHIAoIBxwKDAcYBfwGBAcUBfQF8 - AcMBegF7AbkBbQFsAccBzAHJAekB+QHuAcIBjgGNAbYBZwFoAwABugGlAZYG/wL+Af0B7gHMAbwB5AGv - AZQB/QH6AfgBxQHWAccBTgFuAVEBLwFUATABVAFzAVYByAHTAb8BuQGkAZUBYwFJATUGAAHeAdEBygHq - AeMB3wHLAbcBrAHCAasBoAHWAcYBvQGhAYoBegMAAZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHeAeIGAAGq - AZUBhgP/AbABmwGMAb0C/gHqAYABSgHoAXsBRAH5Ad0BzwMAAYECgAGrAagBpgH9AfoB+QHUAcYBvAGi - Av4BvAGrAZ8B/AH0AfADAAHBAYEBfwHSAasBqAHCAYMBgQHKAZABjAHOAY0BjAHMAYsBigHMAYcBiQHJ - AYYBhwHKAYIBhQHJAYEBhQHGAX8BgAHCAnkBuQFsAWsBxwHMAckB6QH5Ae4BxwGVAZQDAAG+AakBmhL/ - AVwBgwFeAWMBqAFnAUoBlQFLATsBeQE6AVgBeAFYAbgBowGUAWMBSQE1BgAB9AHyAfAB3gHRAcoB0gHA - AbgBzQG6AbEBywG3AawB0QHiAegDAAGXAYABbwMAAf0B7AH9AbMBPAGyAdwBcAHbAY0BLQGMAf0B7AH9 - BgAD/wHRAcUBvAHDAf4B/wHAAv4BvQL+AboC/gGBAoABdQFxAW4BVwFUAVEDAAGjAZcBjQHSAcMBugGT - AX0BawH9AfYB9AGTAX0BawHWAaEBnQHTAaoBqAHMAY8BjgHdAaEBnwHYAZoBmwHWAZQBlwHTAZEBkwHS - AY8BkQHQAYwBjgHOAooBzQGIAYkByAKCAb8BdgF3AbgBawFqAccBzAHJAd4B4gHbAwABwwGuAZ4S/wFW - AY4BWQF9AckBggFbAbMBXAFIAZQBSwE5AV0BOgG4AaMBlAFjAUkBNQYAAdgB7gH2AQ4BeAGeAU8BywHx - ATQBwAHvAS8BvgHvAQwBYgGBAZcBgAFvAZcBgAFvAZcBgAFvAdkBbAHYAfoBrQH6AfsBmAH6AdwBcAHb - AY0BLQGMAf0B7AH9AbABmwGMA/8BtQGhAZIBygH+Af8B6gGAAUoB6AF7AUQB5QF2AT4BsgHSAc8BowGd - AZgB/QL+AVEBkwGpAQ4BEgEWAdwB4wHlAf4B+gH5Af0B+gH3AwAB+QL3AdYBoQGdAe8D0QGYAZUB4QGp - AagB4gKrAd8BpAGmAdwBnwGgAdgCmwHUAZgBlwHRAZEBkgHMAooByAGDAYQBvwFzAXQBuAFrAWoBxgGx - Aa8DAAHIAbIBowP/ARMBKwGcARIBKgGYAQkBHwF+AQkBHwF+A/8BhAG0AYgBpQHZAaoBeAHLAX0BXAGn - AV8BWgF8AVoBuAGjAZQBYwFJATUDAAHYAe4B9gEUAaoB4QGFAeEB9QFrAdcB9AFQAcsB8QE0AcAB8AEd - AbUB7gEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAwAD/wHU - AcgBwAHRAf4B/wHOAv4BywL+AccB/gH/AcUB/wH+AaMBnQGYAYgBtwHHAXQBzgHiAUkBmgGyAQ4BEgEW - Ad0B4AHhAf4B+wH6AZcBgAFvAwAB9gLzAdYBoQGdAe0CyQHRAZgBlQHkAbABrwHrArcB5gKwAeIBqAGp - Ad0CogHZApwB1AKVAc4CjwHLAocBvgFyAXMBuAFtAWwDAAHMAbYBpwP/ASEBOAG7ASABOQHBARQBLQGi - AQkBHwF+A/8B2QHqAdoBkgHCAZUBZAGpAWgBeAGjAXoBxgHQAbwBuAGjAZQBZAFKATYGAAHYAe4B9gEU - AaoB4QGGAeEB9QFsAdYB8wFQAcsB8gE1AcAB8AEcAbUB7QEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHS - AfoBrQH6AdMBZQHSAf0B7AH9AbUBoQGSA/8BuwGnAZgB1gHKAcEBuQGlAZcB1AHIAb8BtgGiAZMB0gHF - Ab0BpAGeAZcBTQGcAbMBjAHgAe4BYgG/AdcBSQGaAbIBDgESARYB1wHeAeEJAAH2AvMB1gGhAZ0B7QLJ - AdEBmAGVAeYBswGyAfABvgG/AesCtwHoAbIBsQHlAa8BrgHhAasBqgHcAaIBowHWApgBzwKOAc8BmgGX - AwAB0QG7AasD/wFDAVwB2AErAUYB4AEfATcBvAENASMBiQz/Af0B+wH6AfMB7AHmAbkBpQGWAWQBSgE2 - CQAB2AHuAfYBFAGqAeEBhQHgAfUBbAHWAfMBUAHLAfIBNAHAAe8BHQG1Ae0BDAFiAYEB2AHuAfYDAAH9 - AewB/QHTAWUB0gH9AewB/QYAGP8B3AHmAeoBVwGgAbUBjAHgAe4BbAHEAdkBfQKGAjUBkAF5AW0BeAkA - AfYC8wHWAaEBnQHtAskB0QGYAZUB6AG2AbUB9ALFAfIBwAHDAfABwAHBAe0BuwG8AeUCrwHVAaUBowHh - AskB/AL7AwAB1QG/Aa8D/wFoAX4B5wFDAV0B3QElAT8BzQEXAS8BpQL+Af8C/gH/Av4F/wL+AfsB+AH2 - AdABwgG5AWQBSgE2DAAB2AHuAfYBFAGqAeEBhgHhAfQBawHWAfQBUAHLAfEBFwGYAcgB2AHuAfYJAAH9 - AewB/QYAAbsBpwGYAwABuQGlAZcDAAG2AaIBkwMAAbMBngGOAwABrgGZAYoDAAGgAZoBlAF9AbABuwHK - AbgBrAFzAYUB0QFeAWwBrQI1AZAMAAH2AvMB1gGhAZ0B7QLJAdEBmAGVAewBwQHAAeQBvgG9AeABvQG7 - AdcBqQGoAeECyAH8AvsJAAHYAcIBsiT/AWQBSgE2DwAB2AHuAfYBFAGqAeEBhQHhAfUBFwGYAcgB2AHu - AfY5AAFeAWwBrQGBAZ8B6wFeAXYB0AFeAWwBrQ8AAfYC8wHWAaEBnQHtAtEB2QGgAZ8B1QGpAagB3wLI - AfsC+g8AAdgBwgGyAdcBwQGxAdUBvwGvAdMBvQGtAdABugGrAc0BuAGoAcoBtQGlAcgBsgGjAcUBrwGg - AcIBrAGdAb8BqgGaAbwBpwGYAboBpQGWAbgBowGUEgAB2AHuAfYBFAGqAeEB2AHuAfY/AAFeAWwBrQFe - AWwBrRUAAfkC9wHbArMB3wLGAfoC+aIAAawBlwGIAYQBbwFeAX0BaAFWAXwBZwFVAYUBcQFfAYcBcwFh - AYYBcQFgAXUBXwFMGAAB6gHmAeMBnAGFAXUBlgF/AW0BkAF3AWcBiQFwAV4BggFqAVcBfAFjAU8B6gHm - AeMnAAG/AsEBMgFjAToBWAFuAVoBQwFTAUQBNAFBATUBJQEvASYBGAEgARkBEgEYAhIBGAISARgBEjMA - AbwBpwGZAegB6QHrA/sD/wH3AfQB8QHrAekB5gH2AfQB8gF7AWUBUxgAAcIBqwGgAd4B0QHKAdoBzAHE - AdYBxwG+AdIBwQG4Ac4BuwGyAcsBtwGrAXsBYgFPJAABvwLBAR0BJAEfAS8BYAE4AWIBrAFjAVwBogFd - AVYBmAFXAVMBjgFUAU4BhQFOAUoBegFKAVEBdAFSARIBGAESCQADyQFPAVEBTwE2AWYBNwFYAW4BWgFP - AWMBUQFDAVMBRAE0AUEBNQElAS8BJgEYASABGQFDAUcBQwGGAYgBhgkAAbsBpwGZAfgC+QMPAtwB2wH/ - AvwBCgELAQoB+AH5AfYBfwFqAVcYAAHLAbcBrAHqAeMB3wHZAc4ByAFYAUsBQQHZAc4ByAHZAc4ByAHO - AbsBsgGBAWgBVRsAAb8CwQEyAWMBOgFYAW4BWgFwAW4BbQHoAuwBNwFtAT8BUwGvAWsBTAGqAWUBRQGn - AV8BPwGiAVoBOQGeAVQBMgGaAU8BXAGHAVwBEwEaARMJAAEpAS0BKQPXATsBcAE9AW4BuAFyAVoBnwFb - AVgBmAFZAVQBjgFVAU4BhAFPAUkBeQFKAT0BYwE+AUkBTQFJCQABvwGrAZ4D/wOPAwABxQLCAQoCCQHq - Au0BewFmAVMY/wHUAcMBuwHqAeMB3wFYAUsBQQFYAUsBQQFYAUsBQQHiAdcC0gHAAbgBhwFvAV0YAAG/ - AsEBHQEkAR8BLwFgATgBYgGsAWMBvwLBAR8BJQEgAT8BewFGAV4BtgF0AVcBsgFuAVABrQFoAUkBqQFi - AUMBpQFdAT0BoAFXAVwBhwFcARwBKQEcCQABtwG4AbcBWAFZAVgBRgF7AUkBeQHCAX8BcQG7AXQBaAGy - AWoBXwGnAWABVQGcAVUBSwGSAUgBSQF6AUkBEAEVARAJAAHHAbUBqAb/A5cGAAH0AfYB+AF+AWkBVwPn - A/8DAAP/A+cDAAPnA/8B3QHQAckB6gHjAd8B6gHjAd8B6gHjAd8B6gHjAd8B4gHXAdIB1gHHAb4BjQF1 - AWMDAAHxAdsBxQGZATMBAAHeAb0BrAwAAXABbgFtAegC7AE3AW0BPwFTAa8BawFxAm8B6ALsAUYBigFO - AWkBvQF8AWIBuAF3AVsBtAFxAVQBrwFsAU0BrAFmAUcBpwFgAWEBjgFjARABFQEQCQABIgEmASID/QFM - AYkBUQGBAcYBiAF3AcEBfQFvAbkBcgFmAbABaAFdAaUBXgFTAZsBUQFMAYIBTQEQARUBEAkAAc8BvwGy - A/cDEAErAiwGAAHzAfYB+AF8AWcBVQMAA/8DAAP/AwAD/wMAA/8B6gHmAeMB1AHFAbsBtAGeAZAB3QHQ - AckB3QHQAckBjQF2AWQBjgF2AWQB6gHmAeMB8AHZAcIB1wGaAVoBmQEzAQABmQEzAQAB4QHEAbUJAAG/ - AsEBHwElASABPwF7AUYBXgG2AXQBvwLBAR4BIwEhAU0BmAFVAXMBwwGFAW0BvwF/AWYBuwF7AV8BtgF0 - AVgBswFvAVEBrgFpAWABmAFiARABFQEQCQABpgGnAaYDYwFSAY4BWgGNAcsBkwF+AcUBhQF3AcABfQFu - AbgBcAFlAa4BZwFbAaQBWwFSAYsBUwEbASMBGwkAAc4BvgGzA/8C9wH4AfIC8wL7AfwB9gL3A/8BjwF8 - AWsD5wP/AwAD/wPnAwAD5wP/AfQB8gHwAdkBzAHEAbwBpwGYBgABywG3AawBlwGAAW8B5gHPAbcB1wGa - AVoB2AGbAVsBmQEzAQABmQEzAQABmQEzAQAB4QHEAbUGAAFxAm8B6ALsAUYBigFOAWkBvQF8AWECYwHo - AuwBVAGlAVsBfAHJAY4BdgHFAYgBcAHCAYMBagG9AX0BYwG5AXcBXAG1AXIBagGfAWgBGwEjARsJAAEg - ASUBIAP/AVcBkwFhAZkB0QGfAYkByQGPAXwBxAGDAXYBvgF7AWwBtgFuAWMBrQFlAVcBlAFYASsBNwEs - CQABvAGpAZsBuAGmAZgBugGnAZoBvAGrAZ0BwQGwAaMBvgGsAZ8BuwGqAZ0BqwGXAYkY/wMAAd4B0QHK - AeoB4wHfAcsBtwGsAcIBqwGgAdYBxgG9AaEBigF6AdgBmwFcAdgBmwFbAdgBmwFbAZkBMwEAAZkBMwEA - AZkBMwEAAZkBMwEAAeUBywG+AwABvwLBAR4BIwEhAU0BmAFVAXMBwwGFAb8CwQEjASYBJAFaAbABYQGF - Ac8BlAFEAYYBSwFOAZoBVgFXAakCXQG2AWQBYgG/AWkBaAGmAWoBKwE3ASwJAAOsA3ABXQGYAWkBpgHY - AawBRAGGAUsBTgGaAVYBVwGpAl0BtgFkAWIBvwFpAVkBnAFbAT0BTQE+EgAD/wPnAwAD5wP/AwAD/wPn - AwAD5wP/AwAD/wMAAfQB8gHwAd4B0QHKAdIBwAG4Ac0BugGxAcsBtwGsAfQB8gHwAdgBmwFbAdgBmwFb - AekBtAF8AfwB1gGvAbUBYwE1AZkBMwEAAZkBMwEAAZkBMwEAAf0B+wH6AWECYwHoAuwBVAGlAVsBfAHJ - AY4BWwFYAVoB6ALsAV8BugFmAY0B0wGbAUQBhgFLAbQB3gG6AbQB3gG6AbQB3gG6AWABugFnAW4BqwFv - AT0BTQE+CQABHAEgARwD/wFqAaMBeQGyAd0BuAFEAYYBSwG0Ad4BugG0Ad4BugG0Ad4BugFgAboBZwFe - AaIBXwFNAWEBTxIAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8VAAHYAZsBWwHqAbcBggH7AdgBsgH+ - AdEBowH7AdgBsgGvAVcBKAGZATMBAAGZATMEAAG/AsEBIwEmASQBWgGwAWEBhQHPAZQB1gHVAdcBKgEu - ASkBYgG/AWkBlAHXAaABRAGGAUsBRAGGAUsBRAGGAUsBRAGGAUsBYAG6AWcBdQG1AXYBTQFhAU8JAAGm - AacBpgOAAXMBrAGEAbsB4QHBAUQBhgFLAUQBhgFLAUQBhgFLAUQBhgFLAWABugFnAWIBqAFjAVgBcQFa - EgAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/AwAD/xUAAecBswF8AfEBwwGRAf4BzwGdAf8BzQGZAf4B0AGf - AfsB2AGyAakBTgEeAZkBMwQAAVsBWAFaAegC7AFfAboBZgGNAdMBmwFbAVgBWgHoAuwBYgG/AWkBmQHb - AaUBlQHZAaMBkgHXAaABjgHUAZwBiQHRAZgBhAHOAZQBngHOAaABWAFxAVoJAAEgASUBIAP/AYEBuAGS - Ab4B4wHEAbgB4AG+AasB2gGxAZsB0gGhAYsBygGRAX0BxAGDAW4BtQFzAW8BlgFwEgAn/xUAAfsB6AHV - AeUBsgF7AfQBwAGLAf8BzQGZAf8BzQGZAf4B0AGhAfIByQGdAbABWgEpAwAB1gHVAdcBKgEuASkBYgG/ - AWkBlAHXAaAB1gHVAdcDcAFiAb8BaQFiAb8BaQFiAb4BaAFdAbYBZQFXAawBXwFRAZ8BWQFKAZEBUQFC - AYMBSgHxAfMB8QkAA+QEjQHEAZ4BiQHBAZgBgwG7AZABfAG1AYcBdAGuAX0BbAGnAXMBZAGgAWgBbgGk - AXABpgHDAaYSAAP/AwAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/GAAB+gHnAdMB5AGwAXkB9gHEAZAB/wHN - AZkB8wHCAY4B4wGwAXkB+QHmAdIDAAFbAVgBWgHoAuwBYgG/AWkBmQHbAaUBlQHZAaMBkgHXAaABjgHU - AZwBiQHRAZgBhAHOAZQBngHOAaABWAFxAVpIAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/GwAB+QHj - Ac0B4wGvAXgB7gG9AYoB4wGwAXkB+gHtAd4GAAHWAdUB1wNwAWIBvwFpAWIBvwFpAWIBvgFoAV0BtgFl - AVcBrAFfAVEBnwFZAUoBkQFRAUIBgwFKAfEB8wHxSAAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/x4A - AfgB5gHSAeUBsgF9AfsB8QHncgAn/zwAAa0BWAEnAfIB5QHfEgAB+AHuAeMkAAGtAVgBJwHyAeUB3w8A - AawBlwGIAYQBbwFeAX0BaAFWAXwBZwFVAYUBcQFfAYcBcwFhAYYBcQFgAXUBXwFMTgAB/QH3AfEB5AGn - AVYB2QGkAXgBpQFJARgB7gHdAdUMAAH4Ae4B4wGZATMBAAH4Ae4B4xsAAf0B9wHxAeQBpwFWAdkBpAF4 - AaUBSQEYAe4B3QHVDAABvAGnAZkB6AHpAesD+wP/AfcB9AHxAesB6QHmAfYB9AHyAXsBZQFTMwABuwGm - AZcBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUGAAH7AfQB6gHkAacBVgH/AeoBxQH+AeEBtAHd - AasBgAGkAUYBFQHtAdoB0QYAAfgB7gHjAbUBYwE1AdgBmwFbAZkBMwEAAfgB7gHjFQAB+wH0AeoB5AGn - AVYB/wHqAcUB/gHhAbQB3QGrAYABpAFGARUB7QHaAdEJAAG7AacBmQH4AvkDDwLcAdsB/wL8AQoBCwEK - AfgB+QH2AX8BagFXMwABwgGsAZ0B/gH9AvwB8gHrAfoB5AHYAfcB2AHEAWMBSQE1BgAB5QGqAVkB/gH5 - AdsB/wHwAckB/gHnAb4B/gHhAbQB3wGuAYMBpAFGARUBlwGAAW8BlwGAAW8B2AGbAVsB/wHNAZkB6QG0 - AXwB2AGbAVsBmQEzAQAB+AHuAeMSAAHlAaoBWQH+AfkB2wH/AfAByQH+AecBvgH+AeEBtAHfAa4BgwGk - AUYBFQkAAb8BqwGeA/8DjwMAAcUCwgEKAgkB6gLtAXsBZgFTMwABzAG2AacD/wHYAccBvAHDAbEBpgH9 - AfIB6wFjAUkBNQYAAeUBqgFbAf8B/gHjAf8B+AHWAf8B8AHJAf4B6AG+AfsB3wG0Aa8BWAEmAZcBgAFv - AwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5 - AZEBTAFxAYsBRQFpAYQB4AGmAVgB5gHqAdIB/wH4AdYB/wHwAckB/gHoAb4B+wHfAbQBrwFYASYJAAHH - AbUBqAb/A5cGAAH0AfYB+AF+AWkBVwMAAfEB2wHFAZkBMwEAAd4BvQGsIQAD/AHvAeoB6AHMAbYBpwn/ - Af4B+gH4AWMBSQE1BgAB+wH0AeoB5QGqAVkB/wH+AeMB/wH3AdYB+wHlAbsB5AGlAVIB8AHPAaMBlwGA - AW8GAAH4Ae4B4wHYAZsBWwH/Ac0BmQHJAXMBQwH4Ae4B4wFJAbgB3wGDAdsB7wF5AdQB7AFvAc8B6gFk - AcgB5wFZAcMB5QFfAbkB0AHgAagBWAHmAekB0gH/AfcB1gH7AeUBuwHkAaUBUgHwAc8BowkAAc8BvwGy - A/cDEAErAiwGAAHzAfYB+AF9AWgBVgHwAdkBwgHXAZoBWgGZATMBAAGZATMBAAHhAcQBtQkAAbsBpgGX - AWMBSQE1AWMBSQE1AWMBSQE1AWMBSQE1AWMBSQE1Ae8B6wHoAb4BfQFYAYEBWQE+AeoBqgGLAekBpAGC - AegBmwF1AeYBkQFmAeUBhwFWAd8BeAFECQAB+wH0AeoB5AGoAVYB+wH8AeEB4gGjAU8B8wHaAbkDAAGX - AYABbwkAAfcB3gHiAdgBmwFbAfgB7gHjAwABTgG8AeIBjgHgAfEBhQHbAe8BpgGMAXoBmwGBAW4BlQF6 - AWcBWgHDAeUBYAG6AdEB4AGlAVQB/wH+AeMB4gGjAU8B8wHaAbkMAAHOAb4BswP/AvcB+AHyAvMC+wH8 - AfYC9wP/AY8BfAFrAdcBmgFaAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAeEBxAG1BgABwgGsAZ0B/gH9 - AvwB8gHrAfoB5AHYAfcB2AHEAWMBSQE1AY8BYgFGAesB4wHfAwAB6gGqAYsB/wHCAaIB/QG5AZUB+QGr - AYQB9gGeAXIBzQFlATEMAAHZAeQB4gHfAaoBXAHZAdoBygYAAZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHe - AeIGAAFQAb4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFRAWgBdgHm - Aa0BXwH3AecB0g8AAbwBqQGbAbgBpgGYAboBpwGaAbwBqwGdAcEBsQGkAb8BrQGgAbwBqwGeAaoBlgGI - AdgBmwFbAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAZkBMwEAAeUBywG+AwABzAG2AacD/wHYAccBvAHD - AbEBpgH9AfIB6wFjAUkBNQH7AvoGAAHqAaoBiwHpAaQBggHoAZsBdQHnAZEBZgHlAYcBVwHjAX4BSgkA - AdgB7gH2AQ4BeAGeARwBtgHuAQ4BeAGeAdgB7gH2AwABlwGAAW8DAAH9AewB/QGzATwBsgHcAXAB2wGN - AS0BjAH9AewB/QMAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6AZwBgQFvAZUBegFnAXMB0QHrAWkBywHp - AUMBZgGBAVIBeQGRAUwBcQGLAUUBaQGEAT8BYgF+AToBXAF4AbMBwAHLGAAB2AGbAVsB2AGbAVsB6QG0 - AXwB/AHWAa8BtQFjATUBmQEzAQABmQEzAQABmQEzAQAB/QH7AfoBzAG2AacJ/wH+AfoB+AFjAUkBNQHx - Ae4B7B4AAdgB7gH2AQ4BeAGeAU8BywHxATQBwAHvAS8BvgHvAQwBYgGBAZcBgAFvAZcBgAFvAZcBgAFv - AdkBbAHYAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAf0B7AH9AVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0 - AZEB4wHyAYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGGAW8BzwHqAWQByAHnAVkBwwHlAU8BvQHiAUQBtwHg - ATkBWgF3GAAB2AGbAVsB6gG3AYIB+wHYAbIB/gHRAaMB+wHYAbIBrwFXASgBmQEzAQABmQEzBAAB6gGq - AYsB6QGkAYIB6AGbAXUB5gGRAWYB5QGHAVYB3wF4AUQB0wGBAVkBlQFyAV0B8gHvAe0DAAG7AaYBlwFj - AUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQHYAe4B9gEUAaoB4QGFAeEB9QFrAdcB9AFQAcsB8QE0 - AcAB8AEdAbUB7gEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGM - Ac8B7QH3AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHYATgBqQHSATEBogHMAWkBvwHZAaYBjAF6 - AZsBgQFuAZUBegFnAVoBwwHlAVABvgHjATwBXgF6GAAB5wGzAXwB8QHDAZEB/gHPAZ0B/wHNAZkB/gHQ - AZ8B+wHYAbIBqQFOAR4BmQEzBAAB6gGqAYsB/wHCAaIB/QG5AZUB+QGrAYQB9gGeAXIBzQFlATED/gHu - AegB5AG8AXsBVwGIAWEBSQHCAawBnQH+Af0C/AHyAesB+gHkAdgB9wHYAcQBYwFJATUDAAHYAe4B9gEU - AaoB4QGGAeEB9QFsAdYB8wFQAcsB8gE1AcAB8AEcAbUB7QEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHS - AfoBrQH6AdMBZQHSAf0B7AH9EgABUAG+AeMBmAHmAfQBjwHhAfIBhQHcAe8BfAHWAe0BcgHRAeoBZwHK - AekBXAHFAeUBQAFiAX0YAAH7AegB1QHlAbIBewH0AcABiwH/Ac0BmQH/Ac0BmQH+AdABoQHyAckBnQGw - AVoBKQMAAeoBqgGLAekBpAGCAegBmwF1AecBkQFmAeUBhwFXAeMBfgFKBgAD/QHpAd8B2QHMAbYBpwP/ - AdgBxwG8AcMBsQGmAf0B8gHrAWMBSQE1BgAB2AHuAfYBFAGqAeEBhQHgAfUBbAHWAfMBUAHLAfIBNAHA - Ae8BHQG1Ae0BDAFiAYEB2AHuAfYDAAH9AewB/QHTAWUB0gH9AewB/RUAAVABvgHjAZ8B6wH2AZkB5gH0 - AacBiwF6AZwBgQFvAZUBegFnAXMB0QHrAWkBywHpAUMBZgGBGwAB+gHnAdMB5AGwAXkB9gHEAZAB/wHN - AZkB8wHCAY4B4wGwAXkB+QHmAdIhAAHMAbYBpwn/Af4B+gH4AWMBSQE1CQAB2AHuAfYBFAGqAeEBhgHh - AfQBawHWAfQBUAHLAfEBFwGYAcgB2AHuAfYJAAH9AewB/RgAAVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0 - AZEB4wHyAYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGGHgAB+QHjAc0B4wGvAXgB7gG9AYoB4wGwAXkB+gHt - Ad4kAAHqAaoBiwHpAaQBggHoAZsBdQHmAZEBZgHlAYcBVgHfAXgBRAwAAdgB7gH2ARQBqgHhAYUB4QH1 - ARcBmAHIAdgB7gH2JwABzwHtAfcBUAG+AeMBUAG+AeMBTwG9AeIBSQG4Ad4BQQGwAdgBOAGpAdIBMQGi - AcwBqQHRAeIhAAH4AeYB0gHlAbIBfQH7AfEB5ycAAeoBqgGLAf8BwgGiAf0BuQGVAfkBqwGEAfYBngFy - Ac0BZQExDwAB2AHuAfYBFAGqAeEB2AHuAfaWAAHqAaoBiwHpAaQBggHoAZsBdQHnAZEBZgHlAYcBVwHj - AX4BSgkAAa0BWAEnAfIB5QHftAAB/QH3AfEB5AGnAVYB2QGkAXgBpQFJARgB7gHdAdUqAAH2AvUBdAFX - AUMBaAFNAToBZAFIATYBaQFMATkBawFOATkBbAFQATsBbAFRAT0BcQFSAUABiQFsAVwBoQGKAXwBvgGu - AaZgAAH7AfQB6gHkAacBVgH/AeoBxQH+AeEBtAHdAasBgAGkAUYBFQHtAdoB0SQAAfQC8wF7AVkBRwG4 - AXYBdAFtAVEBPQFbAUMBMgG1AmcBtgFnAWgBuwJvAb0BcgFxAcEBdgF6AccBgQGDAcIBfQF8AZsBbAFf - YAAB5QGqAVkB/gH5AdsB/wHwAckB/gHnAb4B/gHhAbQB3wGuAYMBpAFGARUhAAHyAfEB8AF5AVgBRgG4 - AXYBdAHjAdoB1QGYAXcBXgGXAXYBYAGfAYMBbgHKAboBrwHXAcwBwwHjAdoB1QHpAeIB3gHmAd0B2QG/ - AXoBeAGuAWgBZQYAAZ4BhwF3AZcBgAFvAZABeAFnAYkBcQFeAYIBaQFWAXsBYgFPAXUBXAFIAXABVgFB - AWoBUAE8AWcBSwE3AWMBSAEzAWMBSAEzDAABngGHAXcBlwGAAW8BkAF4AWcBiQFxAV4BggFpAVYBewFi - AU8BdQFcAUgBcAFWAUEBagFQATwBZwFLATcBYwFIATMBYwFIATMGAAHlAaoBWwH/Af4B4wH/AfgB1gH/ - AfAByQH+AegBvgH7Ad8BtAGvAVgBJh4AAe8B7gHtAXkBWAFGAbgBdgF0AcsBmwGaAeMB2gHVAZgBdwFe - AeUB0QHCAdkBzgHGAZsBewFmAawBkQGAAd0B0gHLAekB4QHcAeoB4wHfAcUBgAGBAbcCbmAAAfsB9AHq - AeUBqgFZAf8B/gHjAf8B9wHWAfoB5QG7AeMBpQFSAfABzwGkD/8MAAP9AXkBWAFGAbMBcwFvAcgBlQGU - AfAB6wHoAeMB2gHVAZ8BegFgAd8BygG7AekB4wHeAesB5QHhAdcBwgG1AZsBewFmAd8B1AHOAewB5gHg - AcsBhwGKAb0CdQYAAZ8BhwF3AZcBgAFvAZABeAFnAYgBcQFfAYIBaQFWAXsBYgFPAXUBXAFIAXABVgFB - AWoBUAE7AWcBSwE3AWMBSAEzDwABnwGHAXcBlwGAAW8BkAF4AWcBiAFxAV8BggFpAVYBewFiAU8BdQFc - AUgBcAFWAUEBagFQATsBZwFLATcBYwFIATMMAAH7AfQB6gHiAaYBVgH/Af4B4wHiAaMBTwHsAdIBsQwA - A/MD/wMAA84JAAGyAYkBggG6AXoBeAP/AfAB6wHoAeMB2gHVAaEBfAFiAd8BygG7AekB4wHeAfcB9QHz - Bv8BlwF2AWAB8AHrAegBzwGNAY8BwgF6AXxjAAPlARgBEQEHAeUBrQFfAfcB5wHSAwAD/wYAA/8DAAb/ - AwAD5QP/AwABuQGDAX4BugF7AXgD/wHwAesB6AHjAdoB1QGoAX8BaAHfAcoBuwHpAeMB3gH3AfUB8wb/ - AZcBdwFgAe8B6gHnAdQBkwGVAckBhAGHBgAB4gFzAToB4gFxATkB3wFvATYB2QFqATIB0AFlAS8BxAFf - ASsBtgFXASgBpgFQASUBmAFJASMBiwFEASEBhgFBASABhgFBASAMAAHiAXMBOgHiAXEBOQHfAW8BNgHZ - AWoBMgHQAWUBLwHEAV8BKwG2AVcBKAGmAVABJQGYAUkBIwGLAUQBIQGGAUEBIAGGAUEBIAYAA+UDAAPo - CQAD/wYAA/8JAAPoAwAD5QMAAcEBhwGEAb0BfAF5A/8B8AHrAegB4wHaAdUBrwGGAWwB3wHKAbsB6QHj - Ad4B9wH1AfMG/wGeAXoBZAHvAegB5QHVAZYBmAHNAYkBjAYAAf8BmwFnAf8B4gG1Af8B3QGoAf8B1QGV - Af8BzQF/Af8BwwFnAf8BuAFOAf8BrwE2Af8BpQEgAf8BngENAf8BmQEAAYYBQQEgDAAB/wGbAWcB/wHi - AbUB/wHdAagB/wHVAZUB/wHNAX8B/wHDAWcB/wG4AU4B/wGvATYB/wGlASAB/wGeAQ0B/wGZAQABhgFB - ASAJAAPoAwAD/wYAA/8GAAP/BgAD/wMAA+gGAAHFAYkBhwG9AX4BewP/AfAB6wHoAeMB2gHVAcIBlwF9 - Ad8BygG7AekB4wHeAfcB9QHzBv8BowF8AWYB7AHmAeEB1wGYAZsB0AGNAZAGAAH/AaMBcQH/AaIBcAH/ - AaABbgH/AZ0BaAH/AZgBYwH9AZMBXgH2AY0BWAHtAYUBUwHiAX4BTQHVAXUBRwHIAW0BQQG8AWUBPAwA - Af8BowFxAf8BogFwAf8BoAFuAf8BnQFoAf8BmAFjAf0BkwFeAfYBjQFYAe0BhQFTAeIBfgFNAdUBdQFH - AcgBbQFBAbwBZQE8BgAD5QMAA+gJAAP/BgAD/wkAA+gDAAPlAwABxwKPAcABgQF9Af8B/QH/AfAB6wHo - AeMB2gHVAcgBmwGBAd8BygG7AekB4wHeAfcB9QHzBv8BqAGAAWoB6wHhAd8B1wGYAZsB1QGVAZhjAAPl - AwAM/wYAA/8GAAP/AwAD5QYAAc4ClQHCAYQBfwL/Af4B8AHrAegB4gHOAcEB3AG6AakB4QHEAbMB6QHj - Ad4B9wH1AfMG/wG5AYsBcQHaAZ4BoAHiAakBrAH8AvsGAAGeAYcBeAGXAYABbwGQAXgBZwGJAXABXgGC - AWkBVgF8AWIBTwF1AVsBRwFwAVYBQRgAAZ4BhwF4AZcBgAFvAZABeAFnAYkBcAFeAYIBaQFWAXwBYgFP - AXUBWwFHAXABVgFBGAAD5Qz/BgAM/wPlCQAB0wKfAcYBiQGBAf8C/gHwAesB5wHlAcMBrwP+AecB2gHU - AcoBrgGhAcoBowGOAfYB8AHsA/8BxAGRAXVyAAP/AwAD+AP/BgAD/wP4AwAD/wwAAeIBrwGxAckBkAGF - Af8B/gH/AfMB6gHlAd0BsgGaCQAB5wHcAdYBxwGsAZ4BygGjAY4BzwGnAZAPAAGeAYgBdwGXAYABbwGQ - AXkBZgGJAXEBXgGCAWkBVgF7AWIBTwF1AVsBSAFwAVYBQQFqAVABPAFmAUsBNwFjAUgBMwFjAUgBMwwA - AZ4BiAF3AZcBgAFvAZABeQFmAYkBcQFeAYIBaQFWAXsBYgFPAXUBWwFIAXABVgFBAWoBUAE8AWYBSwE3 - AWMBSAEzAWMBSAEzDwAD/xgAA/8PAAHVAaMBjQP/Ad0BuQGlAfUB8gHwhwAe/xIAAdsBrQGTAfQB8gHw - A/6iAAH7AecB+roAAfsB5wH6AY0BLQGMAfsB5wH6NgABzwFrAWwByQFoAWkBsgFbAVwBfwI/AW4BkgGi - AWoBiwGcAVkBdgGHAUMBWAFpASgBNQFDAXQBnAGKAXABlgGGAV4BgQF0AUcBZAFbASsBQAE7JwAB+AHu - AeMqAAH7AecB+gGNAS0BjAHeAXMB3gGNAS0BjCcAAeUCywGdAU0BJQGdAU0BJQGdAU0BJQHdArsB0AFt - AW4B6AGOAY8B5gGJAYoBtgJbAXEBlgGmAVgBxQHhAU0BvgHdAU0BvgHdAVsBugHbAXcBnwGNAWgB0AGX - AV4BzAGRAV4BzAGRAWoBywGbAT4BbAFfIQAB+AHuAeMBmQEzAQAB+AHuAeMYAAH4Ae4B4wkAAfsB5wH6 - AZ8BNQGeAeoBkAHqAeQBhAHkAeABdwHeAY0BLQGMAfsB5wH6AwAB+wHDAfsBywEfAc0B/AHVAfwSAAHw - AuEBnQFNASUB+gGdAWIB4QGGAVgB4QGGAVgBnQFNASUB0gFxAXIBpgJsAaABYwFkAYwCSwF0AZsBrAFi - AaMBvQFXAZgBtAFNAY0BqwFLAYABnAF6AaUBkgFtAbIBkgFiAakBiQFYAaABgQFUAZIBeQE7AbwBfQE+ - AWwBXxsAAfgB7gHjAbUBYwE1AekBqQFZAZkBMwEAAfgB7gHjEgAB+AHuAeMBmQEzAQAB+AHuAeMDAAH7 - AecB+gHTAWUB0gH2AawB9gHxAaEB8AHrAZQB6wHnAYgB5QHhAXsB4AGNAS0BjAH9AekB/gHLAR8BzQHL - AR8BzQHLAR8BzQMAAekB8AHpAScBbwEoARoBZwEcARoBZwEcAekB8AHpAecBmgFzAfwBvgGXAfsBwAGh - AfsBsQGCAaIBVgExAfIC5AHWAXgBeQH2AaoBqwHwAZ0BngHLAmgBdwGhAbEBYwHTAfMBXAHQAfMBVQHN - AfIBWwG6AdsBfgGqAZUBdAHiAagBbgHhAaUBZwHfAaEBagHLAZsBOwG8AX0BPgFsAV8MAAHYAe4B9gkA - AfgB7gHjAbUBYwE1AfkBwwGJAfEBtgFxAekBqAFZAZkBMwEAAfgB7gHjDAAB+AHuAeMBtQFjATUB4wGf - AUkBmQEzAQAB9QHZAeMB5QFwAeQB+wG5AfsB+gG3AfoB9gGwAfYB8gGlAfMB7QGZAe0B3AFlAdsB+wHn - AfoB2AFrAdcB/wFeAfwBywEfAc0BywEfAc0B6QHwAekBLAGCATMBWgGvAV8BWwGpAV8BTQGcAU8BGQF3 - ARwB9wLwAecBmgFzAecBmgFzAecBmgFzAfMC5wMAAdoBggGDAcMCfwG8AXQBdQGkAlkBfAGmAbcBaQGm - Ab0BXwGcAbQBVQGQAawBSwGAAZwBgwGwAZsBcwGzAZQBaQGqAYwBXwGhAYUBVAGSAXkBOwG8AX0BQAFu - AWEJAAHYAe4B9gEOAXgBngHYAe4B9gMAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfkBxAGIAfEBtgFx - AegBqAFaAZkBMwEAAfgB7gHjBgAB+AHuAeMBtQFjATUB7wGzAWsB6QGoAVkB4gGfAUkBmQEzAQAB9QHZ - AeMB5QFwAeQB+wG5AvsBuQH7AfgBsgH4AdwBZQHbAfsB5wH6AwAB2AFrAdcB5AFCAeYB/wGmAf8BywEf - Ac0BKwGCATkBiAHXAZMBfgHNAYgBZAGzAWkBIgF6AScB6QHwAekGAAFWAVABSgkAAd8BigGLAf0BuQG7 - AfkBsAGxAc4BbgFtAX8BrAG9AX4B3gH1AXgB3AH0AXEB2QH0AVsBugHbAYYBtQGfAYwB5wG0AYcB5QGw - AYAB5AGuAWoBywGbATsBvAF9AUMBcgFlBgAB2AHuAfYBDgF4AZ4BLwG+Ae8BDAFiAYEB2AHuAfYDAAH4 - Ae4B4wHYAZsBWwH/Ac0BmQH/Ac0BmQH5AcQBiQHxAbYBcQHpAagBWQGZATMEAAH4Ae4B4wG1AWMBNQH7 - AccBjgH1Ab0BfgHvAbMBawHoAakBWQHjAZ8BSQGZATMBAAH1AdkB4wHcAWUB2wH7AbkB+wHlAXAB5AH7 - AecB+gYAAdgBawHXAf8BpgH/AdgBawHXAfwB1QH8AekB8AHpASsBggE5ASYBfgEuASIBegEnAekB8AHp - AVYBUAFKAwABVgFQAUoMAAHjAZMBlAH/Ab0BvgH9AbcBuQHPAXEBcAGDAbIBwwGLAeMB9QGFAeEB9AF+ - Ad4B9AFbAboB2wGKAbsBowGXAegBuQGSAecBtgGMAeYBswFqAcsBmwE7AbwBfQFHAXYBaAYAAQ4BeAGe - AVgBzwHyAUIBxgHxAS4BvQHvAQwBYgGBAa0BlAGDAZ8BhAFxAZUBegFnAdgBmwFbAf8BzQGZAf8BzQGZ - AfkBwwGJAckBcwFDAfgB7gHjAwAB2AGbAVsB/wHNAZkB/wHNAZkB+wHHAY4B9gG+AX4B7wGzAWwB6AGp - AVkB4wGfAUkBmQEzAQAB+AHuAeMB5QFwAeQB+wHnAfoJAAH9AekB/gHYAWsB1wH9AekB/gFWAVABShIA - AVYBUAFKDwAB5wGbAZwB/wG9Ab4B/wG9Ab4B0QF0AXMBiAG3AckBlgHnAfYBkQHmAfYBigHjAfUBWwG6 - AdsBjwHBAakBoQHqAb8BnQHqAbwBlgHoAbgBagHLAZsBOwG8AX0BSwF7AWsB2AHuAfYBFAGqAeEBggHf - AfUBbAHWAfMBVgHOAfIBQAHEAfABLAG8Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHYAZsBWwH/Ac0BmQHJ - AXMBQwH4Ae4B4wYAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGOAfUBvgF+Ae8BswFsAegBqAFZ - AeMBnwFJAZkBMwEAAfUB2QHjGAABVgFQAUoMAAFWAVABSgMAAVYBUAFKAfsBwwH7AcsBHwHNAfwB1QH8 - AwAB7AGkAaUB/wG9Ab4B/wG9Ab4B0gJ2AYsBvAHOAZ8B6wH2AZsB6gH2AZYB5wH2AVsBugHbAZMBxgGt - AakB6wHCAaYB6wHAAaEB6gG/AWoBywGbATsBvAF9AU8BgAFwAwAB2AHuAfYBFAGqAeEBfwHeAfUBagHX - AfMBVAHNAfIBPgHEAfEBKgG8Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHYAZsBWwH4Ae4B4wwAAfgB7gHj - AdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGPAfYBvgF+Ae8BswFsAegBqAFZAeMBnwFIAZkBMwEAAfgB7gHj - GAADhgESAVsBhQGHAbAByAFWAVABSgYAAf0B6QH+AcsBHwHNAcsBHwHNAcsBHwHNAwAB8AGsAa0BzQKF - AcUBegF7AawCXQGNAcAB0gF4Aa0BvgFvAaIBtQFmAZcBrAFLAYABnAGVAcoBsAGAAbUBmgF3AawBkwFu - AaMBiwFUAZIBeQE7AbwBfQFUAYQBcwYAAdgB7gH2ARQBqgHhAX4B3gH0AWgB1gHzAVIBzAHyARcBmAHI - AdgB7gH2CQAB+AHuAeMSAAH4Ae4B4wHYAZsBWwH/Ac0BmQH/Ac0BmQH8AccBjgH2Ab0BfgHvAbMBawHJ - AXMBQwH4Ae4B4xsAASgBfAGrAQwBrQHuARoBZwGTAZsBvgHRBgAB2AFrAdcB/wFeAfwBywEfAc0BywEf - Ac0DAAH0AbMBtAH/Ab0BvgH/Ab0BvgHTAnkBjwHDAdUBqwHwAfcBqwHwAfcBqAHvAfcBWwG6AdsBlwHM - AbIBtAHuAcgBtAHuAcgBsQHtAcYBagHLAZsBOwG8AX0BWQGKAXgJAAHYAe4B9gEUAaoB4QF8Ad0B9QEX - AZgByAHYAe4B9iQAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGOAdgBmwFbAfgB7gHjHgABDAGt - Ae4BKAF8AasBDAGtAe4BGgFnAZMGAAHYAWsB1wHkAUIB5gH/AaYB/wHLAR8BzQMAAfUBtgG3AfUBtgG3 - Ae0BpwGpAc8CcQGPAcMB1QGFAbQBxwF6AaQBtAFwAZUBpgFqAYsBnAGXAcwBsgGNAb8BqAGBAa0BmAF2 - AZ8BjQFwAZYBhgE7AbwBfQFeAZABfQwAAdgB7gH2ARQBqgHhAdgB7gH2KgAB+AHuAeMB2AGbAVsB/wHN - AZkB2AGbAVsB+AHuAeMhAAEEAbQB/AFmAcwB/wEoAXwBqwEhAXIBoAYAAdgBawHXAf8BpgH/AdgBawHX - AfwB1QH8BgAB1gGiAZ0BkgF9AW0B5QHgAdwBzQGZAZ4BkQGyAbkBkAF8AW0B5QHgAdwD/wFqAYsBnAGW - AbQBowGLAXEBegHkAd0B3wP/AXABlgGGAWQBlQGBDwAB2AHuAfYwAAH4Ae4B4wHYAZsBWwH4Ae4B4yQA - AdkB5QHsAQQBtAH8AWYBzAH/ASgBfAGrBgAB/QHpAf4B2AFrAdcB/QHpAf4MAAHGAZkBkgGVAX0BbgH0 - AewB6AHLAZEBlgGMAasBswGGAYMBfQH0AewB6AHiAfMB9QFqAYsBnAMAAYUBfgF/AfIB6QHtAeQB8gHp - AXABlgGGRQAB+AHuAeMqAAHZAeUB7AEEAbQB/AG4AdAB3R4AAf4C/cMAAfgB7gHjAZkBMwEAAfMB4AHM - RQABcwGiAbcwAAGTAXsBagFgAUYBMgFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFj - AUkBNQFjAUkBNQFjAUkBNQFoAU4BOhgAAfgB7gHjAckBcwFDAeMBnwFJAZkBMwEAAfgB7gHjGAABtwGi - AZMBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJ - ATUBYwFJATUBYwFJATUBYwFJATUBdAGnAbkwAAGXAYABbwH8Af4B/AHnAeYB5AHnAeIB3AHmAdwB1AHl - AdYBywHkAc8BwQHjAcoBuAHjAcUBsQHiAcIBrAHHAaoBmAFoAU4BOhUAAfgB7gHjAckBcwFDAfEBtgFx - AegBqAFaAeMBnwFJAZkBMwEAAfgB7gHjFQABtwGiAZMB+wH0AfAB4QHcAdgB4AHXAdIB3wHSAcoB3wHO - AcMB3QHIAbsB3AHDAbMB2wG/Aa0B2wG7AacB2wG7AacB2wG7AacBzwG0AaMBYwFJATUBeAGqAb0GAAGe - AYcBdwGXAYABbwGQAXgBZwGJAXEBXgGCAWkBVgF7AWIBTwF1AVwBSAFwAVYBQQFqAVABPAFnAUsBNwFj - AUgBMwFjAUgBMwYAAZwBhQF0AfwB/gH8AbABmwGMAaoBlAGFAfsB9QHvAbYBoQGSAbABmgGMAasBlQGF - AaUBjwF/AfYB2wHIAccBqgGYAWgBTgE6EgAB+AHuAeMB2AGbAVsB/wHNAZkB+QHDAYkB8QG2AXEB6QGp - AVkB4wGfAUkBmQEzAQAB+AHuAeMDAAH7AecB+gwAAbcBogGTAf0B9gH0AfsB9AHwAfsB8QHsAfoB7gHp - AfkB6wHlAfgB6QHhAfcB5QHdAfYB4gHZAfYB4AHVAfUB3QHRAfQB2QHNAc8BtAGjAWMBSQE1AXsBrQHA - MAABoAGKAXoB/AH+AvwB/gL8Af4B/AH7AfoB9wH7AfUB7wH6Ae8B5gH5AegB3AH3AeEB0QH2AdsCyAGu - AZwBaAFOAToVAAH4Ae4B4wHYAZsBWwH/Ac0BmQH5AcMBiQHxAbYBcQHoAagBWQHjAZ8BSQGZATMBAAH4 - Ae4B4wGNAS0BjAH7AecB+gkAAbcBogGTAf0B+AH2Aa0BlwGHAaQBjgF+AZwBhQF0AZIBfAFqAYoBcwFg - AYIBaQFXAfcB5QHcAXMBWQFFAWwBUgE+AWcBTQE4Ac8BtAGjAWMBSQE1AX0BsAHDBgABnwGHAXcBlwGA - AW8BkAF4AWcBiAFxAV8BggFpAVYBewFiAU8BdQFcAUgBcAFWAUEBagFQATsBZwFLATcBYwFIATMJAAGl - AY8BfwH8Af4B/AGwAZsBjAGqAZQBhQH7AfoB9wG1AaEBkgGwAZsBjAGqAZQBhQGkAY8BfgH3AeEB0QHI - AbIBogFoAU4BOhUAAdIB3wHeAdIB3wHeAdgBmwFbAf8BzQGZAfkBwwGJAfEBtgFxAckBcwFDAfUB2gHf - AY0BLQGMAd4BcwHeAY0BLQGMAfsB5wH6BgABtwGiAZMBFgHpAV8BFgHpAV8BFgHpAV8BFgHpAV8B+gHw - AesB+gHtAecB+AHqAeQB+AHoAd8B9wHkAdsB9gHhAdgB9gHeAdQBzwG0AaMBYwFJATUBfwGyAcQwAAGq - AZUBhQH8Af4C/AH+AvwB/gL8Af4C/AH+AfwB+wH6AfcB+wH1AfAB+gHxAekB+QHoAd0BygG4AasBaAFO - AToSAAHYAe4B9gEOAXgBngEMAWIBgQHSAd8B3gHYAZsBWwH/Ac0BmQHJAXMBQwH1AdoB3wGfATUBngHq - AZAB6gHkAYQB5AHgAXcB3gGNAS0BjAH7AecB+gMAAboBpQGWARYB6QFfBgABFgHpAV8BkwF8AWoBigFy - AWABggFpAVYBegFhAU0BcwFZAUUBbAFSAT0BZwFNATgB0AG5AasBYwFJATUJAAHiAXMBOgHiAXEBOQHf - AW8BNgHZAWoBMgHQAWUBLwHEAV8BKwG2AVcBKAGmAVABJQGYAUkBIwGLAUQBIQGGAUEBIAGGAUEBIAYA - Aa8BmwGLAfwB/gH8AdsBywHBAeUB2gHRAfwB/gH8AdwBygHBAdwBygHBAbABrQGsAUEBXAFyAfoB8wHs - AdQByQHBAWoBUQE9CQAB9AH3AfQDAAHcAe8B9wEOAXgBngEtAb0B7wEYAbMB7QEMAWIBgQHSAd8B3gHY - AZsBWwH1AdoB3wHTAWUB0gH2AawB9gHxAaEB8AHrAZQB6wHnAYgB5QHhAXsB4AGNAS0BjAMAAb4BqQGa - ARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfAfcB5gHe - AfYB4wHaAdEBwQG2AWMBSQE1CQAB/wGbAWcB/wHiAbUB/wHdAagB/wHVAZUB/wHNAX8B/wHDAWcB/wG4 - AU4B/wGvATYB/wGlASAB/wGeAQ0B/wGZAQABhgFBASAGAAG0AaABkQH8Af4B/AHiAukBXgF1AYQB3wHk - AeUB/AH+AfwBwgHKAc4BSgFhAXABLgGpAdYBIwE1AUcBwgG+AbkBfwFpAVgGAAGoAcEBqwFBAYIBTAHY - Ae4B9gEOAXgBngFcAdEB8wFDAcYB8QEsAb0B7wEYAbMB7QEMAWIBgQLPAdwB5QFwAeQB+wG5AfsB+gG3 - AfoB9gGwAfYB8gGlAfMB7QGZAe0B3AFlAdsB+wHnAfoDAAHDAa4BngH/Av4BrAGXAYcBpAGOAX4BnAGF - AXQBFgHpAV8JAAEWAekBXwFsAVIBPgFoAU0BNwHRAcEBtgFjAUkBNQkAAf8BowFxAf8BogFwAf8BoAFu - Af8BnQFoAf8BmAFjAf0BkwFeAfYBjQFYAe0BhQFTAeIBfgFNAdUBdQFHAcgBbQFBAbwBZQE8BgAB3wGd - AX0B8QHKAbcBjwGkAawBhgHTAeUBSwFhAXABpwGSAYkBSgFhAXABYQHBAd4BTAFhAW8BKQG2AekBFQEn - ATMBEAEsAToBFwEpATUBeQGBAYcBPQF0AUMBSwGnAWEBEAF9AaUBiwHjAfUBdQHaAfQBXAHQAfMBRAHG - AfEBLAG9Ae8BGAG0Ae0BDAFiAYEB1AHaAfIB5QFwAeQB+wG5AvsBuQH7AfgBsgH4AdwBZQHbAfsB5wH6 - BgAByAGyAaME/wL9Af4B/AH7Af0B+gH4ARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfAfkB6wHk - AfgB6AHhAdEBwQG2AWMBSQE1MwAB3wGdAX0B/wHFAaQB5QHJAbkBjwGkAawBgwHhAfYBSwFhAXABegHN - AeIBTAFhAW8BZQHSAfIBRQFdAXEBMgGyAd8BHQGZAcgBGgGIAbMBHwFTAW0BTwGEAVgBTAGsAWQBFQGn - Ad0BngHrAfcBiwHjAfUBdQHaAfMBXAHQAfMBQwHGAfEBLAG8Ae8BGAG0Ae0BDAFiAYEB1AHaAfIB3AFl - AdsB+wG5AfsB5QFwAeQB+wHnAfoJAAHMAbYBpwf/Af0B/AH+AfwB+wH+AfoB+AH9AfcB9QH8AfYB8gH7 - AfIB7gH6AfAB6wH5Ae0B5wH5AeoB5AH4AecB3wFjAUkBNQkAAZ4BhwF4AZcBgAFvAZABeAFnAYkBcAFe - AYIBaQFWAXwBYgFPAXUBWwFHAXABVgFBEgAB3wGdAX0B3wGdAX0B3wGdAX0B2gG6AaoBjwGkAawBgwHh - AfYBSwFhAXABgwHhAfYBPAFZAXMBZQHSAfIBUAHJAe8BOwG/AesBJwGyAeQBHAGjAdYBZAGVAW4BUwG0 - AWwB2AHuAfYBFAGqAeEBnQHrAfYBiwHjAfUBdAHaAfQBXAHQAfIBQwHGAfEBLAG8Ae8BGAGzAe0BDAFi - AYEB2AHuAfYB5QFwAeQB+wHnAfoMAAHqAaoBiwHqAaoBiwHqAaoBiwHpAaUBhAHpAZ8BegHnAZcBbgHm - AY4BYgHlAYYBVgHjAX0BSgHjAXYBQAHiAXIBOQHiAXIBOQHiAXIBOQHIAWIBLzwAA/8B5gHrAewBjwGk - AawBgwHhAfYBQAFbAXIBgwHhAfYBdwHbAfQBZQHSAfIBUAHJAe8BOwG/AesBKQG2AekBdgGlAYMBXQHA - AXgDAAHYAe4B9gEUAaoB4QGeAeoB9gGLAeMB9QF0AdoB8wFcAdEB8wFDAccB8QEXAZgByAHYAe4B9gMA - AfsB5wH6DwAB6gGqAYsB/wHCAaIB/gHAAZ8B/QG9AZoB/AG5AZYB+wG1AZAB+gGwAYsB+QGrAYQB+AGn - AX0B9gGiAXcB9QGdAXEB9QGZAWoB8wGVAWUBzQFlATEJAAGeAYgBdwGXAYABbwGQAXkBZgGJAXEBXgGC - AWkBVgF7AWIBTwF1AVsBSAFwAVYBQQFqAVABPAFmAUsBNwFjAUgBMwFjAUgBMxUAAeYB6wHsAY8BpAGs - AYMB4QH2AYMB4QH2AYMB4QH2AXcB2wH0AWUB0gHyAV8BsgHPAXoBiwGWAa4BwQGmAZMB0wGaBgAB2AHu - AfYBFAGqAeEBnQHrAfYBiwHjAfUBdQHbAfQBFwGYAcgB2AHuAfYYAAHqAaoBiwHqAaoBiwHqAaoBiwHq - AaoBiwHqAaYBhgHpAaEBfwHoAZsBdgHnAZQBbAHmAY4BYgHlAYcBWAHkAYEBTgHkAXsBRgHjAXYBPgHi - AXIBOUUAAeYB6wHsAY8BpAGsAYwBoQGpAYgBnAGlAYMBlgGgAX4BkAGaAXoBiwGWAb8ByAHNAZkBuAGc - Aa4BwQGmCQAB2AHuAfYBFAGqAeEBnQHqAfYBFwGYAcgBtwHfAe60AAHYAe4B9gEUAaoB4QHYAe4B9pwA - AfgB7gHjcgAn/yEAAfgB7gHjAZkBMwEAAfgB7gHjbwAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/x4A - AfgB7gHjAbUBYwE1AdgBmwFbAZkBMwEAAfgB7gHjCQABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFx - AYsBRQFpAYQBPwFiAX4BOgFcAXgBswHAActIAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/GAABlwGA - AW8BlwGAAW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQAB+AHuAeMGAAFJAbgB3wGDAdsB7wF5 - AdQB7AFvAc8B6gFkAcgB5wFZAcMB5QFPAb0B4gFEAbcB4AE5AVoBdzMAAewB0gHsAXIBJAFxAeYBzAHm - DAAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/xgAAZcBgAFvAwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0 - AXwB2AGbAVsBmQEzAQAB+AHuAeMDAAFOAbwB4gGOAeAB8QGFAdsB7wGmAYwBegGbAYEBbgGVAXoBZwFa - AcMB5QFQAb4B4wE8AV4BejAAAe0B2AHtAakBUAGoAYABMAF/AXUBJwF1AesB0QHrCQAn/xgAAZcBgAFv - BgAB+AHuAeMB2AGbAVsB/wHNAZkByQFzAUMB+AHuAeMGAAFQAb4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8 - AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFAAWIBfS0AAegB0QHoAaoBUAGpAcwBZwHLAX4BLgF+AZYBOAGV - AXsBKwF6AfAB1QHwBgAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/AwAD/wwAAdgB7gH2CQABlwGAAW8JAAH3 - Ad4B4gHYAZsBWwH4Ae4B4wkAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6AZwBgQFvAZUBegFnAXMB0QHr - AWkBywHpAUMBZgGBAVIBeQGRAUwBcQGLAUUBaQGEAT8BYgF+AToBXAF4AbMBwAHLBgABqwHwAfcBqwHi - AeUBrAHOAcwBrQG7AbUBrgGnAZwDAAHkAcoB5AGpAVABqAHTAWsB0gHUAW4B0wF/ATABfgGfATwBnwGO - ATUBjQF9AS0BfAYAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8JAAHYAe4B9gEOAXgBngHYAe4B9gYA - AZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHeAeIMAAFQAb4B4wGmAe0B9wGgAesB9QGZAecB9AGRAeMB8gGJ - Ad4B8QF/AdgB7gF1AdIB6wFHAWwBhgFvAc8B6gFkAcgB5wFZAcMB5QFPAb0B4gFEAbcB4AE5AVoBdxgA - AaoBUgGpAdIBagHRAdUBbwHVAb0BcAG8Ad4BmAHdAY8BRgGOAZ0BPAGcAX4BLgF+BgAD/wPnAwAD5wP/ - AwAD/wPnAwAD5wP/AwAD/wYAAdgB7gH2AQ4BeAGeARwBtgHuAQ4BeAGeAdgB7gH2AwABlwGAAW8DAAH9 - AewB/QGzATwBsgHcAXAB2wGNAS0BjAH9AewB/QkAAc8B7QH3AVABvgHjAVABvgHjAU8BvQHiAUkBuAHe - AUEBsAHYATgBqQHSATEBogHMAWkBvwHZAaYBjAF6AZsBgQFuAZUBegFnAVoBwwHlAVABvgHjATwBXgF6 - AwABqwHwAfcBqwHlAekBrALVAawBxAHBAa0BtQGsAa4BpAGYAwABqAFPAacB0gFtAdEBvAFvAbsB7wGl - Ae4B+wGfAfoB7wGdAe4BlwFSAZYBfAEuAXwGACf/AwAB2AHuAfYBDgF4AZ4BTwHLAfEBNAHAAe8BLwG+ - Ae8BDAFiAYEBlwGAAW8BlwGAAW8BlwGAAW8B2QFsAdgB+gGtAfoB+wGYAfoB3AFwAdsBjQEtAYwB/QHs - Af0YAAFQAb4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFAAWIBfRgA - AacBUAGmAbwBbwG7Ae8BpQHuAfsBmwH6AfsBmAH6AfsBmQH6AecBmAHmAZEBTgGQBgAD/wMAA/8D5wMA - A+cD/wMAA/8D5wMAA+cD/wMAARQBqgHhAYUB4QH1AWsB1wH0AVABywHxATQBwAHwAR0BtQHuAQwBYgGB - AdgB7gH2AwAB/QHsAf0B0wFlAdIB+gGtAfoB+wGYAfoB3AFwAdsBjQEtAYwB/QHsAf0VAAFQAb4B4wGf - AesB9gGZAeYB9AGnAYsBegGcAYEBbwGVAXoBZwFzAdEB6wFpAcsB6QFDAWYBgQkAAasB8AH3AawC1QGu - AbQBrAGuAZkBigP9Ac8BiAHPAeIBrwHiAfsBqwH6AfsBmAH6AfsBmAH6AeoBkAHpAc8BiAHPAfQB5gH0 - BgAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAAdgB7gH2ARQBqgHhAYYB4QH1AWwB1gHzAVABywHy - ATUBwAHwARwBtQHtAQwBYgGBAdgB7gH2AwAB/QHsAf0B0wFlAdIB+gGtAfoB0wFlAdIB/QHsAf0YAAFQ - Ab4B4wGmAe0B9wGgAesB9QGZAecB9AGRAeMB8gGJAd4B8QF/AdgB7gF1AdIB6wFHAWwBhhgAAfAB1AHw - Ac8BiAHPAe4BvgHuAfsBrgH6AewBkQHrAc8BiAHPAfMB4AHyCQAD/wMAA/8D5wMAA+cD/wMAA/8D5wMA - A+cD/wYAAdgB7gH2ARQBqgHhAYUB4AH1AWwB1gHzAVABywHyATQBwAHvAR0BtQHtAQwBYgGBAdgB7gH2 - AwAB/QHsAf0B0wFlAdIB/QHsAf0bAAHPAe0B9wFQAb4B4wFQAb4B4wFPAb0B4gFJAbgB3gFBAbAB2AE4 - AakB0gExAaIBzAGpAdEB4hsAAfIB2wHyAc8BiAHPAeMBrAHjAc8BiAHPAfMB4wHzDAAn/wkAAdgB7gH2 - ARQBqgHhAYYB4QH0AWsB1gH0AVABywHxARcBmAHIAdgB7gH2CQAB/QHsAf1XAAHyAdsB8gHPAYgBzwHw - AeMB8EIAAdgB7gH2ARQBqgHhAYUB4QH1ARcBmAHIAdgB7gH2aQAB/gH7Af5IAAHYAe4B9gEUAaoB4QHY - Ae4B9qsAAdMBzgHLAaYBmgGVAYYBdwFvAXcBZwFeAXQBYwFaAXMBYgFZAXMBYgFZAXMBYgFZAXMBYgFZ - AXMBYgFZAXMBYgFZAXQBYwFaAXkBaQFgAYoBfAF0AawBogGdAdkB0wHSkAABrgF7AW4B1AGnAZcB1wGp - AZsB1AGnAZkB0wGlAZgB0AGjAZgBywGgAZkByQGeAZcBxgGcAZYBxAGZAZUBwgGXAZQBugGTAY4BtwGQ - AYsBogGCAX0BkAGCAXsBzAHGAcRpAAP/AwAG/wkABv8DAAP/BgABtQGCAXIB8wHVAcAB+wHgAckB+wHf - AcYB+wHdAcMB+wHbAcEB+gHaAb0B+gHYAbsB+wHXAbgB+gHUAbUB+QHTAbIB+gHRAa8B9AHHAaoBwAGb - AYkBhwF4AXEBygHEAcBsAAPuA4gDMwkAAzMDiAPuCQABuwGIAXUB9AHZAcQB/AHjAc0B+wHhAcoB+wHf - AcgB+wHdAcUB+wHcAcIB+wHaAb8B+wHZAbwB+gHWAbkB+gHVAbYB+gHUAbMB9QHJAa0BwQGcAYoBhgF3 - AXAByAHCAcAVAAHxAdsBxQGZATMBAAHeAb0BrBsAAcgBvQG1AYgBcAFdAYMBagFYAX4BZQFSAXoBYAFO - AXUBXAFIAXEBVwFDAW0BUwE+AWoBTwE7AWcBSwE3AboBrgGkEgADiAMKA+gJAAPoAwoDiAkAAcIBjwF5 - AfUB3AHJAfwB5QHSAfwB4wHPAfwB4gHMAfwB4AHJAfsB3gHGAfsB3AHEAfsB2wHAAfoB2gG9AfsB2AG6 - AfsB1gG3AfYBywGxAcEBnQGMAYYBdwFwAcgBwgHAEgAB8AHZAcIB1wGaAVoBmQEzAQABmQEzAQAB4QHE - AbUYAAGvAZYBhwHpAeAB3AHjAdoB0wHeAdMBzAHaAcwBxAHVAcUBvAHQAb4BtQHLAbgBrAHGAbEBpgHD - AasBnwFoAU4BOQ8AA/8DTQMKDwADCgNNA/8GAAHIAZUBfAH2Ad4BzQH8AecB1gH8AeUB0wH8AeQB0AH8 - AeIBzQH7AeEBygH7AeAByAH7Ad4BxAH6AdwBwQH7AdoBvwH6AdgBvAH1Ac4BtQHBAZ8BjwGGAXcBcAHI - AcIBwA8AAe8B2AG/AdcBmgFaAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAeEBxAG1FQABswGaAYsB7gHo - AeUB6QHhAdwB4wHZAdQB3wHSAcwB2gHMAcQB1QHFAbwB0AG+AbUBzAG4Aa0BxgGxAaUBbQFTAT4MAAb/ - A00DCg8AAwoDTQb/AwABzwGcAYAB9gHhAdEB/QHqAdsB/AHoAdgB/AHnAdUB/AHlAdIB/AHkAc4B/AHi - AcwB+wHgAckB+wHeAcYB+wHdAcMB+gHbAcAB9gHQAbgBwgGgAZABhgF3AXAByAHCAcAPAAHYAZsBXAHY - AZsBWwHYAZsBWwGZATMBAAGZATMBAAGZATMBAAGZATMBAAHlAcsBvhIAAbcBngGQAfMB7wHsAe4B6AHk - AegB4AHcAX4BZQFSAW4BVAFAAWMBSAEzAdUBxQG8AdABvgG0AcsBuAGsAXMBWgFGCQAD/wMAA/gDCgO/ - DwADvwMKA/gGAAHVAaIBgwH4AeUB1AH9Ae0B3gH8AesB3AH8AekB2QH8AecB1gH8AeYB0wH8AeQB0QH7 - AeIBzQH7AeEBygH7AeABxwH7Ad4BxAH3AdMBvAHCAaIBkwGGAXcBcAHIAcIBwA8AAdgBmwFbAdgBmwFb - AekBtAF8AfwB1gGvAbUBYwE1AZkBMwEAAZkBMwEAAZkBMwEAAf0B+wH6DwABvAGjAZYB+AH2AfQB8wHv - Ae0B7wHoAeQB6QHgAdwB4wHZAdMB3wHTAcsB2gHMAcUB1QHFAbwB0AG+AbUBegFgAU4JAAb/AwoDZBUA - A2QDCgP/AwAB3AGpAYcB+gHnAdkB/QHvAeIB/QHtAeAB/QHsAd0B/QHqAdoB/QHoAdcB/AHmAdUB/AHl - AdEB+wHjAc4B/AHiAcsB+wHgAcgB9wHUAb8BwgGiAZQBhgF3AXAByAHCAcAPAAHYAZsBWwHqAbcBggH7 - AdgBsgH+AdEBowH7AdgBsgGvAVcBKAGZATMBAAGZATMTAAHBAakBnQH8AvsB+AH2AvQB7wHsAX4BZgFS - AW4BVAE/AWMBSAEzAd4B0wHMAdoBzAHEAdUBxQG8AYABaAFVCQAD/wMAA/gDMwO6DwADugMzA/gGAAHc - AakBhwH5AeoB3gH9AfIB5wH9AfAB5AH9Ae4B4QH9AewB3gH8AesB2wH9AekB2QH9AecB1gH8AeUB0wH8 - AeQB0AH8AeIBzQH4AdcCwwGkAZYBhgF3AXAByAHCAcAPAAHnAbMBfAHxAcMBkQH+Ac8BnQH/Ac0BmQH+ - AdABnwH7AdgBsgGpAU4BHgGZATMTAAHFAa8BowP/AfwC+wH5AfYB9QH0Ae8B7AHuAecB5AHpAeEB2wHk - AdkB0wHeAdIBzAHaAcwBxQGIAXABXQ8AA/8DTQMzDwADMwNNA/8GAAHcAakBhwH5AewB4AH+AfQB6wH9 - AfIB6AH9AfEB5gH9Ae4B4wH9Ae0B4AH9AewB3gH8AeoB2gH8AegB1wH8AecB1AH8AeUB0QH4AdkBxwHF - AacBmgGLAXwBdQHLAcUBwQ8AAfsB6AHVAeUBsgF7AfQBwAGLAf8BzQGZAf8BzQGZAf4B0AGhAfIByQGd - AbABWgEpEgAByQG0AaoG/wH8AfsB+gH4AfUB9AHzAe8B7AHuAecB5QHoAeAB3AHjAdkB1AHfAdMBzAGO - AXcBZg8AA/8DTQMzDwADMwNNA/8GAAHcAakBhwH6Ae4B5QH+AfYB7wH9AfQB7QH9AfMB6gH9AfEB5wH9 - AfAB5AH9Ae4B4gH9AewB3gH9AeoB2wH8AekB2QH8AecB1gH4AdgBxwHMAasBngGaAYwBhAHSAcwByxIA - AfoB5wHTAeQBsAF5AfYBxAGQAf8BzQGZAfMBwgGOAeMBsAF5AfkB5gHSEgAB5gHdAdgByQG0AakBxAGt - AaIBvwGoAZsBuwGiAZMBtQGcAY4BsgGYAYkBrQGUAYQBqAGPAX8BowGKAXkByAG9AbUSAAOIAzMD3gkA - A94DMwOICQAB3AGpAYcB+wHwAekB/gH5AfQB/gH3AfEB/gH1Ae4B/gHzAesB/gHyAegB/QHxAeYB/QHv - AeIB/wHYAc8B/wHVAcwB+QHAAbcB1AGeAZQBrwGQAYcBtgGsAaYB4AHcAdkVAAH5AeMBzQHjAa8BeAHu - Ab0BigHjAbABeQH6Ae0B3kgAA+4DiAMzCQADMwOIA+4JAAHcAakBhwH7AfMB7QH/AfwB+AH+AfoB9QH+ - AfgB8wH+AfYB8AH+AfUB7QH9AfMB6wH9AfEB5wH4Aa8BWAH3AaYBQwHpAZoBQgG7AYwBXwGrAZ0BlgHW - Ac4BywHuAusYAAH4AeYB0gHlAbIBfQH7AfEB50gAA/8DAAb/CQAG/wMAA/8GAAHcAakBhwH7AfQB8AH/ - Af4B/AH/AfwB+QH/AfsB9wH+AfkB9AH+AfgB8AH+AfYB7gH9AfMB7AHgAbIBlAHnAbEBewGvAYwBawGj - AZIBhgHLAcIBvQHrAegB5QL1AfOQAAHcAakBhwHcAakBhwHcAakBhwHcAakBhwHcAakBhwHcAakBhwHd - AaoBhwHdAaoBiAHWAaMBhAHbAagBhwHxAd4B0QH0AfMB8mwAAUIBTQE+BwABPgMAASgDAAFAAwABsAMA - AQEBAAEBBQABgAEFFgAD/wEABP8EAAT/BAAE/wQAAeABDwHAAQEEAAHgAQ8BwAEBBAAB4AEPAcABAQQA - AeABDwHAAQEEAAHgAQ8BwAEBBAAB4AEPAfABBwYAAfABBwQAAQYBIAHwAQcEAAEHAeAB8AEHBAABBwHg - AfABBwQABP8EAAT/BAAE/wUAAR8BAAEDAfABDwHwAQ8BAAEfAQABAwHAAQMBwAEDBAABgAEBAYABAQQA - AYABAQGAEQAB8AcAAfAHAAHwBwAB8AcAAfABAAHwBQAB8AEAAfAFAAHwAQAB8AEAAYABAQGAAQEB8AEA - AfABAAGAAQEBgAEBAfABAQHwAQEBwAEDAcABAwHwAQMB8AEDAfABDwHwAQ8E/wHAB/8BwAF/Av8BgAE/ - Av8BwAE/Av8BgAE/AeABAwHAAR8CAAGAAT8B4AEDAeABDwIAAYABPwHgAQMB8AEHAgABgAEAAeABAwEA - AQMCAAGAAQAB4AEDAQABAQIAAYABAAHgAQMEAAH+AQAB4AEDBAAB/gEAAeABAwQAAf4BAAHgAQMEAAH+ - AQAC/wEAAQECAAT/AQABEwIABP8BAAEfBv8BAAEfAv8BAAH3AqoB/gE/Av8BAAHjAQABAQH4AR8BgAEB - AQABwQGAAQAB8AEPAYABAQMAAQEBwAEHAYABAQEAAUABgAIAAQMBgAEBAQABYAEAAQEBAAEBAYABAQEQ - AXEBgAMAAYABAQGBAWMBAAEBAgABgAEBAYEBQQGAAwABgAEBAYACAAEBAgABgAEBAQABQAGAAQABgAEA - AYABAQGAASABAAEBAcABAAGAAQEBwAERAYABAAHgAQABgAEBAeABOwFVAUAB8AEDAYABAQHwAX8B/wHw - AfgBDwGAAQEB+AL/AfkB/AE/Bv8BAAH/AQAB/wH4AQEC/wEAAf8BAAH/AfABAQHAAQcBAAH/AQAB/wGA - AQEBwAEHAwAB/wEAAQEBwAEHAwABjwEAAQEBwAEHAwABBwEAAQEBwAEHAgABGAEDAQABAQHAAQcCAAGA - AQEBAAEBAcABBwHgAQABgAIAAQEBwAEHAeABAAH+AQEBAAEBAcABBwHgAQAB/gEBAQABAQHAAQcB4AEA - Af4BAQEAAQEBwAEHAeABAAH/AQEBAAEfAv8B4AEAAf8BgwEAAR8C/wHgAQAB/wHHBP8B4AEAAv8B8wH3 - Af8BnwEAA/8BwQHjAf4BDwEAAv8BgQGAAcEB/AEHAQAC/wGBAYABAAH8AQcBAAL/AYEBgAFAAQABBwEA - AY8B/gEBAYABYAEAAQcBAAEHAQABAQHBAXEBAAEPAQABAwEAAYEB4wFjAQABHwEAAgEBgQHBAUEBAAEB - Af4BAAEBAf8BgAIAAQEB/gEBAQABQAEAAUABAAEBAf4BAQIAAYABIAH8AQEB/gEBAQMBAAHAAREB/AEB - Af8BAQH/AcAB4AE7AfwBAQH/AYMB/wHAAfABfwH8AQEB/wHHAf8BwAH4Bv8BwAHnB/8BgwH/AfABAAT/ - AQEB/wHgAQAE/wEBAf8BwAEAAcABAwHAAQMBAQH/AYABAAT/AQABDwIAAcABBwHAAQcBgAELAYABAAT/ - AYQBIAGAAQABwAEDAcABAwEcATgBgAEAAcABAwHAAQMBLAE0AYABAAHAAQMBwAEDARwBOAGAAQAE/wGA - ATEBgAEAAcABPwHAAT8BwAEDAYABBwT/AeABBwGDAYcBwAEDAcABAwHgAQcBwwX/AeABBwHjBv8B9wf/ - AeMC/wEAAQMB/wHvAf8BwwH/AeABAAEBAf8BxwH7AYABjwHAAgAB/wGDAfEBAAEIAwAB9wEBAeACAAEB - AgAB4gEAAcABAQEAATcCAAHBAQABgAEDAQABLwIAAcABAAGAAQcBDwHfAwABQQGAAQ8B9wGhAgABgAEj - AcABBwH4AWECAAHAAXcB4AEPAfgBYQIAAeAB/wHwAR8B+AFhAgAB8QH/AfgBPwH4AWEBgAEAAfsB/wH8 - AX8B+AFjAcABEAL/Af4B/wH8AX8B7wf/AfgC/wH+Av8BAAEPAfABfwGAAQAC/wEAAQ8B4AE/AYABAAHA - AQMBAAEPAcABFwGAAQAC/wEAAQ8B4AEDAYABAAHAAQcBAAEPAeABAQGAAQAC/wEAAQ8BwAEAAYABAQHA - AQMBAAEOAYABAAGAAQEBwAEDAQABDAIAAYABAQHAAQMDAAEBAYABAQL/AwABAwGAAQEBwAE/AwABBwGA - AQEC/wHgAQABgAEvAYABAQHAAQMB+AEAAcABfwGAAQEC/wH8AQAB4Af/AfEG/wHvBP8BwAEBAf8BxwT/ - AcABAQH/AYMBgAE/Av8BwAEBAf4BAQGAAT8B/wHjAcABAQH+AoABPwH/AcEBwAEBAf4BwQGAAT8B/wGA - AcABAQHuAeMBgAEAAcEBAAHAAQEBxgHHAYABAAH/AQABwAEBAYIBgwGAAQABgQEAAcABAQEAAQEB/gEA - Af8BAAHAAQEBAAGAAf4BAAHgAQABwAEBAQABQQH+AQAB/wEBAcABAQGAASMB/gEAAf8BgwHAAQEBwAF3 - A/8BxwL/AeAE/wHvAv8B8Qf/AgAG/wIABP8B6QHLAgAE/wHxAccCAAH+AT8B4AEDAfEBxwIAAfwBHwHg - AQMC4wIAAfgBDwHgAQMBwwHhAgAB+AEHAeABAwGjAeMCAAH4AQMB4AEDAYcB8QIAAfgBBwHgAQMBowHj - AgAB+AEHAeABAwLjAgAB+AEHAeABAwLjAgAB/AEHAeABAwHxAccCAAH+AQ8C/wHxAccCAAH/AR8C/wHp - AcsCAAb/AQABDwT/Cw== - + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg + jwAAAk1TRnQBSQFMAgEBLwEAAewBBQHsAQUBEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA + AwABwAMAAQEBAAEYBgABkBsAA/4D/AP2A/EG7wPxA/YD/AP+EgAD/gP8A/YD8QbvA/ED9gP8A/4SAAP+ + A/wD9gPxBu8D8QP2A/wD/j8AA/4D9gPiA8UDqwakA6sDxQPiA/YD/gwAA/4D9gPiA8UDqwakA6sDxQPi + A/YD/gwAA/4D9gPiA8UDqwakA6sDxQPiA/YD/jkAA/4D8wG2AcIBqwFqAaIBPgFQAa8BEAFQAa8BDwFQ + Aa8BDAFQAa8BCgFWAZIBKgFyAYQBZQOfA9ED8wP+BgAD/gPzAbIBwwHKAVUBpgHBAS8BtAHjATABtAHi + ATABsgHhATABsgHhAUEBlgGzAWsBhQGOA58D0QPzA/4GAAP+A/MBsQG0AcYBVAFiAa4BLQFAAb4BLQFE + AcYBLQFCAcIBKwE7AbUBPgFIAZMBawFuAYQDnwPRA/MD/jMAA/4D9gGOAbMBbQFQAbIBJAFSAbsBVgFS + Ab4BaQFSAb8BbQFSAb8BbQFSAb4BZwFRAbkBSAFQAbABFAFbAYsBOAOTA9ED9gb+A/YBgAG1AckBLwG3 + AecBKQHEAfUBJgHKAfwBJQHLAf0BJQHLAf0BJgHJAfsBKgHAAfABMAG0AeIBSwGNAaYDkwPRA/YG/gP2 + AYIBjAHEAS4BSAHOAS4BUAHdAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS4BUAHeAS0BQgHCAUoBUgGO + A5MD0QP2A/4wAAP8AZMBvAFvAVEBtwFAAVIBvgFqAVIBvwFtAVIBvwFtAVIBvwFtAVIBvwFtAVIBvwFt + AVIBvwFtAVIBvgFoAVABswEpAVoBiwE4A58D4gb8AYMBvQHSAS0BvgHuASYBygH8ASUBywH9ASUBywH9 + ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASYByQH7AS8BuAHnAUsBjQGjA58D4gb8AZABnAHQAS4BTQHW + AS8BVgHqAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS0BSAHOAUsBUwGS + A58D4gP8MAAB3gHmAdcBUQGzAS8BUgG/AWsBUgG/AW0BUgG/AW0BUgG/AW0BUgG/AW0BUgG/AW0BUgG/ + AW0BUgG/AW0BUgG/AW0BUgG+AWkBUAGyAR8BcgGEAWMDxQP2AdwB5gHqAS0BuAHoASYBygH8ASUBywH9 + ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASUBywH9ASYBygH7AS8BtgHlAWsBhAGN + A8UD9gHcAd4B6gEuAU8B2wEvAVYB6wEvAVcB7AEvAVcB7AEvAVcB7AEvAVcB7AEvAVcB7AEvAVcB7AEv + AVcB7AEvAVcB7AEvAVcB7AEuAUgBzQFrAXABiAPFA/YwAAGSAcMBdAFSAb0BZQFSAb8BbQFTAb8BbgFT + Ab8BbgFTAb8BbgFTAb8BbgFSAb8BbQFSAb8BbQFSAb8BbQFSAb8BbQFSAb8BbQFSAbsBWQFVAZIBKgOr + A/EBgwHDAdoBJwHJAfoBJQHLAf0BJwHLAf0BJwHLAf0BJwHLAf0BJgHLAf0BJQHLAf0BJQHLAf0BJQHL + Af0BJQHLAf0BJQHLAf0BKQHFAfYBQQGUAbEDqwPxAYMBlAHcATABVgHmATEBWQHsATEBWgHsATEBWgHs + ATABWQHsATABWAHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BVwHsAS8BUwHjAUABUQGkA6sD8TAA + AVABsgEqAVYBwAFwAVoBwgF0AVwBwwF2AV4BwwF4AV0BwwF3AVsBwgF2AVgBwQFzAVUBwAFwAVIBvwFt + AVIBvwFtAVIBvwFtAVIBvgFqAVABsQEdA6QD7wEtAbQB4gEtAcwB/QE0Ac4B/QE5Ac8B/QE7Ac8B/QE6 + Ac8B/QE3Ac4B/QExAc0B/QEqAcwB/QEmAcsB/QElAcsB/QElAcsB/QEmAcoB/AEvAbQB4wOkA+8BLwFS + AeIBNQFfAewBTwF1Ae8BaAGJAfIBaAGJAfIBZwGHAfIBZgGGAfEBZQGDAfEBYwGBAfEBYwGBAfEBYwGB + AfEBSQFsAe4BLwFXAewBLgFLAdMDpAPvMAABUAGzATIBYwHEAXwBaAHGAYEBbAHHAYQBbQHIAYUBbQHH + AYUBagHHAYMBZgHFAX8BYAHEAXkBWQHBAXQBVAHAAW8BUgG/AW0BUgG/AW0BUAGyASUDpAPvASwBtQHj + AUIB0AH9AUsB0QH9AVAB0gH9AVMB0wH9AVIB0gH9AU4B0gH9AUgB0QH9AT4BzwH9ATMBzQH9ASgBzAH9 + ASUBywH9ASUBywH9AS8BtQHkA6QD7wEvAVQB5QE+AWoB7wGgAbYB9xj/AZcBqwH2AS8BVwHsAS4BTwHa + A6QD7zAAAVABtAE0AXEByAGIAXcBywGOAXsBzAGSAX0BzQGUAXwBzAGTAXoBywGQAXUBygGMAW4ByAGG + AWUBxQF+AVwBwgF2AVQBwAFvAVIBvwFtAVABsgEpA6sD8QErAbQB4gFYAdMB/QFhAdUB/QFnAdYB/gFp + AdcB/gFoAdcB/gFkAdYB/QFeAdQB/QFUAdMB/QFGAdAB/QE3Ac4B/QEpAcwB/QElAcsB/QEuAbUB5AOr + A/EBLwFVAecBTAF2AfABpwG8AfgY/wGXAasB9gEvAVcB7AEuAVAB3gOrA/EwAAFQAbMBLwF8AcwBkwGG + Ac8BnAGLAdEBoQGNAdIBowGNAdIBogGJAdEBnwGDAc8BmgF7AcwBkgFyAckBiQFnAcYBgAFbAcIBdgFT + Ab8BbQFQAbIBJwPFA/YBKwGvAd4BZwHWAf4BdQHZAf4BfAHbAf4BfwHbAf4BfgHbAf4BegHaAf4BcgHY + Af4BZwHWAf4BWQHUAf0BSQHRAf0BNwHOAf0BKAHLAf0BLgGzAeEDxQP2AS8BVgHqAVgBgQHxAXUBmAH0 + AYwBqgH2AYsBqQH2AYcBpgH2AYIBoQH1AXsBmwH0AXMBlAHzAWwBjQHyAWcBhwHxAUoBbQHuAS8BVwHs + AS8BUgHgA8UD9jAAAZ0BywGAAXcBywGPAZUB1QGqAZwB1wGvAZ8B2AGyAZ4B2AGxAZkB1gGtAZIB1AGn + AYgB0AGeAX0BzQGUAXEByQGJAWUBxQF+AVcBwAFtAWoBoQFDA+ID/AGNAcQB2gFdAdUB/gGIAd4B/gGQ + AeAB/gGUAeEB/gGTAeEB/gGNAd8B/gGEAd0B/gF4AdoB/gFqAdcB/gFZAdMB/QFFAdAB/QEwAcsB+wFV + AZ0BuQPiA/wBjQGgAekBVgF9AfABdAGZAfQBdwGcAfUBdQGaAfUBbwGVAfQBZgGNAfMBWgGDAfIBTgF4 + AfABQwFuAe8BOAFkAe0BMgFcAe0BLwFWAekBVQFqAcAD4gP8MAAB6gHwAeUBVQG3AUEBoAHZAbIBrgHe + Ab4BsgHgAcEBsAHfAcABqwHdAbsBoQHZAbMBlQHVAakBiAHQAZ4BegHMAZEBawHHAYMBUQG1AToBtgHC + AasD9gP+AegB7wHyATEBswHhAZMB4gH+AaQB5gH+AakB5wH+AagB5wH+AaEB5QH+AZUB4gH+AYcB3gH+ + AXgB2QH+AWUB1gH+AU8B0gH9ASwBtgHkAbIBwQHGA/YD/gHoAesB9QE5AWAB7QGCAaUB9QGNAa4B9wGL + Aa0B9gGCAaUB9gF1AZoB9AFnAY4B8wFYAYIB8gFKAXUB8AE+AWkB7gE1AWAB7QEvAVYB5wGyAbYBygP2 + A/4zAAG6AdcBoQFkAcEBaQG5AeMBxgHFAecB0AHEAecBzwG7AeMByQGuAd4BvwGgAdkBsgGRAdMBpgF/ + Ac0BlgFYAb0BXQGPAbUBbwPzA/4GAAGwAc4B2wFAAcQB8AGvAekB/gG/Ae0B/gG9Ae0B/gG0AeoB/gGl + AeYB/gGVAeIB/gGDAdwB/gFsAdcB/gEyAcIB8QGCAa4BwAPzA/4GAAGgAbEB6wFEAWoB7gGiAb0B+QGm + AcEB+QGWAbYB+AGEAacB9gFyAZgB9AFhAYkB8wFQAXsB8QFCAW4B7wEzAVsB6gGAAZABzQPzA/45AAGt + AdEBjgFYAbkBRAGkAdwBtAHNAesB1wHKAekB1QG6AeMByAGkAdoBtQF+Ac0BlAFUAbcBQAGdAcABfwP2 + A/4MAAGhAcUB1AE0Aa8B2wGRAeQB/gHHAfAB/wHFAe8B/gGzAeoB/gGYAeMB/gFlAdcB/gEwAbMB4QGR + AbgByAP2A/4MAAGvAb0B7AFBAWcB7gGIAaQB9gGrAcUB+gGRAbEB9wF6AZ8B9QFnAY4B8wFJAXIB7wE1 + AV4B7AGDAZYB2gP2A/4/AAHqAfAB5QGdAcsBgAFQAbMBMAFQAbUBNwFQAbUBNwFQAbMBMAGSAcMBdAHe + AeYB1wP8A/4SAAHoAe4B8QGNAbsB0AEsAaEBzQErAaYB0wErAagB1QErAaYB0wGCAbkBzwHcAeQB5wP8 + A/4SAAHoAesB9QGNAaAB6QEvAVcB7AFJAW8B7wFDAWoB7gEvAVcB7AGDAZYB4wHcAd8B7AP8A/7/AF0A + LfYGACT2aQAD9gNCA/YDQgP2A0ID9gNCA/YDQgP2A0ID9gNCA/YGAAP2D0IB8QHvAfAMQgP2DwAb9hIA + J/YGAC32BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0IB8QHvAfAB8QHvAfAB8QHvAfADQgP2 + DwAD9glCA/YJQgP2EgAD9gZCA/YDQgP2A0ID9gNCA/YGQgP2BgAD9gNCIfYDQgP2BgAD9gNCAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0ID9g8AA/YDQgP2A0ID9gNC + A/YDQgP2EgAD9gNCG/YDQgP2BgAM9hVCDPYGAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgHx + Ae8B8AHxAe8B8AHxAe8B8ANCA/YPAAP2CUID9gNCA/YDQgP2EgAD9gNCA/YDQgP2A0ID9glCA/YDQgP2 + BgAD9gNCIfYDQgP2BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwA0ID9g8ACfYDQgP2A0ID9gNCA/YSAAn2A0ID9gNCA/YDQgP2A0IJ9gYADPYVQgz2BgAD9gHx + Ae8B8ANCAfEB7wHwA0IB8QHvAfADQgHxAe8B8AHxAe8B8AHxAe8B8ANCA/YPAAP2CUID9glCA/YYAAP2 + A0ID9gNCA/YDQgP2A0ID9gwAA/YDQiH2A0ID9gYAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YGABj2A0IV9gwAA/YJQgP2CUID9gwADPYJQgP2CUIM9gYA + A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YGAAP2 + A0ID9gNCA/YGAAn2AwAD9gNCA/YDQgP2DAAD9gNCA/YDQgP2A0ID9gNCA/YMAAP2A0IG9glCEvYDQgP2 + BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwDEID9gYAA/YDQgP2A0ID9hIAA/YDQgP2 + A0ID9gwAA/YJQgP2CUID9gwADPYJQgP2CUIM9gYAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AlCA4YD9QYAD/YSAA/2DAAb9gwAA/YDQiH2A0ID9gYAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AZCA4YD9QP4aQAt9gYAA/YVQgOcA/MD+mwAA/YDQgP2A0ID9gNCA/YDQgP2A0ID9gNC + A/YDQgP2BgAY9gPzA/xvAC32MAAD+APyEvYD8gPxA/wPACr2EgAD9APyDPYD8gP0GAAD9APyDPYD8gP0 + DAAD8gOGA0IDegOGDEIDkQPyDwAD9iRCA/YMAAP6A/MG9gPgBkID4Ab2A/MD+gwAA/oD8wb2A+AGQgP2 + A1kDyQPzA/oGAAP2A0IDswP2A0IDZAb2A7MDQhX2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgn2AwAD+gP1A6cDyQP2A6cGQgOcA/YDyQOn + A/UD+gYAA/oD9QOnA8kD9gOnBkID9gZCA3oD3gPyAwAD9gNCA6cD6wP2A2QDQgP2A6cDQgP2DEIG9gNC + AfEB7wHwAfEB7wHwA0IB2wHZAdoB8QHvAfAB8QHvAfAB2wHZAdoDQgHxAe8B8AHxAe8B8ANCA/YDQgP2 + AwAD8wOnBkIDZANNBkIDTQNkBkIDpwPzBgAD8wOnBkIDZANNBkID9glCA00DnAPzA/IDhgxCA4YDegNC + A4YB8wHyAfMB8QHvAfAB8QHvAfAB8QHvAfADQgb2A0IB8QHvAfADQgOGAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwA4YDQgHxAe8B8ANCA/YDQgP2A/QD9gPJHkIDyQP2BvQD9gPJEkID9glCA00DnAP2A/gD8hL2 + AfUB9AH1AfMB8gHzAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0IG9gNCAfEB7wHwA0IDhgHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AOGA0IB8QHvAfADQgP2A0ID9gPyBvYDZANCA00BxQHEAcUB8QHvAfAB8QHv + AfABxQHEAcUDTQNCA2QG9gbyBvYDZANCA00BxQHEAcUB8QHvAfAB8QHvAfAD9gZCA3oD3gP2A/UMAAP2 + A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgb2A0IB8QHv + AfAB8QHvAfADQgHbAdkB2gHxAe8B8AHxAe8B8AHbAdkB2gNCAfEB7wHwAfEB7wHwA0ID9gNCBvYD4AOn + A00DQgHFAcQBxQHxAe8B8AHQAs8B0ALPAfEB7wHwAcUBxAHFA0IDTQOnA+AG9gPgA5wDTQNCAcUBxAHF + AfEB7wHwAdACzwHQAs8D6wNZA8kM9gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8ANCBvYDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YDQgb2DEIB8QHvAfAB0ALPBkIB0ALPAfEB7wHwDEID9gPr + DEIB8QHvAfAB0ALPBkIDnAb2A2QGQgP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwA0IG9iRCA/YDQgb2DEIB8QHvAfAB0ALPBkIB0ALPAfEB7wHwDEID9gPr + DEIB8QHvAfAB0ALPBkIBuwG6AbsB8QHvAfAMQgP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0It9gNCBvYD4AOcA00DQgHFAcQBxQHxAe8B8AHQAs8B0ALP + AfEB7wHwAcUBxAHFA0IDTQOcA+AG9gPgA5wDTQNCAcUBxAHFAfEB7wHwAdACzwHQAs8B8QHvAfABxQHE + AcUDQgNNA5wD4AP2DAAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwA0ID9gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8ANCA/YD8gb2A2QDQgNNAcUBxAHFAfEB7wHwAfEB7wHwAcUBxAHFA00DQgNkBvYG8gb2A2QDQgNN + AcUBxAHFAfEB7wHwAfEB7wHwAcUBxAHFA00DQgNkBvYD8gwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AxCA/YMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAMQgP2A/QD9gPJ + HkIDyQP2BvQD9gPJHkIDyQP2A/QMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAJQgOG + A/UMAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAJQgOGA/UDAAPzA6cGQgNkA00GQgNN + A2QGQgOnA/MGAAPzA6cGQgNkA00GQgNNA2QGQgOnA/MPAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAGQgOGA/UD+AwAA/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AZCA4YD9QP4 + AwAD+gP1A6cDyQP2A6cGQgOcA/YDyQOnA/UD+gYAA/oD9QOnA8kD9gOnBkIDnAP2A8kDpwP1A/oPAAP2 + FUIDnAPzA/oPAAP2FUIDnAPzA/oJAAP6A/MG9gPgBkID4Ab2A/MD+gwAA/oD8wb2A+AGQgPgBvYD8wP6 + EgAY9gPzA/wSABj2A/MD/BIAA/QD8gz2A/ID9BgAA/QD8gz2A/ID9HIADPYD9QP4rgAD9glCA4YD9QP4 + SAABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFxAYsBRQFpAYQBPwFiAX4BOgFcAXgBswHAActIAAP1 + A4YGQgOGA/YD9QP4RQABSQG4Ad8BgwHbAe8BeQHUAewBbwHPAeoBZAHIAecBWQHDAeUBTwG9AeIBRAG3 + AeABOQFaAXcbAAHIAb0BtQGIAXABXQGDAWoBWAF+AWUBUgF6AWABTgF1AVwBSAFxAVcBQwFtAVMBPgFq + AU8BOwFnAUsBNwG6Aa4BpAwAA/gD9QaGA/YGhgP1A/gPADD2AwABTgG8AeIBjgHgAfEBhQHbAe8BpgGM + AXoBmwGBAW4BlQF6AWcBWgHDAeUBUAG+AeMBPAFeAXobAAGvAZYBhwHpAeAB3AHjAdoB0wHeAdMBzAHa + AcwBxAHVAcUBvAHQAb4BtQHLAbgBrAHGAbEBpgHDAasBnwFoAU4BOQ8AA/gD9QP2A4YGQgOGA/UD+AwA + A/YqQgP2AwABUAG+AeMBmAHmAfQBjwHhAfIBhQHcAe8BfAHWAe0BcgHRAeoBZwHKAekBXAHFAeUBQAFi + AX0bAAGzAZoBiwHuAegB5QHpAeEB3AHjAdkB1AHfAdIBzAHaAcwBxAHVAcUBvAHQAb4BtQHMAbgBrQHG + AbEBpQFtAVMBPhIAA/gD9QOGCUIDhgP1A/gJAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfADQgP2AwABUAG+AeMBnwHr + AfYBmQHmAfQBpwGLAXoBnAGBAW8BlQF6AWcBcwHRAesBaQHLAekBQwFmAYEBUgF5AZEBTAFxAYsBRQFp + AYQBPwFiAX4BOgFcAXgBswHAAcsJAAG3AZ4BkAHzAe8B7AHuAegB5AHoAeAB3AF+AWUBUgFuAVQBQAFj + AUgBMwHVAcUBvAHQAb4BtAHLAbgBrAFzAVoBRgYAFfYDhglCA4YD9QP4BgAD9gNCAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + A0ID9gMAAVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHyAYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGG + AW8BzwHqAWQByAHnAVkBwwHlAU8BvQHiAUQBtwHgATkBWgF3CQABvAGjAZYB+AH2AfQB8wHvAe0B7wHo + AeQB6QHgAdwB4wHZAdMB3wHTAcsB2gHMAcUB1QHFAbwB0AG+AbUBegFgAU4GAAP2EkIDswOGCUIDhgP1 + A/gDAAP2A0IB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHvAfAB8QHv + AfAB8QHvAfAB8QHvAfAB8QHvAfADQgP2AwABzwHtAfcBUAG+AeMBUAG+AeMBTwG9AeIBSQG4Ad4BQQGw + AdgBOAGpAdIBMQGiAcwBaQG/AdkBpgGMAXoBmwGBAW4BlQF6AWcBWgHDAeUBUAG+AeMBPAFeAXoJAAHB + AakBnQH8AvsB+AH2AvQB7wHsAX4BZgFSAW4BVAE/AWMBSAEzAd4B0wHMAdoBzAHEAdUBxQG8AYABaAFV + BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHwA0IB8QHvAfAB8QHvAfAB9AHzAfQDhglCA4YD9QP4A/YDQgHx + Ae8B8AHxAe8B8BhCAfEB7wHwAfEB7wHwA0ID9hUAAVABvgHjAZgB5gH0AY8B4QHyAYUB3AHvAXwB1gHt + AXIB0QHqAWcBygHpAVwBxQHlAUABYgF9CQABxQGvAaMD/wH8AvsB+QH2AfUB9AHvAewB7gHnAeQB6QHh + AdsB5AHZAdMB3gHSAcwB2gHMAcUBiAFwAV0GAAP2A0IB8QHvAfADQgHxAe8B8ANCAfEB7wHwA0IB8QHv + AfADswOGCUIDhgP1A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YVAAFQAb4B4wGfAesB9gGZAeYB9AGnAYsBegGc + AYEBbwGVAXoBZwFzAdEB6wFpAcsB6QFDAWYBgQkAAckBtAGqBv8B/AH7AfoB+AH1AfQB8wHvAewB7gHn + AeUB6AHgAdwB4wHZAdQB3wHTAcwBjgF3AWYGAAP2BkIB8QHvAfAB8QHvAfADQgHxAe8B8ANCAfEB7wHw + A0ID9gOGBkIDhgP1A/YDQgHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8AHx + Ae8B8AHxAe8B8AHxAe8B8AHxAe8B8AHxAe8B8ANCA/YVAAFQAb4B4wGmAe0B9wGgAesB9QGZAecB9AGR + AeMB8gGJAd4B8QF/AdgB7gF1AdIB6wFHAWwBhgkAAeYB3QHYAckBtAGpAcQBrQGiAb8BqAGbAbsBogGT + AbUBnAGOAbIBmAGJAa0BlAGEAagBjwF/AaMBigF5AcgBvQG1BgAD9gNCAfEB7wHwAfEB7wHwAfEB7wHw + A0IB8QHvAfAB8QHvAfAB8QHvAfADQgP2A/UGhgP1A/gD9gNCAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHw + AfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwAfEB7wHwA0ID9hUAAc8B7QH3 + AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHYATgBqQHSATEBogHMAakB0QHiMAAD9g9CAfEB7wHw + CUID9gP4BvUD+AMAA/YqQgP2YAAD9g9CAfEB7wHwCUID9gMABvgGADD2YAAD9htCA/afACH2PwAB6gHm + AeMBnAGFAXUBlgF/AW0BkAF3AWcBiQFwAV4BggFqAVcBfAFjAU8B6gHmAeMMAAH4Ae4B4wwAAZQBfAFs + AwABkwF8AWoDAAGRAXkBaAMAAY4BeAFmAwABjAF1AWIDAAGJAXABXwMAAYYBbQFbAwABggFpAVcVAAHk + AdUB1AHLAaIBnwG2AWcBaEIAAcIBqwGgAd4B0QHKAdoBzAHEAdYBxwG+AdIBwQG4Ac4BuwGyAcsBtwGr + AXsBYgFPCQAB+AHuAeMBmQEzAQAB+AHuAeMGAAGXAYEBcAH8AfgB9QH8AfYB8wH8AfQB8QH7AfIB7wH7 + AfEB7AH7Ae8B6gH5Ae0B5wH5AesB5QH5AekB4wH4AegB4AH3AeYB3QH3AeMB2wH2AeIB1wH1AeAB1RIA + A/0BywGfAZwB0QG6AbQB4gHmAd0BzQGnAaUBtgFnAWgSAAG3AaIBkwFjAUkBNQFjAUkBNQFjAUkBNQFj + AUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQMA + AcsBtwGsAeoB4wHfAdkBzgHIAVgBSwFBAdkBzgHIAdkBzgHIAc4BuwGyAYEBaAFVBgAB+AHuAeMBtQFj + ATUB2AGbAVsBmQEzAQAB+AHuAeMGAAH9AfoB+QHGAbYBrQGUAXwBbAG9AawBoQGTAXwBagG8AasBngGR + AXkBaAG6AagBmwGGAW4BWwH5AesB5AGqAZUBhgG6AaQBlgGLAXMBYQH2AeMB2gGGAW4BWwwAAegC2wG7 + AX0BegHRAboBtAHoAfYB6wHpAfkB7gHpAfkB7gHIAZkBlwG2AWcBaA8AAbcBogGTA/8BtwGiAZMBtwGi + AZMBtwGiAZMBtwGiAZMBtwGiAZIBtwGdAYwBtwGiAZMBtwGiAZMBtwGiAZMBtwGiAZMBtwGiAZMBYwFJ + ATUDAAHUAcMBuwHqAeMB3wFYAUsBQQFYAUsBQQFYAUsBQQHiAdcC0gHAAbgBhwFvAV0BlwGAAW8BlwGA + AW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQAB+AHuAeMBnQGIAXYB/gH8AfsBpQGPAX4BnwL+ + AZwB/QH+AZkB/QH+AZUC/gGSAf0B/gGOAf0B/gG3AaMBlgH6Ae4B6QHMAboBrgGDAv4BuAGjAZUB+AHm + Ad4JAAH5AvgBxgKXAcEBlAGQAeIB5gHdAeQB6wHhAcQBmQGUAbkBdQF0AcABwwHBAekB+QHuAcYBlQGU + AbYBZwFoDAABtwGiAZMD/wHFAUoBEAH9AYUBYgHUAV4BKwG2AVEBJAGiAUgBHQGzAWEBOAHkAcgBugHm + AdEBxgHmAdMByQHhAcoBvQG3AaIBkwFjAUkBNQMAAd0B0AHJAeoB4wHfAeoB4wHfAeoB4wHfAeoB4wHf + AeIB1wHSAdYBxwG+AY0BdQFjAZcBgAFvAwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEz + BAAD/gHKAbwBswGnAv4BpAL+AaAB/gH/AZ0C/gGZAv4BlgL+AYsBcwFhAfsB8QHtAbABmwKMAf0B/gGL + AXMBYQH5AeoB4wGLAXMBYQP/AeIC0AG4AXsBeQHTAcUBvgHpAfkB7gHXAccBwAHBAYMBgQHDAn0BwgF1 + AXYBugFuAW0BxwHMAckB6QH5Ae4BxQGUAZMBtgFnAWgJAAG3AaIBkwP/Ae4BzAG8AcoBWQEkAf0BqQGQ + AcsBZwE6AbQBXQExAdkBoAGGAe4B4gHbAe0B4QHaAeoB2QHQAeQBzwHEAbcBogGTAWMBSQE1AwAB6gHm + AeMB1AHFAbsBtAGeAZAB3QHQAckB3QHQAckBjQF2AWQBjgF2AWQB6gHmAeMBlwGAAW8GAAH4Ae4B4wHY + AZsBWwH/Ac0BmQHJAXMBQwH4Ae4B4wGlAY8BfgP/AaoBlQGGAa4B/gH/AeoBgAFKAegBewFEAeUBdgE/ + AeIBcgE6AZ0B/gH/AbkBqQGdAfwB9AHxAdABwAG1AZMC/gG5AaYBmQH6Ae0B5wMAAbkBnAGZAboBkwGQ + AeYB8QHnAeQB6wHhAb8BkQGOAcIBhQGDAckCgAHIAX0BfwHGAn0BwgF7AX0BugFuAW0BxwHMAckB6QH5 + Ae4BwwGRAY8BtgFnAWgGAAG3AaIBkwP/Av4B/QHuAcwBvAHLAV4BKwHMAX4BWAHZAaEBhgH6AfUB8wH6 + AfUB8wHxAegB4gHsAd0B1QHoAdcBzQG4AaMBlAFjAUkBNQMAAfQB8gHwAdkBzAHEAbwBpwGYAwAB2AHu + AfYBywG3AawBlwGAAW8B9AHyAfABlwGAAW8JAAH3Ad4B4gHYAZsBWwH4Ae4B4wYAA/8BzgHBAbgBtQH+ + Af8BsgL+Aa4C/gGsAv4BqAL+AaUC/gGQAXcBZgH8AfcB9QG1AaEBkgGaAv4BkAF3AWYB+wHwAewBkAF3 + AWYBuAF2AXQB5AHoAd8BzwG/AbkBuwF7AXkBwQJ/AcYCgwHIAoIBxwKDAcYBfwGBAcUBfQF8AcMBegF7 + AbkBbQFsAccBzAHJAekB+QHuAcIBjgGNAbYBZwFoAwABugGlAZYG/wL+Af0B7gHMAbwB5AGvAZQB/QH6 + AfgBxQHWAccBTgFuAVEBLwFUATABVAFzAVYByAHTAb8BuQGkAZUBYwFJATUGAAHeAdEBygHqAeMB3wHL + AbcBrAHCAasBoAHWAcYBvQGhAYoBegMAAZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHeAeIGAAGqAZUBhgP/ + AbABmwGMAb0C/gHqAYABSgHoAXsBRAH5Ad0BzwMAAYECgAGrAagBpgH9AfoB+QHUAcYBvAGiAv4BvAGr + AZ8B/AH0AfADAAHBAYEBfwHSAasBqAHCAYMBgQHKAZABjAHOAY0BjAHMAYsBigHMAYcBiQHJAYYBhwHK + AYIBhQHJAYEBhQHGAX8BgAHCAnkBuQFsAWsBxwHMAckB6QH5Ae4BxwGVAZQDAAG+AakBmhL/AVwBgwFe + AWMBqAFnAUoBlQFLATsBeQE6AVgBeAFYAbgBowGUAWMBSQE1BgAB9AHyAfAB3gHRAcoB0gHAAbgBzQG6 + AbEBywG3AawB0QHiAegDAAGXAYABbwMAAf0B7AH9AbMBPAGyAdwBcAHbAY0BLQGMAf0B7AH9BgAD/wHR + AcUBvAHDAf4B/wHAAv4BvQL+AboC/gGBAoABdQFxAW4BVwFUAVEDAAGjAZcBjQHSAcMBugGTAX0BawH9 + AfYB9AGTAX0BawHWAaEBnQHTAaoBqAHMAY8BjgHdAaEBnwHYAZoBmwHWAZQBlwHTAZEBkwHSAY8BkQHQ + AYwBjgHOAooBzQGIAYkByAKCAb8BdgF3AbgBawFqAccBzAHJAd4B4gHbAwABwwGuAZ4S/wFWAY4BWQF9 + AckBggFbAbMBXAFIAZQBSwE5AV0BOgG4AaMBlAFjAUkBNQYAAdgB7gH2AQ4BeAGeAU8BywHxATQBwAHv + AS8BvgHvAQwBYgGBAZcBgAFvAZcBgAFvAZcBgAFvAdkBbAHYAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGM + Af0B7AH9AbABmwGMA/8BtQGhAZIBygH+Af8B6gGAAUoB6AF7AUQB5QF2AT4BsgHSAc8BowGdAZgB/QL+ + AVEBkwGpAQ4BEgEWAdwB4wHlAf4B+gH5Af0B+gH3AwAB+QL3AdYBoQGdAe8D0QGYAZUB4QGpAagB4gKr + Ad8BpAGmAdwBnwGgAdgCmwHUAZgBlwHRAZEBkgHMAooByAGDAYQBvwFzAXQBuAFrAWoBxgGxAa8DAAHI + AbIBowP/ARMBKwGcARIBKgGYAQkBHwF+AQkBHwF+A/8BhAG0AYgBpQHZAaoBeAHLAX0BXAGnAV8BWgF8 + AVoBuAGjAZQBYwFJATUDAAHYAe4B9gEUAaoB4QGFAeEB9QFrAdcB9AFQAcsB8QE0AcAB8AEdAbUB7gEM + AWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAwAD/wHUAcgBwAHR + Af4B/wHOAv4BywL+AccB/gH/AcUB/wH+AaMBnQGYAYgBtwHHAXQBzgHiAUkBmgGyAQ4BEgEWAd0B4AHh + Af4B+wH6AZcBgAFvAwAB9gLzAdYBoQGdAe0CyQHRAZgBlQHkAbABrwHrArcB5gKwAeIBqAGpAd0CogHZ + ApwB1AKVAc4CjwHLAocBvgFyAXMBuAFtAWwDAAHMAbYBpwP/ASEBOAG7ASABOQHBARQBLQGiAQkBHwF+ + A/8B2QHqAdoBkgHCAZUBZAGpAWgBeAGjAXoBxgHQAbwBuAGjAZQBZAFKATYGAAHYAe4B9gEUAaoB4QGG + AeEB9QFsAdYB8wFQAcsB8gE1AcAB8AEcAbUB7QEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6 + AdMBZQHSAf0B7AH9AbUBoQGSA/8BuwGnAZgB1gHKAcEBuQGlAZcB1AHIAb8BtgGiAZMB0gHFAb0BpAGe + AZcBTQGcAbMBjAHgAe4BYgG/AdcBSQGaAbIBDgESARYB1wHeAeEJAAH2AvMB1gGhAZ0B7QLJAdEBmAGV + AeYBswGyAfABvgG/AesCtwHoAbIBsQHlAa8BrgHhAasBqgHcAaIBowHWApgBzwKOAc8BmgGXAwAB0QG7 + AasD/wFDAVwB2AErAUYB4AEfATcBvAENASMBiQz/Af0B+wH6AfMB7AHmAbkBpQGWAWQBSgE2CQAB2AHu + AfYBFAGqAeEBhQHgAfUBbAHWAfMBUAHLAfIBNAHAAe8BHQG1Ae0BDAFiAYEB2AHuAfYDAAH9AewB/QHT + AWUB0gH9AewB/QYAGP8B3AHmAeoBVwGgAbUBjAHgAe4BbAHEAdkBfQKGAjUBkAF5AW0BeAkAAfYC8wHW + AaEBnQHtAskB0QGYAZUB6AG2AbUB9ALFAfIBwAHDAfABwAHBAe0BuwG8AeUCrwHVAaUBowHhAskB/AL7 + AwAB1QG/Aa8D/wFoAX4B5wFDAV0B3QElAT8BzQEXAS8BpQL+Af8C/gH/Av4F/wL+AfsB+AH2AdABwgG5 + AWQBSgE2DAAB2AHuAfYBFAGqAeEBhgHhAfQBawHWAfQBUAHLAfEBFwGYAcgB2AHuAfYJAAH9AewB/QYA + AbsBpwGYAwABuQGlAZcDAAG2AaIBkwMAAbMBngGOAwABrgGZAYoDAAGgAZoBlAF9AbABuwHKAbgBrAFz + AYUB0QFeAWwBrQI1AZAMAAH2AvMB1gGhAZ0B7QLJAdEBmAGVAewBwQHAAeQBvgG9AeABvQG7AdcBqQGo + AeECyAH8AvsJAAHYAcIBsiT/AWQBSgE2DwAB2AHuAfYBFAGqAeEBhQHhAfUBFwGYAcgB2AHuAfY5AAFe + AWwBrQGBAZ8B6wFeAXYB0AFeAWwBrQ8AAfYC8wHWAaEBnQHtAtEB2QGgAZ8B1QGpAagB3wLIAfsC+g8A + AdgBwgGyAdcBwQGxAdUBvwGvAdMBvQGtAdABugGrAc0BuAGoAcoBtQGlAcgBsgGjAcUBrwGgAcIBrAGd + Ab8BqgGaAbwBpwGYAboBpQGWAbgBowGUEgAB2AHuAfYBFAGqAeEB2AHuAfY/AAFeAWwBrQFeAWwBrRUA + AfkC9wHbArMB3wLGAfoC+aIAAawBlwGIAYQBbwFeAX0BaAFWAXwBZwFVAYUBcQFfAYcBcwFhAYYBcQFg + AXUBXwFMGAAB6gHmAeMBnAGFAXUBlgF/AW0BkAF3AWcBiQFwAV4BggFqAVcBfAFjAU8B6gHmAeMnAAG/ + AsEBMgFjAToBWAFuAVoBQwFTAUQBNAFBATUBJQEvASYBGAEgARkBEgEYAhIBGAISARgBEjMAAbwBpwGZ + AegB6QHrA/sD/wH3AfQB8QHrAekB5gH2AfQB8gF7AWUBUxgAAcIBqwGgAd4B0QHKAdoBzAHEAdYBxwG+ + AdIBwQG4Ac4BuwGyAcsBtwGrAXsBYgFPJAABvwLBAR0BJAEfAS8BYAE4AWIBrAFjAVwBogFdAVYBmAFX + AVMBjgFUAU4BhQFOAUoBegFKAVEBdAFSARIBGAESCQADyQFPAVEBTwE2AWYBNwFYAW4BWgFPAWMBUQFD + AVMBRAE0AUEBNQElAS8BJgEYASABGQFDAUcBQwGGAYgBhgkAAbsBpwGZAfgC+QMPAtwB2wH/AvwBCgEL + AQoB+AH5AfYBfwFqAVcYAAHLAbcBrAHqAeMB3wHZAc4ByAFYAUsBQQHZAc4ByAHZAc4ByAHOAbsBsgGB + AWgBVRsAAb8CwQEyAWMBOgFYAW4BWgFwAW4BbQHoAuwBNwFtAT8BUwGvAWsBTAGqAWUBRQGnAV8BPwGi + AVoBOQGeAVQBMgGaAU8BXAGHAVwBEwEaARMJAAEpAS0BKQPXATsBcAE9AW4BuAFyAVoBnwFbAVgBmAFZ + AVQBjgFVAU4BhAFPAUkBeQFKAT0BYwE+AUkBTQFJCQABvwGrAZ4D/wOPAwABxQLCAQoCCQHqAu0BewFm + AVMY/wHUAcMBuwHqAeMB3wFYAUsBQQFYAUsBQQFYAUsBQQHiAdcC0gHAAbgBhwFvAV0YAAG/AsEBHQEk + AR8BLwFgATgBYgGsAWMBvwLBAR8BJQEgAT8BewFGAV4BtgF0AVcBsgFuAVABrQFoAUkBqQFiAUMBpQFd + AT0BoAFXAVwBhwFcARwBKQEcCQABtwG4AbcBWAFZAVgBRgF7AUkBeQHCAX8BcQG7AXQBaAGyAWoBXwGn + AWABVQGcAVUBSwGSAUgBSQF6AUkBEAEVARAJAAHHAbUBqAb/A5cGAAH0AfYB+AF+AWkBVwPnA/8DAAP/ + A+cDAAPnA/8B3QHQAckB6gHjAd8B6gHjAd8B6gHjAd8B6gHjAd8B4gHXAdIB1gHHAb4BjQF1AWMDAAHx + AdsBxQGZATMBAAHeAb0BrAwAAXABbgFtAegC7AE3AW0BPwFTAa8BawFxAm8B6ALsAUYBigFOAWkBvQF8 + AWIBuAF3AVsBtAFxAVQBrwFsAU0BrAFmAUcBpwFgAWEBjgFjARABFQEQCQABIgEmASID/QFMAYkBUQGB + AcYBiAF3AcEBfQFvAbkBcgFmAbABaAFdAaUBXgFTAZsBUQFMAYIBTQEQARUBEAkAAc8BvwGyA/cDEAEr + AiwGAAHzAfYB+AF8AWcBVQMAA/8DAAP/AwAD/wMAA/8B6gHmAeMB1AHFAbsBtAGeAZAB3QHQAckB3QHQ + AckBjQF2AWQBjgF2AWQB6gHmAeMB8AHZAcIB1wGaAVoBmQEzAQABmQEzAQAB4QHEAbUJAAG/AsEBHwEl + ASABPwF7AUYBXgG2AXQBvwLBAR4BIwEhAU0BmAFVAXMBwwGFAW0BvwF/AWYBuwF7AV8BtgF0AVgBswFv + AVEBrgFpAWABmAFiARABFQEQCQABpgGnAaYDYwFSAY4BWgGNAcsBkwF+AcUBhQF3AcABfQFuAbgBcAFl + Aa4BZwFbAaQBWwFSAYsBUwEbASMBGwkAAc4BvgGzA/8C9wH4AfIC8wL7AfwB9gL3A/8BjwF8AWsD5wP/ + AwAD/wPnAwAD5wP/AfQB8gHwAdkBzAHEAbwBpwGYBgABywG3AawBlwGAAW8B5gHPAbcB1wGaAVoB2AGb + AVsBmQEzAQABmQEzAQABmQEzAQAB4QHEAbUGAAFxAm8B6ALsAUYBigFOAWkBvQF8AWECYwHoAuwBVAGl + AVsBfAHJAY4BdgHFAYgBcAHCAYMBagG9AX0BYwG5AXcBXAG1AXIBagGfAWgBGwEjARsJAAEgASUBIAP/ + AVcBkwFhAZkB0QGfAYkByQGPAXwBxAGDAXYBvgF7AWwBtgFuAWMBrQFlAVcBlAFYASsBNwEsCQABvAGp + AZsBuAGmAZgBugGnAZoBvAGrAZ0BwQGwAaMBvgGsAZ8BuwGqAZ0BqwGXAYkY/wMAAd4B0QHKAeoB4wHf + AcsBtwGsAcIBqwGgAdYBxgG9AaEBigF6AdgBmwFcAdgBmwFbAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEA + AZkBMwEAAeUBywG+AwABvwLBAR4BIwEhAU0BmAFVAXMBwwGFAb8CwQEjASYBJAFaAbABYQGFAc8BlAFE + AYYBSwFOAZoBVgFXAakCXQG2AWQBYgG/AWkBaAGmAWoBKwE3ASwJAAOsA3ABXQGYAWkBpgHYAawBRAGG + AUsBTgGaAVYBVwGpAl0BtgFkAWIBvwFpAVkBnAFbAT0BTQE+EgAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/ + AwAD/wMAAfQB8gHwAd4B0QHKAdIBwAG4Ac0BugGxAcsBtwGsAfQB8gHwAdgBmwFbAdgBmwFbAekBtAF8 + AfwB1gGvAbUBYwE1AZkBMwEAAZkBMwEAAZkBMwEAAf0B+wH6AWECYwHoAuwBVAGlAVsBfAHJAY4BWwFY + AVoB6ALsAV8BugFmAY0B0wGbAUQBhgFLAbQB3gG6AbQB3gG6AbQB3gG6AWABugFnAW4BqwFvAT0BTQE+ + CQABHAEgARwD/wFqAaMBeQGyAd0BuAFEAYYBSwG0Ad4BugG0Ad4BugG0Ad4BugFgAboBZwFeAaIBXwFN + AWEBTxIAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8VAAHYAZsBWwHqAbcBggH7AdgBsgH+AdEBowH7 + AdgBsgGvAVcBKAGZATMBAAGZATMEAAG/AsEBIwEmASQBWgGwAWEBhQHPAZQB1gHVAdcBKgEuASkBYgG/ + AWkBlAHXAaABRAGGAUsBRAGGAUsBRAGGAUsBRAGGAUsBYAG6AWcBdQG1AXYBTQFhAU8JAAGmAacBpgOA + AXMBrAGEAbsB4QHBAUQBhgFLAUQBhgFLAUQBhgFLAUQBhgFLAWABugFnAWIBqAFjAVgBcQFaEgAD/wPn + AwAD5wP/AwAD/wPnAwAD5wP/AwAD/xUAAecBswF8AfEBwwGRAf4BzwGdAf8BzQGZAf4B0AGfAfsB2AGy + AakBTgEeAZkBMwQAAVsBWAFaAegC7AFfAboBZgGNAdMBmwFbAVgBWgHoAuwBYgG/AWkBmQHbAaUBlQHZ + AaMBkgHXAaABjgHUAZwBiQHRAZgBhAHOAZQBngHOAaABWAFxAVoJAAEgASUBIAP/AYEBuAGSAb4B4wHE + AbgB4AG+AasB2gGxAZsB0gGhAYsBygGRAX0BxAGDAW4BtQFzAW8BlgFwEgAn/xUAAfsB6AHVAeUBsgF7 + AfQBwAGLAf8BzQGZAf8BzQGZAf4B0AGhAfIByQGdAbABWgEpAwAB1gHVAdcBKgEuASkBYgG/AWkBlAHX + AaAB1gHVAdcDcAFiAb8BaQFiAb8BaQFiAb4BaAFdAbYBZQFXAawBXwFRAZ8BWQFKAZEBUQFCAYMBSgHx + AfMB8QkAA+QEjQHEAZ4BiQHBAZgBgwG7AZABfAG1AYcBdAGuAX0BbAGnAXMBZAGgAWgBbgGkAXABpgHD + AaYSAAP/AwAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/GAAB+gHnAdMB5AGwAXkB9gHEAZAB/wHNAZkB8wHC + AY4B4wGwAXkB+QHmAdIDAAFbAVgBWgHoAuwBYgG/AWkBmQHbAaUBlQHZAaMBkgHXAaABjgHUAZwBiQHR + AZgBhAHOAZQBngHOAaABWAFxAVpIAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/GwAB+QHjAc0B4wGv + AXgB7gG9AYoB4wGwAXkB+gHtAd4GAAHWAdUB1wNwAWIBvwFpAWIBvwFpAWIBvgFoAV0BtgFlAVcBrAFf + AVEBnwFZAUoBkQFRAUIBgwFKAfEB8wHxSAAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/x4AAfgB5gHS + AeUBsgF9AfsB8QHncgAn/zwAAa0BWAEnAfIB5QHfEgAB+AHuAeMkAAGtAVgBJwHyAeUB3w8AAawBlwGI + AYQBbwFeAX0BaAFWAXwBZwFVAYUBcQFfAYcBcwFhAYYBcQFgAXUBXwFMTgAB/QH3AfEB5AGnAVYB2QGk + AXgBpQFJARgB7gHdAdUMAAH4Ae4B4wGZATMBAAH4Ae4B4xsAAf0B9wHxAeQBpwFWAdkBpAF4AaUBSQEY + Ae4B3QHVDAABvAGnAZkB6AHpAesD+wP/AfcB9AHxAesB6QHmAfYB9AHyAXsBZQFTMwABuwGmAZcBYwFJ + ATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUGAAH7AfQB6gHkAacBVgH/AeoBxQH+AeEBtAHdAasBgAGk + AUYBFQHtAdoB0QYAAfgB7gHjAbUBYwE1AdgBmwFbAZkBMwEAAfgB7gHjFQAB+wH0AeoB5AGnAVYB/wHq + AcUB/gHhAbQB3QGrAYABpAFGARUB7QHaAdEJAAG7AacBmQH4AvkDDwLcAdsB/wL8AQoBCwEKAfgB+QH2 + AX8BagFXMwABwgGsAZ0B/gH9AvwB8gHrAfoB5AHYAfcB2AHEAWMBSQE1BgAB5QGqAVkB/gH5AdsB/wHw + AckB/gHnAb4B/gHhAbQB3wGuAYMBpAFGARUBlwGAAW8BlwGAAW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGb + AVsBmQEzAQAB+AHuAeMSAAHlAaoBWQH+AfkB2wH/AfAByQH+AecBvgH+AeEBtAHfAa4BgwGkAUYBFQkA + Ab8BqwGeA/8DjwMAAcUCwgEKAgkB6gLtAXsBZgFTMwABzAG2AacD/wHYAccBvAHDAbEBpgH9AfIB6wFj + AUkBNQYAAeUBqgFbAf8B/gHjAf8B+AHWAf8B8AHJAf4B6AG+AfsB3wG0Aa8BWAEmAZcBgAFvAwAB+AHu + AeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFx + AYsBRQFpAYQB4AGmAVgB5gHqAdIB/wH4AdYB/wHwAckB/gHoAb4B+wHfAbQBrwFYASYJAAHHAbUBqAb/ + A5cGAAH0AfYB+AF+AWkBVwMAAfEB2wHFAZkBMwEAAd4BvQGsIQAD/AHvAeoB6AHMAbYBpwn/Af4B+gH4 + AWMBSQE1BgAB+wH0AeoB5QGqAVkB/wH+AeMB/wH3AdYB+wHlAbsB5AGlAVIB8AHPAaMBlwGAAW8GAAH4 + Ae4B4wHYAZsBWwH/Ac0BmQHJAXMBQwH4Ae4B4wFJAbgB3wGDAdsB7wF5AdQB7AFvAc8B6gFkAcgB5wFZ + AcMB5QFfAbkB0AHgAagBWAHmAekB0gH/AfcB1gH7AeUBuwHkAaUBUgHwAc8BowkAAc8BvwGyA/cDEAEr + AiwGAAHzAfYB+AF9AWgBVgHwAdkBwgHXAZoBWgGZATMBAAGZATMBAAHhAcQBtQkAAbsBpgGXAWMBSQE1 + AWMBSQE1AWMBSQE1AWMBSQE1AWMBSQE1Ae8B6wHoAb4BfQFYAYEBWQE+AeoBqgGLAekBpAGCAegBmwF1 + AeYBkQFmAeUBhwFWAd8BeAFECQAB+wH0AeoB5AGoAVYB+wH8AeEB4gGjAU8B8wHaAbkDAAGXAYABbwkA + AfcB3gHiAdgBmwFbAfgB7gHjAwABTgG8AeIBjgHgAfEBhQHbAe8BpgGMAXoBmwGBAW4BlQF6AWcBWgHD + AeUBYAG6AdEB4AGlAVQB/wH+AeMB4gGjAU8B8wHaAbkMAAHOAb4BswP/AvcB+AHyAvMC+wH8AfYC9wP/ + AY8BfAFrAdcBmgFaAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAeEBxAG1BgABwgGsAZ0B/gH9AvwB8gHr + AfoB5AHYAfcB2AHEAWMBSQE1AY8BYgFGAesB4wHfAwAB6gGqAYsB/wHCAaIB/QG5AZUB+QGrAYQB9gGe + AXIBzQFlATEMAAHZAeQB4gHfAaoBXAHZAdoBygYAAZcBgAFvBgAB/QHsAf0BjQEtAYwB9wHeAeIGAAFQ + Ab4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFRAWgBdgHmAa0BXwH3 + AecB0g8AAbwBqQGbAbgBpgGYAboBpwGaAbwBqwGdAcEBsQGkAb8BrQGgAbwBqwGeAaoBlgGIAdgBmwFb + AdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAZkBMwEAAeUBywG+AwABzAG2AacD/wHYAccBvAHDAbEBpgH9 + AfIB6wFjAUkBNQH7AvoGAAHqAaoBiwHpAaQBggHoAZsBdQHnAZEBZgHlAYcBVwHjAX4BSgkAAdgB7gH2 + AQ4BeAGeARwBtgHuAQ4BeAGeAdgB7gH2AwABlwGAAW8DAAH9AewB/QGzATwBsgHcAXAB2wGNAS0BjAH9 + AewB/QMAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6AZwBgQFvAZUBegFnAXMB0QHrAWkBywHpAUMBZgGB + AVIBeQGRAUwBcQGLAUUBaQGEAT8BYgF+AToBXAF4AbMBwAHLGAAB2AGbAVsB2AGbAVsB6QG0AXwB/AHW + Aa8BtQFjATUBmQEzAQABmQEzAQABmQEzAQAB/QH7AfoBzAG2AacJ/wH+AfoB+AFjAUkBNQHxAe4B7B4A + AdgB7gH2AQ4BeAGeAU8BywHxATQBwAHvAS8BvgHvAQwBYgGBAZcBgAFvAZcBgAFvAZcBgAFvAdkBbAHY + AfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAf0B7AH9AVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHy + AYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGGAW8BzwHqAWQByAHnAVkBwwHlAU8BvQHiAUQBtwHgATkBWgF3 + GAAB2AGbAVsB6gG3AYIB+wHYAbIB/gHRAaMB+wHYAbIBrwFXASgBmQEzAQABmQEzBAAB6gGqAYsB6QGk + AYIB6AGbAXUB5gGRAWYB5QGHAVYB3wF4AUQB0wGBAVkBlQFyAV0B8gHvAe0DAAG7AaYBlwFjAUkBNQFj + AUkBNQFjAUkBNQFjAUkBNQFjAUkBNQHYAe4B9gEUAaoB4QGFAeEB9QFrAdcB9AFQAcsB8QE0AcAB8AEd + AbUB7gEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6AfsBmAH6AdwBcAHbAY0BLQGMAc8B7QH3 + AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHYATgBqQHSATEBogHMAWkBvwHZAaYBjAF6AZsBgQFu + AZUBegFnAVoBwwHlAVABvgHjATwBXgF6GAAB5wGzAXwB8QHDAZEB/gHPAZ0B/wHNAZkB/gHQAZ8B+wHY + AbIBqQFOAR4BmQEzBAAB6gGqAYsB/wHCAaIB/QG5AZUB+QGrAYQB9gGeAXIBzQFlATED/gHuAegB5AG8 + AXsBVwGIAWEBSQHCAawBnQH+Af0C/AHyAesB+gHkAdgB9wHYAcQBYwFJATUDAAHYAe4B9gEUAaoB4QGG + AeEB9QFsAdYB8wFQAcsB8gE1AcAB8AEcAbUB7QEMAWIBgQHYAe4B9gMAAf0B7AH9AdMBZQHSAfoBrQH6 + AdMBZQHSAf0B7AH9EgABUAG+AeMBmAHmAfQBjwHhAfIBhQHcAe8BfAHWAe0BcgHRAeoBZwHKAekBXAHF + AeUBQAFiAX0YAAH7AegB1QHlAbIBewH0AcABiwH/Ac0BmQH/Ac0BmQH+AdABoQHyAckBnQGwAVoBKQMA + AeoBqgGLAekBpAGCAegBmwF1AecBkQFmAeUBhwFXAeMBfgFKBgAD/QHpAd8B2QHMAbYBpwP/AdgBxwG8 + AcMBsQGmAf0B8gHrAWMBSQE1BgAB2AHuAfYBFAGqAeEBhQHgAfUBbAHWAfMBUAHLAfIBNAHAAe8BHQG1 + Ae0BDAFiAYEB2AHuAfYDAAH9AewB/QHTAWUB0gH9AewB/RUAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6 + AZwBgQFvAZUBegFnAXMB0QHrAWkBywHpAUMBZgGBGwAB+gHnAdMB5AGwAXkB9gHEAZAB/wHNAZkB8wHC + AY4B4wGwAXkB+QHmAdIhAAHMAbYBpwn/Af4B+gH4AWMBSQE1CQAB2AHuAfYBFAGqAeEBhgHhAfQBawHW + AfQBUAHLAfEBFwGYAcgB2AHuAfYJAAH9AewB/RgAAVABvgHjAaYB7QH3AaAB6wH1AZkB5wH0AZEB4wHy + AYkB3gHxAX8B2AHuAXUB0gHrAUcBbAGGHgAB+QHjAc0B4wGvAXgB7gG9AYoB4wGwAXkB+gHtAd4kAAHq + AaoBiwHpAaQBggHoAZsBdQHmAZEBZgHlAYcBVgHfAXgBRAwAAdgB7gH2ARQBqgHhAYUB4QH1ARcBmAHI + AdgB7gH2JwABzwHtAfcBUAG+AeMBUAG+AeMBTwG9AeIBSQG4Ad4BQQGwAdgBOAGpAdIBMQGiAcwBqQHR + AeIhAAH4AeYB0gHlAbIBfQH7AfEB5ycAAeoBqgGLAf8BwgGiAf0BuQGVAfkBqwGEAfYBngFyAc0BZQEx + DwAB2AHuAfYBFAGqAeEB2AHuAfaWAAHqAaoBiwHpAaQBggHoAZsBdQHnAZEBZgHlAYcBVwHjAX4BSgkA + Aa0BWAEnAfIB5QHftAAB/QH3AfEB5AGnAVYB2QGkAXgBpQFJARgB7gHdAdUqAAH2AvUBdAFXAUMBaAFN + AToBZAFIATYBaQFMATkBawFOATkBbAFQATsBbAFRAT0BcQFSAUABiQFsAVwBoQGKAXwBvgGuAaZgAAH7 + AfQB6gHkAacBVgH/AeoBxQH+AeEBtAHdAasBgAGkAUYBFQHtAdoB0SQAAfQC8wF7AVkBRwG4AXYBdAFt + AVEBPQFbAUMBMgG1AmcBtgFnAWgBuwJvAb0BcgFxAcEBdgF6AccBgQGDAcIBfQF8AZsBbAFfYAAB5QGq + AVkB/gH5AdsB/wHwAckB/gHnAb4B/gHhAbQB3wGuAYMBpAFGARUhAAHyAfEB8AF5AVgBRgG4AXYBdAHj + AdoB1QGYAXcBXgGXAXYBYAGfAYMBbgHKAboBrwHXAcwBwwHjAdoB1QHpAeIB3gHmAd0B2QG/AXoBeAGu + AWgBZQYAAZ4BhwF3AZcBgAFvAZABeAFnAYkBcQFeAYIBaQFWAXsBYgFPAXUBXAFIAXABVgFBAWoBUAE8 + AWcBSwE3AWMBSAEzAWMBSAEzDAABngGHAXcBlwGAAW8BkAF4AWcBiQFxAV4BggFpAVYBewFiAU8BdQFc + AUgBcAFWAUEBagFQATwBZwFLATcBYwFIATMBYwFIATMGAAHlAaoBWwH/Af4B4wH/AfgB1gH/AfAByQH+ + AegBvgH7Ad8BtAGvAVgBJh4AAe8B7gHtAXkBWAFGAbgBdgF0AcsBmwGaAeMB2gHVAZgBdwFeAeUB0QHC + AdkBzgHGAZsBewFmAawBkQGAAd0B0gHLAekB4QHcAeoB4wHfAcUBgAGBAbcCbmAAAfsB9AHqAeUBqgFZ + Af8B/gHjAf8B9wHWAfoB5QG7AeMBpQFSAfABzwGkD/8MAAP9AXkBWAFGAbMBcwFvAcgBlQGUAfAB6wHo + AeMB2gHVAZ8BegFgAd8BygG7AekB4wHeAesB5QHhAdcBwgG1AZsBewFmAd8B1AHOAewB5gHgAcsBhwGK + Ab0CdQYAAZ8BhwF3AZcBgAFvAZABeAFnAYgBcQFfAYIBaQFWAXsBYgFPAXUBXAFIAXABVgFBAWoBUAE7 + AWcBSwE3AWMBSAEzDwABnwGHAXcBlwGAAW8BkAF4AWcBiAFxAV8BggFpAVYBewFiAU8BdQFcAUgBcAFW + AUEBagFQATsBZwFLATcBYwFIATMMAAH7AfQB6gHiAaYBVgH/Af4B4wHiAaMBTwHsAdIBsQwAA/MD/wMA + A84JAAGyAYkBggG6AXoBeAP/AfAB6wHoAeMB2gHVAaEBfAFiAd8BygG7AekB4wHeAfcB9QHzBv8BlwF2 + AWAB8AHrAegBzwGNAY8BwgF6AXxjAAPlARgBEQEHAeUBrQFfAfcB5wHSAwAD/wYAA/8DAAb/AwAD5QP/ + AwABuQGDAX4BugF7AXgD/wHwAesB6AHjAdoB1QGoAX8BaAHfAcoBuwHpAeMB3gH3AfUB8wb/AZcBdwFg + Ae8B6gHnAdQBkwGVAckBhAGHBgAB4gFzAToB4gFxATkB3wFvATYB2QFqATIB0AFlAS8BxAFfASsBtgFX + ASgBpgFQASUBmAFJASMBiwFEASEBhgFBASABhgFBASAMAAHiAXMBOgHiAXEBOQHfAW8BNgHZAWoBMgHQ + AWUBLwHEAV8BKwG2AVcBKAGmAVABJQGYAUkBIwGLAUQBIQGGAUEBIAGGAUEBIAYAA+UDAAPoCQAD/wYA + A/8JAAPoAwAD5QMAAcEBhwGEAb0BfAF5A/8B8AHrAegB4wHaAdUBrwGGAWwB3wHKAbsB6QHjAd4B9wH1 + AfMG/wGeAXoBZAHvAegB5QHVAZYBmAHNAYkBjAYAAf8BmwFnAf8B4gG1Af8B3QGoAf8B1QGVAf8BzQF/ + Af8BwwFnAf8BuAFOAf8BrwE2Af8BpQEgAf8BngENAf8BmQEAAYYBQQEgDAAB/wGbAWcB/wHiAbUB/wHd + AagB/wHVAZUB/wHNAX8B/wHDAWcB/wG4AU4B/wGvATYB/wGlASAB/wGeAQ0B/wGZAQABhgFBASAJAAPo + AwAD/wYAA/8GAAP/BgAD/wMAA+gGAAHFAYkBhwG9AX4BewP/AfAB6wHoAeMB2gHVAcIBlwF9Ad8BygG7 + AekB4wHeAfcB9QHzBv8BowF8AWYB7AHmAeEB1wGYAZsB0AGNAZAGAAH/AaMBcQH/AaIBcAH/AaABbgH/ + AZ0BaAH/AZgBYwH9AZMBXgH2AY0BWAHtAYUBUwHiAX4BTQHVAXUBRwHIAW0BQQG8AWUBPAwAAf8BowFx + Af8BogFwAf8BoAFuAf8BnQFoAf8BmAFjAf0BkwFeAfYBjQFYAe0BhQFTAeIBfgFNAdUBdQFHAcgBbQFB + AbwBZQE8BgAD5QMAA+gJAAP/BgAD/wkAA+gDAAPlAwABxwKPAcABgQF9Af8B/QH/AfAB6wHoAeMB2gHV + AcgBmwGBAd8BygG7AekB4wHeAfcB9QHzBv8BqAGAAWoB6wHhAd8B1wGYAZsB1QGVAZhjAAPlAwAM/wYA + A/8GAAP/AwAD5QYAAc4ClQHCAYQBfwL/Af4B8AHrAegB4gHOAcEB3AG6AakB4QHEAbMB6QHjAd4B9wH1 + AfMG/wG5AYsBcQHaAZ4BoAHiAakBrAH8AvsGAAGeAYcBeAGXAYABbwGQAXgBZwGJAXABXgGCAWkBVgF8 + AWIBTwF1AVsBRwFwAVYBQRgAAZ4BhwF4AZcBgAFvAZABeAFnAYkBcAFeAYIBaQFWAXwBYgFPAXUBWwFH + AXABVgFBGAAD5Qz/BgAM/wPlCQAB0wKfAcYBiQGBAf8C/gHwAesB5wHlAcMBrwP+AecB2gHUAcoBrgGh + AcoBowGOAfYB8AHsA/8BxAGRAXVyAAP/AwAD+AP/BgAD/wP4AwAD/wwAAeIBrwGxAckBkAGFAf8B/gH/ + AfMB6gHlAd0BsgGaCQAB5wHcAdYBxwGsAZ4BygGjAY4BzwGnAZAPAAGeAYgBdwGXAYABbwGQAXkBZgGJ + AXEBXgGCAWkBVgF7AWIBTwF1AVsBSAFwAVYBQQFqAVABPAFmAUsBNwFjAUgBMwFjAUgBMwwAAZ4BiAF3 + AZcBgAFvAZABeQFmAYkBcQFeAYIBaQFWAXsBYgFPAXUBWwFIAXABVgFBAWoBUAE8AWYBSwE3AWMBSAEz + AWMBSAEzDwAD/xgAA/8PAAHVAaMBjQP/Ad0BuQGlAfUB8gHwhwAe/xIAAdsBrQGTAfQB8gHwA/6iAAH7 + AecB+roAAfsB5wH6AY0BLQGMAfsB5wH6NgABzwFrAWwByQFoAWkBsgFbAVwBfwI/AW4BkgGiAWoBiwGc + AVkBdgGHAUMBWAFpASgBNQFDAXQBnAGKAXABlgGGAV4BgQF0AUcBZAFbASsBQAE7JwAB+AHuAeMqAAH7 + AecB+gGNAS0BjAHeAXMB3gGNAS0BjCcAAeUCywGdAU0BJQGdAU0BJQGdAU0BJQHdArsB0AFtAW4B6AGO + AY8B5gGJAYoBtgJbAXEBlgGmAVgBxQHhAU0BvgHdAU0BvgHdAVsBugHbAXcBnwGNAWgB0AGXAV4BzAGR + AV4BzAGRAWoBywGbAT4BbAFfIQAB+AHuAeMBmQEzAQAB+AHuAeMYAAH4Ae4B4wkAAfsB5wH6AZ8BNQGe + AeoBkAHqAeQBhAHkAeABdwHeAY0BLQGMAfsB5wH6AwAB+wHDAfsBywEfAc0B/AHVAfwSAAHwAuEBnQFN + ASUB+gGdAWIB4QGGAVgB4QGGAVgBnQFNASUB0gFxAXIBpgJsAaABYwFkAYwCSwF0AZsBrAFiAaMBvQFX + AZgBtAFNAY0BqwFLAYABnAF6AaUBkgFtAbIBkgFiAakBiQFYAaABgQFUAZIBeQE7AbwBfQE+AWwBXxsA + AfgB7gHjAbUBYwE1AekBqQFZAZkBMwEAAfgB7gHjEgAB+AHuAeMBmQEzAQAB+AHuAeMDAAH7AecB+gHT + AWUB0gH2AawB9gHxAaEB8AHrAZQB6wHnAYgB5QHhAXsB4AGNAS0BjAH9AekB/gHLAR8BzQHLAR8BzQHL + AR8BzQMAAekB8AHpAScBbwEoARoBZwEcARoBZwEcAekB8AHpAecBmgFzAfwBvgGXAfsBwAGhAfsBsQGC + AaIBVgExAfIC5AHWAXgBeQH2AaoBqwHwAZ0BngHLAmgBdwGhAbEBYwHTAfMBXAHQAfMBVQHNAfIBWwG6 + AdsBfgGqAZUBdAHiAagBbgHhAaUBZwHfAaEBagHLAZsBOwG8AX0BPgFsAV8MAAHYAe4B9gkAAfgB7gHj + AbUBYwE1AfkBwwGJAfEBtgFxAekBqAFZAZkBMwEAAfgB7gHjDAAB+AHuAeMBtQFjATUB4wGfAUkBmQEz + AQAB9QHZAeMB5QFwAeQB+wG5AfsB+gG3AfoB9gGwAfYB8gGlAfMB7QGZAe0B3AFlAdsB+wHnAfoB2AFr + AdcB/wFeAfwBywEfAc0BywEfAc0B6QHwAekBLAGCATMBWgGvAV8BWwGpAV8BTQGcAU8BGQF3ARwB9wLw + AecBmgFzAecBmgFzAecBmgFzAfMC5wMAAdoBggGDAcMCfwG8AXQBdQGkAlkBfAGmAbcBaQGmAb0BXwGc + AbQBVQGQAawBSwGAAZwBgwGwAZsBcwGzAZQBaQGqAYwBXwGhAYUBVAGSAXkBOwG8AX0BQAFuAWEJAAHY + Ae4B9gEOAXgBngHYAe4B9gMAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfkBxAGIAfEBtgFxAegBqAFa + AZkBMwEAAfgB7gHjBgAB+AHuAeMBtQFjATUB7wGzAWsB6QGoAVkB4gGfAUkBmQEzAQAB9QHZAeMB5QFw + AeQB+wG5AvsBuQH7AfgBsgH4AdwBZQHbAfsB5wH6AwAB2AFrAdcB5AFCAeYB/wGmAf8BywEfAc0BKwGC + ATkBiAHXAZMBfgHNAYgBZAGzAWkBIgF6AScB6QHwAekGAAFWAVABSgkAAd8BigGLAf0BuQG7AfkBsAGx + Ac4BbgFtAX8BrAG9AX4B3gH1AXgB3AH0AXEB2QH0AVsBugHbAYYBtQGfAYwB5wG0AYcB5QGwAYAB5AGu + AWoBywGbATsBvAF9AUMBcgFlBgAB2AHuAfYBDgF4AZ4BLwG+Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHY + AZsBWwH/Ac0BmQH/Ac0BmQH5AcQBiQHxAbYBcQHpAagBWQGZATMEAAH4Ae4B4wG1AWMBNQH7AccBjgH1 + Ab0BfgHvAbMBawHoAakBWQHjAZ8BSQGZATMBAAH1AdkB4wHcAWUB2wH7AbkB+wHlAXAB5AH7AecB+gYA + AdgBawHXAf8BpgH/AdgBawHXAfwB1QH8AekB8AHpASsBggE5ASYBfgEuASIBegEnAekB8AHpAVYBUAFK + AwABVgFQAUoMAAHjAZMBlAH/Ab0BvgH9AbcBuQHPAXEBcAGDAbIBwwGLAeMB9QGFAeEB9AF+Ad4B9AFb + AboB2wGKAbsBowGXAegBuQGSAecBtgGMAeYBswFqAcsBmwE7AbwBfQFHAXYBaAYAAQ4BeAGeAVgBzwHy + AUIBxgHxAS4BvQHvAQwBYgGBAa0BlAGDAZ8BhAFxAZUBegFnAdgBmwFbAf8BzQGZAf8BzQGZAfkBwwGJ + AckBcwFDAfgB7gHjAwAB2AGbAVsB/wHNAZkB/wHNAZkB+wHHAY4B9gG+AX4B7wGzAWwB6AGpAVkB4wGf + AUkBmQEzAQAB+AHuAeMB5QFwAeQB+wHnAfoJAAH9AekB/gHYAWsB1wH9AekB/gFWAVABShIAAVYBUAFK + DwAB5wGbAZwB/wG9Ab4B/wG9Ab4B0QF0AXMBiAG3AckBlgHnAfYBkQHmAfYBigHjAfUBWwG6AdsBjwHB + AakBoQHqAb8BnQHqAbwBlgHoAbgBagHLAZsBOwG8AX0BSwF7AWsB2AHuAfYBFAGqAeEBggHfAfUBbAHW + AfMBVgHOAfIBQAHEAfABLAG8Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHYAZsBWwH/Ac0BmQHJAXMBQwH4 + Ae4B4wYAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGOAfUBvgF+Ae8BswFsAegBqAFZAeMBnwFJ + AZkBMwEAAfUB2QHjGAABVgFQAUoMAAFWAVABSgMAAVYBUAFKAfsBwwH7AcsBHwHNAfwB1QH8AwAB7AGk + AaUB/wG9Ab4B/wG9Ab4B0gJ2AYsBvAHOAZ8B6wH2AZsB6gH2AZYB5wH2AVsBugHbAZMBxgGtAakB6wHC + AaYB6wHAAaEB6gG/AWoBywGbATsBvAF9AU8BgAFwAwAB2AHuAfYBFAGqAeEBfwHeAfUBagHXAfMBVAHN + AfIBPgHEAfEBKgG8Ae8BDAFiAYEB2AHuAfYDAAH4Ae4B4wHYAZsBWwH4Ae4B4wwAAfgB7gHjAdgBmwFb + Af8BzQGZAf8BzQGZAfsBxwGPAfYBvgF+Ae8BswFsAegBqAFZAeMBnwFIAZkBMwEAAfgB7gHjGAADhgES + AVsBhQGHAbAByAFWAVABSgYAAf0B6QH+AcsBHwHNAcsBHwHNAcsBHwHNAwAB8AGsAa0BzQKFAcUBegF7 + AawCXQGNAcAB0gF4Aa0BvgFvAaIBtQFmAZcBrAFLAYABnAGVAcoBsAGAAbUBmgF3AawBkwFuAaMBiwFU + AZIBeQE7AbwBfQFUAYQBcwYAAdgB7gH2ARQBqgHhAX4B3gH0AWgB1gHzAVIBzAHyARcBmAHIAdgB7gH2 + CQAB+AHuAeMSAAH4Ae4B4wHYAZsBWwH/Ac0BmQH/Ac0BmQH8AccBjgH2Ab0BfgHvAbMBawHJAXMBQwH4 + Ae4B4xsAASgBfAGrAQwBrQHuARoBZwGTAZsBvgHRBgAB2AFrAdcB/wFeAfwBywEfAc0BywEfAc0DAAH0 + AbMBtAH/Ab0BvgH/Ab0BvgHTAnkBjwHDAdUBqwHwAfcBqwHwAfcBqAHvAfcBWwG6AdsBlwHMAbIBtAHu + AcgBtAHuAcgBsQHtAcYBagHLAZsBOwG8AX0BWQGKAXgJAAHYAe4B9gEUAaoB4QF8Ad0B9QEXAZgByAHY + Ae4B9iQAAfgB7gHjAdgBmwFbAf8BzQGZAf8BzQGZAfsBxwGOAdgBmwFbAfgB7gHjHgABDAGtAe4BKAF8 + AasBDAGtAe4BGgFnAZMGAAHYAWsB1wHkAUIB5gH/AaYB/wHLAR8BzQMAAfUBtgG3AfUBtgG3Ae0BpwGp + Ac8CcQGPAcMB1QGFAbQBxwF6AaQBtAFwAZUBpgFqAYsBnAGXAcwBsgGNAb8BqAGBAa0BmAF2AZ8BjQFw + AZYBhgE7AbwBfQFeAZABfQwAAdgB7gH2ARQBqgHhAdgB7gH2KgAB+AHuAeMB2AGbAVsB/wHNAZkB2AGb + AVsB+AHuAeMhAAEEAbQB/AFmAcwB/wEoAXwBqwEhAXIBoAYAAdgBawHXAf8BpgH/AdgBawHXAfwB1QH8 + BgAB1gGiAZ0BkgF9AW0B5QHgAdwBzQGZAZ4BkQGyAbkBkAF8AW0B5QHgAdwD/wFqAYsBnAGWAbQBowGL + AXEBegHkAd0B3wP/AXABlgGGAWQBlQGBDwAB2AHuAfYwAAH4Ae4B4wHYAZsBWwH4Ae4B4yQAAdkB5QHs + AQQBtAH8AWYBzAH/ASgBfAGrBgAB/QHpAf4B2AFrAdcB/QHpAf4MAAHGAZkBkgGVAX0BbgH0AewB6AHL + AZEBlgGMAasBswGGAYMBfQH0AewB6AHiAfMB9QFqAYsBnAMAAYUBfgF/AfIB6QHtAeQB8gHpAXABlgGG + RQAB+AHuAeMqAAHZAeUB7AEEAbQB/AG4AdAB3R4AAf4C/cMAAfgB7gHjAZkBMwEAAfMB4AHMRQABcwGi + AbcwAAGTAXsBagFgAUYBMgFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFjAUkBNQFj + AUkBNQFjAUkBNQFoAU4BOhgAAfgB7gHjAckBcwFDAeMBnwFJAZkBMwEAAfgB7gHjGAABtwGiAZMBYwFJ + ATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJATUBYwFJ + ATUBYwFJATUBYwFJATUBdAGnAbkwAAGXAYABbwH8Af4B/AHnAeYB5AHnAeIB3AHmAdwB1AHlAdYBywHk + Ac8BwQHjAcoBuAHjAcUBsQHiAcIBrAHHAaoBmAFoAU4BOhUAAfgB7gHjAckBcwFDAfEBtgFxAegBqAFa + AeMBnwFJAZkBMwEAAfgB7gHjFQABtwGiAZMB+wH0AfAB4QHcAdgB4AHXAdIB3wHSAcoB3wHOAcMB3QHI + AbsB3AHDAbMB2wG/Aa0B2wG7AacB2wG7AacB2wG7AacBzwG0AaMBYwFJATUBeAGqAb0GAAGeAYcBdwGX + AYABbwGQAXgBZwGJAXEBXgGCAWkBVgF7AWIBTwF1AVwBSAFwAVYBQQFqAVABPAFnAUsBNwFjAUgBMwFj + AUgBMwYAAZwBhQF0AfwB/gH8AbABmwGMAaoBlAGFAfsB9QHvAbYBoQGSAbABmgGMAasBlQGFAaUBjwF/ + AfYB2wHIAccBqgGYAWgBTgE6EgAB+AHuAeMB2AGbAVsB/wHNAZkB+QHDAYkB8QG2AXEB6QGpAVkB4wGf + AUkBmQEzAQAB+AHuAeMDAAH7AecB+gwAAbcBogGTAf0B9gH0AfsB9AHwAfsB8QHsAfoB7gHpAfkB6wHl + AfgB6QHhAfcB5QHdAfYB4gHZAfYB4AHVAfUB3QHRAfQB2QHNAc8BtAGjAWMBSQE1AXsBrQHAMAABoAGK + AXoB/AH+AvwB/gL8Af4B/AH7AfoB9wH7AfUB7wH6Ae8B5gH5AegB3AH3AeEB0QH2AdsCyAGuAZwBaAFO + AToVAAH4Ae4B4wHYAZsBWwH/Ac0BmQH5AcMBiQHxAbYBcQHoAagBWQHjAZ8BSQGZATMBAAH4Ae4B4wGN + AS0BjAH7AecB+gkAAbcBogGTAf0B+AH2Aa0BlwGHAaQBjgF+AZwBhQF0AZIBfAFqAYoBcwFgAYIBaQFX + AfcB5QHcAXMBWQFFAWwBUgE+AWcBTQE4Ac8BtAGjAWMBSQE1AX0BsAHDBgABnwGHAXcBlwGAAW8BkAF4 + AWcBiAFxAV8BggFpAVYBewFiAU8BdQFcAUgBcAFWAUEBagFQATsBZwFLATcBYwFIATMJAAGlAY8BfwH8 + Af4B/AGwAZsBjAGqAZQBhQH7AfoB9wG1AaEBkgGwAZsBjAGqAZQBhQGkAY8BfgH3AeEB0QHIAbIBogFo + AU4BOhUAAdIB3wHeAdIB3wHeAdgBmwFbAf8BzQGZAfkBwwGJAfEBtgFxAckBcwFDAfUB2gHfAY0BLQGM + Ad4BcwHeAY0BLQGMAfsB5wH6BgABtwGiAZMBFgHpAV8BFgHpAV8BFgHpAV8BFgHpAV8B+gHwAesB+gHt + AecB+AHqAeQB+AHoAd8B9wHkAdsB9gHhAdgB9gHeAdQBzwG0AaMBYwFJATUBfwGyAcQwAAGqAZUBhQH8 + Af4C/AH+AvwB/gL8Af4C/AH+AfwB+wH6AfcB+wH1AfAB+gHxAekB+QHoAd0BygG4AasBaAFOAToSAAHY + Ae4B9gEOAXgBngEMAWIBgQHSAd8B3gHYAZsBWwH/Ac0BmQHJAXMBQwH1AdoB3wGfATUBngHqAZAB6gHk + AYQB5AHgAXcB3gGNAS0BjAH7AecB+gMAAboBpQGWARYB6QFfBgABFgHpAV8BkwF8AWoBigFyAWABggFp + AVYBegFhAU0BcwFZAUUBbAFSAT0BZwFNATgB0AG5AasBYwFJATUJAAHiAXMBOgHiAXEBOQHfAW8BNgHZ + AWoBMgHQAWUBLwHEAV8BKwG2AVcBKAGmAVABJQGYAUkBIwGLAUQBIQGGAUEBIAGGAUEBIAYAAa8BmwGL + AfwB/gH8AdsBywHBAeUB2gHRAfwB/gH8AdwBygHBAdwBygHBAbABrQGsAUEBXAFyAfoB8wHsAdQByQHB + AWoBUQE9CQAB9AH3AfQDAAHcAe8B9wEOAXgBngEtAb0B7wEYAbMB7QEMAWIBgQHSAd8B3gHYAZsBWwH1 + AdoB3wHTAWUB0gH2AawB9gHxAaEB8AHrAZQB6wHnAYgB5QHhAXsB4AGNAS0BjAMAAb4BqQGaARYB6QFf + ARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfAfcB5gHeAfYB4wHa + AdEBwQG2AWMBSQE1CQAB/wGbAWcB/wHiAbUB/wHdAagB/wHVAZUB/wHNAX8B/wHDAWcB/wG4AU4B/wGv + ATYB/wGlASAB/wGeAQ0B/wGZAQABhgFBASAGAAG0AaABkQH8Af4B/AHiAukBXgF1AYQB3wHkAeUB/AH+ + AfwBwgHKAc4BSgFhAXABLgGpAdYBIwE1AUcBwgG+AbkBfwFpAVgGAAGoAcEBqwFBAYIBTAHYAe4B9gEO + AXgBngFcAdEB8wFDAcYB8QEsAb0B7wEYAbMB7QEMAWIBgQLPAdwB5QFwAeQB+wG5AfsB+gG3AfoB9gGw + AfYB8gGlAfMB7QGZAe0B3AFlAdsB+wHnAfoDAAHDAa4BngH/Av4BrAGXAYcBpAGOAX4BnAGFAXQBFgHp + AV8JAAEWAekBXwFsAVIBPgFoAU0BNwHRAcEBtgFjAUkBNQkAAf8BowFxAf8BogFwAf8BoAFuAf8BnQFo + Af8BmAFjAf0BkwFeAfYBjQFYAe0BhQFTAeIBfgFNAdUBdQFHAcgBbQFBAbwBZQE8BgAB3wGdAX0B8QHK + AbcBjwGkAawBhgHTAeUBSwFhAXABpwGSAYkBSgFhAXABYQHBAd4BTAFhAW8BKQG2AekBFQEnATMBEAEs + AToBFwEpATUBeQGBAYcBPQF0AUMBSwGnAWEBEAF9AaUBiwHjAfUBdQHaAfQBXAHQAfMBRAHGAfEBLAG9 + Ae8BGAG0Ae0BDAFiAYEB1AHaAfIB5QFwAeQB+wG5AvsBuQH7AfgBsgH4AdwBZQHbAfsB5wH6BgAByAGy + AaME/wL9Af4B/AH7Af0B+gH4ARYB6QFfARYB6QFfARYB6QFfARYB6QFfARYB6QFfAfkB6wHkAfgB6AHh + AdEBwQG2AWMBSQE1MwAB3wGdAX0B/wHFAaQB5QHJAbkBjwGkAawBgwHhAfYBSwFhAXABegHNAeIBTAFh + AW8BZQHSAfIBRQFdAXEBMgGyAd8BHQGZAcgBGgGIAbMBHwFTAW0BTwGEAVgBTAGsAWQBFQGnAd0BngHr + AfcBiwHjAfUBdQHaAfMBXAHQAfMBQwHGAfEBLAG8Ae8BGAG0Ae0BDAFiAYEB1AHaAfIB3AFlAdsB+wG5 + AfsB5QFwAeQB+wHnAfoJAAHMAbYBpwf/Af0B/AH+AfwB+wH+AfoB+AH9AfcB9QH8AfYB8gH7AfIB7gH6 + AfAB6wH5Ae0B5wH5AeoB5AH4AecB3wFjAUkBNQkAAZ4BhwF4AZcBgAFvAZABeAFnAYkBcAFeAYIBaQFW + AXwBYgFPAXUBWwFHAXABVgFBEgAB3wGdAX0B3wGdAX0B3wGdAX0B2gG6AaoBjwGkAawBgwHhAfYBSwFh + AXABgwHhAfYBPAFZAXMBZQHSAfIBUAHJAe8BOwG/AesBJwGyAeQBHAGjAdYBZAGVAW4BUwG0AWwB2AHu + AfYBFAGqAeEBnQHrAfYBiwHjAfUBdAHaAfQBXAHQAfIBQwHGAfEBLAG8Ae8BGAGzAe0BDAFiAYEB2AHu + AfYB5QFwAeQB+wHnAfoMAAHqAaoBiwHqAaoBiwHqAaoBiwHpAaUBhAHpAZ8BegHnAZcBbgHmAY4BYgHl + AYYBVgHjAX0BSgHjAXYBQAHiAXIBOQHiAXIBOQHiAXIBOQHIAWIBLzwAA/8B5gHrAewBjwGkAawBgwHh + AfYBQAFbAXIBgwHhAfYBdwHbAfQBZQHSAfIBUAHJAe8BOwG/AesBKQG2AekBdgGlAYMBXQHAAXgDAAHY + Ae4B9gEUAaoB4QGeAeoB9gGLAeMB9QF0AdoB8wFcAdEB8wFDAccB8QEXAZgByAHYAe4B9gMAAfsB5wH6 + DwAB6gGqAYsB/wHCAaIB/gHAAZ8B/QG9AZoB/AG5AZYB+wG1AZAB+gGwAYsB+QGrAYQB+AGnAX0B9gGi + AXcB9QGdAXEB9QGZAWoB8wGVAWUBzQFlATEJAAGeAYgBdwGXAYABbwGQAXkBZgGJAXEBXgGCAWkBVgF7 + AWIBTwF1AVsBSAFwAVYBQQFqAVABPAFmAUsBNwFjAUgBMwFjAUgBMxUAAeYB6wHsAY8BpAGsAYMB4QH2 + AYMB4QH2AYMB4QH2AXcB2wH0AWUB0gHyAV8BsgHPAXoBiwGWAa4BwQGmAZMB0wGaBgAB2AHuAfYBFAGq + AeEBnQHrAfYBiwHjAfUBdQHbAfQBFwGYAcgB2AHuAfYYAAHqAaoBiwHqAaoBiwHqAaoBiwHqAaoBiwHq + AaYBhgHpAaEBfwHoAZsBdgHnAZQBbAHmAY4BYgHlAYcBWAHkAYEBTgHkAXsBRgHjAXYBPgHiAXIBOUUA + AeYB6wHsAY8BpAGsAYwBoQGpAYgBnAGlAYMBlgGgAX4BkAGaAXoBiwGWAb8ByAHNAZkBuAGcAa4BwQGm + CQAB2AHuAfYBFAGqAeEBnQHqAfYBFwGYAcgBtwHfAe60AAHYAe4B9gEUAaoB4QHYAe4B9pwAAfgB7gHj + cgAn/yEAAfgB7gHjAZkBMwEAAfgB7gHjbwAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/x4AAfgB7gHj + AbUBYwE1AdgBmwFbAZkBMwEAAfgB7gHjCQABqQHRAeIBXgGIAZ8BWAGAAZkBUgF5AZEBTAFxAYsBRQFp + AYQBPwFiAX4BOgFcAXgBswHAActIAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8DAAP/GAABlwGAAW8BlwGA + AW8B2AGbAVsB/wHNAZkB6QG0AXwB2AGbAVsBmQEzAQAB+AHuAeMGAAFJAbgB3wGDAdsB7wF5AdQB7AFv + Ac8B6gFkAcgB5wFZAcMB5QFPAb0B4gFEAbcB4AE5AVoBdzMAAewB0gHsAXIBJAFxAeYBzAHmDAAD/wMA + A/8D5wMAA+cD/wMAA/8D5wMAA+cD/xgAAZcBgAFvAwAB+AHuAeMB2AGbAVsB/wHNAZkB6QG0AXwB2AGb + AVsBmQEzAQAB+AHuAeMDAAFOAbwB4gGOAeAB8QGFAdsB7wGmAYwBegGbAYEBbgGVAXoBZwFaAcMB5QFQ + Ab4B4wE8AV4BejAAAe0B2AHtAakBUAGoAYABMAF/AXUBJwF1AesB0QHrCQAn/xgAAZcBgAFvBgAB+AHu + AeMB2AGbAVsB/wHNAZkByQFzAUMB+AHuAeMGAAFQAb4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFy + AdEB6gFnAcoB6QFcAcUB5QFAAWIBfS0AAegB0QHoAaoBUAGpAcwBZwHLAX4BLgF+AZYBOAGVAXsBKwF6 + AfAB1QHwBgAD/wPnAwAD5wP/AwAD/wPnAwAD5wP/AwAD/wwAAdgB7gH2CQABlwGAAW8JAAH3Ad4B4gHY + AZsBWwH4Ae4B4wkAAVABvgHjAZ8B6wH2AZkB5gH0AacBiwF6AZwBgQFvAZUBegFnAXMB0QHrAWkBywHp + AUMBZgGBAVIBeQGRAUwBcQGLAUUBaQGEAT8BYgF+AToBXAF4AbMBwAHLBgABqwHwAfcBqwHiAeUBrAHO + AcwBrQG7AbUBrgGnAZwDAAHkAcoB5AGpAVABqAHTAWsB0gHUAW4B0wF/ATABfgGfATwBnwGOATUBjQF9 + AS0BfAYAA/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAA/8JAAHYAe4B9gEOAXgBngHYAe4B9gYAAZcBgAFv + BgAB/QHsAf0BjQEtAYwB9wHeAeIMAAFQAb4B4wGmAe0B9wGgAesB9QGZAecB9AGRAeMB8gGJAd4B8QF/ + AdgB7gF1AdIB6wFHAWwBhgFvAc8B6gFkAcgB5wFZAcMB5QFPAb0B4gFEAbcB4AE5AVoBdxgAAaoBUgGp + AdIBagHRAdUBbwHVAb0BcAG8Ad4BmAHdAY8BRgGOAZ0BPAGcAX4BLgF+BgAD/wPnAwAD5wP/AwAD/wPn + AwAD5wP/AwAD/wYAAdgB7gH2AQ4BeAGeARwBtgHuAQ4BeAGeAdgB7gH2AwABlwGAAW8DAAH9AewB/QGz + ATwBsgHcAXAB2wGNAS0BjAH9AewB/QkAAc8B7QH3AVABvgHjAVABvgHjAU8BvQHiAUkBuAHeAUEBsAHY + ATgBqQHSATEBogHMAWkBvwHZAaYBjAF6AZsBgQFuAZUBegFnAVoBwwHlAVABvgHjATwBXgF6AwABqwHw + AfcBqwHlAekBrALVAawBxAHBAa0BtQGsAa4BpAGYAwABqAFPAacB0gFtAdEBvAFvAbsB7wGlAe4B+wGf + AfoB7wGdAe4BlwFSAZYBfAEuAXwGACf/AwAB2AHuAfYBDgF4AZ4BTwHLAfEBNAHAAe8BLwG+Ae8BDAFi + AYEBlwGAAW8BlwGAAW8BlwGAAW8B2QFsAdgB+gGtAfoB+wGYAfoB3AFwAdsBjQEtAYwB/QHsAf0YAAFQ + Ab4B4wGYAeYB9AGPAeEB8gGFAdwB7wF8AdYB7QFyAdEB6gFnAcoB6QFcAcUB5QFAAWIBfRgAAacBUAGm + AbwBbwG7Ae8BpQHuAfsBmwH6AfsBmAH6AfsBmQH6AecBmAHmAZEBTgGQBgAD/wMAA/8D5wMAA+cD/wMA + A/8D5wMAA+cD/wMAARQBqgHhAYUB4QH1AWsB1wH0AVABywHxATQBwAHwAR0BtQHuAQwBYgGBAdgB7gH2 + AwAB/QHsAf0B0wFlAdIB+gGtAfoB+wGYAfoB3AFwAdsBjQEtAYwB/QHsAf0VAAFQAb4B4wGfAesB9gGZ + AeYB9AGnAYsBegGcAYEBbwGVAXoBZwFzAdEB6wFpAcsB6QFDAWYBgQkAAasB8AH3AawC1QGuAbQBrAGu + AZkBigP9Ac8BiAHPAeIBrwHiAfsBqwH6AfsBmAH6AfsBmAH6AeoBkAHpAc8BiAHPAfQB5gH0BgAD/wMA + A/8DAAP/AwAD/wMAA/8DAAP/AwAD/wMAAdgB7gH2ARQBqgHhAYYB4QH1AWwB1gHzAVABywHyATUBwAHw + ARwBtQHtAQwBYgGBAdgB7gH2AwAB/QHsAf0B0wFlAdIB+gGtAfoB0wFlAdIB/QHsAf0YAAFQAb4B4wGm + Ae0B9wGgAesB9QGZAecB9AGRAeMB8gGJAd4B8QF/AdgB7gF1AdIB6wFHAWwBhhgAAfAB1AHwAc8BiAHP + Ae4BvgHuAfsBrgH6AewBkQHrAc8BiAHPAfMB4AHyCQAD/wMAA/8D5wMAA+cD/wMAA/8D5wMAA+cD/wYA + AdgB7gH2ARQBqgHhAYUB4AH1AWwB1gHzAVABywHyATQBwAHvAR0BtQHtAQwBYgGBAdgB7gH2AwAB/QHs + Af0B0wFlAdIB/QHsAf0bAAHPAe0B9wFQAb4B4wFQAb4B4wFPAb0B4gFJAbgB3gFBAbAB2AE4AakB0gEx + AaIBzAGpAdEB4hsAAfIB2wHyAc8BiAHPAeMBrAHjAc8BiAHPAfMB4wHzDAAn/wkAAdgB7gH2ARQBqgHh + AYYB4QH0AWsB1gH0AVABywHxARcBmAHIAdgB7gH2CQAB/QHsAf1XAAHyAdsB8gHPAYgBzwHwAeMB8EIA + AdgB7gH2ARQBqgHhAYUB4QH1ARcBmAHIAdgB7gH2aQAB/gH7Af5IAAHYAe4B9gEUAaoB4QHYAe4B9qsA + AdMBzgHLAaYBmgGVAYYBdwFvAXcBZwFeAXQBYwFaAXMBYgFZAXMBYgFZAXMBYgFZAXMBYgFZAXMBYgFZ + AXMBYgFZAXQBYwFaAXkBaQFgAYoBfAF0AawBogGdAdkB0wHSkAABrgF7AW4B1AGnAZcB1wGpAZsB1AGn + AZkB0wGlAZgB0AGjAZgBywGgAZkByQGeAZcBxgGcAZYBxAGZAZUBwgGXAZQBugGTAY4BtwGQAYsBogGC + AX0BkAGCAXsBzAHGAcRpAAP/AwAG/wkABv8DAAP/BgABtQGCAXIB8wHVAcAB+wHgAckB+wHfAcYB+wHd + AcMB+wHbAcEB+gHaAb0B+gHYAbsB+wHXAbgB+gHUAbUB+QHTAbIB+gHRAa8B9AHHAaoBwAGbAYkBhwF4 + AXEBygHEAcBsAAPuA4gDMwkAAzMDiAPuCQABuwGIAXUB9AHZAcQB/AHjAc0B+wHhAcoB+wHfAcgB+wHd + AcUB+wHcAcIB+wHaAb8B+wHZAbwB+gHWAbkB+gHVAbYB+gHUAbMB9QHJAa0BwQGcAYoBhgF3AXAByAHC + AcAVAAHxAdsBxQGZATMBAAHeAb0BrBsAAcgBvQG1AYgBcAFdAYMBagFYAX4BZQFSAXoBYAFOAXUBXAFI + AXEBVwFDAW0BUwE+AWoBTwE7AWcBSwE3AboBrgGkEgADiAMKA+gJAAPoAwoDiAkAAcIBjwF5AfUB3AHJ + AfwB5QHSAfwB4wHPAfwB4gHMAfwB4AHJAfsB3gHGAfsB3AHEAfsB2wHAAfoB2gG9AfsB2AG6AfsB1gG3 + AfYBywGxAcEBnQGMAYYBdwFwAcgBwgHAEgAB8AHZAcIB1wGaAVoBmQEzAQABmQEzAQAB4QHEAbUYAAGv + AZYBhwHpAeAB3AHjAdoB0wHeAdMBzAHaAcwBxAHVAcUBvAHQAb4BtQHLAbgBrAHGAbEBpgHDAasBnwFo + AU4BOQ8AA/8DTQMKDwADCgNNA/8GAAHIAZUBfAH2Ad4BzQH8AecB1gH8AeUB0wH8AeQB0AH8AeIBzQH7 + AeEBygH7AeAByAH7Ad4BxAH6AdwBwQH7AdoBvwH6AdgBvAH1Ac4BtQHBAZ8BjwGGAXcBcAHIAcIBwA8A + Ae8B2AG/AdcBmgFaAdgBmwFbAZkBMwEAAZkBMwEAAZkBMwEAAeEBxAG1FQABswGaAYsB7gHoAeUB6QHh + AdwB4wHZAdQB3wHSAcwB2gHMAcQB1QHFAbwB0AG+AbUBzAG4Aa0BxgGxAaUBbQFTAT4MAAb/A00DCg8A + AwoDTQb/AwABzwGcAYAB9gHhAdEB/QHqAdsB/AHoAdgB/AHnAdUB/AHlAdIB/AHkAc4B/AHiAcwB+wHg + AckB+wHeAcYB+wHdAcMB+gHbAcAB9gHQAbgBwgGgAZABhgF3AXAByAHCAcAPAAHYAZsBXAHYAZsBWwHY + AZsBWwGZATMBAAGZATMBAAGZATMBAAGZATMBAAHlAcsBvhIAAbcBngGQAfMB7wHsAe4B6AHkAegB4AHc + AX4BZQFSAW4BVAFAAWMBSAEzAdUBxQG8AdABvgG0AcsBuAGsAXMBWgFGCQAD/wMAA/gDCgO/DwADvwMK + A/gGAAHVAaIBgwH4AeUB1AH9Ae0B3gH8AesB3AH8AekB2QH8AecB1gH8AeYB0wH8AeQB0QH7AeIBzQH7 + AeEBygH7AeABxwH7Ad4BxAH3AdMBvAHCAaIBkwGGAXcBcAHIAcIBwA8AAdgBmwFbAdgBmwFbAekBtAF8 + AfwB1gGvAbUBYwE1AZkBMwEAAZkBMwEAAZkBMwEAAf0B+wH6DwABvAGjAZYB+AH2AfQB8wHvAe0B7wHo + AeQB6QHgAdwB4wHZAdMB3wHTAcsB2gHMAcUB1QHFAbwB0AG+AbUBegFgAU4JAAb/AwoDZBUAA2QDCgP/ + AwAB3AGpAYcB+gHnAdkB/QHvAeIB/QHtAeAB/QHsAd0B/QHqAdoB/QHoAdcB/AHmAdUB/AHlAdEB+wHj + Ac4B/AHiAcsB+wHgAcgB9wHUAb8BwgGiAZQBhgF3AXAByAHCAcAPAAHYAZsBWwHqAbcBggH7AdgBsgH+ + AdEBowH7AdgBsgGvAVcBKAGZATMBAAGZATMTAAHBAakBnQH8AvsB+AH2AvQB7wHsAX4BZgFSAW4BVAE/ + AWMBSAEzAd4B0wHMAdoBzAHEAdUBxQG8AYABaAFVCQAD/wMAA/gDMwO6DwADugMzA/gGAAHcAakBhwH5 + AeoB3gH9AfIB5wH9AfAB5AH9Ae4B4QH9AewB3gH8AesB2wH9AekB2QH9AecB1gH8AeUB0wH8AeQB0AH8 + AeIBzQH4AdcCwwGkAZYBhgF3AXAByAHCAcAPAAHnAbMBfAHxAcMBkQH+Ac8BnQH/Ac0BmQH+AdABnwH7 + AdgBsgGpAU4BHgGZATMTAAHFAa8BowP/AfwC+wH5AfYB9QH0Ae8B7AHuAecB5AHpAeEB2wHkAdkB0wHe + AdIBzAHaAcwBxQGIAXABXQ8AA/8DTQMzDwADMwNNA/8GAAHcAakBhwH5AewB4AH+AfQB6wH9AfIB6AH9 + AfEB5gH9Ae4B4wH9Ae0B4AH9AewB3gH8AeoB2gH8AegB1wH8AecB1AH8AeUB0QH4AdkBxwHFAacBmgGL + AXwBdQHLAcUBwQ8AAfsB6AHVAeUBsgF7AfQBwAGLAf8BzQGZAf8BzQGZAf4B0AGhAfIByQGdAbABWgEp + EgAByQG0AaoG/wH8AfsB+gH4AfUB9AHzAe8B7AHuAecB5QHoAeAB3AHjAdkB1AHfAdMBzAGOAXcBZg8A + A/8DTQMzDwADMwNNA/8GAAHcAakBhwH6Ae4B5QH+AfYB7wH9AfQB7QH9AfMB6gH9AfEB5wH9AfAB5AH9 + Ae4B4gH9AewB3gH9AeoB2wH8AekB2QH8AecB1gH4AdgBxwHMAasBngGaAYwBhAHSAcwByxIAAfoB5wHT + AeQBsAF5AfYBxAGQAf8BzQGZAfMBwgGOAeMBsAF5AfkB5gHSEgAB5gHdAdgByQG0AakBxAGtAaIBvwGo + AZsBuwGiAZMBtQGcAY4BsgGYAYkBrQGUAYQBqAGPAX8BowGKAXkByAG9AbUSAAOIAzMD3gkAA94DMwOI + CQAB3AGpAYcB+wHwAekB/gH5AfQB/gH3AfEB/gH1Ae4B/gHzAesB/gHyAegB/QHxAeYB/QHvAeIB/wHY + Ac8B/wHVAcwB+QHAAbcB1AGeAZQBrwGQAYcBtgGsAaYB4AHcAdkVAAH5AeMBzQHjAa8BeAHuAb0BigHj + AbABeQH6Ae0B3kgAA+4DiAMzCQADMwOIA+4JAAHcAakBhwH7AfMB7QH/AfwB+AH+AfoB9QH+AfgB8wH+ + AfYB8AH+AfUB7QH9AfMB6wH9AfEB5wH4Aa8BWAH3AaYBQwHpAZoBQgG7AYwBXwGrAZ0BlgHWAc4BywHu + AusYAAH4AeYB0gHlAbIBfQH7AfEB50gAA/8DAAb/CQAG/wMAA/8GAAHcAakBhwH7AfQB8AH/Af4B/AH/ + AfwB+QH/AfsB9wH+AfkB9AH+AfgB8AH+AfYB7gH9AfMB7AHgAbIBlAHnAbEBewGvAYwBawGjAZIBhgHL + AcIBvQHrAegB5QL1AfOQAAHcAakBhwHcAakBhwHcAakBhwHcAakBhwHcAakBhwHcAakBhwHdAaoBhwHd + AaoBiAHWAaMBhAHbAagBhwHxAd4B0QH0AfMB8mwAAUIBTQE+BwABPgMAASgDAAFAAwABwAMAAQEBAAEB + BgABBhYAA/8BAAHgAQcB4AEHAeABBwIAAcABAwHAAQMBwAEDAgABgAEBAYABAQGAAQFSAAGAAQEBgAEB + AYABAQIAAcABAwHAAQMBwAEDAgAB4AEHAeABBwHgAQcCAAz/AYABAAHAAQME/wGAAQABwAEDAeABDwHA + AQEBgAEAAcABAwHgAQ8BwAEBAYABAAHAAQMB4AEPAcABAQGAAQABwAEDAeABDwHAAQEBgAEAAcABAwHg + AQ8BwAEBAYABAAHAAQMB4AEPAfABBwGAAQABwAEDAgAB8AEHAYABAAHAAQMBBgEgAfABBwGAAQABwAED + AQcB4AHwAQcBgAEAAcABAwEHAeAB8AEHAYABAAHAAQME/wGAAQABwAEHBP8BgAEAAcABDwT/AYABAAL/ + AQABHwEAAQMB8AEPAfABDwEAAR8BAAEDAcABAwHAAQMEAAGAAQEBgAEBBAABgAEBAYARAAHwBwAB8AcA + AfAHAAHwBwAB8AEAAfAFAAHwAQAB8AUAAfABAAHwAQABgAEBAYABAQHwAQAB8AEAAYABAQGAAQEB8AEB + AfABAQHAAQMBwAEDAfABAwHwAQMB8AEPAfABDwT/AcAH/wHAAX8C/wGAAT8C/wHAAT8C/wGAAT8B4AED + AcABHwIAAYABPwHgAQMB4AEPAgABgAE/AeABAwHwAQcCAAGAAQAB4AEDAQABAwIAAYABAAHgAQMBAAEB + AgABgAEAAeABAwQAAf4BAAHgAQMEAAH+AQAB4AEDBAAB/gEAAeABAwQAAf4BAAL/AQABAQIABP8BAAET + AgAE/wEAAR8G/wEAAR8C/wEAAfcCqgH+AT8C/wEAAeMBAAEBAfgBHwGAAQEBAAHBAYABAAHwAQ8BgAEB + AwABAQHAAQcBgAEBAQABQAGAAgABAwGAAQEBAAFgAQABAQEAAQEBgAEBARABcQGAAwABgAEBAYEBYwEA + AQECAAGAAQEBgQFBAYADAAGAAQEBgAIAAQECAAGAAQEBAAFAAYABAAGAAQABgAEBAYABIAEAAQEBwAEA + AYABAQHAAREBgAEAAeABAAGAAQEB4AE7AVUBQAHwAQMBgAEBAfABfwH/AfAB+AEPAYABAQH4Av8B+QH8 + AT8G/wEAAf8BAAH/AfgBAQL/AQAB/wEAAf8B8AEBAcABBwEAAf8BAAH/AYABAQHAAQcDAAH/AQABAQHA + AQcDAAGPAQABAQHAAQcDAAEHAQABAQHAAQcCAAEYAQMBAAEBAcABBwIAAYABAQEAAQEBwAEHAeABAAGA + AgABAQHAAQcB4AEAAf4BAQEAAQEBwAEHAeABAAH+AQEBAAEBAcABBwHgAQAB/gEBAQABAQHAAQcB4AEA + Af8BAQEAAR8C/wHgAQAB/wGDAQABHwL/AeABAAH/AccE/wHgAQAC/wHzAfcB/wGfAQAD/wHBAeMB/gEP + AQAC/wGBAYABwQH8AQcBAAL/AYEBgAEAAfwBBwEAAv8BgQGAAUABAAEHAQABjwH+AQEBgAFgAQABBwEA + AQcBAAEBAcEBcQEAAQ8BAAEDAQABgQHjAWMBAAEfAQACAQGBAcEBQQEAAQEB/gEAAQEB/wGAAgABAQH+ + AQEBAAFAAQABQAEAAQEB/gEBAgABgAEgAfwBAQH+AQEBAwEAAcABEQH8AQEB/wEBAf8BwAHgATsB/AEB + Af8BgwH/AcAB8AF/AfwBAQH/AccB/wHAAfgG/wHAAecH/wGDAf8B8AEABP8BAQH/AeABAAT/AQEB/wHA + AQABwAEDAcABAwEBAf8BgAEABP8BAAEPAgABwAEHAcABBwGAAQsBgAEABP8BhAEgAYABAAHAAQMBwAED + ARwBOAGAAQABwAEDAcABAwEsATQBgAEAAcABAwHAAQMBHAE4AYABAAT/AYABMQGAAQABwAE/AcABPwHA + AQMBgAEHBP8B4AEHAYMBhwHAAQMBwAEDAeABBwHDBf8B4AEHAeMG/wH3B/8B4wL/AQABAwH/Ae8B/wHD + Af8B4AEAAQEB/wHHAfsBgAGPAcACAAH/AYMB8QEAAQgDAAH3AQEB4AIAAQECAAHiAQABwAEBAQABNwIA + AcEBAAGAAQMBAAEvAgABwAEAAYABBwEPAd8DAAFBAYABDwH3AaECAAGAASMBwAEHAfgBYQIAAcABdwHg + AQ8B+AFhAgAB4AH/AfABHwH4AWECAAHxAf8B+AE/AfgBYQGAAQAB+wH/AfwBfwH4AWMBwAEQAv8B/gH/ + AfwBfwHvB/8B+AL/Af4C/wEAAQ8B8AF/AYABAAL/AQABDwHgAT8BgAEAAcABAwEAAQ8BwAEXAYABAAL/ + AQABDwHgAQMBgAEAAcABBwEAAQ8B4AEBAYABAAL/AQABDwHAAQABgAEBAcABAwEAAQ4BgAEAAYABAQHA + AQMBAAEMAgABgAEBAcABAwMAAQEBgAEBAv8DAAEDAYABAQHAAT8DAAEHAYABAQL/AeABAAGAAS8BgAEB + AcABAwH4AQABwAF/AYABAQL/AfwBAAHgB/8B8Qb/Ae8E/wHAAQEB/wHHBP8BwAEBAf8BgwGAAT8C/wHA + AQEB/gEBAYABPwH/AeMBwAEBAf4CgAE/Af8BwQHAAQEB/gHBAYABPwH/AYABwAEBAe4B4wGAAQABwQEA + AcABAQHGAccBgAEAAf8BAAHAAQEBggGDAYABAAGBAQABwAEBAQABAQH+AQAB/wEAAcABAQEAAYAB/gEA + AeABAAHAAQEBAAFBAf4BAAH/AQEBwAEBAYABIwH+AQAB/wGDAcABAQHAAXcD/wHHAv8B4AT/Ae8C/wHx + B/8CAAb/AgAE/wHpAcsCAAT/AfEBxwIAAf4BPwHgAQMB8QHHAgAB/AEfAeABAwLjAgAB+AEPAeABAwHD + AeECAAH4AQcB4AEDAaMB4wIAAfgBAwHgAQMBhwHxAgAB+AEHAeABAwGjAeMCAAH4AQcB4AEDAuMCAAH4 + AQcB4AEDAuMCAAH8AQcB4AEDAfEBxwIAAf4BDwL/AfEBxwIAAf8BHwL/AekBywIABv8BAAEPBP8L + 221, 490 diff --git a/FormEdit.resx b/FormEdit.resx index 271de3c9..b4526942 100644 --- a/FormEdit.resx +++ b/FormEdit.resx @@ -150,7 +150,7 @@ 196, 22 - &Model View + &Model View Definition Adds a model view definition to the project (in Section 4) for specifying a set of exchanges and use definitions within scope of a domain. @@ -209,7 +209,7 @@ 196, 22 - Assign Model &View... + &Data Requirement... False @@ -237,7 +237,10 @@ 196, 22 - &Concept + &Value Requirement... + + + MiddleLeft Adds a use definition to an entity based on a template. (This is an mvdXML ConceptLeafNode.) @@ -327,7 +330,7 @@ 196, 22 - Concept &Template + &Template Adds a concept template to the documentation (in Section 4), which may be instantiated as use definitions at applicable entities. @@ -335,6 +338,73 @@ False + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFNSURBVDhPY8AF3jy9+f/PFpb/dy/s+A8VIh7ANP8/k/Z/ + dY0G3IB/L//+v5594z+IhgphB8iaFxQpwhWDNP9f9h9syJ+rf3Ab8m4tD1gziJ6cLoViwDOnJ2BDzsqf + xm0AsuaL+2ajGPAnDqIZrwFtbW3/W6OF/p/Y0P7fKyAMrhDkd5hmnAYga4ABmBiI/n34N1gzPAyQQxab + ZhjAKYcesi8/vPxv2aT9X69O7b96lRKYj+wCsCZkgB6yIM2Tr3f87zhb9z9zcwrcEKhyTEPQQxak2LhJ + 53/8+qj/8Suj//vP8f0vUy75/8OH7/+LZz2H4+fPP0MMwhayIEM08tX/ywCjEYRBfJCm6fv+/F944Pf/ + po2//xuGLfr/5MkniCEYIYsFPHz44b+q79z/SXN//Y9oewjGID5Umjhw+vRTsCYY3r37LmkG0AAwMAAA + tqlSvGZSt54AAAAASUVORK5CYII= + + + + Magenta + + + 196, 22 + + + S&chema + + + False + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABbSURBVDhPzY5BCgAxCAP9/0d9xhY1ktLDovbSuaRkkEbe + 4RuA0wCFC1X1t6Xx0xMUKapJdjFe0AWngRWNnzPJIapJrLhe0AWnAQoXjSUERYpqkl2MF3TB6Q0iCwgM + HTn+NhLLAAAAAElFTkSuQmCC + + + + Magenta + + + 196, 22 + + + &Defined Type + + + False + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEnSURBVDhPYxjm4Pvb8/8f7wsA40d7/f/f2+H5/8YGx/+X + Vlr8P7PI8P+jiyv/Q5ViByCN398u+//19YL/X57P/P/p8cT/H+91/n93o/7/60ul/9ty3Akb8O31/P9f + ns38X9W9/H9+45z/6VVT/7++WPz/5enM/41pzoQN+PJsxv9PD/v/v7/T+v/ttZr/ry4W/X95Kv3/06Mx + /2uTHCAGEPLrzf2Z/6t6lv3Pa5wNdsHTw1FgtVVxNhADQBxCfn11Pv//8xMpQM2RYEsebHf5Xx5liTCA + kF8nVgb97y70+d+S6fq/Lsn+f0WM1f/TBzYjDCDKr7jAoz1+/z8+6Pv//nYrfr/iAveBgfb+dvP/N1cq + 8fsVFwClqPkdcf9nNkTg9+sgBAwMANsQU5TL62k1AAAAAElFTkSuQmCC + + + + Magenta + + + 196, 22 + + + E&numeration Type + + + False + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -359,6 +429,74 @@ False + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD+SURBVDhPYxic4Nu7G/+hTNIBSPPDVSL/yTIEpvnr3Zr/ + J2aIk2YITPOXe3X/P1/L+P/pTBBWQx6/+4FpKNzme/X/P1/P+v/pbMj/j0fs/r/fo/W/MYkHbghIc/Ts + G/9RDIFrvt8EtDnn/6dzYf8/HHEAatbBqnnm2f//nYtPohoCAvMq+P5/Oh/x/+Mxp//v9+qBNTdPWfu/ + sGX+//SqqXDNINx5+CemISCbQIa836eP02aw5iM//xdu+/g/csXL/wzGM1FdATMEl+YOqOaoFS/AmjG8 + AQIwzTAAUmSavBXsbGSbsWrGBWCGRK4kQzMMgDWRqxkGKNKMHTAwAAA9wjHTfNR4mQAAAABJRU5ErkJg + gg== + + + + Magenta + + + 196, 22 + + + &Select Type + + + False + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEkSURBVDhPY0AH397d+P9wlch/EA0VIh7ANH992Pr/xAxx + 0gyBaf7ysO3/l2vZ/z+eDsBqyN83fzENhdv8oPX/52s5/z8BNb8/YPL/7VbZ/41JPHBDQJovpV7+j2II + XDPQZpjmDwdMgZplsGr+tfYXqiEwP3+5DnH2B6DN73DYDNL8a8bv/7cL7vzv0e2FGAJSNK+CD6jZH+zs + 9/v0wZrzG6bD8Y2cm9g1wwDMkHfbZMA0zGaQZhANUrzJZjN2zTAAMwSmGQRgBoAASBNI86N73zE1wwCy + ZhBANgAEQJqjZ9/4//jdD9yGIANkA0CaQJpnnv3/37n4JHGGwAxA1lyz5SWYzWA8k7AhIANAmCzNyACk + 2DR5K3maYQCsiVzNMICpmYEBAH1DheFtxXWhAAAAAElFTkSuQmCC + + + + Magenta + + + 196, 22 + + + &Entity + + + False + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADwSURBVDhPYxj84NKzH/9rNz39//zj7/9QIeLB2cc//1es + f/y/a++7/5UbHv+/9/YX8YZcfv4LqOnJ/wlHvv2fefb//75Dn8GGXHr2k7AhV1/8/l8NdHb3gS9gzSC8 + 8MK//3NPfvqvGbWBsAE1m5//n3j44/+55/+BNc8Hat504/d/Ob+V/xmMZxI2IHr2jf9N21+BNS2+CNGs + Eb4eoplYA0C4ZsvL/+uv/flvmrwVoRmIf/3+i9+QGKgBIIysEYT3nX5K2AX7b7z/HzXrOoYBW488JKwZ + Bg7d/AA2hCzNMHD09kew5jV775GueagABgYAPyPNIjxmaVoAAAAASUVORK5CYII= + + + + Magenta + + + 196, 22 + + + &Attribute... + + + False + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 @@ -552,6 +690,23 @@ &Bibliography Reference + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAGpJREFUOE+djlEKQCEIBDub9z9Pvz0KdhAxeSkMYbsNjT1zztUFgZmdi9cTQRcE + Mv6l/MEORbZ7EPiweiCUIYihF8TdgyALK9RHEMMbsYsgCyvURxDDG7GLIAsr1EfQBYGMryeCLkfQnzE+ + Nhr5FNl/PegAAAAASUVORK5CYII= + + + + 196, 22 + + + &Publication + + + False + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 @@ -636,7 +791,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADg - jwAAAk1TRnQBSQFMAgEBLwEAAbwBBQG8AQUBEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA + jwAAAk1TRnQBSQFMAgEBLwEAASABBgEgAQYBEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA AwABwAMAAQEBAAEYBgABkBsAA/4D/AP2A/EG7wPxA/YD/AP+EgAD/gP8A/YD8QbvA/ED9gP8A/4SAAP+ A/wD9gPxBu8D8QP2A/wD/j8AA/4D9gPiA8UDqwakA6sDxQPiA/YD/gwAA/4D9gPiA8UDqwakA6sDxQPi A/YD/gwAA/4D9gPiA8UDqwakA6sDxQPiA/YD/jkAA/4D8wG2AcIBqwFqAaIBPgFQAa8BEAFQAa8BDwFQ @@ -1268,7 +1423,7 @@ treeView - IfcDoc.ThemedTreeView, IfcDoc, Version=10.1.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.ThemedTreeView, IfcDoc, Version=11.2.0.0, Culture=neutral, PublicKeyToken=null splitContainerRoot.Panel1 @@ -1325,7 +1480,7 @@ ctlConcept - IfcDoc.CtlConcept, IfcDoc, Version=10.1.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlConcept, IfcDoc, Version=11.2.0.0, Culture=neutral, PublicKeyToken=null splitContainerWorkspace.Panel1 @@ -1361,7 +1516,7 @@ ctlExpressG - IfcDoc.CtlExpressG, IfcDoc, Version=10.1.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlExpressG, IfcDoc, Version=11.2.0.0, Culture=neutral, PublicKeyToken=null splitContainerWorkspace.Panel1 @@ -1369,36 +1524,6 @@ 1 - - True - - - Fill - - - 0, 0 - - - 672, 256 - - - 0 - - - ctlCheckGrid1 - - - ctlCheckGrid - - - IfcDoc.CtlCheckGrid, IfcDoc, Version=10.1.0.0, Culture=neutral, PublicKeyToken=null - - - splitContainerWorkspace.Panel1 - - - 2 - Fill @@ -1421,13 +1546,13 @@ ctlInheritance - IfcDoc.CtlInheritance, IfcDoc, Version=10.1.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlInheritance, IfcDoc, Version=11.2.0.0, Culture=neutral, PublicKeyToken=null splitContainerWorkspace.Panel1 - 3 + 2 splitContainerWorkspace.Panel1 @@ -1457,7 +1582,7 @@ ctlProperties - IfcDoc.CtlProperties, IfcDoc, Version=10.1.0.0, Culture=neutral, PublicKeyToken=null + IfcDoc.CtlProperties, IfcDoc, Version=11.2.0.0, Culture=neutral, PublicKeyToken=null splitContainerWorkspace.Panel2 @@ -1561,6 +1686,36 @@ 1 + + True + + + Fill + + + 0, 0 + + + 672, 513 + + + 0 + + + ctlCheckGrid1 + + + ctlCheckGrid + + + IfcDoc.CtlCheckGrid, IfcDoc, Version=11.2.0.0, Culture=neutral, PublicKeyToken=null + + + panelWorkspace + + + 2 + Fill @@ -1589,7 +1744,7 @@ panelWorkspace - 2 + 3 Fill @@ -1662,7 +1817,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABy - CwAAAk1TRnQBSQFMAgEBBAEAAYgBAQGIAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CwAAAk1TRnQBSQFMAgEBBAEAAewBAQHsAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -2441,15 +2596,6 @@ &Configure &Schema... - - False - - - 181, 22 - - - &Build Concepts... - 199, 22 @@ -2462,19 +2608,32 @@ &Edit - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAHBJREFUOE/Vj0EOgCAMBH0bX8P3yNPES6+YmgzBhggiFw+TLLQ7gUVE0hcugXNu - iPmCuB9ddAvCFvKs3CE/CmpldsjNFyjer3nODrkpoFxKqgJbVMqynjXrt8g3ARcWygrlVwIKFuY/EdTu - YZ5gHEknSSvJwSwsWUsAAAAASUVORK5CYII= + wwAADsMBx2+oZAAAAFdJREFUOE9j+Pbt239KMNgAJycnsjD1Dfjw/iNRGK8B69eth/NBGMQnyQAYjawY + mQ8TA2HaGECxF4jBRBsAE0fGJBuAjQ9TT3sX4MI4DSAVU88A8vG3/wCG/9+rByuxvAAAAABJRU5ErkJg + gg== - - 147, 22 + + 170, 22 - - &Web View + + &Diagram View + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + wwAADsMBx2+oZAAAAFNJREFUOE+tzkEKwDAIAEHf5v//0uTitaVCQEpl22hgMYc4RMzsrOSAqm7VD4xj + evH+FgIUAoQhQKXAQr7Mu/4fxAdx4RkCFAKEpcDf+oBKUjsiF42tyFGIhio0AAAAAElFTkSuQmCC + + + + 170, 22 + + + &Requirement View @@ -2484,24 +2643,24 @@ - 147, 22 + 170, 22 &Text View - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO - wwAADsMBx2+oZAAAAFdJREFUOE9j+Pbt239KMNgAJycnsjD1Dfjw/iNRGK8B69eth/NBGMQnyQAYjawY - mQ8TA2HaGECxF4jBRBsAE0fGJBuAjQ9TT3sX4MI4DSAVU88A8vG3/wCG/9+rByuxvAAAAABJRU5ErkJg - gg== + wwAADsMBx2+oZAAAAHBJREFUOE/Vj0EOgCAMBH0bX8P3yNPES6+YmgzBhggiFw+TLLQ7gUVE0hcugXNu + iPmCuB9ddAvCFvKs3CE/CmpldsjNFyjer3nODrkpoFxKqgJbVMqynjXrt8g3ARcWygrlVwIKFuY/EdTu + YZ5gHEknSSvJwSwsWUsAAAAASUVORK5CYII= - - 147, 22 + + 170, 22 - - &Diagram View + + &Web View 44, 20 @@ -2570,27 +2729,6 @@ 193, 6 - - - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAB3klE - QVQ4T51STUsbURR9f6EmYKzLFruuRGMX3RUa3bvron7E/yD4C7pxoaXQRVtFBD+yGEPUVA1GzaRFo5nS - RkOskFBJhUSI+JFMTE7vffYNQ4kaOnCY++5959x7z4zQNpLQNlPQIgcIRvYRiKQxH/6G2VACE4FtCXrE - yPCR9uTxKBjeF4kanZ9yXgQjKb4gn2q1hrJZw2WpiuL5NfJFE+7uQS4JJvKbiOttj96wyDs+i4Xwdy7g - msmVGmUEkSsoFCvY+5FBZ4+Py4JB5JCv/0BOwTHnxNxn44ZsViWZkSfy74IJPZ6Gu6ffEnj+bFeRkyon - Jhe+wqTOF3/HZoHcaRnZkxLCehId3iFLgIga4YM6M8SEf1Pu3IiZ3L2z/QvxbALvZ1Zl50bMrCvwdmpF - 7qzMPDMMRB82If2q91Yz7RBjkyEyrAxlpt7ShEI8gZjLgeziSl0z7RDjnxap2Ae7mYWjX4iRUCYar2um - HVagzGRy1OVEdovJZfw8vkIwbNw+gQqUmXqzE7HWB+SDg9ZxYD9zCf/Szv0TKDNzp6bVmcnG4QWmtZj1 - S/8LK1Bm6vFDrNHOPLZ/eVuSP85t0FcYoGt3CCgzPd5BOa6HwHu7vX3o6vbB8/I1XbtD4P8A8QcEHP6b - qXjzjAAAAABJRU5ErkJggg== - - - - 196, 22 - - - &Change Log... - 193, 6 @@ -2613,7 +2751,7 @@ 196, 22 - &Example + &Example... 193, 6 @@ -3129,16 +3267,16 @@ Fuchsia - 171, 22 + 219, 22 - Concept &Template + &Template Adds a concept template to the documentation (in Section 4), which may be instantiated as use definitions at applicable entities. - 168, 6 + 216, 6 @@ -3159,10 +3297,10 @@ Fuchsia - 171, 22 + 219, 22 - &Model View + &Model View Definition Adds a model view definition to the project (in Section 4) for specifying a set of exchanges and use definitions within scope of a domain. @@ -3185,10 +3323,10 @@ Fuchsia - 171, 22 + 219, 22 - &Exchange + &Exchange Requirement Adds an exchange definition to a model view definition for defining a particular data exchange scenario. @@ -3211,10 +3349,10 @@ - 171, 22 + 219, 22 - Concept &Root + &Data Requirement... @@ -3236,14 +3374,32 @@ Fuchsia - 171, 22 + 219, 22 - &Concept... + &Value Requirement... Adds a use definition to an entity based on a template. (This is an mvdXML ConceptLeafNode.) + + False + + + 219, 22 + + + Concept for Property Sets... + + + False + + + 219, 22 + + + Concept for Quantity Sets... + 191, 22 @@ -3267,6 +3423,27 @@ &Publication + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 + JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAAAr2AAAK9gHCr3ADAAAB3klE + QVQ4T51STUsbURR9f6EmYKzLFruuRGMX3RUa3bvron7E/yD4C7pxoaXQRVtFBD+yGEPUVA1GzaRFo5nS + RkOskFBJhUSI+JFMTE7vffYNQ4kaOnCY++5959x7z4zQNpLQNlPQIgcIRvYRiKQxH/6G2VACE4FtCXrE + yPCR9uTxKBjeF4kanZ9yXgQjKb4gn2q1hrJZw2WpiuL5NfJFE+7uQS4JJvKbiOttj96wyDs+i4Xwdy7g + msmVGmUEkSsoFCvY+5FBZ4+Py4JB5JCv/0BOwTHnxNxn44ZsViWZkSfy74IJPZ6Gu6ffEnj+bFeRkyon + Jhe+wqTOF3/HZoHcaRnZkxLCehId3iFLgIga4YM6M8SEf1Pu3IiZ3L2z/QvxbALvZ1Zl50bMrCvwdmpF + 7qzMPDMMRB82If2q91Yz7RBjkyEyrAxlpt7ShEI8gZjLgeziSl0z7RDjnxap2Ae7mYWjX4iRUCYar2um + HVagzGRy1OVEdovJZfw8vkIwbNw+gQqUmXqzE7HWB+SDg9ZxYD9zCf/Szv0TKDNzp6bVmcnG4QWmtZj1 + S/8LK1Bm6vFDrNHOPLZ/eVuSP85t0FcYoGt3CCgzPd5BOa6HwHu7vX3o6vbB8/I1XbtD4P8A8QcEHP6b + qXjzjAAAAABJRU5ErkJggg== + + + + 191, 22 + + + &Change Log... + 48, 20 @@ -3635,18 +3812,6 @@ Generate &Module... - - 232, 6 - - - False - - - 235, 22 - - - Upload to Data Dictionary... - 47, 20 @@ -4044,22 +4209,39 @@ 6, 25 - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABwSURBVDhP1Y9BDoAgDAR9G1/D98jTxEuvmJoMwYYIIhcP - kyy0O4FFRNIXLoFzboj5grgfXXQLwhbyrNwhPwpqZXbIzRco3q95zg65KaBcSqoCW1TKsp4167fINwEX - FsoK5VcCChbmPxHU7mGeYBxJJ0krycEsLFlLAAAAAElFTkSuQmCC + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABXSURBVDhPY/j27dt/SjDYACcnJ7Iw9Q348P4jURivAevX + rYfzQRjEJ8kAGI2sGJkPEwNh2hhAsReIwUQbABNHxiQbgI0PU097F+DCOA0gFVPPAPLxt/8Ahv/fqwcr + sbwAAAAASUVORK5CYII= - + Magenta - + 23, 22 - - View Preview + + View Diagram + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABTSURBVDhPrc5BCsAwCABB3+b//9Lk4rWlQkBKZdtoYDGH + OETM7KzkgKpu1Q+MY3rx/hYCFAKEIUClwEK+zLv+H8QHceEZAhQChKXA3/qASlI7IheNrchRiIYqNAAA + AABJRU5ErkJggg== + + + + Magenta + + + 23, 22 + + + Requirement View @@ -4077,22 +4259,22 @@ View Text - + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABXSURBVDhPY/j27dt/SjDYACcnJ7Iw9Q348P4jURivAevX - rYfzQRjEJ8kAGI2sGJkPEwNh2hhAsReIwUQbABNHxiQbgI0PU097F+DCOA0gFVPPAPLxt/8Ahv/fqwcr - sbwAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABwSURBVDhP1Y9BDoAgDAR9G1/D98jTxEuvmJoMwYYIIhcP + kyy0O4FFRNIXLoFzboj5grgfXXQLwhbyrNwhPwpqZXbIzRco3q95zg65KaBcSqoCW1TKsp4167fINwEX + FsoK5VcCChbmPxHU7mGeYBxJJ0krycEsLFlLAAAAAElFTkSuQmCC - + Magenta - + 23, 22 - - View Diagram + + View Preview 6, 25 @@ -4392,7 +4574,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABO - CwAAAk1TRnQBSQFMAgEBBQEAASgBBAEoAQQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CwAAAk1TRnQBSQFMAgEBBQEAAYwBBAGMAQQBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -4461,6 +4643,15 @@ Configure model view from EXPRESS schema + + 778, 95 + + + IFC Files (*.ifc)|*.ifc|All Files (*.*)|*.* + + + Select example files... + True @@ -4746,12 +4937,48 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripMenuItemContextInsertSchema + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItemContextInsertDefined + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItemContextInsertEnumeration + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStripMenuItemContextInsertConstant System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripMenuItemContextInsertSelect + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItemContextInsertEntity + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItemContextInsertAttribute + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStripMenuItemContextInsertPset @@ -4800,6 +5027,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripMenuItemContextInsertPublication + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStripMenuItemEnableDisable @@ -5058,22 +5291,22 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripMenuItemEditBuildConcepts - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - viewToolStripMenuItem System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripMenuItemViewWeb + + toolStripMenuItemViewDiagram - + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItemViewRequirement + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -5082,10 +5315,10 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripMenuItemViewDiagram + + toolStripMenuItemViewWeb - + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -5130,12 +5363,6 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - generateChangeLogToolStripMenuItem - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - toolStripMenuItem19 @@ -5418,6 +5645,18 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripMenuItemInsertConceptPset + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripMenuItemInsertConceptQset + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStripMenuItem20 @@ -5430,6 +5669,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripMenuItemInsertChangeLog + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + diagramToolStripMenuItem @@ -5640,6 +5885,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + toolStripMenuItemToolsConvert + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + toolStripMenuItem8 @@ -5670,18 +5921,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripMenuItem22 - - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - toolStripMenuItemDictionaryUpload - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - helpToolStripMenuItem @@ -5820,10 +6059,16 @@ System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripButtonViewWeb + + toolStripButtonViewDiagram - + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripButtonViewRequirement + + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -5832,10 +6077,10 @@ System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripButtonViewDiagram + + toolStripButtonViewWeb - + System.Windows.Forms.ToolStripButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -5976,11 +6221,11 @@ System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripMenuItemToolsConvert + + openFileDialogExamples - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 FormEdit diff --git a/FormGenerate.Designer.cs b/FormGenerate.Designer.cs index c024deee..e2c3238f 100644 --- a/FormGenerate.Designer.cs +++ b/FormGenerate.Designer.cs @@ -44,6 +44,11 @@ private void InitializeComponent() this.buttonImagesExamples = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); this.textBoxImagesExamples = new System.Windows.Forms.TextBox(); + this.buttonExternalConverter = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.textBoxExternalConverter = new System.Windows.Forms.TextBox(); + this.openFileDialogConverter = new System.Windows.Forms.OpenFileDialog(); + this.buttonExternalConverterClear = new System.Windows.Forms.Button(); this.SuspendLayout(); // // label1 @@ -134,12 +139,46 @@ private void InitializeComponent() this.textBoxImagesExamples.Name = "textBoxImagesExamples"; this.textBoxImagesExamples.ReadOnly = true; // + // buttonExternalConverter + // + resources.ApplyResources(this.buttonExternalConverter, "buttonExternalConverter"); + this.buttonExternalConverter.Name = "buttonExternalConverter"; + this.buttonExternalConverter.UseVisualStyleBackColor = true; + this.buttonExternalConverter.Click += new System.EventHandler(this.buttonExternalConverter_Click); + // + // label5 + // + resources.ApplyResources(this.label5, "label5"); + this.label5.Name = "label5"; + // + // textBoxExternalConverter + // + resources.ApplyResources(this.textBoxExternalConverter, "textBoxExternalConverter"); + this.textBoxExternalConverter.Name = "textBoxExternalConverter"; + this.textBoxExternalConverter.ReadOnly = true; + // + // openFileDialogConverter + // + this.openFileDialogConverter.DefaultExt = "exe"; + resources.ApplyResources(this.openFileDialogConverter, "openFileDialogConverter"); + // + // buttonExternalConverterClear + // + resources.ApplyResources(this.buttonExternalConverterClear, "buttonExternalConverterClear"); + this.buttonExternalConverterClear.Name = "buttonExternalConverterClear"; + this.buttonExternalConverterClear.UseVisualStyleBackColor = true; + this.buttonExternalConverterClear.Click += new System.EventHandler(this.buttonExternalConverterClear_Click); + // // FormGenerate // this.AcceptButton = this.buttonOK; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.CancelButton = this.buttonCancel; resources.ApplyResources(this, "$this"); + this.Controls.Add(this.buttonExternalConverterClear); + this.Controls.Add(this.buttonExternalConverter); + this.Controls.Add(this.label5); + this.Controls.Add(this.textBoxExternalConverter); this.Controls.Add(this.buttonImagesExamples); this.Controls.Add(this.label4); this.Controls.Add(this.textBoxImagesExamples); @@ -180,5 +219,10 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonImagesExamples; private System.Windows.Forms.Label label4; private System.Windows.Forms.TextBox textBoxImagesExamples; + private System.Windows.Forms.Button buttonExternalConverter; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox textBoxExternalConverter; + private System.Windows.Forms.OpenFileDialog openFileDialogConverter; + private System.Windows.Forms.Button buttonExternalConverterClear; } } \ No newline at end of file diff --git a/FormGenerate.cs b/FormGenerate.cs index e72044df..a002403a 100644 --- a/FormGenerate.cs +++ b/FormGenerate.cs @@ -28,6 +28,7 @@ public FormGenerate() this.textBoxPath.Text = Properties.Settings.Default.OutputPath; this.textBoxImagesDocumentation.Text = Properties.Settings.Default.InputPathGeneral; this.textBoxImagesExamples.Text = Properties.Settings.Default.InputPathExamples; + this.textBoxExternalConverter.Text = Properties.Settings.Default.ConverterPath; this.checkBoxSkip.Checked = Properties.Settings.Default.SkipDiagrams; } @@ -151,5 +152,21 @@ private void checkBoxSkip_CheckedChanged(object sender, EventArgs e) Properties.Settings.Default.SkipDiagrams = this.checkBoxSkip.Checked; } + private void buttonExternalConverter_Click(object sender, EventArgs e) + { + DialogResult res = this.openFileDialogConverter.ShowDialog(this); + if(res == System.Windows.Forms.DialogResult.OK) + { + this.textBoxExternalConverter.Text = this.openFileDialogConverter.FileName; + Properties.Settings.Default.ConverterPath = this.openFileDialogConverter.FileName; + } + } + + private void buttonExternalConverterClear_Click(object sender, EventArgs e) + { + this.textBoxExternalConverter.Text = String.Empty; + Properties.Settings.Default.ConverterPath = String.Empty; + } + } } diff --git a/FormGenerate.resx b/FormGenerate.resx index c8454028..759279e2 100644 --- a/FormGenerate.resx +++ b/FormGenerate.resx @@ -144,7 +144,7 @@ $this - 11 + 15 @@ -169,7 +169,7 @@ $this - 13 + 17 Top, Right @@ -196,7 +196,7 @@ $this - 9 + 13 Bottom, Left @@ -205,7 +205,7 @@ True - 12, 330 + 12, 410 254, 17 @@ -226,7 +226,7 @@ $this - 8 + 12 Bottom, Right @@ -235,7 +235,7 @@ False - 416, 327 + 416, 407 75, 23 @@ -256,13 +256,13 @@ $this - 12 + 16 Bottom, Right - 497, 327 + 497, 407 75, 23 @@ -283,7 +283,7 @@ $this - 10 + 14 17, 17 @@ -292,10 +292,10 @@ Top, Bottom, Left, Right - 12, 163 + 12, 208 - 560, 154 + 560, 184 0 @@ -310,7 +310,7 @@ $this - 7 + 11 True @@ -319,7 +319,7 @@ NoControl - 12, 147 + 9, 192 67, 13 @@ -340,7 +340,7 @@ $this - 6 + 10 Top, Right @@ -370,7 +370,7 @@ $this - 3 + 7 True @@ -400,7 +400,7 @@ $this - 4 + 8 Top, Left, Right @@ -424,7 +424,7 @@ $this - 5 + 9 Top, Right @@ -454,7 +454,7 @@ $this - 0 + 4 True @@ -484,7 +484,7 @@ $this - 1 + 5 Top, Left, Right @@ -508,13 +508,136 @@ $this + 6 + + + Top, Right + + + NoControl + + + 497, 150 + + + 75, 23 + + + 13 + + + Browse... + + + buttonExternalConverter + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + True + + + NoControl + + + 8, 135 + + + 461, 13 + + + 11 + + + External program for generating examples from other formats (not needed for IFC documentation): + + + label5 + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 2 + + Top, Left, Right + + + 11, 152 + + + 400, 20 + + + 12 + + + textBoxExternalConverter + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 3 + + + 180, 17 + + + Applications (*.exe)|*.exe + + + Select file converter program + + + Top, Right + + + NoControl + + + 417, 150 + + + 75, 23 + + + 14 + + + Clear + + + buttonExternalConverterClear + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + True - 584, 361 + 584, 441 Generate Documentation @@ -525,6 +648,12 @@ System.Windows.Forms.FolderBrowserDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + openFileDialogConverter + + + System.Windows.Forms.OpenFileDialog, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + FormGenerate diff --git a/FormPublish.Designer.cs b/FormPublish.Designer.cs index 2d704c45..d54350b0 100644 --- a/FormPublish.Designer.cs +++ b/FormPublish.Designer.cs @@ -40,49 +40,36 @@ private void InitializeComponent() this.backgroundWorkerPublish = new System.ComponentModel.BackgroundWorker(); this.errorProvider = new System.Windows.Forms.ErrorProvider(this.components); this.labelError = new System.Windows.Forms.Label(); + this.comboBoxProtocol = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).BeginInit(); this.SuspendLayout(); // // progressBar // resources.ApplyResources(this.progressBar, "progressBar"); - this.errorProvider.SetError(this.progressBar, resources.GetString("progressBar.Error")); - this.errorProvider.SetIconAlignment(this.progressBar, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("progressBar.IconAlignment")))); - this.errorProvider.SetIconPadding(this.progressBar, ((int)(resources.GetObject("progressBar.IconPadding")))); this.progressBar.Name = "progressBar"; // // textBoxUrl // resources.ApplyResources(this.textBoxUrl, "textBoxUrl"); - this.errorProvider.SetError(this.textBoxUrl, resources.GetString("textBoxUrl.Error")); - this.errorProvider.SetIconAlignment(this.textBoxUrl, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("textBoxUrl.IconAlignment")))); - this.errorProvider.SetIconPadding(this.textBoxUrl, ((int)(resources.GetObject("textBoxUrl.IconPadding")))); this.textBoxUrl.Name = "textBoxUrl"; // // label1 // resources.ApplyResources(this.label1, "label1"); - this.errorProvider.SetError(this.label1, resources.GetString("label1.Error")); - this.errorProvider.SetIconAlignment(this.label1, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("label1.IconAlignment")))); - this.errorProvider.SetIconPadding(this.label1, ((int)(resources.GetObject("label1.IconPadding")))); this.label1.Name = "label1"; // // buttonCancel // resources.ApplyResources(this.buttonCancel, "buttonCancel"); this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.errorProvider.SetError(this.buttonCancel, resources.GetString("buttonCancel.Error")); - this.errorProvider.SetIconAlignment(this.buttonCancel, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("buttonCancel.IconAlignment")))); - this.errorProvider.SetIconPadding(this.buttonCancel, ((int)(resources.GetObject("buttonCancel.IconPadding")))); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.UseVisualStyleBackColor = true; // // buttonOK // resources.ApplyResources(this.buttonOK, "buttonOK"); - this.errorProvider.SetError(this.buttonOK, resources.GetString("buttonOK.Error")); - this.errorProvider.SetIconAlignment(this.buttonOK, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("buttonOK.IconAlignment")))); - this.errorProvider.SetIconPadding(this.buttonOK, ((int)(resources.GetObject("buttonOK.IconPadding")))); this.buttonOK.Name = "buttonOK"; this.buttonOK.UseVisualStyleBackColor = true; this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); @@ -90,17 +77,11 @@ private void InitializeComponent() // textBoxComments // resources.ApplyResources(this.textBoxComments, "textBoxComments"); - this.errorProvider.SetError(this.textBoxComments, resources.GetString("textBoxComments.Error")); - this.errorProvider.SetIconAlignment(this.textBoxComments, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("textBoxComments.IconAlignment")))); - this.errorProvider.SetIconPadding(this.textBoxComments, ((int)(resources.GetObject("textBoxComments.IconPadding")))); this.textBoxComments.Name = "textBoxComments"; // // labelSummary // resources.ApplyResources(this.labelSummary, "labelSummary"); - this.errorProvider.SetError(this.labelSummary, resources.GetString("labelSummary.Error")); - this.errorProvider.SetIconAlignment(this.labelSummary, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("labelSummary.IconAlignment")))); - this.errorProvider.SetIconPadding(this.labelSummary, ((int)(resources.GetObject("labelSummary.IconPadding")))); this.labelSummary.Name = "labelSummary"; // // backgroundWorkerPublish @@ -114,22 +95,37 @@ private void InitializeComponent() // errorProvider // this.errorProvider.ContainerControl = this; - resources.ApplyResources(this.errorProvider, "errorProvider"); // // labelError // resources.ApplyResources(this.labelError, "labelError"); - this.errorProvider.SetError(this.labelError, resources.GetString("labelError.Error")); - this.errorProvider.SetIconAlignment(this.labelError, ((System.Windows.Forms.ErrorIconAlignment)(resources.GetObject("labelError.IconAlignment")))); - this.errorProvider.SetIconPadding(this.labelError, ((int)(resources.GetObject("labelError.IconPadding")))); this.labelError.Name = "labelError"; // + // comboBoxProtocol + // + this.comboBoxProtocol.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxProtocol.FormattingEnabled = true; + this.comboBoxProtocol.Items.AddRange(new object[] { + resources.GetString("comboBoxProtocol.Items"), + resources.GetString("comboBoxProtocol.Items1"), + resources.GetString("comboBoxProtocol.Items2")}); + resources.ApplyResources(this.comboBoxProtocol, "comboBoxProtocol"); + this.comboBoxProtocol.Name = "comboBoxProtocol"; + this.comboBoxProtocol.SelectedIndexChanged += new System.EventHandler(this.comboBoxProtocol_SelectedIndexChanged); + // + // label2 + // + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; + // // FormPublish // this.AcceptButton = this.buttonOK; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonCancel; + this.Controls.Add(this.label2); + this.Controls.Add(this.comboBoxProtocol); this.Controls.Add(this.labelError); this.Controls.Add(this.labelSummary); this.Controls.Add(this.textBoxComments); @@ -142,6 +138,7 @@ private void InitializeComponent() this.MinimizeBox = false; this.Name = "FormPublish"; this.ShowInTaskbar = false; + this.Load += new System.EventHandler(this.FormPublish_Load); ((System.ComponentModel.ISupportInitialize)(this.errorProvider)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -160,5 +157,7 @@ private void InitializeComponent() private System.ComponentModel.BackgroundWorker backgroundWorkerPublish; private System.Windows.Forms.ErrorProvider errorProvider; private System.Windows.Forms.Label labelError; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox comboBoxProtocol; } } \ No newline at end of file diff --git a/FormPublish.cs b/FormPublish.cs index 6edf34e8..d26adc51 100644 --- a/FormPublish.cs +++ b/FormPublish.cs @@ -14,19 +14,36 @@ using System.Net; using System.Text; using System.Windows.Forms; +using IfcDoc.Schema.DOC; namespace IfcDoc { public partial class FormPublish : Form { string m_localpath; + DocProject m_project; Exception m_exception; + string m_username; + string m_password; // use SecureString if/when bsDD is secured + int m_protocol; public FormPublish() { InitializeComponent(); } + public DocProject Project + { + get + { + return this.m_project; + } + set + { + this.m_project = value; + } + } + public string Url { get @@ -53,6 +70,21 @@ public string LocalPath private void buttonOK_Click(object sender, EventArgs e) { + // credentials + if(this.comboBoxProtocol.SelectedIndex != 0) + { + using (FormCredentials formCred = new FormCredentials()) + { + if(formCred.ShowDialog(this) != System.Windows.Forms.DialogResult.OK) + { + return; + } + + this.m_username = formCred.Username; + this.m_password = formCred.Password; + } + } + this.textBoxUrl.Enabled = false; this.progressBar.Value = 0; this.buttonOK.Enabled = false; @@ -68,34 +100,46 @@ private void backgroundWorkerPublish_DoWork(object sender, DoWorkEventArgs e) this.m_exception = null; try { - WebRequest request = HttpWebRequest.Create(this.textBoxUrl.Text); - request.Method = "POST"; - - using (FileStream streamFile = new FileStream(this.m_localpath, FileMode.Open)) + switch(this.m_protocol) { - request.ContentLength = streamFile.Length; - request.ContentType = "application/step"; - request.Headers[HttpRequestHeader.ContentLocation] = System.IO.Path.GetFileName(this.m_localpath); - - // for now, treat content type as opaque document attachment (don't set Content-Type to 'application/step') - // future: treat as project file that be merged and compared - - using (Stream streamWeb = request.GetRequestStream()) - { + case 0: { - byte[] buffer = new byte[8192]; - int len = 0; - do + WebRequest request = HttpWebRequest.Create(this.textBoxUrl.Text); + request.Method = "POST"; + + using (FileStream streamFile = new FileStream(this.m_localpath, FileMode.Open)) { - len = streamFile.Read(buffer, 0, buffer.Length); - if (len > 0) + request.ContentLength = streamFile.Length; + request.ContentType = "application/step"; + request.Headers[HttpRequestHeader.ContentLocation] = System.IO.Path.GetFileName(this.m_localpath); + + // for now, treat content type as opaque document attachment (don't set Content-Type to 'application/step') + // future: treat as project file that be merged and compared + + using (Stream streamWeb = request.GetRequestStream()) { - streamWeb.Write(buffer, 0, len); - this.backgroundWorkerPublish.ReportProgress((int)(100L * streamFile.Position / streamFile.Length)); + { + byte[] buffer = new byte[8192]; + int len = 0; + do + { + len = streamFile.Read(buffer, 0, buffer.Length); + if (len > 0) + { + streamWeb.Write(buffer, 0, len); + this.backgroundWorkerPublish.ReportProgress((int)(100L * streamFile.Position / streamFile.Length)); + } + } while (len > 0); + } } - } while (len > 0); + } } - } + break; + + case 1: + case 2: + DataDictionary.Upload(this.m_project, this.textBoxUrl.Text, this.m_username, this.m_password); + break; } } catch (Exception x) @@ -123,5 +167,30 @@ private void backgroundWorkerPublish_RunWorkerCompleted(object sender, RunWorker this.Close(); } } + + private void comboBoxProtocol_SelectedIndexChanged(object sender, EventArgs e) + { + switch(this.comboBoxProtocol.SelectedIndex) + { + case 0: + this.textBoxUrl.Text = "http://mvd.buildingsmart-tech.org/ifc4"; + break; + + case 1: + this.textBoxUrl.Text = "http://test.bsdd.buildingsmart.org/"; + break; + + case 2: + this.textBoxUrl.Text = "http://bsdd.buildingsmart.org/"; + break; + } + + this.m_protocol = this.comboBoxProtocol.SelectedIndex; + } + + private void FormPublish_Load(object sender, EventArgs e) + { + this.comboBoxProtocol.SelectedIndex = 1; + } } } diff --git a/FormPublish.resx b/FormPublish.resx index 9dc5d133..3edc9fe2 100644 --- a/FormPublish.resx +++ b/FormPublish.resx @@ -117,224 +117,296 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom, Left, Right + - - 400, 300 + + 15, 200 - - Publish file to a repository at the following URL: + + 360, 23 - - 2 + + + 4 + + + progressBar System.Windows.Forms.ProgressBar, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - $this + + 5 - - System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Top, Left, Right - - - MiddleRight + + 15, 65 - - MiddleRight + + 360, 20 - - 300, 229 + + 3 - - 0, 13 + + http://mvd.buildingsmart-tech.org/ifc4 - - + + textBoxUrl - - 16, 200 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + $this - - 75, 23 + + 6 - - label1 + + True - - + + 12, 9 + + + 119, 13 + + 0 - - 360, 122 + + Publish contents online: - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + label1 - - 359, 23 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 + + $this - + 7 - - Summary of changes: - - - 16, 238 + + Bottom, Right - - 6, 13 + + 300, 229 - - MiddleRight + + 75, 23 - - backgroundWorkerPublish + + 7 - - labelError + + Cancel - - Bottom, Right + + buttonCancel - - + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - MiddleRight + + 8 - - 4 + + Bottom, Right - - 5 + + 219, 229 - - 0 + + 75, 23 - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 6 - - 1 + + OK + + + buttonOK System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 228, 13 + + $this - - 75, 23 + + 9 - - 0 + + Top, Bottom, Left, Right - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 15, 114 - - 3 + + True + + + 360, 80 + + + 5 + + + textBoxComments + + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 4 + + + True + + + 12, 98 + + + 109, 13 + + + 4 - - + + Summary of changes: labelSummary - - textBoxUrl + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + $this + + 3 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + + + 213, 17 + + + True + + + 6, 13 - - Bottom, Left, Right + + 384, 264 - - Cancel + + True - - 0 + + NoControl - - 0 + + 12, 49 - - buttonCancel + + 32, 13 - - 12, 54 + + 2 - - 5 + + URL: - - True + + label2 - - progressBar + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - + + 0 - - Top, Left, Right + + Web Server - - MiddleRight + + buildingSmart Data Dictionary (Test Server) - - 0 + + buildingSmart Data Dictionary (Public Server) - - System.Windows.Forms.ErrorProvider, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 15, 25 - - $this + + 360, 21 + + + 1 - - MiddleRight + + comboBoxProtocol - + + System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + $this - - 4 + + 1 + + + Bottom, Left - - + + True - - textBoxComments + + 16, 238 + + + 0, 13 + + + 7 - - + + labelError + + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this - - True + + 2 @@ -761,112 +833,28 @@ Qf8AA0H/gAdE/+APQv8= - - Bottom, Left - - - buttonOK - - - MiddleRight - - - 219, 229 - - - 12, 9 - - - OK - - - 15, 25 - - - 6 - - - http://mvd.buildingsmart-tech.org/ifc4 - - - 360, 20 - - - Top, Bottom, Left, Right - - - 15, 72 - - - 0 - - - True - - - 2 - - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - - 6 - - - 109, 13 + + 400, 300 Publish - - 0 - - - 1 - - - $this - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - MiddleRight - - - 384, 264 - - - FormPublish - - - 7 + + backgroundWorkerPublish - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.ComponentModel.BackgroundWorker, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 errorProvider - - 0 + + System.Windows.Forms.ErrorProvider, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + FormPublish - - Bottom, Right + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - 17, 17 - - - 213, 17 - \ No newline at end of file diff --git a/FormReference.cs b/FormReference.cs index c8cff15f..81127401 100644 --- a/FormReference.cs +++ b/FormReference.cs @@ -214,6 +214,7 @@ private void buttonProperty_Click(object sender, EventArgs e) if(form.ShowDialog(this) == System.Windows.Forms.DialogResult.OK) { string valueprop = "NominalValue"; + string datatype = form.SelectedProperty.PrimaryDataType; switch(form.SelectedProperty.PropertyType) { case DocPropertyTemplateTypeEnum.P_BOUNDEDVALUE: @@ -228,12 +229,23 @@ private void buttonProperty_Click(object sender, EventArgs e) valueprop = "ListValues"; break; + case DocPropertyTemplateTypeEnum.P_REFERENCEVALUE: + valueprop = "PropertyReference"; + datatype = "IfcIrregularTimeSeries.Values[]\\" + form.SelectedProperty.SecondaryDataType; + break; + // other property types are not supported } - string value = @"\" + this.m_base.Name + @".IsDefinedBy['" + form.SelectedPropertySet + + string portprefix = String.Empty; + if (form.SelectedPort != null) + { + portprefix = @".IsNestedBy[]\IfcRelNests.RelatedObjects['" + form.SelectedPort + @"']\IfcDistributionPort"; + } + + string value = @"\" + this.m_base.Name + portprefix + @".IsDefinedBy['" + form.SelectedPropertySet + @"']\IfcRelDefinesByProperties.RelatingPropertyDefinition\IfcPropertySet.HasProperties['" + form.SelectedProperty + - @"']\" + form.SelectedProperty.GetEntityName() + @"." + valueprop + @"\" + form.SelectedProperty.PrimaryDataType; + @"']\" + form.SelectedProperty.GetEntityName() + @"." + valueprop + @"\" + datatype; CvtValuePath valuepath = CvtValuePath.Parse(value, this.m_map); LoadValuePath(valuepath); diff --git a/FormRule.Designer.cs b/FormRule.Designer.cs index 7a6f5937..9c83bc26 100644 --- a/FormRule.Designer.cs +++ b/FormRule.Designer.cs @@ -36,9 +36,9 @@ private void InitializeComponent() this.buttonOK = new System.Windows.Forms.Button(); this.comboBoxUsage = new System.Windows.Forms.ComboBox(); this.label5 = new System.Windows.Forms.Label(); - this.textBoxBehavior = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxPrefix = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // label3 @@ -50,7 +50,6 @@ private void InitializeComponent() // resources.ApplyResources(this.textBoxIdentifier, "textBoxIdentifier"); this.textBoxIdentifier.Name = "textBoxIdentifier"; - this.textBoxIdentifier.TextChanged += new System.EventHandler(this.textBoxIdentifier_TextChanged); // // comboBoxCardinality // @@ -98,21 +97,20 @@ private void InitializeComponent() resources.ApplyResources(this.label5, "label5"); this.label5.Name = "label5"; // - // textBoxBehavior + // label2 // - resources.ApplyResources(this.textBoxBehavior, "textBoxBehavior"); - this.textBoxBehavior.Name = "textBoxBehavior"; - this.textBoxBehavior.ReadOnly = true; + resources.ApplyResources(this.label2, "label2"); + this.label2.Name = "label2"; // // label1 // resources.ApplyResources(this.label1, "label1"); this.label1.Name = "label1"; // - // label2 + // textBoxPrefix // - resources.ApplyResources(this.label2, "label2"); - this.label2.Name = "label2"; + resources.ApplyResources(this.textBoxPrefix, "textBoxPrefix"); + this.textBoxPrefix.Name = "textBoxPrefix"; // // FormRule // @@ -121,7 +119,7 @@ private void InitializeComponent() this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonCancel; this.Controls.Add(this.label1); - this.Controls.Add(this.textBoxBehavior); + this.Controls.Add(this.textBoxPrefix); this.Controls.Add(this.label5); this.Controls.Add(this.comboBoxUsage); this.Controls.Add(this.buttonCancel); @@ -148,8 +146,8 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonOK; private System.Windows.Forms.ComboBox comboBoxUsage; private System.Windows.Forms.Label label5; - private System.Windows.Forms.TextBox textBoxBehavior; - private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBoxPrefix; } } \ No newline at end of file diff --git a/FormRule.cs b/FormRule.cs index b6d039ed..5119c5f7 100644 --- a/FormRule.cs +++ b/FormRule.cs @@ -53,6 +53,13 @@ public FormRule(DocModelRule rule, DocProject project, DocTemplateDefinition tem this.comboBoxUsage.SelectedIndex = 2; } + if (rule is DocModelRuleEntity) + { + this.textBoxPrefix.Enabled = true; + this.textBoxPrefix.Text = ((DocModelRuleEntity)rule).Prefix; + } + + if (this.m_rule.CardinalityMin == 0 && this.m_rule.CardinalityMax == 0) { this.comboBoxCardinality.SelectedIndex = 0; @@ -73,15 +80,6 @@ public FormRule(DocModelRule rule, DocProject project, DocTemplateDefinition tem { this.comboBoxCardinality.SelectedIndex = 4; } - - this.UpdateBehavior(); - } - - private void textBoxIdentifier_TextChanged(object sender, EventArgs e) - { - //this.m_rule.Identification = this.textBoxIdentifier.Text; - - //this.m_rule.RenameParameter(this.textBoxIdentifier.Text, this.m_project, this.m_template); } private void comboBoxCardinality_SelectedIndexChanged(object sender, EventArgs e) @@ -113,8 +111,6 @@ private void comboBoxCardinality_SelectedIndexChanged(object sender, EventArgs e this.m_rule.CardinalityMax = -1; break; } - - this.UpdateBehavior(); } private void comboBoxUsage_SelectedIndexChanged(object sender, EventArgs e) @@ -136,48 +132,6 @@ private void comboBoxUsage_SelectedIndexChanged(object sender, EventArgs e) this.m_rule.Description = null; break; } - - this.UpdateBehavior(); - } - - private void UpdateBehavior() - { - switch (this.comboBoxUsage.SelectedIndex) - { - case 0: - this.textBoxBehavior.Text = ""; - break; - - case 1: - this.textBoxBehavior.Text = "Rules only apply if attribute equals specified value.\r\n"; - break; - - case 2: - this.textBoxBehavior.Text = "Attribute must equal specified value if rule applies.\r\n"; - break; - } - - switch (this.comboBoxCardinality.SelectedIndex) - { - case 0: // - - break; - - case 1: // [0] - this.textBoxBehavior.Text += "No applicable template items may satisfy all constraints."; - break; - - case 2: // [0:1] - this.textBoxBehavior.Text += "Zero or one template items must satisfy all constraints."; - break; - - case 3: // [1] - this.textBoxBehavior.Text += "Exactly one applicable template item must satisfy all constraints."; - break; - - case 4: // [1:?] - this.textBoxBehavior.Text += "Each applicable template item must satisfy all constraints."; - break; - } } private void buttonOK_Click(object sender, EventArgs e) @@ -188,6 +142,11 @@ private void buttonOK_Click(object sender, EventArgs e) this.m_rule.RenameParameter(this.textBoxIdentifier.Text, this.m_project, this.m_template); } + if(this.m_rule is DocModelRuleEntity) + { + ((DocModelRuleEntity)this.m_rule).Prefix = this.textBoxPrefix.Text; + } + this.Close(); } diff --git a/FormRule.resx b/FormRule.resx index f9361021..a53bc3dc 100644 --- a/FormRule.resx +++ b/FormRule.resx @@ -190,7 +190,7 @@ One-to-Many - 13, 117 + 12, 212 359, 21 @@ -217,7 +217,7 @@ Bottom, Right - 298, 126 + 298, 152 75, 23 @@ -244,7 +244,7 @@ Bottom, Right - 214, 126 + 214, 152 75, 23 @@ -327,53 +327,53 @@ 2 - - Top, Bottom, Left, Right + + True - - 13, 164 + + 9, 195 - - True + + 58, 13 - - 359, 0 + + 4 - - 7 + + Cardinality: - + False - - textBoxBehavior + + label2 - - System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 1 + + 6 True + + NoControl + - 10, 147 + 10, 98 - 52, 13 + 246, 13 - 6 + 10 - Behavior: - - - False + Prefix for qualifying referenced templates (optional): label1 @@ -387,35 +387,32 @@ 0 - - True - - - 10, 100 + + Top, Left, Right - - 58, 13 + + False - - 4 + + 13, 115 - - Cardinality: + + 359, 20 - - False + + 11 - - label2 + + textBoxPrefix - - System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + $this - - 6 + + 1 True @@ -424,7 +421,7 @@ 6, 13 - 384, 161 + 384, 187 diff --git a/FormSelectEntity.cs b/FormSelectEntity.cs index f6b8ae48..b3d2ea60 100644 --- a/FormSelectEntity.cs +++ b/FormSelectEntity.cs @@ -415,7 +415,7 @@ private void treeViewAlphabetical_AfterSelect(object sender, TreeViewEventArgs e if (this.treeViewAlphabetical.SelectedNode == null) return; - DocEntity entity = this.treeViewAlphabetical.SelectedNode.Tag as DocEntity; + DocDefinition entity = this.treeViewAlphabetical.SelectedNode.Tag as DocDefinition; if (entity != null) { this.treeViewInheritance.SelectedNode = this.m_mapInherit[entity]; diff --git a/FormSelectProperty.Designer.cs b/FormSelectProperty.Designer.cs index fd5fe69d..7c119ff3 100644 --- a/FormSelectProperty.Designer.cs +++ b/FormSelectProperty.Designer.cs @@ -34,17 +34,19 @@ private void InitializeComponent() this.buttonCancel = new System.Windows.Forms.Button(); this.buttonOK = new System.Windows.Forms.Button(); this.imageList = new System.Windows.Forms.ImageList(this.components); + this.comboBoxPort = new System.Windows.Forms.ComboBox(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.textBoxType = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // treeViewProperty // - this.treeViewProperty.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.treeViewProperty.Location = new System.Drawing.Point(13, 12); + this.treeViewProperty.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left))); + this.treeViewProperty.Location = new System.Drawing.Point(13, 39); this.treeViewProperty.Name = "treeViewProperty"; - this.treeViewProperty.Size = new System.Drawing.Size(359, 445); - this.treeViewProperty.TabIndex = 6; + this.treeViewProperty.Size = new System.Drawing.Size(251, 358); + this.treeViewProperty.TabIndex = 1; this.treeViewProperty.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewProperty_AfterSelect); // // buttonCancel @@ -52,7 +54,7 @@ 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.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonCancel.Location = new System.Drawing.Point(297, 466); + this.buttonCancel.Location = new System.Drawing.Point(697, 406); this.buttonCancel.Name = "buttonCancel"; this.buttonCancel.Size = new System.Drawing.Size(75, 23); this.buttonCancel.TabIndex = 5; @@ -64,7 +66,7 @@ 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.ImeMode = System.Windows.Forms.ImeMode.NoControl; - this.buttonOK.Location = new System.Drawing.Point(216, 466); + this.buttonOK.Location = new System.Drawing.Point(616, 406); this.buttonOK.Name = "buttonOK"; this.buttonOK.Size = new System.Drawing.Size(75, 23); this.buttonOK.TabIndex = 4; @@ -78,13 +80,48 @@ private void InitializeComponent() this.imageList.Images.SetKeyName(0, "DocPropertySet.bmp"); this.imageList.Images.SetKeyName(1, "DocProperty.bmp"); // + // comboBoxPort + // + this.comboBoxPort.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxPort.FormattingEnabled = true; + this.comboBoxPort.Location = new System.Drawing.Point(13, 12); + this.comboBoxPort.Name = "comboBoxPort"; + this.comboBoxPort.Size = new System.Drawing.Size(251, 21); + this.comboBoxPort.TabIndex = 0; + this.comboBoxPort.SelectedIndexChanged += new System.EventHandler(this.comboBoxPort_SelectedIndexChanged); + // + // textBoxDescription + // + this.textBoxDescription.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.textBoxDescription.Location = new System.Drawing.Point(270, 39); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.Size = new System.Drawing.Size(502, 358); + this.textBoxDescription.TabIndex = 3; + // + // textBoxType + // + this.textBoxType.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxType.Location = new System.Drawing.Point(270, 12); + this.textBoxType.Name = "textBoxType"; + this.textBoxType.ReadOnly = true; + this.textBoxType.Size = new System.Drawing.Size(502, 20); + this.textBoxType.TabIndex = 2; + // // FormSelectProperty // this.AcceptButton = this.buttonOK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonCancel; - this.ClientSize = new System.Drawing.Size(384, 501); + this.ClientSize = new System.Drawing.Size(784, 441); + this.Controls.Add(this.textBoxType); + this.Controls.Add(this.textBoxDescription); + this.Controls.Add(this.comboBoxPort); this.Controls.Add(this.treeViewProperty); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); @@ -93,6 +130,7 @@ private void InitializeComponent() this.Name = "FormSelectProperty"; this.Text = "Select Property"; this.ResumeLayout(false); + this.PerformLayout(); } @@ -102,6 +140,9 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonCancel; private System.Windows.Forms.Button buttonOK; private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.ComboBox comboBoxPort; + private System.Windows.Forms.TextBox textBoxDescription; + private System.Windows.Forms.TextBox textBoxType; } } \ No newline at end of file diff --git a/FormSelectProperty.cs b/FormSelectProperty.cs index 2669ea62..faf9a409 100644 --- a/FormSelectProperty.cs +++ b/FormSelectProperty.cs @@ -16,6 +16,7 @@ public partial class FormSelectProperty : Form { DocEntity m_entity; DocProject m_project; + string m_portname; public FormSelectProperty() { @@ -31,19 +32,67 @@ public FormSelectProperty(DocEntity docEntity, DocProject docProject, bool multi { this.treeViewProperty.CheckBoxes = true; this.Text = "Include Property Sets"; + + this.comboBoxPort.Enabled = false; + } + else + { + // find applicable ports + this.comboBoxPort.Items.Add("(object)"); + this.comboBoxPort.SelectedIndex = 0; + + Guid guidPortNesting = new Guid("bafc93b7-d0e2-42d8-84cf-5da20ee1480a"); + foreach (DocModelView docView in docProject.ModelViews) + { + foreach (DocConceptRoot docRoot in docView.ConceptRoots) + { + if (docRoot.ApplicableEntity == docEntity) + { + foreach (DocTemplateUsage docConcept in docRoot.Concepts) + { + if (docConcept.Definition != null && docConcept.Definition.Uuid == guidPortNesting) + { + foreach (DocTemplateItem docItem in docConcept.Items) + { + string name = docItem.GetParameterValue("Name"); + if (!this.comboBoxPort.Items.Contains(name)) + { + this.comboBoxPort.Items.Add(name); + } + } + } + } + } + } + } + } + + this.LoadPropertySets(); + } + + private void LoadPropertySets() + { + this.treeViewProperty.Nodes.Clear(); + + DocEntity docEntity = this.m_entity; + if (this.m_portname != null) + { + docEntity = this.m_project.GetDefinition("IfcDistributionPort") as DocEntity; } + if (docEntity == null) + return; - foreach(DocSection docSection in this.m_project.Sections) + foreach (DocSection docSection in this.m_project.Sections) { - foreach(DocSchema docSchema in docSection.Schemas) + foreach (DocSchema docSchema in docSection.Schemas) { - foreach(DocPropertySet docPset in docSchema.PropertySets) + foreach (DocPropertySet docPset in docSchema.PropertySets) { bool include = false; if (docPset.ApplicableType != null) { string[] parts = docPset.ApplicableType.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); - foreach(string part in parts) + foreach (string part in parts) { DocEntity docBase = docEntity; while (docBase != null) @@ -82,13 +131,41 @@ public FormSelectProperty(DocEntity docEntity, DocProject docProject, bool multi } this.treeViewProperty.ExpandAll(); + } private void treeViewProperty_AfterSelect(object sender, TreeViewEventArgs e) { + DocObject docObj = this.treeViewProperty.SelectedNode.Tag as DocObject; + if (docObj != null) + { + if(docObj is DocPropertySet) + { + this.textBoxType.Text = ((DocPropertySet)docObj).PropertySetType; + } + else if(docObj is DocProperty) + { + DocProperty docProp = (DocProperty)docObj; + this.textBoxType.Text = docProp.PropertyType + ": " + docProp.PrimaryDataType + " / " + docProp.SecondaryDataType; + } + + this.textBoxDescription.Text = docObj.Documentation; + } + this.buttonOK.Enabled = (this.treeViewProperty.CheckBoxes || (this.treeViewProperty.SelectedNode != null && this.treeViewProperty.SelectedNode.Tag is DocProperty)); } + /// + /// Distribution port within object, or NULL if main object + /// + public string SelectedPort + { + get + { + return this.m_portname; + } + } + public DocProperty SelectedProperty { get @@ -131,5 +208,18 @@ public DocPropertySet[] IncludedPropertySets return list.ToArray(); } } + + private void comboBoxPort_SelectedIndexChanged(object sender, EventArgs e) + { + if (this.comboBoxPort.SelectedIndex == 0) + { + this.m_portname = null; + } + else + { + this.m_portname = this.comboBoxPort.SelectedItem as string; + } + this.LoadPropertySets(); + } } } diff --git a/FormSelectProperty.resx b/FormSelectProperty.resx index dd08f8e7..4c58aa56 100644 --- a/FormSelectProperty.resx +++ b/FormSelectProperty.resx @@ -124,8 +124,8 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC6 - CQAAAk1TRnQBSQFMAgEBAgEAAQgBAAEIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAC2 + CQAAAk1TRnQBSQFMAgEBAgEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -156,17 +156,17 @@ AfsB/wEAAaQCoAEAA4ADAAH/AgAB/wMAAv8BAAH/AwAB/wEAAf8BAAL/AgAD/wYAAfQBpgEZPAAB9AGt AbMBpgH0BwABrgtmJwAB9AGtAdsB1QGzAaYB9AYAAZEB/wLyAfEB8AG8AwkBtQFmJgAB9AG0AtwB2wHV AbMBpgH0AQAB9AMAAZEB/wH3Ae0B9AL3Ae0BkQEZAbUBZicAAfQBtALcAdsB1QGzAaYB9AGCAfQCAAGR - A/8B9QL0AxkBtQFmJwAC8AG0AtwB2wGtAfIBggGwAYIB9AEAAZEB/wH3Ae0B9QL3Ae0BkQEZAbsBZiYA - ARsCKgHwAbQB3AGtAfIBggHYAbYBsAGCAfQB7QX/AvUB9AEZAQcBZiUAARsBKgJZASoB8AG0AfIBsAPY - AbYBsAGCAfcB/wG8AfEB/wK8Ae8BSgH0AbwBbAMAAfQgAAEbASoBegNZASoBvAGwA94C2AGwAfQB9wH/ - AfMBbgHyAf8B7gFKAVIBQwEHAW0CAAHvAU8gAAEqAZoCegNZASoBGgGwA94BsAH0AQABtAEJARwBmQFK - Ae0BSgF5AeoBWQEQAiIB+AFJAVAgAAExAaABmgJ6A1kBKgEaAbAB3gGwAfQCAAG0AgkBHAGaAUoBeQHq - AXoBSgFYAlIBSgJQIAABGwExAaABmgJ6A1kBKgEbAbAB9AMAA7QBCQEcAZoBSgGaAUoCegFZAVgBUgFy - AZchAAEbATEBoAGaAnoBWQExARsBAAH0BwAB/wHzARwBmgFKAZoDegJZAXMBlyIAARsBMQGgAZoBegEx - ARsMAAHzARwDmgJ6AXkB7AKYIwABGwExAaABMQEaDgAB8wMcAe0BcwHsAe4CmCQAARsBMQEbOQABQgFN - AT4HAAE+AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEAAfgD/wQAAfABfwEAAQ8EAAHgAT8BAAEP - BAABwAEXAQABDwQAAeABAwEAAQ8EAAHgAQEBAAEPBAABwAIAAQ8EAAGAAgABDgcAAQwFAAEBBwABAwcA - AQcGAAGAAS8B4AUAAcABfwH4BQAB4AH/AfwFAAHxA/8EAAs= + BP8C9AMZAbUBZicAAvABtALcAdsBrQHyAYIBsAGCAfQBAAGRAf8B9wHtAf8C9wHtAZEBGQG7AWYmAAEb + AioB8AG0AdwBrQHyAYIB2AG2AbABggH0Ae0H/wH0ARkBBwFmJQABGwEqAlkBKgHwAbQB8gGwA9gBtgGw + AYIB9wH/AbwB8QH/ArwB7wFKAfQBvAFsAwAB9CAAARsBKgF6A1kBKgG8AbAD3gLYAbAB9AH3Af8B8wFu + AfIB/wG8AUoBUgFDAQcBbQIAAe8BTyAAASoBmgJ6A1kBKgEaAbAD3gGwAfQBAAG0AQkBHAGZAUoB7QFK + AXkB6gFZARACIgHsAUkBUCAAATEBoAGaAnoDWQEqARoBsAHeAbAB9AIAAbQCCQEcAZoBSgF5AeoBegFK + AVgCUgFKAlAgAAEbATEBoAGaAnoDWQEqARsBsAH0AwADtAEJARwBmgFKAZoBSgJ6AVkBWAFSAXIBlyEA + ARsBMQGgAZoCegFZATEBGwEAAfQHAAH/AfMBHAGaAUoBmgN6AlkBcwGXIgABGwExAaABmgF6ATEBGwwA + AfMBHAOaAnoBeQHsApgjAAEbATEBoAExARoOAAHzAxwB7QFzAewBvAKYJAABGwExARs5AAFCAU0BPgcA + AT4DAAEoAwABQAMAARADAAEBAQABAQUAAYAXAAP/AQAB+AP/BAAB8AF/AQABDwQAAeABPwEAAQ8EAAHA + ARcBAAEPBAAB4AEDAQABDwQAAeABAQEAAQ8EAAHAAgABDwQAAYACAAEOBwABDAUAAQEHAAEDBwABBwYA + AYABLwHgBQABwAF/AfgFAAHgAf8B/AUAAfED/wQACw== \ No newline at end of file diff --git a/FormSelectTemplate.Designer.cs b/FormSelectTemplate.Designer.cs index cb6e9d5a..c83eadda 100644 --- a/FormSelectTemplate.Designer.cs +++ b/FormSelectTemplate.Designer.cs @@ -34,6 +34,18 @@ private void InitializeComponent() this.buttonOK = new System.Windows.Forms.Button(); this.treeView = new System.Windows.Forms.TreeView(); this.imageList = new System.Windows.Forms.ImageList(this.components); + this.splitContainer = new System.Windows.Forms.SplitContainer(); + this.splitContainerPreview = new System.Windows.Forms.SplitContainer(); + this.ctlConcept = new IfcDoc.CtlConcept(); + this.webBrowser = new System.Windows.Forms.WebBrowser(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).BeginInit(); + this.splitContainer.Panel1.SuspendLayout(); + this.splitContainer.Panel2.SuspendLayout(); + this.splitContainer.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerPreview)).BeginInit(); + this.splitContainerPreview.Panel1.SuspendLayout(); + this.splitContainerPreview.Panel2.SuspendLayout(); + this.splitContainerPreview.SuspendLayout(); this.SuspendLayout(); // // buttonCancel @@ -52,10 +64,12 @@ private void InitializeComponent() // // treeView // + this.treeView.BorderStyle = System.Windows.Forms.BorderStyle.None; resources.ApplyResources(this.treeView, "treeView"); this.treeView.HideSelection = false; this.treeView.ImageList = this.imageList; this.treeView.Name = "treeView"; + this.treeView.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView_AfterSelect); // // imageList // @@ -63,19 +77,71 @@ private void InitializeComponent() this.imageList.TransparentColor = System.Drawing.Color.Transparent; this.imageList.Images.SetKeyName(0, "DocTemplateDefinition.png"); // + // splitContainer + // + resources.ApplyResources(this.splitContainer, "splitContainer"); + this.splitContainer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.splitContainer.Name = "splitContainer"; + // + // splitContainer.Panel1 + // + this.splitContainer.Panel1.Controls.Add(this.treeView); + // + // splitContainer.Panel2 + // + this.splitContainer.Panel2.Controls.Add(this.splitContainerPreview); + // + // splitContainerPreview + // + resources.ApplyResources(this.splitContainerPreview, "splitContainerPreview"); + this.splitContainerPreview.Name = "splitContainerPreview"; + // + // splitContainerPreview.Panel1 + // + this.splitContainerPreview.Panel1.Controls.Add(this.ctlConcept); + // + // splitContainerPreview.Panel2 + // + this.splitContainerPreview.Panel2.Controls.Add(this.webBrowser); + // + // ctlConcept + // + resources.ApplyResources(this.ctlConcept, "ctlConcept"); + this.ctlConcept.ConceptRoot = null; + this.ctlConcept.CurrentInstance = null; + this.ctlConcept.Map = null; + this.ctlConcept.Name = "ctlConcept"; + this.ctlConcept.Project = null; + this.ctlConcept.Selection = null; + this.ctlConcept.Template = null; + this.ctlConcept.SelectionChanged += new System.EventHandler(this.ctlConcept_SelectionChanged); + // + // webBrowser + // + resources.ApplyResources(this.webBrowser, "webBrowser"); + this.webBrowser.Name = "webBrowser"; + // // FormSelectTemplate // this.AcceptButton = this.buttonOK; resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.buttonCancel; - this.Controls.Add(this.treeView); + this.Controls.Add(this.splitContainer); this.Controls.Add(this.buttonCancel); this.Controls.Add(this.buttonOK); this.MaximizeBox = false; this.MinimizeBox = false; this.Name = "FormSelectTemplate"; this.ShowInTaskbar = false; + this.splitContainer.Panel1.ResumeLayout(false); + this.splitContainer.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer)).EndInit(); + this.splitContainer.ResumeLayout(false); + this.splitContainerPreview.Panel1.ResumeLayout(false); + this.splitContainerPreview.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainerPreview)).EndInit(); + this.splitContainerPreview.ResumeLayout(false); this.ResumeLayout(false); } @@ -86,5 +152,9 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonOK; private System.Windows.Forms.TreeView treeView; private System.Windows.Forms.ImageList imageList; + private System.Windows.Forms.SplitContainer splitContainer; + private CtlConcept ctlConcept; + private System.Windows.Forms.SplitContainer splitContainerPreview; + private System.Windows.Forms.WebBrowser webBrowser; } } \ No newline at end of file diff --git a/FormSelectTemplate.cs b/FormSelectTemplate.cs index a88e5660..53ebbc6c 100644 --- a/FormSelectTemplate.cs +++ b/FormSelectTemplate.cs @@ -71,19 +71,24 @@ public FormSelectTemplate(DocTemplateDefinition selection, DocProject project, D } } - LoadTemplates(project.Templates); + LoadTemplates(null, project.Templates); } - private void LoadTemplates(List list) + private void LoadTemplates(TreeNode tnParent, List list) { foreach (DocTemplateDefinition docTemplate in list) { -#if false +#if true bool include = false; + if(docTemplate.Name.Contains("Spatial")) + { + this.ToString(); + } + // check for inheritance DocObject docApplicableEntity = null; - if (this.m_entity == null) + if (this.m_entity == null || String.IsNullOrEmpty(docTemplate.Type)) { include = true; } @@ -113,18 +118,21 @@ private void LoadTemplates(List list) } } } - else if (docTemplate.Type == null) - { - // recurse - LoadTemplates(docTemplate.Templates); - } if (include) { - LoadTemplate(null, docTemplate); + LoadTemplate(tnParent, docTemplate); } -#endif + + //else if (docTemplate.Type == null) + //{ + // recurse + // LoadTemplates(tnParent, docTemplate.Templates); + //} + +#else LoadTemplate(null, docTemplate); +#endif } } @@ -149,10 +157,12 @@ private void LoadTemplate(TreeNode tnParent, DocTemplateDefinition template) this.treeView.SelectedNode = tn; } + this.LoadTemplates(tn, template.Templates); + /* foreach (DocTemplateDefinition sub in template.Templates) { LoadTemplate(tn, sub); - } + }*/ } public DocTemplateDefinition SelectedTemplate @@ -165,5 +175,51 @@ public DocTemplateDefinition SelectedTemplate return this.treeView.SelectedNode.Tag as DocTemplateDefinition; } } + + private void treeView_AfterSelect(object sender, TreeViewEventArgs e) + { + DocTemplateDefinition dtd = (DocTemplateDefinition)this.treeView.SelectedNode.Tag; + this.ctlConcept.Map = this.m_map; + this.ctlConcept.Project = this.m_project; + this.ctlConcept.Template = dtd; + this.ctlConcept.Enabled = true; + SetContent(dtd); + } + + private void ctlConcept_SelectionChanged(object sender, EventArgs e) + { + if (this.ctlConcept.CurrentAttribute != null) + { + SetContent(this.ctlConcept.CurrentAttribute); + } + else if (this.ctlConcept.Selection is DocModelRuleEntity) + { + DocModelRuleEntity dmr = (DocModelRuleEntity)this.ctlConcept.Selection; + DocObject obj = null; + this.m_map.TryGetValue(dmr.Name, out obj); + this.SetContent(obj); + } + else + { + DocTemplateDefinition dtd = (DocTemplateDefinition)this.treeView.SelectedNode.Tag; + this.SetContent(dtd); + } + } + + private void SetContent(DocObject obj) + { + string s = System.IO.Path.GetDirectoryName(Application.ExecutablePath) + "\\content\\ifc-styles.css"; + string header = ""; + string footer = ""; + this.webBrowser.Navigate("about:blank"); + if (obj != null) + { + this.webBrowser.DocumentText = header + obj.Documentation + footer; + } + else + { + this.webBrowser.DocumentText = String.Empty; + } + } } } diff --git a/FormSelectTemplate.resx b/FormSelectTemplate.resx index 45387908..004f63bd 100644 --- a/FormSelectTemplate.resx +++ b/FormSelectTemplate.resx @@ -117,18 +117,312 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Bottom, Right + + + NoControl + + + 697, 408 + + + 75, 23 + + + + 4 + + + Cancel + + + buttonCancel + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 1 + + + Bottom, Right + + + NoControl + - 216, 471 + 616, 408 + + + 75, 23 + + + 3 + + + OK + + + buttonOK + + + System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 2 + + + Fill + + + 0 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAw + CAAAAk1TRnQBSQFMAwEBAAFAAQABQAEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA + AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA + AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA + AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm + AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ + AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm + AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz + AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm + AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm + AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA + ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm + AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm + ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm + AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA + AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ + AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz + AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ + AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA + AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM + AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm + ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ + AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ + ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM + ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm + AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM + AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA + AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA + ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 + Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/9KAAG1BWY6AAG1Af8B9AIZ + AWY6AAG7Af8BvAHvAfQBZjgAAf8B8wG7BP8BZjEAAbUFZgHzAc8BiwLWAdUCtAGtMQABtQH/AfQCGQFm + AYsB8gEAAdYBCQHcAdYB1QGtMQABuwH/AbwB7wH0AWYB/wIAAtYB1QK0Aa0xAAG7BP8BZgH0OQAC1gHV + ArQBrQG0Aa4B9AEAAbUFZjAAAdYBCQHcAdYB1QGtAf8B8wHPAYsBtQH/AfQCGQFmMAAC1gHVArQBrQIA + Af8B8gG7Af8BvAHvAfQBZjoAAbsE/wFmOgAC1gHVArQBrToAAdYBCQHcAdYB1QGtOgAC1gHVArQBrTAA + AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAL/BgAB/wGBBgAB/wGBBgAB/wGB + BgAB/gEBBwABAQcAAYEGAAEBAYEGAAEBAf8HAAFADgABAwcAAf8BwAYAAf8BwAYAAf8BwAYAAf8BwAYA + Cw== + + + + 0, 0 + + + 0 - 360, 451 + 251, 386 + + + 5 + + + treeView + + + System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer.Panel1 0 - - 75, 23 + + Top, Bottom, Left, Right + + + 12, 12 + + + splitContainer.Panel1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer + + + 0 + + + Fill + + + 0, 0 + + + Horizontal + + + True + + + Fill + + + 0, 0 + + + 501, 300 + + + 0 + + + ctlConcept + + + IfcDoc.CtlConcept, IfcDoc, Version=10.7.0.0, Culture=neutral, PublicKeyToken=null + + + splitContainerPreview.Panel1 + + + 0 + + + splitContainerPreview.Panel1 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainerPreview + + + 0 + + + Fill + + + 0, 0 + + + 20, 20 + + + 501, 82 + + + 0 + + + webBrowser + + + System.Windows.Forms.WebBrowser, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainerPreview.Panel2 + + + 0 + + + splitContainerPreview.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainerPreview + + + 1 + + + 501, 386 + + + 300 + + + 1 + + + splitContainerPreview + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer.Panel2 + + + 0 + + + splitContainer.Panel2 + + + System.Windows.Forms.SplitterPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + splitContainer + + + 1 + + + 760, 388 + + + 253 + + + 6 + + + splitContainer + + + System.Windows.Forms.SplitContainer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + + 0 + + + True + + + 6, 13 + + + 784, 441 @@ -298,148 +592,19 @@ AACAAWn/AAHe/wAB6P8AAeX/AAHk/wAB3/+AAbj/wAFb/8ADhv/AB13/ - - $this - - - - 0 - - - - Top, Bottom, Left, Right - - - FormSelectTemplate - - - Bottom, Right - - - 4 - - - 3 - - - 12, 12 - - - treeView - - - 384, 504 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - buttonCancel - - - Bottom, Right - - - 297, 471 - - - System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 0 - - - OK + + Select Concept Template imageList - - 2 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w - LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 - ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAw - CAAAAk1TRnQBSQFMAwEBAAEMAQABIAEAARABAAEQAQAE/wEJARAI/wFCAU0BNgEEBgABNgEEAgABKAMA - AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA - AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA - AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm - AwABmQMAAcwCAAEzAwACMwIAATMBZgIAATMBmQIAATMBzAIAATMB/wIAAWYDAAFmATMCAAJmAgABZgGZ - AgABZgHMAgABZgH/AgABmQMAAZkBMwIAAZkBZgIAApkCAAGZAcwCAAGZAf8CAAHMAwABzAEzAgABzAFm - AgABzAGZAgACzAIAAcwB/wIAAf8BZgIAAf8BmQIAAf8BzAEAATMB/wIAAf8BAAEzAQABMwEAAWYBAAEz - AQABmQEAATMBAAHMAQABMwEAAf8BAAH/ATMCAAMzAQACMwFmAQACMwGZAQACMwHMAQACMwH/AQABMwFm - AgABMwFmATMBAAEzAmYBAAEzAWYBmQEAATMBZgHMAQABMwFmAf8BAAEzAZkCAAEzAZkBMwEAATMBmQFm - AQABMwKZAQABMwGZAcwBAAEzAZkB/wEAATMBzAIAATMBzAEzAQABMwHMAWYBAAEzAcwBmQEAATMCzAEA - ATMBzAH/AQABMwH/ATMBAAEzAf8BZgEAATMB/wGZAQABMwH/AcwBAAEzAv8BAAFmAwABZgEAATMBAAFm - AQABZgEAAWYBAAGZAQABZgEAAcwBAAFmAQAB/wEAAWYBMwIAAWYCMwEAAWYBMwFmAQABZgEzAZkBAAFm - ATMBzAEAAWYBMwH/AQACZgIAAmYBMwEAA2YBAAJmAZkBAAJmAcwBAAFmAZkCAAFmAZkBMwEAAWYBmQFm - AQABZgKZAQABZgGZAcwBAAFmAZkB/wEAAWYBzAIAAWYBzAEzAQABZgHMAZkBAAFmAswBAAFmAcwB/wEA - AWYB/wIAAWYB/wEzAQABZgH/AZkBAAFmAf8BzAEAAcwBAAH/AQAB/wEAAcwBAAKZAgABmQEzAZkBAAGZ - AQABmQEAAZkBAAHMAQABmQMAAZkCMwEAAZkBAAFmAQABmQEzAcwBAAGZAQAB/wEAAZkBZgIAAZkBZgEz - AQABmQEzAWYBAAGZAWYBmQEAAZkBZgHMAQABmQEzAf8BAAKZATMBAAKZAWYBAAOZAQACmQHMAQACmQH/ - AQABmQHMAgABmQHMATMBAAFmAcwBZgEAAZkBzAGZAQABmQLMAQABmQHMAf8BAAGZAf8CAAGZAf8BMwEA - AZkBzAFmAQABmQH/AZkBAAGZAf8BzAEAAZkC/wEAAcwDAAGZAQABMwEAAcwBAAFmAQABzAEAAZkBAAHM - AQABzAEAAZkBMwIAAcwCMwEAAcwBMwFmAQABzAEzAZkBAAHMATMBzAEAAcwBMwH/AQABzAFmAgABzAFm - ATMBAAGZAmYBAAHMAWYBmQEAAcwBZgHMAQABmQFmAf8BAAHMAZkCAAHMAZkBMwEAAcwBmQFmAQABzAKZ - AQABzAGZAcwBAAHMAZkB/wEAAswCAALMATMBAALMAWYBAALMAZkBAAPMAQACzAH/AQABzAH/AgABzAH/ - ATMBAAGZAf8BZgEAAcwB/wGZAQABzAH/AcwBAAHMAv8BAAHMAQABMwEAAf8BAAFmAQAB/wEAAZkBAAHM - ATMCAAH/AjMBAAH/ATMBZgEAAf8BMwGZAQAB/wEzAcwBAAH/ATMB/wEAAf8BZgIAAf8BZgEzAQABzAJm - AQAB/wFmAZkBAAH/AWYBzAEAAcwBZgH/AQAB/wGZAgAB/wGZATMBAAH/AZkBZgEAAf8CmQEAAf8BmQHM - AQAB/wGZAf8BAAH/AcwCAAH/AcwBMwEAAf8BzAFmAQAB/wHMAZkBAAH/AswBAAH/AcwB/wEAAv8BMwEA - AcwB/wFmAQAC/wGZAQAC/wHMAQACZgH/AQABZgH/AWYBAAFmAv8BAAH/AmYBAAH/AWYB/wEAAv8BZgEA - ASEBAAGlAQADXwEAA3cBAAOGAQADlgEAA8sBAAOyAQAD1wEAA90BAAPjAQAD6gEAA/EBAAP4AQAB8AH7 - Af8BAAGkAqABAAOAAwAB/wIAAf8DAAL/AQAB/wMAAf8BAAH/AQAC/wIAA/9KAAG1BWY6AAG1Af8B9AIZ - AWY6AAG7Af8BvAHvAfQBZjgAAf8B8wG7BP8BZjEAAbUFZgHzAc8BiwLWAdUCtAGtMQABtQH/AfQCGQFm - AYsB8gEAAdYBCQHcAdYB1QGtMQABuwH/AbwB7wH0AWYB/wIAAtYB1QK0Aa0xAAG7BP8BZgH0OQAC1gHV - ArQBrQG0Aa4B9AEAAbUFZjAAAdYBCQHcAdYB1QGtAf8B8wHPAYsBtQH/AfQCGQFmMAAC1gHVArQBrQIA - Af8B8gG7Af8BvAHvAfQBZjoAAbsE/wFmOgAC1gHVArQBrToAAdYBCQHcAdYB1QGtOgAC1gHVArQBrTAA - AUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAL/BgAB/wGBBgAB/wGBBgAB/wGB - BgAB/gEBBwABAQcAAYEGAAEBAYEGAAEBAf8HAAFADgABAwcAAf8BwAYAAf8BwAYAAf8BwAYAAf8BwBwA - Cw== - - - - buttonOK - - - $this - - - $this - - - 1 - - - 75, 23 - - - System.Windows.Forms.TreeView, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 5 - System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 6, 13 - - - Cancel + + FormSelectTemplate - - Select Concept Template + + System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True - - - 17, 17 - \ No newline at end of file diff --git a/FormatCSC.cs b/FormatCSC.cs index 6dd52fca..03b53114 100644 --- a/FormatCSC.cs +++ b/FormatCSC.cs @@ -20,12 +20,13 @@ internal class FormatCSC : IDisposable, string m_filename; DocProject m_project; DocDefinition m_definition; + Dictionary m_map; /// /// Generates folder of definitions /// /// - public static void GenerateCode(DocProject project, string path) + public static void GenerateCode(DocProject project, string path, Dictionary map) { foreach (DocSection docSection in project.Sections) { @@ -37,6 +38,7 @@ public static void GenerateCode(DocProject project, string path) { format.Instance = project; format.Definition = docType; + format.Map = map; format.Save(); } } @@ -47,11 +49,20 @@ public static void GenerateCode(DocProject project, string path) { format.Instance = project; format.Definition = docType; + format.Map = map; format.Save(); } } } } + + // save properties + using(FormatCSC format = new FormatCSC(path + @"\pset.cs")) + { + format.Instance = project; + format.Map = map; + format.Save(); + } } public FormatCSC() @@ -91,6 +102,18 @@ public DocDefinition Definition } } + public Dictionary Map + { + get + { + return this.m_map; + } + set + { + this.m_map = value; + } + } + public void Save() { string dirpath = System.IO.Path.GetDirectoryName(this.m_filename); @@ -112,7 +135,7 @@ public void Save() { writer.WriteLine("namespace BuildingSmart.IFC"); writer.WriteLine("{"); - + if (this.m_definition is DocDefined) { DocDefined docDefined = (DocDefined)this.m_definition; @@ -122,7 +145,7 @@ public void Save() else if (this.m_definition is DocSelect) { DocSelect docSelect = (DocSelect)this.m_definition; - string text = this.Indent(this.FormatSelect(docSelect, null, null), 1); + string text = this.Indent(this.FormatSelect(docSelect, this.m_map, null), 1); writer.WriteLine(text); } else if (this.m_definition is DocEnumeration) @@ -134,7 +157,7 @@ public void Save() else if (this.m_definition is DocEntity) { DocEntity docEntity = (DocEntity)this.m_definition; - string text = this.Indent(this.FormatEntity(docEntity, null, null), 1); + string text = this.Indent(this.FormatEntity(docEntity, this.m_map, null), 1); writer.WriteLine(docEntity); } @@ -156,7 +179,10 @@ public void Save() foreach (DocPropertySet docPset in docSchema.PropertySets) { writer.WriteLine(" /// "); - writer.WriteLine(" /// " + docPset.Documentation.Replace('\r', ' ').Replace('\n', ' ')); + if (docPset.Documentation != null) + { + writer.WriteLine(" /// " + docPset.Documentation.Replace('\r', ' ').Replace('\n', ' ')); + } writer.WriteLine(" /// "); writer.WriteLine(" public class " + docPset.Name + " : Pset"); @@ -165,7 +191,10 @@ public void Save() foreach (DocProperty docProperty in docPset.Properties) { writer.WriteLine(" /// "); - writer.WriteLine(" /// " + docProperty.Documentation.Replace('\r', ' ').Replace('\n', ' ')); + if (docProperty.Documentation != null) + { + writer.WriteLine(" /// " + docProperty.Documentation.Replace('\r', ' ').Replace('\n', ' ')); + } writer.WriteLine(" /// "); switch (docProperty.PropertyType) @@ -175,20 +204,19 @@ public void Save() break; case DocPropertyTemplateTypeEnum.P_ENUMERATEDVALUE: - // record enum for later { - string[] parts = docProperty.SecondaryDataType.Split(':'); - if (parts.Length == 2) + string typename = docProperty.SecondaryDataType; + if (typename == null) + { + typename = docProperty.PrimaryDataType; // older version + } + int colon = typename.IndexOf(':'); + if(colon > 0) { - string typename = parts[0]; - if (!mapEnums.ContainsKey(typename)) - { - string[] enums = parts[1].Split(','); - mapEnums.Add(typename, enums); - - writer.WriteLine(" public " + typename + " " + docProperty.Name + " { get { return this.GetValue<" + typename + ">(\"" + docProperty.Name + "\"); } set { this.SetValue<" + typename + ">(\"" + docProperty.Name + "\", value); } }"); - } + // backwards compatibility + typename = typename.Substring(0, colon); } + writer.WriteLine(" public " + typename + " " + docProperty.Name + " { get { return this.GetValue<" + typename + ">(\"" + docProperty.Name + "\"); } set { this.SetValue<" + typename + ">(\"" + docProperty.Name + "\", value); } }"); } break; @@ -225,9 +253,58 @@ public void Save() writer.WriteLine(" }"); writer.WriteLine(); } - } - } + foreach (DocPropertyEnumeration docEnum in docSchema.PropertyEnums) + { + writer.WriteLine(" /// "); + writer.WriteLine(" /// "); + writer.WriteLine(" public enum " + docEnum.Name); + writer.WriteLine(" {"); + + int counter = 0; + foreach (DocPropertyConstant docConst in docEnum.Constants) + { + int num = 0; + string id = docConst.Name.ToUpper().Trim('.').Replace('-', '_'); + switch (id) + { + case "OTHER": + num = -1; + break; + + case "NOTKNOWN": + num = -2; + break; + + case "UNSET": + num = 0; + break; + + default: + counter++; + num = counter; + break; + } + + if (id[0] >= '0' && id[0] <= '9') + { + id = "_" + id; // avoid numbers + } + + writer.WriteLine(" /// "); + writer.WriteLine(" " + docConst.Name + " = " + num + ","); + } + + writer.WriteLine(" }"); + writer.WriteLine(); + } + + //writer.WriteLine("}"); + + + + +#if false // enums foreach (string strEnum in mapEnums.Keys) { @@ -277,6 +354,9 @@ public void Save() } writer.WriteLine("}"); +#endif + } + } } } } @@ -329,8 +409,15 @@ public string FormatEntity(DocEntity docEntity, Dictionary ma foreach (DocAttribute docAttribute in docEntity.Attributes) { bool inscope = false; - - included.TryGetValue(docAttribute, out inscope); + + if (included != null) + { + included.TryGetValue(docAttribute, out inscope); + } + else + { + inscope = true; + } if(docAttribute.Inverse == null) { @@ -503,7 +590,7 @@ public string FormatDefined(DocDefined docDefined) "}"; } - public string FormatDefinitions(DocProject docProject, Dictionary map, Dictionary included) + public string FormatDefinitions(DocProject docProject, DocPublication docPublication, Dictionary map, Dictionary included) { StringBuilder sb = new StringBuilder(); foreach (DocSection docSection in docProject.Sections) diff --git a/FormatCSV.cs b/FormatCSV.cs index f9b0d50f..94db92c1 100644 --- a/FormatCSV.cs +++ b/FormatCSV.cs @@ -314,9 +314,20 @@ private void WriteList(System.IO.StreamWriter writer, SortedList 0 && docApplicable[0] != null) + { + docApp = this.m_project.GetDefinition(docApplicable[0].BaseDefinition) as DocEntity; + } foreach (DocProperty docProp in docPset.Properties) { - WriteItem(writer, docProp, 1, docEntity.Name); + // filter out leaf properties defined at common pset (e.g. Reference, Status) + DocProperty docSuper = this.m_project.FindProperty(docProp.Name, docApp); + if (docSuper == docProp || docSuper == null) + { + WriteItem(writer, docProp, 1, docEntity.Name); + } } } } diff --git a/FormatEXP.cs b/FormatEXP.cs index b45bbe09..f28aed94 100644 --- a/FormatEXP.cs +++ b/FormatEXP.cs @@ -188,11 +188,7 @@ public void Save() writer.BaseStream.SetLength(0); } - string schemaid = "IFC4"; - if(!String.IsNullOrEmpty(this.m_project.Sections[0].Code)) - { - schemaid = this.m_project.Sections[0].Code; - } + string schemaid = this.m_project.GetSchemaIdentifier(); string org = "buildingSMART International Limited"; writer.Write("" + @@ -221,7 +217,7 @@ public void Save() "\r\n" + "*)\r\n" + "\r\n"); - writer.WriteLine("SCHEMA " + schemaid + ";"); + writer.WriteLine("SCHEMA " + schemaid.ToUpper() + ";"); writer.WriteLine(); // stripped optional applicable if MVD is used @@ -325,7 +321,14 @@ public void Save() SortedList sortSelect = new SortedList(this); foreach (DocSelectItem docSelectItem in docSelect.Selects) { - sortSelect.Add(docSelectItem.Name, docSelectItem); + if (!sortSelect.ContainsKey(docSelectItem.Name)) + { + sortSelect.Add(docSelectItem.Name, docSelectItem); + } + else + { + this.ToString(); + } } int nSelect = 0; diff --git a/FormatHTM.cs b/FormatHTM.cs index aa2de18b..d85e997b 100644 --- a/FormatHTM.cs +++ b/FormatHTM.cs @@ -278,7 +278,7 @@ public string FormatExpression(string expression) for (int i = 0; i < escaped.Length; i++) { char ch = escaped[i]; - if (Char.IsLetterOrDigit(ch)) + if (Char.IsLetterOrDigit(ch) && i < escaped.Length-1) { if (iStart == -1) { @@ -291,6 +291,20 @@ public string FormatExpression(string expression) { // end: write buffer string identifier = escaped.Substring(iStart, i - iStart); + + // uppercase for expressions? hack + if (identifier.StartsWith("IFC", StringComparison.OrdinalIgnoreCase)) + { + foreach(string s in this.m_mapEntity.Keys) // slow + { + if (s.Equals(identifier, StringComparison.InvariantCultureIgnoreCase)) + { + identifier = s; + break; + } + } + } + if (this.m_mapEntity.ContainsKey(identifier)) { string fmt = FormatDefinition(identifier); @@ -658,6 +672,11 @@ private void WriteAttributeAggregation(DocAttribute attr) // drill in docAggregation = docAggregation.AggregationAttribute; + + if(docAggregation != null) + { + this.m_writer.Write(" "); + } } } @@ -699,7 +718,8 @@ private void WriteExpressAggregation(DocAttribute attr) } else { - this.m_writer.Write(BEGIN_KEYWORD + "OF" + END_KEYWORD + " "); + this.m_writer.Write("[0:?] OF "); + //this.m_writer.Write(BEGIN_KEYWORD + "OF" + END_KEYWORD + " "); } if ((docAggregation.AggregationFlag & 2) != 0) @@ -713,8 +733,14 @@ private void WriteExpressAggregation(DocAttribute attr) } } - public void WriteSummaryHeader(string caption, bool expanded) + public void WriteSummaryHeader(string caption, bool expanded, DocPublication docPublication) { + if(docPublication.ISO) + { + this.m_writer.WriteLine("

    " + caption + "

    "); + return; + } + //this.m_writer.Write("
    "); this.m_writer.Write(""); } - public void WriteSummaryFooter() + public void WriteSummaryFooter(DocPublication docPublication) { + if (docPublication != null && docPublication.ISO) + { + this.m_writer.WriteLine("

    "); + return; + } + this.m_writer.WriteLine(""); } - public void WriteExpressEntitySpecification(DocEntity entity, bool suppresshistory, bool isoformat) + public void WriteExpressEntitySpecification(DocEntity entity, bool suppresshistory, DocPublication docPublication) { - this.WriteSummaryHeader("EXPRESS Specification", false); + this.WriteSummaryHeader("EXPRESS Specification", false, docPublication); this.m_writer.WriteLine("
    "); // new: comment tag - if (isoformat) + if (docPublication != null && docPublication.ISO) { this.WriteExpressLine(0, "*)"); } @@ -743,7 +775,7 @@ public void WriteExpressEntitySpecification(DocEntity entity, bool suppresshisto this.WriteExpressEntity(entity); // Comment tag for ISO STEP documentation requirements - if (isoformat) + if (docPublication != null && docPublication.ISO) { this.WriteExpressLine(0, "(*"); } @@ -754,6 +786,7 @@ public void WriteExpressEntitySpecification(DocEntity entity, bool suppresshisto this.m_writer.WriteLine("
    "); +#if false // no longer included if (isoformat) { // inheritance @@ -770,8 +803,9 @@ public void WriteExpressEntitySpecification(DocEntity entity, bool suppresshisto this.m_writer.WriteLine(""); } +#endif - this.WriteSummaryFooter(); + this.WriteSummaryFooter(docPublication); } public void WriteExpressEntity(DocEntity entity) @@ -889,14 +923,20 @@ public void WriteExpressEntity(DocEntity entity) this.WriteExpressHeader(2); foreach (DocWhereRule docWhere in entity.WhereRules) { + if(docWhere.Name.Equals("AllowedRelatedElements")) + { + this.ToString(); + } + // markup any references to functions... - string html = FormatExpression(docWhere.Expression); + //string html = FormatExpression(docWhere.Expression); this.m_writer.Write("  "); this.m_writer.Write(docWhere.Name); this.m_writer.Write(" : "); - this.m_writer.Write(html); - this.WriteFormatted(docWhere.Expression); + //this.m_writer.Write(html); + this.WriteExpression(docWhere.Expression); + //this.WriteFormatted(docWhere.Expression); this.m_writer.Write(";
    "); } @@ -939,22 +979,22 @@ private void WriteExpressInheritance(DocEntity entity, DocEntity treeleaf) WriteExpressAttributes(entity, treeleaf); } - public void WriteExpressTypeAndDocumentation(DocType type, bool suppresshistory, bool isoformat) + public void WriteExpressTypeAndDocumentation(DocType type, bool suppresshistory, DocPublication docPublication) { - this.WriteSummaryHeader("EXPRESS Specification", false); + this.WriteSummaryHeader("EXPRESS Specification", false, docPublication); this.m_writer.WriteLine("
    "); this.WriteExpressHeader(2); // Per ISO doc requirement, comment tag - if (isoformat) + if (docPublication.ISO) { this.WriteExpressLine(0, "*)"); } WriteExpressType(type); - if (isoformat) + if (docPublication.ISO) { this.WriteExpressLine(0, "(*"); } @@ -966,7 +1006,7 @@ public void WriteExpressTypeAndDocumentation(DocType type, bool suppresshistory, WriteExpressDiagram(type); this.m_writer.WriteLine("
    "); - this.WriteSummaryFooter(); + this.WriteSummaryFooter(docPublication); } @@ -1271,7 +1311,21 @@ public void WriteAlphabeticalListing(string caption, string path, string name DocObject obj = this.m_mapEntity[s]; if (obj is T && (this.m_included == null || this.m_included.ContainsKey(obj))) { - alphaEntity.Add(s, (T)obj); + // don't add hidden psets + bool add = true; + if(obj is DocPropertySet) + { + DocPropertySet docPset = (DocPropertySet)obj; + if(!docPset.IsVisible()) + { + add = false; + } + } + + if (add) + { + alphaEntity.Add(s, (T)obj); + } } } @@ -1799,11 +1853,11 @@ public void WriteDocumentationMarkup(string content, DocObject current, DocPubli string imgold = content.Substring(s + 1, t - s - 1); imgold = imgold.Substring(imgold.LastIndexOf('/') + 1); string source = Properties.Settings.Default.InputPathGeneral + "\\" + imgold; - string target = Properties.Settings.Default.OutputPath + "\\" + DocumentationISO.MakeLinkName(docPublication) + "\\figures\\" + imgold; + string target = Properties.Settings.Default.OutputPath + "\\" + DocumentationISO.MakeLinkName(docPublication) + "\\html\\figures\\" + imgold; if (current is DocExample) { source = Properties.Settings.Default.InputPathExamples + "\\" + imgold; - target = Properties.Settings.Default.OutputPath + "\\" + DocumentationISO.MakeLinkName(docPublication) + "\\figures\\examples\\" + imgold; + target = Properties.Settings.Default.OutputPath + "\\" + DocumentationISO.MakeLinkName(docPublication) + "\\html\\figures\\examples\\" + imgold; } target = target.ToLower(); @@ -2074,7 +2128,7 @@ public void WriteChangeItem(DocChangeAction docChange, int level) DocObject docobj = null; if (this.m_mapSchema.TryGetValue(docChange.Name, out schema) && this.m_mapEntity.TryGetValue(docChange.Name, out docobj) && (this.m_included == null || this.m_included.ContainsKey(docobj))) { - if (docChange.Name.StartsWith("Pset_")) + if (docChange.Name.StartsWith("Pset_") || docChange.Name.StartsWith("PEnum_")) { string hyperlink = @"../../../schema/" + schema.ToLower() + @"/pset/" + docChange.Name.ToLower() + ".htm"; sb.Append("" + docChange.Name + ""); @@ -2373,7 +2427,7 @@ public int Compare(string x, string y) #endregion - internal void WriteProperties(List list) + internal void WriteProperties(List list, DocProject docProject, DocEntity docEntity, IList locales) { if (list.Count == 0) return; @@ -2381,8 +2435,21 @@ internal void WriteProperties(List list) this.WriteLine(""); this.WriteLine(""); - foreach (DocProperty docprop in list) + foreach (DocProperty docpropdecl in list) { + // find property defined at supertype (e.g. Pset_ElementCommon.Reference) + DocProperty docprop = docProject.FindProperty(docpropdecl.Name, docEntity); + string suffix = ""; + if (docprop != null && docprop != docpropdecl) + { + suffix = "*"; + //System.Diagnostics.Debug.WriteLine("FormatHTM.WriteProperties() - overridden property: " + docEntity.Name + " - " + docprop.Name); + } + else + { + docprop = docpropdecl; + } + string datatype = docprop.PrimaryDataType; if (datatype == null) { @@ -2410,43 +2477,18 @@ internal void WriteProperties(List list) this.WriteDefinition(docprop.SecondaryDataType.Trim().Replace(",", ", ").Replace(":", ": ")); } } - this.WriteLine(""); - - bool showdefaultdesc = true; - docprop.Localization.Sort(); - - if (docprop.Localization.Count > 0) + if(suffix != null) { - this.WriteLine("
    NameTypeDescription
    "); - - // english by default - //this.WriteLine("
    " + docprop.Name + ": " + docprop.Documentation + "
    "); - foreach (DocLocalization doclocal in docprop.Localization) - { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; - string localid = doclocal.Locale.Substring(0, 2).ToLower(); - - if (String.IsNullOrEmpty(doclocal.Documentation) && localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) - { - localdesc = docprop.Documentation; - showdefaultdesc = false; - } - - this.WriteLine(""); - } - this.WriteLine("
    " + localname + "" + localdesc + "
    "); + this.Write(suffix); } + this.WriteLine(""); - if(showdefaultdesc) - { - this.WriteLine(docprop.Documentation); // locale-generic - } + this.WriteLocalizationTable(docprop, locales); // up 3 levels for images // complex properties if (docprop.Elements != null) { - WriteProperties(docprop.Elements); + WriteProperties(docprop.Elements, docProject, docEntity, locales); } this.WriteLine(""); @@ -2475,6 +2517,9 @@ internal void WriteLinkTo(string identifier, int levels) up += "../"; } + // jira issue... make configurable + this.WriteLine("

    \"Report  Report an issue

    "); + this.WriteLine("

    \"Link  Link to this page

    "); } @@ -2541,18 +2586,10 @@ internal void WriteComputerListing(string name, string code, int iCodeView, DocP { int iAnnex = -1; - string codexml = code; - if (codexml == "ifc4") - { - codexml = "ifcXML4"; - } - string linkprefix = code; - string linkprefixxml = codexml; if (iCodeView == 0) { linkprefix = "annex-a/default/" + linkprefix; - linkprefixxml = "annex-a/default/" + linkprefixxml; } if (iCodeView > 0) @@ -2567,14 +2604,13 @@ internal void WriteComputerListing(string name, string code, int iCodeView, DocP string key2 = "";// "A." + iCodeView + ".2"; string key3 = "";// "A." + iCodeView + ".3"; - if (iCodeView > 0)//== 0 || Properties.Settings.Default.ConceptTables) + if (iCodeView > 0) { // write table linking formatted listings this.Write( "

    " + key1 + " Schema definitions

    " + "

    This schema is defined according to formats as follows.

    " + - "

     

    " + - "" + + "
    " + "" + "" + "" + @@ -2604,8 +2640,8 @@ internal void WriteComputerListing(string name, string code, int iCodeView, DocP this.Write( "" + "" + - "" + - "" + + "" + + "" + ""); } } @@ -2618,8 +2654,7 @@ internal void WriteComputerListing(string name, string code, int iCodeView, DocP this.Write( "

    " + key2 + " Property and quantity templates

    " + "

    Property sets and quantity sets are defined according to formats as follows.

    " + - "

     

    " + - "
    " + desc + "" + code + "." + ext + "" + code + "." + ext + ".htm" + code + "." + ext + "" + code + "." + ext + ".htm
    " + + "
    " + "" + "" + "" + @@ -2633,37 +2668,40 @@ internal void WriteComputerListing(string name, string code, int iCodeView, DocP "" + "" + "" + - "" + + ""); #if false "" + "" + "" + "" + - "" + + "" #endif - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + - "" + + if(!docPublication.ISO) + { + this.Write("" + + "" + + "" + + "" + + "" + + + "" + + "" + + "" + + "" + + ""); + } - "
    IFC-SPF property and quantity templates" + code + ".ifc 
    IFC-XML property and quantity templates" + code + ".ifcxml 
    PSD-XML property templates in ZIP file" + code + "-psd.zip 
    QTO-XML quantity templates in ZIP file" + code + "-qto.zip 
    PSD-XML property templates in ZIP file" + code + "-psd.zip 
    QTO-XML quantity templates in ZIP file" + code + "-qto.zip 
    "); + this.Write(""); } - if (iCodeView > 0) + if (iCodeView > 0 && !docPublication.ISO) // don't provide mvdXML for ISO { this.Write( "

    " + key3 + " Model view definition

    " + "

    Model view definitions are defined according to formats as follows.

    " + - "

     

    " + - "" + + "
    " + "" + "" + "" + @@ -2674,12 +2712,12 @@ internal void WriteComputerListing(string name, string code, int iCodeView, DocP "" + "" + "" + - "" + + "" + "" + "" + "" + "" + - "" + + "" + "" + "" + "
    MVD-XML model view definitions" + code + ".mvdxml" + code + ".mvdxml 
    EXPRESS XSD configuration" + code + ".xml" + code + ".xml 
    "); @@ -2729,28 +2767,123 @@ internal void WriteDiagramListing(DocSection docSection, int iSection, DocPublic this.WriteFooter(docPublication.Footer); } - public void WriteLocalizedNames(DocDefinition entity) + public void WriteLocalizationSection(DocObject entity, IList locales, DocPublication docPublication) { + if (locales == null) + return; + // localization - this.WriteLine("
    "); - this.WriteLine("Natural language names"); + this.WriteSummaryHeader("Natural language names", true, docPublication); + + this.WriteLine(""); + + if (entity.Localization.Count > 0) + { + this.WriteLine("
    "); + entity.Localization.Sort(); + foreach (DocLocalization doclocal in entity.Localization) + { + string localname = doclocal.Name; + + string localid = doclocal.Locale.Substring(0, 2).ToLower(); + if (locales.Contains(localid)) + { + this.WriteLine(""); + } + } + this.WriteLine("
    " + localname + "
    "); + } + + this.WriteSummaryFooter(docPublication); + } + + public void WriteLocalizationTable(DocObject entity, IList locales) + { + string defaultdesc = entity.Documentation; + bool tableopen = false; + if (entity.Localization.Count > 0) + { + entity.Localization.Sort(); + foreach (DocLocalization doclocal in entity.Localization) + { + string localname = doclocal.Name; + string localdesc = doclocal.Documentation; + + string localid = doclocal.Locale.Substring(0, 2).ToLower(); + if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) + { + localdesc = entity.Documentation; + defaultdesc = entity.Documentation; + } + + if (locales != null && locales.Contains(localid)) + { + if(!tableopen) + { + this.WriteLine(""); + tableopen = true; + } + this.WriteLine(""); + defaultdesc = null; + } + } + + if (tableopen) + { + this.WriteLine("
    " + localname + "" + localdesc + "
    "); + } + } + + if (defaultdesc != null) + { + this.WriteLine(defaultdesc); + } +#if false + entity.Localization.Sort(); // ensure sorted + foreach (DocLocalization doclocal in entity.Localization) + { + if (doclocal.Locale != null && doclocal.Locale.Length > 2) + { + string localname = doclocal.Name; + string localdesc = doclocal.Documentation; + + string localid = doclocal.Locale.Substring(0, 2).ToLower(); + if (locales.Contains(localid)) + { + if (localid.Equals("en", StringComparison.InvariantCultureIgnoreCase) && localdesc == null) + { + localdesc = entity.Documentation; + } + + this.WriteLine(" " + localname + ": " + localdesc + ""); + } + } + } + + this.WriteLine(""); +#endif + /* old */ + /* this.WriteLine(""); entity.Localization.Sort(); foreach (DocLocalization doclocal in entity.Localization) { - string localname = doclocal.Name; - string localdesc = doclocal.Documentation; string localid = doclocal.Locale.Substring(0, 2).ToLower(); - - if (!String.IsNullOrEmpty(localdesc)) + if (locales.Contains(localid)) { - localdesc = ": " + localdesc; - } + string localname = doclocal.Name; + string localdesc = doclocal.Documentation; - this.WriteLine(""); + if (!String.IsNullOrEmpty(localdesc)) + { + localdesc = ": " + localdesc; + } + + this.WriteLine(""); + } } this.WriteLine("
    \""" + localname + "" + localdesc + "
    \""" + localname + "" + localdesc + "
    "); - this.WriteLine("
    "); + */ } public void WriteEntityInheritance(DocEntity entity, DocEntity treeleaf, DocModelView[] views, Dictionary[] viewmap, DocPublication docPublication, ref int sequence) @@ -2886,17 +3019,14 @@ public void WriteEntityAttributes(DocEntity entity, DocEntity treeleaf, DocModel if (this.m_included == null || this.m_included.ContainsKey(attr)) { - if(attr.GetAggregation() != DocAggregationEnum.NONE) + if(attr.IsOptional) { - this.WriteAttributeAggregation(attr); + this.m_writer.Write("? "); } - else if ((attr.AttributeFlags & 1) != 0) - { - this.m_writer.Write("[0:1]"); - } - else + + if(attr.GetAggregation() != DocAggregationEnum.NONE) { - this.m_writer.Write("[1:1]"); + this.WriteAttributeAggregation(attr); } } @@ -2938,20 +3068,16 @@ public void WriteEntityAttributes(DocEntity entity, DocEntity treeleaf, DocModel this.m_writer.Write(""); - if (attr.GetAggregation() != DocAggregationEnum.NONE) + if(attr.IsOptional) { - this.WriteAttributeAggregation(attr); + this.m_writer.Write("? "); } - else if ((attr.AttributeFlags & 1) != 0) - { - this.m_writer.Write("[0:1]"); - } - else + + if (attr.GetAggregation() != DocAggregationEnum.NONE) { - this.m_writer.Write("[1:1]"); + this.WriteAttributeAggregation(attr); } - this.m_writer.Write(""); this.WriteDocumentationMarkup(attr.Documentation, entity, docPublication); this.m_writer.Write(""); @@ -3011,17 +3137,14 @@ public void WriteEntityAttributes(DocEntity entity, DocEntity treeleaf, DocModel this.m_writer.Write(""); //this.m_writer.Write(" := "); - if (attr.GetAggregation() != DocAggregationEnum.NONE) - { - this.WriteAttributeAggregation(attr); - } - else if ((attr.AttributeFlags & 1) != 0) + if (attr.IsOptional) { - this.m_writer.Write("[0:1]"); + this.m_writer.Write("? "); } - else + + if (attr.GetAggregation() != DocAggregationEnum.NONE) { - this.m_writer.Write("[1:1]"); + this.WriteAttributeAggregation(attr); } this.m_writer.Write(""); @@ -3057,12 +3180,22 @@ internal void WriteTerm(DocTerm docRef) this.WriteLine(""); } - internal void WriteChangeLog(DocDefinition entity, DocProject docProject) + internal void WriteChangeLog(DocObject entity, List listChangeSets, DocPublication docPublication) { Dictionary mapChange = new Dictionary(); - foreach (DocChangeSet docChangeSet in docProject.ChangeSets) + foreach (DocChangeSet docChangeSet in listChangeSets) { - foreach (DocChangeAction docChangeSection in docChangeSet.ChangesEntities) + List listActions = docChangeSet.ChangesEntities; + if(entity is DocPropertySet || entity is DocPropertyEnumeration) + { + listActions = docChangeSet.ChangesProperties; + } + else if(entity is DocQuantitySet) + { + listActions = docChangeSet.ChangesQuantities; + } + + foreach (DocChangeAction docChangeSection in listActions) { foreach (DocChangeAction docChangeSchema in docChangeSection.Changes) { @@ -3099,8 +3232,7 @@ internal void WriteChangeLog(DocDefinition entity, DocProject docProject) if (mapChange.Count > 0) { - this.WriteLine("
    "); - this.WriteLine("Change log"); + this.WriteSummaryHeader("Change log", true, docPublication); this.WriteLine(""); this.WriteLine("" + @@ -3120,7 +3252,7 @@ internal void WriteChangeLog(DocDefinition entity, DocProject docProject) this.WriteLine("
    "); - this.WriteLine("
    "); + this.WriteSummaryFooter(docPublication); } diff --git a/FormatJAV.cs b/FormatJAV.cs index a5fcda0a..31e15445 100644 --- a/FormatJAV.cs +++ b/FormatJAV.cs @@ -485,7 +485,7 @@ public string FormatDefined(DocDefined docDefined) return "/* " + docDefined.Name + " : " + docDefined.DefinedType + " (Java does not support structures, so usage of defined types are inline for efficiency.) */\r\n"; } - public string FormatDefinitions(DocProject docProject, Dictionary map, Dictionary included) + public string FormatDefinitions(DocProject docProject, DocPublication docPublication, Dictionary map, Dictionary included) { StringBuilder sb = new StringBuilder(); foreach (DocSection docSection in docProject.Sections) diff --git a/FormatOWL.cs b/FormatOWL.cs index 4ae594a0..986f27bb 100644 --- a/FormatOWL.cs +++ b/FormatOWL.cs @@ -723,7 +723,7 @@ public string createListClass(string defined) return sb.ToString(); } - public string FormatDefinitions(DocProject docProject, Dictionary map, Dictionary included) + public string FormatDefinitions(DocProject docProject, DocPublication docPublication, Dictionary map, Dictionary included) { // clear containers listPropertiesOutput.Clear(); @@ -733,11 +733,11 @@ public string FormatDefinitions(DocProject docProject, Dictionary ."); diff --git a/FormatPNG.cs b/FormatPNG.cs index 63f86cce..ab6c7354 100644 --- a/FormatPNG.cs +++ b/FormatPNG.cs @@ -66,8 +66,8 @@ private static void DrawAttribute( DocModelView docView, DocModelRuleAttribute ruleAttribute, Dictionary map, - int offset, - Dictionary layout, + int offset, + Dictionary layout, DocProject docProject, DocSchema docSchema, SEntity instance) @@ -356,8 +356,8 @@ private static void DrawEntity( DocModelView docView, DocTemplateDefinition docTemplate, DocModelRuleEntity docRule, - Dictionary map, - Dictionary layout, + Dictionary map, + Dictionary layout, DocProject docProject, DocSchema docSchema, object instance) @@ -489,7 +489,14 @@ private static void DrawEntity( // record rectangle if (layout != null) { - layout.Add(new Rectangle(x, y, CX - DX, CY + CY * listAttr.Count), docRule); + try + { + layout.Add(new Rectangle(x, y, CX - DX, CY + CY * listAttr.Count), docRule); + } + catch + { + //... + } } SortedList> mapAttribute = new SortedList>(); @@ -646,6 +653,61 @@ private static void DrawEntity( int offset = -mapAttribute.Values.Count / 2; + if(docRule != null) + { + offset -= docRule.References.Count / 2; + + foreach (DocTemplateDefinition dtdRef in docRule.References) + { + int targetY = lanes[lane + 1] + FormatPNG.Border; + + if (g != null) + { + // draw the template box + g.FillRectangle(Brushes.Blue, x + CX, targetY, CX - DX, CY); + g.DrawRectangle(Pens.Blue, x + CX, targetY, CX - DX, CY); + using (Font font = new Font(FontFamily.GenericSansSerif, 8.0f)) + { + g.DrawString(dtdRef.Name, font, Brushes.White, x + CX, targetY); + } + + // draw the line connecting entity to the template + int dest = FormatPNG.Border; + if (lanes.Count > lane + 1) + { + dest = lanes[lane + 1] + FormatPNG.Border; + } + + int x0 = x + CX - DX; + int y0 = y + CY / 2; + int x1 = x + CX; + int y1 = dest + CY / 2; + int xM = x0 + DX / 2 - offset * 2; + + g.DrawLine(Pens.Blue, x0, y0, xM, y0); + g.DrawLine(Pens.Blue, xM, y0, xM, y1); + g.DrawLine(Pens.Blue, xM, y1, x1, y1); + + } + + // record rectangle + if (layout != null) + { + layout.Add(new Rectangle(x + CX, targetY, CX - DX, CY), dtdRef); + } + + // increment lane offset for all lanes + int tempminlane = targetY + CY * 2; + int i = lane + 1; + if (lanes[i] < tempminlane) + { + lanes[i] = tempminlane; + } + + offset++; + } + } + DocTemplateDefinition lastTemplate = null; foreach (List listSort in mapAttribute.Values) { @@ -721,7 +783,6 @@ private static void DrawEntity( { lanes[lane] = minlane; } - } /// @@ -734,7 +795,7 @@ private static void DrawEntity( /// /// /// - internal static Image CreateConceptDiagram(DocEntity docEntity, DocModelView docView, Dictionary map, Dictionary layout, DocProject docProject, SEntity instance) + internal static Image CreateConceptDiagram(DocEntity docEntity, DocModelView docView, Dictionary map, Dictionary layout, DocProject docProject, SEntity instance) { DocSchema docSchema = docProject.GetSchemaOfDefinition(docEntity); @@ -789,7 +850,7 @@ internal static Image CreateConceptDiagram(DocEntity docEntity, DocModelView doc /// /// /// - internal static Image CreateTemplateDiagram(DocTemplateDefinition docTemplate, Dictionary map, Dictionary layout, DocProject docProject, SEntity instance) + internal static Image CreateTemplateDiagram(DocTemplateDefinition docTemplate, Dictionary map, Dictionary layout, DocProject docProject, SEntity instance) { DocObject docTarget = null; if (docTemplate.Type == null || !map.TryGetValue(docTemplate.Type, out docTarget) || !(docTarget is DocEntity)) @@ -1208,9 +1269,33 @@ internal static Image CreateSchemaDiagram(DocSchema docSchema, Dictionary ptA.X) + { + ptB.X -= cap; + } + else if (ptB.X < ptA.X) + { + ptB.X += cap; + } + if (ptB.Y > ptA.Y) + { + ptB.Y -= cap; + } + else if (ptB.Y < ptA.Y) + { + ptB.Y += cap; + } + + } + + g.DrawLine(penBlue, ptA, ptB); } } } @@ -1430,7 +1515,7 @@ private static int DrawEndCap(Graphics g, Point ptA, Point ptB, DiagramFormat fo // filled if composition... } - return rad; + return rad * 2; } private static void DrawTree(Graphics g, DocLine docSub, double factor, Point ptLast, DiagramFormat format) @@ -1441,6 +1526,8 @@ private static void DrawTree(Graphics g, DocLine docSub, double factor, Point pt float penwidth = 0.0f; if(format == DiagramFormat.ExpressG) { + // draw circle at subtype + penwidth = 3.0f; } else if (format == DiagramFormat.UML) @@ -1481,6 +1568,11 @@ private static void DrawTree(Graphics g, DocLine docSub, double factor, Point pt g.DrawLine(pen, ptA, ptB); g.DrawLine(pen, ptB, ptC); + + if (docSub.Tree.Count == 0 && i == docSub.DiagramLine.Count - 2 && format == DiagramFormat.ExpressG) + { + DrawEndCap(g, ptB, ptC, format); + } } } } diff --git a/FormatSMF.cs b/FormatSMF.cs index 133d6b77..a22cc6e6 100644 --- a/FormatSMF.cs +++ b/FormatSMF.cs @@ -502,11 +502,6 @@ private bool WriteEntityAttributes(SEntity o) private void WriteAttribute(SEntity o, FieldInfo f, DocXsdFormat format) { - if (f.Name.Equals("ConversionFactor") && this is IfcDoc.Format.JSN.FormatJSN) - { - this.ToString(); - } - object v = f.GetValue(o); if (v == null) return; @@ -515,7 +510,7 @@ private void WriteAttribute(SEntity o, FieldInfo f, DocXsdFormat format) Type ft = f.FieldType; - if (format == null || format.XsdFormat != DocXsdFormatEnum.Attribute) + if (format == null || format.XsdFormat != DocXsdFormatEnum.Attribute || f.Name.Equals("InnerCoordIndices")) //hackhack -- need to resolve... { this.WriteOpenElement(); } @@ -527,6 +522,28 @@ private void WriteAttribute(SEntity o, FieldInfo f, DocXsdFormat format) // for nested lists, flatten; e.g. IfcBSplineSurfaceWithKnots.ControlPointList if (typeof(System.Collections.ICollection).IsAssignableFrom(ft.GetGenericArguments()[0])) { + // special case + if(f.Name.Equals("InnerCoordIndices")) //hack + { + foreach (System.Collections.ICollection innerlist in list) + { + string entname = "Seq-IfcPositiveInteger-wrapper"; // hack + this.WriteStartElementEntity(entname, null); + this.WriteOpenElement(); + foreach(object e in innerlist) + { + object ev = e.GetType().GetField("Value").GetValue(e); + + this.m_writer.Write(ev.ToString()); + this.m_writer.Write(" "); + } + this.m_writer.WriteLine(); + this.WriteEndElementEntity(entname); + } + WriteEndElementAttribute(f.Name); + return; + } + System.Collections.ArrayList flatlist = new System.Collections.ArrayList(); foreach (System.Collections.ICollection innerlist in list) { @@ -699,7 +716,33 @@ private void WriteValueWrapper(object v) } string encodedvalue = String.Empty; - if (v != null) + if (v is System.Collections.IList) + { + // IfcIndexedPolyCurve.Segments + System.Collections.IList list = (System.Collections.IList)v; + StringBuilder sb = new StringBuilder(); + foreach(object o in list) + { + if(sb.Length > 0) + { + sb.Append(" "); + } + + FieldInfo fieldValueInner = o.GetType().GetField("Value"); + if (fieldValueInner != null) + { + object vInner = fieldValueInner.GetValue(o); + sb.Append(vInner.ToString()); + } + else + { + sb.Append(o.ToString()); + } + } + + encodedvalue = sb.ToString(); + } + else if (v != null) { encodedvalue = System.Security.SecurityElement.Escape(v.ToString()); } diff --git a/FormatSML.cs b/FormatSML.cs index 48a300e0..c542e65a 100644 --- a/FormatSML.cs +++ b/FormatSML.cs @@ -212,16 +212,11 @@ protected override void WriteHeader() "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xmlns:ifc=\"" + this.m_xsdURI + "\" " + "xmlns=\"" + this.m_xsdURI + "\">"; - /* - string schema = ""; // TBD: make configurable - */ + if (this.m_markup) { - header = System.Net.WebUtility.HtmlEncode(header);// +"
    "; - schema = System.Net.WebUtility.HtmlEncode(schema);// +"
    "; + header = System.Net.WebUtility.HtmlEncode(header); + schema = System.Net.WebUtility.HtmlEncode(schema); } this.m_writer.WriteLine(header); diff --git a/FormatSPF.cs b/FormatSPF.cs index 4aa113dc..929fddbe 100644 --- a/FormatSPF.cs +++ b/FormatSPF.cs @@ -1216,6 +1216,11 @@ private System.Collections.IList ParseList(Type t, string line) m_markup.Append(strval); m_markup.Append(""); } + else if(value is System.Collections.IList) + { + // do nothing -- already formatted + this.ToString(); + } else if(value == null || value.GetType() == elemtype) // capture raw values (e.g. IfcCartesianPoint.Points, and avoid wrapped value types) { m_markup.Append(strval); @@ -1710,6 +1715,11 @@ private void ParseField(FieldInfo field, object instance, string strval) { foreach (FieldInfo fieldInverse in listField) { + if(itemSource.GetType().Name.Contains("Door") && fieldInverse.Name.Contains("InStructure")) + { + this.ToString(); + } + if (fieldInverse.DeclaringType.IsInstanceOfType(itemSource) && typeof(IList).IsAssignableFrom(fieldInverse.FieldType)) { @@ -1749,7 +1759,7 @@ private void ParseField(FieldInfo field, object instance, string strval) if (m_markup != null && this.m_parsescope == ParseScope.DataFields) { - m_markup.Append(""); + //m_markup.Append(""); } } @@ -1761,7 +1771,7 @@ public void InitHeaders(string filename, string schema) FILE_NAME hName = new FILE_NAME(); hName.Name = filename; hName.OriginatingSystem = "buildingSMART IFC Documentation Generator"; - hName.PreprocessorVersion = "buildingSMART IFCDOC 10.4"; // was "buildingSMART IFCDOC" for 2.7 and earlier; + hName.PreprocessorVersion = "buildingSMART IFCDOC 11.2"; // was "buildingSMART IFCDOC" for 2.7 and earlier; //hName.Author.Add(System.Environment.UserName); //hName.Organization.Add(System.Environment.UserDomainName); hName.Timestamp = DateTime.UtcNow; diff --git a/FormatSQL.cs b/FormatSQL.cs index 7d76a5b8..4406e2fa 100644 --- a/FormatSQL.cs +++ b/FormatSQL.cs @@ -138,7 +138,7 @@ public string FormatDefined(DocDefined docDefined) return null; // nothing to define } - public string FormatDefinitions(DocProject docProject, Dictionary map, Dictionary included) + public string FormatDefinitions(DocProject docProject, DocPublication docPublication, Dictionary map, Dictionary included) { StringBuilder sb = new StringBuilder(); foreach (DocSection docSection in docProject.Sections) @@ -222,39 +222,67 @@ public string FormatData(DocProject docProject, DocPublication docPublication, D } } + // check if there are any instances to populate table + if (included) + { + included = false; + foreach (SEntity e in instances.Values) + { + string eachname = e.GetType().Name; + if (docRoot.ApplicableEntity.IsInstanceOfType(e)) + { + included = true; + break; + } + } + } + if (included) { string table = docConcept.Items[0].GetParameterValue("Table"); string query = docConcept.Items[0].GetParameterValue("Reference"); - //if (query == null) - //{ - // query = String.Empty; - //} - - //int cap = query.IndexOf('.'); - //string typename = query.Substring(0, cap); - - // find corresponding type? - //instance.GetType().Assembly.GetType(typename); - - // query all data of given type - //... - sb.AppendLine("

    " + docConcept.Name + "

    "); sb.AppendLine(""); + List colstyles = new List(); + List colformat = new List(); + List colmaps = new List(); + // generate header row sb.AppendLine(""); foreach (DocTemplateItem docItem in docConcept.Items) { string name = docItem.GetParameterValue("Name"); - string color = docItem.GetParameterValue("Color"); - //... use color... + string disp = "#" + docItem.GetColor().ToArgb().ToString("X8"); //docItem.GetParameterValue("Color");docItem.GetParameterValue("Color"); + string expr = docItem.GetParameterValue("Reference"); + string form = docItem.GetParameterValue("Format"); + + string style = ""; + if (!String.IsNullOrEmpty(disp)) + { + style = " style=\"background-color:" + disp + ";\""; + } + colstyles.Add(style); + + string format = ""; + if (!String.IsNullOrEmpty(form)) + { + format = form; + } + colformat.Add(format); - sb.Append(""); + sb.Append(""); }; sb.AppendLine(""); @@ -264,15 +292,23 @@ public string FormatData(DocProject docProject, DocPublication docPublication, D string eachname = e.GetType().Name; if (docRoot.ApplicableEntity.IsInstanceOfType(e)) { - sb.Append(""); + bool includerow = true; + StringBuilder sbRow = new StringBuilder(); + + sbRow.Append(""); + int iCol = 0; foreach (DocTemplateItem docItem in docConcept.Items) { - sb.Append(""); + sbRow.Append(""); + } + sbRow.AppendLine(""); + + if(includerow) + { + sb.Append(sbRow.ToString()); } - sb.AppendLine(""); } } diff --git a/FormatTTL.cs b/FormatTTL.cs index 1131b019..5e9f2c6d 100644 --- a/FormatTTL.cs +++ b/FormatTTL.cs @@ -1,4 +1,4 @@ -// Name: FormatTTL.cs +// Name: FormatTTL.cs // Description: Reads/writes TTL File (RDF, compliant with ifcOWL). // Author: Pieter Pauwels // Origination: Work performed for BuildingSmart by Pieter Pauwels @@ -19,7 +19,7 @@ namespace IfcDoc { - public class FormatTTL: IDisposable, + public class FormatTTL : IDisposable, IFormatData { Stream m_stream; @@ -39,19 +39,16 @@ public class FormatTTL: IDisposable, Dictionary m_fullpropertynames = new Dictionary(); HashSet m_saved; // keeps track of entities already written, which can be referenced - - long m_nextID = 0; - public FormatTTL() : this(new System.IO.MemoryStream(), "http://ifcowl.openbimstandards.org/IFC4_ADD1") - { - } + long m_nextID = 0; public FormatTTL(Stream stream, string owlURI) { this.m_stream = stream; this.m_owlURI = owlURI; string timeLog = DateTime.Now.ToString("yyyyMMdd_HHmmss"); //h:mm:ss tt - this.m_baseURI = "http://linkedbuildingdata.net/ifc/resources" + timeLog + "/"; + this.m_baseURI = "http://linkedbuildingdata.net/ifc/resources" + timeLog + "/"; + // TWC: URIs are now dynamically configured and made consistent for all formats, so above could be updated to rely on parameters instead } private class ListObject @@ -101,7 +98,7 @@ public ObjectProperty(string domain, string originalName, string name, string se public string name; public string setorlist; //ENTITY, SET, LIST, LISTOFLIST, ARRAY || ACTUALLY, ONLY ENTITY, SET, AND LIST are available here (see FormatTTL.FormatData()) } - + /// /// The dictionary with all project instances /// @@ -112,7 +109,7 @@ public Dictionary Instances this.m_instances = value; } } - + /// /// Whether to save as HTML with hyperlinks for object references (to anchors within file) and entity references (to topics within documentation). /// @@ -127,7 +124,7 @@ public bool Markup this.m_markup = value; } } - + //WRITING ENTITIES public void Save() { @@ -136,10 +133,10 @@ public void Save() //get highest available ID and start counting from there m_nextID = m_instances.Keys.Aggregate((l, r) => l > r ? l : r); - + // pass 2: write to file -- clear save map; retain ID map //this.m_saved.Clear(); //NOT NECESSARY WHEN NOT DOING THE ABOVE FIRST RUN - + this.m_saved = new HashSet(); this.m_writer = new StreamWriter(this.m_stream); this.m_valueObjects = new Dictionary(); @@ -205,7 +202,7 @@ public void Save() this.m_writer.Flush(); } } - + private void WriteEntity(SEntity o, long ID) { string newline = "\r\n"; @@ -214,17 +211,17 @@ private void WriteEntity(SEntity o, long ID) Type t = o.GetType(); string hyperlink = "../../schema/" + t.Namespace.ToLower() + "/lexical/" + t.Name.ToLower() + "_" + ID + ".htm"; - this.WriteStartElement(t.Name+"_"+ID, hyperlink); - + this.WriteStartElement(t.Name + "_" + ID, hyperlink); + this.m_writer.Write(newline); m_indent++; Console.Out.WriteLine("\r\n--- Writing entity : " + t.Name.ToString()); Console.Out.WriteLine("-----------------------------------"); - this.WriteType("ifcowl:" + t.Name.ToString()); + this.WriteType("ifcowl:" + t.Name.ToString()); this.WriteEntityAttributes(o); Console.Out.WriteLine("--------------done---------------------"); } - + /// /// /// @@ -261,7 +258,7 @@ private void WriteEntityAttributes(SEntity o) if (isvaluelistlist || isvaluelist || ft.IsValueType) - { + { if (isvaluelistlist) { System.Collections.IList list = (System.Collections.IList)v; @@ -291,9 +288,10 @@ private void WriteEntityAttributes(SEntity o) WriteListWithEntities(t, f, list); } } - else { + else + { //non-list attributes - ObjectProperty p = GetObjectProperty(f.Name + "_" + o.GetType().Name); + ObjectProperty p = GetObjectProperty(f.Name + "_" + o.GetType().Name); WriteAnyOtherThing(f, p, v); } } @@ -473,9 +471,9 @@ private void WriteListOfListWithValues(Type t, FieldInfo f, System.Collections.I } //create listObject - #if VERBOSE +#if VERBOSE Console.Out.WriteLine("Message: Creating ListOfListWithValues with XSDType : " + fieldValue.FieldType.Name); - #endif +#endif newListObject = GetListObject(ft.Name + "_List_", ft.Name, valuelist, fieldValue.FieldType.Name); //add to listOfList @@ -499,15 +497,16 @@ private void WriteListWithEntities(Type t, FieldInfo f, System.Collections.IList for (int i = 0; i < list.Count; i++) { if (list[i] is SEntity) - { + { Type vt = list[i].GetType(); this.m_writer.Write(";" + "\r\n"); this.WriteIndent(); - this.m_writer.Write("ifcowl:" + p.name + " "); + this.m_writer.Write("ifcowl:" + p.name + " "); this.m_writer.Write("inst:" + vt.Name + "_" + ((SEntity)list[i]).OID); //Console.Out.WriteLine("written object prop to SET:" + p.name + " - " + vt.Name + "_" + ((SEntity)list[i]).OID); } - else{ + else + { Console.Out.WriteLine("WARNING: We found an unhandled SET of things that are NOT entities: " + f.Name); } } @@ -664,20 +663,20 @@ private void WriteListWithEntities(Type t, FieldInfo f, System.Collections.IList this.m_writer.Write("inst:" + newListObject.URI); //IfcRepresentation_List_#121_#145_#137 } - } + } } } private void WriteListWithValues(Type t, FieldInfo f, System.Collections.IList list) { //Console.Out.WriteLine("\r\n++ writing attribute: " + f.Name); - ObjectProperty p = GetObjectProperty(f.Name + "_" + t.Name); - + ObjectProperty p = GetObjectProperty(f.Name + "_" + t.Name); + if (p.setorlist == "SET") { //SET, such as IfcRecurrencePattern.weekdayComponent > IfcDayInWeekNumber for (int i = 0; i < list.Count; i++) - WriteTypeValue(t,f,list[i]); + WriteTypeValue(t, f, list[i]); } else { @@ -734,7 +733,7 @@ private void WriteListWithValues(Type t, FieldInfo f, System.Collections.IList l private void WriteTypeValue(Type t, FieldInfo f, object v) { Type ft = f.FieldType; - if (ft.IsGenericType && (ft.GetGenericTypeDefinition() == typeof(Nullable<>)||ft.GetGenericTypeDefinition() == typeof(List<>))) + if (ft.IsGenericType && (ft.GetGenericTypeDefinition() == typeof(Nullable<>) || ft.GetGenericTypeDefinition() == typeof(List<>))) { // special case for Nullable types ft = ft.GetGenericArguments()[0]; @@ -823,7 +822,7 @@ private void WriteTypeValue(Type t, FieldInfo f, object v) this.WriteIndent(); ObjectProperty p = GetObjectProperty(f.Name + "_" + t.Name); this.m_writer.Write("ifcowl:" + p.name + " "); - + string s = ft.Name; if (s == "Int64" || s == "Double" || s == "String" || s == "Number" || s == "Real" || s == "Integer" || s == "Logical" || s == "Boolean" || s == "Binary" || s == "Byte[]") s = CheckForExpressPrimaryTypes(s); @@ -967,7 +966,8 @@ private string CheckForExpressPrimaryTypes(string owlClass) return "LOGICAL"; else if (owlClass.Equals("string", StringComparison.CurrentCultureIgnoreCase)) return "STRING"; - else { + else + { Console.Out.WriteLine("WARNING: found xsdType " + owlClass + " - not sure what to do with it"); } @@ -976,14 +976,14 @@ private string CheckForExpressPrimaryTypes(string owlClass) private void WriteLiteralValue(string xsdType, string literalString) { - #if VERBOSE +#if VERBOSE Console.Out.WriteLine("WriteLiteralValue: " + "xsdtype: " + xsdType + " - literalString " + literalString); - #endif +#endif this.WriteIndent(); if (xsdType.Equals("integer", StringComparison.CurrentCultureIgnoreCase) || xsdType.Equals("Int64", StringComparison.CurrentCultureIgnoreCase)) this.m_writer.Write("express:hasInteger" + " " + literalString + " "); else if (xsdType.Equals("double", StringComparison.CurrentCultureIgnoreCase)) - this.m_writer.Write("express:has" + xsdType + " \"" + literalString.Replace(',','.') + "\"^^xsd:double "); + this.m_writer.Write("express:has" + xsdType + " \"" + literalString.Replace(',', '.') + "\"^^xsd:double "); else if (xsdType.Equals("hexBinary", StringComparison.CurrentCultureIgnoreCase)) this.m_writer.Write("express:has" + xsdType + " \"" + literalString + "\"^^xsd:hexBinary "); else if (xsdType.Equals("boolean", StringComparison.CurrentCultureIgnoreCase)) @@ -1001,7 +1001,8 @@ private void WriteLiteralValue(string xsdType, string literalString) } else if (xsdType.Equals("string", StringComparison.CurrentCultureIgnoreCase)) this.m_writer.Write("express:has" + xsdType + " \"" + literalString + "\" "); - else { + else + { this.m_writer.Write("express:has" + xsdType + " \"" + literalString + "\" "); Console.Out.WriteLine("WARNING: found xsdType " + xsdType + " - not sure what to do with it"); } @@ -1019,17 +1020,17 @@ private void WriteExtraEntity(URIObject obj) if (obj.ifcowlclass.Equals("INTEGER") || obj.ifcowlclass.Equals("REAL") || obj.ifcowlclass.Equals("DOUBLE") || obj.ifcowlclass.Equals("BINARY") || obj.ifcowlclass.Equals("BOOLEAN") || obj.ifcowlclass.Equals("LOGICAL") || obj.ifcowlclass.Equals("STRING")) ns = "express:"; WriteType(ns + obj.ifcowlclass + ";\r\n"); - #if VERBOSE +#if VERBOSE Console.Out.WriteLine("WriteExtraEntity: " + "obj.URI: " + obj.URI + " - xsdtype " + obj.XSDType); - #endif +#endif WriteLiteralValue(obj.XSDType, obj.encodedvalue); this.m_writer.Write(".\r\n\r\n"); - #if VERBOSE +#if VERBOSE Console.Out.WriteLine("written URIObject: " + "inst:" + obj.URI + " with VALUE " + obj.encodedvalue + " and TYPE " + obj.XSDType); - #endif +#endif return; } - + private void WriteExtraListOfListObject(ListObject obj) { if (obj.XSDType == "###LISTOFLIST###") @@ -1045,18 +1046,18 @@ private void WriteExtraListOfListObject(ListObject obj) if (i == 0) { this.m_writer.Write("inst:" + obj.URI + "\r\n"); - #if VERBOSE +#if VERBOSE Console.Out.WriteLine("written ListOfListObject: " + "inst:" + obj.URI + " with TYPE " + obj.XSDType); - #endif +#endif } else { this.m_writer.Write("inst:" + obj.ifcowlclass + "_List_List_" + m_nextID + "\r\n"); - #if VERBOSE +#if VERBOSE Console.Out.WriteLine("written ListOfListObject: " + "inst:" + obj.ifcowlclass + "_List_List_" + m_nextID + " with TYPE " + obj.XSDType); - #endif +#endif } - + //m_writer.Write("inst:" + obj.URI + "\r\n"); m_indent++; WriteType(ns + obj.ifcowlclass + "_List_List" + ";\r\n"); @@ -1089,7 +1090,7 @@ private void WriteExtraListObject(ListObject obj) string ns = "ifcowl:"; if (obj.listtype.Equals("INTEGER") || obj.listtype.Equals("REAL") || obj.listtype.Equals("DOUBLE") || obj.listtype.Equals("BINARY") || obj.listtype.Equals("BOOLEAN") || obj.listtype.Equals("LOGICAL") || obj.listtype.Equals("STRING")) ns = "express:"; - + for (int i = 0; i < obj.values.Count; i++) { m_indent = 0; @@ -1097,14 +1098,14 @@ private void WriteExtraListObject(ListObject obj) if (i == 0) //{ this.m_writer.Write("inst:" + obj.URI + "\r\n"); - //Console.Out.WriteLine("written ListObject: " + "inst:" + obj.URI + " with TYPE " + obj.XSDType); + //Console.Out.WriteLine("written ListObject: " + "inst:" + obj.URI + " with TYPE " + obj.XSDType); //} else //{ this.m_writer.Write("inst:" + obj.listtype + "_" + m_nextID + "\r\n"); // Console.Out.WriteLine("written ListObject: " + "inst:" + obj.listtype + "_" + m_nextID + " with TYPE " + obj.XSDType); //} - + m_indent++; this.WriteType(ns + obj.listtype + ";\r\n"); this.WriteIndent(); @@ -1114,14 +1115,14 @@ private void WriteExtraListObject(ListObject obj) //generate m_nextID++; - if ((obj.values.Count-i) > 1) + if ((obj.values.Count - i) > 1) { this.m_writer.Write(";\r\n"); this.WriteIndent(); this.m_writer.Write("list:hasNext inst:" + obj.listtype + "_" + m_nextID); } this.m_writer.Write(".\r\n\r\n"); - } + } return; } @@ -1133,7 +1134,7 @@ private bool URIObjectExists(string URIObjectconcat) else return true; } - + private bool ListOfListObjectExists(string ListObjectConcat) { if (!m_listOfListObjects.ContainsKey(ListObjectConcat)) @@ -1156,12 +1157,12 @@ private ObjectProperty GetObjectProperty(string x) private URIObject GetURIObject(string domain, string encodedvalue, string XSDType) { - #if VERBOSE +#if VERBOSE if (XSDType.Equals("RTFieldInfo", StringComparison.CurrentCultureIgnoreCase)) Console.Out.WriteLine("Warning: Found RTFieldInfo XSDType for encodedvalue: " + encodedvalue); else Console.Out.WriteLine("Found seemingly ok XSDType for encodedvalue : " + encodedvalue + " - " + domain); - #endif +#endif //WARNING: _VALUE_ and _TYPE_ could be in the other strings string fullObject = domain + "_VALUE_" + encodedvalue + "_TYPE_" + XSDType; @@ -1172,7 +1173,8 @@ private URIObject GetURIObject(string domain, string encodedvalue, string XSDTyp obj = new URIObject(domain + "_" + m_nextID, domain, encodedvalue, XSDType); m_valueObjects.Add(fullObject, obj); } - else { + else + { obj = (URIObject)m_valueObjects[fullObject]; } @@ -1200,7 +1202,8 @@ private ListObject GetListOfListObject(string ifcowlclass, List values, m_listOfListObjects.Add(encodedvalue, obj); return obj; } - else { + else + { obj = (ListObject)m_listOfListObjects[encodedvalue]; return obj; } @@ -1212,14 +1215,14 @@ private ListObject GetListObject(string listname, string ifcowlclass, List m_included; @@ -28,7 +29,7 @@ public FormatXSD(string path) this.m_filename = path; } - public DocProject Instance + public DocProject Project { get { @@ -40,6 +41,18 @@ public DocProject Instance } } + public DocPublication Publication + { + get + { + return this.m_publication; + } + set + { + this.m_publication = value; + } + } + /// /// Optional model views for filtering definitions. /// @@ -101,9 +114,22 @@ public void Save() } } - string content = this.FormatDefinitions(this.m_project, map, this.m_included); + string content = this.FormatDefinitions(this.m_project, this.m_publication, map, this.m_included); + string dirpath = System.IO.Path.GetDirectoryName(this.m_filename); + if (!System.IO.Directory.Exists(dirpath)) + { + System.IO.Directory.CreateDirectory(dirpath); + } + using (System.IO.StreamWriter writer = new System.IO.StreamWriter(this.m_filename)) + { + if (writer.BaseStream.CanSeek) + { + writer.BaseStream.SetLength(0); + } + writer.Write(content); + } } public static bool IsAttributeOverridden(DocEntity ent, DocAttribute attr, Dictionary map) @@ -134,11 +160,49 @@ public static bool IsAttributeOverridden(DocEntity ent, DocAttribute attr, Dicti private static string FormatAttribute(DocEntity docEntity, DocAttribute docAttr, Dictionary map) { + if(docAttr.Name.Equals("InnerCoordIndices")) + { + docAttr.ToString(); + } + DocObject mapDef = null; map.TryGetValue(docAttr.DefinedType, out mapDef); + string xsdtype = ToXsdType(docAttr.DefinedType); + StringBuilder sb = new StringBuilder(); + + bool sequencewrapper = (mapDef is DocDefined && docAttr.AggregationUpper == "?" && docAttr.AggregationAttribute != null && docAttr.AggregationAttribute.AggregationUpper == "?"); + if (sequencewrapper) + { + // IfcIndexPolygonalFaceWithVoids.InnerCoordIndices + + sb.Append("\t\t\t\t\t"); + sb.AppendLine(); + + sb.Append("\t\t\t\t\t\t"); + sb.AppendLine(); + + sb.Append("\t\t\t\t\t\t\t"); + sb.AppendLine(); + + xsdtype = xsdtype.Replace(":", ":Seq-"); + + sb.Append("\t\t\t\t\t\t\t\t"); + sb.AppendLine(); + sb.Append("\t\t\t\t\t\t\t"); + sb.AppendLine(); + + sb.Append("\t\t\t\t\t\t"); + sb.AppendLine(); + + sb.Append("\t\t\t\t\t"); + sb.AppendLine(); + + return sb.ToString(); + } + sb.Append("\t\t\t\t\t map, Dictionary included) { + if (docEntity.Name.Equals("IfcIndexedPolygonalFaceWithVoids")) + { + docEntity.ToString(); + } + string basetype = docEntity.BaseDefinition; if (String.IsNullOrEmpty(basetype)) { @@ -574,11 +646,6 @@ public string FormatEntity(DocEntity docEntity, Dictionary ma { if (included == null || included.ContainsKey(docAttr)) { - if (docAttr.Name.Equals("Pixel")) - { - docAttr.ToString(); - } - if (docAttr.XsdFormat != DocXsdFormatEnum.Hidden && !(docAttr.XsdTagless == true) && docAttr.DefinedType != null) { DocObject mapDef = null; @@ -587,11 +654,19 @@ public string FormatEntity(DocEntity docEntity, Dictionary ma if ((docAttr.Inverse == null || docAttr.XsdFormat == DocXsdFormatEnum.Element || docAttr.XsdFormat == DocXsdFormatEnum.Attribute) && docAttr.Derived == null) { + // special case for IfcIndexedPolygonalFaceWithVoids.InnerCoordIndices + bool sequencewrapper = (mapDef is DocDefined && docAttr.AggregationUpper == "?" && docAttr.AggregationAttribute != null && docAttr.AggregationAttribute.AggregationUpper == "?"); + + if (sequencewrapper) + { + sequencewrapper.ToString(); + } + if (mapDef is DocEntity || mapDef is DocSelect || + sequencewrapper || docAttr.XsdFormat == DocXsdFormatEnum.Element || docAttr.XsdFormat == DocXsdFormatEnum.Attribute) - //docAttr.DefinedType.StartsWith("BINARY"))*/ { if (!hascontent) { @@ -626,10 +701,6 @@ mapDef is DocSelect || { if (included == null || included.ContainsKey(docAttr)) { - if (docAttr.Name.Equals("Pixel")) - { - docAttr.ToString(); - } if (docAttr.XsdFormat != DocXsdFormatEnum.Hidden && docAttr.XsdFormat != DocXsdFormatEnum.Attribute)//docAttr.DefinedType != null)// && docAttr.XsdFormat != DocXsdFormatEnum.Element*/) { @@ -637,10 +708,13 @@ mapDef is DocSelect || if ((docAttr.Inverse == null || docAttr.XsdFormat == DocXsdFormatEnum.Attribute) && docAttr.Derived == null && (docAttr.XsdFormat != DocXsdFormatEnum.Element || docAttr.XsdTagless == true)) { - if (docAttr.DefinedType == null || (!map.TryGetValue(docAttr.DefinedType, out mapDef)) || // native type + + if (docAttr.DefinedType == null || + (!map.TryGetValue(docAttr.DefinedType, out mapDef)) || // native type (mapDef is DocDefined || mapDef is DocEnumeration || docAttr.XsdTagless == true)) { - if (mapDef == null || (included == null || included.ContainsKey(mapDef))) + bool sequencewrapper = (mapDef is DocDefined && docAttr.AggregationUpper == "?" && docAttr.AggregationAttribute != null && docAttr.AggregationAttribute.AggregationUpper == "?"); + if (!sequencewrapper && (mapDef == null || (included == null || included.ContainsKey(mapDef)))) { if (!hascontent) { @@ -761,6 +835,8 @@ mapDef is DocSelect || sb.Append("\t"); sb.AppendLine(); + // also capture Sequence types... + return sb.ToString(); } @@ -1069,9 +1145,11 @@ public string FormatDefined(DocDefined docDefined) return sb.ToString(); } - public string FormatDefinitions(DocProject docProject, Dictionary map, Dictionary included) + public string FormatDefinitions(DocProject docProject, DocPublication docPublication, Dictionary map, Dictionary included) { - string xmlns = "http://www.buildingsmart-tech.org/ifcXML/IFC4/final"; //... + this.m_included = included; + + string xmlns = docProject.GetSchemaURI(docPublication); // use XSD configuration of first view if (this.m_views != null && this.m_views.Length >= 1 && !String.IsNullOrEmpty(this.m_views[0].Code)) { @@ -1090,7 +1168,7 @@ public string FormatDefinitions(DocProject docProject, Dictionary mapFunction = new SortedList(this); SortedList mapRule = new SortedList(this); - SortedList sort = new SortedList(new FormatXSD(null)); + SortedList sort = new SortedList(this); foreach (DocSection docSection in docProject.Sections) { diff --git a/FormatZIP.cs b/FormatZIP.cs index 1e64901e..e16d534b 100644 --- a/FormatZIP.cs +++ b/FormatZIP.cs @@ -71,16 +71,19 @@ public void Save() { if (m_included == null || this.m_included.ContainsKey(docPset)) { - Uri uri = PackUriHelper.CreatePartUri(new Uri(docPset.Name + ".xml", UriKind.Relative)); - PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal); - using (Stream refstream = part.GetStream()) + if (docPset.IsVisible()) { - refstream.SetLength(0); - PropertySetDef psd = Program.ExportPsd(docPset, mapPropEnum); - using (FormatXML format = new FormatXML(refstream, typeof(PropertySetDef), PropertySetDef.DefaultNamespace, null)) + Uri uri = PackUriHelper.CreatePartUri(new Uri(docPset.Name + ".xml", UriKind.Relative)); + PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal); + using (Stream refstream = part.GetStream()) { - format.Instance = psd; - format.Save(); + refstream.SetLength(0); + PropertySetDef psd = Program.ExportPsd(docPset, mapPropEnum, this.m_project); + using (FormatXML format = new FormatXML(refstream, typeof(PropertySetDef), PropertySetDef.DefaultNamespace, null)) + { + format.Instance = psd; + format.Save(); + } } } } @@ -98,7 +101,7 @@ public void Save() using (Stream refstream = part.GetStream()) { refstream.SetLength(0); - QtoSetDef psd = Program.ExportQto(docQset); + QtoSetDef psd = Program.ExportQto(docQset, this.m_project); using (FormatXML format = new FormatXML(refstream, typeof(QtoSetDef), PropertySetDef.DefaultNamespace, null)) { format.Instance = psd; diff --git a/IfcDoc.csproj b/IfcDoc.csproj index 51b83581..5638aac0 100644 --- a/IfcDoc.csproj +++ b/IfcDoc.csproj @@ -152,6 +152,7 @@ CtlRules.cs + @@ -160,6 +161,12 @@ + + Form + + + FormCredentials.cs + Form @@ -197,6 +204,7 @@ FormSelectExchange.cs + Component @@ -370,11 +378,14 @@ CtlOperators.cs - Designer CtlParameters.cs + + CtlProperties.cs + Designer + CtlProperties.cs Designer @@ -385,6 +396,12 @@ FormConstraint.cs + + FormCredentials.cs + + + FormEdit.cs + FormFilterDefinitions.cs @@ -428,6 +445,7 @@ FormEdit.cs + Designer FormGenerate.cs diff --git a/NBIMS.cs b/NBIMS.cs index a35abce0..20d41f16 100644 --- a/NBIMS.cs +++ b/NBIMS.cs @@ -27,7 +27,7 @@ private static string GenerateTemplateImage(DocTemplateDefinition docTemplate, D int cx = 0; int cy = 0; - System.Drawing.Image image = IfcDoc.Format.PNG.FormatPNG.CreateTemplateDiagram(docTemplate, mapEntity, new Dictionary(), project, null); + System.Drawing.Image image = IfcDoc.Format.PNG.FormatPNG.CreateTemplateDiagram(docTemplate, mapEntity, new Dictionary(), project, null); if (image != null) { @@ -205,14 +205,14 @@ public static void Export(DocProject project, DocModelView docView, string path, using (FormatXSD formatXSD = new FormatXSD(path + @"\" + docView.Code + ".xsd")) { - formatXSD.Instance = project; + formatXSD.Project = project; formatXSD.ModelViews = new DocModelView[] { docView }; formatXSD.Save(); } using (FormatSPF format = new FormatSPF(path + @"\" + docView.Code + ".ifc", Schema.IFC.SchemaIfc.Types, new Dictionary())) { - format.InitHeaders(docView.Code, "IFC4"); + format.InitHeaders(docView.Code, project.GetSchemaIdentifier()); Schema.IFC.IfcProject ifcProject = new IfcDoc.Schema.IFC.IfcProject(); Program.ExportIfc(ifcProject, project, included); format.Save(); @@ -221,7 +221,7 @@ public static void Export(DocProject project, DocModelView docView, string path, using (FormatXML format = new FormatXML(path + @"\" + docView.Code + ".mvdxml", typeof(mvdXML), mvdXML.DefaultNamespace)) { mvdXML mvd = new mvdXML(); - Program.ExportMvd(mvd, project, included); + Program.ExportMvd(mvd, project, mapEntity, included); format.Instance = mvd; format.Save(); } @@ -553,7 +553,7 @@ public static void Export(DocProject project, DocModelView docView, string path, format.WriteLine(docRoot.ApplicableEntity.Documentation); format.WriteLine("
    "); - format.WriteExpressEntitySpecification(docRoot.ApplicableEntity, true, false); + format.WriteExpressEntitySpecification(docRoot.ApplicableEntity, true, null); format.WriteLine("
    "); format.WriteFormatted(xsd); } @@ -624,7 +624,7 @@ public static void Export(DocProject project, DocModelView docView, string path, int cy = 0; try { - using (System.Drawing.Image image = IfcDoc.Format.PNG.FormatPNG.CreateConceptDiagram(docRoot.ApplicableEntity, docView, mapEntity, new Dictionary(), project, null)) + using (System.Drawing.Image image = IfcDoc.Format.PNG.FormatPNG.CreateConceptDiagram(docRoot.ApplicableEntity, docView, mapEntity, new Dictionary(), project, null)) { cx = image.Width; cy = image.Height; diff --git a/Program.cs b/Program.cs index 42387b92..e9ceac47 100644 --- a/Program.cs +++ b/Program.cs @@ -1036,12 +1036,14 @@ internal static DocSchema ImportVex(SCHEMATA schemata, DocProject docProject, bo return docSchema; } + + internal static void ExportIfc(IfcProject ifcProject, DocProject docProject, Dictionary included) { ifcProject.Name = "IFC4 Property Set Templates"; // cache enumerators - Dictionary mapEnums = new Dictionary(); + Dictionary mapEnums = new Dictionary(); foreach (DocSection docSect in docProject.Sections) { foreach (DocSchema docSchema in docSect.Schemas) @@ -1183,6 +1185,18 @@ internal static void ExportIfc(IfcProject ifcProject, DocProject docProject, Dic } } + // ugly, needs to be refactored, but quick fix for now + [ThreadStatic] static internal long t_lastid; + [ThreadStatic] static internal Dictionary t_instances; + internal static void SEntity_EntityCreated(object sender, EventArgs e) + { + t_lastid++; + + SEntity entity = (SEntity)sender; + entity.OID = t_lastid; + t_instances.Add(entity.OID, entity); + } + private static IfcPropertyTemplate ExportIfcPropertyTemplate(DocProperty docProp, IfcLibraryInformation ifcLibInfo, Dictionary mapEnums) { if (docProp.PropertyType == DocPropertyTemplateTypeEnum.COMPLEX) @@ -1285,7 +1299,7 @@ private static IfcPropertyTemplate ExportIfcPropertyTemplate(DocProperty docProp } } - public static QtoSetDef ExportQto(DocQuantitySet docPset) + public static QtoSetDef ExportQto(DocQuantitySet docPset, DocProject docProject) { string[] apptypes = new string[0]; if (docPset.ApplicableType != null) @@ -1299,7 +1313,7 @@ public static QtoSetDef ExportQto(DocQuantitySet docPset) psd.Definition = docPset.Documentation; psd.Versions = new List(); psd.Versions.Add(new IfcVersion()); - psd.Versions[0].version = "IFC4"; + psd.Versions[0].version = docProject.GetSchemaIdentifier(); psd.ApplicableTypeValue = docPset.ApplicableType; psd.ApplicableClasses = new List(); foreach (string app in apptypes) @@ -1347,10 +1361,16 @@ public static QtoSetDef ExportQto(DocQuantitySet docPset) return psd; } - public static PropertySetDef ExportPsd(DocPropertySet docPset, Dictionary mapEnum) + public static PropertySetDef ExportPsd(DocPropertySet docPset, Dictionary mapEnum, DocProject docProject) { - string[] apptypes = new string[0]; + DocEntity[] appents = docPset.GetApplicableTypeDefinitions(docProject); + DocEntity applicableentity = null; + if (appents != null && appents.Length > 0 && appents[0] != null) + { + applicableentity = docProject.GetDefinition(appents[0].BaseDefinition) as DocEntity; + } + string[] apptypes = new string[0]; if (docPset.ApplicableType != null) { apptypes = docPset.ApplicableType.Split(','); @@ -1360,7 +1380,7 @@ public static PropertySetDef ExportPsd(DocPropertySet docPset, Dictionary(); psd.Versions.Add(new IfcVersion()); - psd.Versions[0].version = "IFC4"; + psd.Versions[0].version = docProject.GetSchemaIdentifier(); psd.Name = docPset.Name; psd.Definition = docPset.Documentation; psd.TemplateType = docPset.PropertySetType; @@ -1388,7 +1408,18 @@ public static PropertySetDef ExportPsd(DocPropertySet docPset, Dictionary mapExchange) { - // special case for attributes - DocTemplateDefinition docTemplateDef = docProject.GetTemplate(mvdNode.Template.Ref); - if (docTemplateDef != null) + ImportMvdObject(mvdNode, docUse); + + if (mvdNode.Template != null) { - ImportMvdObject(mvdNode, docUse); + DocTemplateDefinition docTemplateDef = docProject.GetTemplate(mvdNode.Template.Ref); + if (docTemplateDef != null) + { + docUse.Definition = docTemplateDef; + } + } - docUse.Definition = docTemplateDef; - docUse.Override = mvdNode.Override; + docUse.Override = mvdNode.Override; - // exchange requirements - foreach (ConceptRequirement mvdReq in mvdNode.Requirements) + // exchange requirements + foreach (ConceptRequirement mvdReq in mvdNode.Requirements) + { + ExchangeRequirement mvdExchange = null; + if (mapExchange.TryGetValue(mvdReq.ExchangeRequirement, out mvdExchange)) { - ExchangeRequirement mvdExchange = null; - if (mapExchange.TryGetValue(mvdReq.ExchangeRequirement, out mvdExchange)) - { - DocExchangeItem docReq = new DocExchangeItem(); - docUse.Exchanges.Add(docReq); + DocExchangeItem docReq = new DocExchangeItem(); + docUse.Exchanges.Add(docReq); - foreach (DocModelView docModel in docProject.ModelViews) + foreach (DocModelView docModel in docProject.ModelViews) + { + foreach (DocExchangeDefinition docAnno in docModel.Exchanges) { - foreach (DocExchangeDefinition docAnno in docModel.Exchanges) + if (docAnno.Uuid.Equals(mvdReq.ExchangeRequirement)) { - if (docAnno.Uuid.Equals(mvdReq.ExchangeRequirement)) - { - docReq.Exchange = docAnno; - break; - } + docReq.Exchange = docAnno; + break; } } + } - docReq.Applicability = (DocExchangeApplicabilityEnum)mvdReq.Applicability; + docReq.Applicability = (DocExchangeApplicabilityEnum)mvdReq.Applicability; - switch(mvdReq.Requirement) - { - case RequirementEnum.Mandatory: - docReq.Requirement = DocExchangeRequirementEnum.Mandatory; - break; + switch (mvdReq.Requirement) + { + case RequirementEnum.Mandatory: + docReq.Requirement = DocExchangeRequirementEnum.Mandatory; + break; - case RequirementEnum.Recommended: - docReq.Requirement = DocExchangeRequirementEnum.Optional; - break; + case RequirementEnum.Recommended: + docReq.Requirement = DocExchangeRequirementEnum.Optional; + break; - case RequirementEnum.NotRelevant: - docReq.Requirement = DocExchangeRequirementEnum.NotRelevant; - break; + case RequirementEnum.NotRelevant: + docReq.Requirement = DocExchangeRequirementEnum.NotRelevant; + break; - case RequirementEnum.NotRecommended: - docReq.Requirement = DocExchangeRequirementEnum.NotRecommended; - break; + case RequirementEnum.NotRecommended: + docReq.Requirement = DocExchangeRequirementEnum.NotRecommended; + break; - case RequirementEnum.Excluded: - docReq.Requirement = DocExchangeRequirementEnum.Excluded; - break; - } + case RequirementEnum.Excluded: + docReq.Requirement = DocExchangeRequirementEnum.Excluded; + break; } } + } - // rules as template items - if (mvdNode.TemplateRules != null) + // rules as template items + if (mvdNode.TemplateRules != null) + { + docUse.Operator = (DocTemplateOperator)Enum.Parse(typeof(DocTemplateOperator), mvdNode.TemplateRules.Operator.ToString()); + foreach (TemplateRule rule in mvdNode.TemplateRules.TemplateRule) { - docUse.Operator = (DocTemplateOperator)Enum.Parse(typeof(DocTemplateOperator), mvdNode.TemplateRules.Operator.ToString()); - foreach (TemplateRule rule in mvdNode.TemplateRules.TemplateRule) - { - DocTemplateItem docItem = ImportMvdItem(rule, docProject, mapExchange); - docUse.Items.Add(docItem); - } - - if (mvdNode.TemplateRules.InnerRules != null) - { - mvdNode.ToString(); - } + DocTemplateItem docItem = ImportMvdItem(rule, docProject, mapExchange); + docUse.Items.Add(docItem); } - } } @@ -2012,7 +2043,7 @@ private static void ImportMvdObject(Element mvd, DocObject doc) doc.Uuid = mvd.Uuid; doc.Version = mvd.Version; doc.Owner = mvd.Owner; - doc.Status = mvd.Status; + doc.Status = mvd.Status.ToString(); doc.Copyright = mvd.Copyright; doc.Code = mvd.Code; doc.Author = mvd.Author; @@ -2021,25 +2052,52 @@ private static void ImportMvdObject(Element mvd, DocObject doc) { foreach (Definition def in mvd.Definitions) { - if (def != null) + if (def != null && def.Body != null && def.Body.Count == 1) { - // base definition - if (def.Body != null) + if (!String.IsNullOrEmpty(def.Body[0].Lang)) + { + // mvdXML1.1 now uses this + DocLocalization loc = new DocLocalization(); + doc.Localization.Add(loc); + loc.Name = def.Tags; + loc.Locale = def.Body[0].Lang; + loc.Documentation = def.Body[0].Content; + loc.Category = DocCategoryEnum.Definition; + } + else if (def.Body != null) { - doc.Documentation = def.Body.Content; + // base definition + doc.Documentation = def.Body[0].Content; } if (def.Links != null) { + // older exports use this foreach (Link link in def.Links) { - DocLocalization loc = new DocLocalization(); - doc.Localization.Add(loc); + DocLocalization loc = doc.GetLocalization(link.Lang); + if (loc == null) + { + loc = new DocLocalization(); + doc.Localization.Add(loc); + + try + { + loc.Category = (DocCategoryEnum)(CategoryEnum)Enum.Parse(typeof(CategoryEnum), link.Category.ToString()); + } + catch + { + + } + loc.Locale = link.Lang; + loc.URL = link.Href; + } + loc.Name = link.Title; - loc.Documentation = link.Content; - loc.Category = (DocCategoryEnum)Enum.Parse(typeof(DocCategoryEnum), link.Category.ToString()); - loc.Locale = link.Lang; - loc.URL = link.Href; + if (loc.Documentation == null) + { + loc.Documentation = link.Content; + } } } } @@ -2082,18 +2140,23 @@ internal static void ExpandTemplateInheritance(DocTemplateDefinition template, L } } - internal static void ExportMvdConcept(Concept mvdConceptLeaf, DocTemplateUsage docTemplateUsage, bool documentation) + internal static void ExportMvdConcept(Concept mvdConceptLeaf, DocTemplateUsage docTemplateUsage, DocProject docProject, Dictionary map, bool documentation) { - if (docTemplateUsage.Definition == null) - return; - ExportMvdObject(mvdConceptLeaf, docTemplateUsage, documentation); - mvdConceptLeaf.Template = new TemplateRef(); - mvdConceptLeaf.Template.Ref = docTemplateUsage.Definition.Uuid; + if (docTemplateUsage.Definition != null) + { + mvdConceptLeaf.Template = new TemplateRef(); + mvdConceptLeaf.Template.Ref = docTemplateUsage.Definition.Uuid; + } mvdConceptLeaf.Override = docTemplateUsage.Override; + if(String.IsNullOrEmpty(mvdConceptLeaf.Name)) + { + mvdConceptLeaf.Name = docTemplateUsage.Definition.Name; + } + // requirements foreach (DocExchangeItem docExchangeRef in docTemplateUsage.Exchanges) { @@ -2151,7 +2214,7 @@ internal static void ExportMvdConcept(Concept mvdConceptLeaf, DocTemplateUsage d mvdConceptLeaf.TemplateRules.Operator = (TemplateOperator)Enum.Parse(typeof(TemplateOperator), docTemplateUsage.Operator.ToString()); foreach (DocTemplateItem docRule in docTemplateUsage.Items) { - TemplateRule mvdTemplateRule = ExportMvdItem(docRule); + TemplateRule mvdTemplateRule = ExportMvdItem(docRule, docTemplateUsage.Definition, docProject, map); mvdConceptLeaf.TemplateRules.TemplateRule.Add(mvdTemplateRule); // using proposed mvdXML schema @@ -2163,24 +2226,28 @@ internal static void ExportMvdConcept(Concept mvdConceptLeaf, DocTemplateUsage d { Concept mvdInner = new Concept(); mvdTemplateRule.References.Add(mvdInner); - ExportMvdConcept(mvdInner, docInner, documentation); + ExportMvdConcept(mvdInner, docInner, docProject, map, documentation); } } } } } - internal static TemplateRule ExportMvdItem(DocTemplateItem docRule) + internal static TemplateRule ExportMvdItem(DocTemplateItem docRule, DocTemplateDefinition docTemplate, DocProject docProject, Dictionary map) { TemplateRule mvdTemplateRule = new TemplateRule(); + +#if false // template rules don't have IDs if (!String.IsNullOrEmpty(docRule.RuleInstanceID)) { mvdTemplateRule.RuleID = docRule.RuleInstanceID; } +#endif + mvdTemplateRule.Description = docRule.Documentation; // new: use special mvdXML 1.1 syntax - mvdTemplateRule.Parameters = docRule.FormatParameterExpressions(); // was RuleParameters; + mvdTemplateRule.Parameters = docRule.FormatParameterExpressions(docTemplate, docProject, map); // was RuleParameters; return mvdTemplateRule; } @@ -2189,6 +2256,7 @@ internal static TemplateRule ExportMvdItem(DocTemplateItem docRule) internal static void ExportMvd( mvdXML mvd, DocProject docProject, + Dictionary map, Dictionary included) { mvd.Uuid = Guid.NewGuid(); // changes every time saved @@ -2211,7 +2279,7 @@ internal static void ExportMvd( ModelView mvdModelView = new ModelView(); mvd.Views.Add(mvdModelView); ExportMvdObject(mvdModelView, docModelView, true); - mvdModelView.ApplicableSchema = "IFC4"; + mvdModelView.ApplicableSchema = docProject.GetSchemaIdentifier(); mvdModelView.BaseView = docModelView.BaseView; foreach (DocExchangeDefinition docExchangeDef in docModelView.Exchanges) @@ -2240,14 +2308,14 @@ internal static void ExportMvd( ConceptRoot mvdConceptRoot = new ConceptRoot(); mvdModelView.Roots.Add(mvdConceptRoot); - Program.ExportMvdConceptRoot(mvdConceptRoot, docRoot, true); + Program.ExportMvdConceptRoot(mvdConceptRoot, docRoot, docProject, map, true); } } } } } - internal static void ExportMvdConceptRoot(ConceptRoot mvdConceptRoot, DocConceptRoot docRoot, bool documentation) + internal static void ExportMvdConceptRoot(ConceptRoot mvdConceptRoot, DocConceptRoot docRoot, DocProject docProject, Dictionary map, bool documentation) { ExportMvdObject(mvdConceptRoot, docRoot, documentation); @@ -2267,16 +2335,20 @@ internal static void ExportMvdConceptRoot(ConceptRoot mvdConceptRoot, DocConcept mvdConceptRoot.Applicability.TemplateRules.Operator = (TemplateOperator)Enum.Parse(typeof(TemplateOperator), docRoot.ApplicableOperator.ToString()); foreach (DocTemplateItem docItem in docRoot.ApplicableItems) { - TemplateRule rule = ExportMvdItem(docItem); + TemplateRule rule = ExportMvdItem(docItem, docRoot.ApplicableTemplate, docProject, map); mvdConceptRoot.Applicability.TemplateRules.TemplateRule.Add(rule); } } - foreach (DocTemplateUsage docTemplateUsage in docRoot.Concepts) + if (docRoot.Concepts.Count > 0) { - Concept mvdConceptLeaf = new Concept(); - mvdConceptRoot.Concepts.Add(mvdConceptLeaf); - ExportMvdConcept(mvdConceptLeaf, docTemplateUsage, documentation); + mvdConceptRoot.Concepts = new List(); + foreach (DocTemplateUsage docTemplateUsage in docRoot.Concepts) + { + Concept mvdConceptLeaf = new Concept(); + mvdConceptRoot.Concepts.Add(mvdConceptLeaf); + ExportMvdConcept(mvdConceptLeaf, docTemplateUsage, docProject, map, documentation); + } } } @@ -2301,40 +2373,71 @@ private static void ExportMvdObject(Element mvd, DocObject doc, bool documentati mvd.Uuid = doc.Uuid; mvd.Version = EnsureValidString(doc.Version); mvd.Owner = EnsureValidString(doc.Owner); - mvd.Status = EnsureValidString(doc.Status); + mvd.Status = StatusEnum.Sample; + Enum.TryParse(doc.Status, out mvd.Status); mvd.Copyright = EnsureValidString(doc.Copyright); mvd.Code = EnsureValidString(doc.Code); mvd.Author = EnsureValidString(doc.Author); -#if false // why? - if(mvd.Name == null) - { - mvd.Name = String.Empty; - } -#endif - if (documentation && doc.Documentation != null) { Definition mvdDef = new Definition(); - mvdDef.Body = new Body(); - mvdDef.Body.Content = doc.Documentation; + mvdDef.Body = new List(); + mvdDef.Body.Add(new Body()); + mvdDef.Body[0].Content = doc.Documentation; mvd.Definitions = new List(); mvd.Definitions.Add(mvdDef); if (doc.Localization != null && doc.Localization.Count > 0) { + foreach (DocLocalization docLocal in doc.Localization) + { + Definition mvdLocalDef = new Definition(); + + //mvdLocalDef.Lang = docLocal.Locale; + //mvdLocalDef.Tags = docLocal.Name; + Body mvdBody = new Body(); + mvdLocalDef.Body = new List(); + mvdLocalDef.Body.Add(mvdBody); + mvdBody.Lang = docLocal.Locale; + mvdBody.Content = docLocal.Documentation; + + Link mvdLink = new Link(); + mvdLocalDef.Links = new List(); + mvdLocalDef.Links.Add(mvdLink); + if (!String.IsNullOrEmpty(docLocal.Name)) + { + mvdLink.Title = docLocal.Name; + } + if (!String.IsNullOrEmpty(docLocal.Locale)) + { + mvdLink.Lang = docLocal.Locale; + } + mvdLink.Href = String.Empty; // must not be null for valid mvdXML + if (!String.IsNullOrEmpty(docLocal.URL)) + { + mvdLink.Href = docLocal.URL; + } + mvdLink.Category = (CategoryEnum)(int)docLocal.Category; + + mvd.Definitions.Add(mvdLocalDef); + } + +#if false // old mvdDef.Links = new List(); foreach (DocLocalization docLocal in doc.Localization) { Link mvdLink = new Link(); mvdDef.Links.Add(mvdLink); mvdLink.Title = docLocal.Name; - mvdLink.Content = docLocal.Documentation; + // old -- now use above mvdLink.Content = docLocal.Documentation; mvdLink.Lang = docLocal.Locale; mvdLink.Href = docLocal.URL; mvdLink.Category = (CategoryEnum)(int)docLocal.Category; } + +#endif } } } @@ -2381,7 +2484,7 @@ private static void ExportMvdRule(AttributeRule mvdRule, DocModelRule docRule) { if (!String.IsNullOrEmpty(docRule.Identification)) { - mvdRule.RuleID = docRule.Identification; + mvdRule.RuleID = docRule.Identification.Replace(' ','_'); } mvdRule.Description = docRule.Description; mvdRule.AttributeName = docRule.Name; @@ -2398,7 +2501,10 @@ private static void ExportMvdRule(AttributeRule mvdRule, DocModelRule docRule) EntityRule mvdRuleEntity = new EntityRule(); mvdRule.EntityRules.Add(mvdRuleEntity); - mvdRuleEntity.RuleID = docRuleEntity.Identification; + if (!String.IsNullOrEmpty(docRuleEntity.Identification)) + { + mvdRuleEntity.RuleID = docRuleEntity.Identification.Replace(' ', '_'); + } mvdRuleEntity.Description = docRuleEntity.Description; mvdRuleEntity.EntityName = docRuleEntity.Name; //mvdRuleEntity.Cardinality = ExportCardinalityType(docRuleEntity); @@ -2418,7 +2524,8 @@ private static void ExportMvdRule(AttributeRule mvdRule, DocModelRule docRule) } else if (docRuleAttribute is DocModelRuleConstraint && !String.IsNullOrEmpty(docRuleAttribute.Description)) { - + DocModelRuleConstraint mrc = (DocModelRuleConstraint)docRuleAttribute; + if(mvdRuleEntity.Constraints == null) { mvdRuleEntity.Constraints = new List(); @@ -2426,19 +2533,32 @@ private static void ExportMvdRule(AttributeRule mvdRule, DocModelRule docRule) Constraint mvdConstraint = new Constraint(); mvdRuleEntity.Constraints.Add(mvdConstraint); - mvdConstraint.Expression = docRuleAttribute.Description; + //mvdConstraint.Expression = mrc.FormatExpression(); + + string expr = mrc.FormatExpression(); + // replace with attribute name + int bracket = expr.IndexOf('['); + if (bracket > 0) + { + mvdConstraint.Expression = docRule.Identification + expr.Substring(bracket); + //System.Diagnostics.Debug.WriteLine(mvdConstraint.Expression); + } } } DocModelRuleEntity dme = (DocModelRuleEntity)docRuleEntity; if(dme.References.Count > 0) { - mvdRuleEntity.References = new List(); + mvdRuleEntity.References = new References(); + mvdRuleEntity.References.IdPrefix = dme.Prefix; + mvdRuleEntity.References.Template = new List(); foreach (DocTemplateDefinition dtd in dme.References) { TemplateRef tr = new TemplateRef(); tr.Ref = dtd.Uuid; - mvdRuleEntity.References.Add(tr); + mvdRuleEntity.References.Template.Add(tr); + + break; // only one reference template can be exported } } } @@ -2526,7 +2646,7 @@ internal static void ExportCnf(IfcDoc.Schema.CNF.configuration cnf, DocProject d */ - cnf.id = "IFC4"; + cnf.id = docProject.GetSchemaIdentifier(); IfcDoc.Schema.CNF.option opt = new Schema.CNF.option(); opt.inheritance = true; diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 647dac87..61bae36f 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("10.4.0.0")] -[assembly: AssemblyFileVersion("10.4.0.0")] +[assembly: AssemblyVersion("11.2.0.0")] +[assembly: AssemblyFileVersion("11.2.0.0")] diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs index 6f4f5b00..78498818 100644 --- a/Properties/Settings.Designer.cs +++ b/Properties/Settings.Designer.cs @@ -118,5 +118,17 @@ public bool SkipDiagrams { this["SkipDiagrams"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("")] + public string ConverterPath { + get { + return ((string)(this["ConverterPath"])); + } + set { + this["ConverterPath"] = value; + } + } } } diff --git a/Properties/Settings.settings b/Properties/Settings.settings index 736d4bf7..9ced9026 100644 --- a/Properties/Settings.settings +++ b/Properties/Settings.settings @@ -26,5 +26,8 @@ False + + + \ No newline at end of file diff --git a/SchemaDoc.cs b/SchemaDoc.cs index ce684c96..5dc4e19d 100644 --- a/SchemaDoc.cs +++ b/SchemaDoc.cs @@ -455,7 +455,7 @@ public enum DocFormatSchemaEnum //[DisplayName("TTL")] [Description("ifcOWL Web Ontology Language (OWL)")] - TTL = 4, // for transition, keep identifier as OWL for now so existing .ifcdoc files still work + OWL = 4, // for transition, keep identifier as OWL for now so existing .ifcdoc files still work //[DisplayName("Java")] [Description("Java Programming Language")] @@ -582,7 +582,7 @@ public string ExtensionSchema case DocFormatSchemaEnum.SQL: return "sql"; - case DocFormatSchemaEnum.TTL: + case DocFormatSchemaEnum.OWL: return "owl"; } return "txt"; // fallback if unknown @@ -610,7 +610,7 @@ public string ExtensionInstances case DocFormatSchemaEnum.SQL: return "csv"; - case DocFormatSchemaEnum.TTL: + case DocFormatSchemaEnum.OWL: return "ttl"; } @@ -626,7 +626,7 @@ public class DocPublication : DocObject { [DataMember(Order = 0)] private List _Views; [DataMember(Order = 1)] private List _Formats; - [DataMember(Order = 2)] private List _Locales; + [DataMember(Order = 2)] private List _ChangeSets; // IfcDoc 11.2; was List locales [DataMember(Order = 3)] private List _Annotations; // Forward + Introduction [DataMember(Order = 4)] private string _Header; [DataMember(Order = 5)] private string _Footer; @@ -635,6 +635,7 @@ public class DocPublication : DocObject [DataMember(Order = 8)] private bool _UML; // IfcDoc 9.8: UML diagrams instead of Express-G [DataMember(Order = 9)] private bool _Comparison; // IfcDoc 9.9: compare mappings between tabular exchanges, e.g. GSA [DataMember(Order = 10)] private bool _Exchanges; // IfcDoc 9.9: show exchange tables + [DataMember(Order = 11)] private bool _HtmlExamples; // IfcDoc 10.7: include examples with HTML markup // unserialized private List m_errorlog; // list of filenames missing for images @@ -680,7 +681,7 @@ public List Formats if (this._Formats.Count == 2) { this._Formats.Add(new DocFormat(DocFormatSchemaEnum.SQL, DocFormatOptionEnum.None)); - this._Formats.Add(new DocFormat(DocFormatSchemaEnum.TTL, DocFormatOptionEnum.None)); + this._Formats.Add(new DocFormat(DocFormatSchemaEnum.OWL, DocFormatOptionEnum.None)); this._Formats.Add(new DocFormat(DocFormatSchemaEnum.JSON, DocFormatOptionEnum.None)); this._Formats.Add(new DocFormat(DocFormatSchemaEnum.CS, DocFormatOptionEnum.None)); } @@ -689,18 +690,6 @@ public List Formats } } - public List Locales - { - get - { - if(this._Locales == null) - { - this._Locales = new List(); - } - return this._Locales; - } - } - public List Annotations { get @@ -797,6 +786,31 @@ public bool Exchanges } } + public bool HtmlExamples + { + get + { + return this._HtmlExamples; + } + set + { + this._HtmlExamples = value; + } + } + + public List ChangeSets + { + get + { + if(this._ChangeSets == null) + { + this._ChangeSets = new List(); + } + + return this._ChangeSets; + } + } + public override void Delete() { foreach(DocAnnotation docAnnotation in this.Annotations) @@ -819,6 +833,22 @@ public DocFormatOptionEnum GetFormatOption(DocFormatSchemaEnum docFormatTypeEnum return DocFormatOptionEnum.None; } + + /// + /// Returns the release identifier, which may be combined with the version identifier + /// Example: "ADD1", "RC3" + /// + /// + public string GetReleaseIdentifier() + { + if(!String.IsNullOrEmpty(this.Code)) + { + return this.Code; + } + + return "UNSPECIFIEDRELEASE"; + } + } /// @@ -843,6 +873,50 @@ public DocProject() { } + /// + /// Returns an identifier for the schema and major/minor version, applicable to the overall .ifcdoc file -- which is the same, independent of model view or publication (addendum, release candidate, etc.). + /// Certain encodings -- such as EXPRESS -- will use this by itself and force it to uppercase. + /// Other encodings -- such as XML or OWL -- will use this along with the release identifier using case as defined. + /// Examples: "IFC2x3", "IFC4", "IFC4x1". + /// It is stored as the Code of the first Section. + /// + /// + public string GetSchemaIdentifier() + { + if (this.Sections.Count > 0 && !String.IsNullOrEmpty(this.Sections[0].Code)) + { + return this.Sections[0].Code; + } + + return "UNSPECIFIEDSCHEMA"; + } + + /// + /// Returns a URI to the buildingsmart-tech.org website. + /// + /// Optional publication to qualify; if no publication defined, then uses the first in the list; if none, then uses "FINAL". + /// + public string GetSchemaURI(DocPublication docPub) + { + string release = "FINAL"; + if(docPub != null) + { + release = docPub.GetReleaseIdentifier(); + } + else if(this.Publications.Count > 0) + { + release = this.Publications[0].GetReleaseIdentifier(); + } + + string draft = ""; + if (docPub.Status != "Final") + { + draft = "review/"; + } + + return "http://www.buildingsmart-tech.org/ifc/" + draft + this.GetSchemaIdentifier() + "/" + release.ToLower(); + } + public List Sections { get @@ -1095,6 +1169,55 @@ public DocFunction GetFunction(string def) return null; } + /// + /// Returns property at highest level (most abstract) of given name. Used for resolving inherited properties (e.g. Pset_ElementCommon.Reference) + /// + /// Name of property + /// Entity + /// + public DocProperty FindProperty(string def, DocEntity docApplicableEntity) + { + if(def == null || docApplicableEntity == null) + return null; + + // try supertype first + if (!String.IsNullOrEmpty(docApplicableEntity.BaseDefinition)) + { + DocEntity docSuper = this.GetDefinition(docApplicableEntity.BaseDefinition) as DocEntity; + if (docSuper != null) + { + DocProperty docProp = this.FindProperty(def, docSuper); + if (docProp != null) + return docProp; + } + } + + // find matching property sets + foreach (DocSection docSection in this.Sections) + { + foreach (DocSchema docSchema in docSection.Schemas) + { + foreach (DocPropertySet docPset in docSchema.PropertySets) + { + if(docPset.ApplicableType != null && docPset.ApplicableType.Equals(docApplicableEntity.Name)) + { + // search properties + foreach(DocProperty docProp in docPset.Properties) + { + if(def.Equals(docProp.Name)) + { + return docProp; + } + } + } + } + + } + } + + return null; + } + public DocPropertySet FindPropertySet(string def, out DocSchema schema) { foreach (DocSection docSection in this.Sections) @@ -1243,6 +1366,11 @@ public DocModelView GetView(Guid guid) return null; } + /// + /// Buidls list of inherited views, in order starting from leaf view to base view + /// + /// + /// public DocModelView[] GetViewInheritance(DocModelView docModelView) { // build list of inherited views @@ -1529,7 +1657,6 @@ private void RegisterEntity(Dictionary included, DocEntity enti { try { - if (included.ContainsKey(entity)) return; @@ -1621,6 +1748,16 @@ private void RegisterRule(Dictionary included, DocEntity docEnt { included[docAttr] = true; + DocDefinition docDeclared = this.GetDefinition(docAttr.DefinedType); + if(docDeclared is DocEntity) + { + RegisterEntity(included, (DocEntity)docDeclared); + } + else if(docDeclared is DocSelect) + { + included[docDeclared] = true; + } + // include inverse attribute if any if (!String.IsNullOrEmpty(docAttr.Inverse)) { @@ -1640,6 +1777,7 @@ private void RegisterRule(Dictionary included, DocEntity docEnt foreach (DocModelRuleEntity docRuleEntity in docRuleAttr.Rules) { DocDefinition docInner = this.GetDefinition(docRuleEntity.Name); + if (docInner != null) { if (docInner is DocEntity) @@ -1655,6 +1793,8 @@ private void RegisterRule(Dictionary included, DocEntity docEnt } } } + + // if attribute type is different than specified type, also include attribute type } else if(docInner is DocDefined) { @@ -1685,7 +1825,12 @@ private void RegisterTemplate(Dictionary included, DocTemplateD { if(included.ContainsKey(template)) return; - + + if (template.Name != null && template.Name.Equals("Swept Solid Geometry")) + { + this.ToString(); + } + included[template] = true; if (template.Rules != null) @@ -1703,7 +1848,7 @@ private void RegisterTemplate(Dictionary included, DocTemplateD } } - private static bool RegisterBaseTemplates(Dictionary included, DocTemplateDefinition basetemplate) + private bool RegisterBaseTemplates(Dictionary included, DocTemplateDefinition basetemplate, Dictionary mapVirtualAttributes) { //if (included.ContainsKey(basetemplate)) // return true; @@ -1712,10 +1857,11 @@ private static bool RegisterBaseTemplates(Dictionary included, { foreach (DocTemplateDefinition docTemplate in basetemplate.Templates) { - bool check = RegisterBaseTemplates(included, docTemplate); + bool check = RegisterBaseTemplates(included, docTemplate, mapVirtualAttributes); if(check) { - included[basetemplate] = true; + RegisterTemplate(included, basetemplate, mapVirtualAttributes); + //included[basetemplate] = true; } } } @@ -1825,7 +1971,7 @@ public void RegisterObjectsInScope(DocModelView docView, Dictionary BuildXsdFormatList() return xsdFormatBase; } + + /// + /// Renames an object and updates all dependencies + /// + /// The schema containing definition, or to be renamed. + /// Optional definition containing attribute, or to be renamed (if NULL, then schema is renamed) + /// Optional attribute to rename (if NULL, then definition is renamed) + /// New name of object + public void Rename(DocSchema docSchema, DocDefinition docDefinition, DocAttribute docAttribute, string newname) + { + // for now, this assumes definition names are unique globally (not just within schema) + + if (docDefinition != null) + { + foreach (DocTemplateDefinition docTemplate in this.Templates) + { + docTemplate.Rename(docSchema, docDefinition, docAttribute, newname); + } + } + + foreach(DocSection docSection in this.Sections) + { + foreach(DocSchema docSectionSchema in docSection.Schemas) + { + foreach (DocSchemaRef docSchemaRef in docSectionSchema.SchemaRefs) + { + if (docSchemaRef.Name.Equals(docSchema.Name)) + { + if (docDefinition == null) + { + docSchemaRef.Name = newname; + break; + } + else + { + foreach (DocDefinitionRef docDefRef in docSchemaRef.Definitions) + { + if (docAttribute == null && docDefRef.Name.Equals(docDefinition.Name)) + { + docDefRef.Name = newname; + break; + } + } + } + } + } + } + } + + + //... rename schema... + + if (docAttribute != null) + { + docAttribute.Name = newname; + } + else if(docDefinition != null) + { + docDefinition.Name = newname; + } + else if(docSchema != null) + { + docSchema.Name = newname; + } + } } /// @@ -2634,6 +2845,17 @@ public void PropagateRule(string rulepath) childpath[i].CardinalityMax = objpath[i].CardinalityMax; childpath[i].Description = objpath[i].Description; childpath[i].Identification = objpath[i].Identification; + + if(childpath[i] is DocModelRuleEntity) + { + DocModelRuleEntity dmeChild = (DocModelRuleEntity)childpath[i]; + DocModelRuleEntity dmeObj = (DocModelRuleEntity)objpath[i]; + dmeChild.References.Clear(); + foreach(DocTemplateDefinition dtdRef in dmeObj.References) + { + dmeChild.References.Add(dtdRef); + } + } } } @@ -2652,6 +2874,19 @@ internal bool IsTemplateReferenced(DocTemplateDefinition docTemplateDefinition) return false; } + + internal void Rename(DocSchema docSchema, DocDefinition docDefinition, DocAttribute docAttribute, string newname) + { + foreach (DocModelRule docRule in this.Rules) + { + docRule.RenameDefinition(docSchema, docDefinition, docAttribute, newname); + } + + foreach (DocTemplateDefinition docSub in this.Templates) + { + docSub.Rename(docSchema, docDefinition, docAttribute, newname); + } + } } // this is kept as single structure (rather than on ConceptRoot) such that all formatting info can be easily accessed in one place, and not comingle usage of concepts @@ -3138,6 +3373,8 @@ public void RenameParameter(string identification, DocProject docProject, DocTem return; } + string oldvalue = this.Identification; + // otherwise renaming or clearing foreach(DocModelView docView in docProject.ModelViews) { @@ -3145,15 +3382,31 @@ public void RenameParameter(string identification, DocProject docProject, DocTem { foreach(DocTemplateUsage docConcept in docRoot.Concepts) { - docConcept.RenameParameter(docTemplateDefinition, this.Identification, identification); + docConcept.RenameParameter(docTemplateDefinition, oldvalue, identification); + + // also try sub-templates (one-level deep for now) + foreach (DocTemplateDefinition sub in docTemplateDefinition.Templates) + { + docConcept.RenameParameter(sub, oldvalue, identification); + } } } } // now update this.Identification = identification; + + } + + + internal virtual void RenameDefinition(DocSchema docSchema, DocDefinition docDefinition, DocAttribute docAttribute, string newname) + { + // recurse + foreach (DocModelRule docRule in this.Rules) + { + docRule.RenameDefinition(docSchema, docDefinition, docAttribute, newname); + } } - } public class DocModelRuleAttribute : DocModelRule @@ -3537,26 +3790,16 @@ public override void BuildParameterList(IList list) return checkcard; } + + //internal override void RenameDefinition(DocSchema docSchema, DocDefinition docDefinition, DocAttribute docAttribute, string newname) + //{ + //} } public class DocModelRuleEntity : DocModelRule { [DataMember(Order = 0)] private List _References; // IfcDoc 6.3: references to chained templates - - public override void BuildParameterList(IList list) - { - // new: allow specifying value parameter (only for base types though) - -#if false //-- entity rules are only for referencing by rules, not for parameters - // add ourselves if marked as parameter - if (!String.IsNullOrEmpty(this.Identification)) - { - list.Add(this); - } -#endif - - base.BuildParameterList(list); - } + [DataMember(Order = 1)] private string _Prefix; public List References { @@ -3571,11 +3814,46 @@ public List References } } + public string Prefix + { + get + { + return this._Prefix; + } + set + { + this._Prefix = value; + } + } + public override bool IsTemplateReferenced(DocTemplateDefinition docTemplate) { return this.References.Contains(docTemplate); } + internal override void RenameDefinition(DocSchema docSchema, DocDefinition docDefinition, DocAttribute docAttribute, string newname) + { + if (this.Name.Equals(docDefinition.Name)) + { + if (docAttribute == null) + { + this.Name = newname; + } + else + { + foreach (DocModelRule docRule in this.Rules) + { + if (docRule.Name.Equals(docAttribute.Name)) + { + docRule.Name = newname; + } + } + } + } + + base.RenameDefinition(docSchema, docDefinition, docAttribute, newname); + } + /// /// Validates rules for an entity. /// @@ -3683,7 +3961,7 @@ public class DocModelRuleConstraint : DocModelRule public override void Delete() { - if(this.Expression != null) + if (this.Expression != null) { this.Expression.Delete(); } @@ -3706,6 +3984,18 @@ internal override void EmitInstructions( generator.Emit(OpCodes.Ret); } } + + /// + /// Formats expression according to mvdXML syntax. + /// + /// + public string FormatExpression() + { + if (this.Expression == null) + return null; + + return this.Expression.ToString(); + } } // Operators are a strict subset of .NET MSIL operators @@ -3853,6 +4143,7 @@ public override string ToString(DocTemplateDefinition dtd) if (this.Reference != null && this.Value != null) { + string metricname = "Value"; string metrichead = ""; string metrictail = ""; string suffix = " " + opname + " " + this.Value.ToString(dtd); @@ -3861,20 +4152,26 @@ public override string ToString(DocTemplateDefinition dtd) case DocOpCode.LoadLength: metrichead = "SIZEOF("; metrictail = ")"; + metricname = "Length"; break; case DocOpCode.IsInstance: metrichead = "TYPEOF("; metrictail = ")"; + metricname = "Type"; break; case DocOpCode.IsUnique: metrichead = "UNIQUE("; metrictail = ")"; suffix = ""; + metricname = "Unique"; break; } - return metrichead + this.Reference.ToString(dtd) + metrictail + suffix; + //return metrichead + this.Reference.ToString(dtd) + metrictail + suffix; + + // new: mvdXML syntax + return this.Reference.ToString(dtd) + "[" + metricname + "]" + suffix; } return null; @@ -4421,6 +4718,14 @@ internal override LocalBuilder Emit( return null; } + public override string ToString(DocTemplateDefinition template) + { + if (this.ExpressionA == null || this.ExpressionB == null) + return String.Empty; + + return "(" + this.ExpressionA.ToString() + " " + this.Operation.ToString().ToUpper() + " " + this.ExpressionB.ToString() + ")"; + } + } /// @@ -4867,7 +5172,7 @@ public override string ToString() if(String.IsNullOrEmpty(this.Literal)) return "NULL"; - return this.Literal; + return "'" + this.Literal + "'"; } } @@ -5222,6 +5527,14 @@ public void RenameParameter(DocTemplateDefinition template, string oldid, string { docSub.RenameParameter(template, oldid, newid); } + + foreach(DocTemplateItem docItem in this.Items) + { + foreach(DocTemplateUsage docUsage in docItem.Concepts) + { + docUsage.RenameParameter(template, oldid, newid); + } + } } public void ResetValidation() @@ -5427,15 +5740,23 @@ public override string ToString() return sb.ToString(); } } + + // color-coding: + // Color | Name | Optional Key______ Reference_ System___ + // 0xFF0000 | Red | ? T F F // public key for uniquely identifying (separate from any system keys) + // 0x | Orange | ? ? T F // required input from constrained list + // 0x | Yellow | F F F F // required input + // 0x | Green | T F F F // optional input + // 0x | Blue | T ? ? T // system calculation (e.g. Energy Analysis) + // 0x | Purple | F ? ? T // system mapping (e.g. GUID) + public class DocTemplateItem : DocObject // now inherits from DocObject { [DataMember(Order = 0)] private List _Concepts;// IfcDoc 6.3: for parameters consisting of lists of objects -- translates to nested concepts in mvdXML [DataMember(Order = 1)] private bool _Optional; // IfcDoc 8.7: indicate whether item is optional - //[DataMember(Order = 0), Obsolete] private string _PredefinedType; // e.g. 'TOGGLESWITCH' - //[DataMember(Order = 1), Obsolete] private string _Field1; // e.g. 'Power' - [DataMember(Order = 2), Obsolete] private string _Field2; // e.g. 'The power from the circuit.' - [DataMember(Order = 3), Obsolete] private string _Field3; // e.g. 'ELECTRICAL' - [DataMember(Order = 4), Obsolete] private string _Field4; // e.g. 'SOURCE' + [DataMember(Order = 2)] private bool _Reference; // IfcDoc 11.2 (changed from obsolete string): item is constrained by referenced objects or value list + [DataMember(Order = 3)] private bool _Key; // IfcDoc 11.2 (changed from obsolete string): item is used as primary key + [DataMember(Order = 4)] private bool _System; // IfcDoc 11.2 (changed from obsolete string): item is managed by system - should not be touched by user // new in 2.5 [DataMember(Order = 5)] private string _RuleInstanceID; // id of the entity rule to instantiate for each item @@ -5470,6 +5791,158 @@ public bool Optional } } + public bool Reference + { + get + { + return this._Reference; + } + set + { + this._Reference = value; + } + } + + public bool Key + { + get + { + return this._Key; + } + set + { + this._Key = value; + } + } + + public bool Calculated + { + get + { + return this._System; + } + set + { + this._System = value; + } + } + + public System.Drawing.Color GetColor() + { + if (this.Calculated) + { + if (this.Optional) + { + return System.Drawing.Color.FromArgb(0xFF, 0xCC, 0xCC, 0xFF); //"Calculated"; + } + else + { + return System.Drawing.Color.FromArgb(0xFF, 0xCC, 0x99, 0xFF); //"System"; + } + } + else + { + if (this.Key) + { + return System.Drawing.Color.FromArgb(0xFF, 0xFF, 0x00, 0x00); //"Key"; + } + else if (this.Reference) + { + return System.Drawing.Color.FromArgb(0xFF, 0xFF, 0xCC, 0x99); //"Reference"; + } + else if (this.Optional) + { + return System.Drawing.Color.FromArgb(0xFF, 0xCC, 0xFF, 0xCC); //"Optional"; + } + } + + return System.Drawing.Color.FromArgb(0xFF, 0xFF, 0xFF, 0x99); //"Required"; + } + + /// + /// Returns usage according to flags using human-readable subset + /// + /// + public string GetUsage() + { + if (this.Calculated) + { + if (this.Optional) + { + return "Calculated"; + } + else + { + return "System"; + } + } + else + { + if (this.Key) + { + return "Key"; + } + else if (this.Reference) + { + return "Reference"; + } + else if (this.Optional) + { + return "Optional"; + } + } + + return "Required"; + } + + public void SetUsage(string usage) + { + switch(usage) + { + case "Key": + this.Optional = false; + this.Key = true; + this.Reference = false; + this.Calculated = false; + break; + + case "Reference": + this.Optional = false; + this.Key = false; + this.Reference = true; + this.Calculated = false; + break; + + case "Required": + this.Optional = false; + this.Key = false; + this.Reference = false; + this.Calculated = false; + break; + + case "Optional": + this.Optional = true; + this.Key = false; + this.Reference = false; + this.Calculated = false; + break; + + case "Calculated": + this.Optional = true; + this.Key = false; + this.Reference = false; + this.Calculated = true; + break; + + case "System": + this.Optional = false; + this.Key = false; + this.Reference = false; + this.Calculated = true; + break; + } + } + public string RuleInstanceID { get @@ -5580,17 +6053,54 @@ public void SetParameterExpressions(DocExpression[] expressions) /// Returns mvdXML-formatted expression for all parameters /// /// - public string FormatParameterExpressions() + public string FormatParameterExpressions(DocTemplateDefinition template, DocProject docProject, Dictionary map) { StringBuilder sb = new StringBuilder(); DocExpression[] exprs = this.GetParameterExpressions(); if (exprs == null) return null; - foreach (DocExpression exp in exprs) + string[] parmnames = template.GetParameterNames(); + + for (int i = 0; i < exprs.Length; i++) { - sb.Append(exp.ToString()); - sb.Append(";"); + DocExpression exp = exprs[i]; + for (int j = 0; j < parmnames.Length; j++) + { + if (parmnames[j].Equals(exp.Name)) + { + if (sb.Length > 0) + { + sb.Append(" AND "); + } + + DocDefinition docAttrType = template.GetParameterType(exp.Name, map); + if (docAttrType is DocEntity) + { + exp.Metric = DocMetricEnum.Type; + } + /* + DocDefinition docDef = docProject.GetDefinition(template.Type); + if (docDef is DocEntity) + { + DocEntity docEnt = (DocEntity)docDef; + //... get attribute... + DocAttribute docAttr = docEnt.ResolveAttribute(exp., docProject); + if(docAttr != null) + { + DocDefinition docAttrType = docProject.GetDefinition(docAttr.DefinedType); + if(docAttrType != null) + { + exp.Metric = DocMetricEnum.Type; + } + } + }*/ + // force + //template.GetParameterType(paramnames[j], ) + + sb.Append(exp.ToString()); + } + } } return sb.ToString(); } @@ -5719,6 +6229,7 @@ public Dictionary ValidationConstraints } + } /// @@ -6265,28 +6776,34 @@ public int UpdateDiagramPageNumbers() foreach (DocEntity docEnt in this.Entities) { - // temp: force update - int px = (int)(docEnt.DiagramRectangle.X * CtlExpressG.Factor / CtlExpressG.PageX); - int py = (int)(docEnt.DiagramRectangle.Y * CtlExpressG.Factor / CtlExpressG.PageY); - int page = 1 + py * this.DiagramPagesHorz + px; - docEnt.DiagramNumber = page; - - if (docEnt.DiagramNumber > iLastDiagram) + if (docEnt.DiagramRectangle != null) // older files didn't have this, e.g. IFC2x3 baseline { - iLastDiagram = docEnt.DiagramNumber; + // temp: force update + int px = (int)(docEnt.DiagramRectangle.X * CtlExpressG.Factor / CtlExpressG.PageX); + int py = (int)(docEnt.DiagramRectangle.Y * CtlExpressG.Factor / CtlExpressG.PageY); + int page = 1 + py * this.DiagramPagesHorz + px; + docEnt.DiagramNumber = page; + + if (docEnt.DiagramNumber > iLastDiagram) + { + iLastDiagram = docEnt.DiagramNumber; + } } } foreach (DocType docType in this.Types) { - // temp: force update - int px = (int)(docType.DiagramRectangle.X * CtlExpressG.Factor / CtlExpressG.PageX); - int py = (int)(docType.DiagramRectangle.Y * CtlExpressG.Factor / CtlExpressG.PageY); - int page = 1 + py * this.DiagramPagesHorz + px; - docType.DiagramNumber = page; - - if (docType.DiagramNumber > iLastDiagram) + if (docType.DiagramRectangle != null) { - iLastDiagram = docType.DiagramNumber; + // temp: force update + int px = (int)(docType.DiagramRectangle.X * CtlExpressG.Factor / CtlExpressG.PageX); + int py = (int)(docType.DiagramRectangle.Y * CtlExpressG.Factor / CtlExpressG.PageY); + int page = 1 + py * this.DiagramPagesHorz + px; + docType.DiagramNumber = page; + + if (docType.DiagramNumber > iLastDiagram) + { + iLastDiagram = docType.DiagramNumber; + } } } @@ -6875,6 +7392,30 @@ public DocAttribute ResolveParameterAttribute(DocModelRuleAttribute docRuleAttr, return null; } + // new version + internal DocAttribute ResolveAttribute(string attrname, DocProject docProject) + { + foreach (DocAttribute docAttr in this.Attributes) + { + if (docAttr.Name.Equals(attrname)) + return docAttr; + } + + // super + if (!String.IsNullOrEmpty(this.BaseDefinition))// && map.TryGetValue(this.BaseDefinition, out docObj)) + { + DocDefinition docObj = docProject.GetDefinition(this.BaseDefinition); + if (docObj is DocEntity) + { + DocEntity docSuper = (DocEntity)docObj; + return docSuper.ResolveAttribute(attrname, docProject); + } + } + + return null; + } + + // old version - deprecate internal DocAttribute ResolveAttribute(string attrname, Dictionary map) { foreach (DocAttribute docAttr in this.Attributes) @@ -7578,6 +8119,22 @@ public string ApplicableType this._ApplicableType = value; } } + + public DocEntity[] GetApplicableTypeDefinitions(DocProject docProject) + { + if (this.ApplicableType == null) + return null; + + string[] parts = this.ApplicableType.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + DocEntity[] list = new DocEntity[parts.Length]; + for(int i = 0; i < list.Length; i++) + { + string[] entry = parts[i].Split('/'); + list[i] = docProject.GetDefinition(entry[0]) as DocEntity; + } + + return list; + } } /// @@ -7638,8 +8195,27 @@ internal DocProperty GetProperty(string p) return null; } + + /// + /// Indicates whether property should be shown in documentation, according to its type. + /// + /// + public bool IsVisible() + { + return (this.PropertySetType != "NOTDEFINED"); + } } + public enum DocStateEnum // matches IfcStateEnum + { + READWRITE = 0, + READONLY = 1, + LOCKED = 2, + READWRITELOCKED = 3, + READONLYLOCKED = 4, + } + + /// /// Property definition /// @@ -7649,6 +8225,7 @@ public class DocProperty : DocObject [DataMember(Order = 1)] private string _PrimaryDataType; [DataMember(Order = 2)] private string _SecondaryDataType; [DataMember(Order = 3)] private List _Elements; // enumerated or complex properties + [DataMember(Order = 4)] private DocStateEnum _AccessState; // V10.5 public DocProperty() { @@ -7703,6 +8280,18 @@ public List Elements } } + public DocStateEnum AccessState + { + get + { + return this._AccessState; + } + set + { + this._AccessState = value; + } + } + protected internal override void FindQuery(string query, bool searchtext, List results) { base.FindQuery(query, searchtext, results); @@ -7861,6 +8450,7 @@ internal DocQuantity GetQuantity(string p) public class DocQuantity : DocObject { [DataMember(Order = 0)] private DocQuantityTemplateTypeEnum _QuantityType; // IfcQuantityWeight, IfcQuantityLength, etc. + [DataMember(Order = 1)] private DocStateEnum _AccessState; // V10.5 [Category("Quantity")] public DocQuantityTemplateTypeEnum QuantityType @@ -7874,6 +8464,19 @@ public DocQuantityTemplateTypeEnum QuantityType this._QuantityType = value; } } + + public DocStateEnum AccessState + { + get + { + return this._AccessState; + } + set + { + this._AccessState = value; + } + } + } public enum DocQuantityTemplateTypeEnum @@ -8194,6 +8797,8 @@ public enum DocChangeAspectEnum INSTANTIATION = 3, AGGREGATION = 4, SCHEMA = 5, + XSDFORMAT = 6, // New in IfcDoc V10.6 + XSDTAGLESS = 7, // New in IfcDoc V10.6 } public class DocExample : DocVariableSet // inherited in 4.2 to contain ApplicableType (was DocObject) @@ -8201,8 +8806,9 @@ public class DocExample : DocVariableSet // inherited in 4.2 to contain Applicab [DataMember(Order = 0)] private List _Examples; // added in 4.3 [DataMember(Order = 1)] private List _ApplicableTemplates; // added in 4.9 [DataMember(Order = 2)] private DocModelView _ModelView;// added in 5.3; deprecated in 7.8 (replaced with collection that follows) - [DataMember(Order = 3)] private byte[] _File; // added in 7.2 - encoded data of file in IFC format + [DataMember(Order = 3)] private byte[] _File; // added in 7.2 - encoded data of file in IFC format -- if stored internally [DataMember(Order = 4)] private List _Views; // added in 7.8 + [DataMember(Order = 5)] private string _Path; // path to external file which may be IFC or some other format to be converted -- added in V11.2 public DocExample() { @@ -8266,6 +8872,18 @@ public byte[] File } } + public string Path + { + get + { + return this._Path; + } + set + { + this._Path = value; + } + } + protected internal override void FindQuery(string query, bool searchtext, List results) { base.FindQuery(query, searchtext, results); @@ -8424,6 +9042,6 @@ interface IFormatExtension /// /// /// - string FormatDefinitions(DocProject docProject, Dictionary map, Dictionary included); + string FormatDefinitions(DocProject docProject, DocPublication docPublication, Dictionary map, Dictionary included); } } diff --git a/SchemaMvd.cs b/SchemaMvd.cs index 239bd8c2..1caec086 100644 --- a/SchemaMvd.cs +++ b/SchemaMvd.cs @@ -42,13 +42,23 @@ public static Dictionary Types } } + public enum StatusEnum + { + [XmlEnum("sample")] Sample = 0, // default + [XmlEnum("proposal")] Proposal = 1, + [XmlEnum("mandatory")] Draft = 2, + [XmlEnum("candidate")] Candidate = 3, + [XmlEnum("final")] Final = 4, + [XmlEnum("deprecated")] Deprecated = -1, + } + public abstract class Identity : SEntity { [DataMember(Order = 0), XmlAttribute("uuid")] public Guid Uuid; [DataMember(Order = 1), XmlAttribute("name")] public string Name; [DataMember(Order = 2), XmlAttribute("code")] public string Code; // e.g. 'bsi-100' [DataMember(Order = 3), XmlAttribute("version")] public string Version; - [DataMember(Order = 4), XmlAttribute("status")] public string Status; // e.g. 'draft' + [DataMember(Order = 4), XmlAttribute("status")] public StatusEnum Status; // e.g. 'draft' [DataMember(Order = 5), XmlAttribute("author")] public string Author; [DataMember(Order = 6), XmlAttribute("owner")] public string Owner; // e.g. 'buildingSMART international' [DataMember(Order = 7), XmlAttribute("copyright")] public string Copyright; @@ -65,8 +75,8 @@ public class mvdXML : Identity [DataMember(Order = 0)] public List Templates = new List(); [DataMember(Order = 1)] public List Views = new List(); - [XmlAttribute("schemalocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")] - public string schemalocation = "http://buildingsmart-tech.org/mvd/XML/1.1 http://www.buildingsmart-tech.org/mvd/XML/1.1/mvdXML_V1.1.xsd"; + [XmlAttribute("schemaLocation", Namespace="http://www.w3.org/2001/XMLSchema-instance")] + public string schemaLocation = "http://www.buildingsmart-tech.org/mvd/XML/1.1 http://www.buildingsmart-tech.org/mvd/XML/1.1/mvdXML_V1.1_add1.xsd"; // namespaces in order of attempts to load public static readonly string[] Namespaces = new string[] @@ -75,7 +85,7 @@ public class mvdXML : Identity "http://buildingsmart-tech.org/mvdXML/mvdXML1-0", "http://buildingsmart-tech.org/mvdXML/mvdXML_V1-0", "http://buildingsmart-tech.org/mvdXML/mvdXML1-1", - "http://www.buildingsmart-tech.org/mvd/XML/1.1" + "http://buildingsmart-tech.org/mvd/XML/1.1" }; public const string DefaultNamespace = "http://buildingsmart-tech.org/mvd/XML/1.1"; @@ -159,8 +169,10 @@ public class ModelView : Element [XmlType("Definition")] public class Definition : SEntity { - [DataMember(Order = 0)] public Body Body = new Body(); + [DataMember(Order = 0), XmlElement("Body")] public List Body; [DataMember(Order = 1), XmlElement("Link")] public List Links; + //[DataMember(Order = 2), XmlAttribute("lang")] public string Lang; + [DataMember(Order = 2), XmlAttribute("tags")] public string Tags; } #if false @@ -231,6 +243,10 @@ public void ReadXml(System.Xml.XmlReader reader) public void WriteXml(System.Xml.XmlWriter writer) { + if (!String.IsNullOrEmpty(this.Lang)) + { + writer.WriteAttributeString("lang", this.Lang); + } writer.WriteCData(this.Content); } @@ -238,8 +254,8 @@ public void WriteXml(System.Xml.XmlWriter writer) } //[XmlType("Link")] - public class Link : SEntity, - IXmlSerializable + public class Link : SEntity +// IXmlSerializable { [DataMember(Order = 0), XmlAttribute("lang")] public string Lang; [DataMember(Order = 1), XmlAttribute("category")] public CategoryEnum Category; @@ -247,6 +263,7 @@ public class Link : SEntity, [DataMember(Order = 3), XmlAttribute("href")] public string Href; [DataMember(Order = 4), XmlIgnore] public string Content; +#if false #region IXmlSerializable Members public System.Xml.Schema.XmlSchema GetSchema() @@ -259,29 +276,36 @@ public void ReadXml(System.Xml.XmlReader reader) //... read attributes... reader.ReadStartElement(); - this.Content = reader.ReadString(); + //this.Content = reader.ReadString(); reader.ReadEndElement(); } public void WriteXml(System.Xml.XmlWriter writer) { - writer.WriteAttributeString("lang", this.Lang); + if (!String.IsNullOrEmpty(this.Lang)) + { + writer.WriteAttributeString("lang", this.Lang); + } writer.WriteAttributeString("category", this.Category.ToString()); - writer.WriteAttributeString("title", this.Title); + if (!String.IsNullOrEmpty(this.Title)) + { + writer.WriteAttributeString("title", this.Title); + } writer.WriteAttributeString("href", this.Href); - writer.WriteCData(this.Content); + //writer.WriteCData(this.Content); } #endregion +#endif } public enum CategoryEnum { - [XmlEnum("definition")] Definition = 0, - [XmlEnum("agreement")] Agreement = 1, - [XmlEnum("diagram")] Diagram = 2, - [XmlEnum("instantiation")] Instantiation = 3, - [XmlEnum("example")] Example = 4, + [XmlEnum("definition")] definition = 0, + [XmlEnum("agreement")] agreement = 1, + [XmlEnum("diagram")] diagram = 2, + [XmlEnum("instantiation")] instantiation = 3, + [XmlEnum("example")] example = 4, } [XmlType("ExchangeRequirement")] @@ -295,7 +319,7 @@ public class ConceptRoot : Element { [DataMember(Order = 0)] public ApplicabilityRules Applicability; [DataMember(Order = 1), XmlAttribute("applicableRootEntity")] public string ApplicableRootEntity; // e.g. 'IfcBeam' - [DataMember(Order = 2)] public List Concepts = new List(); // really Concept but fixed according to sample data to get xml serializer working + [DataMember(Order = 2)] public List Concepts;// = new List(); // really Concept but fixed according to sample data to get xml serializer working } [XmlType("ApplicabilityRules")] @@ -326,7 +350,15 @@ public class EntityRule : AbstractRule [DataMember(Order = 0), XmlAttribute("EntityName")] public string EntityName; [DataMember(Order = 1)] public List AttributeRules; [DataMember(Order = 2)] public List Constraints; - [DataMember(Order = 3)] public List References; // MVDXML 1.1 -- links to concept templates defined on referenced entity + //[DataMember(Order = 3)] public List References; // MVDXML 1.1 -- links to concept templates defined on referenced entity + [DataMember(Order = 3)] public References References; + } + + [XmlType("References")] + public class References + { + [DataMember(Order = 0), XmlAttribute("IdPrefix")] public string IdPrefix; + [DataMember(Order = 1), XmlElement(typeof(TemplateRef))] public List Template; // MVDXML 1.1 -- links to concept templates defined on referenced entity } [XmlType("Constraint")] diff --git a/ValuePath.cs b/ValuePath.cs index aac5ae84..6df5b069 100644 --- a/ValuePath.cs +++ b/ValuePath.cs @@ -312,20 +312,18 @@ public object GetValue(SEntity target, Dictionary parameters) if (this.m_property == null) { return target; // for general case, if no attribute specified, then return object itself - //return target.GetType(); // need some way to extract type directly such as for COBie } object value = null; if (this.m_property.PropertyType.IsGenericType && - typeof(System.Collections.IList).IsAssignableFrom(this.m_property.PropertyType) && - (typeof(SEntity).IsAssignableFrom(this.m_property.PropertyType.GetGenericArguments()[0]) || this.m_property.PropertyType.GetGenericArguments()[0].IsInterface)) + typeof(System.Collections.IList).IsAssignableFrom(this.m_property.PropertyType))// && + // (typeof(SEntity).IsAssignableFrom(this.m_property.PropertyType.GetGenericArguments()[0]) || this.m_property.PropertyType.GetGenericArguments()[0].IsInterface)) { System.Collections.IList list = (System.Collections.IList)this.m_property.GetValue(target, null); // if expecting array, then return it. - //if (this.m_vector) - if (this.m_vector || (this.m_identifier == null && this.m_inner == null)) // 2014-01-20: RICS export of door schedules to show quantity + if (this.m_vector || (this.m_identifier == null && this.m_inner == null)) { return list; } @@ -357,95 +355,127 @@ public object GetValue(SEntity target, Dictionary parameters) if (list != null) { + int listindex = 0; // identify by 1-based numeric index within list + if(!String.IsNullOrEmpty(this.m_identifier) && Int32.TryParse(this.m_identifier, out listindex) && listindex > 0 && listindex <= list.Count) + { + object eachelem = list[listindex - 1]; + + if (this.m_inner != null && eachelem is SEntity) + { + object eachvalue = this.m_inner.GetValue((SEntity)eachelem, parameters); + if (eachvalue != null) + { + return eachvalue; + } + } + else + { + return eachelem; + } + } + foreach (object eachelem in list) { // derived class may have its own specific property (e.g. IfcSIUnit, IfcConversionBasedUnit) - if (this.m_identifier != null) + if (!String.IsNullOrEmpty(this.m_identifier)) { Type eachtype = eachelem.GetType(); - DefaultPropertyAttribute[] attrs = (DefaultPropertyAttribute[])eachtype.GetCustomAttributes(typeof(DefaultPropertyAttribute), true); - PropertyInfo propElem = null; - if (attrs.Length > 0) - { - propElem = eachtype.GetProperty(attrs[0].Name); - } - else - { - propElem = eachtype.GetProperty("Name"); - } - if (propElem != null) + // special cases for properties and quantities + if (eachtype.Name.Equals("IfcRelDefinesByProperties")) { - object eachname = propElem.GetValue(eachelem, null); // IStepValueString, or Enum (e.g. IfcNamedUnit.UnitType) - -#if false - // special case for properties/quantities - if (eachname == null && eachelem is IfcRelDefinesByProperties) + FieldInfo fieldRelatingPropertyDefinition = eachtype.GetField("RelatingPropertyDefinition"); + object ifcPropertySet = fieldRelatingPropertyDefinition.GetValue(eachelem); + if (ifcPropertySet != null) { - IfcRelDefinesByProperties rdp = (IfcRelDefinesByProperties)eachelem; - eachname = rdp.RelatingPropertyDefinition.Name.GetValueOrDefault().Value; - } -#endif - if (eachname != null) - { - if (this.m_identifier.StartsWith("@")) + Type typePropertySet = ifcPropertySet.GetType(); + FieldInfo fieldName = typePropertySet.GetField("Name"); + object ifcLabel = fieldName.GetValue(ifcPropertySet); + if (ifcLabel != null) { - // parameterized query -- substitute parameter - if (parameters != null) + FieldInfo fieldValue = ifcLabel.GetType().GetField("Value"); + if (fieldValue != null) { - SEntity specelem = null; - if (parameters.TryGetValue(this.m_identifier.Substring(1), out specelem)) + string sval = fieldValue.GetValue(ifcLabel) as string; + if (this.m_identifier.Equals(sval)) { + // matches! if (this.m_inner != null) { - object eachvalue = this.m_inner.GetValue(specelem, parameters); - return eachvalue; // return no matter what, since specific element was requested. + object eachvalue = this.m_inner.GetValue((SEntity)eachelem, parameters); + if (eachvalue != null) + { + return eachvalue; + } } else { - return specelem; + return eachelem; } } } - else - { - return null; // no parameters specified, so can't resolve value. - } } - else if (this.m_identifier.Equals(eachname.ToString())) + } + } + else + { + // fall back on Name field for properties or quantities + FieldInfo fieldName = eachtype.GetField("Name"); + if (fieldName != null) + { + object ifcLabel = fieldName.GetValue(eachelem); + if (ifcLabel != null) { - if (this.m_inner != null) + FieldInfo fieldValue = ifcLabel.GetType().GetField("Value"); + if (fieldValue != null) { - // yes -- drill in - object eachvalue = this.m_inner.GetValue((SEntity)eachelem, parameters); - if (eachvalue != null) + string sval = fieldValue.GetValue(ifcLabel) as string; + if (this.m_identifier.Equals(sval)) { - return eachvalue; // if no value, keep going until compatible match is found + // matches! + if (this.m_inner != null) + { + object eachvalue = this.m_inner.GetValue((SEntity)eachelem, parameters); + if (eachvalue != null) + { + return eachvalue; + } + } + else + { + return eachelem; + } + } } - else - { - return eachelem; - } } } } } - else if (this.m_inner != null) + else { - object eachvalue = this.m_inner.GetValue((SEntity)eachelem, parameters); - if (eachvalue != null) + // use first non-null item within inner reference + if (this.m_inner != null && eachelem is SEntity) { - return eachvalue; + object eachvalue = this.m_inner.GetValue((SEntity)eachelem, parameters); + if (eachvalue != null) + { + return eachvalue; + } + } + else + { + return eachelem; } - } - else - { - return eachelem; } } + + return null; // not found } + + + } else if (this.m_inner != null) { @@ -489,9 +519,150 @@ public object GetValue(SEntity target, Dictionary parameters) } + /// + /// Extracts description of referenced data, using properties, quantities, and attributes. + /// + /// + /// Optional model view, for retrieving more specific descriptions such as for ports + /// + public string GetDescription(Dictionary mapEntity, DocModelView docView) + { + string desc = null; + CvtValuePath valpath = this; + if (valpath != null && + valpath.Property != null && + valpath.Property.Name.Equals("IsDefinedBy") && + valpath.InnerPath != null && valpath.InnerPath.Type.Name.Equals("IfcRelDefinesByProperties")) + { + DocObject docPset = null; + mapEntity.TryGetValue(valpath.Identifier, out docPset); + if (docPset is DocPropertySet) + { + DocProperty docProp = ((DocPropertySet)docPset).GetProperty(valpath.InnerPath.InnerPath.Identifier); + if (docProp != null) + { + desc = docProp.Documentation;// localize?? + } + } + else if (docPset is DocQuantitySet) + { + DocQuantity docProp = ((DocQuantitySet)docPset).GetQuantity(valpath.InnerPath.InnerPath.Identifier); + if (docProp != null) + { + desc = docProp.Documentation;// localize?? + } + } + } + else if (valpath != null && + valpath.Property != null && + valpath.Property.Name.Equals("HasPropertySets") && + valpath.InnerPath != null && valpath.InnerPath.Type.Name.Equals("IfcPropertySet")) + { + DocObject docPset = null; + mapEntity.TryGetValue(valpath.Identifier, out docPset); + + if (docPset is DocPropertySet) + { + DocProperty docProp = ((DocPropertySet)docPset).GetProperty(valpath.InnerPath.Identifier); + if (docProp != null) + { + desc = docProp.Documentation;// localize?? + } + } + } + else if(valpath != null && + valpath.Property != null && + valpath.Property.Name.Equals("Material") && + valpath.InnerPath != null && valpath.InnerPath.Type.Name.Equals("IfcMaterial") && + valpath.InnerPath.InnerPath != null && valpath.InnerPath.InnerPath.Type.Name.Equals("IfcMaterialProperties")) + { + DocObject docPset = null; + mapEntity.TryGetValue(valpath.InnerPath.Identifier, out docPset); + + if(docPset is DocPropertySet) + { + DocProperty docProp = ((DocPropertySet)docPset).GetProperty(valpath.InnerPath.InnerPath.Identifier); + if(docProp != null) + { + desc = docProp.Documentation; + } + } + } + else if (valpath != null && + valpath.Property != null && + valpath.Property.Name.Equals("IsNestedBy") && + valpath.InnerPath != null && valpath.InnerPath.InnerPath != null && valpath.InnerPath.InnerPath != null) + { + CvtValuePath pathInner = valpath.InnerPath.InnerPath; + if (pathInner.Type != null && pathInner.Type.Name.Equals("IfcDistributionPort")) + { + string portname = valpath.InnerPath.Identifier; + if (pathInner.Property != null && pathInner.Property.Name.Equals("IsDefinedBy")) + { + // lookup description of property at port + DocObject docPset = null; + mapEntity.TryGetValue(pathInner.Identifier, out docPset); + + if (docPset is DocPropertySet) + { + DocProperty docProp = ((DocPropertySet)docPset).GetProperty(pathInner.InnerPath.InnerPath.Identifier); + if (docProp != null) + { + desc = portname + ": " + docProp.Documentation; + } + } + } + else + { + desc = portname; + + // lookup description of port + Guid guidPortNesting = new Guid("bafc93b7-d0e2-42d8-84cf-5da20ee1480a"); + foreach (DocConceptRoot docRoot in docView.ConceptRoots) + { + if (docRoot.ApplicableEntity == valpath.Type) + { + foreach(DocTemplateUsage docConcept in docRoot.Concepts) + { + if(docConcept.Definition != null && docConcept.Definition.Uuid == guidPortNesting) + { + foreach (DocTemplateItem docItem in docConcept.Items) + { + if(docItem.Name.Equals(portname)) + { + desc = docItem.Documentation; + break; + } + } + } + } + } + } + } + } + } + + if (desc == null) + { + while (valpath != null && valpath.InnerPath != null && valpath.InnerPath.Property != null) + { + valpath = valpath.InnerPath; + } + if (valpath != null && valpath.Property != null) + { + desc = valpath.Property.Documentation; + } + else if (valpath != null) + { + desc = "The IFC class identifier indicating the subtype of object."; + } + } + + return desc; + } } diff --git a/app.config b/app.config index 793131fb..bcb2a20c 100644 --- a/app.config +++ b/app.config @@ -31,6 +31,9 @@ False + + + diff --git a/content/copyright.htm b/content/copyright.htm index 248fc177..19a9785a 100644 --- a/content/copyright.htm +++ b/content/copyright.htm @@ -12,7 +12,7 @@

    - INDUSTRY FOUNDATION CLASSES RESPOSITORY + INDUSTRY FOUNDATION CLASSES

      @@ -27,7 +27,7 @@

      

    "); + string desc = ""; + CvtValuePath valpath = CvtValuePath.Parse(expr, map); //todo: move out of loop + colmaps.Add(valpath); + if (valpath != null) + { + desc = /*valpath.GetDescription(map) + " " + */valpath.ToString().Replace("\\", " "); + } + + sb.Append(""); sb.Append(name); - sb.Append("
    "); + sbRow.Append(""); + + sbRow.Append(((Double)value).ToString("N3")); + } + else if(value is List) + { + sbRow.Append(">"); + + // latitude or longitude + List intlist = (List)value; + if(intlist.Count >= 3) + { + sbRow.Append(intlist[0] + "° " + intlist[1] + "' " + intlist[2] + "\""); + } + } + else if (value != null) { - sb.Append(value.ToString()); // todo: html-encode + sbRow.Append(">"); + sbRow.Append(value.ToString()); // todo: html-encode } } else { - sb.Append(" "); + sbRow.Append(">"); + sbRow.Append(" "); } } + else + { + sbRow.Append(">"); + } - sb.Append("
    - Copyright © 1996-2013 buildingSMART International + Copyright © 1996-2016 buildingSMART International Limited. All rights reserved.

    Any technical documentation made available by buildingSMART diff --git a/content/ifc-styles.css b/content/ifc-styles.css index cad8c7f5..ac3e7695 100644 --- a/content/ifc-styles.css +++ b/content/ifc-styles.css @@ -4,7 +4,7 @@ body { font-family: Arial, Helvetica, sans-serif; - font-size: 14px; + font-size: small; counter-reset: index1 index2 index3 index4 index5; } @@ -79,7 +79,7 @@ h1, h2, h3, h4, h5 { } h1 { - font-size: 24px; + font-size: x-large; margin-top: 12px; margin-bottom: 12px; } @@ -110,7 +110,7 @@ h1.annex { } h2 { - font-size: 20px; + font-size: large; margin-top: 30px; margin-bottom: 10px; } @@ -126,7 +126,7 @@ h2.num:before { } h3 { - font-size: 18px; + font-size: medium; margin-top: 27px; margin-bottom: 9px; } @@ -142,7 +142,7 @@ h3.num:before { } h4 { - font-size: 16px; + font-size: medium; margin-top: 24px; margin-bottom: 8px; } @@ -158,7 +158,7 @@ h4.num:before { } h5 { - font-size: 16px; + font-size: medium; margin-top: 24px; margin-bottom: 8px; } @@ -177,7 +177,7 @@ h5.num:before { /* styles for paragraphs */ p { - font-size: 13px; + font-size: small; line-height: 125%; margin-top: 6px; margin-bottom: 0px; @@ -268,7 +268,7 @@ p.table { } blockquote { - font-size: 11px; + font-size: x-small; line-height: 120%; margin-top: 6px; margin-bottom: 6px; @@ -279,7 +279,7 @@ blockquote { } td blockquote { - font-size: 10px; + font-size: smaller; line-height: 120%; margin-top: 3px; margin-bottom: 3px; @@ -290,7 +290,7 @@ td blockquote { } blockquote.std { - font-size: 11px; + font-size: x-small; } blockquote.note { @@ -334,12 +334,12 @@ blockquote.change-ifc2x4 { tt.std, tt.spf { font-family: monospace; - font-size: 11px; + font-size: x-small; white-space: pre-wrap; } summary { - font-size: 14px; + font-size: medium; font-weight: bolder; line-height: 125%; margin-top: 12px; @@ -532,7 +532,7 @@ ul.inner { } li { - font-size: 12px; + font-size: small; margin-top: 4px; padding-top: 1px; margin-bottom: 2px; @@ -560,11 +560,11 @@ li.bold { } li.small { - font-size: 11px; + font-size: x-small; } li.note { - font-size: 10px; + font-size: x-small; margin-bottom: 2px; padding-bottom: 0px; margin-top: 2px; @@ -587,7 +587,7 @@ dl { } dt { - font-size: 13px; + font-size: small; } dt.normativereference { @@ -603,7 +603,7 @@ dt.term { } dd { - font-size: 13px; + font-size: small; } dd.term { @@ -682,18 +682,18 @@ tr.std { } tr.inherit { - font-size: 11px; + font-size: x-small; vertical-align: top; } tr.inherit-shadow { - font-size: 11px; + font-size: x-small; vertical-align: top; background-color: #eeeeff; } td { - font-size: 11px; + font-size: x-small; text-align: left; vertical-align: top; } @@ -726,7 +726,7 @@ td.content { } td.menu { - font-size: 70%; + font-size: smaller; padding-left: 0px; padding-right: 0px; padding-top: 1px; @@ -734,7 +734,7 @@ td.menu { } td.example { - font-size: 11px; + font-size: x-small; } td.head { @@ -767,7 +767,7 @@ td.right { } td.inherit { - font-size: 11px; + font-size: x-small; padding-left: 2px; padding-right: 0px; padding-top: 2px; @@ -776,7 +776,7 @@ td.inherit { } th { - font-size: 11px; + font-size: x-small; font-weight: bold; vertical-align: top; } @@ -796,7 +796,7 @@ table.gridtable { table.gridtable th { border-width: 1px; - font-size: 11px; + font-size: x-small; text-align: left; padding: 4px; border-style: solid; @@ -806,7 +806,7 @@ table.gridtable th { table.gridtable td { border-width: 1px; - font-size: 11px; + font-size: x-small; padding: 4px; border-style: solid; border-color: #666666; @@ -823,7 +823,7 @@ table.exchange { table.exchange th { border-width: 1px; - font-size: 11px; + font-size: x-small; text-align: left; border-style: solid; border-color: #666666; @@ -832,7 +832,7 @@ table.exchange th { table.exchange td { border-width: 1px; - font-size: 11px; + font-size: x-small; border-style: solid; border-color: #666666; background-color: #ffffff; diff --git a/defaults.mvdxml b/defaults.mvdxml index d4cc82d3..e844ac79 100644 --- a/defaults.mvdxml +++ b/defaults.mvdxml @@ -1,59 +1,52 @@ - - + + - + The concept templates of Object Definition provides the means to define an object occurrence by its object type and attached property and quantity sets.

    ]]>
    - + The concept template Property Sets describes how sets of properties (usually defined by a name, value, unit triple) are associated to objects or object types.

    ]]>
    - + - The concept template Property Sets for Objects describes how an object occurrence can be related to a single or multiple property sets. A property set - contains a single or multiple properties. The data types of - an individual property are single value, enumerated value, - bounded value, table value, reference value, list value, - and combination of property occurrences. -

    - - + The concept template Property Sets for Objects describes how an object occurrence can be related to a single or multiple property sets. A property set contains a single or multiple properties. The data types of an individual property are single value, enumerated value, bounded value, table value, reference value, list value, and combination of property occurrences.

    Property sets can also be related to an object type, see concept Property Sets for Types. They then define the common properties for all occurrences of the same type. If the same property (by name) is provided by the same property set (by name), then the properties directly assigned to the object occurrence override the properties assigned to the object type.

    ]]>
    - - + + - + - + - + - - + + - +